[{"data":1,"prerenderedAt":173947},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch1-python-huan-jing-yu-di-yi-ge-cheng-xu":3,"wiki-doc-nav":1257},{"id":4,"title":5,"body":6,"description":1249,"extension":1250,"meta":1251,"navigation":1252,"path":1253,"seo":1254,"stem":1255,"__hash__":1256},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":8,"toc":1225},"minimark",[9,13,18,22,25,56,59,69,73,76,116,119,168,171,184,187,193,197,202,231,249,256,260,263,292,295,299,302,347,350,369,375,379,384,431,434,454,457,533,537,544,547,565,568,577,580,593,596,605,608,626,629,645,649,653,656,659,680,684,687,690,701,704,710,714,721,749,752,764,767,778,781,787,791,797,852,855,898,901,937,940,976,980,983,1006,1009,1047,1050,1063,1067,1071,1077,1080,1093,1097,1100,1106,1109,1113,1116,1119,1171,1175,1192,1198,1205,1211,1221],[10,11,5],"h1",{"id":12},"_1-python环境与第一个程序",[14,15,17],"h2",{"id":16},"_11-什么是python","1.1 什么是Python",[19,20,21],"p",{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,23,24],{},"理解 Python 时抓住三个关键词：",[26,27,28,32,35],"ol",{},[29,30,31],"li",{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,33,34],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,36,37,38,42,43,42,46,42,49,42,52,55],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[39,40,41],"code",{},"os","、",[39,44,45],{},"sys",[39,47,48],{},"json",[39,50,51],{},"random",[39,53,54],{},"datetime","。",[19,57,58],{},"Python 程序的运行链路：",[60,61,67],"pre",{"className":62,"code":64,"language":65,"meta":66},[63],"language-text","编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n","text","",[39,68,64],{"__ignoreMap":66},[14,70,72],{"id":71},"_12-python解释器","1.2 Python解释器",[19,74,75],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[60,77,81],{"className":78,"code":79,"language":80,"meta":66,"style":66},"language-bash shiki shiki-themes github-light github-dark","python --version\npython3 --version\npython\npython3\n","bash",[39,82,83,96,104,110],{"__ignoreMap":66},[84,85,88,92],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sScJk","python",[84,93,95],{"class":94},"sj4cs"," --version\n",[84,97,99,102],{"class":86,"line":98},2,[84,100,101],{"class":90},"python3",[84,103,95],{"class":94},[84,105,107],{"class":86,"line":106},3,[84,108,109],{"class":90},"python\n",[84,111,113],{"class":86,"line":112},4,[84,114,115],{"class":90},"python3\n",[19,117,118],{},"进入交互模式后，可以直接输入表达式：",[60,120,123],{"className":121,"code":122,"language":91,"meta":66,"style":66},"language-python shiki shiki-themes github-light github-dark",">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[39,124,125,140,145,163],{"__ignoreMap":66},[84,126,127,131,134,137],{"class":86,"line":87},[84,128,130],{"class":129},"szBVR",">>>",[84,132,133],{"class":94}," 1",[84,135,136],{"class":129}," +",[84,138,139],{"class":94}," 2\n",[84,141,142],{"class":86,"line":98},[84,143,144],{"class":94},"3\n",[84,146,147,149,152,156,160],{"class":86,"line":106},[84,148,130],{"class":129},[84,150,151],{"class":94}," print",[84,153,155],{"class":154},"sVt8B","(",[84,157,159],{"class":158},"sZZnC","\"hello python\"",[84,161,162],{"class":154},")\n",[84,164,165],{"class":86,"line":112},[84,166,167],{"class":154},"hello python\n",[19,169,170],{},"退出交互模式：",[60,172,174],{"className":121,"code":173,"language":91,"meta":66,"style":66},"exit()\n",[39,175,176],{"__ignoreMap":66},[84,177,178,181],{"class":86,"line":87},[84,179,180],{"class":94},"exit",[84,182,183],{"class":154},"()\n",[19,185,186],{},"或使用快捷键：",[60,188,191],{"className":189,"code":190,"language":65,"meta":66},[63],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[39,192,190],{"__ignoreMap":66},[14,194,196],{"id":195},"_13-安装python","1.3 安装Python",[198,199,201],"h3",{"id":200},"_131-windows安装","1.3.1 Windows安装",[26,203,204,213,216,222,228],{},[29,205,206,207],{},"打开 Python 官网：",[208,209,210],"a",{"href":210,"rel":211},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[212],"nofollow",[29,214,215],{},"下载 Windows Installer。",[29,217,218,219,55],{},"安装时勾选 ",[39,220,221],{},"Add Python to PATH",[29,223,224,225,55],{},"点击 ",[39,226,227],{},"Install Now",[29,229,230],{},"安装完成后打开命令提示符验证：",[60,232,234],{"className":78,"code":233,"language":80,"meta":66,"style":66},"python --version\npip --version\n",[39,235,236,242],{"__ignoreMap":66},[84,237,238,240],{"class":86,"line":87},[84,239,91],{"class":90},[84,241,95],{"class":94},[84,243,244,247],{"class":86,"line":98},[84,245,246],{"class":90},"pip",[84,248,95],{"class":94},[19,250,251,252,255],{},"如果提示 ",[39,253,254],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[198,257,259],{"id":258},"_132-macos安装","1.3.2 macOS安装",[19,261,262],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[60,264,266],{"className":78,"code":265,"language":80,"meta":66,"style":66},"brew install python\npython3 --version\npip3 --version\n",[39,267,268,279,285],{"__ignoreMap":66},[84,269,270,273,276],{"class":86,"line":87},[84,271,272],{"class":90},"brew",[84,274,275],{"class":158}," install",[84,277,278],{"class":158}," python\n",[84,280,281,283],{"class":86,"line":98},[84,282,101],{"class":90},[84,284,95],{"class":94},[84,286,287,290],{"class":86,"line":106},[84,288,289],{"class":90},"pip3",[84,291,95],{"class":94},[19,293,294],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[198,296,298],{"id":297},"_133-linux安装","1.3.3 Linux安装",[19,300,301],{},"Ubuntu\u002FDebian：",[60,303,305],{"className":78,"code":304,"language":80,"meta":66,"style":66},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[39,306,307,318,335,341],{"__ignoreMap":66},[84,308,309,312,315],{"class":86,"line":87},[84,310,311],{"class":90},"sudo",[84,313,314],{"class":158}," apt",[84,316,317],{"class":158}," update\n",[84,319,320,322,324,326,329,332],{"class":86,"line":98},[84,321,311],{"class":90},[84,323,314],{"class":158},[84,325,275],{"class":158},[84,327,328],{"class":158}," python3",[84,330,331],{"class":158}," python3-pip",[84,333,334],{"class":158}," python3-venv\n",[84,336,337,339],{"class":86,"line":106},[84,338,101],{"class":90},[84,340,95],{"class":94},[84,342,343,345],{"class":86,"line":112},[84,344,289],{"class":90},[84,346,95],{"class":94},[19,348,349],{},"Fedora：",[60,351,353],{"className":78,"code":352,"language":80,"meta":66,"style":66},"sudo dnf install python3 python3-pip\n",[39,354,355],{"__ignoreMap":66},[84,356,357,359,362,364,366],{"class":86,"line":87},[84,358,311],{"class":90},[84,360,361],{"class":158}," dnf",[84,363,275],{"class":158},[84,365,328],{"class":158},[84,367,368],{"class":158}," python3-pip\n",[19,370,371,372,374],{},"Linux 上通常使用 ",[39,373,101],{}," 命令，避免和系统旧版本 Python 冲突。",[14,376,378],{"id":377},"_14-pip包管理器","1.4 pip包管理器",[19,380,381,383],{},[39,382,246],{}," 用来安装第三方库。",[60,385,387],{"className":78,"code":386,"language":80,"meta":66,"style":66},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[39,388,389,398,407,416,423],{"__ignoreMap":66},[84,390,391,393,395],{"class":86,"line":87},[84,392,246],{"class":90},[84,394,275],{"class":158},[84,396,397],{"class":158}," requests\n",[84,399,400,402,405],{"class":86,"line":98},[84,401,246],{"class":90},[84,403,404],{"class":158}," uninstall",[84,406,397],{"class":158},[84,408,409,411,414],{"class":86,"line":106},[84,410,246],{"class":90},[84,412,413],{"class":158}," show",[84,415,397],{"class":158},[84,417,418,420],{"class":86,"line":112},[84,419,246],{"class":90},[84,421,422],{"class":158}," list\n",[84,424,426,428],{"class":86,"line":425},5,[84,427,246],{"class":90},[84,429,430],{"class":158}," freeze\n",[19,432,433],{},"国内网络较慢时可以临时使用镜像：",[60,435,437],{"className":78,"code":436,"language":80,"meta":66,"style":66},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[39,438,439],{"__ignoreMap":66},[84,440,441,443,445,448,451],{"class":86,"line":87},[84,442,246],{"class":90},[84,444,275],{"class":158},[84,446,447],{"class":158}," requests",[84,449,450],{"class":94}," -i",[84,452,453],{"class":158}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,455,456],{},"常见第三方库：",[458,459,460,473],"table",{},[461,462,463],"thead",{},[464,465,466,470],"tr",{},[467,468,469],"th",{},"库",[467,471,472],{},"作用",[474,475,476,485,493,501,509,517,525],"tbody",{},[464,477,478,482],{},[479,480,481],"td",{},"requests",[479,483,484],{},"网络请求",[464,486,487,490],{},[479,488,489],{},"numpy",[479,491,492],{},"数值计算",[464,494,495,498],{},[479,496,497],{},"pandas",[479,499,500],{},"表格数据处理",[464,502,503,506],{},[479,504,505],{},"matplotlib",[479,507,508],{},"绘图",[464,510,511,514],{},[479,512,513],{},"pyecharts",[479,515,516],{},"ECharts 图表",[464,518,519,522],{},[479,520,521],{},"flask",[479,523,524],{},"Web 后端",[464,526,527,530],{},[479,528,529],{},"pytest",[479,531,532],{},"自动化测试",[14,534,536],{"id":535},"_15-虚拟环境","1.5 虚拟环境",[19,538,539,540,543],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[39,541,542],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,545,546],{},"创建虚拟环境：",[60,548,550],{"className":78,"code":549,"language":80,"meta":66,"style":66},"python -m venv .venv\n",[39,551,552],{"__ignoreMap":66},[84,553,554,556,559,562],{"class":86,"line":87},[84,555,91],{"class":90},[84,557,558],{"class":94}," -m",[84,560,561],{"class":158}," venv",[84,563,564],{"class":158}," .venv\n",[19,566,567],{},"Windows 激活：",[60,569,571],{"className":78,"code":570,"language":80,"meta":66,"style":66},".venv\\Scripts\\activate\n",[39,572,573],{"__ignoreMap":66},[84,574,575],{"class":86,"line":87},[84,576,570],{"class":90},[19,578,579],{},"macOS\u002FLinux 激活：",[60,581,583],{"className":78,"code":582,"language":80,"meta":66,"style":66},"source .venv\u002Fbin\u002Factivate\n",[39,584,585],{"__ignoreMap":66},[84,586,587,590],{"class":86,"line":87},[84,588,589],{"class":94},"source",[84,591,592],{"class":158}," .venv\u002Fbin\u002Factivate\n",[19,594,595],{},"退出虚拟环境：",[60,597,599],{"className":78,"code":598,"language":80,"meta":66,"style":66},"deactivate\n",[39,600,601],{"__ignoreMap":66},[84,602,603],{"class":86,"line":87},[84,604,598],{"class":90},[19,606,607],{},"保存依赖：",[60,609,611],{"className":78,"code":610,"language":80,"meta":66,"style":66},"pip freeze > requirements.txt\n",[39,612,613],{"__ignoreMap":66},[84,614,615,617,620,623],{"class":86,"line":87},[84,616,246],{"class":90},[84,618,619],{"class":158}," freeze",[84,621,622],{"class":129}," >",[84,624,625],{"class":158}," requirements.txt\n",[19,627,628],{},"安装依赖：",[60,630,632],{"className":78,"code":631,"language":80,"meta":66,"style":66},"pip install -r requirements.txt\n",[39,633,634],{"__ignoreMap":66},[84,635,636,638,640,643],{"class":86,"line":87},[84,637,246],{"class":90},[84,639,275],{"class":158},[84,641,642],{"class":94}," -r",[84,644,625],{"class":158},[14,646,648],{"id":647},"_16-开发工具","1.6 开发工具",[198,650,652],{"id":651},"_161-pycharm","1.6.1 PyCharm",[19,654,655],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,657,658],{},"常用操作：",[26,660,661,664,667,674,677],{},[29,662,663],{},"New Project：创建项目。",[29,665,666],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,668,669,670,673],{},"New Python File：创建 ",[39,671,672],{},".py"," 文件。",[29,675,676],{},"Run：运行当前文件。",[29,678,679],{},"Debug：断点调试。",[198,681,683],{"id":682},"_162-vs-code","1.6.2 VS Code",[19,685,686],{},"VS Code 轻量，适合后续多语言开发。",[19,688,689],{},"建议安装插件：",[26,691,692,695,698],{},[29,693,694],{},"Python。",[29,696,697],{},"Pylance。",[29,699,700],{},"Jupyter。",[19,702,703],{},"选择解释器：",[60,705,708],{"className":706,"code":707,"language":65,"meta":66},[63],"Ctrl + Shift + P -> Python: Select Interpreter\n",[39,709,707],{"__ignoreMap":66},[14,711,713],{"id":712},"_17-第一个python程序","1.7 第一个Python程序",[19,715,716,717,720],{},"创建文件 ",[39,718,719],{},"hello.py","：",[60,722,724],{"className":121,"code":723,"language":91,"meta":66,"style":66},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[39,725,726,738],{"__ignoreMap":66},[84,727,728,731,733,736],{"class":86,"line":87},[84,729,730],{"class":94},"print",[84,732,155],{"class":154},[84,734,735],{"class":158},"\"Hello World\"",[84,737,162],{"class":154},[84,739,740,742,744,747],{"class":86,"line":98},[84,741,730],{"class":94},[84,743,155],{"class":154},[84,745,746],{"class":158},"\"你好，Python\"",[84,748,162],{"class":154},[19,750,751],{},"在终端运行：",[60,753,755],{"className":78,"code":754,"language":80,"meta":66,"style":66},"python hello.py\n",[39,756,757],{"__ignoreMap":66},[84,758,759,761],{"class":86,"line":87},[84,760,91],{"class":90},[84,762,763],{"class":158}," hello.py\n",[19,765,766],{},"或：",[60,768,770],{"className":78,"code":769,"language":80,"meta":66,"style":66},"python3 hello.py\n",[39,771,772],{"__ignoreMap":66},[84,773,774,776],{"class":86,"line":87},[84,775,101],{"class":90},[84,777,763],{"class":158},[19,779,780],{},"输出：",[60,782,785],{"className":783,"code":784,"language":65,"meta":66},[63],"Hello World\n你好，Python\n",[39,786,784],{"__ignoreMap":66},[14,788,790],{"id":789},"_18-print函数","1.8 print函数",[19,792,793,796],{},[39,794,795],{},"print()"," 用来输出内容。",[60,798,800],{"className":121,"code":799,"language":91,"meta":66,"style":66},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[39,801,802,813,824,835],{"__ignoreMap":66},[84,803,804,806,808,811],{"class":86,"line":87},[84,805,730],{"class":94},[84,807,155],{"class":154},[84,809,810],{"class":158},"\"hello\"",[84,812,162],{"class":154},[84,814,815,817,819,822],{"class":86,"line":98},[84,816,730],{"class":94},[84,818,155],{"class":154},[84,820,821],{"class":94},"100",[84,823,162],{"class":154},[84,825,826,828,830,833],{"class":86,"line":106},[84,827,730],{"class":94},[84,829,155],{"class":154},[84,831,832],{"class":94},"3.14",[84,834,162],{"class":154},[84,836,837,839,841,844,847,850],{"class":86,"line":112},[84,838,730],{"class":94},[84,840,155],{"class":154},[84,842,843],{"class":158},"\"年龄:\"",[84,845,846],{"class":154},", ",[84,848,849],{"class":94},"18",[84,851,162],{"class":154},[19,853,854],{},"多个内容用逗号隔开，默认中间加空格：",[60,856,858],{"className":121,"code":857,"language":91,"meta":66,"style":66},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[39,859,860,871,881],{"__ignoreMap":66},[84,861,862,865,868],{"class":86,"line":87},[84,863,864],{"class":154},"name ",[84,866,867],{"class":129},"=",[84,869,870],{"class":158}," \"张三\"\n",[84,872,873,876,878],{"class":86,"line":98},[84,874,875],{"class":154},"age ",[84,877,867],{"class":129},[84,879,880],{"class":94}," 18\n",[84,882,883,885,887,890,893,895],{"class":86,"line":106},[84,884,730],{"class":94},[84,886,155],{"class":154},[84,888,889],{"class":158},"\"姓名:\"",[84,891,892],{"class":154},", name, ",[84,894,843],{"class":158},[84,896,897],{"class":154},", age)\n",[19,899,900],{},"修改分隔符：",[60,902,904],{"className":121,"code":903,"language":91,"meta":66,"style":66},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[39,905,906],{"__ignoreMap":66},[84,907,908,910,912,915,917,920,922,924,926,930,932,935],{"class":86,"line":87},[84,909,730],{"class":94},[84,911,155],{"class":154},[84,913,914],{"class":158},"\"2024\"",[84,916,846],{"class":154},[84,918,919],{"class":158},"\"10\"",[84,921,846],{"class":154},[84,923,919],{"class":158},[84,925,846],{"class":154},[84,927,929],{"class":928},"s4XuR","sep",[84,931,867],{"class":129},[84,933,934],{"class":158},"\"-\"",[84,936,162],{"class":154},[19,938,939],{},"修改结尾符：",[60,941,943],{"className":121,"code":942,"language":91,"meta":66,"style":66},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[39,944,945,965],{"__ignoreMap":66},[84,946,947,949,951,953,955,958,960,963],{"class":86,"line":87},[84,948,730],{"class":94},[84,950,155],{"class":154},[84,952,810],{"class":158},[84,954,846],{"class":154},[84,956,957],{"class":928},"end",[84,959,867],{"class":129},[84,961,962],{"class":158},"\" \"",[84,964,162],{"class":154},[84,966,967,969,971,974],{"class":86,"line":98},[84,968,730],{"class":94},[84,970,155],{"class":154},[84,972,973],{"class":158},"\"python\"",[84,975,162],{"class":154},[14,977,979],{"id":978},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,981,982],{},"交互运行适合临时验证：",[60,984,986],{"className":121,"code":985,"language":91,"meta":66,"style":66},">>> 10 * 3\n30\n",[39,987,988,1001],{"__ignoreMap":66},[84,989,990,992,995,998],{"class":86,"line":87},[84,991,130],{"class":129},[84,993,994],{"class":94}," 10",[84,996,997],{"class":129}," *",[84,999,1000],{"class":94}," 3\n",[84,1002,1003],{"class":86,"line":98},[84,1004,1005],{"class":94},"30\n",[19,1007,1008],{},"脚本运行适合保存程序：",[60,1010,1012],{"className":121,"code":1011,"language":91,"meta":66,"style":66},"price = 8\ncount = 5\nprint(price * count)\n",[39,1013,1014,1024,1034],{"__ignoreMap":66},[84,1015,1016,1019,1021],{"class":86,"line":87},[84,1017,1018],{"class":154},"price ",[84,1020,867],{"class":129},[84,1022,1023],{"class":94}," 8\n",[84,1025,1026,1029,1031],{"class":86,"line":98},[84,1027,1028],{"class":154},"count ",[84,1030,867],{"class":129},[84,1032,1033],{"class":94}," 5\n",[84,1035,1036,1038,1041,1044],{"class":86,"line":106},[84,1037,730],{"class":94},[84,1039,1040],{"class":154},"(price ",[84,1042,1043],{"class":129},"*",[84,1045,1046],{"class":154}," count)\n",[19,1048,1049],{},"实际学习中推荐：",[26,1051,1052,1055,1060],{},[29,1053,1054],{},"临时试一个语法，用交互模式。",[29,1056,1057,1058,673],{},"写完整练习，用 ",[39,1059,672],{},[29,1061,1062],{},"写项目，用独立目录和虚拟环境。",[14,1064,1066],{"id":1065},"_110-常见错误","1.10 常见错误",[198,1068,1070],{"id":1069},"_1101-命令找不到","1.10.1 命令找不到",[60,1072,1075],{"className":1073,"code":1074,"language":65,"meta":66},[63],"python: command not found\n",[39,1076,1074],{"__ignoreMap":66},[19,1078,1079],{},"原因：",[26,1081,1082,1085,1088],{},[29,1083,1084],{},"没安装 Python。",[29,1086,1087],{},"PATH 没配置。",[29,1089,1090,1091,55],{},"Linux\u002FmacOS 应该使用 ",[39,1092,101],{},[198,1094,1096],{"id":1095},"_1102-文件名冲突","1.10.2 文件名冲突",[19,1098,1099],{},"不要把文件命名为：",[60,1101,1104],{"className":1102,"code":1103,"language":65,"meta":66},[63],"random.py\njson.py\ntime.py\nrequests.py\n",[39,1105,1103],{"__ignoreMap":66},[19,1107,1108],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[198,1110,1112],{"id":1111},"_1103-中文乱码","1.10.3 中文乱码",[19,1114,1115],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,1117,1118],{},"如果读写文件出现乱码，要明确指定编码：",[60,1120,1122],{"className":121,"code":1121,"language":91,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[39,1123,1124,1161],{"__ignoreMap":66},[84,1125,1126,1129,1132,1134,1137,1139,1142,1144,1147,1149,1152,1155,1158],{"class":86,"line":87},[84,1127,1128],{"class":129},"with",[84,1130,1131],{"class":94}," open",[84,1133,155],{"class":154},[84,1135,1136],{"class":158},"\"data.txt\"",[84,1138,846],{"class":154},[84,1140,1141],{"class":158},"\"r\"",[84,1143,846],{"class":154},[84,1145,1146],{"class":928},"encoding",[84,1148,867],{"class":129},[84,1150,1151],{"class":158},"\"utf-8\"",[84,1153,1154],{"class":154},") ",[84,1156,1157],{"class":129},"as",[84,1159,1160],{"class":154}," f:\n",[84,1162,1163,1166,1168],{"class":86,"line":98},[84,1164,1165],{"class":154},"    content ",[84,1167,867],{"class":129},[84,1169,1170],{"class":154}," f.read()\n",[14,1172,1174],{"id":1173},"_111-本章练习","1.11 本章练习",[26,1176,1177,1180,1186],{},[29,1178,1179],{},"安装 Python，并在终端输出版本号。",[29,1181,1182,1183,1185],{},"新建 ",[39,1184,719],{},"，输出自己的姓名、年龄、学习目标。",[29,1187,1188,1189,1191],{},"使用 ",[39,1190,795],{}," 输出下面格式：",[60,1193,1196],{"className":1194,"code":1195,"language":65,"meta":66},[63],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[39,1197,1195],{"__ignoreMap":66},[26,1199,1200],{"start":112},[29,1201,1188,1202,1204],{},[39,1203,929],{}," 输出日期：",[60,1206,1209],{"className":1207,"code":1208,"language":65,"meta":66},[63],"2024-10-10\n",[39,1210,1208],{"__ignoreMap":66},[26,1212,1213],{"start":425},[29,1214,1188,1215,1217,1218,1220],{},[39,1216,957],{}," 让两次 ",[39,1219,795],{}," 输出在同一行。",[1222,1223,1224],"style",{},"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":66,"searchDepth":98,"depth":98,"links":1226},[1227,1228,1229,1234,1235,1236,1240,1241,1242,1243,1248],{"id":16,"depth":98,"text":17},{"id":71,"depth":98,"text":72},{"id":195,"depth":98,"text":196,"children":1230},[1231,1232,1233],{"id":200,"depth":106,"text":201},{"id":258,"depth":106,"text":259},{"id":297,"depth":106,"text":298},{"id":377,"depth":98,"text":378},{"id":535,"depth":98,"text":536},{"id":647,"depth":98,"text":648,"children":1237},[1238,1239],{"id":651,"depth":106,"text":652},{"id":682,"depth":106,"text":683},{"id":712,"depth":98,"text":713},{"id":789,"depth":98,"text":790},{"id":978,"depth":98,"text":979},{"id":1065,"depth":98,"text":1066,"children":1244},[1245,1246,1247],{"id":1069,"depth":106,"text":1070},{"id":1095,"depth":106,"text":1096},{"id":1111,"depth":106,"text":1112},{"id":1173,"depth":98,"text":1174},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":5,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",[1258,6339,7443,8862,11851,13202,14690,15778,24541,24553,25147,25173,25297,25538,25603,25621,25634,25681,25803,25972,26171,26350,26555,26691,26786,26823,26836,27146,27882,28590,28611,29630,31261,31412,31425,31437,31735,51542,51557,51574,51607,54479,77824,93969,93990,94103,94224,94994,95657,96018,96056,96162,96262,96305,96331,96392,98046,98147,98172,98663,99163,100243,100526,101268,101770,101781,103790,105453,106954,108652,110568,112487,114509,117979,118411,118872,119621,122559,122907,122929,123284,126590,126602,127005,127028,127174,127341,127546,127847,128404,129061,130992,132590,133239,134733,136164,137399,139093,140845,143255,143371,144306,144517,145402,146637,146865,146878,147810,150222,152590,155911,158388,160032,161809,163822,166874,169054,171581,173775],{"id":1259,"title":1260,"body":1261,"description":66,"extension":1250,"meta":6334,"navigation":1252,"path":6335,"seo":6336,"stem":6337,"__hash__":6338},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1262,"toc":6306},[1263,1266,1270,1273,1277,1288,1292,1296,1299,1302,1305,1308,1311,1337,1341,1344,1347,1350,1353,1403,1407,1425,1427,1441,1444,1452,1455,2307,2314,2331,2335,2423,2427,2433,2522,2526,2564,2568,2632,2636,2640,2647,2658,2662,2667,2671,2676,2680,2685,2689,2693,2698,2968,2973,3111,3116,3370,3373,3381,3385,3390,3493,3496,3802,3811,3912,3915,3918,3921,3924,4184,4189,4329,4332,4511,4514,4642,4645,4797,4801,4806,4809,4820,4828,4831,4938,4942,4946,4951,5001,5006,5011,5035,5040,5093,5096,5101,5278,5283,5567,5572,5969,5973,5978,6035,6040,6048,6051,6191,6194,6303],[10,1264,1260],{"id":1265},"_1基础入门",[14,1267,1269],{"id":1268},"_11注释","1.1注释",[19,1271,1272],{},"\u002F\u002F或者\u002F* *\u002F",[14,1274,1276],{"id":1275},"_12命名","1.2命名",[26,1278,1279,1282,1285],{},[29,1280,1281],{},"字母数字下划线",[29,1283,1284],{},"开头必须是字母或_",[29,1286,1287],{},"不能使用关键词",[14,1289,1291],{"id":1290},"_13数据类型","1.3数据类型",[198,1293,1295],{"id":1294},"_131整形","1.3.1整形",[19,1297,1298],{},"short 短整形 2",[19,1300,1301],{},"int 整形 4",[19,1303,1304],{},"long 长整形 win4 linux32位4 linux64位8",[19,1306,1307],{},"long long 长长整形 8",[19,1309,1310],{},"利用sizeof可以求数据类型占用的内存空间大小",[60,1312,1316],{"className":1313,"code":1314,"language":1315,"meta":66,"style":66},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[39,1317,1318,1330],{"__ignoreMap":66},[84,1319,1320,1323,1325,1328],{"class":86,"line":87},[84,1321,1322],{"class":129},"sizeof",[84,1324,155],{"class":154},[84,1326,1327],{"class":129},"int",[84,1329,162],{"class":154},[84,1331,1332,1334],{"class":86,"line":98},[84,1333,1322],{"class":129},[84,1335,1336],{"class":154},"(num)\n",[198,1338,1340],{"id":1339},"_132浮点型","1.3.2浮点型",[19,1342,1343],{},"float 单精度 4节 7位有效数字",[19,1345,1346],{},"double 双精度 8节 15-16有效数字",[19,1348,1349],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1351,1352],{},"注意点：",[60,1354,1356],{"className":1313,"code":1355,"language":1315,"meta":66,"style":66},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[39,1357,1358,1380],{"__ignoreMap":66},[84,1359,1360,1363,1366,1368,1370,1373,1376],{"class":86,"line":87},[84,1361,1362],{"class":129},"float",[84,1364,1365],{"class":154}," f1",[84,1367,867],{"class":129},[84,1369,832],{"class":94},[84,1371,1372],{"class":129},"f",[84,1374,1375],{"class":154},";",[84,1377,1379],{"class":1378},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[84,1381,1382,1384,1387,1389,1392,1395,1398,1400],{"class":86,"line":98},[84,1383,1362],{"class":129},[84,1385,1386],{"class":154}," f2",[84,1388,867],{"class":129},[84,1390,1391],{"class":94},"3",[84,1393,1394],{"class":129},"e",[84,1396,1397],{"class":94},"2",[84,1399,1375],{"class":154},[84,1401,1402],{"class":1378}," \u002F\u002F科学记数法\n",[198,1404,1406],{"id":1405},"_133字符型","1.3.3字符型",[60,1408,1410],{"className":1313,"code":1409,"language":1315,"meta":66,"style":66},"char ch='a'\n",[39,1411,1412],{"__ignoreMap":66},[84,1413,1414,1417,1420,1422],{"class":86,"line":87},[84,1415,1416],{"class":129},"char",[84,1418,1419],{"class":154}," ch",[84,1421,867],{"class":129},[84,1423,1424],{"class":158},"'a'\n",[19,1426,1352],{},[26,1428,1429,1432,1435,1438],{},[29,1430,1431],{},"在显示字符型变量时，只能单引号，双引号x",[29,1433,1434],{},"单引号内只能一个字符，不能字符串",[29,1436,1437],{},"c和c++字符型变量只占用一个字符",[29,1439,1440],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1442,1443],{},"ASCII码大致由以下两部分组成：",[26,1445,1446,1449],{},[29,1447,1448],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,1450,1451],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1453,1454],{},"ASCII码表格：",[458,1456,1457,1498],{},[461,1458,1459],{},[464,1460,1461,1468,1473,1477,1482,1486,1490,1494],{},[467,1462,1463,1467],{},[1464,1465,1466],"strong",{},"ASCII","值",[467,1469,1470],{},[1464,1471,1472],{},"控制字符",[467,1474,1475,1467],{},[1464,1476,1466],{},[467,1478,1479],{},[1464,1480,1481],{},"字符",[467,1483,1484,1467],{},[1464,1485,1466],{},[467,1487,1488],{},[1464,1489,1481],{},[467,1491,1492,1467],{},[1464,1493,1466],{},[467,1495,1496],{},[1464,1497,1481],{},[474,1499,1500,1525,1550,1575,1600,1625,1650,1675,1701,1726,1752,1777,1803,1828,1854,1880,1906,1930,1955,1979,2004,2029,2054,2079,2104,2129,2154,2180,2205,2230,2255,2281],{},[464,1501,1502,1505,1508,1511,1514,1517,1520,1523],{},[479,1503,1504],{},"0",[479,1506,1507],{},"NUT",[479,1509,1510],{},"32",[479,1512,1513],{},"(space)",[479,1515,1516],{},"64",[479,1518,1519],{},"@",[479,1521,1522],{},"96",[479,1524,42],{},[464,1526,1527,1530,1533,1536,1539,1542,1545,1548],{},[479,1528,1529],{},"1",[479,1531,1532],{},"SOH",[479,1534,1535],{},"33",[479,1537,1538],{},"!",[479,1540,1541],{},"65",[479,1543,1544],{},"A",[479,1546,1547],{},"97",[479,1549,208],{},[464,1551,1552,1554,1557,1560,1563,1566,1569,1572],{},[479,1553,1397],{},[479,1555,1556],{},"STX",[479,1558,1559],{},"34",[479,1561,1562],{},"\"",[479,1564,1565],{},"66",[479,1567,1568],{},"B",[479,1570,1571],{},"98",[479,1573,1574],{},"b",[464,1576,1577,1579,1582,1585,1588,1591,1594,1597],{},[479,1578,1391],{},[479,1580,1581],{},"ETX",[479,1583,1584],{},"35",[479,1586,1587],{},"#",[479,1589,1590],{},"67",[479,1592,1593],{},"C",[479,1595,1596],{},"99",[479,1598,1599],{},"c",[464,1601,1602,1605,1608,1611,1614,1617,1620,1622],{},[479,1603,1604],{},"4",[479,1606,1607],{},"EOT",[479,1609,1610],{},"36",[479,1612,1613],{},"$",[479,1615,1616],{},"68",[479,1618,1619],{},"D",[479,1621,821],{},[479,1623,1624],{},"d",[464,1626,1627,1630,1633,1636,1639,1642,1645,1648],{},[479,1628,1629],{},"5",[479,1631,1632],{},"ENQ",[479,1634,1635],{},"37",[479,1637,1638],{},"%",[479,1640,1641],{},"69",[479,1643,1644],{},"E",[479,1646,1647],{},"101",[479,1649,1394],{},[464,1651,1652,1655,1658,1661,1664,1667,1670,1673],{},[479,1653,1654],{},"6",[479,1656,1657],{},"ACK",[479,1659,1660],{},"38",[479,1662,1663],{},"&",[479,1665,1666],{},"70",[479,1668,1669],{},"F",[479,1671,1672],{},"102",[479,1674,1372],{},[464,1676,1677,1680,1683,1686,1689,1692,1695,1698],{},[479,1678,1679],{},"7",[479,1681,1682],{},"BEL",[479,1684,1685],{},"39",[479,1687,1688],{},",",[479,1690,1691],{},"71",[479,1693,1694],{},"G",[479,1696,1697],{},"103",[479,1699,1700],{},"g",[464,1702,1703,1706,1709,1712,1714,1717,1720,1723],{},[479,1704,1705],{},"8",[479,1707,1708],{},"BS",[479,1710,1711],{},"40",[479,1713,155],{},[479,1715,1716],{},"72",[479,1718,1719],{},"H",[479,1721,1722],{},"104",[479,1724,1725],{},"h",[464,1727,1728,1731,1734,1737,1740,1743,1746,1749],{},[479,1729,1730],{},"9",[479,1732,1733],{},"HT",[479,1735,1736],{},"41",[479,1738,1739],{},")",[479,1741,1742],{},"73",[479,1744,1745],{},"I",[479,1747,1748],{},"105",[479,1750,1751],{},"i",[464,1753,1754,1757,1760,1763,1765,1768,1771,1774],{},[479,1755,1756],{},"10",[479,1758,1759],{},"LF",[479,1761,1762],{},"42",[479,1764,1043],{},[479,1766,1767],{},"74",[479,1769,1770],{},"J",[479,1772,1773],{},"106",[479,1775,1776],{},"j",[464,1778,1779,1782,1785,1788,1791,1794,1797,1800],{},[479,1780,1781],{},"11",[479,1783,1784],{},"VT",[479,1786,1787],{},"43",[479,1789,1790],{},"+",[479,1792,1793],{},"75",[479,1795,1796],{},"K",[479,1798,1799],{},"107",[479,1801,1802],{},"k",[464,1804,1805,1808,1811,1814,1816,1819,1822,1825],{},[479,1806,1807],{},"12",[479,1809,1810],{},"FF",[479,1812,1813],{},"44",[479,1815,1688],{},[479,1817,1818],{},"76",[479,1820,1821],{},"L",[479,1823,1824],{},"108",[479,1826,1827],{},"l",[464,1829,1830,1833,1836,1839,1842,1845,1848,1851],{},[479,1831,1832],{},"13",[479,1834,1835],{},"CR",[479,1837,1838],{},"45",[479,1840,1841],{},"-",[479,1843,1844],{},"77",[479,1846,1847],{},"M",[479,1849,1850],{},"109",[479,1852,1853],{},"m",[464,1855,1856,1859,1862,1865,1868,1871,1874,1877],{},[479,1857,1858],{},"14",[479,1860,1861],{},"SO",[479,1863,1864],{},"46",[479,1866,1867],{},".",[479,1869,1870],{},"78",[479,1872,1873],{},"N",[479,1875,1876],{},"110",[479,1878,1879],{},"n",[464,1881,1882,1885,1888,1891,1894,1897,1900,1903],{},[479,1883,1884],{},"15",[479,1886,1887],{},"SI",[479,1889,1890],{},"47",[479,1892,1893],{},"\u002F",[479,1895,1896],{},"79",[479,1898,1899],{},"O",[479,1901,1902],{},"111",[479,1904,1905],{},"o",[464,1907,1908,1911,1914,1917,1919,1922,1925,1928],{},[479,1909,1910],{},"16",[479,1912,1913],{},"DLE",[479,1915,1916],{},"48",[479,1918,1504],{},[479,1920,1921],{},"80",[479,1923,1924],{},"P",[479,1926,1927],{},"112",[479,1929,19],{},[464,1931,1932,1935,1938,1941,1943,1946,1949,1952],{},[479,1933,1934],{},"17",[479,1936,1937],{},"DCI",[479,1939,1940],{},"49",[479,1942,1529],{},[479,1944,1945],{},"81",[479,1947,1948],{},"Q",[479,1950,1951],{},"113",[479,1953,1954],{},"q",[464,1956,1957,1959,1962,1965,1967,1970,1973,1976],{},[479,1958,849],{},[479,1960,1961],{},"DC2",[479,1963,1964],{},"50",[479,1966,1397],{},[479,1968,1969],{},"82",[479,1971,1972],{},"R",[479,1974,1975],{},"114",[479,1977,1978],{},"r",[464,1980,1981,1984,1987,1990,1992,1995,1998,2001],{},[479,1982,1983],{},"19",[479,1985,1986],{},"DC3",[479,1988,1989],{},"51",[479,1991,1391],{},[479,1993,1994],{},"83",[479,1996,1997],{},"S",[479,1999,2000],{},"115",[479,2002,2003],{},"s",[464,2005,2006,2009,2012,2015,2017,2020,2023,2026],{},[479,2007,2008],{},"20",[479,2010,2011],{},"DC4",[479,2013,2014],{},"52",[479,2016,1604],{},[479,2018,2019],{},"84",[479,2021,2022],{},"T",[479,2024,2025],{},"116",[479,2027,2028],{},"t",[464,2030,2031,2034,2037,2040,2042,2045,2048,2051],{},[479,2032,2033],{},"21",[479,2035,2036],{},"NAK",[479,2038,2039],{},"53",[479,2041,1629],{},[479,2043,2044],{},"85",[479,2046,2047],{},"U",[479,2049,2050],{},"117",[479,2052,2053],{},"u",[464,2055,2056,2059,2062,2065,2067,2070,2073,2076],{},[479,2057,2058],{},"22",[479,2060,2061],{},"SYN",[479,2063,2064],{},"54",[479,2066,1654],{},[479,2068,2069],{},"86",[479,2071,2072],{},"V",[479,2074,2075],{},"118",[479,2077,2078],{},"v",[464,2080,2081,2084,2087,2090,2092,2095,2098,2101],{},[479,2082,2083],{},"23",[479,2085,2086],{},"TB",[479,2088,2089],{},"55",[479,2091,1679],{},[479,2093,2094],{},"87",[479,2096,2097],{},"W",[479,2099,2100],{},"119",[479,2102,2103],{},"w",[464,2105,2106,2109,2112,2115,2117,2120,2123,2126],{},[479,2107,2108],{},"24",[479,2110,2111],{},"CAN",[479,2113,2114],{},"56",[479,2116,1705],{},[479,2118,2119],{},"88",[479,2121,2122],{},"X",[479,2124,2125],{},"120",[479,2127,2128],{},"x",[464,2130,2131,2134,2137,2140,2142,2145,2148,2151],{},[479,2132,2133],{},"25",[479,2135,2136],{},"EM",[479,2138,2139],{},"57",[479,2141,1730],{},[479,2143,2144],{},"89",[479,2146,2147],{},"Y",[479,2149,2150],{},"121",[479,2152,2153],{},"y",[464,2155,2156,2159,2162,2165,2168,2171,2174,2177],{},[479,2157,2158],{},"26",[479,2160,2161],{},"SUB",[479,2163,2164],{},"58",[479,2166,2167],{},":",[479,2169,2170],{},"90",[479,2172,2173],{},"Z",[479,2175,2176],{},"122",[479,2178,2179],{},"z",[464,2181,2182,2185,2188,2191,2193,2196,2199,2202],{},[479,2183,2184],{},"27",[479,2186,2187],{},"ESC",[479,2189,2190],{},"59",[479,2192,1375],{},[479,2194,2195],{},"91",[479,2197,2198],{},"[",[479,2200,2201],{},"123",[479,2203,2204],{},"{",[464,2206,2207,2210,2213,2216,2219,2222,2224,2227],{},[479,2208,2209],{},"28",[479,2211,2212],{},"FS",[479,2214,2215],{},"60",[479,2217,2218],{},"\u003C",[479,2220,2221],{},"92",[479,2223,1893],{},[479,2225,2226],{},"124",[479,2228,2229],{},"|",[464,2231,2232,2235,2238,2241,2243,2246,2249,2252],{},[479,2233,2234],{},"29",[479,2236,2237],{},"GS",[479,2239,2240],{},"61",[479,2242,867],{},[479,2244,2245],{},"93",[479,2247,2248],{},"]",[479,2250,2251],{},"125",[479,2253,2254],{},"}",[464,2256,2257,2260,2263,2266,2269,2272,2275,2278],{},[479,2258,2259],{},"30",[479,2261,2262],{},"RS",[479,2264,2265],{},"62",[479,2267,2268],{},">",[479,2270,2271],{},"94",[479,2273,2274],{},"^",[479,2276,2277],{},"126",[479,2279,2280],{},"`",[464,2282,2283,2286,2289,2292,2295,2298,2301,2304],{},[479,2284,2285],{},"31",[479,2287,2288],{},"US",[479,2290,2291],{},"63",[479,2293,2294],{},"?",[479,2296,2297],{},"95",[479,2299,2300],{},"_",[479,2302,2303],{},"127",[479,2305,2306],{},"DEL",[19,2308,2309,2310,2313],{},"ASCII 码大致由以下",[1464,2311,2312],{},"两部分组","成：",[2315,2316,2317,2324],"ul",{},[29,2318,2319,2320,2323],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1464,2321,2322],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,2325,2326,2327,2330],{},"ASCII 打印字符：数字 ",[1464,2328,2329],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[198,2332,2334],{"id":2333},"_134转义字符","1.3.4转义字符",[60,2336,2338],{"className":1313,"code":2337,"language":1315,"meta":66,"style":66},"\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",[39,2339,2340,2345,2361,2375,2380,2393,2399],{"__ignoreMap":66},[84,2341,2342],{"class":86,"line":87},[84,2343,2344],{"class":1378},"\u002F\u002F换行符\n",[84,2346,2347,2350,2353,2356,2358],{"class":86,"line":98},[84,2348,2349],{"class":154},"cout ",[84,2351,2352],{"class":129},"\u003C\u003C",[84,2354,2355],{"class":158},"\"hello world\u002Fn\"",[84,2357,1375],{"class":154},[84,2359,2360],{"class":1378}," \u002F\u002F就等同于如下：\n",[84,2362,2363,2365,2367,2370,2372],{"class":86,"line":106},[84,2364,2349],{"class":154},[84,2366,2352],{"class":129},[84,2368,2369],{"class":158},"\"hello world\"",[84,2371,2352],{"class":129},[84,2373,2374],{"class":154},"endl;\n",[84,2376,2377],{"class":86,"line":112},[84,2378,2379],{"class":1378},"\u002F\u002F反斜杠\n",[84,2381,2382,2384,2386,2389,2391],{"class":86,"line":425},[84,2383,2349],{"class":154},[84,2385,2352],{"class":129},[84,2387,2388],{"class":158},"\"\u002F\u002F\"",[84,2390,2352],{"class":129},[84,2392,2374],{"class":154},[84,2394,2396],{"class":86,"line":2395},6,[84,2397,2398],{"class":1378},"\u002F\u002F水平制表符\n",[84,2400,2402,2404,2406,2409,2412,2415,2417,2420],{"class":86,"line":2401},7,[84,2403,2349],{"class":154},[84,2405,2352],{"class":129},[84,2407,2408],{"class":158},"\"aaaa",[84,2410,2411],{"class":94},"\\t",[84,2413,2414],{"class":158},"helloworld\"",[84,2416,2352],{"class":129},[84,2418,2419],{"class":154},"endl;",[84,2421,2422],{"class":1378}," \u002F\u002F输出窗口时有对齐效果\n",[198,2424,2426],{"id":2425},"_135字符串型","1.3.5字符串型",[19,2428,2429,2430,2432],{},"char 变量名",[84,2431],{},"=\"字符串值\"",[60,2434,2436],{"className":1313,"code":2435,"language":1315,"meta":66,"style":66},"\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",[39,2437,2438,2443,2448,2453,2458,2472,2485,2490,2496,2508],{"__ignoreMap":66},[84,2439,2440],{"class":86,"line":87},[84,2441,2442],{"class":1378},"\u002F\u002Fc风格字符串\n",[84,2444,2445],{"class":86,"line":98},[84,2446,2447],{"class":1378},"\u002F\u002F注意事项：\n",[84,2449,2450],{"class":86,"line":106},[84,2451,2452],{"class":1378},"\u002F\u002F1.char字符串名[]\n",[84,2454,2455],{"class":86,"line":112},[84,2456,2457],{"class":1378},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[84,2459,2460,2462,2465,2467,2469],{"class":86,"line":425},[84,2461,1416],{"class":129},[84,2463,2464],{"class":154}," str[]",[84,2466,867],{"class":129},[84,2468,2369],{"class":158},[84,2470,2471],{"class":154},";\n",[84,2473,2474,2476,2478,2481,2483],{"class":86,"line":2395},[84,2475,2349],{"class":154},[84,2477,2352],{"class":129},[84,2479,2480],{"class":154},"str",[84,2482,2352],{"class":129},[84,2484,2374],{"class":154},[84,2486,2487],{"class":86,"line":2401},[84,2488,2489],{"class":1378},"\u002F\u002Fc++风格字符串\n",[84,2491,2493],{"class":86,"line":2492},8,[84,2494,2495],{"class":1378},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[84,2497,2499,2502,2504,2506],{"class":86,"line":2498},9,[84,2500,2501],{"class":154},"string str2",[84,2503,867],{"class":129},[84,2505,2369],{"class":158},[84,2507,2471],{"class":154},[84,2509,2511,2513,2515,2518,2520],{"class":86,"line":2510},10,[84,2512,2349],{"class":154},[84,2514,2352],{"class":129},[84,2516,2517],{"class":154},"str2",[84,2519,2352],{"class":129},[84,2521,2374],{"class":154},[198,2523,2525],{"id":2524},"_136布尔类型bool","1.3.6布尔类型bool",[60,2527,2529],{"className":1313,"code":2528,"language":1315,"meta":66,"style":66},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[39,2530,2531,2546],{"__ignoreMap":66},[84,2532,2533,2536,2539,2541,2544],{"class":86,"line":87},[84,2534,2535],{"class":129},"bool",[84,2537,2538],{"class":154}," flag",[84,2540,867],{"class":129},[84,2542,2543],{"class":94},"true",[84,2545,2471],{"class":154},[84,2547,2548,2551,2554,2557,2559,2561],{"class":86,"line":98},[84,2549,2550],{"class":154},"cout",[84,2552,2553],{"class":129},"\u003C\u003Csizeof",[84,2555,2556],{"class":154},"(flag)",[84,2558,2352],{"class":129},[84,2560,2419],{"class":154},[84,2562,2563],{"class":1378}," \u002F\u002F查看布尔占内存空间\n",[14,2565,2567],{"id":2566},"_14键盘输入cin","1.4键盘输入cin",[60,2569,2571],{"className":1313,"code":2570,"language":1315,"meta":66,"style":66},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[39,2572,2573,2586,2603,2614],{"__ignoreMap":66},[84,2574,2575,2577,2580,2582,2584],{"class":86,"line":87},[84,2576,1327],{"class":129},[84,2578,2579],{"class":154}," a",[84,2581,867],{"class":129},[84,2583,1504],{"class":94},[84,2585,2471],{"class":154},[84,2587,2588,2590,2592,2595,2597,2599,2601],{"class":86,"line":98},[84,2589,2550],{"class":154},[84,2591,2352],{"class":129},[84,2593,2594],{"class":158},"\"请给整型变量a赋值\"",[84,2596,2352],{"class":129},[84,2598,208],{"class":154},[84,2600,2352],{"class":129},[84,2602,2374],{"class":154},[84,2604,2605,2608,2611],{"class":86,"line":106},[84,2606,2607],{"class":154},"cin ",[84,2609,2610],{"class":129},">>",[84,2612,2613],{"class":154}," a;\n",[84,2615,2616,2618,2620,2623,2626,2628,2630],{"class":86,"line":112},[84,2617,2349],{"class":154},[84,2619,2352],{"class":129},[84,2621,2622],{"class":158}," \"整型变量a=\"",[84,2624,2625],{"class":129}," \u003C\u003C",[84,2627,208],{"class":154},[84,2629,2352],{"class":129},[84,2631,2374],{"class":154},[14,2633,2635],{"id":2634},"_15运算符","1.5运算符",[198,2637,2639],{"id":2638},"_151算术运算符","1.5.1算术运算符",[19,2641,2642,2646],{},[2643,2644],"img",{"alt":66,"src":2645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,2648,2649,2652,2655],{},[29,2650,2651],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,2653,2654],{},"两个小数不可以做取模运算",[29,2656,2657],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[198,2659,2661],{"id":2660},"_152赋值运算符","1.5.2赋值运算符",[19,2663,2664],{},[2643,2665],{"alt":66,"src":2666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[198,2668,2670],{"id":2669},"_153比较运算符","1.5.3比较运算符",[19,2672,2673],{},[2643,2674],{"alt":66,"src":2675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[198,2677,2679],{"id":2678},"_154逻辑运算符","1.5.4逻辑运算符",[19,2681,2682],{},[2643,2683],{"alt":66,"src":2684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2686,2688],{"id":2687},"_16程序流程结构","1.6程序流程结构",[198,2690,2692],{"id":2691},"_161选择结构","1.6.1选择结构",[26,2694,2695],{},[29,2696,2697],{},"if语句\n单行、多行、多条件if语句",[60,2699,2701],{"className":1313,"code":2700,"language":1315,"meta":66,"style":66},"\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",[39,2702,2703,2708,2723,2728,2742,2747,2752,2761,2774,2778,2791,2796,2802,2807,2821,2826,2832,2853,2858,2872,2877,2906,2911,2928,2933,2938,2943,2957,2962],{"__ignoreMap":66},[84,2704,2705],{"class":86,"line":87},[84,2706,2707],{"class":1378},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[84,2709,2710,2713,2716,2718,2721],{"class":86,"line":98},[84,2711,2712],{"class":129},"if",[84,2714,2715],{"class":154},"(score",[84,2717,2268],{"class":129},[84,2719,2720],{"class":94},"600",[84,2722,162],{"class":154},[84,2724,2725],{"class":86,"line":106},[84,2726,2727],{"class":154},"{\n",[84,2729,2730,2733,2735,2738,2740],{"class":86,"line":112},[84,2731,2732],{"class":154},"    cout",[84,2734,2352],{"class":129},[84,2736,2737],{"class":158},"'这是单行if语句'",[84,2739,2352],{"class":129},[84,2741,2374],{"class":154},[84,2743,2744],{"class":86,"line":425},[84,2745,2746],{"class":154},"}\n",[84,2748,2749],{"class":86,"line":2395},[84,2750,2751],{"class":1378},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[84,2753,2754,2756,2758],{"class":86,"line":2401},[84,2755,2607],{"class":154},[84,2757,2610],{"class":129},[84,2759,2760],{"class":154}," score\n",[84,2762,2763,2765,2767,2770,2772],{"class":86,"line":2492},[84,2764,2712],{"class":129},[84,2766,2715],{"class":154},[84,2768,2769],{"class":129},"\u003C=",[84,2771,2720],{"class":94},[84,2773,162],{"class":154},[84,2775,2776],{"class":86,"line":2498},[84,2777,2727],{"class":154},[84,2779,2780,2782,2784,2787,2789],{"class":86,"line":2510},[84,2781,2732],{"class":154},[84,2783,2610],{"class":129},[84,2785,2786],{"class":158},"\"小于等于600\"",[84,2788,2352],{"class":129},[84,2790,2374],{"class":154},[84,2792,2794],{"class":86,"line":2793},11,[84,2795,2746],{"class":154},[84,2797,2799],{"class":86,"line":2798},12,[84,2800,2801],{"class":129},"else\n",[84,2803,2805],{"class":86,"line":2804},13,[84,2806,2727],{"class":154},[84,2808,2810,2812,2814,2817,2819],{"class":86,"line":2809},14,[84,2811,2732],{"class":154},[84,2813,2610],{"class":129},[84,2815,2816],{"class":158},"\"大于600\"",[84,2818,2610],{"class":129},[84,2820,2374],{"class":154},[84,2822,2824],{"class":86,"line":2823},15,[84,2825,2746],{"class":154},[84,2827,2829],{"class":86,"line":2828},16,[84,2830,2831],{"class":1378},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[84,2833,2835,2837,2840,2842,2844,2847,2849,2851],{"class":86,"line":2834},17,[84,2836,2712],{"class":129},[84,2838,2839],{"class":154}," (",[84,2841,1504],{"class":94},[84,2843,2218],{"class":129},[84,2845,2846],{"class":154},"num",[84,2848,2218],{"class":129},[84,2850,821],{"class":94},[84,2852,162],{"class":154},[84,2854,2856],{"class":86,"line":2855},18,[84,2857,2727],{"class":154},[84,2859,2861,2863,2865,2868,2870],{"class":86,"line":2860},19,[84,2862,2732],{"class":154},[84,2864,2352],{"class":129},[84,2866,2867],{"class":158},"\"小于100\"",[84,2869,2352],{"class":129},[84,2871,2374],{"class":154},[84,2873,2875],{"class":86,"line":2874},20,[84,2876,2746],{"class":154},[84,2878,2880,2883,2886,2889,2892,2894,2897,2899,2901,2904],{"class":86,"line":2879},21,[84,2881,2882],{"class":129},"else",[84,2884,2885],{"class":129}," if",[84,2887,2888],{"class":154}," (nmu",[84,2890,2891],{"class":129},">=",[84,2893,821],{"class":94},[84,2895,2896],{"class":129},"&&",[84,2898,2846],{"class":154},[84,2900,2218],{"class":129},[84,2902,2903],{"class":94},"200",[84,2905,162],{"class":154},[84,2907,2909],{"class":86,"line":2908},22,[84,2910,2727],{"class":154},[84,2912,2914,2916,2918,2921,2923,2925],{"class":86,"line":2913},23,[84,2915,2732],{"class":154},[84,2917,2352],{"class":129},[84,2919,2920],{"class":158},"\"不小于100且小于200\"",[84,2922,2352],{"class":129},[84,2924,2419],{"class":154},[84,2926,2927],{"class":1378}," \u002F\u002F可以无限else if,python中是elif：\n",[84,2929,2931],{"class":86,"line":2930},24,[84,2932,2746],{"class":154},[84,2934,2936],{"class":86,"line":2935},25,[84,2937,2801],{"class":129},[84,2939,2941],{"class":86,"line":2940},26,[84,2942,2727],{"class":154},[84,2944,2946,2948,2950,2953,2955],{"class":86,"line":2945},27,[84,2947,2732],{"class":154},[84,2949,2352],{"class":129},[84,2951,2952],{"class":158},"\"不小于200\"",[84,2954,2352],{"class":129},[84,2956,2374],{"class":154},[84,2958,2960],{"class":86,"line":2959},28,[84,2961,2746],{"class":154},[84,2963,2965],{"class":86,"line":2964},29,[84,2966,2967],{"class":1378},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,2969,2970],{"start":98},[29,2971,2972],{},"三目运算符",[60,2974,2976],{"className":1313,"code":2975,"language":1315,"meta":66,"style":66},"\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",[39,2977,2978,2983,2988,3014,3036,3053,3058,3081,3096],{"__ignoreMap":66},[84,2979,2980],{"class":86,"line":87},[84,2981,2982],{"class":1378},"\u002F\u002F创建三个变量a,b,c\n",[84,2984,2985],{"class":86,"line":98},[84,2986,2987],{"class":1378},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[84,2989,2990,2992,2994,2996,2998,3001,3003,3005,3008,3010,3012],{"class":86,"line":106},[84,2991,1327],{"class":129},[84,2993,2579],{"class":154},[84,2995,867],{"class":129},[84,2997,2008],{"class":94},[84,2999,3000],{"class":154},",b",[84,3002,867],{"class":129},[84,3004,1756],{"class":94},[84,3006,3007],{"class":154},",c",[84,3009,867],{"class":129},[84,3011,1504],{"class":94},[84,3013,2471],{"class":154},[84,3015,3016,3018,3020,3023,3025,3027,3029,3031,3033],{"class":86,"line":112},[84,3017,1599],{"class":154},[84,3019,867],{"class":129},[84,3021,3022],{"class":154},"(a",[84,3024,2268],{"class":129},[84,3026,1574],{"class":154},[84,3028,2294],{"class":129},[84,3030,208],{"class":154},[84,3032,2167],{"class":129},[84,3034,3035],{"class":154},"b)\n",[84,3037,3038,3040,3042,3045,3047,3049,3051],{"class":86,"line":425},[84,3039,2550],{"class":154},[84,3041,2352],{"class":129},[84,3043,3044],{"class":158},"\"c=\"",[84,3046,2352],{"class":129},[84,3048,1599],{"class":154},[84,3050,2352],{"class":129},[84,3052,2374],{"class":154},[84,3054,3055],{"class":86,"line":2395},[84,3056,3057],{"class":1378},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[84,3059,3060,3062,3064,3066,3068,3070,3072,3075,3077,3079],{"class":86,"line":2401},[84,3061,3022],{"class":154},[84,3063,2268],{"class":129},[84,3065,1574],{"class":154},[84,3067,2294],{"class":129},[84,3069,208],{"class":154},[84,3071,2167],{"class":129},[84,3073,3074],{"class":154},"b)",[84,3076,867],{"class":129},[84,3078,821],{"class":94},[84,3080,2471],{"class":154},[84,3082,3083,3085,3087,3089,3091,3093],{"class":86,"line":2492},[84,3084,2550],{"class":154},[84,3086,2352],{"class":129},[84,3088,208],{"class":154},[84,3090,2352],{"class":129},[84,3092,2419],{"class":154},[84,3094,3095],{"class":1378}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[84,3097,3098,3100,3102,3104,3106,3108],{"class":86,"line":2498},[84,3099,2550],{"class":154},[84,3101,2352],{"class":129},[84,3103,1574],{"class":154},[84,3105,2352],{"class":129},[84,3107,2419],{"class":154},[84,3109,3110],{"class":1378}," \u002F\u002F10   a>b,b还是原值\n",[26,3112,3113],{"start":106},[29,3114,3115],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[60,3117,3119],{"className":1313,"code":3118,"language":1315,"meta":66,"style":66},"\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",[39,3120,3121,3126,3134,3147,3156,3160,3174,3187,3197,3205,3210,3234,3255,3277,3298,3320,3341,3361,3366],{"__ignoreMap":66},[84,3122,3123],{"class":86,"line":87},[84,3124,3125],{"class":1378},"\u002F\u002F案例-电影打分\n",[84,3127,3128,3131],{"class":86,"line":98},[84,3129,3130],{"class":129},"#include",[84,3132,3133],{"class":158},"\u003Ciostream>\n",[84,3135,3136,3139,3142,3145],{"class":86,"line":106},[84,3137,3138],{"class":129},"using",[84,3140,3141],{"class":129}," namespace",[84,3143,3144],{"class":90}," std",[84,3146,2471],{"class":154},[84,3148,3149,3151,3154],{"class":86,"line":112},[84,3150,1327],{"class":129},[84,3152,3153],{"class":90}," main",[84,3155,183],{"class":154},[84,3157,3158],{"class":86,"line":425},[84,3159,2727],{"class":154},[84,3161,3162,3165,3168,3170,3172],{"class":86,"line":2395},[84,3163,3164],{"class":129},"    int",[84,3166,3167],{"class":154}," score",[84,3169,867],{"class":129},[84,3171,1504],{"class":94},[84,3173,2471],{"class":154},[84,3175,3176,3178,3180,3183,3185],{"class":86,"line":2401},[84,3177,2732],{"class":154},[84,3179,2352],{"class":129},[84,3181,3182],{"class":158},"\"电影打分：\"",[84,3184,2352],{"class":129},[84,3186,2374],{"class":154},[84,3188,3189,3192,3194],{"class":86,"line":2492},[84,3190,3191],{"class":154},"    cin",[84,3193,2610],{"class":129},[84,3195,3196],{"class":154},"score;\n",[84,3198,3199,3202],{"class":86,"line":2498},[84,3200,3201],{"class":129},"    switch",[84,3203,3204],{"class":154},"(score)\n",[84,3206,3207],{"class":86,"line":2510},[84,3208,3209],{"class":154},"    {\n",[84,3211,3212,3215,3217,3220,3222,3225,3227,3229,3232],{"class":86,"line":2793},[84,3213,3214],{"class":129},"        case",[84,3216,994],{"class":94},[84,3218,3219],{"class":154},":cout",[84,3221,2352],{"class":129},[84,3223,3224],{"class":158},"\"经典\"",[84,3226,2352],{"class":129},[84,3228,2419],{"class":154},[84,3230,3231],{"class":129},"break",[84,3233,2471],{"class":154},[84,3235,3236,3238,3241,3243,3245,3247,3249,3251,3253],{"class":86,"line":2798},[84,3237,3214],{"class":129},[84,3239,3240],{"class":94}," 9",[84,3242,3219],{"class":154},[84,3244,2352],{"class":129},[84,3246,3224],{"class":158},[84,3248,2352],{"class":129},[84,3250,2419],{"class":154},[84,3252,3231],{"class":129},[84,3254,2471],{"class":154},[84,3256,3257,3259,3262,3264,3266,3269,3271,3273,3275],{"class":86,"line":2804},[84,3258,3214],{"class":129},[84,3260,3261],{"class":94}," 8",[84,3263,3219],{"class":154},[84,3265,2352],{"class":129},[84,3267,3268],{"class":158},"\"非常好\"",[84,3270,2352],{"class":129},[84,3272,2419],{"class":154},[84,3274,3231],{"class":129},[84,3276,2471],{"class":154},[84,3278,3279,3281,3284,3286,3288,3290,3292,3294,3296],{"class":86,"line":2809},[84,3280,3214],{"class":129},[84,3282,3283],{"class":94}," 7",[84,3285,3219],{"class":154},[84,3287,2352],{"class":129},[84,3289,3268],{"class":158},[84,3291,2352],{"class":129},[84,3293,2419],{"class":154},[84,3295,3231],{"class":129},[84,3297,2471],{"class":154},[84,3299,3300,3302,3305,3307,3309,3312,3314,3316,3318],{"class":86,"line":2823},[84,3301,3214],{"class":129},[84,3303,3304],{"class":94}," 6",[84,3306,3219],{"class":154},[84,3308,2352],{"class":129},[84,3310,3311],{"class":158},"\"一般\"",[84,3313,2352],{"class":129},[84,3315,2419],{"class":154},[84,3317,3231],{"class":129},[84,3319,2471],{"class":154},[84,3321,3322,3324,3327,3329,3331,3333,3335,3337,3339],{"class":86,"line":2828},[84,3323,3214],{"class":129},[84,3325,3326],{"class":94}," 5",[84,3328,3219],{"class":154},[84,3330,2352],{"class":129},[84,3332,3311],{"class":158},[84,3334,2352],{"class":129},[84,3336,2419],{"class":154},[84,3338,3231],{"class":129},[84,3340,2471],{"class":154},[84,3342,3343,3346,3348,3350,3353,3355,3357,3359],{"class":86,"line":2834},[84,3344,3345],{"class":129},"        default",[84,3347,3219],{"class":154},[84,3349,2352],{"class":129},[84,3351,3352],{"class":158},"\"烂片\"",[84,3354,2352],{"class":129},[84,3356,2419],{"class":154},[84,3358,3231],{"class":129},[84,3360,2471],{"class":154},[84,3362,3363],{"class":86,"line":2855},[84,3364,3365],{"class":154},"    }\n",[84,3367,3368],{"class":86,"line":2860},[84,3369,2746],{"class":154},[19,3371,3372],{},"if和switch区别：",[2315,3374,3375,3378],{},[29,3376,3377],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,3379,3380],{},"switch优点：结构清晰，执行效率高",[198,3382,3384],{"id":3383},"_162循环结构","1.6.2循环结构",[26,3386,3387],{},[29,3388,3389],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[60,3391,3393],{"className":1313,"code":3392,"language":1315,"meta":66,"style":66},"\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",[39,3394,3395,3400,3408,3412,3425,3439,3443,3463,3473,3477,3489],{"__ignoreMap":66},[84,3396,3397],{"class":86,"line":87},[84,3398,3399],{"class":1378},"\u002F\u002F打印0-9数字\n",[84,3401,3402,3404,3406],{"class":86,"line":98},[84,3403,1327],{"class":129},[84,3405,3153],{"class":90},[84,3407,183],{"class":154},[84,3409,3410],{"class":86,"line":106},[84,3411,2727],{"class":154},[84,3413,3414,3416,3419,3421,3423],{"class":86,"line":112},[84,3415,3164],{"class":129},[84,3417,3418],{"class":154}," num",[84,3420,867],{"class":129},[84,3422,1504],{"class":94},[84,3424,2471],{"class":154},[84,3426,3427,3430,3433,3435,3437],{"class":86,"line":425},[84,3428,3429],{"class":129},"    while",[84,3431,3432],{"class":154},"(num",[84,3434,2218],{"class":129},[84,3436,1756],{"class":94},[84,3438,162],{"class":154},[84,3440,3441],{"class":86,"line":2395},[84,3442,3209],{"class":154},[84,3444,3445,3448,3451,3453,3455,3457,3460],{"class":86,"line":2401},[84,3446,3447],{"class":90},"       std",[84,3449,3450],{"class":154},"::cout",[84,3452,2352],{"class":129},[84,3454,2846],{"class":154},[84,3456,2352],{"class":129},[84,3458,3459],{"class":90},"std",[84,3461,3462],{"class":154},"::endl;\n",[84,3464,3465,3468,3471],{"class":86,"line":2492},[84,3466,3467],{"class":154},"        num",[84,3469,3470],{"class":129},"++",[84,3472,2471],{"class":154},[84,3474,3475],{"class":86,"line":2498},[84,3476,3365],{"class":154},[84,3478,3479,3482,3484,3487],{"class":86,"line":2510},[84,3480,3481],{"class":90},"    system",[84,3483,155],{"class":154},[84,3485,3486],{"class":158},"\"pause\"",[84,3488,162],{"class":154},[84,3490,3491],{"class":86,"line":2793},[84,3492,2746],{"class":154},[19,3494,3495],{},"注意：写好循环条件，避免死循环情况",[60,3497,3499],{"className":1313,"code":3498,"language":1315,"meta":66,"style":66},"\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",[39,3500,3501,3506,3513,3520,3530,3538,3542,3547,3574,3579,3584,3592,3619,3624,3629,3642,3652,3656,3666,3671,3684,3689,3703,3708,3723,3727,3740,3744,3749,3753,3767,3775,3780,3786,3792,3797],{"__ignoreMap":66},[84,3502,3503],{"class":86,"line":87},[84,3504,3505],{"class":1378},"\u002F\u002F循环结构-猜数字\n",[84,3507,3508,3510],{"class":86,"line":98},[84,3509,3130],{"class":129},[84,3511,3512],{"class":158}," \u003Ciostream>\n",[84,3514,3515,3517],{"class":86,"line":106},[84,3516,3130],{"class":129},[84,3518,3519],{"class":158}," \u003Cctime>\n",[84,3521,3522,3524,3526,3528],{"class":86,"line":112},[84,3523,3138],{"class":129},[84,3525,3141],{"class":129},[84,3527,3144],{"class":90},[84,3529,2471],{"class":154},[84,3531,3532,3534,3536],{"class":86,"line":425},[84,3533,1327],{"class":129},[84,3535,3153],{"class":90},[84,3537,183],{"class":154},[84,3539,3540],{"class":86,"line":2395},[84,3541,2727],{"class":154},[84,3543,3544],{"class":86,"line":2401},[84,3545,3546],{"class":1378},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[84,3548,3549,3552,3555,3558,3561,3563,3566,3568,3571],{"class":86,"line":2492},[84,3550,3551],{"class":90},"    srand",[84,3553,3554],{"class":154},"((",[84,3556,3557],{"class":129},"unsigned",[84,3559,3560],{"class":129}," int",[84,3562,1739],{"class":154},[84,3564,3565],{"class":90},"time",[84,3567,155],{"class":154},[84,3569,3570],{"class":94},"NULL",[84,3572,3573],{"class":154},"));\n",[84,3575,3576],{"class":86,"line":2498},[84,3577,3578],{"emptyLinePlaceholder":1252},"\n",[84,3580,3581],{"class":86,"line":2510},[84,3582,3583],{"class":1378},"    \u002F\u002F1.系统生成随机数\n",[84,3585,3586,3589],{"class":86,"line":2793},[84,3587,3588],{"class":1378},"    \u002F\u002Frand()%100",[84,3590,3591],{"class":1378}," \u002F\u002F生成0-99的随机数\n",[84,3593,3594,3596,3598,3600,3603,3606,3608,3610,3612,3614,3616],{"class":86,"line":2798},[84,3595,3164],{"class":129},[84,3597,3418],{"class":154},[84,3599,867],{"class":129},[84,3601,3602],{"class":90},"rand",[84,3604,3605],{"class":154},"()",[84,3607,1638],{"class":129},[84,3609,821],{"class":94},[84,3611,1790],{"class":129},[84,3613,1529],{"class":94},[84,3615,1375],{"class":154},[84,3617,3618],{"class":1378}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[84,3620,3621],{"class":86,"line":2804},[84,3622,3623],{"class":1378},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[84,3625,3626],{"class":86,"line":2809},[84,3627,3628],{"class":1378},"    \u002F\u002F2.玩家猜测\n",[84,3630,3631,3633,3636,3638,3640],{"class":86,"line":2823},[84,3632,3164],{"class":129},[84,3634,3635],{"class":154}," val",[84,3637,867],{"class":129},[84,3639,1504],{"class":94},[84,3641,2471],{"class":154},[84,3643,3644,3646,3648,3650],{"class":86,"line":2828},[84,3645,3429],{"class":129},[84,3647,2839],{"class":154},[84,3649,1529],{"class":94},[84,3651,162],{"class":154},[84,3653,3654],{"class":86,"line":2834},[84,3655,3209],{"class":154},[84,3657,3658,3661,3663],{"class":86,"line":2855},[84,3659,3660],{"class":154},"        cin",[84,3662,2610],{"class":129},[84,3664,3665],{"class":154},"val;\n",[84,3667,3668],{"class":86,"line":2860},[84,3669,3670],{"class":1378},"        \u002F\u002F3.判断玩家猜测\n",[84,3672,3673,3676,3679,3681],{"class":86,"line":2874},[84,3674,3675],{"class":129},"        if",[84,3677,3678],{"class":154},"(val",[84,3680,2218],{"class":129},[84,3682,3683],{"class":154},"num) \n",[84,3685,3686],{"class":86,"line":2879},[84,3687,3688],{"class":154},"        {\n",[84,3690,3691,3694,3696,3699,3701],{"class":86,"line":2908},[84,3692,3693],{"class":154},"            cout",[84,3695,2352],{"class":129},[84,3697,3698],{"class":158},"\"猜小了！\"",[84,3700,2352],{"class":129},[84,3702,2374],{"class":154},[84,3704,3705],{"class":86,"line":2913},[84,3706,3707],{"class":154},"        }\n",[84,3709,3710,3713,3715,3718,3720],{"class":86,"line":2930},[84,3711,3712],{"class":129},"        else",[84,3714,2885],{"class":129},[84,3716,3717],{"class":154}," (val",[84,3719,2268],{"class":129},[84,3721,3722],{"class":154},"num)\n",[84,3724,3725],{"class":86,"line":2935},[84,3726,3688],{"class":154},[84,3728,3729,3731,3733,3736,3738],{"class":86,"line":2940},[84,3730,3693],{"class":154},[84,3732,2352],{"class":129},[84,3734,3735],{"class":158},"\"猜大了！\"",[84,3737,2352],{"class":129},[84,3739,2374],{"class":154},[84,3741,3742],{"class":86,"line":2945},[84,3743,3707],{"class":154},[84,3745,3746],{"class":86,"line":2959},[84,3747,3748],{"class":129},"        else\n",[84,3750,3751],{"class":86,"line":2964},[84,3752,3688],{"class":154},[84,3754,3756,3758,3760,3763,3765],{"class":86,"line":3755},30,[84,3757,3693],{"class":154},[84,3759,2352],{"class":129},[84,3761,3762],{"class":158},"\"猜对了！\"",[84,3764,2352],{"class":129},[84,3766,2374],{"class":154},[84,3768,3770,3773],{"class":86,"line":3769},31,[84,3771,3772],{"class":129},"            break",[84,3774,2471],{"class":154},[84,3776,3778],{"class":86,"line":3777},32,[84,3779,3707],{"class":154},[84,3781,3783],{"class":86,"line":3782},33,[84,3784,3785],{"class":1378},"        \u002F\u002F猜对 退出游戏\n",[84,3787,3789],{"class":86,"line":3788},34,[84,3790,3791],{"class":1378},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[84,3793,3795],{"class":86,"line":3794},35,[84,3796,3365],{"class":154},[84,3798,3800],{"class":86,"line":3799},36,[84,3801,2746],{"class":154},[26,3803,3804],{"start":98},[29,3805,3806,3807,3810],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1464,3808,3809],{},"do...while会先执行一次循环语句","，在判断循环语句",[60,3812,3814],{"className":1313,"code":3813,"language":1315,"meta":66,"style":66},"\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",[39,3815,3816,3821,3829,3833,3845,3853,3857,3874,3881,3885,3898,3908],{"__ignoreMap":66},[84,3817,3818],{"class":86,"line":87},[84,3819,3820],{"class":1378},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[84,3822,3823,3825,3827],{"class":86,"line":98},[84,3824,1327],{"class":129},[84,3826,3153],{"class":90},[84,3828,183],{"class":154},[84,3830,3831],{"class":86,"line":106},[84,3832,2727],{"class":154},[84,3834,3835,3837,3839,3841,3843],{"class":86,"line":112},[84,3836,3164],{"class":129},[84,3838,3418],{"class":154},[84,3840,867],{"class":129},[84,3842,1504],{"class":94},[84,3844,2471],{"class":154},[84,3846,3847,3850],{"class":86,"line":425},[84,3848,3849],{"class":129},"    do",[84,3851,3852],{"class":154}," \n",[84,3854,3855],{"class":86,"line":2395},[84,3856,3209],{"class":154},[84,3858,3859,3862,3864,3866,3868,3870,3872],{"class":86,"line":2401},[84,3860,3861],{"class":90},"        std",[84,3863,3450],{"class":154},[84,3865,2352],{"class":129},[84,3867,2846],{"class":154},[84,3869,2352],{"class":129},[84,3871,3459],{"class":90},[84,3873,3462],{"class":154},[84,3875,3876,3878],{"class":86,"line":2492},[84,3877,3467],{"class":154},[84,3879,3880],{"class":129},"++\n",[84,3882,3883],{"class":86,"line":2498},[84,3884,3365],{"class":154},[84,3886,3887,3889,3891,3893,3895],{"class":86,"line":2510},[84,3888,3429],{"class":129},[84,3890,3432],{"class":154},[84,3892,2218],{"class":129},[84,3894,1756],{"class":94},[84,3896,3897],{"class":154},");\n",[84,3899,3900,3902,3904,3906],{"class":86,"line":2793},[84,3901,3481],{"class":90},[84,3903,155],{"class":154},[84,3905,3486],{"class":158},[84,3907,3897],{"class":154},[84,3909,3910],{"class":86,"line":2798},[84,3911,2746],{"class":154},[19,3913,3914],{},"案例-水仙花数",[19,3916,3917],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3919,3920],{},"例如：1^3+5^3+3^3=153",[19,3922,3923],{},"请用do...while语句，求出所有3位数的水仙花数",[60,3925,3927],{"className":1313,"code":3926,"language":1315,"meta":66,"style":66},"#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",[39,3928,3929,3935,3945,3953,3957,3962,3974,3980,3984,3989,4005,4021,4037,4052,4071,4086,4134,4138,4150,4154,4162,4166,4180],{"__ignoreMap":66},[84,3930,3931,3933],{"class":86,"line":87},[84,3932,3130],{"class":129},[84,3934,3512],{"class":158},[84,3936,3937,3939,3941,3943],{"class":86,"line":98},[84,3938,3138],{"class":129},[84,3940,3141],{"class":129},[84,3942,3144],{"class":90},[84,3944,2471],{"class":154},[84,3946,3947,3949,3951],{"class":86,"line":106},[84,3948,1327],{"class":129},[84,3950,3153],{"class":90},[84,3952,183],{"class":154},[84,3954,3955],{"class":86,"line":112},[84,3956,2727],{"class":154},[84,3958,3959],{"class":86,"line":425},[84,3960,3961],{"class":1378},"    \u002F\u002F1.先打印所有三位数字\n",[84,3963,3964,3966,3968,3970,3972],{"class":86,"line":2395},[84,3965,3164],{"class":129},[84,3967,3418],{"class":154},[84,3969,867],{"class":129},[84,3971,821],{"class":94},[84,3973,2471],{"class":154},[84,3975,3976,3978],{"class":86,"line":2401},[84,3977,3849],{"class":129},[84,3979,3852],{"class":154},[84,3981,3982],{"class":86,"line":2492},[84,3983,3209],{"class":154},[84,3985,3986],{"class":86,"line":2498},[84,3987,3988],{"class":1378},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[84,3990,3991,3994,3996,3998,4000,4002],{"class":86,"line":2510},[84,3992,3993],{"class":129},"        int",[84,3995,2579],{"class":154},[84,3997,867],{"class":129},[84,3999,1504],{"class":94},[84,4001,1375],{"class":154},[84,4003,4004],{"class":1378}," \u002F\u002F个位\n",[84,4006,4007,4009,4012,4014,4016,4018],{"class":86,"line":2793},[84,4008,3993],{"class":129},[84,4010,4011],{"class":154}," b",[84,4013,867],{"class":129},[84,4015,1504],{"class":94},[84,4017,1375],{"class":154},[84,4019,4020],{"class":1378}," \u002F\u002F十位\n",[84,4022,4023,4025,4028,4030,4032,4034],{"class":86,"line":2798},[84,4024,3993],{"class":129},[84,4026,4027],{"class":154}," c",[84,4029,867],{"class":129},[84,4031,1504],{"class":94},[84,4033,1375],{"class":154},[84,4035,4036],{"class":1378}," \u002F\u002F百位\n",[84,4038,4039,4042,4044,4046,4048,4050],{"class":86,"line":2804},[84,4040,4041],{"class":154},"        a",[84,4043,867],{"class":129},[84,4045,2846],{"class":154},[84,4047,1638],{"class":129},[84,4049,1756],{"class":94},[84,4051,2471],{"class":154},[84,4053,4054,4057,4059,4061,4063,4065,4067,4069],{"class":86,"line":2809},[84,4055,4056],{"class":154},"        b",[84,4058,867],{"class":129},[84,4060,2846],{"class":154},[84,4062,1893],{"class":129},[84,4064,1756],{"class":94},[84,4066,1638],{"class":129},[84,4068,1756],{"class":94},[84,4070,2471],{"class":154},[84,4072,4073,4076,4078,4080,4082,4084],{"class":86,"line":2823},[84,4074,4075],{"class":154},"        c",[84,4077,867],{"class":129},[84,4079,2846],{"class":154},[84,4081,1893],{"class":129},[84,4083,821],{"class":94},[84,4085,2471],{"class":154},[84,4087,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4125,4128,4131],{"class":86,"line":2828},[84,4089,3675],{"class":129},[84,4091,3022],{"class":154},[84,4093,1043],{"class":129},[84,4095,208],{"class":154},[84,4097,1043],{"class":129},[84,4099,208],{"class":154},[84,4101,1790],{"class":129},[84,4103,1574],{"class":154},[84,4105,1043],{"class":129},[84,4107,1574],{"class":154},[84,4109,1043],{"class":129},[84,4111,1574],{"class":154},[84,4113,1790],{"class":129},[84,4115,1599],{"class":154},[84,4117,1043],{"class":129},[84,4119,1599],{"class":154},[84,4121,1043],{"class":129},[84,4123,4124],{"class":154},"c ",[84,4126,4127],{"class":129},"==",[84,4129,4130],{"class":154}," num)",[84,4132,4133],{"class":1378}," \u002F\u002F如果是水仙花数，才打印\n",[84,4135,4136],{"class":86,"line":2834},[84,4137,3688],{"class":154},[84,4139,4140,4142,4144,4146,4148],{"class":86,"line":2855},[84,4141,3693],{"class":154},[84,4143,2352],{"class":129},[84,4145,2846],{"class":154},[84,4147,2352],{"class":129},[84,4149,2374],{"class":154},[84,4151,4152],{"class":86,"line":2860},[84,4153,3707],{"class":154},[84,4155,4156,4158,4160],{"class":86,"line":2874},[84,4157,3467],{"class":154},[84,4159,3470],{"class":129},[84,4161,2471],{"class":154},[84,4163,4164],{"class":86,"line":2879},[84,4165,3365],{"class":154},[84,4167,4168,4170,4173,4175,4178],{"class":86,"line":2908},[84,4169,3429],{"class":129},[84,4171,4172],{"class":154}," (num ",[84,4174,2218],{"class":129},[84,4176,4177],{"class":94}," 1000",[84,4179,3897],{"class":154},[84,4181,4182],{"class":86,"line":2913},[84,4183,2746],{"class":154},[26,4185,4186],{"start":106},[29,4187,4188],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[60,4190,4192],{"className":1313,"code":4191,"language":1315,"meta":66,"style":66},"\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",[39,4193,4194,4199,4228,4232,4244,4248,4253,4264,4271,4275,4289,4293,4300,4304,4316,4325],{"__ignoreMap":66},[84,4195,4196],{"class":86,"line":87},[84,4197,4198],{"class":1378},"\u002F\u002F从数字0-9打印\n",[84,4200,4201,4204,4206,4208,4211,4213,4215,4218,4220,4222,4224,4226],{"class":86,"line":98},[84,4202,4203],{"class":129},"for",[84,4205,155],{"class":154},[84,4207,1327],{"class":129},[84,4209,4210],{"class":154}," i",[84,4212,867],{"class":129},[84,4214,1504],{"class":94},[84,4216,4217],{"class":154},";i",[84,4219,2218],{"class":129},[84,4221,1756],{"class":94},[84,4223,4217],{"class":154},[84,4225,3470],{"class":129},[84,4227,162],{"class":154},[84,4229,4230],{"class":86,"line":106},[84,4231,2727],{"class":154},[84,4233,4234,4236,4238,4240,4242],{"class":86,"line":112},[84,4235,2732],{"class":154},[84,4237,2352],{"class":129},[84,4239,1751],{"class":154},[84,4241,2352],{"class":129},[84,4243,2374],{"class":154},[84,4245,4246],{"class":86,"line":425},[84,4247,2746],{"class":154},[84,4249,4250],{"class":86,"line":2395},[84,4251,4252],{"class":1378},"\u002F\u002F上式可以进行拆分\n",[84,4254,4255,4257,4259,4261],{"class":86,"line":2401},[84,4256,1327],{"class":129},[84,4258,4210],{"class":154},[84,4260,867],{"class":129},[84,4262,4263],{"class":94},"0\n",[84,4265,4266,4268],{"class":86,"line":2492},[84,4267,4203],{"class":129},[84,4269,4270],{"class":154},"(;;;)\n",[84,4272,4273],{"class":86,"line":2498},[84,4274,2727],{"class":154},[84,4276,4277,4280,4283,4285,4287],{"class":86,"line":2510},[84,4278,4279],{"class":129},"    if",[84,4281,4282],{"class":154},"(i",[84,4284,2891],{"class":129},[84,4286,1756],{"class":94},[84,4288,162],{"class":154},[84,4290,4291],{"class":86,"line":2793},[84,4292,3209],{"class":154},[84,4294,4295,4298],{"class":86,"line":2798},[84,4296,4297],{"class":129},"        break",[84,4299,2471],{"class":154},[84,4301,4302],{"class":86,"line":2804},[84,4303,3365],{"class":154},[84,4305,4306,4308,4310,4312,4314],{"class":86,"line":2809},[84,4307,2732],{"class":154},[84,4309,2352],{"class":129},[84,4311,1751],{"class":154},[84,4313,2352],{"class":129},[84,4315,2374],{"class":154},[84,4317,4318,4321,4323],{"class":86,"line":2823},[84,4319,4320],{"class":154},"    i",[84,4322,3470],{"class":129},[84,4324,2471],{"class":154},[84,4326,4327],{"class":86,"line":2828},[84,4328,2746],{"class":154},[19,4330,4331],{},"小练习",[60,4333,4335],{"className":1313,"code":4334,"language":1315,"meta":66,"style":66},"#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",[39,4336,4337,4343,4353,4361,4365,4370,4375,4403,4407,4412,4417,4458,4462,4475,4479,4483,4487,4499,4503,4507],{"__ignoreMap":66},[84,4338,4339,4341],{"class":86,"line":87},[84,4340,3130],{"class":129},[84,4342,3133],{"class":158},[84,4344,4345,4347,4349,4351],{"class":86,"line":98},[84,4346,3138],{"class":129},[84,4348,3141],{"class":129},[84,4350,3144],{"class":90},[84,4352,2471],{"class":154},[84,4354,4355,4357,4359],{"class":86,"line":106},[84,4356,1327],{"class":129},[84,4358,3153],{"class":90},[84,4360,183],{"class":154},[84,4362,4363],{"class":86,"line":112},[84,4364,2727],{"class":154},[84,4366,4367],{"class":86,"line":425},[84,4368,4369],{"class":1378},"    \u002F\u002F敲桌子案例\n",[84,4371,4372],{"class":86,"line":2395},[84,4373,4374],{"class":1378},"    \u002F\u002F1.先输出1-100的数字\n",[84,4376,4377,4380,4382,4384,4386,4388,4390,4393,4395,4397,4399,4401],{"class":86,"line":2401},[84,4378,4379],{"class":129},"    for",[84,4381,155],{"class":154},[84,4383,1327],{"class":129},[84,4385,4210],{"class":154},[84,4387,867],{"class":129},[84,4389,1529],{"class":94},[84,4391,4392],{"class":154},"; i",[84,4394,2769],{"class":129},[84,4396,821],{"class":94},[84,4398,4392],{"class":154},[84,4400,3470],{"class":129},[84,4402,162],{"class":154},[84,4404,4405],{"class":86,"line":2492},[84,4406,3209],{"class":154},[84,4408,4409],{"class":86,"line":2498},[84,4410,4411],{"class":1378},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[84,4413,4414],{"class":86,"line":2510},[84,4415,4416],{"class":1378},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[84,4418,4419,4421,4423,4425,4427,4429,4431,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456],{"class":86,"line":2793},[84,4420,3675],{"class":129},[84,4422,4282],{"class":154},[84,4424,1638],{"class":129},[84,4426,1679],{"class":94},[84,4428,4127],{"class":129},[84,4430,1504],{"class":94},[84,4432,4433],{"class":129}," ||",[84,4435,4210],{"class":154},[84,4437,1638],{"class":129},[84,4439,1756],{"class":94},[84,4441,4127],{"class":129},[84,4443,1679],{"class":94},[84,4445,4433],{"class":129},[84,4447,4210],{"class":154},[84,4449,1893],{"class":129},[84,4451,1756],{"class":94},[84,4453,4127],{"class":129},[84,4455,1679],{"class":94},[84,4457,162],{"class":154},[84,4459,4460],{"class":86,"line":2798},[84,4461,3688],{"class":154},[84,4463,4464,4466,4468,4471,4473],{"class":86,"line":2804},[84,4465,3693],{"class":154},[84,4467,2352],{"class":129},[84,4469,4470],{"class":158},"\"敲桌子\"",[84,4472,2352],{"class":129},[84,4474,2374],{"class":154},[84,4476,4477],{"class":86,"line":2809},[84,4478,3707],{"class":154},[84,4480,4481],{"class":86,"line":2823},[84,4482,3748],{"class":129},[84,4484,4485],{"class":86,"line":2828},[84,4486,3688],{"class":154},[84,4488,4489,4491,4493,4495,4497],{"class":86,"line":2834},[84,4490,3693],{"class":154},[84,4492,2352],{"class":129},[84,4494,1751],{"class":154},[84,4496,2352],{"class":129},[84,4498,2374],{"class":154},[84,4500,4501],{"class":86,"line":2855},[84,4502,3707],{"class":154},[84,4504,4505],{"class":86,"line":2860},[84,4506,3365],{"class":154},[84,4508,4509],{"class":86,"line":2874},[84,4510,2746],{"class":154},[19,4512,4513],{},"嵌套实现星图",[60,4515,4517],{"className":1313,"code":4516,"language":1315,"meta":66,"style":66},"#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",[39,4518,4519,4525,4535,4543,4547,4573,4577,4606,4610,4621,4625,4634,4638],{"__ignoreMap":66},[84,4520,4521,4523],{"class":86,"line":87},[84,4522,3130],{"class":129},[84,4524,3133],{"class":158},[84,4526,4527,4529,4531,4533],{"class":86,"line":98},[84,4528,3138],{"class":129},[84,4530,3141],{"class":129},[84,4532,3144],{"class":90},[84,4534,2471],{"class":154},[84,4536,4537,4539,4541],{"class":86,"line":106},[84,4538,1327],{"class":129},[84,4540,3153],{"class":90},[84,4542,183],{"class":154},[84,4544,4545],{"class":86,"line":112},[84,4546,2727],{"class":154},[84,4548,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571],{"class":86,"line":425},[84,4550,4379],{"class":129},[84,4552,2839],{"class":154},[84,4554,1327],{"class":129},[84,4556,4210],{"class":154},[84,4558,867],{"class":129},[84,4560,1504],{"class":94},[84,4562,4217],{"class":154},[84,4564,2218],{"class":129},[84,4566,1756],{"class":94},[84,4568,4217],{"class":154},[84,4570,3470],{"class":129},[84,4572,162],{"class":154},[84,4574,4575],{"class":86,"line":2395},[84,4576,3209],{"class":154},[84,4578,4579,4582,4584,4586,4589,4591,4593,4596,4598,4600,4602,4604],{"class":86,"line":2401},[84,4580,4581],{"class":129},"        for",[84,4583,2839],{"class":154},[84,4585,1327],{"class":129},[84,4587,4588],{"class":154}," j",[84,4590,867],{"class":129},[84,4592,1504],{"class":94},[84,4594,4595],{"class":154},";j",[84,4597,2218],{"class":129},[84,4599,1756],{"class":94},[84,4601,4595],{"class":154},[84,4603,3470],{"class":129},[84,4605,162],{"class":154},[84,4607,4608],{"class":86,"line":2492},[84,4609,3688],{"class":154},[84,4611,4612,4614,4616,4619],{"class":86,"line":2498},[84,4613,3693],{"class":154},[84,4615,2352],{"class":129},[84,4617,4618],{"class":158},"\"*\"",[84,4620,2471],{"class":154},[84,4622,4623],{"class":86,"line":2510},[84,4624,3707],{"class":154},[84,4626,4627,4630,4632],{"class":86,"line":2793},[84,4628,4629],{"class":154},"        cout",[84,4631,2352],{"class":129},[84,4633,2374],{"class":154},[84,4635,4636],{"class":86,"line":2798},[84,4637,3365],{"class":154},[84,4639,4640],{"class":86,"line":2804},[84,4641,2746],{"class":154},[19,4643,4644],{},"乘法口诀表",[60,4646,4648],{"className":1313,"code":4647,"language":1315,"meta":66,"style":66},"#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",[39,4649,4650,4656,4666,4674,4678,4704,4708,4733,4737,4777,4781,4789,4793],{"__ignoreMap":66},[84,4651,4652,4654],{"class":86,"line":87},[84,4653,3130],{"class":129},[84,4655,3512],{"class":158},[84,4657,4658,4660,4662,4664],{"class":86,"line":98},[84,4659,3138],{"class":129},[84,4661,3141],{"class":129},[84,4663,3144],{"class":90},[84,4665,2471],{"class":154},[84,4667,4668,4670,4672],{"class":86,"line":106},[84,4669,1327],{"class":129},[84,4671,3153],{"class":90},[84,4673,183],{"class":154},[84,4675,4676],{"class":86,"line":112},[84,4677,2727],{"class":154},[84,4679,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702],{"class":86,"line":425},[84,4681,4379],{"class":129},[84,4683,155],{"class":154},[84,4685,1327],{"class":129},[84,4687,4210],{"class":154},[84,4689,867],{"class":129},[84,4691,1529],{"class":94},[84,4693,4217],{"class":154},[84,4695,2218],{"class":129},[84,4697,1756],{"class":94},[84,4699,4217],{"class":154},[84,4701,3470],{"class":129},[84,4703,162],{"class":154},[84,4705,4706],{"class":86,"line":2395},[84,4707,3209],{"class":154},[84,4709,4710,4712,4714,4716,4718,4720,4722,4724,4726,4729,4731],{"class":86,"line":2401},[84,4711,4581],{"class":129},[84,4713,155],{"class":154},[84,4715,1327],{"class":129},[84,4717,4588],{"class":154},[84,4719,867],{"class":129},[84,4721,1529],{"class":94},[84,4723,4595],{"class":154},[84,4725,2769],{"class":129},[84,4727,4728],{"class":154},"i;j",[84,4730,3470],{"class":129},[84,4732,162],{"class":154},[84,4734,4735],{"class":86,"line":2492},[84,4736,3688],{"class":154},[84,4738,4739,4741,4743,4745,4747,4749,4751,4753,4755,4758,4760,4762,4764,4766,4768,4771,4773,4775],{"class":86,"line":2498},[84,4740,3693],{"class":154},[84,4742,2352],{"class":129},[84,4744,1776],{"class":154},[84,4746,2352],{"class":129},[84,4748,4618],{"class":158},[84,4750,2352],{"class":129},[84,4752,1751],{"class":154},[84,4754,2352],{"class":129},[84,4756,4757],{"class":158},"\"=\"",[84,4759,2352],{"class":129},[84,4761,1751],{"class":154},[84,4763,1043],{"class":129},[84,4765,1776],{"class":154},[84,4767,2352],{"class":129},[84,4769,4770],{"class":158},"'",[84,4772,2411],{"class":94},[84,4774,4770],{"class":158},[84,4776,2471],{"class":154},[84,4778,4779],{"class":86,"line":2510},[84,4780,3707],{"class":154},[84,4782,4783,4785,4787],{"class":86,"line":2793},[84,4784,4629],{"class":154},[84,4786,2352],{"class":129},[84,4788,2374],{"class":154},[84,4790,4791],{"class":86,"line":2798},[84,4792,3365],{"class":154},[84,4794,4795],{"class":86,"line":2804},[84,4796,2746],{"class":154},[198,4798,4800],{"id":4799},"_163跳出语句","1.6.3跳出语句",[26,4802,4803],{},[29,4804,4805],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4807,4808],{},"break使用时机：",[2315,4810,4811,4814,4817],{},[29,4812,4813],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,4815,4816],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,4818,4819],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,4821,4822,4825],{"start":98},[29,4823,4824],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,4826,4827],{},"goto语句\n语法：goto 标记;",[19,4829,4830],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[60,4832,4834],{"className":1313,"code":4833,"language":1315,"meta":66,"style":66},"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",[39,4835,4836,4844,4848,4861,4871,4884,4897,4910,4918,4934],{"__ignoreMap":66},[84,4837,4838,4840,4842],{"class":86,"line":87},[84,4839,1327],{"class":129},[84,4841,3153],{"class":90},[84,4843,183],{"class":154},[84,4845,4846],{"class":86,"line":98},[84,4847,2727],{"class":154},[84,4849,4850,4852,4854,4857,4859],{"class":86,"line":106},[84,4851,2732],{"class":154},[84,4853,2352],{"class":129},[84,4855,4856],{"class":158},"\"1\"",[84,4858,2352],{"class":129},[84,4860,2374],{"class":154},[84,4862,4863,4866,4869],{"class":86,"line":112},[84,4864,4865],{"class":129},"    goto",[84,4867,4868],{"class":90}," FLAG",[84,4870,2471],{"class":154},[84,4872,4873,4875,4877,4880,4882],{"class":86,"line":425},[84,4874,2732],{"class":154},[84,4876,2352],{"class":129},[84,4878,4879],{"class":158},"\"2\"",[84,4881,2352],{"class":129},[84,4883,2374],{"class":154},[84,4885,4886,4888,4890,4893,4895],{"class":86,"line":2395},[84,4887,2732],{"class":154},[84,4889,2352],{"class":129},[84,4891,4892],{"class":158},"\"3\"",[84,4894,2352],{"class":129},[84,4896,2374],{"class":154},[84,4898,4899,4901,4903,4906,4908],{"class":86,"line":2401},[84,4900,2732],{"class":154},[84,4902,2352],{"class":129},[84,4904,4905],{"class":158},"\"4\"",[84,4907,2352],{"class":129},[84,4909,2374],{"class":154},[84,4911,4912,4915],{"class":86,"line":2492},[84,4913,4914],{"class":90},"    FLAG",[84,4916,4917],{"class":154},":\n",[84,4919,4920,4922,4924,4927,4929,4931],{"class":86,"line":2498},[84,4921,2732],{"class":154},[84,4923,2352],{"class":129},[84,4925,4926],{"class":158},"\"5\"",[84,4928,2352],{"class":129},[84,4930,2419],{"class":154},[84,4932,4933],{"class":1378},"\u002F\u002F跳过了2,3,4,直接到5\n",[84,4935,4936],{"class":86,"line":2510},[84,4937,2746],{"class":154},[14,4939,4941],{"id":4940},"_17数组","1.7数组",[198,4943,4945],{"id":4944},"_171一维数组","1.7.1一维数组",[26,4947,4948],{},[29,4949,4950],{},"一维数组定义方式",[458,4952,4953,4963],{},[461,4954,4955],{},[464,4956,4957,4960],{},[467,4958,4959],{},"方式",[467,4961,4962],{},"注意事项",[474,4964,4965,4979,4989],{},[464,4966,4967,4973],{},[479,4968,4969,4970,1375],{},"数据类型 数组名",[84,4971,4972],{},"数组长度",[479,4974,4975,4976,4978],{},"这种方式是先定义再arr",[84,4977,1751],{},"赋值",[464,4980,4981,4986],{},[479,4982,4969,4983,4985],{},[84,4984,4972],{},"={值1,值2....};",[479,4987,4988],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[464,4990,4991,4995],{},[479,4992,4969,4993,4985],{},[84,4994],{},[479,4996,4997,4998,5000],{},"int arr",[84,4999],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5002,5003],{"start":98},[29,5004,5005],{},"一维数组数组名\n用途：",[2315,5007,5008],{},[29,5009,5010],{},"1.可以统计整个数组在内存中的长度：",[60,5012,5014],{"className":1313,"code":5013,"language":1315,"meta":66,"style":66},"sizeof(arr);\nsizeof(arr[0]);\n",[39,5015,5016,5023],{"__ignoreMap":66},[84,5017,5018,5020],{"class":86,"line":87},[84,5019,1322],{"class":129},[84,5021,5022],{"class":154},"(arr);\n",[84,5024,5025,5027,5030,5032],{"class":86,"line":98},[84,5026,1322],{"class":129},[84,5028,5029],{"class":154},"(arr[",[84,5031,1504],{"class":94},[84,5033,5034],{"class":154},"]);\n",[2315,5036,5037],{},[29,5038,5039],{},"2.可以获取数组在内存中的首地址:",[60,5041,5043],{"className":1313,"code":5042,"language":1315,"meta":66,"style":66},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[39,5044,5045,5050,5063,5068],{"__ignoreMap":66},[84,5046,5047],{"class":86,"line":87},[84,5048,5049],{"class":1378},"\u002F\u002F查看16进制的首地址\n",[84,5051,5052,5054,5056,5059,5061],{"class":86,"line":98},[84,5053,2550],{"class":154},[84,5055,2352],{"class":129},[84,5057,5058],{"class":154},"arr",[84,5060,2352],{"class":129},[84,5062,2374],{"class":154},[84,5064,5065],{"class":86,"line":106},[84,5066,5067],{"class":1378},"\u002F\u002F看10进制数\n",[84,5069,5070,5072,5074,5076,5078,5080,5082,5085,5087,5089,5091],{"class":86,"line":112},[84,5071,2550],{"class":154},[84,5073,2352],{"class":129},[84,5075,155],{"class":154},[84,5077,1327],{"class":129},[84,5079,1739],{"class":154},[84,5081,1663],{"class":129},[84,5083,5084],{"class":154},"arr[",[84,5086,1504],{"class":94},[84,5088,2248],{"class":154},[84,5090,2352],{"class":129},[84,5092,2374],{"class":154},[19,5094,5095],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2315,5097,5098],{},[29,5099,5100],{},"1️⃣五只小猪称体重",[60,5102,5104],{"className":1313,"code":5103,"language":1315,"meta":66,"style":66},"#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",[39,5105,5106,5112,5122,5130,5134,5174,5187,5213,5217,5229,5233,5243,5247,5251,5264,5274],{"__ignoreMap":66},[84,5107,5108,5110],{"class":86,"line":87},[84,5109,3130],{"class":129},[84,5111,3133],{"class":158},[84,5113,5114,5116,5118,5120],{"class":86,"line":98},[84,5115,3138],{"class":129},[84,5117,3141],{"class":129},[84,5119,3144],{"class":90},[84,5121,2471],{"class":154},[84,5123,5124,5126,5128],{"class":86,"line":106},[84,5125,1327],{"class":129},[84,5127,3153],{"class":90},[84,5129,183],{"class":154},[84,5131,5132],{"class":86,"line":112},[84,5133,2727],{"class":154},[84,5135,5136,5138,5141,5143,5145,5147,5149,5152,5154,5157,5159,5161,5163,5166,5168,5171],{"class":86,"line":425},[84,5137,3164],{"class":129},[84,5139,5140],{"class":154}," arr[",[84,5142,1629],{"class":94},[84,5144,2248],{"class":154},[84,5146,867],{"class":129},[84,5148,2204],{"class":154},[84,5150,5151],{"class":94},"300",[84,5153,1688],{"class":154},[84,5155,5156],{"class":94},"350",[84,5158,1688],{"class":154},[84,5160,2903],{"class":94},[84,5162,1688],{"class":154},[84,5164,5165],{"class":94},"400",[84,5167,1688],{"class":154},[84,5169,5170],{"class":94},"250",[84,5172,5173],{"class":154},"};\n",[84,5175,5176,5178,5181,5183,5185],{"class":86,"line":2395},[84,5177,3164],{"class":129},[84,5179,5180],{"class":154}," tmp",[84,5182,867],{"class":129},[84,5184,1504],{"class":94},[84,5186,2471],{"class":154},[84,5188,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211],{"class":86,"line":2401},[84,5190,4379],{"class":129},[84,5192,2839],{"class":154},[84,5194,1327],{"class":129},[84,5196,4210],{"class":154},[84,5198,867],{"class":129},[84,5200,1504],{"class":94},[84,5202,4217],{"class":154},[84,5204,2218],{"class":129},[84,5206,1629],{"class":94},[84,5208,4217],{"class":154},[84,5210,3470],{"class":129},[84,5212,162],{"class":154},[84,5214,5215],{"class":86,"line":2492},[84,5216,3209],{"class":154},[84,5218,5219,5221,5224,5226],{"class":86,"line":2498},[84,5220,3675],{"class":129},[84,5222,5223],{"class":154},"(tmp",[84,5225,2218],{"class":129},[84,5227,5228],{"class":154},"arr[i])\n",[84,5230,5231],{"class":86,"line":2510},[84,5232,3688],{"class":154},[84,5234,5235,5238,5240],{"class":86,"line":2793},[84,5236,5237],{"class":154},"            tmp",[84,5239,867],{"class":129},[84,5241,5242],{"class":154},"arr[i];\n",[84,5244,5245],{"class":86,"line":2798},[84,5246,3707],{"class":154},[84,5248,5249],{"class":86,"line":2804},[84,5250,3365],{"class":154},[84,5252,5253,5255,5257,5260,5262],{"class":86,"line":2809},[84,5254,2732],{"class":154},[84,5256,2352],{"class":129},[84,5258,5259],{"class":154},"tmp",[84,5261,2352],{"class":129},[84,5263,2374],{"class":154},[84,5265,5266,5269,5272],{"class":86,"line":2823},[84,5267,5268],{"class":129},"    return",[84,5270,5271],{"class":94}," 0",[84,5273,2471],{"class":154},[84,5275,5276],{"class":86,"line":2828},[84,5277,2746],{"class":154},[2315,5279,5280],{},[29,5281,5282],{},"2️⃣数组元素逆置",[60,5284,5286],{"className":1313,"code":5285,"language":1315,"meta":66,"style":66},"\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",[39,5287,5288,5293,5299,5309,5317,5321,5356,5372,5404,5417,5422,5427,5439,5449,5459,5464,5473,5483,5488,5493,5520,5524,5539,5543,5554,5563],{"__ignoreMap":66},[84,5289,5290],{"class":86,"line":87},[84,5291,5292],{"class":1378},"\u002F\u002F元素逆置\n",[84,5294,5295,5297],{"class":86,"line":98},[84,5296,3130],{"class":129},[84,5298,3133],{"class":158},[84,5300,5301,5303,5305,5307],{"class":86,"line":106},[84,5302,3138],{"class":129},[84,5304,3141],{"class":129},[84,5306,3144],{"class":90},[84,5308,2471],{"class":154},[84,5310,5311,5313,5315],{"class":86,"line":112},[84,5312,1327],{"class":129},[84,5314,3153],{"class":90},[84,5316,183],{"class":154},[84,5318,5319],{"class":86,"line":425},[84,5320,2727],{"class":154},[84,5322,5323,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350,5352,5354],{"class":86,"line":2395},[84,5324,5325],{"class":129},"   int",[84,5327,5140],{"class":154},[84,5329,1629],{"class":94},[84,5331,2248],{"class":154},[84,5333,867],{"class":129},[84,5335,2204],{"class":154},[84,5337,1529],{"class":94},[84,5339,1688],{"class":154},[84,5341,1397],{"class":94},[84,5343,1688],{"class":154},[84,5345,1391],{"class":94},[84,5347,1688],{"class":154},[84,5349,1604],{"class":94},[84,5351,1688],{"class":154},[84,5353,1629],{"class":94},[84,5355,5173],{"class":154},[84,5357,5358,5360,5363,5365,5367,5369],{"class":86,"line":2401},[84,5359,5325],{"class":129},[84,5361,5362],{"class":154}," start",[84,5364,867],{"class":129},[84,5366,1504],{"class":94},[84,5368,1375],{"class":154},[84,5370,5371],{"class":1378},"\u002F\u002F起始下标\n",[84,5373,5374,5376,5379,5382,5385,5388,5390,5392,5395,5397,5399,5401],{"class":86,"line":2492},[84,5375,5325],{"class":129},[84,5377,5378],{"class":154}," end",[84,5380,5381],{"class":129},"=sizeof",[84,5383,5384],{"class":154},"(arr)",[84,5386,5387],{"class":129},"\u002Fsizeof",[84,5389,5029],{"class":154},[84,5391,1504],{"class":94},[84,5393,5394],{"class":154},"])",[84,5396,1841],{"class":129},[84,5398,1529],{"class":94},[84,5400,1375],{"class":154},[84,5402,5403],{"class":1378},"\u002F\u002F结束下标\n",[84,5405,5406,5409,5412,5414],{"class":86,"line":2498},[84,5407,5408],{"class":129},"   while",[84,5410,5411],{"class":154}," (start",[84,5413,2218],{"class":129},[84,5415,5416],{"class":154},"end)\n",[84,5418,5419],{"class":86,"line":2510},[84,5420,5421],{"class":154},"   {\n",[84,5423,5424],{"class":86,"line":2793},[84,5425,5426],{"class":1378},"    \u002F\u002F实现元素互换代码\n",[84,5428,5429,5431,5434,5436],{"class":86,"line":2798},[84,5430,3164],{"class":129},[84,5432,5433],{"class":154}," temp",[84,5435,867],{"class":129},[84,5437,5438],{"class":154},"arr[start];\n",[84,5440,5441,5444,5446],{"class":86,"line":2804},[84,5442,5443],{"class":154},"    arr[start]",[84,5445,867],{"class":129},[84,5447,5448],{"class":154},"arr[end];\n",[84,5450,5451,5454,5456],{"class":86,"line":2809},[84,5452,5453],{"class":154},"    arr[end]",[84,5455,867],{"class":129},[84,5457,5458],{"class":154},"temp;\n",[84,5460,5461],{"class":86,"line":2823},[84,5462,5463],{"class":1378},"    \u002F\u002F下标更新\n",[84,5465,5466,5469,5471],{"class":86,"line":2828},[84,5467,5468],{"class":154},"    start",[84,5470,3470],{"class":129},[84,5472,2471],{"class":154},[84,5474,5475,5478,5481],{"class":86,"line":2834},[84,5476,5477],{"class":154},"    end",[84,5479,5480],{"class":129},"--",[84,5482,2471],{"class":154},[84,5484,5485],{"class":86,"line":2855},[84,5486,5487],{"class":154},"   }\n",[84,5489,5490],{"class":86,"line":2860},[84,5491,5492],{"class":1378},"   \u002F\u002F输出逆置后的数组\n",[84,5494,5495,5498,5500,5502,5504,5506,5508,5510,5512,5514,5516,5518],{"class":86,"line":2874},[84,5496,5497],{"class":129},"   for",[84,5499,2839],{"class":154},[84,5501,1327],{"class":129},[84,5503,4210],{"class":154},[84,5505,867],{"class":129},[84,5507,1504],{"class":94},[84,5509,4217],{"class":154},[84,5511,2218],{"class":129},[84,5513,1629],{"class":94},[84,5515,4217],{"class":154},[84,5517,3470],{"class":129},[84,5519,162],{"class":154},[84,5521,5522],{"class":86,"line":2879},[84,5523,5421],{"class":154},[84,5525,5526,5528,5530,5533,5535,5537],{"class":86,"line":2908},[84,5527,2732],{"class":154},[84,5529,2352],{"class":129},[84,5531,5532],{"class":154},"arr[i]",[84,5534,2352],{"class":129},[84,5536,962],{"class":158},[84,5538,2471],{"class":154},[84,5540,5541],{"class":86,"line":2913},[84,5542,5487],{"class":154},[84,5544,5545,5548,5550,5552],{"class":86,"line":2930},[84,5546,5547],{"class":90},"   system",[84,5549,155],{"class":154},[84,5551,3486],{"class":158},[84,5553,3897],{"class":154},[84,5555,5556,5559,5561],{"class":86,"line":2935},[84,5557,5558],{"class":129},"   return",[84,5560,5271],{"class":94},[84,5562,2471],{"class":154},[84,5564,5565],{"class":86,"line":2940},[84,5566,2746],{"class":154},[2315,5568,5569],{},[29,5570,5571],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[60,5573,5575],{"className":1313,"code":5574,"language":1315,"meta":66,"style":66},"\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",[39,5576,5577,5582,5588,5598,5606,5610,5662,5675,5701,5705,5719,5723,5728,5733,5763,5767,5772,5806,5810,5815,5835,5840,5852,5868,5883,5888,5892,5896,5909,5935,5939,5953,5957,5965],{"__ignoreMap":66},[84,5578,5579],{"class":86,"line":87},[84,5580,5581],{"class":1378},"\u002F\u002F冒泡排序,升序\n",[84,5583,5584,5586],{"class":86,"line":98},[84,5585,3130],{"class":129},[84,5587,3133],{"class":158},[84,5589,5590,5592,5594,5596],{"class":86,"line":106},[84,5591,3138],{"class":129},[84,5593,3141],{"class":129},[84,5595,3144],{"class":90},[84,5597,2471],{"class":154},[84,5599,5600,5602,5604],{"class":86,"line":112},[84,5601,1327],{"class":129},[84,5603,3153],{"class":90},[84,5605,183],{"class":154},[84,5607,5608],{"class":86,"line":425},[84,5609,2727],{"class":154},[84,5611,5612,5614,5616,5618,5621,5623,5626,5628,5630,5632,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660],{"class":86,"line":2395},[84,5613,3164],{"class":129},[84,5615,5140],{"class":154},[84,5617,1730],{"class":94},[84,5619,5620],{"class":154},"] ",[84,5622,867],{"class":129},[84,5624,5625],{"class":154}," {",[84,5627,1604],{"class":94},[84,5629,1688],{"class":154},[84,5631,1397],{"class":94},[84,5633,1688],{"class":154},[84,5635,1705],{"class":94},[84,5637,1688],{"class":154},[84,5639,1504],{"class":94},[84,5641,1688],{"class":154},[84,5643,1629],{"class":94},[84,5645,1688],{"class":154},[84,5647,1679],{"class":94},[84,5649,1688],{"class":154},[84,5651,1529],{"class":94},[84,5653,1688],{"class":154},[84,5655,1391],{"class":94},[84,5657,1688],{"class":154},[84,5659,1730],{"class":94},[84,5661,5173],{"class":154},[84,5663,5664,5666,5668,5671,5673],{"class":86,"line":2401},[84,5665,2732],{"class":154},[84,5667,2352],{"class":129},[84,5669,5670],{"class":158},"\"排序前：\"",[84,5672,2352],{"class":129},[84,5674,2374],{"class":154},[84,5676,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695,5697,5699],{"class":86,"line":2492},[84,5678,4379],{"class":129},[84,5680,2839],{"class":154},[84,5682,1327],{"class":129},[84,5684,4210],{"class":154},[84,5686,867],{"class":129},[84,5688,1504],{"class":94},[84,5690,4217],{"class":154},[84,5692,2218],{"class":129},[84,5694,1730],{"class":94},[84,5696,4217],{"class":154},[84,5698,3470],{"class":129},[84,5700,162],{"class":154},[84,5702,5703],{"class":86,"line":2498},[84,5704,3209],{"class":154},[84,5706,5707,5709,5711,5713,5715,5717],{"class":86,"line":2510},[84,5708,4629],{"class":154},[84,5710,2352],{"class":129},[84,5712,5532],{"class":154},[84,5714,2352],{"class":129},[84,5716,962],{"class":158},[84,5718,2471],{"class":154},[84,5720,5721],{"class":86,"line":2793},[84,5722,3365],{"class":154},[84,5724,5725],{"class":86,"line":2798},[84,5726,5727],{"class":1378},"    \u002F\u002F开始冒泡排序\n",[84,5729,5730],{"class":86,"line":2804},[84,5731,5732],{"class":1378},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[84,5734,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753,5755,5757,5759,5761],{"class":86,"line":2809},[84,5736,4379],{"class":129},[84,5738,2839],{"class":154},[84,5740,1327],{"class":129},[84,5742,4210],{"class":154},[84,5744,867],{"class":129},[84,5746,1504],{"class":94},[84,5748,4217],{"class":154},[84,5750,2218],{"class":129},[84,5752,1730],{"class":94},[84,5754,1841],{"class":129},[84,5756,1529],{"class":94},[84,5758,4217],{"class":154},[84,5760,3470],{"class":129},[84,5762,162],{"class":154},[84,5764,5765],{"class":86,"line":2823},[84,5766,3209],{"class":154},[84,5768,5769],{"class":86,"line":2828},[84,5770,5771],{"class":1378},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[84,5773,5774,5776,5778,5780,5782,5784,5786,5788,5790,5792,5794,5796,5798,5800,5802,5804],{"class":86,"line":2834},[84,5775,4581],{"class":129},[84,5777,2839],{"class":154},[84,5779,1327],{"class":129},[84,5781,4588],{"class":154},[84,5783,867],{"class":129},[84,5785,1504],{"class":94},[84,5787,4595],{"class":154},[84,5789,2218],{"class":129},[84,5791,1730],{"class":94},[84,5793,1841],{"class":129},[84,5795,1751],{"class":154},[84,5797,1841],{"class":129},[84,5799,1529],{"class":94},[84,5801,4595],{"class":154},[84,5803,3470],{"class":129},[84,5805,162],{"class":154},[84,5807,5808],{"class":86,"line":2855},[84,5809,3688],{"class":154},[84,5811,5812],{"class":86,"line":2860},[84,5813,5814],{"class":1378},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[84,5816,5817,5820,5823,5825,5828,5830,5832],{"class":86,"line":2874},[84,5818,5819],{"class":129},"            if",[84,5821,5822],{"class":154},"(arr[j]",[84,5824,2268],{"class":129},[84,5826,5827],{"class":154},"arr[j",[84,5829,1790],{"class":129},[84,5831,1529],{"class":94},[84,5833,5834],{"class":154},"])\n",[84,5836,5837],{"class":86,"line":2879},[84,5838,5839],{"class":154},"            {\n",[84,5841,5842,5845,5847,5849],{"class":86,"line":2908},[84,5843,5844],{"class":129},"                int",[84,5846,5433],{"class":154},[84,5848,867],{"class":129},[84,5850,5851],{"class":154},"arr[j];\n",[84,5853,5854,5857,5859,5861,5863,5865],{"class":86,"line":2913},[84,5855,5856],{"class":154},"                arr[j]",[84,5858,867],{"class":129},[84,5860,5827],{"class":154},[84,5862,1790],{"class":129},[84,5864,1529],{"class":94},[84,5866,5867],{"class":154},"];\n",[84,5869,5870,5873,5875,5877,5879,5881],{"class":86,"line":2930},[84,5871,5872],{"class":154},"                arr[j",[84,5874,1790],{"class":129},[84,5876,1529],{"class":94},[84,5878,2248],{"class":154},[84,5880,867],{"class":129},[84,5882,5458],{"class":154},[84,5884,5885],{"class":86,"line":2935},[84,5886,5887],{"class":154},"            }\n",[84,5889,5890],{"class":86,"line":2940},[84,5891,3707],{"class":154},[84,5893,5894],{"class":86,"line":2945},[84,5895,3365],{"class":154},[84,5897,5898,5900,5902,5905,5907],{"class":86,"line":2959},[84,5899,2732],{"class":154},[84,5901,2352],{"class":129},[84,5903,5904],{"class":158},"\"排序后：\"",[84,5906,2352],{"class":129},[84,5908,2374],{"class":154},[84,5910,5911,5913,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933],{"class":86,"line":2964},[84,5912,4379],{"class":129},[84,5914,2839],{"class":154},[84,5916,1327],{"class":129},[84,5918,4210],{"class":154},[84,5920,867],{"class":129},[84,5922,1504],{"class":94},[84,5924,4217],{"class":154},[84,5926,2218],{"class":129},[84,5928,1730],{"class":94},[84,5930,4217],{"class":154},[84,5932,3470],{"class":129},[84,5934,162],{"class":154},[84,5936,5937],{"class":86,"line":3755},[84,5938,3209],{"class":154},[84,5940,5941,5943,5945,5947,5949,5951],{"class":86,"line":3769},[84,5942,4629],{"class":154},[84,5944,2352],{"class":129},[84,5946,5532],{"class":154},[84,5948,2352],{"class":129},[84,5950,962],{"class":158},[84,5952,2471],{"class":154},[84,5954,5955],{"class":86,"line":3777},[84,5956,3365],{"class":154},[84,5958,5959,5961,5963],{"class":86,"line":3782},[84,5960,5268],{"class":129},[84,5962,5271],{"class":94},[84,5964,2471],{"class":154},[84,5966,5967],{"class":86,"line":3788},[84,5968,2746],{"class":154},[198,5970,5972],{"id":5971},"_172二维数组","1.7.2二维数组",[26,5974,5975],{},[29,5976,5977],{},"二维数组的四种定义方式",[458,5979,5980,5989],{},[461,5981,5982],{},[464,5983,5984,5987],{},[467,5985,5986],{},"序号",[467,5988,4959],{},[474,5990,5991,6001,6010,6019,6028],{},[464,5992,5993,5995],{},[479,5994,1529],{},[479,5996,5997,5998,1375],{},"数据类型 数组名[行数]",[84,5999,6000],{},"列数",[464,6002,6003,6005],{},[479,6004,1397],{},[479,6006,5997,6007,6009],{},[84,6008,6000],{},"={ {数据1,数据2}，{数据3，数据4}... }",[464,6011,6012,6014],{},[479,6013,1391],{},[479,6015,5997,6016,6018],{},[84,6017,6000],{},"={数据1,数据2,数据3...}",[464,6020,6021,6023],{},[479,6022,1604],{},[479,6024,6025,6026,6018],{},"数据类型 数组名[]",[84,6027,6000],{},[464,6029,6030,6033],{},[479,6031,6032],{},"注意：不能只省略列数",[479,6034],{},[26,6036,6037],{"start":98},[29,6038,6039],{},"二维数组数组名",[2315,6041,6042,6045],{},[29,6043,6044],{},"1.查看二维数组所占内存空间",[29,6046,6047],{},"2.获取二维数组首地址",[19,6049,6050],{},"已知二维数组，求二维数组的行数与列数",[60,6052,6054],{"className":1313,"code":6053,"language":1315,"meta":66,"style":66},"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",[39,6055,6056,6064,6068,6086,6090,6108,6124,6129,6154,6187],{"__ignoreMap":66},[84,6057,6058,6060,6062],{"class":86,"line":87},[84,6059,1327],{"class":129},[84,6061,3153],{"class":90},[84,6063,183],{"class":154},[84,6065,6066],{"class":86,"line":98},[84,6067,2727],{"class":154},[84,6069,6070,6072,6074,6076,6079,6081,6083],{"class":86,"line":106},[84,6071,3164],{"class":129},[84,6073,5140],{"class":154},[84,6075,1397],{"class":94},[84,6077,6078],{"class":154},"][",[84,6080,1391],{"class":94},[84,6082,2248],{"class":154},[84,6084,6085],{"class":129},"=\n",[84,6087,6088],{"class":86,"line":112},[84,6089,3209],{"class":154},[84,6091,6092,6095,6097,6099,6101,6103,6105],{"class":86,"line":425},[84,6093,6094],{"class":154},"        {",[84,6096,1529],{"class":94},[84,6098,1688],{"class":154},[84,6100,1397],{"class":94},[84,6102,1688],{"class":154},[84,6104,1391],{"class":94},[84,6106,6107],{"class":154},"},\n",[84,6109,6110,6112,6114,6116,6118,6120,6122],{"class":86,"line":2395},[84,6111,6094],{"class":154},[84,6113,1604],{"class":94},[84,6115,1688],{"class":154},[84,6117,1629],{"class":94},[84,6119,1688],{"class":154},[84,6121,1654],{"class":94},[84,6123,2746],{"class":154},[84,6125,6126],{"class":86,"line":2401},[84,6127,6128],{"class":154},"    };\n",[84,6130,6131,6133,6135,6138,6140,6142,6144,6146,6148,6150,6152],{"class":86,"line":2492},[84,6132,2732],{"class":154},[84,6134,2352],{"class":129},[84,6136,6137],{"class":158},"\"二维数组的行数\"",[84,6139,2553],{"class":129},[84,6141,5384],{"class":154},[84,6143,5387],{"class":129},[84,6145,5029],{"class":154},[84,6147,1504],{"class":94},[84,6149,5394],{"class":154},[84,6151,2352],{"class":129},[84,6153,2374],{"class":154},[84,6155,6156,6158,6160,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183,6185],{"class":86,"line":2498},[84,6157,2732],{"class":154},[84,6159,2352],{"class":129},[84,6161,6162],{"class":158},"\"二维数组的列数\"",[84,6164,2553],{"class":129},[84,6166,5029],{"class":154},[84,6168,1504],{"class":94},[84,6170,5394],{"class":154},[84,6172,5387],{"class":129},[84,6174,5029],{"class":154},[84,6176,1504],{"class":94},[84,6178,6078],{"class":154},[84,6180,1504],{"class":94},[84,6182,5394],{"class":154},[84,6184,2352],{"class":129},[84,6186,2374],{"class":154},[84,6188,6189],{"class":86,"line":2510},[84,6190,2746],{"class":154},[19,6192,6193],{},"查看二维数组首地址",[60,6195,6197],{"className":1313,"code":6196,"language":1315,"meta":66,"style":66},"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",[39,6198,6199,6216,6242,6267],{"__ignoreMap":66},[84,6200,6201,6203,6205,6208,6210,6212,6214],{"class":86,"line":87},[84,6202,2550],{"class":154},[84,6204,2352],{"class":129},[84,6206,6207],{"class":158},"\"二维数组首地址：\"",[84,6209,2352],{"class":129},[84,6211,5058],{"class":154},[84,6213,2352],{"class":129},[84,6215,2374],{"class":154},[84,6217,6218,6220,6222,6225,6227,6229,6231,6234,6236,6238,6240],{"class":86,"line":98},[84,6219,2550],{"class":154},[84,6221,2352],{"class":129},[84,6223,6224],{"class":158},"\"二维数组第一行的首地址：\"",[84,6226,2352],{"class":129},[84,6228,155],{"class":154},[84,6230,1327],{"class":129},[84,6232,6233],{"class":154},")arr[",[84,6235,1504],{"class":94},[84,6237,2248],{"class":154},[84,6239,2352],{"class":129},[84,6241,2374],{"class":154},[84,6243,6244,6246,6248,6251,6253,6255,6257,6259,6261,6263,6265],{"class":86,"line":106},[84,6245,2550],{"class":154},[84,6247,2352],{"class":129},[84,6249,6250],{"class":158},"\"二维数组第二行的首地址：\"",[84,6252,2352],{"class":129},[84,6254,155],{"class":154},[84,6256,1327],{"class":129},[84,6258,6233],{"class":154},[84,6260,1529],{"class":94},[84,6262,2248],{"class":154},[84,6264,2352],{"class":129},[84,6266,2374],{"class":154},[84,6268,6269,6271,6273,6276,6278,6280,6282,6284,6286,6288,6290,6292,6294,6296,6298,6300],{"class":86,"line":112},[84,6270,2550],{"class":154},[84,6272,2352],{"class":129},[84,6274,6275],{"class":158},"\"二维数组第一个元素的首地址:\"",[84,6277,2352],{"class":129},[84,6279,155],{"class":154},[84,6281,1327],{"class":129},[84,6283,1739],{"class":154},[84,6285,1663],{"class":129},[84,6287,5084],{"class":154},[84,6289,1504],{"class":94},[84,6291,6078],{"class":154},[84,6293,1504],{"class":94},[84,6295,2248],{"class":154},[84,6297,2352],{"class":129},[84,6299,2419],{"class":154},[84,6301,6302],{"class":1378},"\u002F\u002F对于数，要加取址符\n",[1222,6304,6305],{},"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":66,"searchDepth":98,"depth":98,"links":6307},[6308,6309,6310,6318,6319,6325,6330],{"id":1268,"depth":98,"text":1269},{"id":1275,"depth":98,"text":1276},{"id":1290,"depth":98,"text":1291,"children":6311},[6312,6313,6314,6315,6316,6317],{"id":1294,"depth":106,"text":1295},{"id":1339,"depth":106,"text":1340},{"id":1405,"depth":106,"text":1406},{"id":2333,"depth":106,"text":2334},{"id":2425,"depth":106,"text":2426},{"id":2524,"depth":106,"text":2525},{"id":2566,"depth":98,"text":2567},{"id":2634,"depth":98,"text":2635,"children":6320},[6321,6322,6323,6324],{"id":2638,"depth":106,"text":2639},{"id":2660,"depth":106,"text":2661},{"id":2669,"depth":106,"text":2670},{"id":2678,"depth":106,"text":2679},{"id":2687,"depth":98,"text":2688,"children":6326},[6327,6328,6329],{"id":2691,"depth":106,"text":2692},{"id":3383,"depth":106,"text":3384},{"id":4799,"depth":106,"text":4800},{"id":4940,"depth":98,"text":4941,"children":6331},[6332,6333],{"id":4944,"depth":106,"text":4945},{"id":5971,"depth":106,"text":5972},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1260,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6340,"title":6341,"body":6342,"description":66,"extension":1250,"meta":7438,"navigation":1252,"path":7439,"seo":7440,"stem":7441,"__hash__":7442},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6343,"toc":7430},[6344,6347,6351,6359,6365,6368,6433,6437,6440,6516,6520,6523,6526,6529,6742,6746,6751,6815,6820,6887,6892,6983,6986,7090,7094,7097,7103,7247,7251,7254,7268,7271,7316,7319,7427],[10,6345,6341],{"id":6346},"_2函数",[14,6348,6350],{"id":6349},"_21函数概述","2.1函数概述",[26,6352,6353,6356],{},[29,6354,6355],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,6357,6358],{},"语法：",[60,6360,6363],{"className":6361,"code":6362,"language":65,"meta":66},[63],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[39,6364,6362],{"__ignoreMap":66},[19,6366,6367],{},"小案例",[60,6369,6371],{"className":1313,"code":6370,"language":1315,"meta":66,"style":66},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[39,6372,6373,6378,6401,6405,6422,6429],{"__ignoreMap":66},[84,6374,6375],{"class":86,"line":87},[84,6376,6377],{"class":1378},"\u002F\u002Fnum1,num2形参\n",[84,6379,6380,6382,6385,6387,6389,6392,6394,6396,6399],{"class":86,"line":98},[84,6381,1327],{"class":129},[84,6383,6384],{"class":90}," add",[84,6386,155],{"class":154},[84,6388,1327],{"class":129},[84,6390,6391],{"class":928}," num1",[84,6393,1688],{"class":154},[84,6395,1327],{"class":129},[84,6397,6398],{"class":928}," num2",[84,6400,162],{"class":154},[84,6402,6403],{"class":86,"line":106},[84,6404,2727],{"class":154},[84,6406,6407,6409,6412,6414,6417,6419],{"class":86,"line":112},[84,6408,3164],{"class":129},[84,6410,6411],{"class":154}," sum",[84,6413,867],{"class":129},[84,6415,6416],{"class":154},"num1",[84,6418,1790],{"class":129},[84,6420,6421],{"class":154},"num2;\n",[84,6423,6424,6426],{"class":86,"line":425},[84,6425,5268],{"class":129},[84,6427,6428],{"class":154}," sum;\n",[84,6430,6431],{"class":86,"line":2395},[84,6432,2746],{"class":154},[14,6434,6436],{"id":6435},"_22函数调用","2.2函数调用",[19,6438,6439],{},"调用刚刚写的求和函数",[60,6441,6443],{"className":1313,"code":6442,"language":1315,"meta":66,"style":66},"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",[39,6444,6445,6453,6457,6462,6474,6486,6495,6500,6512],{"__ignoreMap":66},[84,6446,6447,6449,6451],{"class":86,"line":87},[84,6448,1327],{"class":129},[84,6450,3153],{"class":90},[84,6452,183],{"class":154},[84,6454,6455],{"class":86,"line":98},[84,6456,2727],{"class":154},[84,6458,6459],{"class":86,"line":106},[84,6460,6461],{"class":1378},"    \u002F\u002Fa,b实参\n",[84,6463,6464,6466,6468,6470,6472],{"class":86,"line":112},[84,6465,3164],{"class":129},[84,6467,2579],{"class":154},[84,6469,867],{"class":129},[84,6471,1504],{"class":94},[84,6473,2471],{"class":154},[84,6475,6476,6478,6480,6482,6484],{"class":86,"line":425},[84,6477,3164],{"class":129},[84,6479,4011],{"class":154},[84,6481,867],{"class":129},[84,6483,1504],{"class":94},[84,6485,2471],{"class":154},[84,6487,6488,6490,6492],{"class":86,"line":2395},[84,6489,3191],{"class":154},[84,6491,2610],{"class":129},[84,6493,6494],{"class":154},"a,b;\n",[84,6496,6497],{"class":86,"line":2401},[84,6498,6499],{"class":1378},"    \u002F\u002F调用函数时，实参值传给了形参\n",[84,6501,6502,6504,6506,6509],{"class":86,"line":2492},[84,6503,2732],{"class":154},[84,6505,2352],{"class":129},[84,6507,6508],{"class":90},"add",[84,6510,6511],{"class":154},"(a,b);\n",[84,6513,6514],{"class":86,"line":2498},[84,6515,2746],{"class":154},[14,6517,6519],{"id":6518},"_23值传递","2.3值传递",[19,6521,6522],{},"值传递就是函数调用时实参将数值传给形参",[19,6524,6525],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6527,6528],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[60,6530,6532],{"className":1313,"code":6531,"language":1315,"meta":66,"style":66},"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",[39,6533,6534,6556,6560,6573,6590,6608,6619,6628,6637,6650,6666,6682,6691,6695,6703,6707,6719,6731,6738],{"__ignoreMap":66},[84,6535,6536,6539,6542,6544,6546,6548,6550,6552,6554],{"class":86,"line":87},[84,6537,6538],{"class":129},"void",[84,6540,6541],{"class":90}," swap",[84,6543,155],{"class":154},[84,6545,1327],{"class":129},[84,6547,6391],{"class":928},[84,6549,1688],{"class":154},[84,6551,1327],{"class":129},[84,6553,6398],{"class":928},[84,6555,162],{"class":154},[84,6557,6558],{"class":86,"line":98},[84,6559,2727],{"class":154},[84,6561,6562,6564,6566,6569,6571],{"class":86,"line":106},[84,6563,2732],{"class":154},[84,6565,2352],{"class":129},[84,6567,6568],{"class":158},"\"交换前：\"",[84,6570,2352],{"class":129},[84,6572,2374],{"class":154},[84,6574,6575,6577,6579,6582,6584,6586,6588],{"class":86,"line":112},[84,6576,2732],{"class":154},[84,6578,2352],{"class":129},[84,6580,6581],{"class":158},"\"num1=\"",[84,6583,2352],{"class":129},[84,6585,6416],{"class":154},[84,6587,2352],{"class":129},[84,6589,2374],{"class":154},[84,6591,6592,6594,6596,6599,6601,6604,6606],{"class":86,"line":425},[84,6593,2732],{"class":154},[84,6595,2352],{"class":129},[84,6597,6598],{"class":158},"\"num2=\"",[84,6600,2352],{"class":129},[84,6602,6603],{"class":154},"num2",[84,6605,2352],{"class":129},[84,6607,2374],{"class":154},[84,6609,6610,6612,6614,6616],{"class":86,"line":2395},[84,6611,3164],{"class":129},[84,6613,5433],{"class":154},[84,6615,867],{"class":129},[84,6617,6618],{"class":154},"num1;\n",[84,6620,6621,6624,6626],{"class":86,"line":2401},[84,6622,6623],{"class":154},"    num1",[84,6625,867],{"class":129},[84,6627,6421],{"class":154},[84,6629,6630,6633,6635],{"class":86,"line":2492},[84,6631,6632],{"class":154},"    num2",[84,6634,867],{"class":129},[84,6636,5458],{"class":154},[84,6638,6639,6641,6643,6646,6648],{"class":86,"line":2498},[84,6640,2732],{"class":154},[84,6642,2352],{"class":129},[84,6644,6645],{"class":158},"\"交换后：\"",[84,6647,2352],{"class":129},[84,6649,2374],{"class":154},[84,6651,6652,6654,6656,6658,6660,6662,6664],{"class":86,"line":2510},[84,6653,2732],{"class":154},[84,6655,2352],{"class":129},[84,6657,6581],{"class":158},[84,6659,2352],{"class":129},[84,6661,6416],{"class":154},[84,6663,2352],{"class":129},[84,6665,2374],{"class":154},[84,6667,6668,6670,6672,6674,6676,6678,6680],{"class":86,"line":2793},[84,6669,2732],{"class":154},[84,6671,2352],{"class":129},[84,6673,6598],{"class":158},[84,6675,2352],{"class":129},[84,6677,6603],{"class":154},[84,6679,2352],{"class":129},[84,6681,2374],{"class":154},[84,6683,6684,6686,6688],{"class":86,"line":2798},[84,6685,5268],{"class":129},[84,6687,1375],{"class":154},[84,6689,6690],{"class":1378},"\u002F\u002F或者不写\n",[84,6692,6693],{"class":86,"line":2804},[84,6694,2746],{"class":154},[84,6696,6697,6699,6701],{"class":86,"line":2809},[84,6698,1327],{"class":129},[84,6700,3153],{"class":90},[84,6702,183],{"class":154},[84,6704,6705],{"class":86,"line":2823},[84,6706,2727],{"class":154},[84,6708,6709,6711,6713,6715,6717],{"class":86,"line":2828},[84,6710,3164],{"class":129},[84,6712,2579],{"class":154},[84,6714,867],{"class":129},[84,6716,1756],{"class":94},[84,6718,2471],{"class":154},[84,6720,6721,6723,6725,6727,6729],{"class":86,"line":2834},[84,6722,3164],{"class":129},[84,6724,4011],{"class":154},[84,6726,867],{"class":129},[84,6728,2008],{"class":94},[84,6730,2471],{"class":154},[84,6732,6733,6736],{"class":86,"line":2855},[84,6734,6735],{"class":90},"    swap",[84,6737,6511],{"class":154},[84,6739,6740],{"class":86,"line":2860},[84,6741,2746],{"class":154},[14,6743,6745],{"id":6744},"_24函数的常见形式","2.4函数的常见形式",[26,6747,6748],{},[29,6749,6750],{},"无参无返",[60,6752,6754],{"className":1313,"code":6753,"language":1315,"meta":66,"style":66},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[39,6755,6756,6765,6769,6782,6786,6794,6798,6803,6811],{"__ignoreMap":66},[84,6757,6758,6760,6763],{"class":86,"line":87},[84,6759,6538],{"class":129},[84,6761,6762],{"class":90}," test01",[84,6764,183],{"class":154},[84,6766,6767],{"class":86,"line":98},[84,6768,2727],{"class":154},[84,6770,6771,6773,6775,6778,6780],{"class":86,"line":106},[84,6772,2732],{"class":154},[84,6774,2352],{"class":129},[84,6776,6777],{"class":158},"\"你好\"",[84,6779,2352],{"class":129},[84,6781,2374],{"class":154},[84,6783,6784],{"class":86,"line":112},[84,6785,2746],{"class":154},[84,6787,6788,6790,6792],{"class":86,"line":425},[84,6789,1327],{"class":129},[84,6791,3153],{"class":90},[84,6793,183],{"class":154},[84,6795,6796],{"class":86,"line":2395},[84,6797,2727],{"class":154},[84,6799,6800],{"class":86,"line":2401},[84,6801,6802],{"class":1378},"    \u002F\u002F函数调用\n",[84,6804,6805,6808],{"class":86,"line":2492},[84,6806,6807],{"class":90},"    test01",[84,6809,6810],{"class":154},"();\n",[84,6812,6813],{"class":86,"line":2498},[84,6814,2746],{"class":154},[26,6816,6817],{"start":98},[29,6818,6819],{},"有参无返",[60,6821,6823],{"className":1313,"code":6822,"language":1315,"meta":66,"style":66},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[39,6824,6825,6840,6844,6856,6860,6868,6872,6883],{"__ignoreMap":66},[84,6826,6827,6829,6832,6834,6836,6838],{"class":86,"line":87},[84,6828,6538],{"class":129},[84,6830,6831],{"class":90}," test02",[84,6833,155],{"class":154},[84,6835,1327],{"class":129},[84,6837,2579],{"class":928},[84,6839,162],{"class":154},[84,6841,6842],{"class":86,"line":98},[84,6843,2727],{"class":154},[84,6845,6846,6848,6850,6852,6854],{"class":86,"line":106},[84,6847,2732],{"class":154},[84,6849,2352],{"class":129},[84,6851,6777],{"class":158},[84,6853,2352],{"class":129},[84,6855,2374],{"class":154},[84,6857,6858],{"class":86,"line":112},[84,6859,2746],{"class":154},[84,6861,6862,6864,6866],{"class":86,"line":425},[84,6863,1327],{"class":129},[84,6865,3153],{"class":90},[84,6867,183],{"class":154},[84,6869,6870],{"class":86,"line":2395},[84,6871,2727],{"class":154},[84,6873,6874,6877,6879,6881],{"class":86,"line":2401},[84,6875,6876],{"class":90},"    test02",[84,6878,155],{"class":154},[84,6880,821],{"class":94},[84,6882,3897],{"class":154},[84,6884,6885],{"class":86,"line":2492},[84,6886,2746],{"class":154},[26,6888,6889],{"start":106},[29,6890,6891],{},"无参有返",[60,6893,6895],{"className":1313,"code":6894,"language":1315,"meta":66,"style":66},"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",[39,6896,6897,6906,6910,6922,6931,6935,6943,6947,6960,6979],{"__ignoreMap":66},[84,6898,6899,6901,6904],{"class":86,"line":87},[84,6900,1327],{"class":129},[84,6902,6903],{"class":90}," test03",[84,6905,183],{"class":154},[84,6907,6908],{"class":86,"line":98},[84,6909,2727],{"class":154},[84,6911,6912,6914,6916,6918,6920],{"class":86,"line":106},[84,6913,2732],{"class":154},[84,6915,2352],{"class":129},[84,6917,6777],{"class":158},[84,6919,2352],{"class":129},[84,6921,2374],{"class":154},[84,6923,6924,6926,6929],{"class":86,"line":112},[84,6925,5268],{"class":129},[84,6927,6928],{"class":94}," 100",[84,6930,2471],{"class":154},[84,6932,6933],{"class":86,"line":425},[84,6934,2746],{"class":154},[84,6936,6937,6939,6941],{"class":86,"line":2395},[84,6938,1327],{"class":129},[84,6940,3153],{"class":90},[84,6942,183],{"class":154},[84,6944,6945],{"class":86,"line":2401},[84,6946,2727],{"class":154},[84,6948,6949,6951,6953,6955,6958],{"class":86,"line":2492},[84,6950,3164],{"class":129},[84,6952,6391],{"class":154},[84,6954,867],{"class":129},[84,6956,6957],{"class":90},"test03",[84,6959,6810],{"class":154},[84,6961,6962,6964,6966,6968,6970,6972,6974,6976],{"class":86,"line":2498},[84,6963,2732],{"class":154},[84,6965,2352],{"class":129},[84,6967,6581],{"class":158},[84,6969,2352],{"class":129},[84,6971,6416],{"class":154},[84,6973,2352],{"class":129},[84,6975,2419],{"class":154},[84,6977,6978],{"class":1378}," \u002F\u002F100\n",[84,6980,6981],{"class":86,"line":2510},[84,6982,2746],{"class":154},[19,6984,6985],{},"4.有参有返",[60,6987,6989],{"className":1313,"code":6988,"language":1315,"meta":66,"style":66},"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",[39,6990,6991,7006,7010,7022,7028,7032,7041,7045,7057,7071,7086],{"__ignoreMap":66},[84,6992,6993,6995,6998,7000,7002,7004],{"class":86,"line":87},[84,6994,1327],{"class":129},[84,6996,6997],{"class":90}," test04",[84,6999,155],{"class":154},[84,7001,1327],{"class":129},[84,7003,2579],{"class":928},[84,7005,162],{"class":154},[84,7007,7008],{"class":86,"line":98},[84,7009,2727],{"class":154},[84,7011,7012,7014,7016,7018,7020],{"class":86,"line":106},[84,7013,2732],{"class":154},[84,7015,2352],{"class":129},[84,7017,810],{"class":158},[84,7019,2352],{"class":129},[84,7021,2374],{"class":154},[84,7023,7024,7026],{"class":86,"line":112},[84,7025,5268],{"class":129},[84,7027,2613],{"class":154},[84,7029,7030],{"class":86,"line":425},[84,7031,2746],{"class":154},[84,7033,7034,7036,7039],{"class":86,"line":2395},[84,7035,1327],{"class":129},[84,7037,7038],{"class":90}," mian",[84,7040,183],{"class":154},[84,7042,7043],{"class":86,"line":2401},[84,7044,2727],{"class":154},[84,7046,7047,7049,7051,7053,7055],{"class":86,"line":2492},[84,7048,3164],{"class":129},[84,7050,4011],{"class":154},[84,7052,867],{"class":129},[84,7054,1529],{"class":94},[84,7056,2471],{"class":154},[84,7058,7059,7061,7063,7065,7068],{"class":86,"line":2498},[84,7060,3164],{"class":129},[84,7062,4027],{"class":154},[84,7064,867],{"class":129},[84,7066,7067],{"class":90},"test04",[84,7069,7070],{"class":154},"(b);\n",[84,7072,7073,7075,7077,7079,7081,7083],{"class":86,"line":2510},[84,7074,2732],{"class":154},[84,7076,2352],{"class":129},[84,7078,1599],{"class":154},[84,7080,2352],{"class":129},[84,7082,2419],{"class":154},[84,7084,7085],{"class":1378}," \u002F\u002F1\n",[84,7087,7088],{"class":86,"line":2793},[84,7089,2746],{"class":154},[14,7091,7093],{"id":7092},"_25函数的声明","2.5函数的声明",[19,7095,7096],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7098,7099,7100],{},"函数的",[1464,7101,7102],{},"声明可以多次，但是函数的定义只能有一次",[60,7104,7106],{"className":1313,"code":7105,"language":1315,"meta":66,"style":66},"\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",[39,7107,7108,7113,7118,7143,7152,7156,7168,7180,7196,7200,7220,7224,7243],{"__ignoreMap":66},[84,7109,7110],{"class":86,"line":87},[84,7111,7112],{"class":1378},"\u002F\u002F函数声明\n",[84,7114,7115],{"class":86,"line":98},[84,7116,7117],{"class":1378},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[84,7119,7120,7122,7125,7127,7129,7131,7133,7135,7137,7140],{"class":86,"line":106},[84,7121,1327],{"class":129},[84,7123,7124],{"class":90}," max",[84,7126,155],{"class":154},[84,7128,1327],{"class":129},[84,7130,2579],{"class":928},[84,7132,1688],{"class":154},[84,7134,1327],{"class":129},[84,7136,4011],{"class":928},[84,7138,7139],{"class":154},");",[84,7141,7142],{"class":1378},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[84,7144,7145,7147,7149],{"class":86,"line":112},[84,7146,1327],{"class":129},[84,7148,3153],{"class":90},[84,7150,7151],{"class":154},"() \n",[84,7153,7154],{"class":86,"line":425},[84,7155,2727],{"class":154},[84,7157,7158,7160,7162,7164,7166],{"class":86,"line":2395},[84,7159,3164],{"class":129},[84,7161,2579],{"class":154},[84,7163,867],{"class":129},[84,7165,1756],{"class":94},[84,7167,2471],{"class":154},[84,7169,7170,7172,7174,7176,7178],{"class":86,"line":2401},[84,7171,3164],{"class":129},[84,7173,4011],{"class":154},[84,7175,867],{"class":129},[84,7177,2008],{"class":94},[84,7179,2471],{"class":154},[84,7181,7182,7184,7186,7189,7192,7194],{"class":86,"line":2492},[84,7183,2732],{"class":154},[84,7185,2352],{"class":129},[84,7187,7188],{"class":90},"max",[84,7190,7191],{"class":154},"(a,b)",[84,7193,2352],{"class":129},[84,7195,2374],{"class":154},[84,7197,7198],{"class":86,"line":2498},[84,7199,2746],{"class":154},[84,7201,7202,7204,7206,7208,7210,7212,7214,7216,7218],{"class":86,"line":2510},[84,7203,1327],{"class":129},[84,7205,7124],{"class":90},[84,7207,155],{"class":154},[84,7209,1327],{"class":129},[84,7211,2579],{"class":928},[84,7213,1688],{"class":154},[84,7215,1327],{"class":129},[84,7217,4011],{"class":928},[84,7219,162],{"class":154},[84,7221,7222],{"class":86,"line":2793},[84,7223,2727],{"class":154},[84,7225,7226,7228,7230,7232,7234,7236,7238,7240],{"class":86,"line":2798},[84,7227,5268],{"class":129},[84,7229,2579],{"class":154},[84,7231,2268],{"class":129},[84,7233,1574],{"class":154},[84,7235,2294],{"class":129},[84,7237,208],{"class":154},[84,7239,2167],{"class":129},[84,7241,7242],{"class":154},"b;\n",[84,7244,7245],{"class":86,"line":2804},[84,7246,2746],{"class":154},[14,7248,7250],{"id":7249},"_26函数的分文件编写","2.6函数的分文件编写",[19,7252,7253],{},"4个步骤：",[2315,7255,7256,7259,7262,7265],{},[29,7257,7258],{},"1.创建后缀名为.h的头文件",[29,7260,7261],{},"2.创建后缀名为.cpp的源文件",[29,7263,7264],{},"3.在头文件中写函数的定义",[29,7266,7267],{},"4.在源文件中写函数的定义\n示例：",[19,7269,7270],{},"头文件：swap.h",[60,7272,7274],{"className":1313,"code":7273,"language":1315,"meta":66,"style":66},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[39,7275,7276,7282,7292,7296],{"__ignoreMap":66},[84,7277,7278,7280],{"class":86,"line":87},[84,7279,3130],{"class":129},[84,7281,3133],{"class":158},[84,7283,7284,7286,7288,7290],{"class":86,"line":98},[84,7285,3138],{"class":129},[84,7287,3141],{"class":129},[84,7289,3144],{"class":90},[84,7291,2471],{"class":154},[84,7293,7294],{"class":86,"line":106},[84,7295,7112],{"class":1378},[84,7297,7298,7300,7302,7304,7306,7308,7310,7312,7314],{"class":86,"line":112},[84,7299,6538],{"class":129},[84,7301,6541],{"class":90},[84,7303,155],{"class":154},[84,7305,1327],{"class":129},[84,7307,2579],{"class":928},[84,7309,1688],{"class":154},[84,7311,1327],{"class":129},[84,7313,4011],{"class":928},[84,7315,3897],{"class":154},[19,7317,7318],{},"源文件：swap.cpp",[60,7320,7322],{"className":1313,"code":7321,"language":1315,"meta":66,"style":66},"#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",[39,7323,7324,7331,7336,7356,7360,7371,7380,7389,7406,7423],{"__ignoreMap":66},[84,7325,7326,7328],{"class":86,"line":87},[84,7327,3130],{"class":129},[84,7329,7330],{"class":158}," \"swap.h\"\n",[84,7332,7333],{"class":86,"line":98},[84,7334,7335],{"class":1378},"\u002F\u002F函数的定义\n",[84,7337,7338,7340,7342,7344,7346,7348,7350,7352,7354],{"class":86,"line":106},[84,7339,6538],{"class":129},[84,7341,6541],{"class":90},[84,7343,155],{"class":154},[84,7345,1327],{"class":129},[84,7347,2579],{"class":928},[84,7349,1688],{"class":154},[84,7351,1327],{"class":129},[84,7353,4011],{"class":928},[84,7355,162],{"class":154},[84,7357,7358],{"class":86,"line":112},[84,7359,2727],{"class":154},[84,7361,7362,7364,7366,7368],{"class":86,"line":425},[84,7363,3164],{"class":129},[84,7365,5433],{"class":154},[84,7367,867],{"class":129},[84,7369,7370],{"class":154},"a;\n",[84,7372,7373,7376,7378],{"class":86,"line":2395},[84,7374,7375],{"class":154},"    a",[84,7377,867],{"class":129},[84,7379,7242],{"class":154},[84,7381,7382,7385,7387],{"class":86,"line":2401},[84,7383,7384],{"class":154},"    b",[84,7386,867],{"class":129},[84,7388,5458],{"class":154},[84,7390,7391,7393,7395,7398,7400,7402,7404],{"class":86,"line":2492},[84,7392,2732],{"class":154},[84,7394,2352],{"class":129},[84,7396,7397],{"class":158},"\"a=\"",[84,7399,2352],{"class":129},[84,7401,208],{"class":154},[84,7403,2352],{"class":129},[84,7405,2374],{"class":154},[84,7407,7408,7410,7412,7415,7417,7419,7421],{"class":86,"line":2498},[84,7409,2732],{"class":154},[84,7411,2352],{"class":129},[84,7413,7414],{"class":158},"\"b=\"",[84,7416,2352],{"class":129},[84,7418,1574],{"class":154},[84,7420,2352],{"class":129},[84,7422,2374],{"class":154},[84,7424,7425],{"class":86,"line":2510},[84,7426,2746],{"class":154},[1222,7428,7429],{},"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":66,"searchDepth":98,"depth":98,"links":7431},[7432,7433,7434,7435,7436,7437],{"id":6349,"depth":98,"text":6350},{"id":6435,"depth":98,"text":6436},{"id":6518,"depth":98,"text":6519},{"id":6744,"depth":98,"text":6745},{"id":7092,"depth":98,"text":7093},{"id":7249,"depth":98,"text":7250},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6341,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7444,"title":7445,"body":7446,"description":7453,"extension":1250,"meta":8857,"navigation":1252,"path":8858,"seo":8859,"stem":8860,"__hash__":8861},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7447,"toc":8847},[7448,7451,7454,7458,7620,7624,7627,7630,7633,7636,7775,7779,7782,7785,7788,7853,7857,7862,7929,7932,7936,7939,7950,7955,7975,7978,7983,8002,8005,8009,8028,8031,8035,8270,8274,8277,8280,8283,8445,8448,8452,8455,8461,8844],[10,7449,7445],{"id":7450},"_3指针",[19,7452,7453],{},"通过指针保存一个地址，指针就是个地址",[14,7455,7457],{"id":7456},"_31定义指针","3.1定义指针",[60,7459,7461],{"className":1313,"code":7460,"language":1315,"meta":66,"style":66},"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",[39,7462,7463,7471,7475,7480,7492,7497,7505,7515,7533,7553,7557,7562,7567,7572,7586,7602,7616],{"__ignoreMap":66},[84,7464,7465,7467,7469],{"class":86,"line":87},[84,7466,1327],{"class":129},[84,7468,3153],{"class":90},[84,7470,183],{"class":154},[84,7472,7473],{"class":86,"line":98},[84,7474,2727],{"class":154},[84,7476,7477],{"class":86,"line":106},[84,7478,7479],{"class":1378},"    \u002F\u002F1.定义指针\n",[84,7481,7482,7484,7486,7488,7490],{"class":86,"line":112},[84,7483,3164],{"class":129},[84,7485,2579],{"class":154},[84,7487,867],{"class":129},[84,7489,1756],{"class":94},[84,7491,2471],{"class":154},[84,7493,7494],{"class":86,"line":425},[84,7495,7496],{"class":1378},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[84,7498,7499,7502],{"class":86,"line":2395},[84,7500,7501],{"class":129},"    int*",[84,7503,7504],{"class":154},"p;\n",[84,7506,7507,7510,7513],{"class":86,"line":2401},[84,7508,7509],{"class":154},"    p",[84,7511,7512],{"class":129},"=&",[84,7514,7370],{"class":154},[84,7516,7517,7519,7521,7524,7527,7529,7531],{"class":86,"line":2492},[84,7518,2732],{"class":154},[84,7520,2352],{"class":129},[84,7522,7523],{"class":158},"\"a的地址为：\"",[84,7525,7526],{"class":129},"\u003C\u003C&",[84,7528,208],{"class":154},[84,7530,2352],{"class":129},[84,7532,2374],{"class":154},[84,7534,7535,7537,7539,7542,7544,7546,7548,7550],{"class":86,"line":2498},[84,7536,2732],{"class":154},[84,7538,2352],{"class":129},[84,7540,7541],{"class":158},"\"指针p为：\"",[84,7543,2352],{"class":129},[84,7545,19],{"class":154},[84,7547,2352],{"class":129},[84,7549,2419],{"class":154},[84,7551,7552],{"class":1378},"\u002F\u002F指针p表示的就是a的地址\n",[84,7554,7555],{"class":86,"line":2510},[84,7556,3578],{"emptyLinePlaceholder":1252},[84,7558,7559],{"class":86,"line":2793},[84,7560,7561],{"class":1378},"    \u002F\u002F2.使用指针\n",[84,7563,7564],{"class":86,"line":2798},[84,7565,7566],{"class":1378},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[84,7568,7569],{"class":86,"line":2804},[84,7570,7571],{"class":1378},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[84,7573,7574,7577,7579,7581,7584],{"class":86,"line":2809},[84,7575,7576],{"class":129},"    *",[84,7578,19],{"class":154},[84,7580,867],{"class":129},[84,7582,7583],{"class":94},"1000",[84,7585,2471],{"class":154},[84,7587,7588,7590,7593,7595,7597,7599],{"class":86,"line":2823},[84,7589,2732],{"class":154},[84,7591,7592],{"class":129},"\u003C\u003C*",[84,7594,19],{"class":154},[84,7596,2352],{"class":129},[84,7598,2419],{"class":154},[84,7600,7601],{"class":1378},"\u002F\u002F1000\n",[84,7603,7604,7606,7608,7610,7612,7614],{"class":86,"line":2828},[84,7605,2732],{"class":154},[84,7607,2352],{"class":129},[84,7609,208],{"class":154},[84,7611,2352],{"class":129},[84,7613,2419],{"class":154},[84,7615,7601],{"class":1378},[84,7617,7618],{"class":86,"line":2834},[84,7619,2746],{"class":154},[14,7621,7623],{"id":7622},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7625,7626],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7628,7629],{},"在32位操作系统下：占用4个字节空间",[19,7631,7632],{},"在64位操作系统下：占用8个字节空间",[19,7634,7635],{},"上方是不管啥数据类型的",[60,7637,7639],{"className":1313,"code":7638,"language":1315,"meta":66,"style":66},"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",[39,7640,7641,7649,7653,7658,7670,7675,7680,7685,7697,7719,7745,7771],{"__ignoreMap":66},[84,7642,7643,7645,7647],{"class":86,"line":87},[84,7644,1327],{"class":129},[84,7646,3153],{"class":90},[84,7648,183],{"class":154},[84,7650,7651],{"class":86,"line":98},[84,7652,2727],{"class":154},[84,7654,7655],{"class":86,"line":106},[84,7656,7657],{"class":1378},"    \u002F\u002F指针所占内存空间\n",[84,7659,7660,7662,7664,7666,7668],{"class":86,"line":112},[84,7661,3164],{"class":129},[84,7663,2579],{"class":154},[84,7665,867],{"class":129},[84,7667,1756],{"class":94},[84,7669,2471],{"class":154},[84,7671,7672],{"class":86,"line":425},[84,7673,7674],{"class":1378},"    \u002F\u002Fint *p;\n",[84,7676,7677],{"class":86,"line":2395},[84,7678,7679],{"class":1378},"    \u002F\u002Fp=&a;\n",[84,7681,7682],{"class":86,"line":2401},[84,7683,7684],{"class":1378},"    \u002F\u002F上述可以写为以下：\n",[84,7686,7687,7689,7691,7693,7695],{"class":86,"line":2492},[84,7688,3164],{"class":129},[84,7690,997],{"class":129},[84,7692,19],{"class":154},[84,7694,7512],{"class":129},[84,7696,7370],{"class":154},[84,7698,7699,7702,7704,7707,7709,7712,7714,7716],{"class":86,"line":2498},[84,7700,7701],{"class":154},"    cout ",[84,7703,2352],{"class":129},[84,7705,7706],{"class":158},"\"sizeof(int *)\"",[84,7708,2553],{"class":129},[84,7710,7711],{"class":154},"(p)",[84,7713,2352],{"class":129},[84,7715,2419],{"class":154},[84,7717,7718],{"class":1378},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[84,7720,7721,7723,7725,7727,7729,7731,7733,7735,7737,7739,7742],{"class":86,"line":2510},[84,7722,7701],{"class":154},[84,7724,2352],{"class":129},[84,7726,7706],{"class":158},[84,7728,2553],{"class":129},[84,7730,155],{"class":154},[84,7732,1327],{"class":129},[84,7734,997],{"class":129},[84,7736,1739],{"class":154},[84,7738,2352],{"class":129},[84,7740,7741],{"class":154},"endl",[84,7743,7744],{"class":1378},"  \u002F\u002F4字节(32位的话)\n",[84,7746,7747,7749,7751,7754,7756,7758,7760,7762,7764,7766,7768],{"class":86,"line":2793},[84,7748,7701],{"class":154},[84,7750,2352],{"class":129},[84,7752,7753],{"class":158},"\"sizeof(char *)\"",[84,7755,2553],{"class":129},[84,7757,155],{"class":154},[84,7759,1416],{"class":129},[84,7761,997],{"class":129},[84,7763,1739],{"class":154},[84,7765,2352],{"class":129},[84,7767,2419],{"class":154},[84,7769,7770],{"class":1378}," \u002F\u002F4字节(32位的话)\n",[84,7772,7773],{"class":86,"line":2798},[84,7774,2746],{"class":154},[14,7776,7778],{"id":7777},"_33空指针","3.3空指针",[19,7780,7781],{},"空指针：指针变量指向内存中编号为0的空间",[19,7783,7784],{},"用途：初始化指针变量",[19,7786,7787],{},"注意：空指针指向的内存是不可以访问的",[60,7789,7791],{"className":1313,"code":7790,"language":1315,"meta":66,"style":66},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[39,7792,7793,7801,7805,7810,7824,7829,7844,7849],{"__ignoreMap":66},[84,7794,7795,7797,7799],{"class":86,"line":87},[84,7796,1327],{"class":129},[84,7798,3153],{"class":90},[84,7800,183],{"class":154},[84,7802,7803],{"class":86,"line":98},[84,7804,2727],{"class":154},[84,7806,7807],{"class":86,"line":106},[84,7808,7809],{"class":1378},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[84,7811,7812,7814,7816,7818,7820,7822],{"class":86,"line":112},[84,7813,3164],{"class":129},[84,7815,997],{"class":129},[84,7817,19],{"class":154},[84,7819,867],{"class":129},[84,7821,3570],{"class":94},[84,7823,2471],{"class":154},[84,7825,7826],{"class":86,"line":425},[84,7827,7828],{"class":1378},"    \u002F\u002F2.空指针不能进行访问\n",[84,7830,7831,7833,7835,7837,7839,7841],{"class":86,"line":2395},[84,7832,7576],{"class":129},[84,7834,19],{"class":154},[84,7836,867],{"class":129},[84,7838,821],{"class":94},[84,7840,1375],{"class":154},[84,7842,7843],{"class":1378},"\u002F\u002F直接报错，压根不能访问\n",[84,7845,7846],{"class":86,"line":2401},[84,7847,7848],{"class":1378},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[84,7850,7851],{"class":86,"line":2492},[84,7852,2746],{"class":154},[14,7854,7856],{"id":7855},"_34野指针","3.4野指针",[19,7858,7859],{},[1464,7860,7861],{},"指针变量指向非法的内存空间",[60,7863,7865],{"className":1313,"code":7864,"language":1315,"meta":66,"style":66},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[39,7866,7867,7875,7879,7908,7913,7925],{"__ignoreMap":66},[84,7868,7869,7871,7873],{"class":86,"line":87},[84,7870,1327],{"class":129},[84,7872,3153],{"class":90},[84,7874,183],{"class":154},[84,7876,7877],{"class":86,"line":98},[84,7878,2727],{"class":154},[84,7880,7881,7883,7885,7887,7889,7891,7893,7895,7897,7900,7903,7905],{"class":86,"line":106},[84,7882,3164],{"class":129},[84,7884,997],{"class":129},[84,7886,19],{"class":154},[84,7888,867],{"class":129},[84,7890,155],{"class":154},[84,7892,1327],{"class":129},[84,7894,997],{"class":129},[84,7896,1739],{"class":154},[84,7898,7899],{"class":129},"0x",[84,7901,7902],{"class":94},"1100",[84,7904,1375],{"class":154},[84,7906,7907],{"class":1378}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[84,7909,7910],{"class":86,"line":112},[84,7911,7912],{"class":1378},"    \u002F\u002F访问野指针报错\n",[84,7914,7915,7917,7919,7921,7923],{"class":86,"line":425},[84,7916,2732],{"class":154},[84,7918,7592],{"class":129},[84,7920,19],{"class":154},[84,7922,2352],{"class":129},[84,7924,2374],{"class":154},[84,7926,7927],{"class":86,"line":2395},[84,7928,2746],{"class":154},[19,7930,7931],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7933,7935],{"id":7934},"_35const修饰指针","3.5const修饰指针",[19,7937,7938],{},"三种情况：",[2315,7940,7941,7944,7947],{},[29,7942,7943],{},"const修饰指针 常量指针",[29,7945,7946],{},"const修饰常量 指针常量",[29,7948,7949],{},"const即修饰指针，又修饰常量",[26,7951,7952],{},[29,7953,7954],{},"常量指针",[60,7956,7958],{"className":1313,"code":7957,"language":1315,"meta":66,"style":66},"const int *p=&a;\n",[39,7959,7960],{"__ignoreMap":66},[84,7961,7962,7965,7967,7969,7971,7973],{"class":86,"line":87},[84,7963,7964],{"class":129},"const",[84,7966,3560],{"class":129},[84,7968,997],{"class":129},[84,7970,19],{"class":154},[84,7972,7512],{"class":129},[84,7974,7370],{"class":154},[19,7976,7977],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,7979,7980],{"start":98},[29,7981,7982],{},"指针常量",[60,7984,7986],{"className":1313,"code":7985,"language":1315,"meta":66,"style":66},"int *const p=&a;\n",[39,7987,7988],{"__ignoreMap":66},[84,7989,7990,7992,7995,7998,8000],{"class":86,"line":87},[84,7991,1327],{"class":129},[84,7993,7994],{"class":129}," *const",[84,7996,7997],{"class":154}," p",[84,7999,7512],{"class":129},[84,8001,7370],{"class":154},[19,8003,8004],{},"指针的指向不可以改，指针指向的值可以改",[26,8006,8007],{"start":106},[29,8008,7949],{},[60,8010,8012],{"className":1313,"code":8011,"language":1315,"meta":66,"style":66},"const int *const p=&a;\n",[39,8013,8014],{"__ignoreMap":66},[84,8015,8016,8018,8020,8022,8024,8026],{"class":86,"line":87},[84,8017,7964],{"class":129},[84,8019,3560],{"class":129},[84,8021,7994],{"class":129},[84,8023,7997],{"class":154},[84,8025,7512],{"class":129},[84,8027,7370],{"class":154},[19,8029,8030],{},"指针的指向和指针指向的值都不可以改变",[14,8032,8034],{"id":8033},"_36指针和数组","3.6指针和数组",[60,8036,8038],{"className":1313,"code":8037,"language":1315,"meta":66,"style":66},"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",[39,8039,8040,8048,8052,8057,8111,8132,8148,8164,8175,8192,8197,8211,8237,8241,8253,8262,8266],{"__ignoreMap":66},[84,8041,8042,8044,8046],{"class":86,"line":87},[84,8043,1327],{"class":129},[84,8045,3153],{"class":90},[84,8047,183],{"class":154},[84,8049,8050],{"class":86,"line":98},[84,8051,2727],{"class":154},[84,8053,8054],{"class":86,"line":106},[84,8055,8056],{"class":1378},"    \u002F\u002F利用指针访问数组中的元素\n",[84,8058,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079,8081,8083,8085,8087,8089,8091,8093,8095,8097,8099,8101,8103,8105,8107,8109],{"class":86,"line":112},[84,8060,3164],{"class":129},[84,8062,5140],{"class":154},[84,8064,1756],{"class":94},[84,8066,2248],{"class":154},[84,8068,867],{"class":129},[84,8070,2204],{"class":154},[84,8072,1529],{"class":94},[84,8074,1688],{"class":154},[84,8076,1397],{"class":94},[84,8078,1688],{"class":154},[84,8080,1391],{"class":94},[84,8082,1688],{"class":154},[84,8084,1604],{"class":94},[84,8086,1688],{"class":154},[84,8088,1629],{"class":94},[84,8090,1688],{"class":154},[84,8092,1654],{"class":94},[84,8094,1688],{"class":154},[84,8096,1679],{"class":94},[84,8098,1688],{"class":154},[84,8100,1705],{"class":94},[84,8102,1688],{"class":154},[84,8104,1730],{"class":94},[84,8106,1688],{"class":154},[84,8108,1756],{"class":94},[84,8110,5173],{"class":154},[84,8112,8113,8115,8117,8120,8122,8124,8126,8128,8130],{"class":86,"line":425},[84,8114,2732],{"class":154},[84,8116,2352],{"class":129},[84,8118,8119],{"class":158},"\"数组的第一个元素为：\"",[84,8121,2352],{"class":129},[84,8123,5084],{"class":154},[84,8125,1504],{"class":94},[84,8127,2248],{"class":154},[84,8129,2352],{"class":129},[84,8131,2374],{"class":154},[84,8133,8134,8136,8138,8140,8142,8145],{"class":86,"line":2395},[84,8135,3164],{"class":129},[84,8137,997],{"class":129},[84,8139,19],{"class":154},[84,8141,867],{"class":129},[84,8143,8144],{"class":154},"arr;",[84,8146,8147],{"class":1378},"\u002F\u002F注意数才要加取地址符号&\n",[84,8149,8150,8152,8154,8156,8158,8160,8162],{"class":86,"line":2401},[84,8151,2732],{"class":154},[84,8153,2352],{"class":129},[84,8155,8119],{"class":158},[84,8157,7592],{"class":129},[84,8159,19],{"class":154},[84,8161,2352],{"class":129},[84,8163,2374],{"class":154},[84,8165,8166,8168,8170,8172],{"class":86,"line":2492},[84,8167,7509],{"class":154},[84,8169,3470],{"class":129},[84,8171,1375],{"class":154},[84,8173,8174],{"class":1378}," \u002F\u002F让指针向后偏移4个字节\n",[84,8176,8177,8179,8181,8184,8186,8188,8190],{"class":86,"line":2498},[84,8178,2732],{"class":154},[84,8180,2352],{"class":129},[84,8182,8183],{"class":158},"\"数组的第二个元素为：\"",[84,8185,7592],{"class":129},[84,8187,19],{"class":154},[84,8189,2352],{"class":129},[84,8191,2374],{"class":154},[84,8193,8194],{"class":86,"line":2510},[84,8195,8196],{"class":1378},"    \u002F\u002F利用指针遍历数组\n",[84,8198,8199,8201,8203,8206,8208],{"class":86,"line":2793},[84,8200,3164],{"class":129},[84,8202,997],{"class":129},[84,8204,8205],{"class":154},"p2",[84,8207,867],{"class":129},[84,8209,8210],{"class":154},"arr;\n",[84,8212,8213,8215,8217,8219,8221,8223,8225,8227,8229,8231,8233,8235],{"class":86,"line":2798},[84,8214,4379],{"class":129},[84,8216,2839],{"class":154},[84,8218,1327],{"class":129},[84,8220,4210],{"class":154},[84,8222,867],{"class":129},[84,8224,1504],{"class":94},[84,8226,4217],{"class":154},[84,8228,2218],{"class":129},[84,8230,1756],{"class":94},[84,8232,4217],{"class":154},[84,8234,3470],{"class":129},[84,8236,162],{"class":154},[84,8238,8239],{"class":86,"line":2804},[84,8240,3209],{"class":154},[84,8242,8243,8245,8247,8249,8251],{"class":86,"line":2809},[84,8244,4629],{"class":154},[84,8246,7592],{"class":129},[84,8248,8205],{"class":154},[84,8250,2352],{"class":129},[84,8252,2374],{"class":154},[84,8254,8255,8258,8260],{"class":86,"line":2823},[84,8256,8257],{"class":154},"        p2",[84,8259,3470],{"class":129},[84,8261,2471],{"class":154},[84,8263,8264],{"class":86,"line":2828},[84,8265,3365],{"class":154},[84,8267,8268],{"class":86,"line":2834},[84,8269,2746],{"class":154},[14,8271,8273],{"id":8272},"_37指针和函数","3.7指针和函数",[19,8275,8276],{},"利用指针做函数参数，可以修改实参的值",[19,8278,8279],{},"值传递：只改变形参，不改变实参",[19,8281,8282],{},"地址传递：",[60,8284,8286],{"className":1313,"code":8285,"language":1315,"meta":66,"style":66},"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",[39,8287,8288,8313,8317,8329,8340,8350,8354,8362,8366,8378,8390,8395,8411,8426,8441],{"__ignoreMap":66},[84,8289,8290,8292,8294,8296,8298,8300,8303,8305,8307,8309,8311],{"class":86,"line":87},[84,8291,6538],{"class":129},[84,8293,6541],{"class":90},[84,8295,155],{"class":154},[84,8297,1327],{"class":129},[84,8299,997],{"class":129},[84,8301,8302],{"class":928},"p1",[84,8304,1688],{"class":154},[84,8306,1327],{"class":129},[84,8308,997],{"class":129},[84,8310,8205],{"class":928},[84,8312,162],{"class":154},[84,8314,8315],{"class":86,"line":98},[84,8316,2727],{"class":154},[84,8318,8319,8321,8323,8326],{"class":86,"line":106},[84,8320,3164],{"class":129},[84,8322,5433],{"class":154},[84,8324,8325],{"class":129},"=*",[84,8327,8328],{"class":154},"p1;\n",[84,8330,8331,8333,8335,8337],{"class":86,"line":112},[84,8332,7576],{"class":129},[84,8334,8302],{"class":154},[84,8336,8325],{"class":129},[84,8338,8339],{"class":154},"p2;\n",[84,8341,8342,8344,8346,8348],{"class":86,"line":425},[84,8343,7576],{"class":129},[84,8345,8205],{"class":154},[84,8347,867],{"class":129},[84,8349,5458],{"class":154},[84,8351,8352],{"class":86,"line":2395},[84,8353,2746],{"class":154},[84,8355,8356,8358,8360],{"class":86,"line":2401},[84,8357,1327],{"class":129},[84,8359,3153],{"class":90},[84,8361,183],{"class":154},[84,8363,8364],{"class":86,"line":2492},[84,8365,2727],{"class":154},[84,8367,8368,8370,8372,8374,8376],{"class":86,"line":2498},[84,8369,3164],{"class":129},[84,8371,2579],{"class":154},[84,8373,867],{"class":129},[84,8375,1756],{"class":94},[84,8377,2471],{"class":154},[84,8379,8380,8382,8384,8386,8388],{"class":86,"line":2510},[84,8381,3164],{"class":129},[84,8383,4011],{"class":154},[84,8385,867],{"class":129},[84,8387,2008],{"class":94},[84,8389,2471],{"class":154},[84,8391,8392],{"class":86,"line":2793},[84,8393,8394],{"class":1378},"    \u002F\u002F地址传递\n",[84,8396,8397,8399,8401,8403,8406,8408],{"class":86,"line":2798},[84,8398,6735],{"class":90},[84,8400,155],{"class":154},[84,8402,1663],{"class":129},[84,8404,8405],{"class":154},"a,",[84,8407,1663],{"class":129},[84,8409,8410],{"class":154},"b);\n",[84,8412,8413,8415,8417,8419,8421,8423],{"class":86,"line":2804},[84,8414,2732],{"class":154},[84,8416,2352],{"class":129},[84,8418,208],{"class":154},[84,8420,2352],{"class":129},[84,8422,2419],{"class":154},[84,8424,8425],{"class":1378},"\u002F\u002F20\n",[84,8427,8428,8430,8432,8434,8436,8438],{"class":86,"line":2809},[84,8429,2732],{"class":154},[84,8431,2352],{"class":129},[84,8433,1574],{"class":154},[84,8435,2352],{"class":129},[84,8437,2419],{"class":154},[84,8439,8440],{"class":1378},"\u002F\u002F10\n",[84,8442,8443],{"class":86,"line":2823},[84,8444,2746],{"class":154},[19,8446,8447],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8449,8451],{"id":8450},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8453,8454],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8456,8457,8458,8460],{},"例如数组：int arr",[84,8459,1756],{},"={4,3,6,9,1,2,10,8,7,5}",[60,8462,8464],{"className":1313,"code":8463,"language":1315,"meta":66,"style":66},"#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",[39,8465,8466,8472,8482,8506,8510,8541,8545,8579,8583,8601,8605,8616,8631,8646,8650,8654,8658,8662,8666,8674,8678,8683,8737,8749,8761,8766,8774,8778,8783,8808,8812,8827,8836,8840],{"__ignoreMap":66},[84,8467,8468,8470],{"class":86,"line":87},[84,8469,3130],{"class":129},[84,8471,3133],{"class":158},[84,8473,8474,8476,8478,8480],{"class":86,"line":98},[84,8475,3138],{"class":129},[84,8477,3141],{"class":129},[84,8479,3144],{"class":90},[84,8481,2471],{"class":154},[84,8483,8484,8486,8489,8491,8493,8495,8497,8499,8501,8504],{"class":86,"line":106},[84,8485,6538],{"class":129},[84,8487,8488],{"class":90}," bubbleSort",[84,8490,155],{"class":154},[84,8492,1327],{"class":129},[84,8494,997],{"class":129},[84,8496,19],{"class":928},[84,8498,1688],{"class":154},[84,8500,1327],{"class":129},[84,8502,8503],{"class":928}," len",[84,8505,162],{"class":154},[84,8507,8508],{"class":86,"line":112},[84,8509,2727],{"class":154},[84,8511,8512,8514,8516,8518,8520,8522,8524,8526,8528,8531,8533,8535,8537,8539],{"class":86,"line":425},[84,8513,4379],{"class":129},[84,8515,155],{"class":154},[84,8517,1327],{"class":129},[84,8519,4210],{"class":154},[84,8521,867],{"class":129},[84,8523,1504],{"class":94},[84,8525,4217],{"class":154},[84,8527,2218],{"class":129},[84,8529,8530],{"class":154},"len",[84,8532,1841],{"class":129},[84,8534,1529],{"class":94},[84,8536,4217],{"class":154},[84,8538,3470],{"class":129},[84,8540,162],{"class":154},[84,8542,8543],{"class":86,"line":2395},[84,8544,3209],{"class":154},[84,8546,8547,8549,8551,8553,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577],{"class":86,"line":2401},[84,8548,4581],{"class":129},[84,8550,155],{"class":154},[84,8552,1327],{"class":129},[84,8554,4588],{"class":154},[84,8556,867],{"class":129},[84,8558,1504],{"class":94},[84,8560,4595],{"class":154},[84,8562,2218],{"class":129},[84,8564,8530],{"class":154},[84,8566,1841],{"class":129},[84,8568,1751],{"class":154},[84,8570,1841],{"class":129},[84,8572,1529],{"class":94},[84,8574,4595],{"class":154},[84,8576,3470],{"class":129},[84,8578,162],{"class":154},[84,8580,8581],{"class":86,"line":2492},[84,8582,3688],{"class":154},[84,8584,8585,8587,8590,8592,8595,8597,8599],{"class":86,"line":2498},[84,8586,5819],{"class":129},[84,8588,8589],{"class":154},"(p[j]",[84,8591,2268],{"class":129},[84,8593,8594],{"class":154},"p[j",[84,8596,1790],{"class":129},[84,8598,1529],{"class":94},[84,8600,5834],{"class":154},[84,8602,8603],{"class":86,"line":2510},[84,8604,5839],{"class":154},[84,8606,8607,8609,8611,8613],{"class":86,"line":2793},[84,8608,5844],{"class":129},[84,8610,5433],{"class":154},[84,8612,867],{"class":129},[84,8614,8615],{"class":154},"p[j];\n",[84,8617,8618,8621,8623,8625,8627,8629],{"class":86,"line":2798},[84,8619,8620],{"class":154},"                p[j]",[84,8622,867],{"class":129},[84,8624,8594],{"class":154},[84,8626,1790],{"class":129},[84,8628,1529],{"class":94},[84,8630,5867],{"class":154},[84,8632,8633,8636,8638,8640,8642,8644],{"class":86,"line":2804},[84,8634,8635],{"class":154},"                p[j",[84,8637,1790],{"class":129},[84,8639,1529],{"class":94},[84,8641,2248],{"class":154},[84,8643,867],{"class":129},[84,8645,5458],{"class":154},[84,8647,8648],{"class":86,"line":2809},[84,8649,5887],{"class":154},[84,8651,8652],{"class":86,"line":2823},[84,8653,3707],{"class":154},[84,8655,8656],{"class":86,"line":2828},[84,8657,3365],{"class":154},[84,8659,8660],{"class":86,"line":2834},[84,8661,2746],{"class":154},[84,8663,8664],{"class":86,"line":2855},[84,8665,3578],{"emptyLinePlaceholder":1252},[84,8667,8668,8670,8672],{"class":86,"line":2860},[84,8669,1327],{"class":129},[84,8671,3153],{"class":90},[84,8673,183],{"class":154},[84,8675,8676],{"class":86,"line":2874},[84,8677,2727],{"class":154},[84,8679,8680],{"class":86,"line":2879},[84,8681,8682],{"class":1378},"    \u002F\u002F 1.创建数组\n",[84,8684,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735],{"class":86,"line":2908},[84,8686,3164],{"class":129},[84,8688,5140],{"class":154},[84,8690,1756],{"class":94},[84,8692,2248],{"class":154},[84,8694,867],{"class":129},[84,8696,2204],{"class":154},[84,8698,1604],{"class":94},[84,8700,1688],{"class":154},[84,8702,1391],{"class":94},[84,8704,1688],{"class":154},[84,8706,1654],{"class":94},[84,8708,1688],{"class":154},[84,8710,1730],{"class":94},[84,8712,1688],{"class":154},[84,8714,1529],{"class":94},[84,8716,1688],{"class":154},[84,8718,1397],{"class":94},[84,8720,1688],{"class":154},[84,8722,1756],{"class":94},[84,8724,1688],{"class":154},[84,8726,1705],{"class":94},[84,8728,1688],{"class":154},[84,8730,1679],{"class":94},[84,8732,1688],{"class":154},[84,8734,1629],{"class":94},[84,8736,5173],{"class":154},[84,8738,8739,8741,8743,8745,8747],{"class":86,"line":2913},[84,8740,3164],{"class":129},[84,8742,8503],{"class":154},[84,8744,867],{"class":129},[84,8746,1756],{"class":94},[84,8748,2471],{"class":154},[84,8750,8751,8753,8755,8757,8759],{"class":86,"line":2930},[84,8752,3164],{"class":129},[84,8754,997],{"class":129},[84,8756,19],{"class":154},[84,8758,867],{"class":129},[84,8760,8210],{"class":154},[84,8762,8763],{"class":86,"line":2935},[84,8764,8765],{"class":1378},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[84,8767,8768,8771],{"class":86,"line":2940},[84,8769,8770],{"class":90},"    bubbleSort",[84,8772,8773],{"class":154},"(p,len);\n",[84,8775,8776],{"class":86,"line":2945},[84,8777,3578],{"emptyLinePlaceholder":1252},[84,8779,8780],{"class":86,"line":2959},[84,8781,8782],{"class":1378},"    \u002F\u002F 3.打印排序后的数组\n",[84,8784,8785,8787,8789,8791,8793,8795,8797,8799,8801,8804,8806],{"class":86,"line":2964},[84,8786,4379],{"class":129},[84,8788,2839],{"class":154},[84,8790,1327],{"class":129},[84,8792,4210],{"class":154},[84,8794,867],{"class":129},[84,8796,1504],{"class":94},[84,8798,4392],{"class":154},[84,8800,2218],{"class":129},[84,8802,8803],{"class":154},"len; i",[84,8805,3470],{"class":129},[84,8807,162],{"class":154},[84,8809,8810],{"class":86,"line":3755},[84,8811,3209],{"class":154},[84,8813,8814,8816,8818,8820,8822,8825],{"class":86,"line":3769},[84,8815,4629],{"class":154},[84,8817,7592],{"class":129},[84,8819,19],{"class":154},[84,8821,2352],{"class":129},[84,8823,8824],{"class":158},"\"\"",[84,8826,2471],{"class":154},[84,8828,8829,8832,8834],{"class":86,"line":3777},[84,8830,8831],{"class":154},"        p",[84,8833,3470],{"class":129},[84,8835,2471],{"class":154},[84,8837,8838],{"class":86,"line":3782},[84,8839,3365],{"class":154},[84,8841,8842],{"class":86,"line":3788},[84,8843,2746],{"class":154},[1222,8845,8846],{},"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":66,"searchDepth":98,"depth":98,"links":8848},[8849,8850,8851,8852,8853,8854,8855,8856],{"id":7456,"depth":98,"text":7457},{"id":7622,"depth":98,"text":7623},{"id":7777,"depth":98,"text":7778},{"id":7855,"depth":98,"text":7856},{"id":7934,"depth":98,"text":7935},{"id":8033,"depth":98,"text":8034},{"id":8272,"depth":98,"text":8273},{"id":8450,"depth":98,"text":8451},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7445,"description":7453},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8863,"title":8864,"body":8865,"description":8872,"extension":1250,"meta":11846,"navigation":1252,"path":11847,"seo":11848,"stem":11849,"__hash__":11850},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8866,"toc":11837},[8867,8870,8873,8877,8880,8883,8894,9232,9235,9239,9242,9249,9504,9508,9511,9514,9669,9673,9676,9679,9885,9889,9892,10195,10198,10206,10210,10213,10364,10366,10377,10434,10438,10443,11100,11108,11111,11205,11208,11828,11834],[10,8868,8864],{"id":8869},"_4结构体",[19,8871,8872],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8874,8876],{"id":8875},"_41结构体定义与使用","4.1结构体定义与使用",[19,8878,8879],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8881,8882],{},"通过结构体创建变量的方式：",[2315,8884,8885,8888,8891],{},[29,8886,8887],{},"struct 结构体名 变量名",[29,8889,8890],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,8892,8893],{},"定义结构体时顺便创建变量",[60,8895,8897],{"className":1313,"code":8896,"language":1315,"meta":66,"style":66},"#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",[39,8898,8899,8905,8915,8922,8927,8935,8939,8944,8948,8953,8958,8963,8970,8975,8982,8986,8993,8997,9001,9005,9009,9013,9017,9023,9027,9033,9041,9049,9053,9058,9063,9074,9079,9091,9102,9113,9118,9142,9147,9153,9180,9185,9191,9203,9215,9227],{"__ignoreMap":66},[84,8900,8901,8903],{"class":86,"line":87},[84,8902,3130],{"class":129},[84,8904,3133],{"class":158},[84,8906,8907,8909,8911,8913],{"class":86,"line":98},[84,8908,3138],{"class":129},[84,8910,3141],{"class":129},[84,8912,3144],{"class":90},[84,8914,2471],{"class":154},[84,8916,8917,8919],{"class":86,"line":106},[84,8918,3130],{"class":129},[84,8920,8921],{"class":158},"\u003Cstring>\n",[84,8923,8924],{"class":86,"line":112},[84,8925,8926],{"class":1378},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[84,8928,8929,8932],{"class":86,"line":425},[84,8930,8931],{"class":129},"struct",[84,8933,8934],{"class":90}," Student\n",[84,8936,8937],{"class":86,"line":2395},[84,8938,2727],{"class":154},[84,8940,8941],{"class":86,"line":2401},[84,8942,8943],{"class":1378},"    \u002F\u002F成员列表\n",[84,8945,8946],{"class":86,"line":2492},[84,8947,3578],{"emptyLinePlaceholder":1252},[84,8949,8950],{"class":86,"line":2498},[84,8951,8952],{"class":1378},"    \u002F\u002F姓名\n",[84,8954,8955],{"class":86,"line":2510},[84,8956,8957],{"class":154},"    string name;\n",[84,8959,8960],{"class":86,"line":2793},[84,8961,8962],{"class":1378},"    \u002F\u002F年龄\n",[84,8964,8965,8967],{"class":86,"line":2798},[84,8966,3164],{"class":129},[84,8968,8969],{"class":154}," age;\n",[84,8971,8972],{"class":86,"line":2804},[84,8973,8974],{"class":1378},"    \u002F\u002F分数\n",[84,8976,8977,8979],{"class":86,"line":2809},[84,8978,3164],{"class":129},[84,8980,8981],{"class":154}," score;\n",[84,8983,8984],{"class":86,"line":2823},[84,8985,5173],{"class":154},[84,8987,8988,8990],{"class":86,"line":2828},[84,8989,8931],{"class":129},[84,8991,8992],{"class":90}," School\n",[84,8994,8995],{"class":86,"line":2834},[84,8996,2727],{"class":154},[84,8998,8999],{"class":86,"line":2855},[84,9000,8943],{"class":1378},[84,9002,9003],{"class":86,"line":2860},[84,9004,3578],{"emptyLinePlaceholder":1252},[84,9006,9007],{"class":86,"line":2874},[84,9008,8952],{"class":1378},[84,9010,9011],{"class":86,"line":2879},[84,9012,8957],{"class":154},[84,9014,9015],{"class":86,"line":2908},[84,9016,8962],{"class":1378},[84,9018,9019,9021],{"class":86,"line":2913},[84,9020,3164],{"class":129},[84,9022,8969],{"class":154},[84,9024,9025],{"class":86,"line":2930},[84,9026,8974],{"class":1378},[84,9028,9029,9031],{"class":86,"line":2935},[84,9030,3164],{"class":129},[84,9032,8981],{"class":154},[84,9034,9035,9038],{"class":86,"line":2940},[84,9036,9037],{"class":154},"} s3;",[84,9039,9040],{"class":1378}," \u002F\u002F创建结构体时就创建了变量\n",[84,9042,9043,9045,9047],{"class":86,"line":2945},[84,9044,1327],{"class":129},[84,9046,3153],{"class":90},[84,9048,183],{"class":154},[84,9050,9051],{"class":86,"line":2959},[84,9052,2727],{"class":154},[84,9054,9055],{"class":86,"line":2964},[84,9056,9057],{"class":1378},"    \u002F\u002F2.通过学生类型创建具体学生\n",[84,9059,9060],{"class":86,"line":3755},[84,9061,9062],{"class":1378},"    \u002F\u002F2.1 struct Student s1;\n",[84,9064,9065,9068,9071],{"class":86,"line":3769},[84,9066,9067],{"class":129},"    struct",[84,9069,9070],{"class":90}," Student",[84,9072,9073],{"class":154}," s1;\n",[84,9075,9076],{"class":86,"line":3777},[84,9077,9078],{"class":1378},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[84,9080,9081,9084,9086,9089],{"class":86,"line":3782},[84,9082,9083],{"class":154},"    s1.name",[84,9085,867],{"class":129},[84,9087,9088],{"class":158},"\"张三\"",[84,9090,2471],{"class":154},[84,9092,9093,9096,9098,9100],{"class":86,"line":3788},[84,9094,9095],{"class":154},"    s1.age",[84,9097,867],{"class":129},[84,9099,849],{"class":94},[84,9101,2471],{"class":154},[84,9103,9104,9107,9109,9111],{"class":86,"line":3794},[84,9105,9106],{"class":154},"    s1.score",[84,9108,867],{"class":129},[84,9110,1565],{"class":94},[84,9112,2471],{"class":154},[84,9114,9115],{"class":86,"line":3799},[84,9116,9117],{"class":1378},"    \u002F\u002F输出结果\n",[84,9119,9121,9123,9125,9128,9130,9133,9135,9138,9140],{"class":86,"line":9120},37,[84,9122,2732],{"class":154},[84,9124,2352],{"class":129},[84,9126,9127],{"class":154},"s1.name",[84,9129,2352],{"class":129},[84,9131,9132],{"class":154},"s1.age",[84,9134,2352],{"class":129},[84,9136,9137],{"class":154},"s1.score",[84,9139,2352],{"class":129},[84,9141,2374],{"class":154},[84,9143,9145],{"class":86,"line":9144},38,[84,9146,3578],{"emptyLinePlaceholder":1252},[84,9148,9150],{"class":86,"line":9149},39,[84,9151,9152],{"class":1378},"    \u002F\u002F2.2 struct Student s2={...}\n",[84,9154,9156,9158,9160,9163,9165,9167,9170,9172,9174,9176,9178],{"class":86,"line":9155},40,[84,9157,9067],{"class":129},[84,9159,9070],{"class":90},[84,9161,9162],{"class":154}," s2",[84,9164,867],{"class":129},[84,9166,2204],{"class":154},[84,9168,9169],{"class":158},"\"王五\"",[84,9171,1688],{"class":154},[84,9173,849],{"class":94},[84,9175,1688],{"class":154},[84,9177,1565],{"class":94},[84,9179,5173],{"class":154},[84,9181,9183],{"class":86,"line":9182},41,[84,9184,3578],{"emptyLinePlaceholder":1252},[84,9186,9188],{"class":86,"line":9187},42,[84,9189,9190],{"class":1378},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[84,9192,9194,9197,9199,9201],{"class":86,"line":9193},43,[84,9195,9196],{"class":154},"    s3.name",[84,9198,867],{"class":129},[84,9200,4856],{"class":158},[84,9202,2471],{"class":154},[84,9204,9206,9209,9211,9213],{"class":86,"line":9205},44,[84,9207,9208],{"class":154},"    s3.age",[84,9210,867],{"class":129},[84,9212,849],{"class":94},[84,9214,2471],{"class":154},[84,9216,9218,9221,9223,9225],{"class":86,"line":9217},45,[84,9219,9220],{"class":154},"    s3.score",[84,9222,867],{"class":129},[84,9224,2008],{"class":94},[84,9226,2471],{"class":154},[84,9228,9230],{"class":86,"line":9229},46,[84,9231,2746],{"class":154},[19,9233,9234],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9236,9238],{"id":9237},"_42结构体数组","4.2结构体数组",[19,9240,9241],{},"将自定义的结构体放入到数组中方便维护",[19,9243,9244,9245,9248],{},"语法：struct 结构体名 数组名",[84,9246,9247],{},"元素个数","={ {}，{},...{} };",[60,9250,9252],{"className":1313,"code":9251,"language":1315,"meta":66,"style":66},"#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",[39,9253,9254,9260,9270,9276,9281,9287,9291,9295,9301,9307,9311,9315,9323,9327,9332,9347,9351,9367,9383,9387,9392,9408,9423,9438,9443,9469,9473,9496,9500],{"__ignoreMap":66},[84,9255,9256,9258],{"class":86,"line":87},[84,9257,3130],{"class":129},[84,9259,3133],{"class":158},[84,9261,9262,9264,9266,9268],{"class":86,"line":98},[84,9263,3138],{"class":129},[84,9265,3141],{"class":129},[84,9267,3144],{"class":90},[84,9269,2471],{"class":154},[84,9271,9272,9274],{"class":86,"line":106},[84,9273,3130],{"class":129},[84,9275,8921],{"class":158},[84,9277,9278],{"class":86,"line":112},[84,9279,9280],{"class":1378},"\u002F\u002F1.定义结构体\n",[84,9282,9283,9285],{"class":86,"line":425},[84,9284,8931],{"class":129},[84,9286,8934],{"class":90},[84,9288,9289],{"class":86,"line":2395},[84,9290,2727],{"class":154},[84,9292,9293],{"class":86,"line":2401},[84,9294,8957],{"class":154},[84,9296,9297,9299],{"class":86,"line":2492},[84,9298,3164],{"class":129},[84,9300,8969],{"class":154},[84,9302,9303,9305],{"class":86,"line":2498},[84,9304,3164],{"class":129},[84,9306,8981],{"class":154},[84,9308,9309],{"class":86,"line":2510},[84,9310,3578],{"emptyLinePlaceholder":1252},[84,9312,9313],{"class":86,"line":2793},[84,9314,5173],{"class":154},[84,9316,9317,9319,9321],{"class":86,"line":2798},[84,9318,1327],{"class":129},[84,9320,3153],{"class":90},[84,9322,183],{"class":154},[84,9324,9325],{"class":86,"line":2804},[84,9326,2727],{"class":154},[84,9328,9329],{"class":86,"line":2809},[84,9330,9331],{"class":1378},"    \u002F\u002F2.创建结构体数组\n",[84,9333,9334,9336,9338,9341,9343,9345],{"class":86,"line":2823},[84,9335,9067],{"class":129},[84,9337,9070],{"class":90},[84,9339,9340],{"class":154}," stuArray[",[84,9342,1397],{"class":94},[84,9344,2248],{"class":154},[84,9346,6085],{"class":129},[84,9348,9349],{"class":86,"line":2828},[84,9350,3209],{"class":154},[84,9352,9353,9355,9357,9359,9361,9363,9365],{"class":86,"line":2834},[84,9354,6094],{"class":154},[84,9356,9088],{"class":158},[84,9358,1688],{"class":154},[84,9360,849],{"class":94},[84,9362,1688],{"class":154},[84,9364,821],{"class":94},[84,9366,6107],{"class":154},[84,9368,9369,9371,9373,9375,9377,9379,9381],{"class":86,"line":2855},[84,9370,6094],{"class":154},[84,9372,4856],{"class":158},[84,9374,1688],{"class":154},[84,9376,1884],{"class":94},[84,9378,1688],{"class":154},[84,9380,1884],{"class":94},[84,9382,2746],{"class":154},[84,9384,9385],{"class":86,"line":2860},[84,9386,3365],{"class":154},[84,9388,9389],{"class":86,"line":2874},[84,9390,9391],{"class":1378},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[84,9393,9394,9397,9399,9402,9404,9406],{"class":86,"line":2879},[84,9395,9396],{"class":154},"    stuArray[",[84,9398,1529],{"class":94},[84,9400,9401],{"class":154},"].name",[84,9403,867],{"class":129},[84,9405,4879],{"class":158},[84,9407,2471],{"class":154},[84,9409,9410,9412,9414,9417,9419,9421],{"class":86,"line":2908},[84,9411,9396],{"class":154},[84,9413,1529],{"class":94},[84,9415,9416],{"class":154},"].age",[84,9418,867],{"class":129},[84,9420,1397],{"class":94},[84,9422,2471],{"class":154},[84,9424,9425,9427,9429,9432,9434,9436],{"class":86,"line":2913},[84,9426,9396],{"class":154},[84,9428,1529],{"class":94},[84,9430,9431],{"class":154},"].score",[84,9433,867],{"class":129},[84,9435,1397],{"class":94},[84,9437,2471],{"class":154},[84,9439,9440],{"class":86,"line":2930},[84,9441,9442],{"class":1378},"    \u002F\u002F4.遍历结构体数组\n",[84,9444,9445,9447,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467],{"class":86,"line":2935},[84,9446,4379],{"class":129},[84,9448,2839],{"class":154},[84,9450,1327],{"class":129},[84,9452,4210],{"class":154},[84,9454,867],{"class":129},[84,9456,1504],{"class":94},[84,9458,4217],{"class":154},[84,9460,2218],{"class":129},[84,9462,1397],{"class":94},[84,9464,4217],{"class":154},[84,9466,3470],{"class":129},[84,9468,162],{"class":154},[84,9470,9471],{"class":86,"line":2940},[84,9472,3209],{"class":154},[84,9474,9475,9477,9479,9482,9484,9487,9489,9492,9494],{"class":86,"line":2945},[84,9476,4629],{"class":154},[84,9478,2352],{"class":129},[84,9480,9481],{"class":154},"stuArray[i].name",[84,9483,2352],{"class":129},[84,9485,9486],{"class":154},"stuArray[i].age",[84,9488,2352],{"class":129},[84,9490,9491],{"class":154},"stuArray[i].score",[84,9493,2352],{"class":129},[84,9495,2374],{"class":154},[84,9497,9498],{"class":86,"line":2959},[84,9499,3365],{"class":154},[84,9501,9502],{"class":86,"line":2964},[84,9503,2746],{"class":154},[14,9505,9507],{"id":9506},"_43结构体指针","4.3结构体指针",[19,9509,9510],{},"作用：通过指针访问结构体中的成员",[19,9512,9513],{},"利用操作符->可以通过结构体指针访问结构体属性",[60,9515,9517],{"className":1313,"code":9516,"language":1315,"meta":66,"style":66},"#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",[39,9518,9519,9525,9535,9541,9545,9551,9555,9559,9565,9571,9575,9583,9587,9592,9617,9622,9637,9642,9665],{"__ignoreMap":66},[84,9520,9521,9523],{"class":86,"line":87},[84,9522,3130],{"class":129},[84,9524,3133],{"class":158},[84,9526,9527,9529,9531,9533],{"class":86,"line":98},[84,9528,3138],{"class":129},[84,9530,3141],{"class":129},[84,9532,3144],{"class":90},[84,9534,2471],{"class":154},[84,9536,9537,9539],{"class":86,"line":106},[84,9538,3130],{"class":129},[84,9540,8921],{"class":158},[84,9542,9543],{"class":86,"line":112},[84,9544,9280],{"class":1378},[84,9546,9547,9549],{"class":86,"line":425},[84,9548,8931],{"class":129},[84,9550,8934],{"class":90},[84,9552,9553],{"class":86,"line":2395},[84,9554,2727],{"class":154},[84,9556,9557],{"class":86,"line":2401},[84,9558,8957],{"class":154},[84,9560,9561,9563],{"class":86,"line":2492},[84,9562,3164],{"class":129},[84,9564,8969],{"class":154},[84,9566,9567,9569],{"class":86,"line":2498},[84,9568,3164],{"class":129},[84,9570,8981],{"class":154},[84,9572,9573],{"class":86,"line":2510},[84,9574,5173],{"class":154},[84,9576,9577,9579,9581],{"class":86,"line":2793},[84,9578,1327],{"class":129},[84,9580,3153],{"class":90},[84,9582,183],{"class":154},[84,9584,9585],{"class":86,"line":2798},[84,9586,2727],{"class":154},[84,9588,9589],{"class":86,"line":2804},[84,9590,9591],{"class":1378},"    \u002F\u002F创建学生结构体变量\n",[84,9593,9594,9596,9598,9601,9603,9605,9607,9609,9611,9613,9615],{"class":86,"line":2809},[84,9595,9067],{"class":129},[84,9597,9070],{"class":90},[84,9599,9600],{"class":154}," s",[84,9602,867],{"class":129},[84,9604,2204],{"class":154},[84,9606,9088],{"class":158},[84,9608,1688],{"class":154},[84,9610,849],{"class":94},[84,9612,1688],{"class":154},[84,9614,2903],{"class":94},[84,9616,5173],{"class":154},[84,9618,9619],{"class":86,"line":2823},[84,9620,9621],{"class":1378},"    \u002F\u002F通过指针指向结构体变量\n",[84,9623,9624,9626,9628,9630,9632,9634],{"class":86,"line":2828},[84,9625,9067],{"class":129},[84,9627,9070],{"class":90},[84,9629,997],{"class":129},[84,9631,19],{"class":154},[84,9633,7512],{"class":129},[84,9635,9636],{"class":154},"s\n",[84,9638,9639],{"class":86,"line":2834},[84,9640,9641],{"class":1378},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[84,9643,9644,9646,9648,9651,9653,9656,9658,9661,9663],{"class":86,"line":2855},[84,9645,2732],{"class":154},[84,9647,2352],{"class":129},[84,9649,9650],{"class":154},"p->name",[84,9652,2352],{"class":129},[84,9654,9655],{"class":154},"p->age",[84,9657,2352],{"class":129},[84,9659,9660],{"class":154},"p->score",[84,9662,2352],{"class":129},[84,9664,2374],{"class":154},[84,9666,9667],{"class":86,"line":2860},[84,9668,2746],{"class":154},[14,9670,9672],{"id":9671},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9674,9675],{},"作用：结构体中的成员可以是另一个结构体",[19,9677,9678],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[60,9680,9682],{"className":1313,"code":9681,"language":1315,"meta":66,"style":66},"#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",[39,9683,9684,9690,9700,9706,9711,9719,9723,9727,9733,9739,9743,9748,9755,9759,9766,9770,9776,9781,9785,9793,9797,9802,9807,9812,9823,9835,9846,9859,9870,9881],{"__ignoreMap":66},[84,9685,9686,9688],{"class":86,"line":87},[84,9687,3130],{"class":129},[84,9689,3133],{"class":158},[84,9691,9692,9694,9696,9698],{"class":86,"line":98},[84,9693,3138],{"class":129},[84,9695,3141],{"class":129},[84,9697,3144],{"class":90},[84,9699,2471],{"class":154},[84,9701,9702,9704],{"class":86,"line":106},[84,9703,3130],{"class":129},[84,9705,8921],{"class":158},[84,9707,9708],{"class":86,"line":112},[84,9709,9710],{"class":1378},"\u002F\u002F定义学生结构体\n",[84,9712,9713,9715,9717],{"class":86,"line":425},[84,9714,8931],{"class":129},[84,9716,9070],{"class":90},[84,9718,3852],{"class":154},[84,9720,9721],{"class":86,"line":2395},[84,9722,2727],{"class":154},[84,9724,9725],{"class":86,"line":2401},[84,9726,8957],{"class":154},[84,9728,9729,9731],{"class":86,"line":2492},[84,9730,3164],{"class":129},[84,9732,8969],{"class":154},[84,9734,9735,9737],{"class":86,"line":2498},[84,9736,3164],{"class":129},[84,9738,8981],{"class":154},[84,9740,9741],{"class":86,"line":2510},[84,9742,2746],{"class":154},[84,9744,9745],{"class":86,"line":2793},[84,9746,9747],{"class":1378},"\u002F\u002F定义老师结构体\n",[84,9749,9750,9752],{"class":86,"line":2798},[84,9751,8931],{"class":129},[84,9753,9754],{"class":90}," Teacher\n",[84,9756,9757],{"class":86,"line":2804},[84,9758,2727],{"class":154},[84,9760,9761,9763],{"class":86,"line":2809},[84,9762,3164],{"class":129},[84,9764,9765],{"class":154}," id;\n",[84,9767,9768],{"class":86,"line":2823},[84,9769,8957],{"class":154},[84,9771,9772,9774],{"class":86,"line":2828},[84,9773,3164],{"class":129},[84,9775,8969],{"class":154},[84,9777,9778],{"class":86,"line":2834},[84,9779,9780],{"class":154},"    Student stu;\n",[84,9782,9783],{"class":86,"line":2855},[84,9784,2746],{"class":154},[84,9786,9787,9789,9791],{"class":86,"line":2860},[84,9788,1327],{"class":129},[84,9790,3153],{"class":90},[84,9792,7151],{"class":154},[84,9794,9795],{"class":86,"line":2874},[84,9796,2727],{"class":154},[84,9798,9799],{"class":86,"line":2879},[84,9800,9801],{"class":1378},"    \u002F\u002F结构体嵌套结构体\n",[84,9803,9804],{"class":86,"line":2908},[84,9805,9806],{"class":1378},"    \u002F\u002F创建老师\n",[84,9808,9809],{"class":86,"line":2913},[84,9810,9811],{"class":154},"    Teacher t;\n",[84,9813,9814,9817,9819,9821],{"class":86,"line":2930},[84,9815,9816],{"class":154},"    t.id",[84,9818,867],{"class":129},[84,9820,821],{"class":94},[84,9822,2471],{"class":154},[84,9824,9825,9828,9830,9833],{"class":86,"line":2935},[84,9826,9827],{"class":154},"    t.name",[84,9829,867],{"class":129},[84,9831,9832],{"class":158},"\"老王\"",[84,9834,2471],{"class":154},[84,9836,9837,9840,9842,9844],{"class":86,"line":2940},[84,9838,9839],{"class":154},"    t.age",[84,9841,867],{"class":129},[84,9843,849],{"class":94},[84,9845,2471],{"class":154},[84,9847,9848,9851,9853,9856],{"class":86,"line":2945},[84,9849,9850],{"class":154},"    t.stu.name",[84,9852,867],{"class":129},[84,9854,9855],{"class":158},"\"小王\"",[84,9857,9858],{"class":154},"；\n",[84,9860,9861,9864,9866,9868],{"class":86,"line":2959},[84,9862,9863],{"class":154},"    t.stu.age",[84,9865,867],{"class":129},[84,9867,2008],{"class":94},[84,9869,2471],{"class":154},[84,9871,9872,9875,9877,9879],{"class":86,"line":2964},[84,9873,9874],{"class":154},"    t.stu.score",[84,9876,867],{"class":129},[84,9878,1654],{"class":94},[84,9880,2471],{"class":154},[84,9882,9883],{"class":86,"line":3755},[84,9884,2746],{"class":154},[14,9886,9888],{"id":9887},"_45结构体做函数参数","4.5结构体做函数参数",[19,9890,9891],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[60,9893,9895],{"className":1313,"code":9894,"language":1315,"meta":66,"style":66},"#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",[39,9896,9897,9903,9913,9919,9925,9929,9933,9939,9945,9949,9954,9959,9976,9980,10013,10017,10022,10041,10045,10076,10080,10088,10092,10101,10113,10125,10137,10150,10158,10171,10183,10191],{"__ignoreMap":66},[84,9898,9899,9901],{"class":86,"line":87},[84,9900,3130],{"class":129},[84,9902,3133],{"class":158},[84,9904,9905,9907,9909,9911],{"class":86,"line":98},[84,9906,3138],{"class":129},[84,9908,3141],{"class":129},[84,9910,3144],{"class":90},[84,9912,2471],{"class":154},[84,9914,9915,9917],{"class":86,"line":106},[84,9916,3130],{"class":129},[84,9918,8921],{"class":158},[84,9920,9921,9923],{"class":86,"line":112},[84,9922,8931],{"class":129},[84,9924,8934],{"class":90},[84,9926,9927],{"class":86,"line":425},[84,9928,2727],{"class":154},[84,9930,9931],{"class":86,"line":2395},[84,9932,8957],{"class":154},[84,9934,9935,9937],{"class":86,"line":2401},[84,9936,3164],{"class":129},[84,9938,8969],{"class":154},[84,9940,9941,9943],{"class":86,"line":2492},[84,9942,3164],{"class":129},[84,9944,8981],{"class":154},[84,9946,9947],{"class":86,"line":2498},[84,9948,5173],{"class":154},[84,9950,9951],{"class":86,"line":2510},[84,9952,9953],{"class":1378},"\u002F\u002F打印学生信息的函数\n",[84,9955,9956],{"class":86,"line":2793},[84,9957,9958],{"class":1378},"\u002F\u002F值传递\n",[84,9960,9961,9963,9966,9968,9970,9972,9974],{"class":86,"line":2798},[84,9962,6538],{"class":129},[84,9964,9965],{"class":90}," printStudent1",[84,9967,155],{"class":154},[84,9969,8931],{"class":129},[84,9971,9070],{"class":90},[84,9973,9600],{"class":928},[84,9975,162],{"class":154},[84,9977,9978],{"class":86,"line":2804},[84,9979,2727],{"class":154},[84,9981,9982,9984,9986,9989,9991,9994,9996,9999,10001,10003,10005,10008,10010],{"class":86,"line":2809},[84,9983,7701],{"class":154},[84,9985,2352],{"class":129},[84,9987,9988],{"class":154}," s.name ",[84,9990,2352],{"class":129},[84,9992,9993],{"class":158}," \" \"",[84,9995,2625],{"class":129},[84,9997,9998],{"class":154}," s.age ",[84,10000,2352],{"class":129},[84,10002,9993],{"class":158},[84,10004,2625],{"class":129},[84,10006,10007],{"class":154}," s.score ",[84,10009,2352],{"class":129},[84,10011,10012],{"class":154}," endl;\n",[84,10014,10015],{"class":86,"line":2823},[84,10016,2746],{"class":154},[84,10018,10019],{"class":86,"line":2828},[84,10020,10021],{"class":1378},"\u002F\u002F地址传递\n",[84,10023,10024,10026,10029,10031,10033,10035,10037,10039],{"class":86,"line":2834},[84,10025,6538],{"class":129},[84,10027,10028],{"class":90}," printStudent2",[84,10030,155],{"class":154},[84,10032,8931],{"class":129},[84,10034,9070],{"class":90},[84,10036,997],{"class":129},[84,10038,2003],{"class":928},[84,10040,162],{"class":154},[84,10042,10043],{"class":86,"line":2855},[84,10044,2727],{"class":154},[84,10046,10047,10049,10051,10054,10056,10058,10060,10063,10065,10067,10069,10072,10074],{"class":86,"line":2860},[84,10048,7701],{"class":154},[84,10050,2352],{"class":129},[84,10052,10053],{"class":154}," s->name ",[84,10055,2352],{"class":129},[84,10057,9993],{"class":158},[84,10059,2625],{"class":129},[84,10061,10062],{"class":154}," s->age ",[84,10064,2352],{"class":129},[84,10066,9993],{"class":158},[84,10068,2625],{"class":129},[84,10070,10071],{"class":154}," s->score ",[84,10073,2352],{"class":129},[84,10075,10012],{"class":154},[84,10077,10078],{"class":86,"line":2874},[84,10079,2746],{"class":154},[84,10081,10082,10084,10086],{"class":86,"line":2879},[84,10083,1327],{"class":129},[84,10085,3153],{"class":90},[84,10087,183],{"class":154},[84,10089,10090],{"class":86,"line":2908},[84,10091,2727],{"class":154},[84,10093,10094,10096,10098],{"class":86,"line":2913},[84,10095,9067],{"class":129},[84,10097,9070],{"class":90},[84,10099,10100],{"class":154}," s;\n",[84,10102,10103,10106,10108,10111],{"class":86,"line":2930},[84,10104,10105],{"class":154},"    s.name ",[84,10107,867],{"class":129},[84,10109,10110],{"class":158}," \"张三\"",[84,10112,2471],{"class":154},[84,10114,10115,10118,10120,10123],{"class":86,"line":2935},[84,10116,10117],{"class":154},"    s.age ",[84,10119,867],{"class":129},[84,10121,10122],{"class":94}," 20",[84,10124,2471],{"class":154},[84,10126,10127,10130,10132,10135],{"class":86,"line":2940},[84,10128,10129],{"class":154},"    s.score ",[84,10131,867],{"class":129},[84,10133,10134],{"class":94}," 85",[84,10136,2471],{"class":154},[84,10138,10139,10141,10143,10146,10148],{"class":86,"line":2945},[84,10140,2732],{"class":154},[84,10142,2352],{"class":129},[84,10144,10145],{"class":158},"\"值传递:\"",[84,10147,2352],{"class":129},[84,10149,2374],{"class":154},[84,10151,10152,10155],{"class":86,"line":2959},[84,10153,10154],{"class":90},"    printStudent1",[84,10156,10157],{"class":154},"(s);\n",[84,10159,10160,10162,10164,10167,10169],{"class":86,"line":2964},[84,10161,2732],{"class":154},[84,10163,2352],{"class":129},[84,10165,10166],{"class":158},"\"地址传递:\"",[84,10168,2352],{"class":129},[84,10170,2374],{"class":154},[84,10172,10173,10176,10178,10180],{"class":86,"line":3755},[84,10174,10175],{"class":90},"    printStudent2",[84,10177,155],{"class":154},[84,10179,1663],{"class":129},[84,10181,10182],{"class":154},"s); \n",[84,10184,10185,10187,10189],{"class":86,"line":3769},[84,10186,5268],{"class":129},[84,10188,5271],{"class":94},[84,10190,2471],{"class":154},[84,10192,10193],{"class":86,"line":3777},[84,10194,2746],{"class":154},[19,10196,10197],{},"注意：",[2315,10199,10200,10203],{},[29,10201,10202],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,10204,10205],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10207,10209],{"id":10208},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10211,10212],{},"用const防止误操作",[60,10214,10216],{"className":1313,"code":10215,"language":1315,"meta":66,"style":66},"#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",[39,10217,10218,10224,10234,10240,10245,10249,10253,10259,10265,10269,10285,10289,10312,10316,10324,10328,10349,10356,10360],{"__ignoreMap":66},[84,10219,10220,10222],{"class":86,"line":87},[84,10221,3130],{"class":129},[84,10223,3133],{"class":158},[84,10225,10226,10228,10230,10232],{"class":86,"line":98},[84,10227,3138],{"class":129},[84,10229,3141],{"class":129},[84,10231,3144],{"class":90},[84,10233,2471],{"class":154},[84,10235,10236,10238],{"class":86,"line":106},[84,10237,3130],{"class":129},[84,10239,8921],{"class":158},[84,10241,10242],{"class":86,"line":112},[84,10243,10244],{"class":154},"sctuct Student\n",[84,10246,10247],{"class":86,"line":425},[84,10248,2727],{"class":154},[84,10250,10251],{"class":86,"line":2395},[84,10252,8957],{"class":154},[84,10254,10255,10257],{"class":86,"line":2401},[84,10256,3164],{"class":129},[84,10258,8969],{"class":154},[84,10260,10261,10263],{"class":86,"line":2492},[84,10262,3164],{"class":129},[84,10264,8981],{"class":154},[84,10266,10267],{"class":86,"line":2498},[84,10268,5173],{"class":154},[84,10270,10271,10273,10276,10278,10281,10283],{"class":86,"line":2510},[84,10272,6538],{"class":129},[84,10274,10275],{"class":90}," printStudents",[84,10277,155],{"class":154},[84,10279,10280],{"class":90},"student",[84,10282,9600],{"class":928},[84,10284,162],{"class":154},[84,10286,10287],{"class":86,"line":2793},[84,10288,2727],{"class":154},[84,10290,10291,10293,10295,10298,10300,10303,10305,10308,10310],{"class":86,"line":2798},[84,10292,2732],{"class":154},[84,10294,2352],{"class":129},[84,10296,10297],{"class":154},"s.name",[84,10299,2352],{"class":129},[84,10301,10302],{"class":154},"s.age",[84,10304,2352],{"class":129},[84,10306,10307],{"class":154},"s.score",[84,10309,2352],{"class":129},[84,10311,2374],{"class":154},[84,10313,10314],{"class":86,"line":2804},[84,10315,2746],{"class":154},[84,10317,10318,10320,10322],{"class":86,"line":2809},[84,10319,1327],{"class":129},[84,10321,3153],{"class":90},[84,10323,7151],{"class":154},[84,10325,10326],{"class":86,"line":2823},[84,10327,2727],{"class":154},[84,10329,10330,10333,10335,10337,10339,10341,10343,10345,10347],{"class":86,"line":2828},[84,10331,10332],{"class":154},"    Student s",[84,10334,867],{"class":129},[84,10336,2204],{"class":154},[84,10338,9088],{"class":158},[84,10340,1688],{"class":154},[84,10342,849],{"class":94},[84,10344,1688],{"class":154},[84,10346,849],{"class":94},[84,10348,5173],{"class":154},[84,10350,10351,10354],{"class":86,"line":2834},[84,10352,10353],{"class":90},"    printStudent",[84,10355,10157],{"class":154},[84,10357,10358],{"class":86,"line":2855},[84,10359,3578],{"emptyLinePlaceholder":1252},[84,10361,10362],{"class":86,"line":2860},[84,10363,2746],{"class":154},[19,10365,10197],{},[2315,10367,10368,10371,10374],{},[29,10369,10370],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,10372,10373],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,10375,10376],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[60,10378,10380],{"className":1313,"code":10379,"language":1315,"meta":66,"style":66},"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",[39,10381,10382,10401,10405,10410,10430],{"__ignoreMap":66},[84,10383,10384,10386,10388,10390,10392,10395,10397,10399],{"class":86,"line":87},[84,10385,6538],{"class":129},[84,10387,10275],{"class":90},[84,10389,155],{"class":154},[84,10391,7964],{"class":129},[84,10393,10394],{"class":90}," student",[84,10396,997],{"class":129},[84,10398,2003],{"class":928},[84,10400,162],{"class":154},[84,10402,10403],{"class":86,"line":98},[84,10404,2727],{"class":154},[84,10406,10407],{"class":86,"line":106},[84,10408,10409],{"class":1378},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[84,10411,10412,10414,10416,10418,10420,10422,10424,10426,10428],{"class":86,"line":112},[84,10413,2732],{"class":154},[84,10415,2352],{"class":129},[84,10417,10297],{"class":154},[84,10419,2352],{"class":129},[84,10421,10302],{"class":154},[84,10423,2352],{"class":129},[84,10425,10307],{"class":154},[84,10427,2352],{"class":129},[84,10429,2374],{"class":154},[84,10431,10432],{"class":86,"line":425},[84,10433,2746],{"class":154},[14,10435,10437],{"id":10436},"_47案例","4.7案例",[26,10439,10440],{},[29,10441,10442],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[60,10444,10446],{"className":1313,"code":10445,"language":1315,"meta":66,"style":66},"#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",[39,10447,10448,10454,10464,10470,10477,10481,10487,10491,10496,10502,10508,10512,10516,10522,10526,10531,10536,10549,10553,10558,10584,10588,10600,10627,10631,10643,10653,10657,10662,10691,10695,10707,10716,10743,10754,10764,10768,10772,10776,10781,10805,10809,10833,10837,10856,10882,10886,10911,10934,10958,10963,10968,10973,10982,10987,10993,11014,11020,11034,11040,11067,11076,11082,11090,11095],{"__ignoreMap":66},[84,10449,10450,10452],{"class":86,"line":87},[84,10451,3130],{"class":129},[84,10453,3133],{"class":158},[84,10455,10456,10458,10460,10462],{"class":86,"line":98},[84,10457,3138],{"class":129},[84,10459,3141],{"class":129},[84,10461,3144],{"class":90},[84,10463,2471],{"class":154},[84,10465,10466,10468],{"class":86,"line":106},[84,10467,3130],{"class":129},[84,10469,8921],{"class":158},[84,10471,10472,10474],{"class":86,"line":112},[84,10473,3130],{"class":129},[84,10475,10476],{"class":158},"\u003Cctime>\n",[84,10478,10479],{"class":86,"line":425},[84,10480,9710],{"class":1378},[84,10482,10483,10485],{"class":86,"line":2395},[84,10484,8931],{"class":129},[84,10486,8934],{"class":90},[84,10488,10489],{"class":86,"line":2401},[84,10490,2727],{"class":154},[84,10492,10493],{"class":86,"line":2492},[84,10494,10495],{"class":154},"    string sName;\n",[84,10497,10498,10500],{"class":86,"line":2498},[84,10499,3164],{"class":129},[84,10501,8969],{"class":154},[84,10503,10504,10506],{"class":86,"line":2510},[84,10505,3164],{"class":129},[84,10507,8981],{"class":154},[84,10509,10510],{"class":86,"line":2793},[84,10511,5173],{"class":154},[84,10513,10514],{"class":86,"line":2798},[84,10515,9747],{"class":1378},[84,10517,10518,10520],{"class":86,"line":2804},[84,10519,8931],{"class":129},[84,10521,9754],{"class":90},[84,10523,10524],{"class":86,"line":2809},[84,10525,2727],{"class":154},[84,10527,10528],{"class":86,"line":2823},[84,10529,10530],{"class":154},"    string tName;\n",[84,10532,10533],{"class":86,"line":2828},[84,10534,10535],{"class":1378},"    \u002F\u002F学生数组\n",[84,10537,10538,10540,10542,10545,10547],{"class":86,"line":2834},[84,10539,9067],{"class":129},[84,10541,9070],{"class":90},[84,10543,10544],{"class":154}," sArray[",[84,10546,1629],{"class":94},[84,10548,5867],{"class":154},[84,10550,10551],{"class":86,"line":2855},[84,10552,5173],{"class":154},[84,10554,10555],{"class":86,"line":2860},[84,10556,10557],{"class":1378},"\u002F\u002F给老师和学生赋值的函数\n",[84,10559,10560,10562,10565,10567,10569,10572,10575,10578,10580,10582],{"class":86,"line":2874},[84,10561,6538],{"class":129},[84,10563,10564],{"class":90}," allocateSpace",[84,10566,155],{"class":154},[84,10568,8931],{"class":129},[84,10570,10571],{"class":90}," Teacher",[84,10573,10574],{"class":928}," tArray",[84,10576,10577],{"class":154},"[],",[84,10579,1327],{"class":129},[84,10581,8503],{"class":928},[84,10583,162],{"class":154},[84,10585,10586],{"class":86,"line":2879},[84,10587,2727],{"class":154},[84,10589,10590,10593,10595,10598],{"class":86,"line":2908},[84,10591,10592],{"class":154},"    string nameSeed",[84,10594,867],{"class":129},[84,10596,10597],{"class":158},"\"ABCDE\"",[84,10599,2471],{"class":154},[84,10601,10602,10604,10606,10608,10611,10613,10615,10618,10620,10623,10625],{"class":86,"line":2913},[84,10603,4379],{"class":129},[84,10605,2839],{"class":154},[84,10607,1327],{"class":129},[84,10609,10610],{"class":154}," i ",[84,10612,867],{"class":129},[84,10614,5271],{"class":94},[84,10616,10617],{"class":154},"; i ",[84,10619,2218],{"class":129},[84,10621,10622],{"class":154}," len; i",[84,10624,3470],{"class":129},[84,10626,162],{"class":154},[84,10628,10629],{"class":86,"line":2930},[84,10630,3209],{"class":154},[84,10632,10633,10636,10638,10641],{"class":86,"line":2935},[84,10634,10635],{"class":154},"        tArray[i].tName ",[84,10637,867],{"class":129},[84,10639,10640],{"class":158}," \"Teacher_\"",[84,10642,2471],{"class":154},[84,10644,10645,10647,10650],{"class":86,"line":2940},[84,10646,10635],{"class":154},[84,10648,10649],{"class":129},"+=",[84,10651,10652],{"class":154},"nameSeed[i];\n",[84,10654,10655],{"class":86,"line":2945},[84,10656,3578],{"emptyLinePlaceholder":1252},[84,10658,10659],{"class":86,"line":2959},[84,10660,10661],{"class":1378},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[84,10663,10664,10666,10668,10670,10673,10675,10677,10680,10682,10684,10687,10689],{"class":86,"line":2964},[84,10665,4581],{"class":129},[84,10667,2839],{"class":154},[84,10669,1327],{"class":129},[84,10671,10672],{"class":154}," j ",[84,10674,867],{"class":129},[84,10676,5271],{"class":94},[84,10678,10679],{"class":154},"; j ",[84,10681,2218],{"class":129},[84,10683,3326],{"class":94},[84,10685,10686],{"class":154},"; j",[84,10688,3470],{"class":129},[84,10690,162],{"class":154},[84,10692,10693],{"class":86,"line":3755},[84,10694,3688],{"class":154},[84,10696,10697,10700,10702,10705],{"class":86,"line":3769},[84,10698,10699],{"class":154},"            tArray[i].sArray[j].sName ",[84,10701,867],{"class":129},[84,10703,10704],{"class":158}," \"Student_\"",[84,10706,2471],{"class":154},[84,10708,10709,10711,10713],{"class":86,"line":3777},[84,10710,10699],{"class":154},[84,10712,10649],{"class":129},[84,10714,10715],{"class":154}," nameSeed[j];\n",[84,10717,10718,10721,10724,10726,10728,10730,10732,10734,10736,10738,10740],{"class":86,"line":3782},[84,10719,10720],{"class":129},"            int",[84,10722,10723],{"class":154}," random",[84,10725,867],{"class":129},[84,10727,3602],{"class":90},[84,10729,3605],{"class":154},[84,10731,1638],{"class":129},[84,10733,2215],{"class":94},[84,10735,1790],{"class":129},[84,10737,1711],{"class":94},[84,10739,1375],{"class":154},[84,10741,10742],{"class":1378},"\u002F\u002F40~99\n",[84,10744,10745,10748,10750,10752],{"class":86,"line":3788},[84,10746,10747],{"class":154},"            tArray[i].sArray[j].age ",[84,10749,867],{"class":129},[84,10751,10122],{"class":94},[84,10753,2471],{"class":154},[84,10755,10756,10759,10761],{"class":86,"line":3794},[84,10757,10758],{"class":154},"            tArray[i].sArray[j].score ",[84,10760,867],{"class":129},[84,10762,10763],{"class":154}," random;\n",[84,10765,10766],{"class":86,"line":3799},[84,10767,3707],{"class":154},[84,10769,10770],{"class":86,"line":9120},[84,10771,3365],{"class":154},[84,10773,10774],{"class":86,"line":9144},[84,10775,2746],{"class":154},[84,10777,10778],{"class":86,"line":9149},[84,10779,10780],{"class":1378},"\u002F\u002F打印所有信息的函数\n",[84,10782,10783,10785,10788,10790,10792,10794,10796,10799,10801,10803],{"class":86,"line":9155},[84,10784,6538],{"class":129},[84,10786,10787],{"class":90}," printInfo",[84,10789,155],{"class":154},[84,10791,8931],{"class":129},[84,10793,10571],{"class":90},[84,10795,10574],{"class":928},[84,10797,10798],{"class":154},"[], ",[84,10800,1327],{"class":129},[84,10802,8503],{"class":928},[84,10804,162],{"class":154},[84,10806,10807],{"class":86,"line":9182},[84,10808,2727],{"class":154},[84,10810,10811,10813,10815,10817,10819,10821,10823,10825,10827,10829,10831],{"class":86,"line":9187},[84,10812,4379],{"class":129},[84,10814,2839],{"class":154},[84,10816,1327],{"class":129},[84,10818,10610],{"class":154},[84,10820,867],{"class":129},[84,10822,5271],{"class":94},[84,10824,10617],{"class":154},[84,10826,2218],{"class":129},[84,10828,10622],{"class":154},[84,10830,3470],{"class":129},[84,10832,162],{"class":154},[84,10834,10835],{"class":86,"line":9193},[84,10836,3209],{"class":154},[84,10838,10839,10842,10844,10847,10849,10852,10854],{"class":86,"line":9205},[84,10840,10841],{"class":154},"        cout ",[84,10843,2352],{"class":129},[84,10845,10846],{"class":158}," \"Teacher: \"",[84,10848,2625],{"class":129},[84,10850,10851],{"class":154}," tArray[i].tName ",[84,10853,2352],{"class":129},[84,10855,10012],{"class":154},[84,10857,10858,10860,10862,10864,10866,10868,10870,10872,10874,10876,10878,10880],{"class":86,"line":9217},[84,10859,4581],{"class":129},[84,10861,2839],{"class":154},[84,10863,1327],{"class":129},[84,10865,10672],{"class":154},[84,10867,867],{"class":129},[84,10869,5271],{"class":94},[84,10871,10679],{"class":154},[84,10873,2218],{"class":129},[84,10875,3326],{"class":94},[84,10877,10686],{"class":154},[84,10879,3470],{"class":129},[84,10881,162],{"class":154},[84,10883,10884],{"class":86,"line":9229},[84,10885,3688],{"class":154},[84,10887,10889,10892,10894,10897,10899,10902,10904,10907,10909],{"class":86,"line":10888},47,[84,10890,10891],{"class":154},"            cout ",[84,10893,2352],{"class":129},[84,10895,10896],{"class":158}," \"",[84,10898,2411],{"class":94},[84,10900,10901],{"class":158},"Student: \"",[84,10903,2625],{"class":129},[84,10905,10906],{"class":154}," tArray[i].sArray[j].sName",[84,10908,2352],{"class":129},[84,10910,2374],{"class":154},[84,10912,10914,10916,10918,10920,10922,10925,10927,10930,10932],{"class":86,"line":10913},48,[84,10915,10891],{"class":154},[84,10917,2352],{"class":129},[84,10919,10896],{"class":158},[84,10921,2411],{"class":94},[84,10923,10924],{"class":158},"Age: \"",[84,10926,2625],{"class":129},[84,10928,10929],{"class":154}," tArray[i].sArray[j].age ",[84,10931,2352],{"class":129},[84,10933,10012],{"class":154},[84,10935,10937,10939,10941,10943,10945,10948,10950,10953,10955],{"class":86,"line":10936},49,[84,10938,10891],{"class":154},[84,10940,2352],{"class":129},[84,10942,10896],{"class":158},[84,10944,2411],{"class":94},[84,10946,10947],{"class":158},"Score: \"",[84,10949,2625],{"class":129},[84,10951,10952],{"class":154}," tArray[i].sArray[j].score ",[84,10954,2352],{"class":129},[84,10956,10957],{"class":154}," endl;   \n",[84,10959,10961],{"class":86,"line":10960},50,[84,10962,3707],{"class":154},[84,10964,10966],{"class":86,"line":10965},51,[84,10967,3365],{"class":154},[84,10969,10971],{"class":86,"line":10970},52,[84,10972,2746],{"class":154},[84,10974,10976,10978,10980],{"class":86,"line":10975},53,[84,10977,1327],{"class":129},[84,10979,3153],{"class":90},[84,10981,183],{"class":154},[84,10983,10985],{"class":86,"line":10984},54,[84,10986,2727],{"class":154},[84,10988,10990],{"class":86,"line":10989},55,[84,10991,10992],{"class":1378},"    \u002F\u002F随机数种子\n",[84,10994,10996,10998,11000,11002,11004,11006,11008,11010,11012],{"class":86,"line":10995},56,[84,10997,3551],{"class":90},[84,10999,3554],{"class":154},[84,11001,3557],{"class":129},[84,11003,3560],{"class":129},[84,11005,1739],{"class":154},[84,11007,3565],{"class":90},[84,11009,155],{"class":154},[84,11011,3570],{"class":94},[84,11013,3573],{"class":154},[84,11015,11017],{"class":86,"line":11016},57,[84,11018,11019],{"class":1378},"    \u002F\u002F1.创建3名老师的数组\n",[84,11021,11023,11025,11027,11030,11032],{"class":86,"line":11022},58,[84,11024,9067],{"class":129},[84,11026,10571],{"class":90},[84,11028,11029],{"class":154}," tArray[",[84,11031,1391],{"class":94},[84,11033,5867],{"class":154},[84,11035,11037],{"class":86,"line":11036},59,[84,11038,11039],{"class":1378},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[84,11041,11043,11045,11048,11050,11053,11056,11058,11060,11063,11065],{"class":86,"line":11042},60,[84,11044,3164],{"class":129},[84,11046,11047],{"class":154}," len ",[84,11049,867],{"class":129},[84,11051,11052],{"class":129}," sizeof",[84,11054,11055],{"class":154},"(tArray) ",[84,11057,1893],{"class":129},[84,11059,11052],{"class":129},[84,11061,11062],{"class":154},"(tArray[",[84,11064,1504],{"class":94},[84,11066,5034],{"class":154},[84,11068,11070,11073],{"class":86,"line":11069},61,[84,11071,11072],{"class":90},"    allocateSpace",[84,11074,11075],{"class":154},"(tArray, len);\n",[84,11077,11079],{"class":86,"line":11078},62,[84,11080,11081],{"class":1378},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[84,11083,11085,11088],{"class":86,"line":11084},63,[84,11086,11087],{"class":90},"    printInfo",[84,11089,11075],{"class":154},[84,11091,11093],{"class":86,"line":11092},64,[84,11094,3578],{"emptyLinePlaceholder":1252},[84,11096,11098],{"class":86,"line":11097},65,[84,11099,2746],{"class":154},[26,11101,11102],{"start":98},[29,11103,11104,11107],{},[1464,11105,11106],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11109,11110],{},"五名英雄信息如下：",[60,11112,11116],{"className":11113,"code":11114,"language":11115,"meta":66,"style":66},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[39,11117,11118,11136,11153,11170,11187],{"__ignoreMap":66},[84,11119,11120,11122,11125,11127,11129,11131,11134],{"class":86,"line":87},[84,11121,6094],{"class":154},[84,11123,11124],{"class":158},"\"刘备\"",[84,11126,1688],{"class":154},[84,11128,2083],{"class":94},[84,11130,1688],{"class":154},[84,11132,11133],{"class":158},"\"男\"",[84,11135,6107],{"class":154},[84,11137,11138,11140,11143,11145,11147,11149,11151],{"class":86,"line":98},[84,11139,6094],{"class":154},[84,11141,11142],{"class":158},"\"关羽\"",[84,11144,1688],{"class":154},[84,11146,2058],{"class":94},[84,11148,1688],{"class":154},[84,11150,11133],{"class":158},[84,11152,6107],{"class":154},[84,11154,11155,11157,11160,11162,11164,11166,11168],{"class":86,"line":106},[84,11156,6094],{"class":154},[84,11158,11159],{"class":158},"\"张飞\"",[84,11161,1688],{"class":154},[84,11163,2008],{"class":94},[84,11165,1688],{"class":154},[84,11167,11133],{"class":158},[84,11169,6107],{"class":154},[84,11171,11172,11174,11177,11179,11181,11183,11185],{"class":86,"line":112},[84,11173,6094],{"class":154},[84,11175,11176],{"class":158},"\"赵云\"",[84,11178,1688],{"class":154},[84,11180,2033],{"class":94},[84,11182,1688],{"class":154},[84,11184,11133],{"class":158},[84,11186,6107],{"class":154},[84,11188,11189,11191,11194,11196,11198,11200,11203],{"class":86,"line":425},[84,11190,6094],{"class":154},[84,11192,11193],{"class":158},"\"貂蝉\"",[84,11195,1688],{"class":154},[84,11197,1983],{"class":94},[84,11199,1688],{"class":154},[84,11201,11202],{"class":158},"\"女\"",[84,11204,6107],{"class":154},[19,11206,11207],{},"代码：",[60,11209,11211],{"className":1313,"code":11210,"language":1315,"meta":66,"style":66},"#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",[39,11212,11213,11219,11229,11235,11242,11246,11250,11256,11261,11265,11270,11293,11297,11322,11326,11359,11364,11393,11398,11413,11439,11459,11464,11469,11473,11477,11482,11504,11508,11532,11536,11598,11602,11606,11614,11618,11623,11634,11638,11654,11670,11686,11702,11718,11722,11742,11764,11769,11782,11789,11794,11800,11805,11818,11824],{"__ignoreMap":66},[84,11214,11215,11217],{"class":86,"line":87},[84,11216,3130],{"class":129},[84,11218,3133],{"class":158},[84,11220,11221,11223,11225,11227],{"class":86,"line":98},[84,11222,3138],{"class":129},[84,11224,3141],{"class":129},[84,11226,3144],{"class":90},[84,11228,2471],{"class":154},[84,11230,11231,11233],{"class":86,"line":106},[84,11232,3130],{"class":129},[84,11234,8921],{"class":158},[84,11236,11237,11239],{"class":86,"line":112},[84,11238,8931],{"class":129},[84,11240,11241],{"class":90}," Sanguo\n",[84,11243,11244],{"class":86,"line":425},[84,11245,2727],{"class":154},[84,11247,11248],{"class":86,"line":2395},[84,11249,8957],{"class":154},[84,11251,11252,11254],{"class":86,"line":2401},[84,11253,3164],{"class":129},[84,11255,8969],{"class":154},[84,11257,11258],{"class":86,"line":2492},[84,11259,11260],{"class":154},"    string gender;\n",[84,11262,11263],{"class":86,"line":2498},[84,11264,5173],{"class":154},[84,11266,11267],{"class":86,"line":2510},[84,11268,11269],{"class":1378},"\u002F\u002F定义排序函数\n",[84,11271,11272,11274,11276,11278,11281,11283,11285,11287,11289,11291],{"class":86,"line":2793},[84,11273,6538],{"class":129},[84,11275,8488],{"class":90},[84,11277,155],{"class":154},[84,11279,11280],{"class":90},"Sanguo",[84,11282,997],{"class":129},[84,11284,2003],{"class":928},[84,11286,1688],{"class":154},[84,11288,1327],{"class":129},[84,11290,8503],{"class":928},[84,11292,162],{"class":154},[84,11294,11295],{"class":86,"line":2798},[84,11296,2727],{"class":154},[84,11298,11299,11301,11303,11305,11307,11309,11311,11313,11315,11318,11320],{"class":86,"line":2804},[84,11300,4379],{"class":129},[84,11302,155],{"class":154},[84,11304,1327],{"class":129},[84,11306,4210],{"class":154},[84,11308,867],{"class":129},[84,11310,1504],{"class":94},[84,11312,4217],{"class":154},[84,11314,2218],{"class":129},[84,11316,11317],{"class":154},"len;i",[84,11319,3470],{"class":129},[84,11321,162],{"class":154},[84,11323,11324],{"class":86,"line":2809},[84,11325,3209],{"class":154},[84,11327,11328,11331,11333,11335,11337,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357],{"class":86,"line":2823},[84,11329,11330],{"class":129},"     for",[84,11332,2839],{"class":154},[84,11334,1327],{"class":129},[84,11336,4588],{"class":154},[84,11338,867],{"class":129},[84,11340,1504],{"class":94},[84,11342,4595],{"class":154},[84,11344,2218],{"class":129},[84,11346,8530],{"class":154},[84,11348,1841],{"class":129},[84,11350,1529],{"class":94},[84,11352,1841],{"class":129},[84,11354,4728],{"class":154},[84,11356,3470],{"class":129},[84,11358,162],{"class":154},[84,11360,11361],{"class":86,"line":2828},[84,11362,11363],{"class":154},"     {\n",[84,11365,11366,11369,11372,11374,11377,11379,11382,11384,11386,11388,11390],{"class":86,"line":2834},[84,11367,11368],{"class":129},"         if",[84,11370,11371],{"class":154}," ((s",[84,11373,1790],{"class":129},[84,11375,11376],{"class":154},"j)->age ",[84,11378,2268],{"class":129},[84,11380,11381],{"class":154}," (s",[84,11383,1790],{"class":129},[84,11385,1776],{"class":154},[84,11387,1790],{"class":129},[84,11389,1529],{"class":94},[84,11391,11392],{"class":154},")->age)\n",[84,11394,11395],{"class":86,"line":2855},[84,11396,11397],{"class":154},"         {\n",[84,11399,11400,11403,11405,11408,11410],{"class":86,"line":2860},[84,11401,11402],{"class":154},"             Sanguo temp",[84,11404,8325],{"class":129},[84,11406,11407],{"class":154},"(s",[84,11409,1790],{"class":129},[84,11411,11412],{"class":154},"j);\n",[84,11414,11415,11418,11420,11422,11425,11427,11429,11431,11433,11435,11437],{"class":86,"line":2874},[84,11416,11417],{"class":129},"             *",[84,11419,11407],{"class":154},[84,11421,1790],{"class":129},[84,11423,11424],{"class":154},"j)",[84,11426,8325],{"class":129},[84,11428,11407],{"class":154},[84,11430,1790],{"class":129},[84,11432,1776],{"class":154},[84,11434,1790],{"class":129},[84,11436,1529],{"class":94},[84,11438,3897],{"class":154},[84,11440,11441,11443,11445,11447,11449,11451,11453,11455,11457],{"class":86,"line":2879},[84,11442,11417],{"class":129},[84,11444,11407],{"class":154},[84,11446,1790],{"class":129},[84,11448,1776],{"class":154},[84,11450,1790],{"class":129},[84,11452,1529],{"class":94},[84,11454,1739],{"class":154},[84,11456,867],{"class":129},[84,11458,5458],{"class":154},[84,11460,11461],{"class":86,"line":2908},[84,11462,11463],{"class":154},"         }\n",[84,11465,11466],{"class":86,"line":2913},[84,11467,11468],{"class":154},"     }\n",[84,11470,11471],{"class":86,"line":2930},[84,11472,3365],{"class":154},[84,11474,11475],{"class":86,"line":2935},[84,11476,2746],{"class":154},[84,11478,11479],{"class":86,"line":2940},[84,11480,11481],{"class":1378},"\u002F\u002F定义打印函数\n",[84,11483,11484,11486,11488,11490,11492,11494,11496,11498,11500,11502],{"class":86,"line":2945},[84,11485,6538],{"class":129},[84,11487,10787],{"class":90},[84,11489,155],{"class":154},[84,11491,11280],{"class":90},[84,11493,997],{"class":129},[84,11495,2003],{"class":928},[84,11497,1688],{"class":154},[84,11499,1327],{"class":129},[84,11501,8503],{"class":928},[84,11503,162],{"class":154},[84,11505,11506],{"class":86,"line":2959},[84,11507,2727],{"class":154},[84,11509,11510,11512,11514,11516,11518,11520,11522,11524,11526,11528,11530],{"class":86,"line":2964},[84,11511,4379],{"class":129},[84,11513,2839],{"class":154},[84,11515,1327],{"class":129},[84,11517,4210],{"class":154},[84,11519,867],{"class":129},[84,11521,1504],{"class":94},[84,11523,4217],{"class":154},[84,11525,2218],{"class":129},[84,11527,11317],{"class":154},[84,11529,3470],{"class":129},[84,11531,162],{"class":154},[84,11533,11534],{"class":86,"line":3755},[84,11535,3209],{"class":154},[84,11537,11538,11540,11542,11544,11546,11549,11551,11553,11555,11558,11560,11562,11564,11567,11569,11571,11573,11576,11578,11580,11582,11585,11587,11589,11591,11594,11596],{"class":86,"line":3769},[84,11539,4629],{"class":154},[84,11541,2352],{"class":129},[84,11543,1562],{"class":158},[84,11545,2411],{"class":94},[84,11547,11548],{"class":158},"姓名：\"",[84,11550,2352],{"class":129},[84,11552,11407],{"class":154},[84,11554,1790],{"class":129},[84,11556,11557],{"class":154},"i)->name",[84,11559,2352],{"class":129},[84,11561,1562],{"class":158},[84,11563,2411],{"class":94},[84,11565,11566],{"class":158},"年龄：\"",[84,11568,2352],{"class":129},[84,11570,11407],{"class":154},[84,11572,1790],{"class":129},[84,11574,11575],{"class":154},"i)->age",[84,11577,2352],{"class":129},[84,11579,1562],{"class":158},[84,11581,2411],{"class":94},[84,11583,11584],{"class":158},"性别：\"",[84,11586,2352],{"class":129},[84,11588,11407],{"class":154},[84,11590,1790],{"class":129},[84,11592,11593],{"class":154},"i)->gender",[84,11595,2352],{"class":129},[84,11597,2374],{"class":154},[84,11599,11600],{"class":86,"line":3777},[84,11601,3365],{"class":154},[84,11603,11604],{"class":86,"line":3782},[84,11605,2746],{"class":154},[84,11607,11608,11610,11612],{"class":86,"line":3788},[84,11609,1327],{"class":129},[84,11611,3153],{"class":90},[84,11613,183],{"class":154},[84,11615,11616],{"class":86,"line":3794},[84,11617,2727],{"class":154},[84,11619,11620],{"class":86,"line":3799},[84,11621,11622],{"class":1378},"    \u002F\u002F定义结构体变量\n",[84,11624,11625,11628,11630,11632],{"class":86,"line":9120},[84,11626,11627],{"class":154},"    Sanguo s1[",[84,11629,1629],{"class":94},[84,11631,2248],{"class":154},[84,11633,6085],{"class":129},[84,11635,11636],{"class":86,"line":9144},[84,11637,3209],{"class":154},[84,11639,11640,11642,11644,11646,11648,11650,11652],{"class":86,"line":9149},[84,11641,6094],{"class":154},[84,11643,11124],{"class":158},[84,11645,1688],{"class":154},[84,11647,2083],{"class":94},[84,11649,1688],{"class":154},[84,11651,11133],{"class":158},[84,11653,6107],{"class":154},[84,11655,11656,11658,11660,11662,11664,11666,11668],{"class":86,"line":9155},[84,11657,6094],{"class":154},[84,11659,11142],{"class":158},[84,11661,1688],{"class":154},[84,11663,2058],{"class":94},[84,11665,1688],{"class":154},[84,11667,11133],{"class":158},[84,11669,6107],{"class":154},[84,11671,11672,11674,11676,11678,11680,11682,11684],{"class":86,"line":9182},[84,11673,6094],{"class":154},[84,11675,11159],{"class":158},[84,11677,1688],{"class":154},[84,11679,2008],{"class":94},[84,11681,1688],{"class":154},[84,11683,11133],{"class":158},[84,11685,6107],{"class":154},[84,11687,11688,11690,11692,11694,11696,11698,11700],{"class":86,"line":9187},[84,11689,6094],{"class":154},[84,11691,11176],{"class":158},[84,11693,1688],{"class":154},[84,11695,2033],{"class":94},[84,11697,1688],{"class":154},[84,11699,11133],{"class":158},[84,11701,6107],{"class":154},[84,11703,11704,11706,11708,11710,11712,11714,11716],{"class":86,"line":9193},[84,11705,6094],{"class":154},[84,11707,11193],{"class":158},[84,11709,1688],{"class":154},[84,11711,1983],{"class":94},[84,11713,1688],{"class":154},[84,11715,11202],{"class":158},[84,11717,6107],{"class":154},[84,11719,11720],{"class":86,"line":9205},[84,11721,6128],{"class":154},[84,11723,11724,11726,11728,11730,11733,11735,11738,11740],{"class":86,"line":9217},[84,11725,3164],{"class":129},[84,11727,8503],{"class":154},[84,11729,5381],{"class":129},[84,11731,11732],{"class":154},"(s1)",[84,11734,5387],{"class":129},[84,11736,11737],{"class":154},"(s1[",[84,11739,1504],{"class":94},[84,11741,5034],{"class":154},[84,11743,11744,11747,11749,11752,11754,11757,11760,11762],{"class":86,"line":9229},[84,11745,11746],{"class":154},"    Sanguo ",[84,11748,1043],{"class":129},[84,11750,11751],{"class":154},"s ",[84,11753,867],{"class":129},[84,11755,11756],{"class":129}," &",[84,11758,11759],{"class":154},"s1[",[84,11761,1504],{"class":94},[84,11763,5867],{"class":154},[84,11765,11766],{"class":86,"line":10888},[84,11767,11768],{"class":1378},"    \u002F\u002F排序前：\n",[84,11770,11771,11773,11775,11778,11780],{"class":86,"line":10913},[84,11772,7701],{"class":154},[84,11774,2352],{"class":129},[84,11776,11777],{"class":158}," \"排序前：\"",[84,11779,2625],{"class":129},[84,11781,10012],{"class":154},[84,11783,11784,11786],{"class":86,"line":10936},[84,11785,11087],{"class":90},[84,11787,11788],{"class":154},"(s,len);\n",[84,11790,11791],{"class":86,"line":10960},[84,11792,11793],{"class":1378},"    \u002F\u002F调用排序函数\n",[84,11795,11796,11798],{"class":86,"line":10965},[84,11797,8770],{"class":90},[84,11799,11788],{"class":154},[84,11801,11802],{"class":86,"line":10970},[84,11803,11804],{"class":1378},"    \u002F\u002F排序后\n",[84,11806,11807,11809,11811,11814,11816],{"class":86,"line":10975},[84,11808,7701],{"class":154},[84,11810,2352],{"class":129},[84,11812,11813],{"class":158}," \"排序后：\"",[84,11815,2625],{"class":129},[84,11817,10012],{"class":154},[84,11819,11820,11822],{"class":86,"line":10984},[84,11821,11087],{"class":90},[84,11823,11788],{"class":154},[84,11825,11826],{"class":86,"line":10989},[84,11827,2746],{"class":154},[19,11829,11830,11831,11833],{},"注意：使用指针时直接用传首地址**&s",[84,11832,1504],{},"**",[1222,11835,11836],{},"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":66,"searchDepth":98,"depth":98,"links":11838},[11839,11840,11841,11842,11843,11844,11845],{"id":8875,"depth":98,"text":8876},{"id":9237,"depth":98,"text":9238},{"id":9506,"depth":98,"text":9507},{"id":9671,"depth":98,"text":9672},{"id":9887,"depth":98,"text":9888},{"id":10208,"depth":98,"text":10209},{"id":10436,"depth":98,"text":10437},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8864,"description":8872},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11852,"title":11853,"body":11854,"description":66,"extension":1250,"meta":13197,"navigation":1252,"path":13198,"seo":13199,"stem":13200,"__hash__":13201},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11855,"toc":13191},[11856,11859,11863,11869,11883,11888,11891,11895,11902,11908,11911,11918,11924,11929,11932,11935,11938,12502,12505,12519,12523,12528,12544,12684,12687,12693,12696,12701,12709,12817,12820,12825,12828,12833,12836,12842,12845,13188],[10,11857,11853],{"id":11858},"_5程序内存模型",[14,11860,11862],{"id":11861},"_51内存分区模型","5.1内存分区模型",[19,11864,11865,11866],{},"C++程序在执行时，将内存大方向划分为",[1464,11867,11868],{},"4个区域",[2315,11870,11871,11874,11877,11880],{},[29,11872,11873],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,11875,11876],{},"全局区：存放全局变量和静态变量以及常量",[29,11878,11879],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,11881,11882],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11884,11885],{},[1464,11886,11887],{},"内存四区意义：",[19,11889,11890],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[198,11892,11894],{"id":11893},"_511程序运行前","5.1.1程序运行前",[19,11896,11897,11898,11901],{},"​\t在程序编译后，生成了exe可执行程序，",[1464,11899,11900],{},"未执行该程序前","分为两个区域",[19,11903,11904,11905],{},"​\t",[1464,11906,11907],{},"代码区：",[19,11909,11910],{},"​\t\t存放 CPU 执行的机器指令",[19,11912,11913,11914,11917],{},"​\t\t代码区是",[1464,11915,11916],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11919,11913,11920,11923],{},[1464,11921,11922],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11925,11904,11926],{},[1464,11927,11928],{},"全局区：",[19,11930,11931],{},"​\t\t全局变量和静态变量存放在此.",[19,11933,11934],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11936,11937],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[60,11939,11941],{"className":1313,"code":11940,"language":1315,"meta":66,"style":66},"\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",[39,11942,11943,11948,11961,11974,11978,11983,11998,12013,12017,12026,12030,12035,12048,12061,12065,12070,12096,12122,12126,12153,12179,12183,12188,12204,12219,12223,12249,12275,12279,12304,12329,12333,12359,12385,12389,12405,12420,12446,12472,12476,12486,12490,12498],{"__ignoreMap":66},[84,11944,11945],{"class":86,"line":87},[84,11946,11947],{"class":1378},"\u002F\u002F全局变量\n",[84,11949,11950,11952,11955,11957,11959],{"class":86,"line":98},[84,11951,1327],{"class":129},[84,11953,11954],{"class":154}," g_a ",[84,11956,867],{"class":129},[84,11958,994],{"class":94},[84,11960,2471],{"class":154},[84,11962,11963,11965,11968,11970,11972],{"class":86,"line":106},[84,11964,1327],{"class":129},[84,11966,11967],{"class":154}," g_b ",[84,11969,867],{"class":129},[84,11971,994],{"class":94},[84,11973,2471],{"class":154},[84,11975,11976],{"class":86,"line":112},[84,11977,3578],{"emptyLinePlaceholder":1252},[84,11979,11980],{"class":86,"line":425},[84,11981,11982],{"class":1378},"\u002F\u002F全局常量\n",[84,11984,11985,11987,11989,11992,11994,11996],{"class":86,"line":2395},[84,11986,7964],{"class":129},[84,11988,3560],{"class":129},[84,11990,11991],{"class":154}," c_g_a ",[84,11993,867],{"class":129},[84,11995,994],{"class":94},[84,11997,2471],{"class":154},[84,11999,12000,12002,12004,12007,12009,12011],{"class":86,"line":2401},[84,12001,7964],{"class":129},[84,12003,3560],{"class":129},[84,12005,12006],{"class":154}," c_g_b ",[84,12008,867],{"class":129},[84,12010,994],{"class":94},[84,12012,2471],{"class":154},[84,12014,12015],{"class":86,"line":2492},[84,12016,3578],{"emptyLinePlaceholder":1252},[84,12018,12019,12021,12023],{"class":86,"line":2498},[84,12020,1327],{"class":129},[84,12022,3153],{"class":90},[84,12024,12025],{"class":154},"() {\n",[84,12027,12028],{"class":86,"line":2510},[84,12029,3578],{"emptyLinePlaceholder":1252},[84,12031,12032],{"class":86,"line":2793},[84,12033,12034],{"class":1378},"    \u002F\u002F局部变量\n",[84,12036,12037,12039,12042,12044,12046],{"class":86,"line":2798},[84,12038,3164],{"class":129},[84,12040,12041],{"class":154}," a ",[84,12043,867],{"class":129},[84,12045,994],{"class":94},[84,12047,2471],{"class":154},[84,12049,12050,12052,12055,12057,12059],{"class":86,"line":2804},[84,12051,3164],{"class":129},[84,12053,12054],{"class":154}," b ",[84,12056,867],{"class":129},[84,12058,994],{"class":94},[84,12060,2471],{"class":154},[84,12062,12063],{"class":86,"line":2809},[84,12064,3578],{"emptyLinePlaceholder":1252},[84,12066,12067],{"class":86,"line":2823},[84,12068,12069],{"class":1378},"    \u002F\u002F打印地址\n",[84,12071,12072,12074,12076,12079,12081,12083,12085,12087,12089,12092,12094],{"class":86,"line":2828},[84,12073,7701],{"class":154},[84,12075,2352],{"class":129},[84,12077,12078],{"class":158}," \"局部变量a地址为： \"",[84,12080,2625],{"class":129},[84,12082,2839],{"class":154},[84,12084,1327],{"class":129},[84,12086,1739],{"class":154},[84,12088,1663],{"class":129},[84,12090,12091],{"class":154},"a ",[84,12093,2352],{"class":129},[84,12095,10012],{"class":154},[84,12097,12098,12100,12102,12105,12107,12109,12111,12113,12115,12118,12120],{"class":86,"line":2834},[84,12099,7701],{"class":154},[84,12101,2352],{"class":129},[84,12103,12104],{"class":158}," \"局部变量b地址为： \"",[84,12106,2625],{"class":129},[84,12108,2839],{"class":154},[84,12110,1327],{"class":129},[84,12112,1739],{"class":154},[84,12114,1663],{"class":129},[84,12116,12117],{"class":154},"b ",[84,12119,2352],{"class":129},[84,12121,10012],{"class":154},[84,12123,12124],{"class":86,"line":2855},[84,12125,3578],{"emptyLinePlaceholder":1252},[84,12127,12128,12130,12132,12135,12137,12140,12142,12144,12146,12149,12151],{"class":86,"line":2860},[84,12129,7701],{"class":154},[84,12131,2352],{"class":129},[84,12133,12134],{"class":158}," \"全局变量g_a地址为： \"",[84,12136,2625],{"class":129},[84,12138,12139],{"class":154},"  (",[84,12141,1327],{"class":129},[84,12143,1739],{"class":154},[84,12145,1663],{"class":129},[84,12147,12148],{"class":154},"g_a ",[84,12150,2352],{"class":129},[84,12152,10012],{"class":154},[84,12154,12155,12157,12159,12162,12164,12166,12168,12170,12172,12175,12177],{"class":86,"line":2874},[84,12156,7701],{"class":154},[84,12158,2352],{"class":129},[84,12160,12161],{"class":158}," \"全局变量g_b地址为： \"",[84,12163,2625],{"class":129},[84,12165,12139],{"class":154},[84,12167,1327],{"class":129},[84,12169,1739],{"class":154},[84,12171,1663],{"class":129},[84,12173,12174],{"class":154},"g_b ",[84,12176,2352],{"class":129},[84,12178,10012],{"class":154},[84,12180,12181],{"class":86,"line":2879},[84,12182,3578],{"emptyLinePlaceholder":1252},[84,12184,12185],{"class":86,"line":2908},[84,12186,12187],{"class":1378},"    \u002F\u002F静态变量\n",[84,12189,12190,12193,12195,12198,12200,12202],{"class":86,"line":2913},[84,12191,12192],{"class":129},"    static",[84,12194,3560],{"class":129},[84,12196,12197],{"class":154}," s_a ",[84,12199,867],{"class":129},[84,12201,994],{"class":94},[84,12203,2471],{"class":154},[84,12205,12206,12208,12210,12213,12215,12217],{"class":86,"line":2930},[84,12207,12192],{"class":129},[84,12209,3560],{"class":129},[84,12211,12212],{"class":154}," s_b ",[84,12214,867],{"class":129},[84,12216,994],{"class":94},[84,12218,2471],{"class":154},[84,12220,12221],{"class":86,"line":2935},[84,12222,3578],{"emptyLinePlaceholder":1252},[84,12224,12225,12227,12229,12232,12234,12236,12238,12240,12242,12245,12247],{"class":86,"line":2940},[84,12226,7701],{"class":154},[84,12228,2352],{"class":129},[84,12230,12231],{"class":158}," \"静态变量s_a地址为： \"",[84,12233,2625],{"class":129},[84,12235,2839],{"class":154},[84,12237,1327],{"class":129},[84,12239,1739],{"class":154},[84,12241,1663],{"class":129},[84,12243,12244],{"class":154},"s_a ",[84,12246,2352],{"class":129},[84,12248,10012],{"class":154},[84,12250,12251,12253,12255,12258,12260,12262,12264,12266,12268,12271,12273],{"class":86,"line":2945},[84,12252,7701],{"class":154},[84,12254,2352],{"class":129},[84,12256,12257],{"class":158}," \"静态变量s_b地址为： \"",[84,12259,2625],{"class":129},[84,12261,2839],{"class":154},[84,12263,1327],{"class":129},[84,12265,1739],{"class":154},[84,12267,1663],{"class":129},[84,12269,12270],{"class":154},"s_b ",[84,12272,2352],{"class":129},[84,12274,10012],{"class":154},[84,12276,12277],{"class":86,"line":2959},[84,12278,3578],{"emptyLinePlaceholder":1252},[84,12280,12281,12283,12285,12288,12290,12292,12294,12296,12298,12300,12302],{"class":86,"line":2964},[84,12282,7701],{"class":154},[84,12284,2352],{"class":129},[84,12286,12287],{"class":158}," \"字符串常量地址为： \"",[84,12289,2625],{"class":129},[84,12291,2839],{"class":154},[84,12293,1327],{"class":129},[84,12295,1739],{"class":154},[84,12297,1663],{"class":129},[84,12299,2369],{"class":158},[84,12301,2625],{"class":129},[84,12303,10012],{"class":154},[84,12305,12306,12308,12310,12312,12314,12316,12318,12320,12322,12325,12327],{"class":86,"line":3755},[84,12307,7701],{"class":154},[84,12309,2352],{"class":129},[84,12311,12287],{"class":158},[84,12313,2625],{"class":129},[84,12315,2839],{"class":154},[84,12317,1327],{"class":129},[84,12319,1739],{"class":154},[84,12321,1663],{"class":129},[84,12323,12324],{"class":158},"\"hello world1\"",[84,12326,2625],{"class":129},[84,12328,10012],{"class":154},[84,12330,12331],{"class":86,"line":3769},[84,12332,3578],{"emptyLinePlaceholder":1252},[84,12334,12335,12337,12339,12342,12344,12346,12348,12350,12352,12355,12357],{"class":86,"line":3777},[84,12336,7701],{"class":154},[84,12338,2352],{"class":129},[84,12340,12341],{"class":158}," \"全局常量c_g_a地址为： \"",[84,12343,2625],{"class":129},[84,12345,2839],{"class":154},[84,12347,1327],{"class":129},[84,12349,1739],{"class":154},[84,12351,1663],{"class":129},[84,12353,12354],{"class":154},"c_g_a ",[84,12356,2352],{"class":129},[84,12358,10012],{"class":154},[84,12360,12361,12363,12365,12368,12370,12372,12374,12376,12378,12381,12383],{"class":86,"line":3782},[84,12362,7701],{"class":154},[84,12364,2352],{"class":129},[84,12366,12367],{"class":158}," \"全局常量c_g_b地址为： \"",[84,12369,2625],{"class":129},[84,12371,2839],{"class":154},[84,12373,1327],{"class":129},[84,12375,1739],{"class":154},[84,12377,1663],{"class":129},[84,12379,12380],{"class":154},"c_g_b ",[84,12382,2352],{"class":129},[84,12384,10012],{"class":154},[84,12386,12387],{"class":86,"line":3788},[84,12388,3578],{"emptyLinePlaceholder":1252},[84,12390,12391,12394,12396,12399,12401,12403],{"class":86,"line":3794},[84,12392,12393],{"class":129},"    const",[84,12395,3560],{"class":129},[84,12397,12398],{"class":154}," c_l_a ",[84,12400,867],{"class":129},[84,12402,994],{"class":94},[84,12404,2471],{"class":154},[84,12406,12407,12409,12411,12414,12416,12418],{"class":86,"line":3799},[84,12408,12393],{"class":129},[84,12410,3560],{"class":129},[84,12412,12413],{"class":154}," c_l_b ",[84,12415,867],{"class":129},[84,12417,994],{"class":94},[84,12419,2471],{"class":154},[84,12421,12422,12424,12426,12429,12431,12433,12435,12437,12439,12442,12444],{"class":86,"line":9120},[84,12423,7701],{"class":154},[84,12425,2352],{"class":129},[84,12427,12428],{"class":158}," \"局部常量c_l_a地址为： \"",[84,12430,2625],{"class":129},[84,12432,2839],{"class":154},[84,12434,1327],{"class":129},[84,12436,1739],{"class":154},[84,12438,1663],{"class":129},[84,12440,12441],{"class":154},"c_l_a ",[84,12443,2352],{"class":129},[84,12445,10012],{"class":154},[84,12447,12448,12450,12452,12455,12457,12459,12461,12463,12465,12468,12470],{"class":86,"line":9144},[84,12449,7701],{"class":154},[84,12451,2352],{"class":129},[84,12453,12454],{"class":158}," \"局部常量c_l_b地址为： \"",[84,12456,2625],{"class":129},[84,12458,2839],{"class":154},[84,12460,1327],{"class":129},[84,12462,1739],{"class":154},[84,12464,1663],{"class":129},[84,12466,12467],{"class":154},"c_l_b ",[84,12469,2352],{"class":129},[84,12471,10012],{"class":154},[84,12473,12474],{"class":86,"line":9149},[84,12475,3578],{"emptyLinePlaceholder":1252},[84,12477,12478,12480,12482,12484],{"class":86,"line":9155},[84,12479,3481],{"class":90},[84,12481,155],{"class":154},[84,12483,3486],{"class":158},[84,12485,3897],{"class":154},[84,12487,12488],{"class":86,"line":9182},[84,12489,3578],{"emptyLinePlaceholder":1252},[84,12491,12492,12494,12496],{"class":86,"line":9187},[84,12493,5268],{"class":129},[84,12495,5271],{"class":94},[84,12497,2471],{"class":154},[84,12499,12500],{"class":86,"line":9193},[84,12501,2746],{"class":154},[19,12503,12504],{},"总结：",[2315,12506,12507,12510,12513,12516],{},[29,12508,12509],{},"c++中程序运行前分为全局区和代码区",[29,12511,12512],{},"代码区特点是共享和只读",[29,12514,12515],{},"全局区中存放全局变量、静态变量、常量",[29,12517,12518],{},"常量区中存放const修饰的全局常量和字符串常量",[198,12520,12522],{"id":12521},"_512程序运行后","5.1.2程序运行后",[26,12524,12525],{},[29,12526,12527],{},"栈区：",[2315,12529,12530,12537],{},[29,12531,12532,12533,12536],{},"由编译器自动分配释放, 存放",[1464,12534,12535],{},"函数的参数值,局部变量","等",[29,12538,12539,12540,12543],{},"注意事项：",[1464,12541,12542],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[60,12545,12547],{"className":1313,"code":12546,"language":1315,"meta":66,"style":66},"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",[39,12548,12549,12560,12564,12579,12591,12595,12599,12607,12612,12627,12645,12662,12672,12680],{"__ignoreMap":66},[84,12550,12551,12553,12555,12558],{"class":86,"line":87},[84,12552,1327],{"class":129},[84,12554,997],{"class":129},[84,12556,12557],{"class":90}," func",[84,12559,183],{"class":154},[84,12561,12562],{"class":86,"line":98},[84,12563,2727],{"class":154},[84,12565,12566,12568,12570,12572,12574,12576],{"class":86,"line":106},[84,12567,3164],{"class":129},[84,12569,12041],{"class":154},[84,12571,867],{"class":129},[84,12573,994],{"class":94},[84,12575,1375],{"class":154},[84,12577,12578],{"class":1378}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[84,12580,12581,12583,12585,12588],{"class":86,"line":112},[84,12582,5268],{"class":129},[84,12584,11756],{"class":129},[84,12586,12587],{"class":154},"a;",[84,12589,12590],{"class":1378}," \u002F\u002F放回局部变量的地址\n",[84,12592,12593],{"class":86,"line":425},[84,12594,2746],{"class":154},[84,12596,12597],{"class":86,"line":2395},[84,12598,3578],{"emptyLinePlaceholder":1252},[84,12600,12601,12603,12605],{"class":86,"line":2401},[84,12602,1327],{"class":129},[84,12604,3153],{"class":90},[84,12606,12025],{"class":154},[84,12608,12609],{"class":86,"line":2492},[84,12610,12611],{"class":1378},"    \u002F\u002F接受func的返回值\n",[84,12613,12614,12616,12618,12621,12623,12625],{"class":86,"line":2498},[84,12615,3164],{"class":129},[84,12617,997],{"class":129},[84,12619,12620],{"class":154},"p ",[84,12622,867],{"class":129},[84,12624,12557],{"class":90},[84,12626,6810],{"class":154},[84,12628,12629,12631,12633,12635,12637,12639,12642],{"class":86,"line":2510},[84,12630,7701],{"class":154},[84,12632,2352],{"class":129},[84,12634,997],{"class":129},[84,12636,12620],{"class":154},[84,12638,2352],{"class":129},[84,12640,12641],{"class":154}," endl;",[84,12643,12644],{"class":1378}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[84,12646,12647,12649,12651,12653,12655,12657,12659],{"class":86,"line":2793},[84,12648,7701],{"class":154},[84,12650,2352],{"class":129},[84,12652,997],{"class":129},[84,12654,12620],{"class":154},[84,12656,2352],{"class":129},[84,12658,12641],{"class":154},[84,12660,12661],{"class":1378}," \u002F\u002F第二次这个数据不再保留\n",[84,12663,12664,12666,12668,12670],{"class":86,"line":2798},[84,12665,3481],{"class":90},[84,12667,155],{"class":154},[84,12669,3486],{"class":158},[84,12671,3897],{"class":154},[84,12673,12674,12676,12678],{"class":86,"line":2804},[84,12675,5268],{"class":129},[84,12677,5271],{"class":94},[84,12679,2471],{"class":154},[84,12681,12682],{"class":86,"line":2809},[84,12683,2746],{"class":154},[19,12685,12686],{},"输出结果：",[19,12688,12689],{},[2643,12690],{"alt":12691,"src":12692},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12694,12695],{},"总结：不要返回局部变量的地址",[26,12697,12698],{"start":98},[29,12699,12700],{},"堆区",[2315,12702,12703,12706],{},[29,12704,12705],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,12707,12708],{},"在c++中主要利用new在堆区开辟内存",[60,12710,12712],{"className":1313,"code":12711,"language":1315,"meta":66,"style":66},"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",[39,12713,12714,12729,12733,12738,12759,12766,12770,12778,12782,12787,12801,12813],{"__ignoreMap":66},[84,12715,12716,12718,12721,12724,12726],{"class":86,"line":87},[84,12717,1327],{"class":129},[84,12719,12720],{"class":129},"  *",[84,12722,12723],{"class":90},"func",[84,12725,3605],{"class":154},[84,12727,12728],{"class":1378},"  \u002F\u002F函数返回指针\n",[84,12730,12731],{"class":86,"line":98},[84,12732,2727],{"class":154},[84,12734,12735],{"class":86,"line":106},[84,12736,12737],{"class":1378},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[84,12739,12740,12742,12744,12746,12748,12751,12753,12755,12757],{"class":86,"line":112},[84,12741,5325],{"class":129},[84,12743,997],{"class":129},[84,12745,19],{"class":154},[84,12747,867],{"class":129},[84,12749,12750],{"class":129}," new",[84,12752,3560],{"class":129},[84,12754,155],{"class":154},[84,12756,1756],{"class":94},[84,12758,3897],{"class":154},[84,12760,12761,12763],{"class":86,"line":425},[84,12762,5558],{"class":129},[84,12764,12765],{"class":154}," p;\n",[84,12767,12768],{"class":86,"line":2395},[84,12769,2746],{"class":154},[84,12771,12772,12774,12776],{"class":86,"line":2401},[84,12773,1327],{"class":129},[84,12775,3153],{"class":90},[84,12777,183],{"class":154},[84,12779,12780],{"class":86,"line":2492},[84,12781,2727],{"class":154},[84,12783,12784],{"class":86,"line":2498},[84,12785,12786],{"class":1378},"    \u002F\u002F在堆区开辟数据\n",[84,12788,12789,12791,12793,12795,12797,12799],{"class":86,"line":2510},[84,12790,3164],{"class":129},[84,12792,997],{"class":129},[84,12794,19],{"class":154},[84,12796,867],{"class":129},[84,12798,12723],{"class":90},[84,12800,6810],{"class":154},[84,12802,12803,12805,12807,12809,12811],{"class":86,"line":2793},[84,12804,2732],{"class":154},[84,12806,7592],{"class":129},[84,12808,19],{"class":154},[84,12810,2352],{"class":129},[84,12812,2374],{"class":154},[84,12814,12815],{"class":86,"line":2798},[84,12816,2746],{"class":154},[19,12818,12819],{},"图片展示：",[19,12821,12822],{},[2643,12823],{"alt":12691,"src":12824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12826,12827],{},"堆区内存由程序员管生死！！！",[26,12829,12830],{"start":106},[29,12831,12832],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12834,12835],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12837,12838,12839],{},"​语法：",[39,12840,12841],{}," new 数据类型",[19,12843,12844],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[60,12846,12848],{"className":1313,"code":12847,"language":1315,"meta":66,"style":66},"\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",[39,12849,12850,12855,12865,12869,12874,12879,12901,12905,12913,12917,12931,12943,12955,12967,12972,12977,12988,12992,12997,13005,13009,13014,13036,13062,13066,13084,13088,13114,13118,13130,13134,13139,13144,13152,13156,13160,13168,13172,13178,13184],{"__ignoreMap":66},[84,12851,12852],{"class":86,"line":87},[84,12853,12854],{"class":1378},"\u002F\u002F1.new的基本语法\n",[84,12856,12857,12859,12861,12863],{"class":86,"line":98},[84,12858,1327],{"class":129},[84,12860,997],{"class":129},[84,12862,12723],{"class":90},[84,12864,183],{"class":154},[84,12866,12867],{"class":86,"line":106},[84,12868,2727],{"class":154},[84,12870,12871],{"class":86,"line":112},[84,12872,12873],{"class":1378},"    \u002F\u002F在堆区创建整型数据\n",[84,12875,12876],{"class":86,"line":425},[84,12877,12878],{"class":1378},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[84,12880,12881,12883,12885,12887,12890,12892,12894,12896,12898],{"class":86,"line":2395},[84,12882,3164],{"class":129},[84,12884,997],{"class":129},[84,12886,19],{"class":154},[84,12888,12889],{"class":129},"=new",[84,12891,3560],{"class":129},[84,12893,155],{"class":154},[84,12895,1756],{"class":94},[84,12897,7139],{"class":154},[84,12899,12900],{"class":1378},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[84,12902,12903],{"class":86,"line":2401},[84,12904,2746],{"class":154},[84,12906,12907,12909,12911],{"class":86,"line":2492},[84,12908,6538],{"class":129},[84,12910,6762],{"class":90},[84,12912,183],{"class":154},[84,12914,12915],{"class":86,"line":2498},[84,12916,2727],{"class":154},[84,12918,12919,12921,12923,12925,12927,12929],{"class":86,"line":2510},[84,12920,3164],{"class":129},[84,12922,997],{"class":129},[84,12924,19],{"class":154},[84,12926,867],{"class":129},[84,12928,12723],{"class":90},[84,12930,6810],{"class":154},[84,12932,12933,12935,12937,12939,12941],{"class":86,"line":2793},[84,12934,2732],{"class":154},[84,12936,7592],{"class":129},[84,12938,19],{"class":154},[84,12940,2352],{"class":129},[84,12942,2374],{"class":154},[84,12944,12945,12947,12949,12951,12953],{"class":86,"line":2798},[84,12946,2732],{"class":154},[84,12948,7592],{"class":129},[84,12950,19],{"class":154},[84,12952,2352],{"class":129},[84,12954,2374],{"class":154},[84,12956,12957,12959,12961,12963,12965],{"class":86,"line":2804},[84,12958,2732],{"class":154},[84,12960,7592],{"class":129},[84,12962,19],{"class":154},[84,12964,2352],{"class":129},[84,12966,2374],{"class":154},[84,12968,12969],{"class":86,"line":2809},[84,12970,12971],{"class":1378},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[84,12973,12974],{"class":86,"line":2823},[84,12975,12976],{"class":1378},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[84,12978,12979,12982,12985],{"class":86,"line":2828},[84,12980,12981],{"class":129},"    delete",[84,12983,12984],{"class":154}," p;",[84,12986,12987],{"class":1378},"\u002F\u002F删除这块地址\n",[84,12989,12990],{"class":86,"line":2834},[84,12991,2746],{"class":154},[84,12993,12994],{"class":86,"line":2855},[84,12995,12996],{"class":1378},"\u002F\u002F2.在堆区利用new开辟数组\n",[84,12998,12999,13001,13003],{"class":86,"line":2860},[84,13000,6538],{"class":129},[84,13002,6831],{"class":90},[84,13004,183],{"class":154},[84,13006,13007],{"class":86,"line":2874},[84,13008,2727],{"class":154},[84,13010,13011],{"class":86,"line":2879},[84,13012,13013],{"class":1378},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[84,13015,13016,13018,13020,13022,13024,13026,13028,13030,13033],{"class":86,"line":2908},[84,13017,3164],{"class":129},[84,13019,997],{"class":129},[84,13021,5058],{"class":154},[84,13023,12889],{"class":129},[84,13025,3560],{"class":129},[84,13027,2198],{"class":154},[84,13029,1756],{"class":94},[84,13031,13032],{"class":154},"];",[84,13034,13035],{"class":1378},"\u002F\u002F10代表数组有10个元素\n",[84,13037,13038,13040,13042,13044,13046,13048,13050,13052,13054,13056,13058,13060],{"class":86,"line":2913},[84,13039,4379],{"class":129},[84,13041,2839],{"class":154},[84,13043,1327],{"class":129},[84,13045,4210],{"class":154},[84,13047,867],{"class":129},[84,13049,1504],{"class":94},[84,13051,4217],{"class":154},[84,13053,2218],{"class":129},[84,13055,1756],{"class":94},[84,13057,4217],{"class":154},[84,13059,3470],{"class":129},[84,13061,162],{"class":154},[84,13063,13064],{"class":86,"line":2930},[84,13065,3209],{"class":154},[84,13067,13068,13071,13073,13075,13077,13079,13081],{"class":86,"line":2935},[84,13069,13070],{"class":154},"        arr[i]",[84,13072,867],{"class":129},[84,13074,1751],{"class":154},[84,13076,1790],{"class":129},[84,13078,821],{"class":94},[84,13080,1375],{"class":154},[84,13082,13083],{"class":1378},"\u002F\u002F给10个元素赋值100～109\n",[84,13085,13086],{"class":86,"line":2940},[84,13087,3365],{"class":154},[84,13089,13090,13092,13094,13096,13098,13100,13102,13104,13106,13108,13110,13112],{"class":86,"line":2945},[84,13091,4379],{"class":129},[84,13093,2839],{"class":154},[84,13095,1327],{"class":129},[84,13097,4210],{"class":154},[84,13099,867],{"class":129},[84,13101,1504],{"class":94},[84,13103,4217],{"class":154},[84,13105,2218],{"class":129},[84,13107,1756],{"class":94},[84,13109,4217],{"class":154},[84,13111,3470],{"class":129},[84,13113,162],{"class":154},[84,13115,13116],{"class":86,"line":2959},[84,13117,3209],{"class":154},[84,13119,13120,13122,13124,13126,13128],{"class":86,"line":2964},[84,13121,4629],{"class":154},[84,13123,2352],{"class":129},[84,13125,5532],{"class":154},[84,13127,2352],{"class":129},[84,13129,2374],{"class":154},[84,13131,13132],{"class":86,"line":3755},[84,13133,3365],{"class":154},[84,13135,13136],{"class":86,"line":3769},[84,13137,13138],{"class":1378},"    \u002F\u002F释放堆区数组\n",[84,13140,13141],{"class":86,"line":3777},[84,13142,13143],{"class":1378},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[84,13145,13146,13149],{"class":86,"line":3782},[84,13147,13148],{"class":129},"    delete[]",[84,13150,13151],{"class":154}," arr;\n",[84,13153,13154],{"class":86,"line":3788},[84,13155,2746],{"class":154},[84,13157,13158],{"class":86,"line":3794},[84,13159,3578],{"emptyLinePlaceholder":1252},[84,13161,13162,13164,13166],{"class":86,"line":3799},[84,13163,1327],{"class":129},[84,13165,3153],{"class":90},[84,13167,183],{"class":154},[84,13169,13170],{"class":86,"line":9120},[84,13171,2727],{"class":154},[84,13173,13174,13176],{"class":86,"line":9144},[84,13175,6807],{"class":90},[84,13177,6810],{"class":154},[84,13179,13180,13182],{"class":86,"line":9149},[84,13181,6876],{"class":90},[84,13183,6810],{"class":154},[84,13185,13186],{"class":86,"line":9155},[84,13187,2746],{"class":154},[1222,13189,13190],{},"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":66,"searchDepth":98,"depth":98,"links":13192},[13193],{"id":11861,"depth":98,"text":11862,"children":13194},[13195,13196],{"id":11893,"depth":106,"text":11894},{"id":12521,"depth":106,"text":12522},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11853,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13203,"title":13204,"body":13205,"description":66,"extension":1250,"meta":14685,"navigation":1252,"path":14686,"seo":14687,"stem":14688,"__hash__":14689},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13206,"toc":14677},[13207,13210,13214,13217,13220,13389,13393,13398,13415,13420,13572,13576,13579,13582,13975,13979,13982,13987,13990,14302,14306,14312,14472,14474,14482,14486,14489,14496,14674],[10,13208,13204],{"id":13209},"_6引用",[14,13211,13213],{"id":13212},"_61引用基本用法","6.1引用基本用法",[19,13215,13216],{},"引用的本质：给变量起别名",[19,13218,13219],{},"语法：数据类型 &别名=原名",[60,13221,13223],{"className":1313,"code":13222,"language":1315,"meta":66,"style":66},"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",[39,13224,13225,13233,13237,13249,13261,13265,13284,13303,13307,13318,13322,13341,13359,13363,13373,13377,13385],{"__ignoreMap":66},[84,13226,13227,13229,13231],{"class":86,"line":87},[84,13228,1327],{"class":129},[84,13230,3153],{"class":90},[84,13232,12025],{"class":154},[84,13234,13235],{"class":86,"line":98},[84,13236,3578],{"emptyLinePlaceholder":1252},[84,13238,13239,13241,13243,13245,13247],{"class":86,"line":106},[84,13240,3164],{"class":129},[84,13242,12041],{"class":154},[84,13244,867],{"class":129},[84,13246,994],{"class":94},[84,13248,2471],{"class":154},[84,13250,13251,13253,13255,13257,13259],{"class":86,"line":112},[84,13252,3164],{"class":129},[84,13254,11756],{"class":129},[84,13256,12117],{"class":154},[84,13258,867],{"class":129},[84,13260,2613],{"class":154},[84,13262,13263],{"class":86,"line":425},[84,13264,3578],{"emptyLinePlaceholder":1252},[84,13266,13267,13269,13271,13274,13276,13278,13280,13282],{"class":86,"line":2395},[84,13268,7701],{"class":154},[84,13270,2352],{"class":129},[84,13272,13273],{"class":158}," \"a = \"",[84,13275,2625],{"class":129},[84,13277,12041],{"class":154},[84,13279,2352],{"class":129},[84,13281,12641],{"class":154},[84,13283,8440],{"class":1378},[84,13285,13286,13288,13290,13293,13295,13297,13299,13301],{"class":86,"line":2401},[84,13287,7701],{"class":154},[84,13289,2352],{"class":129},[84,13291,13292],{"class":158}," \"b = \"",[84,13294,2625],{"class":129},[84,13296,12054],{"class":154},[84,13298,2352],{"class":129},[84,13300,12641],{"class":154},[84,13302,8440],{"class":1378},[84,13304,13305],{"class":86,"line":2492},[84,13306,3578],{"emptyLinePlaceholder":1252},[84,13308,13309,13312,13314,13316],{"class":86,"line":2498},[84,13310,13311],{"class":154},"    b ",[84,13313,867],{"class":129},[84,13315,6928],{"class":94},[84,13317,2471],{"class":154},[84,13319,13320],{"class":86,"line":2510},[84,13321,3578],{"emptyLinePlaceholder":1252},[84,13323,13324,13326,13328,13330,13332,13334,13336,13338],{"class":86,"line":2793},[84,13325,7701],{"class":154},[84,13327,2352],{"class":129},[84,13329,13273],{"class":158},[84,13331,2625],{"class":129},[84,13333,12041],{"class":154},[84,13335,2352],{"class":129},[84,13337,12641],{"class":154},[84,13339,13340],{"class":1378},"\u002F\u002F100\n",[84,13342,13343,13345,13347,13349,13351,13353,13355,13357],{"class":86,"line":2798},[84,13344,7701],{"class":154},[84,13346,2352],{"class":129},[84,13348,13292],{"class":158},[84,13350,2625],{"class":129},[84,13352,12054],{"class":154},[84,13354,2352],{"class":129},[84,13356,12641],{"class":154},[84,13358,13340],{"class":1378},[84,13360,13361],{"class":86,"line":2804},[84,13362,3578],{"emptyLinePlaceholder":1252},[84,13364,13365,13367,13369,13371],{"class":86,"line":2809},[84,13366,3481],{"class":90},[84,13368,155],{"class":154},[84,13370,3486],{"class":158},[84,13372,3897],{"class":154},[84,13374,13375],{"class":86,"line":2823},[84,13376,3578],{"emptyLinePlaceholder":1252},[84,13378,13379,13381,13383],{"class":86,"line":2828},[84,13380,5268],{"class":129},[84,13382,5271],{"class":94},[84,13384,2471],{"class":154},[84,13386,13387],{"class":86,"line":2834},[84,13388,2746],{"class":154},[14,13390,13392],{"id":13391},"_62引用的注意事项","6.2引用的注意事项",[26,13394,13395],{},[29,13396,13397],{},"引用必须要初始化",[60,13399,13401],{"className":1313,"code":13400,"language":1315,"meta":66,"style":66},"int &b;\u002F\u002F非常错误！\n",[39,13402,13403],{"__ignoreMap":66},[84,13404,13405,13407,13409,13412],{"class":86,"line":87},[84,13406,1327],{"class":129},[84,13408,11756],{"class":129},[84,13410,13411],{"class":154},"b;",[84,13413,13414],{"class":1378},"\u002F\u002F非常错误！\n",[26,13416,13417],{"start":98},[29,13418,13419],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[60,13421,13423],{"className":1313,"code":13422,"language":1315,"meta":66,"style":66},"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",[39,13424,13425,13433,13445,13457,13465,13481,13494,13512,13530,13550,13560,13568],{"__ignoreMap":66},[84,13426,13427,13429,13431],{"class":86,"line":87},[84,13428,1327],{"class":129},[84,13430,3153],{"class":90},[84,13432,12025],{"class":154},[84,13434,13435,13437,13439,13441,13443],{"class":86,"line":98},[84,13436,3164],{"class":129},[84,13438,12041],{"class":154},[84,13440,867],{"class":129},[84,13442,994],{"class":94},[84,13444,2471],{"class":154},[84,13446,13447,13449,13451,13453,13455],{"class":86,"line":106},[84,13448,3164],{"class":129},[84,13450,12054],{"class":154},[84,13452,867],{"class":129},[84,13454,10122],{"class":94},[84,13456,2471],{"class":154},[84,13458,13459,13462],{"class":86,"line":112},[84,13460,13461],{"class":1378},"    \u002F\u002Fint &c;",[84,13463,13464],{"class":1378}," \u002F\u002F错误，引用必须初始化\n",[84,13466,13467,13469,13471,13473,13475,13478],{"class":86,"line":425},[84,13468,3164],{"class":129},[84,13470,11756],{"class":129},[84,13472,4124],{"class":154},[84,13474,867],{"class":129},[84,13476,13477],{"class":154}," a;",[84,13479,13480],{"class":1378}," \u002F\u002F一旦初始化后，就不可以更改\n",[84,13482,13483,13486,13488,13491],{"class":86,"line":2395},[84,13484,13485],{"class":154},"    c ",[84,13487,867],{"class":129},[84,13489,13490],{"class":154}," b;",[84,13492,13493],{"class":1378}," \u002F\u002F这是赋值操作，不是更改引用\n",[84,13495,13496,13498,13500,13502,13504,13506,13508,13510],{"class":86,"line":2401},[84,13497,7701],{"class":154},[84,13499,2352],{"class":129},[84,13501,13273],{"class":158},[84,13503,2625],{"class":129},[84,13505,12041],{"class":154},[84,13507,2352],{"class":129},[84,13509,12641],{"class":154},[84,13511,8425],{"class":1378},[84,13513,13514,13516,13518,13520,13522,13524,13526,13528],{"class":86,"line":2492},[84,13515,7701],{"class":154},[84,13517,2352],{"class":129},[84,13519,13292],{"class":158},[84,13521,2625],{"class":129},[84,13523,12054],{"class":154},[84,13525,2352],{"class":129},[84,13527,12641],{"class":154},[84,13529,8425],{"class":1378},[84,13531,13532,13534,13536,13539,13541,13544,13546,13548],{"class":86,"line":2498},[84,13533,7701],{"class":154},[84,13535,2352],{"class":129},[84,13537,13538],{"class":158}," \"c = \"",[84,13540,2625],{"class":129},[84,13542,13543],{"class":154}," c ",[84,13545,2352],{"class":129},[84,13547,12641],{"class":154},[84,13549,8425],{"class":1378},[84,13551,13552,13554,13556,13558],{"class":86,"line":2510},[84,13553,3481],{"class":90},[84,13555,155],{"class":154},[84,13557,3486],{"class":158},[84,13559,3897],{"class":154},[84,13561,13562,13564,13566],{"class":86,"line":2793},[84,13563,5268],{"class":129},[84,13565,5271],{"class":94},[84,13567,2471],{"class":154},[84,13569,13570],{"class":86,"line":2798},[84,13571,2746],{"class":154},[14,13573,13575],{"id":13574},"_63引用做函数参数","6.3引用做函数参数",[19,13577,13578],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13580,13581],{},"优点：可以简化指针修改实参",[60,13583,13585],{"className":1313,"code":13584,"language":1315,"meta":66,"style":66},"\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",[39,13586,13587,13592,13614,13625,13635,13644,13648,13652,13657,13679,13691,13703,13713,13717,13721,13726,13748,13758,13766,13774,13778,13782,13790,13794,13806,13818,13822,13833,13859,13863,13883,13907,13911,13921,13945,13949,13959,13963,13971],{"__ignoreMap":66},[84,13588,13589],{"class":86,"line":87},[84,13590,13591],{"class":1378},"\u002F\u002F1. 值传递\n",[84,13593,13594,13596,13599,13601,13603,13605,13607,13609,13611],{"class":86,"line":98},[84,13595,6538],{"class":129},[84,13597,13598],{"class":90}," mySwap01",[84,13600,155],{"class":154},[84,13602,1327],{"class":129},[84,13604,2579],{"class":928},[84,13606,846],{"class":154},[84,13608,1327],{"class":129},[84,13610,4011],{"class":928},[84,13612,13613],{"class":154},") {\n",[84,13615,13616,13618,13621,13623],{"class":86,"line":106},[84,13617,3164],{"class":129},[84,13619,13620],{"class":154}," temp ",[84,13622,867],{"class":129},[84,13624,2613],{"class":154},[84,13626,13627,13630,13632],{"class":86,"line":112},[84,13628,13629],{"class":154},"    a ",[84,13631,867],{"class":129},[84,13633,13634],{"class":154}," b;\n",[84,13636,13637,13639,13641],{"class":86,"line":425},[84,13638,13311],{"class":154},[84,13640,867],{"class":129},[84,13642,13643],{"class":154}," temp;\n",[84,13645,13646],{"class":86,"line":2395},[84,13647,2746],{"class":154},[84,13649,13650],{"class":86,"line":2401},[84,13651,3578],{"emptyLinePlaceholder":1252},[84,13653,13654],{"class":86,"line":2492},[84,13655,13656],{"class":1378},"\u002F\u002F2. 地址传递\n",[84,13658,13659,13661,13664,13666,13669,13671,13673,13675,13677],{"class":86,"line":2498},[84,13660,6538],{"class":129},[84,13662,13663],{"class":90}," mySwap02",[84,13665,155],{"class":154},[84,13667,13668],{"class":129},"int*",[84,13670,2579],{"class":928},[84,13672,846],{"class":154},[84,13674,13668],{"class":129},[84,13676,4011],{"class":928},[84,13678,13613],{"class":154},[84,13680,13681,13683,13685,13687,13689],{"class":86,"line":2510},[84,13682,3164],{"class":129},[84,13684,13620],{"class":154},[84,13686,867],{"class":129},[84,13688,997],{"class":129},[84,13690,7370],{"class":154},[84,13692,13693,13695,13697,13699,13701],{"class":86,"line":2793},[84,13694,7576],{"class":129},[84,13696,12091],{"class":154},[84,13698,867],{"class":129},[84,13700,997],{"class":129},[84,13702,7242],{"class":154},[84,13704,13705,13707,13709,13711],{"class":86,"line":2798},[84,13706,7576],{"class":129},[84,13708,12117],{"class":154},[84,13710,867],{"class":129},[84,13712,13643],{"class":154},[84,13714,13715],{"class":86,"line":2804},[84,13716,2746],{"class":154},[84,13718,13719],{"class":86,"line":2809},[84,13720,3578],{"emptyLinePlaceholder":1252},[84,13722,13723],{"class":86,"line":2823},[84,13724,13725],{"class":1378},"\u002F\u002F3. 引用传递\n",[84,13727,13728,13730,13733,13735,13738,13740,13742,13744,13746],{"class":86,"line":2828},[84,13729,6538],{"class":129},[84,13731,13732],{"class":90}," mySwap03",[84,13734,155],{"class":154},[84,13736,13737],{"class":129},"int&",[84,13739,2579],{"class":928},[84,13741,846],{"class":154},[84,13743,13737],{"class":129},[84,13745,4011],{"class":928},[84,13747,13613],{"class":154},[84,13749,13750,13752,13754,13756],{"class":86,"line":2834},[84,13751,3164],{"class":129},[84,13753,13620],{"class":154},[84,13755,867],{"class":129},[84,13757,2613],{"class":154},[84,13759,13760,13762,13764],{"class":86,"line":2855},[84,13761,13629],{"class":154},[84,13763,867],{"class":129},[84,13765,13634],{"class":154},[84,13767,13768,13770,13772],{"class":86,"line":2860},[84,13769,13311],{"class":154},[84,13771,867],{"class":129},[84,13773,13643],{"class":154},[84,13775,13776],{"class":86,"line":2874},[84,13777,2746],{"class":154},[84,13779,13780],{"class":86,"line":2879},[84,13781,3578],{"emptyLinePlaceholder":1252},[84,13783,13784,13786,13788],{"class":86,"line":2908},[84,13785,1327],{"class":129},[84,13787,3153],{"class":90},[84,13789,12025],{"class":154},[84,13791,13792],{"class":86,"line":2913},[84,13793,3578],{"emptyLinePlaceholder":1252},[84,13795,13796,13798,13800,13802,13804],{"class":86,"line":2930},[84,13797,3164],{"class":129},[84,13799,12041],{"class":154},[84,13801,867],{"class":129},[84,13803,994],{"class":94},[84,13805,2471],{"class":154},[84,13807,13808,13810,13812,13814,13816],{"class":86,"line":2935},[84,13809,3164],{"class":129},[84,13811,12054],{"class":154},[84,13813,867],{"class":129},[84,13815,10122],{"class":94},[84,13817,2471],{"class":154},[84,13819,13820],{"class":86,"line":2940},[84,13821,3578],{"emptyLinePlaceholder":1252},[84,13823,13824,13827,13830],{"class":86,"line":2945},[84,13825,13826],{"class":90},"    mySwap01",[84,13828,13829],{"class":154},"(a, b);",[84,13831,13832],{"class":1378},"\u002F\u002F值传递，形参不会修饰实参\n",[84,13834,13835,13837,13839,13842,13844,13846,13848,13851,13853,13855,13857],{"class":86,"line":2959},[84,13836,7701],{"class":154},[84,13838,2352],{"class":129},[84,13840,13841],{"class":158}," \"a:\"",[84,13843,2625],{"class":129},[84,13845,12041],{"class":154},[84,13847,2352],{"class":129},[84,13849,13850],{"class":158}," \" b:\"",[84,13852,2625],{"class":129},[84,13854,12054],{"class":154},[84,13856,2352],{"class":129},[84,13858,10012],{"class":154},[84,13860,13861],{"class":86,"line":2964},[84,13862,3578],{"emptyLinePlaceholder":1252},[84,13864,13865,13868,13870,13872,13875,13877,13880],{"class":86,"line":3755},[84,13866,13867],{"class":90},"    mySwap02",[84,13869,155],{"class":154},[84,13871,1663],{"class":129},[84,13873,13874],{"class":154},"a, ",[84,13876,1663],{"class":129},[84,13878,13879],{"class":154},"b);",[84,13881,13882],{"class":1378},"\u002F\u002F地址传递，形参会修饰实参\n",[84,13884,13885,13887,13889,13891,13893,13895,13897,13899,13901,13903,13905],{"class":86,"line":3769},[84,13886,7701],{"class":154},[84,13888,2352],{"class":129},[84,13890,13841],{"class":158},[84,13892,2625],{"class":129},[84,13894,12041],{"class":154},[84,13896,2352],{"class":129},[84,13898,13850],{"class":158},[84,13900,2625],{"class":129},[84,13902,12054],{"class":154},[84,13904,2352],{"class":129},[84,13906,10012],{"class":154},[84,13908,13909],{"class":86,"line":3777},[84,13910,3578],{"emptyLinePlaceholder":1252},[84,13912,13913,13916,13918],{"class":86,"line":3782},[84,13914,13915],{"class":90},"    mySwap03",[84,13917,13829],{"class":154},[84,13919,13920],{"class":1378},"\u002F\u002F引用传递，形参会修饰实参\n",[84,13922,13923,13925,13927,13929,13931,13933,13935,13937,13939,13941,13943],{"class":86,"line":3788},[84,13924,7701],{"class":154},[84,13926,2352],{"class":129},[84,13928,13841],{"class":158},[84,13930,2625],{"class":129},[84,13932,12041],{"class":154},[84,13934,2352],{"class":129},[84,13936,13850],{"class":158},[84,13938,2625],{"class":129},[84,13940,12054],{"class":154},[84,13942,2352],{"class":129},[84,13944,10012],{"class":154},[84,13946,13947],{"class":86,"line":3794},[84,13948,3578],{"emptyLinePlaceholder":1252},[84,13950,13951,13953,13955,13957],{"class":86,"line":3799},[84,13952,3481],{"class":90},[84,13954,155],{"class":154},[84,13956,3486],{"class":158},[84,13958,3897],{"class":154},[84,13960,13961],{"class":86,"line":9120},[84,13962,3578],{"emptyLinePlaceholder":1252},[84,13964,13965,13967,13969],{"class":86,"line":9144},[84,13966,5268],{"class":129},[84,13968,5271],{"class":94},[84,13970,2471],{"class":154},[84,13972,13973],{"class":86,"line":9149},[84,13974,2746],{"class":154},[14,13976,13978],{"id":13977},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13980,13981],{},"作用：引用是可以作为函数的返回值存在的",[19,13983,10197,13984],{},[1464,13985,13986],{},"不要返回局部变量引用",[19,13988,13989],{},"用法：函数调用作为左值",[60,13991,13993],{"className":11113,"code":13992,"language":11115,"meta":66,"style":66},"\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",[39,13994,13995,14000,14008,14023,14029,14033,14037,14042,14050,14067,14073,14077,14081,14089,14093,14098,14112,14132,14151,14155,14160,14173,14193,14211,14215,14231,14235,14254,14272,14276,14286,14290,14298],{"__ignoreMap":66},[84,13996,13997],{"class":86,"line":87},[84,13998,13999],{"class":1378},"\u002F\u002F返回局部变量引用\n",[84,14001,14002,14004,14006],{"class":86,"line":98},[84,14003,13737],{"class":129},[84,14005,6762],{"class":90},[84,14007,12025],{"class":154},[84,14009,14010,14012,14014,14016,14018,14020],{"class":86,"line":106},[84,14011,3164],{"class":129},[84,14013,12041],{"class":154},[84,14015,867],{"class":129},[84,14017,994],{"class":94},[84,14019,1375],{"class":154},[84,14021,14022],{"class":1378}," \u002F\u002F局部变量\n",[84,14024,14025,14027],{"class":86,"line":112},[84,14026,5268],{"class":129},[84,14028,2613],{"class":154},[84,14030,14031],{"class":86,"line":425},[84,14032,2746],{"class":154},[84,14034,14035],{"class":86,"line":2395},[84,14036,3578],{"emptyLinePlaceholder":1252},[84,14038,14039],{"class":86,"line":2401},[84,14040,14041],{"class":1378},"\u002F\u002F返回静态变量引用\n",[84,14043,14044,14046,14048],{"class":86,"line":2492},[84,14045,13737],{"class":129},[84,14047,6831],{"class":90},[84,14049,12025],{"class":154},[84,14051,14052,14054,14056,14058,14060,14062,14064],{"class":86,"line":2498},[84,14053,12192],{"class":129},[84,14055,3560],{"class":129},[84,14057,12041],{"class":154},[84,14059,867],{"class":129},[84,14061,10122],{"class":94},[84,14063,1375],{"class":154},[84,14065,14066],{"class":1378},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[84,14068,14069,14071],{"class":86,"line":2510},[84,14070,5268],{"class":129},[84,14072,2613],{"class":154},[84,14074,14075],{"class":86,"line":2793},[84,14076,2746],{"class":154},[84,14078,14079],{"class":86,"line":2798},[84,14080,3578],{"emptyLinePlaceholder":1252},[84,14082,14083,14085,14087],{"class":86,"line":2804},[84,14084,1327],{"class":129},[84,14086,3153],{"class":90},[84,14088,12025],{"class":154},[84,14090,14091],{"class":86,"line":2809},[84,14092,3578],{"emptyLinePlaceholder":1252},[84,14094,14095],{"class":86,"line":2823},[84,14096,14097],{"class":1378},"    \u002F\u002F不能返回局部变量的引用\n",[84,14099,14100,14103,14106,14108,14110],{"class":86,"line":2828},[84,14101,14102],{"class":129},"    int&",[84,14104,14105],{"class":154}," ref ",[84,14107,867],{"class":129},[84,14109,6762],{"class":90},[84,14111,6810],{"class":154},[84,14113,14114,14116,14118,14121,14123,14125,14127,14129],{"class":86,"line":2834},[84,14115,7701],{"class":154},[84,14117,2352],{"class":129},[84,14119,14120],{"class":158}," \"ref = \"",[84,14122,2625],{"class":129},[84,14124,14105],{"class":154},[84,14126,2352],{"class":129},[84,14128,12641],{"class":154},[84,14130,14131],{"class":1378},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[84,14133,14134,14136,14138,14140,14142,14144,14146,14148],{"class":86,"line":2855},[84,14135,7701],{"class":154},[84,14137,2352],{"class":129},[84,14139,14120],{"class":158},[84,14141,2625],{"class":129},[84,14143,14105],{"class":154},[84,14145,2352],{"class":129},[84,14147,12641],{"class":154},[84,14149,14150],{"class":1378},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[84,14152,14153],{"class":86,"line":2860},[84,14154,3578],{"emptyLinePlaceholder":1252},[84,14156,14157],{"class":86,"line":2874},[84,14158,14159],{"class":1378},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[84,14161,14162,14164,14167,14169,14171],{"class":86,"line":2879},[84,14163,14102],{"class":129},[84,14165,14166],{"class":154}," ref2 ",[84,14168,867],{"class":129},[84,14170,6831],{"class":90},[84,14172,6810],{"class":154},[84,14174,14175,14177,14179,14182,14184,14186,14188,14190],{"class":86,"line":2908},[84,14176,7701],{"class":154},[84,14178,2352],{"class":129},[84,14180,14181],{"class":158}," \"ref2 = \"",[84,14183,2625],{"class":129},[84,14185,14166],{"class":154},[84,14187,2352],{"class":129},[84,14189,12641],{"class":154},[84,14191,14192],{"class":1378}," \u002F\u002F20\n",[84,14194,14195,14197,14199,14201,14203,14205,14207,14209],{"class":86,"line":2913},[84,14196,7701],{"class":154},[84,14198,2352],{"class":129},[84,14200,14181],{"class":158},[84,14202,2625],{"class":129},[84,14204,14166],{"class":154},[84,14206,2352],{"class":129},[84,14208,12641],{"class":154},[84,14210,14192],{"class":1378},[84,14212,14213],{"class":86,"line":2930},[84,14214,3578],{"emptyLinePlaceholder":1252},[84,14216,14217,14219,14222,14224,14226,14228],{"class":86,"line":2935},[84,14218,6876],{"class":90},[84,14220,14221],{"class":154},"() ",[84,14223,867],{"class":129},[84,14225,4177],{"class":94},[84,14227,1375],{"class":154},[84,14229,14230],{"class":1378},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[84,14232,14233],{"class":86,"line":2940},[84,14234,3578],{"emptyLinePlaceholder":1252},[84,14236,14237,14239,14241,14243,14245,14247,14249,14251],{"class":86,"line":2945},[84,14238,7701],{"class":154},[84,14240,2352],{"class":129},[84,14242,14181],{"class":158},[84,14244,2625],{"class":129},[84,14246,14166],{"class":154},[84,14248,2352],{"class":129},[84,14250,12641],{"class":154},[84,14252,14253],{"class":1378}," \u002F\u002F1000\n",[84,14255,14256,14258,14260,14262,14264,14266,14268,14270],{"class":86,"line":2959},[84,14257,7701],{"class":154},[84,14259,2352],{"class":129},[84,14261,14181],{"class":158},[84,14263,2625],{"class":129},[84,14265,14166],{"class":154},[84,14267,2352],{"class":129},[84,14269,12641],{"class":154},[84,14271,14253],{"class":1378},[84,14273,14274],{"class":86,"line":2964},[84,14275,3578],{"emptyLinePlaceholder":1252},[84,14277,14278,14280,14282,14284],{"class":86,"line":3755},[84,14279,3481],{"class":90},[84,14281,155],{"class":154},[84,14283,3486],{"class":158},[84,14285,3897],{"class":154},[84,14287,14288],{"class":86,"line":3769},[84,14289,3578],{"emptyLinePlaceholder":1252},[84,14291,14292,14294,14296],{"class":86,"line":3777},[84,14293,5268],{"class":129},[84,14295,5271],{"class":94},[84,14297,2471],{"class":154},[84,14299,14300],{"class":86,"line":3782},[84,14301,2746],{"class":154},[14,14303,14305],{"id":14304},"_65引用的本质","6.5引用的本质",[19,14307,14308,14309],{},"本质：",[1464,14310,14311],{},"引用的本质在c++内部实现是一个指针常量.",[60,14313,14315],{"className":1313,"code":14314,"language":1315,"meta":66,"style":66},"\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",[39,14316,14317,14322,14338,14352,14356,14365,14377,14382,14387,14398,14411,14415,14431,14448,14452,14460,14468],{"__ignoreMap":66},[84,14318,14319],{"class":86,"line":87},[84,14320,14321],{"class":1378},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[84,14323,14324,14326,14328,14330,14332,14335],{"class":86,"line":98},[84,14325,6538],{"class":129},[84,14327,12557],{"class":90},[84,14329,155],{"class":154},[84,14331,13737],{"class":129},[84,14333,14334],{"class":928}," ref",[84,14336,14337],{"class":154},"){\n",[84,14339,14340,14343,14345,14347,14349],{"class":86,"line":106},[84,14341,14342],{"class":154},"    ref ",[84,14344,867],{"class":129},[84,14346,6928],{"class":94},[84,14348,1375],{"class":154},[84,14350,14351],{"class":1378}," \u002F\u002F ref是引用，转换为*ref = 100\n",[84,14353,14354],{"class":86,"line":112},[84,14355,2746],{"class":154},[84,14357,14358,14360,14362],{"class":86,"line":425},[84,14359,1327],{"class":129},[84,14361,3153],{"class":90},[84,14363,14364],{"class":154},"(){\n",[84,14366,14367,14369,14371,14373,14375],{"class":86,"line":2395},[84,14368,3164],{"class":129},[84,14370,12041],{"class":154},[84,14372,867],{"class":129},[84,14374,994],{"class":94},[84,14376,2471],{"class":154},[84,14378,14379],{"class":86,"line":2401},[84,14380,14381],{"class":154},"    \n",[84,14383,14384],{"class":86,"line":2492},[84,14385,14386],{"class":1378},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[84,14388,14389,14391,14393,14395],{"class":86,"line":2498},[84,14390,14102],{"class":129},[84,14392,14105],{"class":154},[84,14394,867],{"class":129},[84,14396,14397],{"class":154}," a; \n",[84,14399,14400,14402,14404,14406,14408],{"class":86,"line":2510},[84,14401,14342],{"class":154},[84,14403,867],{"class":129},[84,14405,10122],{"class":94},[84,14407,1375],{"class":154},[84,14409,14410],{"class":1378}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[84,14412,14413],{"class":86,"line":2793},[84,14414,14381],{"class":154},[84,14416,14417,14419,14421,14423,14425,14427,14429],{"class":86,"line":2798},[84,14418,7701],{"class":154},[84,14420,2352],{"class":129},[84,14422,13841],{"class":158},[84,14424,2625],{"class":129},[84,14426,12041],{"class":154},[84,14428,2352],{"class":129},[84,14430,10012],{"class":154},[84,14432,14433,14435,14437,14440,14442,14444,14446],{"class":86,"line":2804},[84,14434,7701],{"class":154},[84,14436,2352],{"class":129},[84,14438,14439],{"class":158}," \"ref:\"",[84,14441,2625],{"class":129},[84,14443,14105],{"class":154},[84,14445,2352],{"class":129},[84,14447,10012],{"class":154},[84,14449,14450],{"class":86,"line":2809},[84,14451,14381],{"class":154},[84,14453,14454,14457],{"class":86,"line":2823},[84,14455,14456],{"class":90},"    func",[84,14458,14459],{"class":154},"(a);\n",[84,14461,14462,14464,14466],{"class":86,"line":2828},[84,14463,5268],{"class":129},[84,14465,5271],{"class":94},[84,14467,2471],{"class":154},[84,14469,14470],{"class":86,"line":2834},[84,14471,2746],{"class":154},[19,14473,12504],{},[26,14475,14476,14479],{},[29,14477,14478],{},"引用的本质，就是一个指针常量",[29,14480,14481],{},"引用一旦初始化，就不可以发生改变",[14,14483,14485],{"id":14484},"_66常量引用","6.6常量引用",[19,14487,14488],{},"作用：常量引用主要用来修饰形参",[19,14490,14491,14492,14495],{},"在函数形参列表中，可以加",[1464,14493,14494],{},"const修饰形参","，防止形参改变实参",[60,14497,14499],{"className":1313,"code":14498,"language":1315,"meta":66,"style":66},"\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",[39,14500,14501,14506,14511,14530,14535,14548,14552,14556,14564,14568,14573,14578,14592,14596,14604,14616,14620,14625,14637,14644,14648,14658,14662,14670],{"__ignoreMap":66},[84,14502,14503],{"class":86,"line":87},[84,14504,14505],{"class":1378},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[84,14507,14508],{"class":86,"line":98},[84,14509,14510],{"class":1378},"\u002F\u002F加上const就不能修改实参的\n",[84,14512,14513,14515,14518,14520,14522,14525,14528],{"class":86,"line":106},[84,14514,6538],{"class":129},[84,14516,14517],{"class":90}," showValue",[84,14519,155],{"class":154},[84,14521,7964],{"class":129},[84,14523,14524],{"class":129}," int&",[84,14526,14527],{"class":928}," v",[84,14529,13613],{"class":154},[84,14531,14532],{"class":86,"line":112},[84,14533,14534],{"class":1378},"    \u002F\u002Fv += 100;\n",[84,14536,14537,14539,14541,14544,14546],{"class":86,"line":425},[84,14538,7701],{"class":154},[84,14540,2352],{"class":129},[84,14542,14543],{"class":154}," v ",[84,14545,2352],{"class":129},[84,14547,10012],{"class":154},[84,14549,14550],{"class":86,"line":2395},[84,14551,2746],{"class":154},[84,14553,14554],{"class":86,"line":2401},[84,14555,3578],{"emptyLinePlaceholder":1252},[84,14557,14558,14560,14562],{"class":86,"line":2492},[84,14559,1327],{"class":129},[84,14561,3153],{"class":90},[84,14563,12025],{"class":154},[84,14565,14566],{"class":86,"line":2498},[84,14567,3578],{"emptyLinePlaceholder":1252},[84,14569,14570],{"class":86,"line":2510},[84,14571,14572],{"class":1378},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[84,14574,14575],{"class":86,"line":2793},[84,14576,14577],{"class":1378},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[84,14579,14580,14582,14584,14586,14588,14590],{"class":86,"line":2798},[84,14581,12393],{"class":129},[84,14583,14524],{"class":129},[84,14585,14105],{"class":154},[84,14587,867],{"class":129},[84,14589,994],{"class":94},[84,14591,2471],{"class":154},[84,14593,14594],{"class":86,"line":2804},[84,14595,3578],{"emptyLinePlaceholder":1252},[84,14597,14598,14601],{"class":86,"line":2809},[84,14599,14600],{"class":1378},"    \u002F\u002Fref = 100;",[84,14602,14603],{"class":1378},"  \u002F\u002F加入const后不可以修改变量\n",[84,14605,14606,14608,14610,14612,14614],{"class":86,"line":2823},[84,14607,7701],{"class":154},[84,14609,2352],{"class":129},[84,14611,14105],{"class":154},[84,14613,2352],{"class":129},[84,14615,10012],{"class":154},[84,14617,14618],{"class":86,"line":2828},[84,14619,3578],{"emptyLinePlaceholder":1252},[84,14621,14622],{"class":86,"line":2834},[84,14623,14624],{"class":1378},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[84,14626,14627,14629,14631,14633,14635],{"class":86,"line":2855},[84,14628,3164],{"class":129},[84,14630,12041],{"class":154},[84,14632,867],{"class":129},[84,14634,994],{"class":94},[84,14636,2471],{"class":154},[84,14638,14639,14642],{"class":86,"line":2860},[84,14640,14641],{"class":90},"    showValue",[84,14643,14459],{"class":154},[84,14645,14646],{"class":86,"line":2874},[84,14647,3578],{"emptyLinePlaceholder":1252},[84,14649,14650,14652,14654,14656],{"class":86,"line":2879},[84,14651,3481],{"class":90},[84,14653,155],{"class":154},[84,14655,3486],{"class":158},[84,14657,3897],{"class":154},[84,14659,14660],{"class":86,"line":2908},[84,14661,3578],{"emptyLinePlaceholder":1252},[84,14663,14664,14666,14668],{"class":86,"line":2913},[84,14665,5268],{"class":129},[84,14667,5271],{"class":94},[84,14669,2471],{"class":154},[84,14671,14672],{"class":86,"line":2930},[84,14673,2746],{"class":154},[1222,14675,14676],{},"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":66,"searchDepth":98,"depth":98,"links":14678},[14679,14680,14681,14682,14683,14684],{"id":13212,"depth":98,"text":13213},{"id":13391,"depth":98,"text":13392},{"id":13574,"depth":98,"text":13575},{"id":13977,"depth":98,"text":13978},{"id":14304,"depth":98,"text":14305},{"id":14484,"depth":98,"text":14485},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13204,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14691,"title":14692,"body":14693,"description":66,"extension":1250,"meta":15773,"navigation":1252,"path":15774,"seo":15775,"stem":15776,"__hash__":15777},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14694,"toc":15765},[14695,14698,14702,14705,14710,14941,14943,14954,14958,14961,14969,15073,15076,15080,15083,15087,15090,15095,15117,15123,15450,15453,15457,15465,15762],[10,14696,14692],{"id":14697},"_7函数高级部分",[14,14699,14701],{"id":14700},"_71函数默认参数","7.1函数默认参数",[19,14703,14704],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14706,6358,14707],{},[39,14708,14709],{}," 返回值类型  函数名 （参数= 默认值）{}",[60,14711,14713],{"className":1313,"code":14712,"language":1315,"meta":66,"style":66},"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",[39,14714,14715,14750,14765,14769,14773,14778,14783,14812,14832,14842,14846,14850,14858,14862,14889,14911,14915,14925,14929,14937],{"__ignoreMap":66},[84,14716,14717,14719,14721,14723,14725,14727,14729,14731,14733,14736,14738,14740,14742,14744,14746,14748],{"class":86,"line":87},[84,14718,1327],{"class":129},[84,14720,12557],{"class":90},[84,14722,155],{"class":154},[84,14724,1327],{"class":129},[84,14726,2579],{"class":928},[84,14728,846],{"class":154},[84,14730,1327],{"class":129},[84,14732,4011],{"class":928},[84,14734,14735],{"class":129}," =",[84,14737,994],{"class":94},[84,14739,846],{"class":154},[84,14741,1327],{"class":129},[84,14743,4027],{"class":928},[84,14745,14735],{"class":129},[84,14747,994],{"class":94},[84,14749,13613],{"class":154},[84,14751,14752,14754,14756,14758,14760,14762],{"class":86,"line":98},[84,14753,5268],{"class":129},[84,14755,12041],{"class":154},[84,14757,1790],{"class":129},[84,14759,12054],{"class":154},[84,14761,1790],{"class":129},[84,14763,14764],{"class":154}," c;\n",[84,14766,14767],{"class":86,"line":106},[84,14768,2746],{"class":154},[84,14770,14771],{"class":86,"line":112},[84,14772,3578],{"emptyLinePlaceholder":1252},[84,14774,14775],{"class":86,"line":425},[84,14776,14777],{"class":1378},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[84,14779,14780],{"class":86,"line":2395},[84,14781,14782],{"class":1378},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[84,14784,14785,14787,14790,14792,14794,14796,14798,14800,14802,14804,14806,14808,14810],{"class":86,"line":2401},[84,14786,1327],{"class":129},[84,14788,14789],{"class":90}," func2",[84,14791,155],{"class":154},[84,14793,1327],{"class":129},[84,14795,2579],{"class":928},[84,14797,14735],{"class":129},[84,14799,994],{"class":94},[84,14801,846],{"class":154},[84,14803,1327],{"class":129},[84,14805,4011],{"class":928},[84,14807,14735],{"class":129},[84,14809,994],{"class":94},[84,14811,3897],{"class":154},[84,14813,14814,14816,14818,14820,14822,14824,14826,14828,14830],{"class":86,"line":2492},[84,14815,1327],{"class":129},[84,14817,14789],{"class":90},[84,14819,155],{"class":154},[84,14821,1327],{"class":129},[84,14823,2579],{"class":928},[84,14825,846],{"class":154},[84,14827,1327],{"class":129},[84,14829,4011],{"class":928},[84,14831,13613],{"class":154},[84,14833,14834,14836,14838,14840],{"class":86,"line":2498},[84,14835,5268],{"class":129},[84,14837,12041],{"class":154},[84,14839,1790],{"class":129},[84,14841,13634],{"class":154},[84,14843,14844],{"class":86,"line":2510},[84,14845,2746],{"class":154},[84,14847,14848],{"class":86,"line":2793},[84,14849,3578],{"emptyLinePlaceholder":1252},[84,14851,14852,14854,14856],{"class":86,"line":2798},[84,14853,1327],{"class":129},[84,14855,3153],{"class":90},[84,14857,12025],{"class":154},[84,14859,14860],{"class":86,"line":2804},[84,14861,3578],{"emptyLinePlaceholder":1252},[84,14863,14864,14866,14868,14871,14873,14875,14877,14879,14881,14883,14885,14887],{"class":86,"line":2809},[84,14865,7701],{"class":154},[84,14867,2352],{"class":129},[84,14869,14870],{"class":158}," \"ret = \"",[84,14872,2625],{"class":129},[84,14874,12557],{"class":90},[84,14876,155],{"class":154},[84,14878,2008],{"class":94},[84,14880,846],{"class":154},[84,14882,2008],{"class":94},[84,14884,1154],{"class":154},[84,14886,2352],{"class":129},[84,14888,10012],{"class":154},[84,14890,14891,14893,14895,14897,14899,14901,14903,14905,14907,14909],{"class":86,"line":2823},[84,14892,7701],{"class":154},[84,14894,2352],{"class":129},[84,14896,14870],{"class":158},[84,14898,2625],{"class":129},[84,14900,12557],{"class":90},[84,14902,155],{"class":154},[84,14904,821],{"class":94},[84,14906,1154],{"class":154},[84,14908,2352],{"class":129},[84,14910,10012],{"class":154},[84,14912,14913],{"class":86,"line":2828},[84,14914,3578],{"emptyLinePlaceholder":1252},[84,14916,14917,14919,14921,14923],{"class":86,"line":2834},[84,14918,3481],{"class":90},[84,14920,155],{"class":154},[84,14922,3486],{"class":158},[84,14924,3897],{"class":154},[84,14926,14927],{"class":86,"line":2855},[84,14928,3578],{"emptyLinePlaceholder":1252},[84,14930,14931,14933,14935],{"class":86,"line":2860},[84,14932,5268],{"class":129},[84,14934,5271],{"class":94},[84,14936,2471],{"class":154},[84,14938,14939],{"class":86,"line":2874},[84,14940,2746],{"class":154},[19,14942,12504],{},[26,14944,14945,14948,14951],{},[29,14946,14947],{},"我传就用我；没传就用你",[29,14949,14950],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,14952,14953],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14955,14957],{"id":14956},"_72函数的占位参数","7.2函数的占位参数",[19,14959,14960],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14962,14963,14965,14966],{},[1464,14964,6358],{}," ",[39,14967,14968],{},"返回值类型 函数名 (数据类型){}",[60,14970,14972],{"className":1313,"code":14971,"language":1315,"meta":66,"style":66},"\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",[39,14973,14974,14979,14997,15010,15014,15022,15026,15043,15047,15057,15061,15069],{"__ignoreMap":66},[84,14975,14976],{"class":86,"line":87},[84,14977,14978],{"class":1378},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[84,14980,14981,14983,14985,14987,14989,14991,14993,14995],{"class":86,"line":98},[84,14982,6538],{"class":129},[84,14984,12557],{"class":90},[84,14986,155],{"class":154},[84,14988,1327],{"class":129},[84,14990,2579],{"class":928},[84,14992,846],{"class":154},[84,14994,1327],{"class":129},[84,14996,13613],{"class":154},[84,14998,14999,15001,15003,15006,15008],{"class":86,"line":106},[84,15000,7701],{"class":154},[84,15002,2352],{"class":129},[84,15004,15005],{"class":158}," \"this is func\"",[84,15007,2625],{"class":129},[84,15009,10012],{"class":154},[84,15011,15012],{"class":86,"line":112},[84,15013,2746],{"class":154},[84,15015,15016,15018,15020],{"class":86,"line":425},[84,15017,1327],{"class":129},[84,15019,3153],{"class":90},[84,15021,12025],{"class":154},[84,15023,15024],{"class":86,"line":2395},[84,15025,3578],{"emptyLinePlaceholder":1252},[84,15027,15028,15030,15032,15034,15036,15038,15040],{"class":86,"line":2401},[84,15029,14456],{"class":90},[84,15031,155],{"class":154},[84,15033,1756],{"class":94},[84,15035,1688],{"class":154},[84,15037,1756],{"class":94},[84,15039,7139],{"class":154},[84,15041,15042],{"class":1378}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[84,15044,15045],{"class":86,"line":2492},[84,15046,3578],{"emptyLinePlaceholder":1252},[84,15048,15049,15051,15053,15055],{"class":86,"line":2498},[84,15050,3481],{"class":90},[84,15052,155],{"class":154},[84,15054,3486],{"class":158},[84,15056,3897],{"class":154},[84,15058,15059],{"class":86,"line":2510},[84,15060,3578],{"emptyLinePlaceholder":1252},[84,15062,15063,15065,15067],{"class":86,"line":2793},[84,15064,5268],{"class":129},[84,15066,5271],{"class":94},[84,15068,2471],{"class":154},[84,15070,15071],{"class":86,"line":2798},[84,15072,2746],{"class":154},[19,15074,15075],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15077,15079],{"id":15078},"_73函数重载","7.3函数重载",[19,15081,15082],{},"意思是函数名是可以相同的",[198,15084,15086],{"id":15085},"_731基本语法","7.3.1基本语法",[19,15088,15089],{},"作用：函数名可以相同，提高复用性",[19,15091,15092],{},[1464,15093,15094],{},"函数重载满足条件：",[2315,15096,15097,15100,15103],{},[29,15098,15099],{},"同一个作用域下",[29,15101,15102],{},"函数名称相同",[29,15104,15105,15106,15109,15110,15113,15114],{},"函数参数",[1464,15107,15108],{},"类型不同","  或者 ",[1464,15111,15112],{},"个数不同"," 或者 ",[1464,15115,15116],{},"顺序不同",[19,15118,15119,15122],{},[1464,15120,15121],{},"注意:","  函数的返回值不可以作为函数重载的条件",[60,15124,15126],{"className":11113,"code":15125,"language":11115,"meta":66,"style":66},"\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",[39,15127,15128,15133,15141,15145,15158,15162,15176,15180,15193,15197,15212,15216,15229,15233,15254,15258,15271,15275,15295,15299,15312,15316,15320,15325,15330,15335,15340,15345,15349,15353,15361,15365,15371,15381,15391,15405,15420,15424,15434,15438,15446],{"__ignoreMap":66},[84,15129,15130],{"class":86,"line":87},[84,15131,15132],{"class":1378},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[84,15134,15135,15137,15139],{"class":86,"line":98},[84,15136,6538],{"class":129},[84,15138,12557],{"class":90},[84,15140,183],{"class":154},[84,15142,15143],{"class":86,"line":106},[84,15144,2727],{"class":154},[84,15146,15147,15149,15151,15154,15156],{"class":86,"line":112},[84,15148,7701],{"class":154},[84,15150,2352],{"class":129},[84,15152,15153],{"class":158}," \"func 的调用！\"",[84,15155,2625],{"class":129},[84,15157,10012],{"class":154},[84,15159,15160],{"class":86,"line":425},[84,15161,2746],{"class":154},[84,15163,15164,15166,15168,15170,15172,15174],{"class":86,"line":2395},[84,15165,6538],{"class":129},[84,15167,12557],{"class":90},[84,15169,155],{"class":154},[84,15171,1327],{"class":129},[84,15173,2579],{"class":928},[84,15175,162],{"class":154},[84,15177,15178],{"class":86,"line":2401},[84,15179,2727],{"class":154},[84,15181,15182,15184,15186,15189,15191],{"class":86,"line":2492},[84,15183,7701],{"class":154},[84,15185,2352],{"class":129},[84,15187,15188],{"class":158}," \"func (int a) 的调用！\"",[84,15190,2625],{"class":129},[84,15192,10012],{"class":154},[84,15194,15195],{"class":86,"line":2498},[84,15196,2746],{"class":154},[84,15198,15199,15201,15203,15205,15208,15210],{"class":86,"line":2510},[84,15200,6538],{"class":129},[84,15202,12557],{"class":90},[84,15204,155],{"class":154},[84,15206,15207],{"class":129},"double",[84,15209,2579],{"class":928},[84,15211,162],{"class":154},[84,15213,15214],{"class":86,"line":2793},[84,15215,2727],{"class":154},[84,15217,15218,15220,15222,15225,15227],{"class":86,"line":2798},[84,15219,7701],{"class":154},[84,15221,2352],{"class":129},[84,15223,15224],{"class":158}," \"func (double a)的调用！\"",[84,15226,2625],{"class":129},[84,15228,10012],{"class":154},[84,15230,15231],{"class":86,"line":2804},[84,15232,2746],{"class":154},[84,15234,15235,15237,15239,15241,15243,15245,15248,15250,15252],{"class":86,"line":2809},[84,15236,6538],{"class":129},[84,15238,12557],{"class":90},[84,15240,155],{"class":154},[84,15242,1327],{"class":129},[84,15244,2579],{"class":928},[84,15246,15247],{"class":154}," ,",[84,15249,15207],{"class":129},[84,15251,4011],{"class":928},[84,15253,162],{"class":154},[84,15255,15256],{"class":86,"line":2823},[84,15257,2727],{"class":154},[84,15259,15260,15262,15264,15267,15269],{"class":86,"line":2828},[84,15261,7701],{"class":154},[84,15263,2352],{"class":129},[84,15265,15266],{"class":158}," \"func (int a ,double b) 的调用！\"",[84,15268,2625],{"class":129},[84,15270,10012],{"class":154},[84,15272,15273],{"class":86,"line":2834},[84,15274,2746],{"class":154},[84,15276,15277,15279,15281,15283,15285,15287,15289,15291,15293],{"class":86,"line":2855},[84,15278,6538],{"class":129},[84,15280,12557],{"class":90},[84,15282,155],{"class":154},[84,15284,15207],{"class":129},[84,15286,2579],{"class":928},[84,15288,15247],{"class":154},[84,15290,1327],{"class":129},[84,15292,4011],{"class":928},[84,15294,162],{"class":154},[84,15296,15297],{"class":86,"line":2860},[84,15298,2727],{"class":154},[84,15300,15301,15303,15305,15308,15310],{"class":86,"line":2874},[84,15302,7701],{"class":154},[84,15304,2352],{"class":129},[84,15306,15307],{"class":158}," \"func (double a ,int b)的调用！\"",[84,15309,2625],{"class":129},[84,15311,10012],{"class":154},[84,15313,15314],{"class":86,"line":2879},[84,15315,2746],{"class":154},[84,15317,15318],{"class":86,"line":2908},[84,15319,3578],{"emptyLinePlaceholder":1252},[84,15321,15322],{"class":86,"line":2913},[84,15323,15324],{"class":1378},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[84,15326,15327],{"class":86,"line":2930},[84,15328,15329],{"class":1378},"\u002F\u002Fint func(double a, int b)\n",[84,15331,15332],{"class":86,"line":2935},[84,15333,15334],{"class":1378},"\u002F\u002F{\n",[84,15336,15337],{"class":86,"line":2940},[84,15338,15339],{"class":1378},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[84,15341,15342],{"class":86,"line":2945},[84,15343,15344],{"class":1378},"\u002F\u002F}\n",[84,15346,15347],{"class":86,"line":2959},[84,15348,3578],{"emptyLinePlaceholder":1252},[84,15350,15351],{"class":86,"line":2964},[84,15352,3578],{"emptyLinePlaceholder":1252},[84,15354,15355,15357,15359],{"class":86,"line":3755},[84,15356,1327],{"class":129},[84,15358,3153],{"class":90},[84,15360,12025],{"class":154},[84,15362,15363],{"class":86,"line":3769},[84,15364,3578],{"emptyLinePlaceholder":1252},[84,15366,15367,15369],{"class":86,"line":3777},[84,15368,14456],{"class":90},[84,15370,6810],{"class":154},[84,15372,15373,15375,15377,15379],{"class":86,"line":3782},[84,15374,14456],{"class":90},[84,15376,155],{"class":154},[84,15378,1756],{"class":94},[84,15380,3897],{"class":154},[84,15382,15383,15385,15387,15389],{"class":86,"line":3788},[84,15384,14456],{"class":90},[84,15386,155],{"class":154},[84,15388,832],{"class":94},[84,15390,3897],{"class":154},[84,15392,15393,15395,15397,15399,15401,15403],{"class":86,"line":3794},[84,15394,14456],{"class":90},[84,15396,155],{"class":154},[84,15398,1756],{"class":94},[84,15400,1688],{"class":154},[84,15402,832],{"class":94},[84,15404,3897],{"class":154},[84,15406,15407,15409,15411,15413,15416,15418],{"class":86,"line":3799},[84,15408,14456],{"class":90},[84,15410,155],{"class":154},[84,15412,832],{"class":94},[84,15414,15415],{"class":154}," , ",[84,15417,1756],{"class":94},[84,15419,3897],{"class":154},[84,15421,15422],{"class":86,"line":9120},[84,15423,14381],{"class":154},[84,15425,15426,15428,15430,15432],{"class":86,"line":9144},[84,15427,3481],{"class":90},[84,15429,155],{"class":154},[84,15431,3486],{"class":158},[84,15433,3897],{"class":154},[84,15435,15436],{"class":86,"line":9149},[84,15437,3578],{"emptyLinePlaceholder":1252},[84,15439,15440,15442,15444],{"class":86,"line":9155},[84,15441,5268],{"class":129},[84,15443,5271],{"class":94},[84,15445,2471],{"class":154},[84,15447,15448],{"class":86,"line":9182},[84,15449,2746],{"class":154},[19,15451,15452],{},"重点：函数返回值不可以作为函数重载条件！",[198,15454,15456],{"id":15455},"_732注意事项","7.3.2注意事项",[2315,15458,15459,15462],{},[29,15460,15461],{},"引用作为重载条件!!!",[29,15463,15464],{},"函数重载碰到函数默认参数",[60,15466,15468],{"className":1313,"code":15467,"language":1315,"meta":66,"style":66},"\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",[39,15469,15470,15475,15480,15484,15500,15504,15517,15521,15525,15543,15547,15560,15564,15568,15572,15577,15581,15605,15609,15622,15626,15630,15644,15648,15661,15665,15669,15677,15681,15693,15703,15716,15720,15724,15732,15736,15746,15750,15758],{"__ignoreMap":66},[84,15471,15472],{"class":86,"line":87},[84,15473,15474],{"class":1378},"\u002F\u002F函数重载注意事项\n",[84,15476,15477],{"class":86,"line":98},[84,15478,15479],{"class":1378},"\u002F\u002F1、引用作为重载条件\n",[84,15481,15482],{"class":86,"line":106},[84,15483,3578],{"emptyLinePlaceholder":1252},[84,15485,15486,15488,15490,15492,15494,15496,15498],{"class":86,"line":112},[84,15487,6538],{"class":129},[84,15489,12557],{"class":90},[84,15491,155],{"class":154},[84,15493,1327],{"class":129},[84,15495,11756],{"class":129},[84,15497,208],{"class":928},[84,15499,162],{"class":154},[84,15501,15502],{"class":86,"line":425},[84,15503,2727],{"class":154},[84,15505,15506,15508,15510,15513,15515],{"class":86,"line":2395},[84,15507,7701],{"class":154},[84,15509,2352],{"class":129},[84,15511,15512],{"class":158}," \"func (int &a) 调用 \"",[84,15514,2625],{"class":129},[84,15516,10012],{"class":154},[84,15518,15519],{"class":86,"line":2401},[84,15520,2746],{"class":154},[84,15522,15523],{"class":86,"line":2492},[84,15524,3578],{"emptyLinePlaceholder":1252},[84,15526,15527,15529,15531,15533,15535,15537,15539,15541],{"class":86,"line":2498},[84,15528,6538],{"class":129},[84,15530,12557],{"class":90},[84,15532,155],{"class":154},[84,15534,7964],{"class":129},[84,15536,3560],{"class":129},[84,15538,11756],{"class":129},[84,15540,208],{"class":928},[84,15542,162],{"class":154},[84,15544,15545],{"class":86,"line":2510},[84,15546,2727],{"class":154},[84,15548,15549,15551,15553,15556,15558],{"class":86,"line":2793},[84,15550,7701],{"class":154},[84,15552,2352],{"class":129},[84,15554,15555],{"class":158}," \"func (const int &a) 调用 \"",[84,15557,2625],{"class":129},[84,15559,10012],{"class":154},[84,15561,15562],{"class":86,"line":2798},[84,15563,2746],{"class":154},[84,15565,15566],{"class":86,"line":2804},[84,15567,3578],{"emptyLinePlaceholder":1252},[84,15569,15570],{"class":86,"line":2809},[84,15571,3578],{"emptyLinePlaceholder":1252},[84,15573,15574],{"class":86,"line":2823},[84,15575,15576],{"class":1378},"\u002F\u002F2、函数重载碰到函数默认参数\n",[84,15578,15579],{"class":86,"line":2828},[84,15580,3578],{"emptyLinePlaceholder":1252},[84,15582,15583,15585,15587,15589,15591,15593,15595,15597,15599,15601,15603],{"class":86,"line":2834},[84,15584,6538],{"class":129},[84,15586,14789],{"class":90},[84,15588,155],{"class":154},[84,15590,1327],{"class":129},[84,15592,2579],{"class":928},[84,15594,846],{"class":154},[84,15596,1327],{"class":129},[84,15598,4011],{"class":928},[84,15600,14735],{"class":129},[84,15602,994],{"class":94},[84,15604,162],{"class":154},[84,15606,15607],{"class":86,"line":2855},[84,15608,2727],{"class":154},[84,15610,15611,15613,15615,15618,15620],{"class":86,"line":2860},[84,15612,7701],{"class":154},[84,15614,2352],{"class":129},[84,15616,15617],{"class":158}," \"func2(int a, int b = 10) 调用\"",[84,15619,2625],{"class":129},[84,15621,10012],{"class":154},[84,15623,15624],{"class":86,"line":2874},[84,15625,2746],{"class":154},[84,15627,15628],{"class":86,"line":2879},[84,15629,3578],{"emptyLinePlaceholder":1252},[84,15631,15632,15634,15636,15638,15640,15642],{"class":86,"line":2908},[84,15633,6538],{"class":129},[84,15635,14789],{"class":90},[84,15637,155],{"class":154},[84,15639,1327],{"class":129},[84,15641,2579],{"class":928},[84,15643,162],{"class":154},[84,15645,15646],{"class":86,"line":2913},[84,15647,2727],{"class":154},[84,15649,15650,15652,15654,15657,15659],{"class":86,"line":2930},[84,15651,7701],{"class":154},[84,15653,2352],{"class":129},[84,15655,15656],{"class":158}," \"func2(int a) 调用\"",[84,15658,2625],{"class":129},[84,15660,10012],{"class":154},[84,15662,15663],{"class":86,"line":2935},[84,15664,2746],{"class":154},[84,15666,15667],{"class":86,"line":2940},[84,15668,3578],{"emptyLinePlaceholder":1252},[84,15670,15671,15673,15675],{"class":86,"line":2945},[84,15672,1327],{"class":129},[84,15674,3153],{"class":90},[84,15676,12025],{"class":154},[84,15678,15679],{"class":86,"line":2959},[84,15680,14381],{"class":154},[84,15682,15683,15685,15687,15689,15691],{"class":86,"line":2964},[84,15684,3164],{"class":129},[84,15686,12041],{"class":154},[84,15688,867],{"class":129},[84,15690,994],{"class":94},[84,15692,2471],{"class":154},[84,15694,15695,15697,15700],{"class":86,"line":3755},[84,15696,14456],{"class":90},[84,15698,15699],{"class":154},"(a);",[84,15701,15702],{"class":1378}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[84,15704,15705,15707,15709,15711,15713],{"class":86,"line":3769},[84,15706,14456],{"class":90},[84,15708,155],{"class":154},[84,15710,1756],{"class":94},[84,15712,7139],{"class":154},[84,15714,15715],{"class":1378},"\u002F\u002F调用有const   10是个常量\n",[84,15717,15718],{"class":86,"line":3777},[84,15719,3578],{"emptyLinePlaceholder":1252},[84,15721,15722],{"class":86,"line":3782},[84,15723,3578],{"emptyLinePlaceholder":1252},[84,15725,15726,15729],{"class":86,"line":3788},[84,15727,15728],{"class":1378},"    \u002F\u002Ffunc2(10);",[84,15730,15731],{"class":1378}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[84,15733,15734],{"class":86,"line":3794},[84,15735,3578],{"emptyLinePlaceholder":1252},[84,15737,15738,15740,15742,15744],{"class":86,"line":3799},[84,15739,3481],{"class":90},[84,15741,155],{"class":154},[84,15743,3486],{"class":158},[84,15745,3897],{"class":154},[84,15747,15748],{"class":86,"line":9120},[84,15749,3578],{"emptyLinePlaceholder":1252},[84,15751,15752,15754,15756],{"class":86,"line":9144},[84,15753,5268],{"class":129},[84,15755,5271],{"class":94},[84,15757,2471],{"class":154},[84,15759,15760],{"class":86,"line":9149},[84,15761,2746],{"class":154},[1222,15763,15764],{},"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":66,"searchDepth":98,"depth":98,"links":15766},[15767,15768,15769],{"id":14700,"depth":98,"text":14701},{"id":14956,"depth":98,"text":14957},{"id":15078,"depth":98,"text":15079,"children":15770},[15771,15772],{"id":15085,"depth":106,"text":15086},{"id":15455,"depth":106,"text":15456},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14692,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15779,"title":15780,"body":15781,"description":24535,"extension":1250,"meta":24536,"navigation":1252,"path":24537,"seo":24538,"stem":24539,"__hash__":24540},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15782,"toc":24516},[15783,15786,15792,15799,15804,15807,15810,15813,15817,15821,15824,15827,15835,15840,15843,15850,15855,16014,16017,16270,16273,16276,16279,16284,16287,16290,16301,16306,16542,16546,16556,16559,16567,16714,16718,16721,16724,16728,17173,17177,17185,17193,18105,18112,18117,18745,18748,18751,18754,18873,18876,18963,18966,19092,19095,19189,19192,19545,19549,19557,19561,19568,19571,19574,19585,19591,19596,19608,19616,19636,19644,19661,19847,19850,19854,19857,19860,19863,19866,19869,19872,19875,20335,20341,20345,20348,20359,20946,20949,21438,21442,21445,21448,21451,21454,21457,21465,21861,21865,21868,21871,22318,22321,22324,22329,22332,22337,22340,22344,22347,22349,22355,22358,22664,22674,22715,22719,22722,22724,22757,22760,23067,23069,23084,23087,23110,23119,23125,23128,23132,23135,23138,23143,23154,23159,23167,23172,23302,23305,23308,23483,23488,23700,23704,23707,23821,23826,24065,24069,24073,24076,24079,24084,24189,24192,24195,24198,24202,24313,24316,24319,24324,24376,24379,24382,24387,24433,24436,24441,24509,24511,24514],[10,15784,15780],{"id":15785},"_8类和对象",[19,15787,15788,15789],{},"C++面向对象的三大特性为",[1464,15790,15791],{},"封装、继承、多态",[19,15793,15794,15795,15798],{},"C++认为",[1464,15796,15797],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15800,15801],{},[1464,15802,15803],{},"例如：",[19,15805,15806],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15808,15809],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15811,15812],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15814,15816],{"id":15815},"_81封装","8.1封装",[198,15818,15820],{"id":15819},"_811封装的意义","8.1.1封装的意义",[19,15822,15823],{},"封装是C++面向对象三大特性之一",[19,15825,15826],{},"封装的意义：",[2315,15828,15829,15832],{},[29,15830,15831],{},"将属性和行为作为一个整体，表现生活中的事物",[29,15833,15834],{},"将属性和行为加以权限控制",[19,15836,15837],{},[1464,15838,15839],{},"封装意义一：",[19,15841,15842],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15844,15845,14965,15847],{},[1464,15846,6358],{},[39,15848,15849],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,15851,15852],{},[29,15853,15854],{},"**示例1：**设计一个圆类，求圆的周长",[60,15856,15858],{"className":1313,"code":15857,"language":1315,"meta":66,"style":66},"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",[39,15859,15860,15868,15872,15877,15882,15887,15892,15899,15904,15914,15918,15936,15940,15944,15952,15956,15961,15966,15971,15976,15987,16010],{"__ignoreMap":66},[84,15861,15862,15865],{"class":86,"line":87},[84,15863,15864],{"class":129},"class",[84,15866,15867],{"class":90}," Circle\n",[84,15869,15870],{"class":86,"line":98},[84,15871,2727],{"class":154},[84,15873,15874],{"class":86,"line":106},[84,15875,15876],{"class":1378},"    \u002F\u002F访问权限\n",[84,15878,15879],{"class":86,"line":112},[84,15880,15881],{"class":1378},"    \u002F\u002F公共权限\n",[84,15883,15884],{"class":86,"line":425},[84,15885,15886],{"class":129},"public:\n",[84,15888,15889],{"class":86,"line":2395},[84,15890,15891],{"class":1378},"    \u002F\u002F属性\n",[84,15893,15894,15896],{"class":86,"line":2401},[84,15895,3164],{"class":129},[84,15897,15898],{"class":154}," m_r;\n",[84,15900,15901],{"class":86,"line":2492},[84,15902,15903],{"class":1378},"    \u002F\u002F行为\n",[84,15905,15906,15909,15912],{"class":86,"line":2498},[84,15907,15908],{"class":129},"    double",[84,15910,15911],{"class":90}," calculateZC",[84,15913,183],{"class":154},[84,15915,15916],{"class":86,"line":2510},[84,15917,3209],{"class":154},[84,15919,15920,15923,15926,15928,15931,15933],{"class":86,"line":2793},[84,15921,15922],{"class":129},"        return",[84,15924,15925],{"class":94}," 2",[84,15927,1043],{"class":129},[84,15929,15930],{"class":154},"PI",[84,15932,1043],{"class":129},[84,15934,15935],{"class":154},"m_r;\n",[84,15937,15938],{"class":86,"line":2798},[84,15939,3365],{"class":154},[84,15941,15942],{"class":86,"line":2804},[84,15943,5173],{"class":154},[84,15945,15946,15948,15950],{"class":86,"line":2809},[84,15947,1327],{"class":129},[84,15949,3153],{"class":90},[84,15951,183],{"class":154},[84,15953,15954],{"class":86,"line":2823},[84,15955,2727],{"class":154},[84,15957,15958],{"class":86,"line":2828},[84,15959,15960],{"class":1378},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[84,15962,15963],{"class":86,"line":2834},[84,15964,15965],{"class":1378},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[84,15967,15968],{"class":86,"line":2855},[84,15969,15970],{"class":154},"    Circle c1;\n",[84,15972,15973],{"class":86,"line":2860},[84,15974,15975],{"class":1378},"    \u002F\u002F给圆对象 的属性进行赋值\n",[84,15977,15978,15981,15983,15985],{"class":86,"line":2874},[84,15979,15980],{"class":154},"    c1.m_r",[84,15982,867],{"class":129},[84,15984,1756],{"class":94},[84,15986,2471],{"class":154},[84,15988,15989,15991,15993,15996,15998,16001,16004,16006,16008],{"class":86,"line":2879},[84,15990,2732],{"class":154},[84,15992,2352],{"class":129},[84,15994,15995],{"class":158},"\"圆的周长\"",[84,15997,2352],{"class":129},[84,15999,16000],{"class":154},"c1.",[84,16002,16003],{"class":90},"calculateZC",[84,16005,3605],{"class":154},[84,16007,2352],{"class":129},[84,16009,2374],{"class":154},[84,16011,16012],{"class":86,"line":2908},[84,16013,2746],{"class":154},[19,16015,16016],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[60,16018,16020],{"className":1313,"code":16019,"language":1315,"meta":66,"style":66},"#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",[39,16021,16022,16028,16038,16044,16050,16054,16058,16063,16070,16075,16093,16097,16107,16111,16116,16132,16136,16146,16150,16155,16163,16167,16199,16203,16207,16215,16219,16224,16229,16243,16257,16266],{"__ignoreMap":66},[84,16023,16024,16026],{"class":86,"line":87},[84,16025,3130],{"class":129},[84,16027,3133],{"class":158},[84,16029,16030,16032,16034,16036],{"class":86,"line":98},[84,16031,3138],{"class":129},[84,16033,3141],{"class":129},[84,16035,3144],{"class":90},[84,16037,2471],{"class":154},[84,16039,16040,16042],{"class":86,"line":106},[84,16041,3130],{"class":129},[84,16043,8921],{"class":158},[84,16045,16046,16048],{"class":86,"line":112},[84,16047,15864],{"class":129},[84,16049,8934],{"class":90},[84,16051,16052],{"class":86,"line":425},[84,16053,2727],{"class":154},[84,16055,16056],{"class":86,"line":2395},[84,16057,15886],{"class":129},[84,16059,16060],{"class":86,"line":2401},[84,16061,16062],{"class":154},"    string m_name;\n",[84,16064,16065,16067],{"class":86,"line":2492},[84,16066,3164],{"class":129},[84,16068,16069],{"class":154}," m_id;\n",[84,16071,16072],{"class":86,"line":2498},[84,16073,16074],{"class":1378},"    \u002F\u002F赋值姓名\n",[84,16076,16077,16080,16083,16085,16088,16091],{"class":86,"line":2510},[84,16078,16079],{"class":129},"    void",[84,16081,16082],{"class":90}," setName",[84,16084,155],{"class":154},[84,16086,16087],{"class":90},"string",[84,16089,16090],{"class":928}," name",[84,16092,162],{"class":154},[84,16094,16095],{"class":86,"line":2793},[84,16096,3209],{"class":154},[84,16098,16099,16102,16104],{"class":86,"line":2798},[84,16100,16101],{"class":154},"        m_name",[84,16103,867],{"class":129},[84,16105,16106],{"class":154},"name;\n",[84,16108,16109],{"class":86,"line":2804},[84,16110,3365],{"class":154},[84,16112,16113],{"class":86,"line":2809},[84,16114,16115],{"class":1378},"    \u002F\u002F赋值学号\n",[84,16117,16118,16120,16123,16125,16127,16130],{"class":86,"line":2823},[84,16119,16079],{"class":129},[84,16121,16122],{"class":90}," setId",[84,16124,155],{"class":154},[84,16126,1327],{"class":129},[84,16128,16129],{"class":928}," id",[84,16131,162],{"class":154},[84,16133,16134],{"class":86,"line":2828},[84,16135,3209],{"class":154},[84,16137,16138,16141,16143],{"class":86,"line":2834},[84,16139,16140],{"class":154},"        m_id",[84,16142,867],{"class":129},[84,16144,16145],{"class":154},"id;\n",[84,16147,16148],{"class":86,"line":2855},[84,16149,3365],{"class":154},[84,16151,16152],{"class":86,"line":2860},[84,16153,16154],{"class":1378},"    \u002F\u002F打印学生信息\n",[84,16156,16157,16159,16161],{"class":86,"line":2874},[84,16158,16079],{"class":129},[84,16160,10787],{"class":90},[84,16162,183],{"class":154},[84,16164,16165],{"class":86,"line":2879},[84,16166,3209],{"class":154},[84,16168,16169,16171,16173,16176,16178,16181,16183,16185,16187,16190,16192,16195,16197],{"class":86,"line":2908},[84,16170,4629],{"class":154},[84,16172,2352],{"class":129},[84,16174,16175],{"class":158},"\"姓名：\"",[84,16177,2352],{"class":129},[84,16179,16180],{"class":154},"m_name",[84,16182,2352],{"class":129},[84,16184,962],{"class":158},[84,16186,2352],{"class":129},[84,16188,16189],{"class":158},"\"学号：\"",[84,16191,2352],{"class":129},[84,16193,16194],{"class":154},"m_id",[84,16196,2352],{"class":129},[84,16198,2374],{"class":154},[84,16200,16201],{"class":86,"line":2913},[84,16202,3365],{"class":154},[84,16204,16205],{"class":86,"line":2930},[84,16206,5173],{"class":154},[84,16208,16209,16211,16213],{"class":86,"line":2935},[84,16210,1327],{"class":129},[84,16212,3153],{"class":90},[84,16214,183],{"class":154},[84,16216,16217],{"class":86,"line":2940},[84,16218,2727],{"class":154},[84,16220,16221],{"class":86,"line":2945},[84,16222,16223],{"class":1378},"    \u002F\u002F实例化\n",[84,16225,16226],{"class":86,"line":2959},[84,16227,16228],{"class":154},"    Student s1;\n",[84,16230,16231,16234,16237,16239,16241],{"class":86,"line":2964},[84,16232,16233],{"class":154},"    s1.",[84,16235,16236],{"class":90},"setName",[84,16238,155],{"class":154},[84,16240,9088],{"class":158},[84,16242,3897],{"class":154},[84,16244,16245,16247,16250,16252,16255],{"class":86,"line":3755},[84,16246,16233],{"class":154},[84,16248,16249],{"class":90},"setId",[84,16251,155],{"class":154},[84,16253,16254],{"class":94},"123456",[84,16256,3897],{"class":154},[84,16258,16259,16261,16264],{"class":86,"line":3769},[84,16260,16233],{"class":154},[84,16262,16263],{"class":90},"printInfo",[84,16265,6810],{"class":154},[84,16267,16268],{"class":86,"line":3777},[84,16269,2746],{"class":154},[19,16271,16272],{},"类中的属性和行为统称为成员",[19,16274,16275],{},"属性：成员属性(成员变量)",[19,16277,16278],{},"方法：成员函数(成员方法)",[19,16280,16281],{},[1464,16282,16283],{},"封装意义二：",[19,16285,16286],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16288,16289],{},"访问权限有三种：",[26,16291,16292,16295,16298],{},[29,16293,16294],{},"public        公共权限",[29,16296,16297],{},"protected 保护权限",[29,16299,16300],{},"private      私有权限",[19,16302,16303],{},[1464,16304,16305],{},"示例：",[60,16307,16309],{"className":11113,"code":16308,"language":11115,"meta":66,"style":66},"\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",[39,16310,16311,16316,16321,16326,16331,16335,16342,16346,16351,16355,16360,16364,16369,16374,16379,16383,16388,16393,16400,16404,16408,16416,16420,16431,16443,16455,16459,16463,16467,16475,16479,16484,16496,16504,16512,16516,16526,16530,16538],{"__ignoreMap":66},[84,16312,16313],{"class":86,"line":87},[84,16314,16315],{"class":1378},"\u002F\u002F三种权限\n",[84,16317,16318],{"class":86,"line":98},[84,16319,16320],{"class":1378},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[84,16322,16323],{"class":86,"line":106},[84,16324,16325],{"class":1378},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[84,16327,16328],{"class":86,"line":112},[84,16329,16330],{"class":1378},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[84,16332,16333],{"class":86,"line":425},[84,16334,3578],{"emptyLinePlaceholder":1252},[84,16336,16337,16339],{"class":86,"line":2395},[84,16338,15864],{"class":129},[84,16340,16341],{"class":90}," Person\n",[84,16343,16344],{"class":86,"line":2401},[84,16345,2727],{"class":154},[84,16347,16348],{"class":86,"line":2492},[84,16349,16350],{"class":1378},"    \u002F\u002F姓名  公共权限\n",[84,16352,16353],{"class":86,"line":2498},[84,16354,15886],{"class":129},[84,16356,16357],{"class":86,"line":2510},[84,16358,16359],{"class":154},"    string m_Name;\n",[84,16361,16362],{"class":86,"line":2793},[84,16363,3578],{"emptyLinePlaceholder":1252},[84,16365,16366],{"class":86,"line":2798},[84,16367,16368],{"class":1378},"    \u002F\u002F汽车  保护权限\n",[84,16370,16371],{"class":86,"line":2804},[84,16372,16373],{"class":129},"protected:\n",[84,16375,16376],{"class":86,"line":2809},[84,16377,16378],{"class":154},"    string m_Car;\n",[84,16380,16381],{"class":86,"line":2823},[84,16382,3578],{"emptyLinePlaceholder":1252},[84,16384,16385],{"class":86,"line":2828},[84,16386,16387],{"class":1378},"    \u002F\u002F银行卡密码  私有权限\n",[84,16389,16390],{"class":86,"line":2834},[84,16391,16392],{"class":129},"private:\n",[84,16394,16395,16397],{"class":86,"line":2855},[84,16396,3164],{"class":129},[84,16398,16399],{"class":154}," m_Password;\n",[84,16401,16402],{"class":86,"line":2860},[84,16403,3578],{"emptyLinePlaceholder":1252},[84,16405,16406],{"class":86,"line":2874},[84,16407,15886],{"class":129},[84,16409,16410,16412,16414],{"class":86,"line":2879},[84,16411,16079],{"class":129},[84,16413,12557],{"class":90},[84,16415,183],{"class":154},[84,16417,16418],{"class":86,"line":2908},[84,16419,3209],{"class":154},[84,16421,16422,16425,16427,16429],{"class":86,"line":2913},[84,16423,16424],{"class":154},"        m_Name ",[84,16426,867],{"class":129},[84,16428,10110],{"class":158},[84,16430,2471],{"class":154},[84,16432,16433,16436,16438,16441],{"class":86,"line":2930},[84,16434,16435],{"class":154},"        m_Car ",[84,16437,867],{"class":129},[84,16439,16440],{"class":158}," \"拖拉机\"",[84,16442,2471],{"class":154},[84,16444,16445,16448,16450,16453],{"class":86,"line":2935},[84,16446,16447],{"class":154},"        m_Password ",[84,16449,867],{"class":129},[84,16451,16452],{"class":94}," 123456",[84,16454,2471],{"class":154},[84,16456,16457],{"class":86,"line":2940},[84,16458,3365],{"class":154},[84,16460,16461],{"class":86,"line":2945},[84,16462,5173],{"class":154},[84,16464,16465],{"class":86,"line":2959},[84,16466,3578],{"emptyLinePlaceholder":1252},[84,16468,16469,16471,16473],{"class":86,"line":2964},[84,16470,1327],{"class":129},[84,16472,3153],{"class":90},[84,16474,12025],{"class":154},[84,16476,16477],{"class":86,"line":3755},[84,16478,3578],{"emptyLinePlaceholder":1252},[84,16480,16481],{"class":86,"line":3769},[84,16482,16483],{"class":154},"    Person p;\n",[84,16485,16486,16489,16491,16494],{"class":86,"line":3777},[84,16487,16488],{"class":154},"    p.m_Name ",[84,16490,867],{"class":129},[84,16492,16493],{"class":158}," \"李四\"",[84,16495,2471],{"class":154},[84,16497,16498,16501],{"class":86,"line":3782},[84,16499,16500],{"class":1378},"    \u002F\u002Fp.m_Car = \"奔驰\";",[84,16502,16503],{"class":1378},"  \u002F\u002F保护权限类外访问不到\n",[84,16505,16506,16509],{"class":86,"line":3788},[84,16507,16508],{"class":1378},"    \u002F\u002Fp.m_Password = 123;",[84,16510,16511],{"class":1378}," \u002F\u002F私有权限类外访问不到\n",[84,16513,16514],{"class":86,"line":3794},[84,16515,3578],{"emptyLinePlaceholder":1252},[84,16517,16518,16520,16522,16524],{"class":86,"line":3799},[84,16519,3481],{"class":90},[84,16521,155],{"class":154},[84,16523,3486],{"class":158},[84,16525,3897],{"class":154},[84,16527,16528],{"class":86,"line":9120},[84,16529,3578],{"emptyLinePlaceholder":1252},[84,16531,16532,16534,16536],{"class":86,"line":9144},[84,16533,5268],{"class":129},[84,16535,5271],{"class":94},[84,16537,2471],{"class":154},[84,16539,16540],{"class":86,"line":9149},[84,16541,2746],{"class":154},[198,16543,16545],{"id":16544},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16547,16548,16549,16552,16553],{},"在C++中 struct和class唯一的",[1464,16550,16551],{},"区别","就在于 ",[1464,16554,16555],{},"默认的访问权限不同",[19,16557,16558],{},"区别：",[2315,16560,16561,16564],{},[29,16562,16563],{},"struct 默认权限为公共",[29,16565,16566],{},"class   默认权限为私有",[60,16568,16570],{"className":11113,"code":16569,"language":11115,"meta":66,"style":66},"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",[39,16571,16572,16579,16583,16593,16597,16601,16608,16612,16622,16626,16630,16638,16642,16647,16661,16665,16670,16684,16688,16698,16702,16710],{"__ignoreMap":66},[84,16573,16574,16576],{"class":86,"line":87},[84,16575,15864],{"class":129},[84,16577,16578],{"class":90}," C1\n",[84,16580,16581],{"class":86,"line":98},[84,16582,2727],{"class":154},[84,16584,16585,16587,16590],{"class":86,"line":106},[84,16586,3164],{"class":129},[84,16588,16589],{"class":154},"  m_A;",[84,16591,16592],{"class":1378}," \u002F\u002F默认是私有权限\n",[84,16594,16595],{"class":86,"line":112},[84,16596,5173],{"class":154},[84,16598,16599],{"class":86,"line":425},[84,16600,3578],{"emptyLinePlaceholder":1252},[84,16602,16603,16605],{"class":86,"line":2395},[84,16604,8931],{"class":129},[84,16606,16607],{"class":90}," C2\n",[84,16609,16610],{"class":86,"line":2401},[84,16611,2727],{"class":154},[84,16613,16614,16616,16619],{"class":86,"line":2492},[84,16615,3164],{"class":129},[84,16617,16618],{"class":154}," m_A;",[84,16620,16621],{"class":1378},"  \u002F\u002F默认是公共权限\n",[84,16623,16624],{"class":86,"line":2498},[84,16625,5173],{"class":154},[84,16627,16628],{"class":86,"line":2510},[84,16629,3578],{"emptyLinePlaceholder":1252},[84,16631,16632,16634,16636],{"class":86,"line":2793},[84,16633,1327],{"class":129},[84,16635,3153],{"class":90},[84,16637,12025],{"class":154},[84,16639,16640],{"class":86,"line":2798},[84,16641,3578],{"emptyLinePlaceholder":1252},[84,16643,16644],{"class":86,"line":2804},[84,16645,16646],{"class":154},"    C1 c1;\n",[84,16648,16649,16652,16654,16656,16658],{"class":86,"line":2809},[84,16650,16651],{"class":154},"    c1.m_A ",[84,16653,867],{"class":129},[84,16655,994],{"class":94},[84,16657,1375],{"class":154},[84,16659,16660],{"class":1378}," \u002F\u002F错误，访问权限是私有\n",[84,16662,16663],{"class":86,"line":2823},[84,16664,3578],{"emptyLinePlaceholder":1252},[84,16666,16667],{"class":86,"line":2828},[84,16668,16669],{"class":154},"    C2 c2;\n",[84,16671,16672,16675,16677,16679,16681],{"class":86,"line":2834},[84,16673,16674],{"class":154},"    c2.m_A ",[84,16676,867],{"class":129},[84,16678,994],{"class":94},[84,16680,1375],{"class":154},[84,16682,16683],{"class":1378}," \u002F\u002F正确，访问权限是公共\n",[84,16685,16686],{"class":86,"line":2855},[84,16687,3578],{"emptyLinePlaceholder":1252},[84,16689,16690,16692,16694,16696],{"class":86,"line":2860},[84,16691,3481],{"class":90},[84,16693,155],{"class":154},[84,16695,3486],{"class":158},[84,16697,3897],{"class":154},[84,16699,16700],{"class":86,"line":2874},[84,16701,3578],{"emptyLinePlaceholder":1252},[84,16703,16704,16706,16708],{"class":86,"line":2879},[84,16705,5268],{"class":129},[84,16707,5271],{"class":94},[84,16709,2471],{"class":154},[84,16711,16712],{"class":86,"line":2908},[84,16713,2746],{"class":154},[198,16715,16717],{"id":16716},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16719,16720],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16722,16723],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16725,16726],{},[1464,16727,16305],{},[60,16729,16731],{"className":11113,"code":16730,"language":11115,"meta":66,"style":66},"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",[39,16732,16733,16743,16747,16751,16756,16770,16779,16783,16793,16797,16804,16808,16812,16816,16821,16830,16837,16841,16846,16862,16885,16898,16905,16909,16918,16922,16926,16931,16947,16957,16961,16965,16969,16977,16981,16991,16995,17003,17007,17011,17019,17023,17027,17032,17045,17068,17072,17077,17090,17112,17116,17121,17135,17143,17147,17157,17161,17169],{"__ignoreMap":66},[84,16734,16735,16737,16740],{"class":86,"line":87},[84,16736,15864],{"class":129},[84,16738,16739],{"class":90}," Person",[84,16741,16742],{"class":154}," {\n",[84,16744,16745],{"class":86,"line":98},[84,16746,15886],{"class":129},[84,16748,16749],{"class":86,"line":106},[84,16750,3578],{"emptyLinePlaceholder":1252},[84,16752,16753],{"class":86,"line":112},[84,16754,16755],{"class":1378},"    \u002F\u002F姓名设置可读可写\n",[84,16757,16758,16760,16762,16764,16766,16768],{"class":86,"line":425},[84,16759,16079],{"class":129},[84,16761,16082],{"class":90},[84,16763,155],{"class":154},[84,16765,16087],{"class":90},[84,16767,16090],{"class":928},[84,16769,13613],{"class":154},[84,16771,16772,16774,16776],{"class":86,"line":2395},[84,16773,16424],{"class":154},[84,16775,867],{"class":129},[84,16777,16778],{"class":154}," name;\n",[84,16780,16781],{"class":86,"line":2401},[84,16782,3365],{"class":154},[84,16784,16785,16788,16791],{"class":86,"line":2492},[84,16786,16787],{"class":90},"    string",[84,16789,16790],{"class":90}," getName",[84,16792,183],{"class":154},[84,16794,16795],{"class":86,"line":2498},[84,16796,3209],{"class":154},[84,16798,16799,16801],{"class":86,"line":2510},[84,16800,15922],{"class":129},[84,16802,16803],{"class":154}," m_Name;\n",[84,16805,16806],{"class":86,"line":2793},[84,16807,3365],{"class":154},[84,16809,16810],{"class":86,"line":2798},[84,16811,3578],{"emptyLinePlaceholder":1252},[84,16813,16814],{"class":86,"line":2804},[84,16815,3578],{"emptyLinePlaceholder":1252},[84,16817,16818],{"class":86,"line":2809},[84,16819,16820],{"class":1378},"    \u002F\u002F获取年龄 \n",[84,16822,16823,16825,16828],{"class":86,"line":2823},[84,16824,3164],{"class":129},[84,16826,16827],{"class":90}," getAge",[84,16829,12025],{"class":154},[84,16831,16832,16834],{"class":86,"line":2828},[84,16833,15922],{"class":129},[84,16835,16836],{"class":154}," m_Age;\n",[84,16838,16839],{"class":86,"line":2834},[84,16840,3365],{"class":154},[84,16842,16843],{"class":86,"line":2855},[84,16844,16845],{"class":1378},"    \u002F\u002F设置年龄\n",[84,16847,16848,16850,16853,16855,16857,16860],{"class":86,"line":2860},[84,16849,16079],{"class":129},[84,16851,16852],{"class":90}," setAge",[84,16854,155],{"class":154},[84,16856,1327],{"class":129},[84,16858,16859],{"class":928}," age",[84,16861,13613],{"class":154},[84,16863,16864,16866,16869,16871,16873,16875,16878,16880,16883],{"class":86,"line":2874},[84,16865,3675],{"class":129},[84,16867,16868],{"class":154}," (age ",[84,16870,2218],{"class":129},[84,16872,5271],{"class":94},[84,16874,4433],{"class":129},[84,16876,16877],{"class":154}," age ",[84,16879,2268],{"class":129},[84,16881,16882],{"class":94}," 150",[84,16884,13613],{"class":154},[84,16886,16887,16889,16891,16894,16896],{"class":86,"line":2879},[84,16888,10891],{"class":154},[84,16890,2352],{"class":129},[84,16892,16893],{"class":158}," \"你个老妖精!\"",[84,16895,2625],{"class":129},[84,16897,10012],{"class":154},[84,16899,16900,16903],{"class":86,"line":2908},[84,16901,16902],{"class":129},"            return",[84,16904,2471],{"class":154},[84,16906,16907],{"class":86,"line":2913},[84,16908,3707],{"class":154},[84,16910,16911,16914,16916],{"class":86,"line":2930},[84,16912,16913],{"class":154},"        m_Age ",[84,16915,867],{"class":129},[84,16917,8969],{"class":154},[84,16919,16920],{"class":86,"line":2935},[84,16921,3365],{"class":154},[84,16923,16924],{"class":86,"line":2940},[84,16925,3578],{"emptyLinePlaceholder":1252},[84,16927,16928],{"class":86,"line":2945},[84,16929,16930],{"class":1378},"    \u002F\u002F情人设置为只写\n",[84,16932,16933,16935,16938,16940,16942,16945],{"class":86,"line":2959},[84,16934,16079],{"class":129},[84,16936,16937],{"class":90}," setLover",[84,16939,155],{"class":154},[84,16941,16087],{"class":90},[84,16943,16944],{"class":928}," lover",[84,16946,13613],{"class":154},[84,16948,16949,16952,16954],{"class":86,"line":2964},[84,16950,16951],{"class":154},"        m_Lover ",[84,16953,867],{"class":129},[84,16955,16956],{"class":154}," lover;\n",[84,16958,16959],{"class":86,"line":3755},[84,16960,3365],{"class":154},[84,16962,16963],{"class":86,"line":3769},[84,16964,3578],{"emptyLinePlaceholder":1252},[84,16966,16967],{"class":86,"line":3777},[84,16968,16392],{"class":129},[84,16970,16971,16974],{"class":86,"line":3782},[84,16972,16973],{"class":154},"    string m_Name;",[84,16975,16976],{"class":1378}," \u002F\u002F可读可写  姓名\n",[84,16978,16979],{"class":86,"line":3788},[84,16980,14381],{"class":154},[84,16982,16983,16985,16988],{"class":86,"line":3794},[84,16984,3164],{"class":129},[84,16986,16987],{"class":154}," m_Age;",[84,16989,16990],{"class":1378}," \u002F\u002F只读  年龄\n",[84,16992,16993],{"class":86,"line":3799},[84,16994,3578],{"emptyLinePlaceholder":1252},[84,16996,16997,17000],{"class":86,"line":9120},[84,16998,16999],{"class":154},"    string m_Lover;",[84,17001,17002],{"class":1378}," \u002F\u002F只写  情人\n",[84,17004,17005],{"class":86,"line":9144},[84,17006,5173],{"class":154},[84,17008,17009],{"class":86,"line":9149},[84,17010,3578],{"emptyLinePlaceholder":1252},[84,17012,17013,17015,17017],{"class":86,"line":9155},[84,17014,1327],{"class":129},[84,17016,3153],{"class":90},[84,17018,12025],{"class":154},[84,17020,17021],{"class":86,"line":9182},[84,17022,3578],{"emptyLinePlaceholder":1252},[84,17024,17025],{"class":86,"line":9187},[84,17026,16483],{"class":154},[84,17028,17029],{"class":86,"line":9193},[84,17030,17031],{"class":1378},"    \u002F\u002F姓名设置\n",[84,17033,17034,17037,17039,17041,17043],{"class":86,"line":9205},[84,17035,17036],{"class":154},"    p.",[84,17038,16236],{"class":90},[84,17040,155],{"class":154},[84,17042,9088],{"class":158},[84,17044,3897],{"class":154},[84,17046,17047,17049,17051,17054,17056,17059,17062,17064,17066],{"class":86,"line":9217},[84,17048,7701],{"class":154},[84,17050,2352],{"class":129},[84,17052,17053],{"class":158}," \"姓名： \"",[84,17055,2625],{"class":129},[84,17057,17058],{"class":154}," p.",[84,17060,17061],{"class":90},"getName",[84,17063,14221],{"class":154},[84,17065,2352],{"class":129},[84,17067,10012],{"class":154},[84,17069,17070],{"class":86,"line":9229},[84,17071,3578],{"emptyLinePlaceholder":1252},[84,17073,17074],{"class":86,"line":10888},[84,17075,17076],{"class":1378},"    \u002F\u002F年龄设置\n",[84,17078,17079,17081,17084,17086,17088],{"class":86,"line":10913},[84,17080,17036],{"class":154},[84,17082,17083],{"class":90},"setAge",[84,17085,155],{"class":154},[84,17087,1964],{"class":94},[84,17089,3897],{"class":154},[84,17091,17092,17094,17096,17099,17101,17103,17106,17108,17110],{"class":86,"line":10936},[84,17093,7701],{"class":154},[84,17095,2352],{"class":129},[84,17097,17098],{"class":158}," \"年龄： \"",[84,17100,2625],{"class":129},[84,17102,17058],{"class":154},[84,17104,17105],{"class":90},"getAge",[84,17107,14221],{"class":154},[84,17109,2352],{"class":129},[84,17111,10012],{"class":154},[84,17113,17114],{"class":86,"line":10960},[84,17115,3578],{"emptyLinePlaceholder":1252},[84,17117,17118],{"class":86,"line":10965},[84,17119,17120],{"class":1378},"    \u002F\u002F情人设置\n",[84,17122,17123,17125,17128,17130,17133],{"class":86,"line":10970},[84,17124,17036],{"class":154},[84,17126,17127],{"class":90},"setLover",[84,17129,155],{"class":154},[84,17131,17132],{"class":158},"\"苍井\"",[84,17134,3897],{"class":154},[84,17136,17137,17140],{"class":86,"line":10975},[84,17138,17139],{"class":1378},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[84,17141,17142],{"class":1378},"  \u002F\u002F只写属性，不可以读取\n",[84,17144,17145],{"class":86,"line":10984},[84,17146,3578],{"emptyLinePlaceholder":1252},[84,17148,17149,17151,17153,17155],{"class":86,"line":10989},[84,17150,3481],{"class":90},[84,17152,155],{"class":154},[84,17154,3486],{"class":158},[84,17156,3897],{"class":154},[84,17158,17159],{"class":86,"line":10995},[84,17160,3578],{"emptyLinePlaceholder":1252},[84,17162,17163,17165,17167],{"class":86,"line":11016},[84,17164,5268],{"class":129},[84,17166,5271],{"class":94},[84,17168,2471],{"class":154},[84,17170,17171],{"class":86,"line":11022},[84,17172,2746],{"class":154},[198,17174,17176],{"id":17175},"_814封装案例","8.1.4封装案例",[26,17178,17179],{},[29,17180,17181,17184],{},[1464,17182,17183],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2315,17186,17187,17190],{},[29,17188,17189],{},"求出立方体的面积和体积",[29,17191,17192],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[60,17194,17196],{"className":1313,"code":17195,"language":1315,"meta":66,"style":66},"#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",[39,17197,17198,17204,17214,17221,17225,17229,17234,17264,17268,17278,17288,17298,17302,17311,17315,17351,17355,17364,17368,17384,17388,17393,17402,17406,17413,17417,17426,17430,17437,17441,17450,17454,17461,17465,17470,17487,17491,17537,17541,17550,17554,17558,17562,17571,17575,17579,17584,17588,17594,17600,17606,17610,17614,17619,17641,17645,17699,17703,17711,17715,17720,17725,17738,17745,17761,17772,17778,17801,17807,17830,17844,17864,17870,17881,17904,17926,17931,17937,17951,17964,17969,17983,17988,17994,17999,18013,18018,18023,18037,18049,18054,18067,18072,18077,18082,18095,18100],{"__ignoreMap":66},[84,17199,17200,17202],{"class":86,"line":87},[84,17201,3130],{"class":129},[84,17203,3133],{"class":158},[84,17205,17206,17208,17210,17212],{"class":86,"line":98},[84,17207,3138],{"class":129},[84,17209,3141],{"class":129},[84,17211,3144],{"class":90},[84,17213,2471],{"class":154},[84,17215,17216,17218],{"class":86,"line":106},[84,17217,15864],{"class":129},[84,17219,17220],{"class":90}," Cube\n",[84,17222,17223],{"class":86,"line":112},[84,17224,2727],{"class":154},[84,17226,17227],{"class":86,"line":425},[84,17228,15886],{"class":129},[84,17230,17231],{"class":86,"line":2395},[84,17232,17233],{"class":1378},"    \u002F\u002F输入长宽高\n",[84,17235,17236,17238,17241,17243,17245,17248,17250,17252,17255,17257,17259,17262],{"class":86,"line":2401},[84,17237,16079],{"class":129},[84,17239,17240],{"class":90}," setLwh",[84,17242,155],{"class":154},[84,17244,1327],{"class":129},[84,17246,17247],{"class":928}," l",[84,17249,1688],{"class":154},[84,17251,1327],{"class":129},[84,17253,17254],{"class":928}," w",[84,17256,1688],{"class":154},[84,17258,1327],{"class":129},[84,17260,17261],{"class":928}," h",[84,17263,162],{"class":154},[84,17265,17266],{"class":86,"line":2492},[84,17267,3209],{"class":154},[84,17269,17270,17273,17275],{"class":86,"line":2498},[84,17271,17272],{"class":154},"        m_L",[84,17274,867],{"class":129},[84,17276,17277],{"class":154},"l;\n",[84,17279,17280,17283,17285],{"class":86,"line":2510},[84,17281,17282],{"class":154},"        m_W",[84,17284,867],{"class":129},[84,17286,17287],{"class":154},"w;\n",[84,17289,17290,17293,17295],{"class":86,"line":2793},[84,17291,17292],{"class":154},"        m_H",[84,17294,867],{"class":129},[84,17296,17297],{"class":154},"h;\n",[84,17299,17300],{"class":86,"line":2798},[84,17301,3365],{"class":154},[84,17303,17304,17306,17309],{"class":86,"line":2804},[84,17305,3164],{"class":129},[84,17307,17308],{"class":90}," mianji",[84,17310,183],{"class":154},[84,17312,17313],{"class":86,"line":2809},[84,17314,3209],{"class":154},[84,17316,17317,17319,17321,17323,17326,17328,17331,17333,17336,17338,17341,17343,17346,17348],{"class":86,"line":2823},[84,17318,15922],{"class":129},[84,17320,15925],{"class":94},[84,17322,1043],{"class":129},[84,17324,17325],{"class":154},"(m_L",[84,17327,1043],{"class":129},[84,17329,17330],{"class":154},"m_W ",[84,17332,1790],{"class":129},[84,17334,17335],{"class":154}," m_L",[84,17337,1043],{"class":129},[84,17339,17340],{"class":154},"m_H ",[84,17342,1790],{"class":129},[84,17344,17345],{"class":154}," m_W",[84,17347,1043],{"class":129},[84,17349,17350],{"class":154},"m_H);\n",[84,17352,17353],{"class":86,"line":2828},[84,17354,3365],{"class":154},[84,17356,17357,17359,17362],{"class":86,"line":2834},[84,17358,3164],{"class":129},[84,17360,17361],{"class":90}," tiji",[84,17363,183],{"class":154},[84,17365,17366],{"class":86,"line":2855},[84,17367,3209],{"class":154},[84,17369,17370,17372,17374,17376,17379,17381],{"class":86,"line":2860},[84,17371,15922],{"class":129},[84,17373,17335],{"class":154},[84,17375,1043],{"class":129},[84,17377,17378],{"class":154},"m_W",[84,17380,1043],{"class":129},[84,17382,17383],{"class":154},"m_H;\n",[84,17385,17386],{"class":86,"line":2874},[84,17387,3365],{"class":154},[84,17389,17390],{"class":86,"line":2879},[84,17391,17392],{"class":1378},"    \u002F\u002F获取长宽高\n",[84,17394,17395,17397,17400],{"class":86,"line":2908},[84,17396,3164],{"class":129},[84,17398,17399],{"class":90}," getLength",[84,17401,183],{"class":154},[84,17403,17404],{"class":86,"line":2913},[84,17405,3209],{"class":154},[84,17407,17408,17410],{"class":86,"line":2930},[84,17409,15922],{"class":129},[84,17411,17412],{"class":154}," m_L;\n",[84,17414,17415],{"class":86,"line":2935},[84,17416,3365],{"class":154},[84,17418,17419,17421,17424],{"class":86,"line":2940},[84,17420,3164],{"class":129},[84,17422,17423],{"class":90}," getWidth",[84,17425,183],{"class":154},[84,17427,17428],{"class":86,"line":2945},[84,17429,3209],{"class":154},[84,17431,17432,17434],{"class":86,"line":2959},[84,17433,15922],{"class":129},[84,17435,17436],{"class":154}," m_W;\n",[84,17438,17439],{"class":86,"line":2964},[84,17440,3365],{"class":154},[84,17442,17443,17445,17448],{"class":86,"line":3755},[84,17444,3164],{"class":129},[84,17446,17447],{"class":90}," getHeight",[84,17449,183],{"class":154},[84,17451,17452],{"class":86,"line":3769},[84,17453,3209],{"class":154},[84,17455,17456,17458],{"class":86,"line":3777},[84,17457,15922],{"class":129},[84,17459,17460],{"class":154}," m_H;\n",[84,17462,17463],{"class":86,"line":3782},[84,17464,3365],{"class":154},[84,17466,17467],{"class":86,"line":3788},[84,17468,17469],{"class":1378},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[84,17471,17472,17475,17478,17480,17483,17485],{"class":86,"line":3794},[84,17473,17474],{"class":129},"    bool",[84,17476,17477],{"class":90}," isEqual",[84,17479,155],{"class":154},[84,17481,17482],{"class":90},"Cube",[84,17484,4027],{"class":928},[84,17486,162],{"class":154},[84,17488,17489],{"class":86,"line":3799},[84,17490,3209],{"class":154},[84,17492,17493,17495,17498,17501,17503,17505,17508,17510,17513,17516,17518,17520,17523,17525,17527,17530,17532,17534],{"class":86,"line":9120},[84,17494,3675],{"class":129},[84,17496,17497],{"class":154}," (c.",[84,17499,17500],{"class":90},"getLength",[84,17502,14221],{"class":154},[84,17504,4127],{"class":129},[84,17506,17507],{"class":154}," m_L ",[84,17509,2896],{"class":129},[84,17511,17512],{"class":154}," c.",[84,17514,17515],{"class":90},"getWidth",[84,17517,14221],{"class":154},[84,17519,4127],{"class":129},[84,17521,17522],{"class":154}," m_W ",[84,17524,2896],{"class":129},[84,17526,17512],{"class":154},[84,17528,17529],{"class":90},"getHeight",[84,17531,14221],{"class":154},[84,17533,4127],{"class":129},[84,17535,17536],{"class":154}," m_H)\n",[84,17538,17539],{"class":86,"line":9144},[84,17540,3688],{"class":154},[84,17542,17543,17545,17548],{"class":86,"line":9149},[84,17544,16902],{"class":129},[84,17546,17547],{"class":94}," true",[84,17549,2471],{"class":154},[84,17551,17552],{"class":86,"line":9155},[84,17553,3707],{"class":154},[84,17555,17556],{"class":86,"line":9182},[84,17557,3748],{"class":129},[84,17559,17560],{"class":86,"line":9187},[84,17561,3688],{"class":154},[84,17563,17564,17566,17569],{"class":86,"line":9193},[84,17565,16902],{"class":129},[84,17567,17568],{"class":94}," false",[84,17570,2471],{"class":154},[84,17572,17573],{"class":86,"line":9205},[84,17574,3707],{"class":154},[84,17576,17577],{"class":86,"line":9217},[84,17578,3365],{"class":154},[84,17580,17581],{"class":86,"line":9229},[84,17582,17583],{"class":1378},"    \u002F\u002F私有属性\n",[84,17585,17586],{"class":86,"line":10888},[84,17587,16392],{"class":129},[84,17589,17590,17592],{"class":86,"line":10913},[84,17591,3164],{"class":129},[84,17593,17412],{"class":154},[84,17595,17596,17598],{"class":86,"line":10936},[84,17597,3164],{"class":129},[84,17599,17436],{"class":154},[84,17601,17602,17604],{"class":86,"line":10960},[84,17603,3164],{"class":129},[84,17605,17460],{"class":154},[84,17607,17608],{"class":86,"line":10965},[84,17609,3578],{"emptyLinePlaceholder":1252},[84,17611,17612],{"class":86,"line":10970},[84,17613,5173],{"class":154},[84,17615,17616],{"class":86,"line":10975},[84,17617,17618],{"class":1378},"\u002F\u002F全局函数判断两个立方体是否相等\n",[84,17620,17621,17623,17625,17627,17629,17632,17634,17636,17639],{"class":86,"line":10984},[84,17622,2535],{"class":129},[84,17624,17477],{"class":90},[84,17626,155],{"class":154},[84,17628,17482],{"class":90},[84,17630,17631],{"class":928}," c1",[84,17633,1688],{"class":154},[84,17635,17482],{"class":90},[84,17637,17638],{"class":928}," c2",[84,17640,162],{"class":154},[84,17642,17643],{"class":86,"line":10989},[84,17644,2727],{"class":154},[84,17646,17647,17649,17652,17654,17656,17658,17661,17663,17666,17668,17670,17672,17674,17676,17678,17680,17682,17684,17686,17688,17690,17692,17694,17696],{"class":86,"line":10995},[84,17648,5268],{"class":129},[84,17650,17651],{"class":154}," (c1.",[84,17653,17500],{"class":90},[84,17655,14221],{"class":154},[84,17657,4127],{"class":129},[84,17659,17660],{"class":154}," c2.",[84,17662,17500],{"class":90},[84,17664,17665],{"class":154},"()) ",[84,17667,2896],{"class":129},[84,17669,17651],{"class":154},[84,17671,17515],{"class":90},[84,17673,14221],{"class":154},[84,17675,4127],{"class":129},[84,17677,17660],{"class":154},[84,17679,17515],{"class":90},[84,17681,17665],{"class":154},[84,17683,2896],{"class":129},[84,17685,17651],{"class":154},[84,17687,17529],{"class":90},[84,17689,14221],{"class":154},[84,17691,4127],{"class":129},[84,17693,17660],{"class":154},[84,17695,17529],{"class":90},[84,17697,17698],{"class":154},"());\n",[84,17700,17701],{"class":86,"line":11016},[84,17702,2746],{"class":154},[84,17704,17705,17707,17709],{"class":86,"line":11022},[84,17706,1327],{"class":129},[84,17708,3153],{"class":90},[84,17710,183],{"class":154},[84,17712,17713],{"class":86,"line":11036},[84,17714,2727],{"class":154},[84,17716,17717],{"class":86,"line":11042},[84,17718,17719],{"class":154},"    Cube c1;\n",[84,17721,17722],{"class":86,"line":11069},[84,17723,17724],{"class":1378},"    \u002F\u002F输入立方体的长宽高\n",[84,17726,17727,17729,17731,17734,17736],{"class":86,"line":11078},[84,17728,2732],{"class":154},[84,17730,2352],{"class":129},[84,17732,17733],{"class":158},"\"请输入第一个立方体的长、宽、高：\"",[84,17735,2352],{"class":129},[84,17737,2374],{"class":154},[84,17739,17740,17742],{"class":86,"line":11084},[84,17741,3164],{"class":129},[84,17743,17744],{"class":154}," l,w,h,l1,w1,h1;\n",[84,17746,17747,17749,17751,17753,17755,17757,17759],{"class":86,"line":11092},[84,17748,3191],{"class":154},[84,17750,2610],{"class":129},[84,17752,1827],{"class":154},[84,17754,2610],{"class":129},[84,17756,2103],{"class":154},[84,17758,2610],{"class":129},[84,17760,17297],{"class":154},[84,17762,17763,17766,17769],{"class":86,"line":11097},[84,17764,17765],{"class":154},"    c1.",[84,17767,17768],{"class":90},"setLwh",[84,17770,17771],{"class":154},"(l,w,h);\n",[84,17773,17775],{"class":86,"line":17774},66,[84,17776,17777],{"class":1378},"    \u002F\u002F面积\n",[84,17779,17781,17783,17785,17788,17790,17792,17795,17797,17799],{"class":86,"line":17780},67,[84,17782,2732],{"class":154},[84,17784,2352],{"class":129},[84,17786,17787],{"class":158},"\"立方体的表面积为：\"",[84,17789,2352],{"class":129},[84,17791,16000],{"class":154},[84,17793,17794],{"class":90},"mianji",[84,17796,3605],{"class":154},[84,17798,2352],{"class":129},[84,17800,2374],{"class":154},[84,17802,17804],{"class":86,"line":17803},68,[84,17805,17806],{"class":1378},"    \u002F\u002F体积\n",[84,17808,17810,17812,17814,17817,17819,17821,17824,17826,17828],{"class":86,"line":17809},69,[84,17811,2732],{"class":154},[84,17813,2352],{"class":129},[84,17815,17816],{"class":158},"\"立方体的体积为：\"",[84,17818,2352],{"class":129},[84,17820,16000],{"class":154},[84,17822,17823],{"class":90},"tiji",[84,17825,3605],{"class":154},[84,17827,2352],{"class":129},[84,17829,2374],{"class":154},[84,17831,17833,17835,17837,17840,17842],{"class":86,"line":17832},70,[84,17834,2732],{"class":154},[84,17836,2352],{"class":129},[84,17838,17839],{"class":158},"\"请输入第二个立方体的长、宽、高：\"",[84,17841,2352],{"class":129},[84,17843,2374],{"class":154},[84,17845,17847,17849,17851,17854,17856,17859,17861],{"class":86,"line":17846},71,[84,17848,3191],{"class":154},[84,17850,2610],{"class":129},[84,17852,17853],{"class":154},"l1",[84,17855,2610],{"class":129},[84,17857,17858],{"class":154},"w1",[84,17860,2610],{"class":129},[84,17862,17863],{"class":154},"h1;\n",[84,17865,17867],{"class":86,"line":17866},72,[84,17868,17869],{"class":154},"    Cube c2;\n",[84,17871,17873,17876,17878],{"class":86,"line":17872},73,[84,17874,17875],{"class":154},"    c2.",[84,17877,17768],{"class":90},[84,17879,17880],{"class":154},"(l1,w1,h1);\n",[84,17882,17884,17886,17888,17891,17893,17896,17898,17900,17902],{"class":86,"line":17883},74,[84,17885,2732],{"class":154},[84,17887,2352],{"class":129},[84,17889,17890],{"class":158},"\"第二个立方体的表面积为：\"",[84,17892,2352],{"class":129},[84,17894,17895],{"class":154},"c2.",[84,17897,17794],{"class":90},[84,17899,3605],{"class":154},[84,17901,2352],{"class":129},[84,17903,2374],{"class":154},[84,17905,17907,17909,17911,17914,17916,17918,17920,17922,17924],{"class":86,"line":17906},75,[84,17908,2732],{"class":154},[84,17910,2352],{"class":129},[84,17912,17913],{"class":158},"\"第二个立方体的体积为：\"",[84,17915,2352],{"class":129},[84,17917,17895],{"class":154},[84,17919,17823],{"class":90},[84,17921,3605],{"class":154},[84,17923,2352],{"class":129},[84,17925,2374],{"class":154},[84,17927,17929],{"class":86,"line":17928},76,[84,17930,3578],{"emptyLinePlaceholder":1252},[84,17932,17934],{"class":86,"line":17933},77,[84,17935,17936],{"class":1378},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[84,17938,17940,17942,17944,17947,17949],{"class":86,"line":17939},78,[84,17941,2732],{"class":154},[84,17943,2352],{"class":129},[84,17945,17946],{"class":158},"\"内部函数判断结果：\"",[84,17948,2352],{"class":129},[84,17950,2374],{"class":154},[84,17952,17954,17956,17958,17961],{"class":86,"line":17953},79,[84,17955,4279],{"class":129},[84,17957,17651],{"class":154},[84,17959,17960],{"class":90},"isEqual",[84,17962,17963],{"class":154},"(c2))\n",[84,17965,17967],{"class":86,"line":17966},80,[84,17968,3209],{"class":154},[84,17970,17972,17974,17976,17979,17981],{"class":86,"line":17971},81,[84,17973,4629],{"class":154},[84,17975,2352],{"class":129},[84,17977,17978],{"class":158},"\"两个立方体相等\"",[84,17980,2352],{"class":129},[84,17982,2374],{"class":154},[84,17984,17986],{"class":86,"line":17985},82,[84,17987,3365],{"class":154},[84,17989,17991],{"class":86,"line":17990},83,[84,17992,17993],{"class":129},"    else\n",[84,17995,17997],{"class":86,"line":17996},84,[84,17998,3209],{"class":154},[84,18000,18002,18004,18006,18009,18011],{"class":86,"line":18001},85,[84,18003,4629],{"class":154},[84,18005,2352],{"class":129},[84,18007,18008],{"class":158},"\"两个立方体不相等\"",[84,18010,2352],{"class":129},[84,18012,2374],{"class":154},[84,18014,18016],{"class":86,"line":18015},86,[84,18017,3365],{"class":154},[84,18019,18021],{"class":86,"line":18020},87,[84,18022,3578],{"emptyLinePlaceholder":1252},[84,18024,18026,18028,18030,18033,18035],{"class":86,"line":18025},88,[84,18027,2732],{"class":154},[84,18029,2352],{"class":129},[84,18031,18032],{"class":158},"\"全局函数判断结果：\"",[84,18034,2352],{"class":129},[84,18036,2374],{"class":154},[84,18038,18040,18042,18044,18046],{"class":86,"line":18039},89,[84,18041,4279],{"class":129},[84,18043,2839],{"class":154},[84,18045,17960],{"class":90},[84,18047,18048],{"class":154},"(c1, c2))\n",[84,18050,18052],{"class":86,"line":18051},90,[84,18053,3209],{"class":154},[84,18055,18057,18059,18061,18063,18065],{"class":86,"line":18056},91,[84,18058,4629],{"class":154},[84,18060,2352],{"class":129},[84,18062,17978],{"class":158},[84,18064,2352],{"class":129},[84,18066,2374],{"class":154},[84,18068,18070],{"class":86,"line":18069},92,[84,18071,3365],{"class":154},[84,18073,18075],{"class":86,"line":18074},93,[84,18076,17993],{"class":129},[84,18078,18080],{"class":86,"line":18079},94,[84,18081,3209],{"class":154},[84,18083,18085,18087,18089,18091,18093],{"class":86,"line":18084},95,[84,18086,4629],{"class":154},[84,18088,2352],{"class":129},[84,18090,18008],{"class":158},[84,18092,2352],{"class":129},[84,18094,2374],{"class":154},[84,18096,18098],{"class":86,"line":18097},96,[84,18099,3365],{"class":154},[84,18101,18103],{"class":86,"line":18102},97,[84,18104,2746],{"class":154},[26,18106,18107],{"start":98},[29,18108,18109],{},[1464,18110,18111],{},"练习案例2：点和圆的关系",[2315,18113,18114],{},[29,18115,18116],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[60,18118,18120],{"className":1313,"code":18119,"language":1315,"meta":66,"style":66},"#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",[39,18121,18122,18128,18138,18145,18152,18156,18160,18165,18199,18204,18220,18234,18238,18242,18249,18256,18260,18266,18270,18274,18278,18300,18323,18328,18342,18357,18361,18365,18371,18376,18381,18385,18411,18415,18445,18473,18501,18518,18522,18535,18539,18543,18547,18560,18564,18568,18576,18580,18584,18588,18593,18597,18608,18615,18624,18634,18645,18652,18665,18676,18686,18697,18704,18718,18723,18733,18741],{"__ignoreMap":66},[84,18123,18124,18126],{"class":86,"line":87},[84,18125,3130],{"class":129},[84,18127,3133],{"class":158},[84,18129,18130,18132,18134,18136],{"class":86,"line":98},[84,18131,3138],{"class":129},[84,18133,3141],{"class":129},[84,18135,3144],{"class":90},[84,18137,2471],{"class":154},[84,18139,18140,18142],{"class":86,"line":106},[84,18141,3130],{"class":129},[84,18143,18144],{"class":158},"\u003Ccmath>\n",[84,18146,18147,18149],{"class":86,"line":112},[84,18148,15864],{"class":129},[84,18150,18151],{"class":90}," Point\n",[84,18153,18154],{"class":86,"line":425},[84,18155,2727],{"class":154},[84,18157,18158],{"class":86,"line":2395},[84,18159,15886],{"class":129},[84,18161,18162],{"class":86,"line":2401},[84,18163,18164],{"class":1378},"    \u002F\u002F赋值\n",[84,18166,18167,18169,18172,18174,18176,18179,18181,18183,18186,18189,18191,18194,18196],{"class":86,"line":2492},[84,18168,16079],{"class":129},[84,18170,18171],{"class":90}," setPoint",[84,18173,155],{"class":154},[84,18175,15207],{"class":129},[84,18177,18178],{"class":928}," x",[84,18180,846],{"class":154},[84,18182,15207],{"class":129},[84,18184,18185],{"class":928}," y",[84,18187,18188],{"class":154},") { m_x ",[84,18190,867],{"class":129},[84,18192,18193],{"class":154}," x; m_y ",[84,18195,867],{"class":129},[84,18197,18198],{"class":154}," y; }\n",[84,18200,18201],{"class":86,"line":2498},[84,18202,18203],{"class":1378},"    \u002F\u002F获取坐标\n",[84,18205,18206,18208,18211,18214,18217],{"class":86,"line":2510},[84,18207,15908],{"class":129},[84,18209,18210],{"class":90}," getX",[84,18212,18213],{"class":154},"() { ",[84,18215,18216],{"class":129},"return",[84,18218,18219],{"class":154}," m_x; }\n",[84,18221,18222,18224,18227,18229,18231],{"class":86,"line":2793},[84,18223,15908],{"class":129},[84,18225,18226],{"class":90}," getY",[84,18228,18213],{"class":154},[84,18230,18216],{"class":129},[84,18232,18233],{"class":154}," m_y; }\n",[84,18235,18236],{"class":86,"line":2798},[84,18237,3578],{"emptyLinePlaceholder":1252},[84,18239,18240],{"class":86,"line":2804},[84,18241,16392],{"class":129},[84,18243,18244,18246],{"class":86,"line":2809},[84,18245,15908],{"class":129},[84,18247,18248],{"class":154}," m_x;\n",[84,18250,18251,18253],{"class":86,"line":2823},[84,18252,15908],{"class":129},[84,18254,18255],{"class":154}," m_y;\n",[84,18257,18258],{"class":86,"line":2828},[84,18259,5173],{"class":154},[84,18261,18262,18264],{"class":86,"line":2834},[84,18263,15864],{"class":129},[84,18265,15867],{"class":90},[84,18267,18268],{"class":86,"line":2855},[84,18269,2727],{"class":154},[84,18271,18272],{"class":86,"line":2860},[84,18273,15886],{"class":129},[84,18275,18276],{"class":86,"line":2874},[84,18277,18164],{"class":1378},[84,18279,18280,18282,18285,18287,18289,18292,18295,18297],{"class":86,"line":2879},[84,18281,16079],{"class":129},[84,18283,18284],{"class":90}," setRadius",[84,18286,155],{"class":154},[84,18288,15207],{"class":129},[84,18290,18291],{"class":928}," r",[84,18293,18294],{"class":154},") { m_r ",[84,18296,867],{"class":129},[84,18298,18299],{"class":154}," r; }\n",[84,18301,18302,18304,18307,18309,18312,18315,18318,18320],{"class":86,"line":2908},[84,18303,16079],{"class":129},[84,18305,18306],{"class":90}," setCenter",[84,18308,155],{"class":154},[84,18310,18311],{"class":90},"Point",[84,18313,18314],{"class":928}," center",[84,18316,18317],{"class":154},") { m_center ",[84,18319,867],{"class":129},[84,18321,18322],{"class":154}," center; }\n",[84,18324,18325],{"class":86,"line":2913},[84,18326,18327],{"class":1378},"    \u002F\u002F获取属性\n",[84,18329,18330,18332,18335,18337,18339],{"class":86,"line":2930},[84,18331,15908],{"class":129},[84,18333,18334],{"class":90}," getRadius",[84,18336,18213],{"class":154},[84,18338,18216],{"class":129},[84,18340,18341],{"class":154}," m_r; }\n",[84,18343,18344,18347,18350,18352,18354],{"class":86,"line":2935},[84,18345,18346],{"class":90},"    Point",[84,18348,18349],{"class":90}," getCenter",[84,18351,18213],{"class":154},[84,18353,18216],{"class":129},[84,18355,18356],{"class":154}," m_center; }\n",[84,18358,18359],{"class":86,"line":2940},[84,18360,3578],{"emptyLinePlaceholder":1252},[84,18362,18363],{"class":86,"line":2945},[84,18364,16392],{"class":129},[84,18366,18367,18369],{"class":86,"line":2959},[84,18368,15908],{"class":129},[84,18370,15898],{"class":154},[84,18372,18373],{"class":86,"line":2964},[84,18374,18375],{"class":1378},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[84,18377,18378],{"class":86,"line":3755},[84,18379,18380],{"class":154},"    Point m_center;\n",[84,18382,18383],{"class":86,"line":3769},[84,18384,5173],{"class":154},[84,18386,18387,18389,18392,18394,18397,18399,18401,18403,18405,18407,18409],{"class":86,"line":3777},[84,18388,6538],{"class":129},[84,18390,18391],{"class":90}," isInCircle",[84,18393,155],{"class":154},[84,18395,18396],{"class":90},"Circle",[84,18398,11756],{"class":129},[84,18400,1599],{"class":928},[84,18402,1688],{"class":154},[84,18404,18311],{"class":90},[84,18406,11756],{"class":129},[84,18408,19],{"class":928},[84,18410,162],{"class":154},[84,18412,18413],{"class":86,"line":3782},[84,18414,2727],{"class":154},[84,18416,18417,18419,18422,18424,18426,18429,18432,18435,18437,18439,18441,18443],{"class":86,"line":3788},[84,18418,15908],{"class":129},[84,18420,18421],{"class":154}," dx ",[84,18423,867],{"class":129},[84,18425,17512],{"class":154},[84,18427,18428],{"class":90},"getCenter",[84,18430,18431],{"class":154},"().",[84,18433,18434],{"class":90},"getX",[84,18436,14221],{"class":154},[84,18438,1841],{"class":129},[84,18440,17058],{"class":154},[84,18442,18434],{"class":90},[84,18444,6810],{"class":154},[84,18446,18447,18449,18452,18454,18456,18458,18460,18463,18465,18467,18469,18471],{"class":86,"line":3794},[84,18448,15908],{"class":129},[84,18450,18451],{"class":154}," dy ",[84,18453,867],{"class":129},[84,18455,17512],{"class":154},[84,18457,18428],{"class":90},[84,18459,18431],{"class":154},[84,18461,18462],{"class":90},"getY",[84,18464,14221],{"class":154},[84,18466,1841],{"class":129},[84,18468,17058],{"class":154},[84,18470,18462],{"class":90},[84,18472,6810],{"class":154},[84,18474,18475,18477,18480,18482,18485,18488,18490,18492,18494,18496,18498],{"class":86,"line":3799},[84,18476,15908],{"class":129},[84,18478,18479],{"class":154}," distance ",[84,18481,867],{"class":129},[84,18483,18484],{"class":90}," sqrt",[84,18486,18487],{"class":154},"(dx ",[84,18489,1043],{"class":129},[84,18491,18421],{"class":154},[84,18493,1790],{"class":129},[84,18495,18451],{"class":154},[84,18497,1043],{"class":129},[84,18499,18500],{"class":154}," dy);\n",[84,18502,18503,18505,18508,18510,18512,18515],{"class":86,"line":9120},[84,18504,4279],{"class":129},[84,18506,18507],{"class":154}," (distance ",[84,18509,2218],{"class":129},[84,18511,17512],{"class":154},[84,18513,18514],{"class":90},"getRadius",[84,18516,18517],{"class":154},"())\n",[84,18519,18520],{"class":86,"line":9144},[84,18521,3209],{"class":154},[84,18523,18524,18526,18528,18531,18533],{"class":86,"line":9149},[84,18525,10841],{"class":154},[84,18527,2352],{"class":129},[84,18529,18530],{"class":158}," \"点在圆内\"",[84,18532,2625],{"class":129},[84,18534,10012],{"class":154},[84,18536,18537],{"class":86,"line":9155},[84,18538,3365],{"class":154},[84,18540,18541],{"class":86,"line":9182},[84,18542,17993],{"class":129},[84,18544,18545],{"class":86,"line":9187},[84,18546,3209],{"class":154},[84,18548,18549,18551,18553,18556,18558],{"class":86,"line":9193},[84,18550,10841],{"class":154},[84,18552,2352],{"class":129},[84,18554,18555],{"class":158}," \"点在圆外\"",[84,18557,2625],{"class":129},[84,18559,10012],{"class":154},[84,18561,18562],{"class":86,"line":9205},[84,18563,3365],{"class":154},[84,18565,18566],{"class":86,"line":9217},[84,18567,2746],{"class":154},[84,18569,18570,18572,18574],{"class":86,"line":9229},[84,18571,1327],{"class":129},[84,18573,3153],{"class":90},[84,18575,183],{"class":154},[84,18577,18578],{"class":86,"line":10888},[84,18579,2727],{"class":154},[84,18581,18582],{"class":86,"line":10913},[84,18583,16223],{"class":1378},[84,18585,18586],{"class":86,"line":10936},[84,18587,15970],{"class":154},[84,18589,18590],{"class":86,"line":10960},[84,18591,18592],{"class":154},"    Point p1;\n",[84,18594,18595],{"class":86,"line":10965},[84,18596,18164],{"class":1378},[84,18598,18599,18601,18603,18606],{"class":86,"line":10970},[84,18600,2732],{"class":154},[84,18602,2352],{"class":129},[84,18604,18605],{"class":158},"\"请输入圆的半径：\"",[84,18607,2471],{"class":154},[84,18609,18610,18612],{"class":86,"line":10975},[84,18611,15908],{"class":129},[84,18613,18614],{"class":154}," r;\n",[84,18616,18617,18619,18621],{"class":86,"line":10984},[84,18618,3191],{"class":154},[84,18620,2610],{"class":129},[84,18622,18623],{"class":154},"r;\n",[84,18625,18626,18628,18631],{"class":86,"line":10989},[84,18627,17765],{"class":154},[84,18629,18630],{"class":90},"setRadius",[84,18632,18633],{"class":154},"(r);\n",[84,18635,18636,18638,18640,18643],{"class":86,"line":10995},[84,18637,2732],{"class":154},[84,18639,2352],{"class":129},[84,18641,18642],{"class":158},"\"请输入圆心坐标：\"",[84,18644,2471],{"class":154},[84,18646,18647,18649],{"class":86,"line":11016},[84,18648,15908],{"class":129},[84,18650,18651],{"class":154}," x, y;\n",[84,18653,18654,18656,18658,18660,18662],{"class":86,"line":11022},[84,18655,3191],{"class":154},[84,18657,2610],{"class":129},[84,18659,2128],{"class":154},[84,18661,2610],{"class":129},[84,18663,18664],{"class":154},"y;\n",[84,18666,18667,18670,18673],{"class":86,"line":11036},[84,18668,18669],{"class":154},"    p1.",[84,18671,18672],{"class":90},"setPoint",[84,18674,18675],{"class":154},"(x, y);\n",[84,18677,18678,18680,18683],{"class":86,"line":11042},[84,18679,17765],{"class":154},[84,18681,18682],{"class":90},"setCenter",[84,18684,18685],{"class":154},"(p1);\n",[84,18687,18688,18690,18692,18695],{"class":86,"line":11069},[84,18689,2732],{"class":154},[84,18691,2352],{"class":129},[84,18693,18694],{"class":158},"\"请输入测试点坐标：\"",[84,18696,2471],{"class":154},[84,18698,18699,18701],{"class":86,"line":11078},[84,18700,15908],{"class":129},[84,18702,18703],{"class":154}," x1, y1;\n",[84,18705,18706,18708,18710,18713,18715],{"class":86,"line":11084},[84,18707,3191],{"class":154},[84,18709,2610],{"class":129},[84,18711,18712],{"class":154},"x1",[84,18714,2610],{"class":129},[84,18716,18717],{"class":154},"y1;\n",[84,18719,18720],{"class":86,"line":11092},[84,18721,18722],{"class":154},"    Point p2;\n",[84,18724,18725,18728,18730],{"class":86,"line":11097},[84,18726,18727],{"class":154},"    p2.",[84,18729,18672],{"class":90},[84,18731,18732],{"class":154},"(x1, y1);\n",[84,18734,18735,18738],{"class":86,"line":17774},[84,18736,18737],{"class":90},"    isInCircle",[84,18739,18740],{"class":154},"(c1, p2);\n",[84,18742,18743],{"class":86,"line":17780},[84,18744,2746],{"class":154},[19,18746,18747],{},"在类中可以让另一个类作为本来的成员",[19,18749,18750],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18752,18753],{},"创建point.h",[60,18755,18757],{"className":1313,"code":18756,"language":1315,"meta":66,"style":66},"#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",[39,18758,18759,18770,18776,18786,18792,18796,18801,18805,18809,18829,18833,18841,18849,18853,18857,18863,18869],{"__ignoreMap":66},[84,18760,18761,18764,18767],{"class":86,"line":87},[84,18762,18763],{"class":129},"#pragma",[84,18765,18766],{"class":90}," once",[84,18768,18769],{"class":1378}," \u002F\u002F防止头文件重复包含\n",[84,18771,18772,18774],{"class":86,"line":98},[84,18773,3130],{"class":129},[84,18775,3133],{"class":158},[84,18777,18778,18780,18782,18784],{"class":86,"line":106},[84,18779,3138],{"class":129},[84,18781,3141],{"class":129},[84,18783,3144],{"class":90},[84,18785,2471],{"class":154},[84,18787,18788,18790],{"class":86,"line":112},[84,18789,15864],{"class":129},[84,18791,18151],{"class":90},[84,18793,18794],{"class":86,"line":425},[84,18795,2727],{"class":154},[84,18797,18798],{"class":86,"line":2395},[84,18799,18800],{"class":1378},"\u002F\u002F做好声明与变量定义就可以\n",[84,18802,18803],{"class":86,"line":2401},[84,18804,15886],{"class":129},[84,18806,18807],{"class":86,"line":2492},[84,18808,18164],{"class":1378},[84,18810,18811,18813,18815,18817,18819,18821,18823,18825,18827],{"class":86,"line":2498},[84,18812,16079],{"class":129},[84,18814,18171],{"class":90},[84,18816,155],{"class":154},[84,18818,15207],{"class":129},[84,18820,18178],{"class":928},[84,18822,846],{"class":154},[84,18824,15207],{"class":129},[84,18826,18185],{"class":928},[84,18828,3897],{"class":154},[84,18830,18831],{"class":86,"line":2510},[84,18832,18203],{"class":1378},[84,18834,18835,18837,18839],{"class":86,"line":2793},[84,18836,15908],{"class":129},[84,18838,18210],{"class":90},[84,18840,6810],{"class":154},[84,18842,18843,18845,18847],{"class":86,"line":2798},[84,18844,15908],{"class":129},[84,18846,18226],{"class":90},[84,18848,6810],{"class":154},[84,18850,18851],{"class":86,"line":2804},[84,18852,3578],{"emptyLinePlaceholder":1252},[84,18854,18855],{"class":86,"line":2809},[84,18856,16392],{"class":129},[84,18858,18859,18861],{"class":86,"line":2823},[84,18860,15908],{"class":129},[84,18862,18248],{"class":154},[84,18864,18865,18867],{"class":86,"line":2828},[84,18866,15908],{"class":129},[84,18868,18255],{"class":154},[84,18870,18871],{"class":86,"line":2834},[84,18872,5173],{"class":154},[19,18874,18875],{},"创建point.cpp",[60,18877,18879],{"className":1313,"code":18878,"language":1315,"meta":66,"style":66},"#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",[39,18880,18881,18888,18893,18927,18931,18947],{"__ignoreMap":66},[84,18882,18883,18885],{"class":86,"line":87},[84,18884,3130],{"class":129},[84,18886,18887],{"class":158},"\u003Cpoint.h>\n",[84,18889,18890],{"class":86,"line":98},[84,18891,18892],{"class":1378},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[84,18894,18895,18897,18900,18903,18905,18907,18909,18911,18913,18915,18917,18919,18921,18923,18925],{"class":86,"line":106},[84,18896,16079],{"class":129},[84,18898,18899],{"class":90}," Point",[84,18901,18902],{"class":154},"::",[84,18904,18672],{"class":90},[84,18906,155],{"class":154},[84,18908,15207],{"class":129},[84,18910,18178],{"class":928},[84,18912,846],{"class":154},[84,18914,15207],{"class":129},[84,18916,18185],{"class":928},[84,18918,18188],{"class":154},[84,18920,867],{"class":129},[84,18922,18193],{"class":154},[84,18924,867],{"class":129},[84,18926,18198],{"class":154},[84,18928,18929],{"class":86,"line":112},[84,18930,18203],{"class":1378},[84,18932,18933,18935,18937,18939,18941,18943,18945],{"class":86,"line":425},[84,18934,15908],{"class":129},[84,18936,18899],{"class":90},[84,18938,18902],{"class":154},[84,18940,18434],{"class":90},[84,18942,18213],{"class":154},[84,18944,18216],{"class":129},[84,18946,18219],{"class":154},[84,18948,18949,18951,18953,18955,18957,18959,18961],{"class":86,"line":2395},[84,18950,15908],{"class":129},[84,18952,18899],{"class":90},[84,18954,18902],{"class":154},[84,18956,18462],{"class":90},[84,18958,18213],{"class":154},[84,18960,18216],{"class":129},[84,18962,18233],{"class":154},[19,18964,18965],{},"创建circle.h",[60,18967,18969],{"className":1313,"code":18968,"language":1315,"meta":66,"style":66},"#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",[39,18970,18971,18978,18984,18994,19000,19006,19010,19014,19018,19032,19046,19050,19058,19066,19070,19074,19080,19084,19088],{"__ignoreMap":66},[84,18972,18973,18975],{"class":86,"line":87},[84,18974,18763],{"class":129},[84,18976,18977],{"class":90}," once\n",[84,18979,18980,18982],{"class":86,"line":98},[84,18981,3130],{"class":129},[84,18983,3133],{"class":158},[84,18985,18986,18988,18990,18992],{"class":86,"line":106},[84,18987,3138],{"class":129},[84,18989,3141],{"class":129},[84,18991,3144],{"class":90},[84,18993,2471],{"class":154},[84,18995,18996,18998],{"class":86,"line":112},[84,18997,3130],{"class":129},[84,18999,18887],{"class":158},[84,19001,19002,19004],{"class":86,"line":425},[84,19003,15864],{"class":129},[84,19005,15867],{"class":90},[84,19007,19008],{"class":86,"line":2395},[84,19009,2727],{"class":154},[84,19011,19012],{"class":86,"line":2401},[84,19013,15886],{"class":129},[84,19015,19016],{"class":86,"line":2492},[84,19017,18164],{"class":1378},[84,19019,19020,19022,19024,19026,19028,19030],{"class":86,"line":2498},[84,19021,16079],{"class":129},[84,19023,18284],{"class":90},[84,19025,155],{"class":154},[84,19027,15207],{"class":129},[84,19029,18291],{"class":928},[84,19031,3897],{"class":154},[84,19033,19034,19036,19038,19040,19042,19044],{"class":86,"line":2510},[84,19035,16079],{"class":129},[84,19037,18306],{"class":90},[84,19039,155],{"class":154},[84,19041,18311],{"class":90},[84,19043,18314],{"class":928},[84,19045,3897],{"class":154},[84,19047,19048],{"class":86,"line":2793},[84,19049,18327],{"class":1378},[84,19051,19052,19054,19056],{"class":86,"line":2798},[84,19053,15908],{"class":129},[84,19055,18334],{"class":90},[84,19057,6810],{"class":154},[84,19059,19060,19062,19064],{"class":86,"line":2804},[84,19061,18346],{"class":90},[84,19063,18349],{"class":90},[84,19065,6810],{"class":154},[84,19067,19068],{"class":86,"line":2809},[84,19069,3578],{"emptyLinePlaceholder":1252},[84,19071,19072],{"class":86,"line":2823},[84,19073,16392],{"class":129},[84,19075,19076,19078],{"class":86,"line":2828},[84,19077,15908],{"class":129},[84,19079,15898],{"class":154},[84,19081,19082],{"class":86,"line":2834},[84,19083,18375],{"class":1378},[84,19085,19086],{"class":86,"line":2855},[84,19087,18380],{"class":154},[84,19089,19090],{"class":86,"line":2860},[84,19091,5173],{"class":154},[19,19093,19094],{},"创建circle.cpp",[60,19096,19098],{"className":1313,"code":19097,"language":1315,"meta":66,"style":66},"#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",[39,19099,19100,19107,19130,19152,19157,19173],{"__ignoreMap":66},[84,19101,19102,19104],{"class":86,"line":87},[84,19103,3130],{"class":129},[84,19105,19106],{"class":158},"\u003Ccircle.h>\n",[84,19108,19109,19111,19114,19116,19118,19120,19122,19124,19126,19128],{"class":86,"line":98},[84,19110,6538],{"class":129},[84,19112,19113],{"class":90}," Circle",[84,19115,18902],{"class":154},[84,19117,18630],{"class":90},[84,19119,155],{"class":154},[84,19121,15207],{"class":129},[84,19123,18291],{"class":928},[84,19125,18294],{"class":154},[84,19127,867],{"class":129},[84,19129,18299],{"class":154},[84,19131,19132,19134,19136,19138,19140,19142,19144,19146,19148,19150],{"class":86,"line":106},[84,19133,6538],{"class":129},[84,19135,19113],{"class":90},[84,19137,18902],{"class":154},[84,19139,18682],{"class":90},[84,19141,155],{"class":154},[84,19143,18311],{"class":90},[84,19145,18314],{"class":928},[84,19147,18317],{"class":154},[84,19149,867],{"class":129},[84,19151,18322],{"class":154},[84,19153,19154],{"class":86,"line":112},[84,19155,19156],{"class":1378},"\u002F\u002F获取属性\n",[84,19158,19159,19161,19163,19165,19167,19169,19171],{"class":86,"line":425},[84,19160,15207],{"class":129},[84,19162,19113],{"class":90},[84,19164,18902],{"class":154},[84,19166,18514],{"class":90},[84,19168,18213],{"class":154},[84,19170,18216],{"class":129},[84,19172,18341],{"class":154},[84,19174,19175,19177,19179,19181,19183,19185,19187],{"class":86,"line":2395},[84,19176,18311],{"class":90},[84,19178,19113],{"class":90},[84,19180,18902],{"class":154},[84,19182,18428],{"class":90},[84,19184,18213],{"class":154},[84,19186,18216],{"class":129},[84,19188,18356],{"class":154},[19,19190,19191],{},"使用封装的类",[60,19193,19195],{"className":1313,"code":19194,"language":1315,"meta":66,"style":66},"#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",[39,19196,19197,19203,19213,19219,19225,19249,19253,19279,19305,19329,19343,19347,19359,19363,19367,19371,19383,19387,19391,19399,19403,19407,19411,19415,19419,19429,19435,19443,19451,19461,19467,19479,19487,19495,19505,19511,19523,19527,19535,19541],{"__ignoreMap":66},[84,19198,19199,19201],{"class":86,"line":87},[84,19200,3130],{"class":129},[84,19202,3133],{"class":158},[84,19204,19205,19207,19209,19211],{"class":86,"line":98},[84,19206,3138],{"class":129},[84,19208,3141],{"class":129},[84,19210,3144],{"class":90},[84,19212,2471],{"class":154},[84,19214,19215,19217],{"class":86,"line":106},[84,19216,3130],{"class":129},[84,19218,19106],{"class":158},[84,19220,19221,19223],{"class":86,"line":112},[84,19222,3130],{"class":129},[84,19224,18887],{"class":158},[84,19226,19227,19229,19231,19233,19235,19237,19239,19241,19243,19245,19247],{"class":86,"line":425},[84,19228,6538],{"class":129},[84,19230,18391],{"class":90},[84,19232,155],{"class":154},[84,19234,18396],{"class":90},[84,19236,11756],{"class":129},[84,19238,1599],{"class":928},[84,19240,1688],{"class":154},[84,19242,18311],{"class":90},[84,19244,11756],{"class":129},[84,19246,19],{"class":928},[84,19248,162],{"class":154},[84,19250,19251],{"class":86,"line":2395},[84,19252,2727],{"class":154},[84,19254,19255,19257,19259,19261,19263,19265,19267,19269,19271,19273,19275,19277],{"class":86,"line":2401},[84,19256,15908],{"class":129},[84,19258,18421],{"class":154},[84,19260,867],{"class":129},[84,19262,17512],{"class":154},[84,19264,18428],{"class":90},[84,19266,18431],{"class":154},[84,19268,18434],{"class":90},[84,19270,14221],{"class":154},[84,19272,1841],{"class":129},[84,19274,17058],{"class":154},[84,19276,18434],{"class":90},[84,19278,6810],{"class":154},[84,19280,19281,19283,19285,19287,19289,19291,19293,19295,19297,19299,19301,19303],{"class":86,"line":2492},[84,19282,15908],{"class":129},[84,19284,18451],{"class":154},[84,19286,867],{"class":129},[84,19288,17512],{"class":154},[84,19290,18428],{"class":90},[84,19292,18431],{"class":154},[84,19294,18462],{"class":90},[84,19296,14221],{"class":154},[84,19298,1841],{"class":129},[84,19300,17058],{"class":154},[84,19302,18462],{"class":90},[84,19304,6810],{"class":154},[84,19306,19307,19309,19311,19313,19315,19317,19319,19321,19323,19325,19327],{"class":86,"line":2498},[84,19308,15908],{"class":129},[84,19310,18479],{"class":154},[84,19312,867],{"class":129},[84,19314,18484],{"class":90},[84,19316,18487],{"class":154},[84,19318,1043],{"class":129},[84,19320,18421],{"class":154},[84,19322,1790],{"class":129},[84,19324,18451],{"class":154},[84,19326,1043],{"class":129},[84,19328,18500],{"class":154},[84,19330,19331,19333,19335,19337,19339,19341],{"class":86,"line":2510},[84,19332,4279],{"class":129},[84,19334,18507],{"class":154},[84,19336,2218],{"class":129},[84,19338,17512],{"class":154},[84,19340,18514],{"class":90},[84,19342,18517],{"class":154},[84,19344,19345],{"class":86,"line":2793},[84,19346,3209],{"class":154},[84,19348,19349,19351,19353,19355,19357],{"class":86,"line":2798},[84,19350,10841],{"class":154},[84,19352,2352],{"class":129},[84,19354,18530],{"class":158},[84,19356,2625],{"class":129},[84,19358,10012],{"class":154},[84,19360,19361],{"class":86,"line":2804},[84,19362,3365],{"class":154},[84,19364,19365],{"class":86,"line":2809},[84,19366,17993],{"class":129},[84,19368,19369],{"class":86,"line":2823},[84,19370,3209],{"class":154},[84,19372,19373,19375,19377,19379,19381],{"class":86,"line":2828},[84,19374,10841],{"class":154},[84,19376,2352],{"class":129},[84,19378,18555],{"class":158},[84,19380,2625],{"class":129},[84,19382,10012],{"class":154},[84,19384,19385],{"class":86,"line":2834},[84,19386,3365],{"class":154},[84,19388,19389],{"class":86,"line":2855},[84,19390,2746],{"class":154},[84,19392,19393,19395,19397],{"class":86,"line":2860},[84,19394,1327],{"class":129},[84,19396,3153],{"class":90},[84,19398,183],{"class":154},[84,19400,19401],{"class":86,"line":2874},[84,19402,2727],{"class":154},[84,19404,19405],{"class":86,"line":2879},[84,19406,16223],{"class":1378},[84,19408,19409],{"class":86,"line":2908},[84,19410,15970],{"class":154},[84,19412,19413],{"class":86,"line":2913},[84,19414,18592],{"class":154},[84,19416,19417],{"class":86,"line":2930},[84,19418,18164],{"class":1378},[84,19420,19421,19423,19425,19427],{"class":86,"line":2935},[84,19422,2732],{"class":154},[84,19424,2352],{"class":129},[84,19426,18605],{"class":158},[84,19428,2471],{"class":154},[84,19430,19431,19433],{"class":86,"line":2940},[84,19432,15908],{"class":129},[84,19434,18614],{"class":154},[84,19436,19437,19439,19441],{"class":86,"line":2945},[84,19438,3191],{"class":154},[84,19440,2610],{"class":129},[84,19442,18623],{"class":154},[84,19444,19445,19447,19449],{"class":86,"line":2959},[84,19446,17765],{"class":154},[84,19448,18630],{"class":90},[84,19450,18633],{"class":154},[84,19452,19453,19455,19457,19459],{"class":86,"line":2964},[84,19454,2732],{"class":154},[84,19456,2352],{"class":129},[84,19458,18642],{"class":158},[84,19460,2471],{"class":154},[84,19462,19463,19465],{"class":86,"line":3755},[84,19464,15908],{"class":129},[84,19466,18651],{"class":154},[84,19468,19469,19471,19473,19475,19477],{"class":86,"line":3769},[84,19470,3191],{"class":154},[84,19472,2610],{"class":129},[84,19474,2128],{"class":154},[84,19476,2610],{"class":129},[84,19478,18664],{"class":154},[84,19480,19481,19483,19485],{"class":86,"line":3777},[84,19482,18669],{"class":154},[84,19484,18672],{"class":90},[84,19486,18675],{"class":154},[84,19488,19489,19491,19493],{"class":86,"line":3782},[84,19490,17765],{"class":154},[84,19492,18682],{"class":90},[84,19494,18685],{"class":154},[84,19496,19497,19499,19501,19503],{"class":86,"line":3788},[84,19498,2732],{"class":154},[84,19500,2352],{"class":129},[84,19502,18694],{"class":158},[84,19504,2471],{"class":154},[84,19506,19507,19509],{"class":86,"line":3794},[84,19508,15908],{"class":129},[84,19510,18703],{"class":154},[84,19512,19513,19515,19517,19519,19521],{"class":86,"line":3799},[84,19514,3191],{"class":154},[84,19516,2610],{"class":129},[84,19518,18712],{"class":154},[84,19520,2610],{"class":129},[84,19522,18717],{"class":154},[84,19524,19525],{"class":86,"line":9120},[84,19526,18722],{"class":154},[84,19528,19529,19531,19533],{"class":86,"line":9144},[84,19530,18727],{"class":154},[84,19532,18672],{"class":90},[84,19534,18732],{"class":154},[84,19536,19537,19539],{"class":86,"line":9149},[84,19538,18737],{"class":90},[84,19540,18740],{"class":154},[84,19542,19543],{"class":86,"line":9155},[84,19544,2746],{"class":154},[14,19546,19548],{"id":19547},"_82对象的初始化清理","8.2对象的初始化清理",[2315,19550,19551,19554],{},[29,19552,19553],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,19555,19556],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[198,19558,19560],{"id":19559},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19562,19563,19564,19567],{},"对象的",[1464,19565,19566],{},"初始化和清理","也是两个非常重要的安全问题",[19,19569,19570],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19572,19573],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19575,19576,19577,19580,19581,19584],{},"c++利用了",[1464,19578,19579],{},"构造函数","和",[1464,19582,19583],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19586,19587,19588],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1464,19589,19590],{},"我们不提供构造和析构，编译器会提供",[19,19592,19593],{},[1464,19594,19595],{},"编译器提供的构造函数和析构函数是空实现。",[2315,19597,19598,19601],{},[29,19599,19600],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,19602,19603,19604,19607],{},"析构函数：主要作用在于对象",[1464,19605,19606],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19609,19610,19613],{},[1464,19611,19612],{},"构造函数语法：",[39,19614,19615],{},"类名(){}",[26,19617,19618,19621,19624,19627,19630],{},[29,19619,19620],{},"构造函数，没有返回值也不写void",[29,19622,19623],{},"函数名称与类名相同",[29,19625,19626],{},"构造函数可以有参数，因此可以发生重载",[29,19628,19629],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,19631,19632,19633,1739],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[39,19634,19635],{},"Person(){}",[19,19637,19638,14965,19641],{},[1464,19639,19640],{},"析构函数语法：",[39,19642,19643],{},"~类名(){}",[26,19645,19646,19649,19652,19658],{},[29,19647,19648],{},"析构函数，没有返回值也不写void",[29,19650,19651],{},"函数名称与类名相同,在名称前加上符号  ~",[29,19653,19654,19655],{},"析构函数不可以有参数，因此",[1464,19656,19657],{},"不可以发生重载",[29,19659,19660],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[60,19662,19664],{"className":1313,"code":19663,"language":1315,"meta":66,"style":66},"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",[39,19665,19666,19672,19676,19680,19685,19692,19696,19709,19713,19718,19725,19729,19742,19746,19750,19754,19758,19766,19770,19778,19782,19786,19794,19798,19803,19807,19814,19818,19831,19835,19843],{"__ignoreMap":66},[84,19667,19668,19670],{"class":86,"line":87},[84,19669,15864],{"class":129},[84,19671,16341],{"class":90},[84,19673,19674],{"class":86,"line":98},[84,19675,2727],{"class":154},[84,19677,19678],{"class":86,"line":106},[84,19679,15886],{"class":129},[84,19681,19682],{"class":86,"line":112},[84,19683,19684],{"class":1378},"    \u002F\u002F构造函数\n",[84,19686,19687,19690],{"class":86,"line":425},[84,19688,19689],{"class":90},"    Person",[84,19691,183],{"class":154},[84,19693,19694],{"class":86,"line":2395},[84,19695,3209],{"class":154},[84,19697,19698,19700,19702,19705,19707],{"class":86,"line":2401},[84,19699,10841],{"class":154},[84,19701,2352],{"class":129},[84,19703,19704],{"class":158}," \"Person的构造函数调用\"",[84,19706,2625],{"class":129},[84,19708,10012],{"class":154},[84,19710,19711],{"class":86,"line":2492},[84,19712,3365],{"class":154},[84,19714,19715],{"class":86,"line":2498},[84,19716,19717],{"class":1378},"    \u002F\u002F析构函数\n",[84,19719,19720,19723],{"class":86,"line":2510},[84,19721,19722],{"class":90},"    ~Person",[84,19724,183],{"class":154},[84,19726,19727],{"class":86,"line":2793},[84,19728,3209],{"class":154},[84,19730,19731,19733,19735,19738,19740],{"class":86,"line":2798},[84,19732,10841],{"class":154},[84,19734,2352],{"class":129},[84,19736,19737],{"class":158}," \"Person的析构函数调用\"",[84,19739,2625],{"class":129},[84,19741,10012],{"class":154},[84,19743,19744],{"class":86,"line":2804},[84,19745,3365],{"class":154},[84,19747,19748],{"class":86,"line":2809},[84,19749,3578],{"emptyLinePlaceholder":1252},[84,19751,19752],{"class":86,"line":2823},[84,19753,5173],{"class":154},[84,19755,19756],{"class":86,"line":2828},[84,19757,3578],{"emptyLinePlaceholder":1252},[84,19759,19760,19762,19764],{"class":86,"line":2834},[84,19761,6538],{"class":129},[84,19763,6762],{"class":90},[84,19765,183],{"class":154},[84,19767,19768],{"class":86,"line":2855},[84,19769,2727],{"class":154},[84,19771,19772,19775],{"class":86,"line":2860},[84,19773,19774],{"class":154},"    Person p;",[84,19776,19777],{"class":1378},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[84,19779,19780],{"class":86,"line":2874},[84,19781,2746],{"class":154},[84,19783,19784],{"class":86,"line":2879},[84,19785,3578],{"emptyLinePlaceholder":1252},[84,19787,19788,19790,19792],{"class":86,"line":2908},[84,19789,1327],{"class":129},[84,19791,3153],{"class":90},[84,19793,12025],{"class":154},[84,19795,19796],{"class":86,"line":2913},[84,19797,14381],{"class":154},[84,19799,19800],{"class":86,"line":2930},[84,19801,19802],{"class":1378},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[84,19804,19805],{"class":86,"line":2935},[84,19806,3578],{"emptyLinePlaceholder":1252},[84,19808,19809,19811],{"class":86,"line":2940},[84,19810,19774],{"class":154},[84,19812,19813],{"class":1378},"\u002F\u002F只有构造函数\n",[84,19815,19816],{"class":86,"line":2945},[84,19817,3578],{"emptyLinePlaceholder":1252},[84,19819,19820,19822,19824,19826,19828],{"class":86,"line":2959},[84,19821,3481],{"class":90},[84,19823,155],{"class":154},[84,19825,3486],{"class":158},[84,19827,7139],{"class":154},[84,19829,19830],{"class":1378},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[84,19832,19833],{"class":86,"line":2964},[84,19834,3578],{"emptyLinePlaceholder":1252},[84,19836,19837,19839,19841],{"class":86,"line":3755},[84,19838,5268],{"class":129},[84,19840,5271],{"class":94},[84,19842,2471],{"class":154},[84,19844,19845],{"class":86,"line":3769},[84,19846,2746],{"class":154},[19,19848,19849],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[198,19851,19853],{"id":19852},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19855,19856],{},"两种分类方式：",[19,19858,19859],{},"​\t按参数分为： 有参构造和无参构造",[19,19861,19862],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19864,19865],{},"三种调用方式：",[19,19867,19868],{},"​\t括号法",[19,19870,19871],{},"​\t显示法",[19,19873,19874],{},"​\t隐式转换法",[60,19876,19878],{"className":1313,"code":19877,"language":1315,"meta":66,"style":66},"#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",[39,19879,19880,19886,19896,19901,19906,19911,19916,19920,19928,19932,19936,19940,19946,19950,19963,19967,19979,19983,19992,20005,20009,20013,20019,20023,20036,20040,20045,20061,20065,20070,20079,20092,20096,20102,20106,20111,20119,20123,20128,20132,20140,20144,20149,20154,20159,20164,20169,20173,20178,20183,20188,20193,20197,20202,20207,20223,20235,20240,20244,20249,20254,20259,20263,20268,20282,20295,20299,20307,20311,20317,20323,20331],{"__ignoreMap":66},[84,19881,19882,19884],{"class":86,"line":87},[84,19883,3130],{"class":129},[84,19885,3133],{"class":158},[84,19887,19888,19890,19892,19894],{"class":86,"line":98},[84,19889,3138],{"class":129},[84,19891,3141],{"class":129},[84,19893,3144],{"class":90},[84,19895,2471],{"class":154},[84,19897,19898],{"class":86,"line":106},[84,19899,19900],{"class":1378},"\u002F\u002F1.构造函数的分类及调用\n",[84,19902,19903],{"class":86,"line":112},[84,19904,19905],{"class":1378},"\u002F\u002F分类\n",[84,19907,19908],{"class":86,"line":425},[84,19909,19910],{"class":1378},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[84,19912,19913],{"class":86,"line":2395},[84,19914,19915],{"class":1378},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[84,19917,19918],{"class":86,"line":2401},[84,19919,3578],{"emptyLinePlaceholder":1252},[84,19921,19922,19924,19926],{"class":86,"line":2492},[84,19923,15864],{"class":129},[84,19925,16739],{"class":90},[84,19927,3852],{"class":154},[84,19929,19930],{"class":86,"line":2498},[84,19931,2727],{"class":154},[84,19933,19934],{"class":86,"line":2510},[84,19935,15886],{"class":129},[84,19937,19938],{"class":86,"line":2793},[84,19939,19684],{"class":1378},[84,19941,19942,19944],{"class":86,"line":2798},[84,19943,19689],{"class":90},[84,19945,183],{"class":154},[84,19947,19948],{"class":86,"line":2804},[84,19949,3209],{"class":154},[84,19951,19952,19954,19956,19959,19961],{"class":86,"line":2809},[84,19953,4629],{"class":154},[84,19955,2352],{"class":129},[84,19957,19958],{"class":158},"\"Person构造函数无参构造\"",[84,19960,2352],{"class":129},[84,19962,2374],{"class":154},[84,19964,19965],{"class":86,"line":2823},[84,19966,3365],{"class":154},[84,19968,19969,19971,19973,19975,19977],{"class":86,"line":2828},[84,19970,19689],{"class":90},[84,19972,155],{"class":154},[84,19974,1327],{"class":129},[84,19976,2579],{"class":928},[84,19978,162],{"class":154},[84,19980,19981],{"class":86,"line":2834},[84,19982,3209],{"class":154},[84,19984,19985,19988,19990],{"class":86,"line":2855},[84,19986,19987],{"class":154},"        age",[84,19989,867],{"class":129},[84,19991,7370],{"class":154},[84,19993,19994,19996,19998,20001,20003],{"class":86,"line":2860},[84,19995,4629],{"class":154},[84,19997,2352],{"class":129},[84,19999,20000],{"class":158},"\"Person构造函数有参构造\"",[84,20002,2352],{"class":129},[84,20004,2374],{"class":154},[84,20006,20007],{"class":86,"line":2874},[84,20008,3365],{"class":154},[84,20010,20011],{"class":86,"line":2879},[84,20012,19717],{"class":1378},[84,20014,20015,20017],{"class":86,"line":2908},[84,20016,19722],{"class":90},[84,20018,183],{"class":154},[84,20020,20021],{"class":86,"line":2913},[84,20022,3209],{"class":154},[84,20024,20025,20027,20029,20032,20034],{"class":86,"line":2930},[84,20026,4629],{"class":154},[84,20028,2352],{"class":129},[84,20030,20031],{"class":158},"\"Person析构函数被调用\"",[84,20033,2352],{"class":129},[84,20035,2374],{"class":154},[84,20037,20038],{"class":86,"line":2935},[84,20039,3365],{"class":154},[84,20041,20042],{"class":86,"line":2940},[84,20043,20044],{"class":1378},"    \u002F\u002F拷贝构造函数\n",[84,20046,20047,20049,20051,20053,20055,20057,20059],{"class":86,"line":2945},[84,20048,19689],{"class":90},[84,20050,155],{"class":154},[84,20052,7964],{"class":129},[84,20054,16739],{"class":90},[84,20056,11756],{"class":129},[84,20058,19],{"class":928},[84,20060,162],{"class":154},[84,20062,20063],{"class":86,"line":2959},[84,20064,3209],{"class":154},[84,20066,20067],{"class":86,"line":2964},[84,20068,20069],{"class":1378},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[84,20071,20072,20074,20076],{"class":86,"line":3755},[84,20073,19987],{"class":154},[84,20075,867],{"class":129},[84,20077,20078],{"class":154},"p.age;\n",[84,20080,20081,20083,20085,20088,20090],{"class":86,"line":3769},[84,20082,4629],{"class":154},[84,20084,2352],{"class":129},[84,20086,20087],{"class":158},"\"Person拷贝构造函数被调用\"",[84,20089,2352],{"class":129},[84,20091,2374],{"class":154},[84,20093,20094],{"class":86,"line":3777},[84,20095,3365],{"class":154},[84,20097,20098,20100],{"class":86,"line":3782},[84,20099,3164],{"class":129},[84,20101,8969],{"class":154},[84,20103,20104],{"class":86,"line":3788},[84,20105,5173],{"class":154},[84,20107,20108],{"class":86,"line":3794},[84,20109,20110],{"class":1378},"\u002F\u002F调用\n",[84,20112,20113,20115,20117],{"class":86,"line":3799},[84,20114,6538],{"class":129},[84,20116,6762],{"class":90},[84,20118,183],{"class":154},[84,20120,20121],{"class":86,"line":9120},[84,20122,2727],{"class":154},[84,20124,20125],{"class":86,"line":9144},[84,20126,20127],{"class":1378},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[84,20129,20130],{"class":86,"line":9149},[84,20131,2746],{"class":154},[84,20133,20134,20136,20138],{"class":86,"line":9155},[84,20135,6538],{"class":129},[84,20137,6831],{"class":90},[84,20139,183],{"class":154},[84,20141,20142],{"class":86,"line":9182},[84,20143,2727],{"class":154},[84,20145,20146],{"class":86,"line":9187},[84,20147,20148],{"class":1378},"    \u002F\u002F1.括号法\n",[84,20150,20151],{"class":86,"line":9193},[84,20152,20153],{"class":1378},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[84,20155,20156],{"class":86,"line":9205},[84,20157,20158],{"class":1378},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[84,20160,20161],{"class":86,"line":9217},[84,20162,20163],{"class":1378},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[84,20165,20166],{"class":86,"line":9229},[84,20167,20168],{"class":1378},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[84,20170,20171],{"class":86,"line":10888},[84,20172,3578],{"emptyLinePlaceholder":1252},[84,20174,20175],{"class":86,"line":10913},[84,20176,20177],{"class":1378},"    \u002F\u002F注意事项\n",[84,20179,20180],{"class":86,"line":10936},[84,20181,20182],{"class":1378},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[84,20184,20185],{"class":86,"line":10960},[84,20186,20187],{"class":1378},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[84,20189,20190],{"class":86,"line":10965},[84,20191,20192],{"class":1378},"    \u002F\u002F Person p4();\n",[84,20194,20195],{"class":86,"line":10970},[84,20196,3578],{"emptyLinePlaceholder":1252},[84,20198,20199],{"class":86,"line":10975},[84,20200,20201],{"class":1378},"    \u002F\u002F2.显示法\n",[84,20203,20204],{"class":86,"line":10984},[84,20205,20206],{"class":154},"    Person p1;\n",[84,20208,20209,20212,20214,20217,20219,20221],{"class":86,"line":10989},[84,20210,20211],{"class":154},"    Person p2",[84,20213,867],{"class":129},[84,20215,20216],{"class":90},"Person",[84,20218,155],{"class":154},[84,20220,1756],{"class":94},[84,20222,3897],{"class":154},[84,20224,20225,20228,20230,20232],{"class":86,"line":10995},[84,20226,20227],{"class":154},"    Person p3",[84,20229,867],{"class":129},[84,20231,20216],{"class":90},[84,20233,20234],{"class":154},"(p2);\n",[84,20236,20237],{"class":86,"line":11016},[84,20238,20239],{"class":1378},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[84,20241,20242],{"class":86,"line":11022},[84,20243,3578],{"emptyLinePlaceholder":1252},[84,20245,20246],{"class":86,"line":11036},[84,20247,20248],{"class":1378},"    \u002F\u002F 注意事项2\n",[84,20250,20251],{"class":86,"line":11042},[84,20252,20253],{"class":1378},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[84,20255,20256],{"class":86,"line":11069},[84,20257,20258],{"class":1378},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[84,20260,20261],{"class":86,"line":11078},[84,20262,3578],{"emptyLinePlaceholder":1252},[84,20264,20265],{"class":86,"line":11084},[84,20266,20267],{"class":1378},"    \u002F\u002F3.隐士转换法\n",[84,20269,20270,20273,20275,20277,20279],{"class":86,"line":11092},[84,20271,20272],{"class":154},"    Person p4",[84,20274,867],{"class":129},[84,20276,1756],{"class":94},[84,20278,1375],{"class":154},[84,20280,20281],{"class":1378},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[84,20283,20284,20287,20289,20292],{"class":86,"line":11097},[84,20285,20286],{"class":154},"    Person p5",[84,20288,867],{"class":129},[84,20290,20291],{"class":154},"p4;",[84,20293,20294],{"class":1378}," \u002F\u002F 这里会调用拷贝构造函数\n",[84,20296,20297],{"class":86,"line":17774},[84,20298,2746],{"class":154},[84,20300,20301,20303,20305],{"class":86,"line":17780},[84,20302,1327],{"class":129},[84,20304,3153],{"class":90},[84,20306,183],{"class":154},[84,20308,20309],{"class":86,"line":17803},[84,20310,2727],{"class":154},[84,20312,20313,20315],{"class":86,"line":17809},[84,20314,6807],{"class":90},[84,20316,6810],{"class":154},[84,20318,20319,20321],{"class":86,"line":17832},[84,20320,6876],{"class":90},[84,20322,6810],{"class":154},[84,20324,20325,20327,20329],{"class":86,"line":17846},[84,20326,5268],{"class":129},[84,20328,5271],{"class":94},[84,20330,2471],{"class":154},[84,20332,20333],{"class":86,"line":17866},[84,20334,2746],{"class":154},[19,20336,20337,20340],{},[1464,20338,20339],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[198,20342,20344],{"id":20343},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20346,20347],{},"C++中拷贝构造函数调用时机通常有三种情况",[2315,20349,20350,20353,20356],{},[29,20351,20352],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,20354,20355],{},"值传递的方式给函数参数传值",[29,20357,20358],{},"以值方式返回局部对象",[60,20360,20362],{"className":1313,"code":20361,"language":1315,"meta":66,"style":66},"#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",[39,20363,20364,20370,20380,20384,20389,20393,20398,20403,20408,20414,20418,20422,20428,20432,20445,20449,20454,20466,20470,20478,20491,20495,20499,20515,20519,20528,20541,20545,20551,20555,20567,20571,20577,20581,20585,20593,20597,20610,20618,20636,20640,20645,20650,20665,20669,20682,20686,20694,20698,20702,20710,20714,20719,20728,20732,20736,20761,20771,20775,20783,20787,20798,20823,20827,20831,20835,20843,20847,20852,20857,20864,20869,20874,20879,20884,20888,20893,20897,20902,20906,20911,20916,20920,20924,20929,20934,20942],{"__ignoreMap":66},[84,20365,20366,20368],{"class":86,"line":87},[84,20367,3130],{"class":129},[84,20369,3133],{"class":158},[84,20371,20372,20374,20376,20378],{"class":86,"line":98},[84,20373,3138],{"class":129},[84,20375,3141],{"class":129},[84,20377,3144],{"class":90},[84,20379,2471],{"class":154},[84,20381,20382],{"class":86,"line":106},[84,20383,3578],{"emptyLinePlaceholder":1252},[84,20385,20386],{"class":86,"line":112},[84,20387,20388],{"class":1378},"\u002F\u002F拷贝构造函数调用时机\n",[84,20390,20391],{"class":86,"line":425},[84,20392,3578],{"emptyLinePlaceholder":1252},[84,20394,20395],{"class":86,"line":2395},[84,20396,20397],{"class":1378},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[84,20399,20400],{"class":86,"line":2401},[84,20401,20402],{"class":1378},"\u002F\u002F2.值传递的方式给函数参数传值\n",[84,20404,20405],{"class":86,"line":2492},[84,20406,20407],{"class":1378},"\u002F\u002F3.以值方式返回局部对象\n",[84,20409,20410,20412],{"class":86,"line":2498},[84,20411,15864],{"class":129},[84,20413,16341],{"class":90},[84,20415,20416],{"class":86,"line":2510},[84,20417,2727],{"class":154},[84,20419,20420],{"class":86,"line":2793},[84,20421,15886],{"class":129},[84,20423,20424,20426],{"class":86,"line":2798},[84,20425,19689],{"class":90},[84,20427,183],{"class":154},[84,20429,20430],{"class":86,"line":2804},[84,20431,3209],{"class":154},[84,20433,20434,20436,20438,20441,20443],{"class":86,"line":2809},[84,20435,10841],{"class":154},[84,20437,2352],{"class":129},[84,20439,20440],{"class":158}," \"Person的默认构造函数调用\"",[84,20442,2625],{"class":129},[84,20444,10012],{"class":154},[84,20446,20447],{"class":86,"line":2823},[84,20448,3365],{"class":154},[84,20450,20451],{"class":86,"line":2828},[84,20452,20453],{"class":1378},"    \u002F\u002F有参构造\n",[84,20455,20456,20458,20460,20462,20464],{"class":86,"line":2834},[84,20457,19689],{"class":90},[84,20459,155],{"class":154},[84,20461,1327],{"class":129},[84,20463,16859],{"class":928},[84,20465,162],{"class":154},[84,20467,20468],{"class":86,"line":2855},[84,20469,3209],{"class":154},[84,20471,20472,20474,20476],{"class":86,"line":2860},[84,20473,16913],{"class":154},[84,20475,867],{"class":129},[84,20477,8969],{"class":154},[84,20479,20480,20482,20484,20487,20489],{"class":86,"line":2874},[84,20481,10841],{"class":154},[84,20483,2352],{"class":129},[84,20485,20486],{"class":158}," \"Person的有参构造函数调用\"",[84,20488,2625],{"class":129},[84,20490,10012],{"class":154},[84,20492,20493],{"class":86,"line":2879},[84,20494,3365],{"class":154},[84,20496,20497],{"class":86,"line":2908},[84,20498,20044],{"class":1378},[84,20500,20501,20503,20505,20507,20509,20511,20513],{"class":86,"line":2913},[84,20502,19689],{"class":90},[84,20504,155],{"class":154},[84,20506,7964],{"class":129},[84,20508,16739],{"class":90},[84,20510,11756],{"class":129},[84,20512,19],{"class":928},[84,20514,162],{"class":154},[84,20516,20517],{"class":86,"line":2930},[84,20518,3209],{"class":154},[84,20520,20521,20523,20525],{"class":86,"line":2935},[84,20522,16913],{"class":154},[84,20524,867],{"class":129},[84,20526,20527],{"class":154}," p.m_Age;\n",[84,20529,20530,20532,20534,20537,20539],{"class":86,"line":2940},[84,20531,10841],{"class":154},[84,20533,2352],{"class":129},[84,20535,20536],{"class":158}," \"Person的拷贝构造函数调用\"",[84,20538,2625],{"class":129},[84,20540,10012],{"class":154},[84,20542,20543],{"class":86,"line":2945},[84,20544,3365],{"class":154},[84,20546,20547,20549],{"class":86,"line":2959},[84,20548,19722],{"class":90},[84,20550,183],{"class":154},[84,20552,20553],{"class":86,"line":2964},[84,20554,3209],{"class":154},[84,20556,20557,20559,20561,20563,20565],{"class":86,"line":3755},[84,20558,10841],{"class":154},[84,20560,2352],{"class":129},[84,20562,19737],{"class":158},[84,20564,2625],{"class":129},[84,20566,10012],{"class":154},[84,20568,20569],{"class":86,"line":3769},[84,20570,3365],{"class":154},[84,20572,20573,20575],{"class":86,"line":3777},[84,20574,3164],{"class":129},[84,20576,16836],{"class":154},[84,20578,20579],{"class":86,"line":3782},[84,20580,5173],{"class":154},[84,20582,20583],{"class":86,"line":3788},[84,20584,20397],{"class":1378},[84,20586,20587,20589,20591],{"class":86,"line":3794},[84,20588,6538],{"class":129},[84,20590,6762],{"class":90},[84,20592,183],{"class":154},[84,20594,20595],{"class":86,"line":3799},[84,20596,2727],{"class":154},[84,20598,20599,20602,20604,20606,20608],{"class":86,"line":9120},[84,20600,20601],{"class":154},"    Person ",[84,20603,8302],{"class":90},[84,20605,155],{"class":154},[84,20607,2008],{"class":94},[84,20609,3897],{"class":154},[84,20611,20612,20614,20616],{"class":86,"line":9144},[84,20613,20601],{"class":154},[84,20615,8205],{"class":90},[84,20617,18685],{"class":154},[84,20619,20620,20622,20624,20627,20629,20632,20634],{"class":86,"line":9149},[84,20621,2732],{"class":154},[84,20623,2352],{"class":129},[84,20625,20626],{"class":158},"\"P2的年龄为：\"",[84,20628,2352],{"class":129},[84,20630,20631],{"class":154},"p2.m_Age",[84,20633,2352],{"class":129},[84,20635,2374],{"class":154},[84,20637,20638],{"class":86,"line":9155},[84,20639,2746],{"class":154},[84,20641,20642],{"class":86,"line":9182},[84,20643,20644],{"class":1378},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[84,20646,20647],{"class":86,"line":9187},[84,20648,20649],{"class":1378},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[84,20651,20652,20654,20657,20659,20661,20663],{"class":86,"line":9193},[84,20653,6538],{"class":129},[84,20655,20656],{"class":90}," doWork",[84,20658,155],{"class":154},[84,20660,20216],{"class":90},[84,20662,7997],{"class":928},[84,20664,162],{"class":154},[84,20666,20667],{"class":86,"line":9205},[84,20668,2727],{"class":154},[84,20670,20671,20673,20675,20678,20680],{"class":86,"line":9217},[84,20672,7701],{"class":154},[84,20674,2352],{"class":129},[84,20676,20677],{"class":158}," \"doWork函数调用\"",[84,20679,2625],{"class":129},[84,20681,10012],{"class":154},[84,20683,20684],{"class":86,"line":9229},[84,20685,2746],{"class":154},[84,20687,20688,20690,20692],{"class":86,"line":10888},[84,20689,6538],{"class":129},[84,20691,6831],{"class":90},[84,20693,183],{"class":154},[84,20695,20696],{"class":86,"line":10913},[84,20697,2727],{"class":154},[84,20699,20700],{"class":86,"line":10936},[84,20701,16483],{"class":154},[84,20703,20704,20707],{"class":86,"line":10960},[84,20705,20706],{"class":90},"    doWork",[84,20708,20709],{"class":154},"(p);\n",[84,20711,20712],{"class":86,"line":10965},[84,20713,2746],{"class":154},[84,20715,20716],{"class":86,"line":10970},[84,20717,20718],{"class":1378},"\u002F\u002F 3.以值方式返回局部对象\n",[84,20720,20721,20723,20726],{"class":86,"line":10975},[84,20722,20216],{"class":90},[84,20724,20725],{"class":90}," doWork2",[84,20727,183],{"class":154},[84,20729,20730],{"class":86,"line":10984},[84,20731,2727],{"class":154},[84,20733,20734],{"class":86,"line":10989},[84,20735,20206],{"class":154},[84,20737,20738,20740,20742,20744,20746,20748,20750,20752,20754,20756,20758],{"class":86,"line":10995},[84,20739,2732],{"class":154},[84,20741,2352],{"class":129},[84,20743,155],{"class":154},[84,20745,1327],{"class":129},[84,20747,997],{"class":129},[84,20749,1739],{"class":154},[84,20751,1663],{"class":129},[84,20753,8302],{"class":154},[84,20755,2352],{"class":129},[84,20757,2419],{"class":154},[84,20759,20760],{"class":1378},"\u002F\u002F打印p1的地址\n",[84,20762,20763,20765,20768],{"class":86,"line":11016},[84,20764,5268],{"class":129},[84,20766,20767],{"class":154}," p1;",[84,20769,20770],{"class":1378},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[84,20772,20773],{"class":86,"line":11022},[84,20774,2746],{"class":154},[84,20776,20777,20779,20781],{"class":86,"line":11036},[84,20778,6538],{"class":129},[84,20780,6903],{"class":90},[84,20782,183],{"class":154},[84,20784,20785],{"class":86,"line":11042},[84,20786,2727],{"class":154},[84,20788,20789,20792,20794,20796],{"class":86,"line":11069},[84,20790,20791],{"class":154},"    Person p ",[84,20793,867],{"class":129},[84,20795,20725],{"class":90},[84,20797,6810],{"class":154},[84,20799,20800,20802,20804,20806,20808,20810,20812,20814,20816,20818,20820],{"class":86,"line":11078},[84,20801,2732],{"class":154},[84,20803,2352],{"class":129},[84,20805,155],{"class":154},[84,20807,1327],{"class":129},[84,20809,997],{"class":129},[84,20811,1739],{"class":154},[84,20813,1663],{"class":129},[84,20815,19],{"class":154},[84,20817,2352],{"class":129},[84,20819,2419],{"class":154},[84,20821,20822],{"class":1378},"\u002F\u002F打印p的地址\n",[84,20824,20825],{"class":86,"line":11084},[84,20826,2746],{"class":154},[84,20828,20829],{"class":86,"line":11092},[84,20830,3578],{"emptyLinePlaceholder":1252},[84,20832,20833],{"class":86,"line":11097},[84,20834,3578],{"emptyLinePlaceholder":1252},[84,20836,20837,20839,20841],{"class":86,"line":17774},[84,20838,1327],{"class":129},[84,20840,3153],{"class":90},[84,20842,183],{"class":154},[84,20844,20845],{"class":86,"line":17780},[84,20846,2727],{"class":154},[84,20848,20849],{"class":86,"line":17803},[84,20850,20851],{"class":1378},"    \u002F\u002F test01();\n",[84,20853,20854],{"class":86,"line":17809},[84,20855,20856],{"class":1378},"    \u002F\u002F test02();\n",[84,20858,20859,20862],{"class":86,"line":17832},[84,20860,20861],{"class":90},"    test03",[84,20863,6810],{"class":154},[84,20865,20866],{"class":86,"line":17846},[84,20867,20868],{"class":1378},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[84,20870,20871],{"class":86,"line":17866},[84,20872,20873],{"class":1378},"\u002F\u002F 输出结果如下：\n",[84,20875,20876],{"class":86,"line":17872},[84,20877,20878],{"class":1378},"\u002F\u002F Person的默认构造函数调用\n",[84,20880,20881],{"class":86,"line":17883},[84,20882,20883],{"class":1378},"\u002F\u002F 0x7fffffffceec\n",[84,20885,20886],{"class":86,"line":17906},[84,20887,20883],{"class":1378},[84,20889,20890],{"class":86,"line":17928},[84,20891,20892],{"class":1378},"\u002F\u002F Person的析构函数调用\n",[84,20894,20895],{"class":86,"line":17933},[84,20896,3578],{"emptyLinePlaceholder":1252},[84,20898,20899],{"class":86,"line":17939},[84,20900,20901],{"class":1378},"\u002F\u002F 之前的输出结果如下：\n",[84,20903,20904],{"class":86,"line":17953},[84,20905,20878],{"class":1378},[84,20907,20908],{"class":86,"line":17966},[84,20909,20910],{"class":1378},"\u002F\u002F 地址\n",[84,20912,20913],{"class":86,"line":17971},[84,20914,20915],{"class":1378},"\u002F\u002F Person的拷贝构造函数调用\n",[84,20917,20918],{"class":86,"line":17985},[84,20919,20892],{"class":1378},[84,20921,20922],{"class":86,"line":17990},[84,20923,20910],{"class":1378},[84,20925,20926],{"class":86,"line":17996},[84,20927,20928],{"class":1378},"\u002F\u002F (这两次输出的地址也是不同的) \n",[84,20930,20931],{"class":86,"line":18001},[84,20932,20933],{"class":1378},"\u002F\u002F Person的析构函数调用     \n",[84,20935,20936,20938,20940],{"class":86,"line":18015},[84,20937,5268],{"class":129},[84,20939,5271],{"class":94},[84,20941,2471],{"class":154},[84,20943,20944],{"class":86,"line":18020},[84,20945,2746],{"class":154},[19,20947,20948],{},"简化版理解",[60,20950,20952],{"className":1313,"code":20951,"language":1315,"meta":66,"style":66},"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",[39,20953,20954,20962,20966,20972,20985,20996,21000,21012,21025,21033,21037,21053,21066,21075,21079,21084,21090,21103,21107,21111,21118,21122,21126,21131,21139,21143,21159,21172,21185,21189,21194,21202,21206,21210,21215,21220,21236,21244,21251,21257,21261,21265,21270,21278,21282,21286,21309,21316,21320,21324,21332,21336,21346,21368,21372,21376,21380,21388,21392,21397,21402,21408,21412,21422,21426,21434],{"__ignoreMap":66},[84,20955,20956,20958,20960],{"class":86,"line":87},[84,20957,15864],{"class":129},[84,20959,16739],{"class":90},[84,20961,16742],{"class":154},[84,20963,20964],{"class":86,"line":98},[84,20965,15886],{"class":129},[84,20967,20968,20970],{"class":86,"line":106},[84,20969,19689],{"class":90},[84,20971,12025],{"class":154},[84,20973,20974,20976,20978,20981,20983],{"class":86,"line":112},[84,20975,10841],{"class":154},[84,20977,2352],{"class":129},[84,20979,20980],{"class":158}," \"无参构造函数!\"",[84,20982,2625],{"class":129},[84,20984,10012],{"class":154},[84,20986,20987,20990,20992,20994],{"class":86,"line":425},[84,20988,20989],{"class":154},"        mAge ",[84,20991,867],{"class":129},[84,20993,5271],{"class":94},[84,20995,2471],{"class":154},[84,20997,20998],{"class":86,"line":2395},[84,20999,3365],{"class":154},[84,21001,21002,21004,21006,21008,21010],{"class":86,"line":2401},[84,21003,19689],{"class":90},[84,21005,155],{"class":154},[84,21007,1327],{"class":129},[84,21009,16859],{"class":928},[84,21011,13613],{"class":154},[84,21013,21014,21016,21018,21021,21023],{"class":86,"line":2492},[84,21015,10841],{"class":154},[84,21017,2352],{"class":129},[84,21019,21020],{"class":158}," \"有参构造函数!\"",[84,21022,2625],{"class":129},[84,21024,10012],{"class":154},[84,21026,21027,21029,21031],{"class":86,"line":2498},[84,21028,20989],{"class":154},[84,21030,867],{"class":129},[84,21032,8969],{"class":154},[84,21034,21035],{"class":86,"line":2510},[84,21036,3365],{"class":154},[84,21038,21039,21041,21043,21045,21047,21049,21051],{"class":86,"line":2793},[84,21040,19689],{"class":90},[84,21042,155],{"class":154},[84,21044,7964],{"class":129},[84,21046,16739],{"class":90},[84,21048,1663],{"class":129},[84,21050,7997],{"class":928},[84,21052,13613],{"class":154},[84,21054,21055,21057,21059,21062,21064],{"class":86,"line":2798},[84,21056,10841],{"class":154},[84,21058,2352],{"class":129},[84,21060,21061],{"class":158}," \"拷贝构造函数!\"",[84,21063,2625],{"class":129},[84,21065,10012],{"class":154},[84,21067,21068,21070,21072],{"class":86,"line":2804},[84,21069,20989],{"class":154},[84,21071,867],{"class":129},[84,21073,21074],{"class":154}," p.mAge;\n",[84,21076,21077],{"class":86,"line":2809},[84,21078,3365],{"class":154},[84,21080,21081],{"class":86,"line":2823},[84,21082,21083],{"class":1378},"    \u002F\u002F析构函数在释放内存之前调用\n",[84,21085,21086,21088],{"class":86,"line":2828},[84,21087,19722],{"class":90},[84,21089,12025],{"class":154},[84,21091,21092,21094,21096,21099,21101],{"class":86,"line":2834},[84,21093,10841],{"class":154},[84,21095,2352],{"class":129},[84,21097,21098],{"class":158}," \"析构函数!\"",[84,21100,2625],{"class":129},[84,21102,10012],{"class":154},[84,21104,21105],{"class":86,"line":2855},[84,21106,3365],{"class":154},[84,21108,21109],{"class":86,"line":2860},[84,21110,15886],{"class":129},[84,21112,21113,21115],{"class":86,"line":2874},[84,21114,3164],{"class":129},[84,21116,21117],{"class":154}," mAge;\n",[84,21119,21120],{"class":86,"line":2879},[84,21121,5173],{"class":154},[84,21123,21124],{"class":86,"line":2908},[84,21125,3578],{"emptyLinePlaceholder":1252},[84,21127,21128],{"class":86,"line":2913},[84,21129,21130],{"class":1378},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[84,21132,21133,21135,21137],{"class":86,"line":2930},[84,21134,6538],{"class":129},[84,21136,6762],{"class":90},[84,21138,12025],{"class":154},[84,21140,21141],{"class":86,"line":2935},[84,21142,3578],{"emptyLinePlaceholder":1252},[84,21144,21145,21147,21150,21152,21154,21156],{"class":86,"line":2940},[84,21146,20601],{"class":154},[84,21148,21149],{"class":90},"man",[84,21151,155],{"class":154},[84,21153,821],{"class":94},[84,21155,7139],{"class":154},[84,21157,21158],{"class":1378}," \u002F\u002Fp对象已经创建完毕\n",[84,21160,21161,21163,21166,21169],{"class":86,"line":2945},[84,21162,20601],{"class":154},[84,21164,21165],{"class":90},"newman",[84,21167,21168],{"class":154},"(man);",[84,21170,21171],{"class":1378}," \u002F\u002F调用拷贝构造函数\n",[84,21173,21174,21177,21179,21182],{"class":86,"line":2959},[84,21175,21176],{"class":154},"    Person newman2 ",[84,21178,867],{"class":129},[84,21180,21181],{"class":154}," man;",[84,21183,21184],{"class":1378}," \u002F\u002F拷贝构造\n",[84,21186,21187],{"class":86,"line":2964},[84,21188,3578],{"emptyLinePlaceholder":1252},[84,21190,21191],{"class":86,"line":3755},[84,21192,21193],{"class":1378},"    \u002F\u002FPerson newman3;\n",[84,21195,21196,21199],{"class":86,"line":3769},[84,21197,21198],{"class":1378},"    \u002F\u002Fnewman3 = man;",[84,21200,21201],{"class":1378}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[84,21203,21204],{"class":86,"line":3777},[84,21205,2746],{"class":154},[84,21207,21208],{"class":86,"line":3782},[84,21209,3578],{"emptyLinePlaceholder":1252},[84,21211,21212],{"class":86,"line":3788},[84,21213,21214],{"class":1378},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[84,21216,21217],{"class":86,"line":3794},[84,21218,21219],{"class":1378},"\u002F\u002F相当于Person p1 = p;\n",[84,21221,21222,21224,21226,21228,21230,21233],{"class":86,"line":3799},[84,21223,6538],{"class":129},[84,21225,20656],{"class":90},[84,21227,155],{"class":154},[84,21229,20216],{"class":90},[84,21231,21232],{"class":928}," p1",[84,21234,21235],{"class":154},") {}\n",[84,21237,21238,21240,21242],{"class":86,"line":9120},[84,21239,6538],{"class":129},[84,21241,6831],{"class":90},[84,21243,12025],{"class":154},[84,21245,21246,21248],{"class":86,"line":9144},[84,21247,19774],{"class":154},[84,21249,21250],{"class":1378}," \u002F\u002F无参构造函数\n",[84,21252,21253,21255],{"class":86,"line":9149},[84,21254,20706],{"class":90},[84,21256,20709],{"class":154},[84,21258,21259],{"class":86,"line":9155},[84,21260,2746],{"class":154},[84,21262,21263],{"class":86,"line":9182},[84,21264,3578],{"emptyLinePlaceholder":1252},[84,21266,21267],{"class":86,"line":9187},[84,21268,21269],{"class":1378},"\u002F\u002F3. 以值方式返回局部对象\n",[84,21271,21272,21274,21276],{"class":86,"line":9193},[84,21273,20216],{"class":90},[84,21275,20725],{"class":90},[84,21277,183],{"class":154},[84,21279,21280],{"class":86,"line":9205},[84,21281,2727],{"class":154},[84,21283,21284],{"class":86,"line":9217},[84,21285,20206],{"class":154},[84,21287,21288,21290,21292,21294,21296,21298,21300,21302,21305,21307],{"class":86,"line":9229},[84,21289,7701],{"class":154},[84,21291,2352],{"class":129},[84,21293,2839],{"class":154},[84,21295,1327],{"class":129},[84,21297,997],{"class":129},[84,21299,1739],{"class":154},[84,21301,1663],{"class":129},[84,21303,21304],{"class":154},"p1 ",[84,21306,2352],{"class":129},[84,21308,10012],{"class":154},[84,21310,21311,21313],{"class":86,"line":10888},[84,21312,5268],{"class":129},[84,21314,21315],{"class":154}," p1;\n",[84,21317,21318],{"class":86,"line":10913},[84,21319,2746],{"class":154},[84,21321,21322],{"class":86,"line":10936},[84,21323,3578],{"emptyLinePlaceholder":1252},[84,21325,21326,21328,21330],{"class":86,"line":10960},[84,21327,6538],{"class":129},[84,21329,6903],{"class":90},[84,21331,183],{"class":154},[84,21333,21334],{"class":86,"line":10965},[84,21335,2727],{"class":154},[84,21337,21338,21340,21342,21344],{"class":86,"line":10970},[84,21339,20791],{"class":154},[84,21341,867],{"class":129},[84,21343,20725],{"class":90},[84,21345,6810],{"class":154},[84,21347,21348,21350,21352,21354,21356,21358,21360,21362,21364,21366],{"class":86,"line":10975},[84,21349,7701],{"class":154},[84,21351,2352],{"class":129},[84,21353,2839],{"class":154},[84,21355,1327],{"class":129},[84,21357,997],{"class":129},[84,21359,1739],{"class":154},[84,21361,1663],{"class":129},[84,21363,12620],{"class":154},[84,21365,2352],{"class":129},[84,21367,10012],{"class":154},[84,21369,21370],{"class":86,"line":10984},[84,21371,2746],{"class":154},[84,21373,21374],{"class":86,"line":10989},[84,21375,3578],{"emptyLinePlaceholder":1252},[84,21377,21378],{"class":86,"line":10995},[84,21379,3578],{"emptyLinePlaceholder":1252},[84,21381,21382,21384,21386],{"class":86,"line":11016},[84,21383,1327],{"class":129},[84,21385,3153],{"class":90},[84,21387,12025],{"class":154},[84,21389,21390],{"class":86,"line":11022},[84,21391,3578],{"emptyLinePlaceholder":1252},[84,21393,21394],{"class":86,"line":11036},[84,21395,21396],{"class":1378},"    \u002F\u002Ftest01();\n",[84,21398,21399],{"class":86,"line":11042},[84,21400,21401],{"class":1378},"    \u002F\u002Ftest02();\n",[84,21403,21404,21406],{"class":86,"line":11069},[84,21405,20861],{"class":90},[84,21407,6810],{"class":154},[84,21409,21410],{"class":86,"line":11078},[84,21411,3578],{"emptyLinePlaceholder":1252},[84,21413,21414,21416,21418,21420],{"class":86,"line":11084},[84,21415,3481],{"class":90},[84,21417,155],{"class":154},[84,21419,3486],{"class":158},[84,21421,3897],{"class":154},[84,21423,21424],{"class":86,"line":11092},[84,21425,3578],{"emptyLinePlaceholder":1252},[84,21427,21428,21430,21432],{"class":86,"line":11097},[84,21429,5268],{"class":129},[84,21431,5271],{"class":94},[84,21433,2471],{"class":154},[84,21435,21436],{"class":86,"line":17774},[84,21437,2746],{"class":154},[198,21439,21441],{"id":21440},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21443,21444],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21446,21447],{},"1．默认构造函数(无参，函数体为空)",[19,21449,21450],{},"2．默认析构函数(无参，函数体为空)",[19,21452,21453],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21455,21456],{},"构造函数调用规则如下：",[2315,21458,21459,21462],{},[29,21460,21461],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,21463,21464],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[60,21466,21468],{"className":1313,"code":21467,"language":1315,"meta":66,"style":66},"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",[39,21469,21470,21478,21482,21487,21493,21505,21509,21514,21526,21535,21547,21551,21555,21571,21580,21592,21596,21600,21606,21618,21622,21626,21632,21636,21640,21648,21652,21664,21669,21677,21681,21699,21703,21707,21715,21719,21724,21732,21747,21760,21764,21769,21776,21792,21805,21809,21813,21821,21825,21831,21835,21845,21849,21857],{"__ignoreMap":66},[84,21471,21472,21474,21476],{"class":86,"line":87},[84,21473,15864],{"class":129},[84,21475,16739],{"class":90},[84,21477,16742],{"class":154},[84,21479,21480],{"class":86,"line":98},[84,21481,15886],{"class":129},[84,21483,21484],{"class":86,"line":106},[84,21485,21486],{"class":1378},"    \u002F\u002F无参（默认）构造函数\n",[84,21488,21489,21491],{"class":86,"line":112},[84,21490,19689],{"class":90},[84,21492,12025],{"class":154},[84,21494,21495,21497,21499,21501,21503],{"class":86,"line":425},[84,21496,10841],{"class":154},[84,21498,2352],{"class":129},[84,21500,20980],{"class":158},[84,21502,2625],{"class":129},[84,21504,10012],{"class":154},[84,21506,21507],{"class":86,"line":2395},[84,21508,3365],{"class":154},[84,21510,21511],{"class":86,"line":2401},[84,21512,21513],{"class":1378},"    \u002F\u002F有参构造函数\n",[84,21515,21516,21518,21520,21522,21524],{"class":86,"line":2492},[84,21517,19689],{"class":90},[84,21519,155],{"class":154},[84,21521,1327],{"class":129},[84,21523,2579],{"class":928},[84,21525,13613],{"class":154},[84,21527,21528,21531,21533],{"class":86,"line":2498},[84,21529,21530],{"class":154},"        age ",[84,21532,867],{"class":129},[84,21534,2613],{"class":154},[84,21536,21537,21539,21541,21543,21545],{"class":86,"line":2510},[84,21538,10841],{"class":154},[84,21540,2352],{"class":129},[84,21542,21020],{"class":158},[84,21544,2625],{"class":129},[84,21546,10012],{"class":154},[84,21548,21549],{"class":86,"line":2793},[84,21550,3365],{"class":154},[84,21552,21553],{"class":86,"line":2798},[84,21554,20044],{"class":1378},[84,21556,21557,21559,21561,21563,21565,21567,21569],{"class":86,"line":2804},[84,21558,19689],{"class":90},[84,21560,155],{"class":154},[84,21562,7964],{"class":129},[84,21564,16739],{"class":90},[84,21566,1663],{"class":129},[84,21568,7997],{"class":928},[84,21570,13613],{"class":154},[84,21572,21573,21575,21577],{"class":86,"line":2809},[84,21574,21530],{"class":154},[84,21576,867],{"class":129},[84,21578,21579],{"class":154}," p.age;\n",[84,21581,21582,21584,21586,21588,21590],{"class":86,"line":2823},[84,21583,10841],{"class":154},[84,21585,2352],{"class":129},[84,21587,21061],{"class":158},[84,21589,2625],{"class":129},[84,21591,10012],{"class":154},[84,21593,21594],{"class":86,"line":2828},[84,21595,3365],{"class":154},[84,21597,21598],{"class":86,"line":2834},[84,21599,19717],{"class":1378},[84,21601,21602,21604],{"class":86,"line":2855},[84,21603,19722],{"class":90},[84,21605,12025],{"class":154},[84,21607,21608,21610,21612,21614,21616],{"class":86,"line":2860},[84,21609,10841],{"class":154},[84,21611,2352],{"class":129},[84,21613,21098],{"class":158},[84,21615,2625],{"class":129},[84,21617,10012],{"class":154},[84,21619,21620],{"class":86,"line":2874},[84,21621,3365],{"class":154},[84,21623,21624],{"class":86,"line":2879},[84,21625,15886],{"class":129},[84,21627,21628,21630],{"class":86,"line":2908},[84,21629,3164],{"class":129},[84,21631,8969],{"class":154},[84,21633,21634],{"class":86,"line":2913},[84,21635,5173],{"class":154},[84,21637,21638],{"class":86,"line":2930},[84,21639,3578],{"emptyLinePlaceholder":1252},[84,21641,21642,21644,21646],{"class":86,"line":2935},[84,21643,6538],{"class":129},[84,21645,6762],{"class":90},[84,21647,183],{"class":154},[84,21649,21650],{"class":86,"line":2940},[84,21651,2727],{"class":154},[84,21653,21654,21656,21658,21660,21662],{"class":86,"line":2945},[84,21655,20601],{"class":154},[84,21657,8302],{"class":90},[84,21659,155],{"class":154},[84,21661,849],{"class":94},[84,21663,3897],{"class":154},[84,21665,21666],{"class":86,"line":2959},[84,21667,21668],{"class":1378},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[84,21670,21671,21673,21675],{"class":86,"line":2964},[84,21672,20601],{"class":154},[84,21674,8205],{"class":90},[84,21676,18685],{"class":154},[84,21678,21679],{"class":86,"line":3755},[84,21680,3578],{"emptyLinePlaceholder":1252},[84,21682,21683,21685,21687,21690,21692,21695,21697],{"class":86,"line":3769},[84,21684,7701],{"class":154},[84,21686,2352],{"class":129},[84,21688,21689],{"class":158}," \"p2的年龄为： \"",[84,21691,2625],{"class":129},[84,21693,21694],{"class":154}," p2.age ",[84,21696,2352],{"class":129},[84,21698,10012],{"class":154},[84,21700,21701],{"class":86,"line":3777},[84,21702,2746],{"class":154},[84,21704,21705],{"class":86,"line":3782},[84,21706,3578],{"emptyLinePlaceholder":1252},[84,21708,21709,21711,21713],{"class":86,"line":3788},[84,21710,6538],{"class":129},[84,21712,6831],{"class":90},[84,21714,183],{"class":154},[84,21716,21717],{"class":86,"line":3794},[84,21718,2727],{"class":154},[84,21720,21721],{"class":86,"line":3799},[84,21722,21723],{"class":1378},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[84,21725,21726,21729],{"class":86,"line":9120},[84,21727,21728],{"class":154},"    Person p1;",[84,21730,21731],{"class":1378}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[84,21733,21734,21736,21738,21740,21742,21744],{"class":86,"line":9144},[84,21735,20601],{"class":154},[84,21737,8205],{"class":90},[84,21739,155],{"class":154},[84,21741,1756],{"class":94},[84,21743,7139],{"class":154},[84,21745,21746],{"class":1378}," \u002F\u002F用户提供的有参\n",[84,21748,21749,21751,21754,21757],{"class":86,"line":9149},[84,21750,20601],{"class":154},[84,21752,21753],{"class":90},"p3",[84,21755,21756],{"class":154},"(p2);",[84,21758,21759],{"class":1378}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[84,21761,21762],{"class":86,"line":9155},[84,21763,3578],{"emptyLinePlaceholder":1252},[84,21765,21766],{"class":86,"line":9182},[84,21767,21768],{"class":1378},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[84,21770,21771,21774],{"class":86,"line":9187},[84,21772,21773],{"class":154},"    Person p4;",[84,21775,21731],{"class":1378},[84,21777,21778,21780,21783,21785,21787,21789],{"class":86,"line":9193},[84,21779,20601],{"class":154},[84,21781,21782],{"class":90},"p5",[84,21784,155],{"class":154},[84,21786,1756],{"class":94},[84,21788,7139],{"class":154},[84,21790,21791],{"class":1378}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[84,21793,21794,21796,21799,21802],{"class":86,"line":9205},[84,21795,20601],{"class":154},[84,21797,21798],{"class":90},"p6",[84,21800,21801],{"class":154},"(p5);",[84,21803,21804],{"class":1378}," \u002F\u002F用户自己提供拷贝构造\n",[84,21806,21807],{"class":86,"line":9217},[84,21808,2746],{"class":154},[84,21810,21811],{"class":86,"line":9229},[84,21812,3578],{"emptyLinePlaceholder":1252},[84,21814,21815,21817,21819],{"class":86,"line":10888},[84,21816,1327],{"class":129},[84,21818,3153],{"class":90},[84,21820,12025],{"class":154},[84,21822,21823],{"class":86,"line":10913},[84,21824,3578],{"emptyLinePlaceholder":1252},[84,21826,21827,21829],{"class":86,"line":10936},[84,21828,6807],{"class":90},[84,21830,6810],{"class":154},[84,21832,21833],{"class":86,"line":10960},[84,21834,3578],{"emptyLinePlaceholder":1252},[84,21836,21837,21839,21841,21843],{"class":86,"line":10965},[84,21838,3481],{"class":90},[84,21840,155],{"class":154},[84,21842,3486],{"class":158},[84,21844,3897],{"class":154},[84,21846,21847],{"class":86,"line":10970},[84,21848,3578],{"emptyLinePlaceholder":1252},[84,21850,21851,21853,21855],{"class":86,"line":10975},[84,21852,5268],{"class":129},[84,21854,5271],{"class":94},[84,21856,2471],{"class":154},[84,21858,21859],{"class":86,"line":10984},[84,21860,2746],{"class":154},[198,21862,21864],{"id":21863},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21866,21867],{},"浅拷贝：简单的赋值拷贝操作",[19,21869,21870],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[60,21872,21874],{"className":1313,"code":21873,"language":1315,"meta":66,"style":66},"#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",[39,21875,21876,21882,21892,21898,21902,21906,21911,21917,21921,21934,21938,21942,21949,21953,21963,21978,21991,21995,22000,22005,22021,22025,22038,22043,22048,22053,22062,22067,22082,22086,22090,22094,22100,22104,22109,22124,22128,22139,22153,22157,22166,22170,22176,22188,22192,22200,22204,22221,22252,22260,22288,22292,22296,22304,22308,22314],{"__ignoreMap":66},[84,21877,21878,21880],{"class":86,"line":87},[84,21879,3130],{"class":129},[84,21881,3133],{"class":158},[84,21883,21884,21886,21888,21890],{"class":86,"line":98},[84,21885,3138],{"class":129},[84,21887,3141],{"class":129},[84,21889,3144],{"class":90},[84,21891,2471],{"class":154},[84,21893,21894,21896],{"class":86,"line":106},[84,21895,15864],{"class":129},[84,21897,16341],{"class":90},[84,21899,21900],{"class":86,"line":112},[84,21901,2727],{"class":154},[84,21903,21904],{"class":86,"line":425},[84,21905,15886],{"class":129},[84,21907,21908],{"class":86,"line":2395},[84,21909,21910],{"class":1378},"    \u002F\u002F默认构造函数\n",[84,21912,21913,21915],{"class":86,"line":2401},[84,21914,19689],{"class":90},[84,21916,183],{"class":154},[84,21918,21919],{"class":86,"line":2492},[84,21920,3209],{"class":154},[84,21922,21923,21925,21927,21930,21932],{"class":86,"line":2498},[84,21924,4629],{"class":154},[84,21926,2352],{"class":129},[84,21928,21929],{"class":158},"\"默认构造函数\"",[84,21931,2352],{"class":129},[84,21933,2374],{"class":154},[84,21935,21936],{"class":86,"line":2510},[84,21937,3365],{"class":154},[84,21939,21940],{"class":86,"line":2793},[84,21941,21513],{"class":1378},[84,21943,21944,21946],{"class":86,"line":2798},[84,21945,19722],{"class":90},[84,21947,21948],{"class":154},"(int age,int height)\n",[84,21950,21951],{"class":86,"line":2804},[84,21952,3209],{"class":154},[84,21954,21955,21958,21960],{"class":86,"line":2809},[84,21956,21957],{"class":154},"        m_Age",[84,21959,867],{"class":129},[84,21961,21962],{"class":154},"age;\n",[84,21964,21965,21968,21970,21972,21975],{"class":86,"line":2823},[84,21966,21967],{"class":154},"        m_Height",[84,21969,12889],{"class":129},[84,21971,3560],{"class":129},[84,21973,21974],{"class":154},"(height);",[84,21976,21977],{"class":1378},"\u002F\u002F放到堆区\n",[84,21979,21980,21982,21984,21987,21989],{"class":86,"line":2828},[84,21981,4629],{"class":154},[84,21983,2352],{"class":129},[84,21985,21986],{"class":158},"\"有参构造函数\"",[84,21988,2352],{"class":129},[84,21990,2374],{"class":154},[84,21992,21993],{"class":86,"line":2834},[84,21994,3365],{"class":154},[84,21996,21997],{"class":86,"line":2855},[84,21998,21999],{"class":1378},"    \u002F\u002F深拷贝解决上述问题\n",[84,22001,22002],{"class":86,"line":2860},[84,22003,22004],{"class":1378},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[84,22006,22007,22009,22011,22013,22015,22017,22019],{"class":86,"line":2874},[84,22008,19689],{"class":90},[84,22010,155],{"class":154},[84,22012,7964],{"class":129},[84,22014,16739],{"class":90},[84,22016,11756],{"class":129},[84,22018,19],{"class":928},[84,22020,162],{"class":154},[84,22022,22023],{"class":86,"line":2879},[84,22024,3209],{"class":154},[84,22026,22027,22029,22031,22034,22036],{"class":86,"line":2908},[84,22028,4629],{"class":154},[84,22030,2352],{"class":129},[84,22032,22033],{"class":158},"\"拷贝构造函数\"",[84,22035,2352],{"class":129},[84,22037,2374],{"class":154},[84,22039,22040],{"class":86,"line":2913},[84,22041,22042],{"class":1378},"        \u002F\u002F编译器默认的写如下注释部分\n",[84,22044,22045],{"class":86,"line":2930},[84,22046,22047],{"class":1378},"        \u002F\u002Fm_Age=p.m_Age;\n",[84,22049,22050],{"class":86,"line":2935},[84,22051,22052],{"class":1378},"        \u002F\u002Fm_Height=p.m_Height;\n",[84,22054,22055,22057,22059],{"class":86,"line":2940},[84,22056,21957],{"class":154},[84,22058,867],{"class":129},[84,22060,22061],{"class":154},"p.m_Age;\n",[84,22063,22064],{"class":86,"line":2945},[84,22065,22066],{"class":1378},"        \u002F\u002F深拷贝操作\n",[84,22068,22069,22071,22073,22075,22077,22079],{"class":86,"line":2959},[84,22070,21967],{"class":154},[84,22072,12889],{"class":129},[84,22074,3560],{"class":129},[84,22076,155],{"class":154},[84,22078,1043],{"class":129},[84,22080,22081],{"class":154},"p.m_Height);\n",[84,22083,22084],{"class":86,"line":2964},[84,22085,3365],{"class":154},[84,22087,22088],{"class":86,"line":3755},[84,22089,3578],{"emptyLinePlaceholder":1252},[84,22091,22092],{"class":86,"line":3769},[84,22093,19717],{"class":1378},[84,22095,22096,22098],{"class":86,"line":3777},[84,22097,19722],{"class":90},[84,22099,183],{"class":154},[84,22101,22102],{"class":86,"line":3782},[84,22103,3209],{"class":154},[84,22105,22106],{"class":86,"line":3788},[84,22107,22108],{"class":1378},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[84,22110,22111,22113,22116,22119,22122],{"class":86,"line":3794},[84,22112,3675],{"class":129},[84,22114,22115],{"class":154},"(m_Height ",[84,22117,22118],{"class":129},"!=",[84,22120,22121],{"class":94}," NULL",[84,22123,162],{"class":154},[84,22125,22126],{"class":86,"line":3799},[84,22127,3688],{"class":154},[84,22129,22130,22133,22136],{"class":86,"line":9120},[84,22131,22132],{"class":129},"            delete",[84,22134,22135],{"class":154}," m_Height;",[84,22137,22138],{"class":1378}," \u002F\u002F释放堆区内存\n",[84,22140,22141,22144,22146,22148,22150],{"class":86,"line":9144},[84,22142,22143],{"class":154},"            m_Height",[84,22145,867],{"class":129},[84,22147,3570],{"class":94},[84,22149,1375],{"class":154},[84,22151,22152],{"class":1378}," \u002F\u002F防止野指针\n",[84,22154,22155],{"class":86,"line":9149},[84,22156,3707],{"class":154},[84,22158,22159,22161,22163],{"class":86,"line":9155},[84,22160,4629],{"class":154},[84,22162,2352],{"class":129},[84,22164,22165],{"class":158},"\"Person的析构函数调用\"\n",[84,22167,22168],{"class":86,"line":9182},[84,22169,3365],{"class":154},[84,22171,22172,22174],{"class":86,"line":9187},[84,22173,3164],{"class":129},[84,22175,16836],{"class":154},[84,22177,22178,22180,22182,22185],{"class":86,"line":9193},[84,22179,3164],{"class":129},[84,22181,997],{"class":129},[84,22183,22184],{"class":154},"m_Height;",[84,22186,22187],{"class":1378}," \u002F\u002F定义一个指针，指向身高\n",[84,22189,22190],{"class":86,"line":9205},[84,22191,5173],{"class":154},[84,22193,22194,22196,22198],{"class":86,"line":9217},[84,22195,6538],{"class":129},[84,22197,6762],{"class":90},[84,22199,183],{"class":154},[84,22201,22202],{"class":86,"line":9229},[84,22203,2727],{"class":154},[84,22205,22206,22208,22210,22212,22214,22216,22219],{"class":86,"line":10888},[84,22207,20601],{"class":154},[84,22209,8302],{"class":90},[84,22211,155],{"class":154},[84,22213,849],{"class":94},[84,22215,1688],{"class":154},[84,22217,22218],{"class":94},"160",[84,22220,3897],{"class":154},[84,22222,22223,22225,22227,22230,22232,22235,22237,22240,22242,22245,22247,22249],{"class":86,"line":10913},[84,22224,2732],{"class":154},[84,22226,2352],{"class":129},[84,22228,22229],{"class":158},"\"p1的年龄为:\"",[84,22231,2352],{"class":129},[84,22233,22234],{"class":154},"p1.m_Age",[84,22236,2352],{"class":129},[84,22238,22239],{"class":158},"\"身高为：\"",[84,22241,7592],{"class":129},[84,22243,22244],{"class":154},"p1.m_Height",[84,22246,2352],{"class":129},[84,22248,2419],{"class":154},[84,22250,22251],{"class":1378},"  \u002F\u002F18\n",[84,22253,22254,22256,22258],{"class":86,"line":10936},[84,22255,20601],{"class":154},[84,22257,8205],{"class":90},[84,22259,18685],{"class":154},[84,22261,22262,22264,22266,22269,22271,22273,22275,22277,22279,22282,22284,22286],{"class":86,"line":10960},[84,22263,2732],{"class":154},[84,22265,2352],{"class":129},[84,22267,22268],{"class":158},"\"p2的年龄为：\"",[84,22270,2352],{"class":129},[84,22272,20631],{"class":154},[84,22274,2352],{"class":129},[84,22276,22239],{"class":158},[84,22278,7592],{"class":129},[84,22280,22281],{"class":154},"p2.m_Height",[84,22283,2352],{"class":129},[84,22285,2419],{"class":154},[84,22287,22251],{"class":1378},[84,22289,22290],{"class":86,"line":10965},[84,22291,14381],{"class":154},[84,22293,22294],{"class":86,"line":10970},[84,22295,2746],{"class":154},[84,22297,22298,22300,22302],{"class":86,"line":10975},[84,22299,1327],{"class":129},[84,22301,3153],{"class":90},[84,22303,183],{"class":154},[84,22305,22306],{"class":86,"line":10984},[84,22307,2727],{"class":154},[84,22309,22310,22312],{"class":86,"line":10989},[84,22311,6807],{"class":90},[84,22313,6810],{"class":154},[84,22315,22316],{"class":86,"line":10995},[84,22317,2746],{"class":154},[19,22319,22320],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22322,22323],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22325,22326],{},[2643,22327],{"alt":66,"src":22328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22330,22331],{},"浅拷贝问题要使用深拷贝来解决",[19,22333,22334],{},[2643,22335],{"alt":66,"src":22336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22338,22339],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[198,22341,22343],{"id":22342},"_826初始化列表","8.2.6初始化列表",[19,22345,22346],{},"作用：初始化属性",[19,22348,6358],{},[60,22350,22353],{"className":22351,"code":22352,"language":65},[63],"构造函数():属性1(值1),属性2(值2).....{}\n",[39,22354,22352],{"__ignoreMap":66},[19,22356,22357],{},"例子",[60,22359,22361],{"className":1313,"code":22360,"language":1315,"meta":66,"style":66},"#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",[39,22362,22363,22369,22379,22385,22389,22394,22398,22403,22408,22413,22418,22423,22428,22432,22437,22442,22485,22494,22512,22530,22548,22552,22556,22563,22570,22577,22581,22585,22593,22597,22601,22621,22630,22634,22638,22648,22652,22660],{"__ignoreMap":66},[84,22364,22365,22367],{"class":86,"line":87},[84,22366,3130],{"class":129},[84,22368,3133],{"class":158},[84,22370,22371,22373,22375,22377],{"class":86,"line":98},[84,22372,3138],{"class":129},[84,22374,3141],{"class":129},[84,22376,3144],{"class":90},[84,22378,2471],{"class":154},[84,22380,22381,22383],{"class":86,"line":106},[84,22382,15864],{"class":129},[84,22384,16341],{"class":90},[84,22386,22387],{"class":86,"line":112},[84,22388,2727],{"class":154},[84,22390,22391],{"class":86,"line":425},[84,22392,22393],{"class":129},"    public:\n",[84,22395,22396],{"class":86,"line":2395},[84,22397,3578],{"emptyLinePlaceholder":1252},[84,22399,22400],{"class":86,"line":2401},[84,22401,22402],{"class":1378},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[84,22404,22405],{"class":86,"line":2492},[84,22406,22407],{"class":1378},"    \u002F\u002FPerson(int a, int b, int c) {\n",[84,22409,22410],{"class":86,"line":2498},[84,22411,22412],{"class":1378},"    \u002F\u002F  m_A = a;\n",[84,22414,22415],{"class":86,"line":2510},[84,22416,22417],{"class":1378},"    \u002F\u002F  m_B = b;\n",[84,22419,22420],{"class":86,"line":2793},[84,22421,22422],{"class":1378},"    \u002F\u002F  m_C = c;\n",[84,22424,22425],{"class":86,"line":2798},[84,22426,22427],{"class":1378},"    \u002F\u002F}\n",[84,22429,22430],{"class":86,"line":2804},[84,22431,3578],{"emptyLinePlaceholder":1252},[84,22433,22434],{"class":86,"line":2809},[84,22435,22436],{"class":1378},"    \u002F\u002F初始化列表方式初始化\n",[84,22438,22439],{"class":86,"line":2823},[84,22440,22441],{"class":1378},"    \u002F\u002F使用有参构造函数\n",[84,22443,22444,22446,22448,22450,22452,22454,22456,22458,22460,22462,22464,22467,22470,22473,22476,22479,22482],{"class":86,"line":2828},[84,22445,19689],{"class":90},[84,22447,155],{"class":154},[84,22449,1327],{"class":129},[84,22451,2579],{"class":928},[84,22453,846],{"class":154},[84,22455,1327],{"class":129},[84,22457,4011],{"class":928},[84,22459,846],{"class":154},[84,22461,1327],{"class":129},[84,22463,4027],{"class":928},[84,22465,22466],{"class":154},") :",[84,22468,22469],{"class":90},"m_A",[84,22471,22472],{"class":154},"(a), ",[84,22474,22475],{"class":90},"m_B",[84,22477,22478],{"class":154},"(b), ",[84,22480,22481],{"class":90},"m_C",[84,22483,22484],{"class":154},"(c) {}\n",[84,22486,22487,22489,22492],{"class":86,"line":2834},[84,22488,16079],{"class":129},[84,22490,22491],{"class":90}," PrintPerson",[84,22493,12025],{"class":154},[84,22495,22496,22498,22500,22503,22505,22508,22510],{"class":86,"line":2855},[84,22497,10841],{"class":154},[84,22499,2352],{"class":129},[84,22501,22502],{"class":158}," \"mA:\"",[84,22504,2625],{"class":129},[84,22506,22507],{"class":154}," m_A ",[84,22509,2352],{"class":129},[84,22511,10012],{"class":154},[84,22513,22514,22516,22518,22521,22523,22526,22528],{"class":86,"line":2860},[84,22515,10841],{"class":154},[84,22517,2352],{"class":129},[84,22519,22520],{"class":158}," \"mB:\"",[84,22522,2625],{"class":129},[84,22524,22525],{"class":154}," m_B ",[84,22527,2352],{"class":129},[84,22529,10012],{"class":154},[84,22531,22532,22534,22536,22539,22541,22544,22546],{"class":86,"line":2874},[84,22533,10841],{"class":154},[84,22535,2352],{"class":129},[84,22537,22538],{"class":158}," \"mC:\"",[84,22540,2625],{"class":129},[84,22542,22543],{"class":154}," m_C ",[84,22545,2352],{"class":129},[84,22547,10012],{"class":154},[84,22549,22550],{"class":86,"line":2879},[84,22551,3365],{"class":154},[84,22553,22554],{"class":86,"line":2908},[84,22555,16392],{"class":129},[84,22557,22558,22560],{"class":86,"line":2913},[84,22559,3164],{"class":129},[84,22561,22562],{"class":154}," m_A;\n",[84,22564,22565,22567],{"class":86,"line":2930},[84,22566,3164],{"class":129},[84,22568,22569],{"class":154}," m_B;\n",[84,22571,22572,22574],{"class":86,"line":2935},[84,22573,3164],{"class":129},[84,22575,22576],{"class":154}," m_C;\n",[84,22578,22579],{"class":86,"line":2940},[84,22580,5173],{"class":154},[84,22582,22583],{"class":86,"line":2945},[84,22584,3578],{"emptyLinePlaceholder":1252},[84,22586,22587,22589,22591],{"class":86,"line":2959},[84,22588,1327],{"class":129},[84,22590,3153],{"class":90},[84,22592,7151],{"class":154},[84,22594,22595],{"class":86,"line":2964},[84,22596,2727],{"class":154},[84,22598,22599],{"class":86,"line":3755},[84,22600,3578],{"emptyLinePlaceholder":1252},[84,22602,22603,22605,22607,22609,22611,22613,22615,22617,22619],{"class":86,"line":3769},[84,22604,20601],{"class":154},[84,22606,19],{"class":90},[84,22608,155],{"class":154},[84,22610,1529],{"class":94},[84,22612,846],{"class":154},[84,22614,1397],{"class":94},[84,22616,846],{"class":154},[84,22618,1391],{"class":94},[84,22620,3897],{"class":154},[84,22622,22623,22625,22628],{"class":86,"line":3777},[84,22624,17036],{"class":154},[84,22626,22627],{"class":90},"PrintPerson",[84,22629,6810],{"class":154},[84,22631,22632],{"class":86,"line":3782},[84,22633,3578],{"emptyLinePlaceholder":1252},[84,22635,22636],{"class":86,"line":3788},[84,22637,3578],{"emptyLinePlaceholder":1252},[84,22639,22640,22642,22644,22646],{"class":86,"line":3794},[84,22641,3481],{"class":90},[84,22643,155],{"class":154},[84,22645,3486],{"class":158},[84,22647,3897],{"class":154},[84,22649,22650],{"class":86,"line":3799},[84,22651,3578],{"emptyLinePlaceholder":1252},[84,22653,22654,22656,22658],{"class":86,"line":9120},[84,22655,5268],{"class":129},[84,22657,5271],{"class":94},[84,22659,2471],{"class":154},[84,22661,22662],{"class":86,"line":9144},[84,22663,2746],{"class":154},[19,22665,22666,22667,22670,22671],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1464,22668,22669],{},"参数名就是定义的对象属性","，",[1464,22672,22673],{},"属性后面的值为有参构造函数的形参",[60,22675,22677],{"className":1313,"code":22676,"language":1315,"meta":66,"style":66},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[39,22678,22679],{"__ignoreMap":66},[84,22680,22681,22683,22685,22687,22690,22692,22695,22697,22700,22702,22705,22707,22710,22712],{"class":86,"line":87},[84,22682,20216],{"class":90},[84,22684,155],{"class":154},[84,22686,1327],{"class":129},[84,22688,22689],{"class":154}," a.",[84,22691,1327],{"class":129},[84,22693,22694],{"class":154}," b,",[84,22696,1327],{"class":129},[84,22698,22699],{"class":154}," b):",[84,22701,22469],{"class":90},[84,22703,22704],{"class":154},"(a),",[84,22706,22475],{"class":90},[84,22708,22709],{"class":154},"(c),",[84,22711,22481],{"class":90},[84,22713,22714],{"class":154},"(b) {}\n",[198,22716,22718],{"id":22717},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22720,22721],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22723,15803],{},[60,22725,22727],{"className":1313,"code":22726,"language":1315,"meta":66,"style":66},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[39,22728,22729,22734,22739,22743,22748,22752],{"__ignoreMap":66},[84,22730,22731],{"class":86,"line":87},[84,22732,22733],{"class":154},"A{};\n",[84,22735,22736],{"class":86,"line":98},[84,22737,22738],{"class":154},"B\n",[84,22740,22741],{"class":86,"line":106},[84,22742,2727],{"class":154},[84,22744,22745],{"class":86,"line":112},[84,22746,22747],{"class":154},"    A a;\n",[84,22749,22750],{"class":86,"line":425},[84,22751,2746],{"class":154},[84,22753,22754],{"class":86,"line":2395},[84,22755,22756],{"class":1378},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22758,22759],{},"案例",[60,22761,22763],{"className":1313,"code":22762,"language":1315,"meta":66,"style":66},"\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",[39,22764,22765,22770,22777,22781,22786,22791,22805,22809,22819,22830,22834,22841,22845,22858,22862,22867,22872,22876,22882,22886,22890,22894,22925,22929,22940,22944,22950,22954,22967,22971,22975,22979,22984,22989,22993,23001,23005,23022,23041,23045,23053,23057,23063],{"__ignoreMap":66},[84,22766,22767],{"class":86,"line":87},[84,22768,22769],{"class":1378},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[84,22771,22772,22774],{"class":86,"line":98},[84,22773,15864],{"class":129},[84,22775,22776],{"class":90}," Phone\n",[84,22778,22779],{"class":86,"line":106},[84,22780,2727],{"class":154},[84,22782,22783],{"class":86,"line":112},[84,22784,22785],{"class":154},"public：\n",[84,22787,22788],{"class":86,"line":425},[84,22789,22790],{"class":1378},"    \u002F\u002F 赋值(构造函数)\n",[84,22792,22793,22796,22798,22800,22803],{"class":86,"line":2395},[84,22794,22795],{"class":90},"    Phone",[84,22797,155],{"class":154},[84,22799,16087],{"class":90},[84,22801,22802],{"class":928}," pName",[84,22804,162],{"class":154},[84,22806,22807],{"class":86,"line":2401},[84,22808,3209],{"class":154},[84,22810,22811,22814,22816],{"class":86,"line":2492},[84,22812,22813],{"class":154},"        m_pName",[84,22815,867],{"class":129},[84,22817,22818],{"class":154},"pName;\n",[84,22820,22821,22823,22825,22828],{"class":86,"line":2498},[84,22822,4629],{"class":154},[84,22824,2352],{"class":129},[84,22826,22827],{"class":158},"\"Phone的构造函数调用\"",[84,22829,2471],{"class":154},[84,22831,22832],{"class":86,"line":2510},[84,22833,3365],{"class":154},[84,22835,22836,22839],{"class":86,"line":2793},[84,22837,22838],{"class":90},"    ~Phone",[84,22840,183],{"class":154},[84,22842,22843],{"class":86,"line":2798},[84,22844,3209],{"class":154},[84,22846,22847,22849,22851,22854,22856],{"class":86,"line":2804},[84,22848,4629],{"class":154},[84,22850,2352],{"class":129},[84,22852,22853],{"class":158},"\"Phone析构函数调用\"",[84,22855,2352],{"class":129},[84,22857,2374],{"class":154},[84,22859,22860],{"class":86,"line":2809},[84,22861,3365],{"class":154},[84,22863,22864],{"class":86,"line":2823},[84,22865,22866],{"class":1378},"    \u002F\u002F\n",[84,22868,22869],{"class":86,"line":2828},[84,22870,22871],{"class":154},"    string m_PName;\n",[84,22873,22874],{"class":86,"line":2834},[84,22875,5173],{"class":154},[84,22877,22878,22880],{"class":86,"line":2855},[84,22879,15864],{"class":129},[84,22881,16341],{"class":90},[84,22883,22884],{"class":86,"line":2860},[84,22885,2727],{"class":154},[84,22887,22888],{"class":86,"line":2874},[84,22889,15886],{"class":129},[84,22891,22892],{"class":86,"line":2879},[84,22893,18164],{"class":1378},[84,22895,22896,22898,22900,22902,22904,22906,22908,22911,22914,22916,22919,22922],{"class":86,"line":2908},[84,22897,19689],{"class":90},[84,22899,155],{"class":154},[84,22901,16087],{"class":90},[84,22903,16090],{"class":928},[84,22905,1688],{"class":154},[84,22907,16087],{"class":90},[84,22909,22910],{"class":928}," pname",[84,22912,22913],{"class":154},"):",[84,22915,16180],{"class":90},[84,22917,22918],{"class":154},"(name),m_phone.",[84,22920,22921],{"class":90},"m_PName",[84,22923,22924],{"class":154},"(pname) \n",[84,22926,22927],{"class":86,"line":2913},[84,22928,3209],{"class":154},[84,22930,22931,22933,22935,22938],{"class":86,"line":2930},[84,22932,4629],{"class":154},[84,22934,2352],{"class":129},[84,22936,22937],{"class":158},"\"Person的构造函数调用\"",[84,22939,2471],{"class":154},[84,22941,22942],{"class":86,"line":2935},[84,22943,3365],{"class":154},[84,22945,22946,22948],{"class":86,"line":2940},[84,22947,19722],{"class":90},[84,22949,183],{"class":154},[84,22951,22952],{"class":86,"line":2945},[84,22953,3209],{"class":154},[84,22955,22956,22958,22960,22963,22965],{"class":86,"line":2959},[84,22957,4629],{"class":154},[84,22959,2352],{"class":129},[84,22961,22962],{"class":158},"\"Person析构函数调用\"",[84,22964,2352],{"class":129},[84,22966,2374],{"class":154},[84,22968,22969],{"class":86,"line":2964},[84,22970,3365],{"class":154},[84,22972,22973],{"class":86,"line":3755},[84,22974,8952],{"class":1378},[84,22976,22977],{"class":86,"line":3769},[84,22978,16062],{"class":154},[84,22980,22981],{"class":86,"line":3777},[84,22982,22983],{"class":1378},"    \u002F\u002F手机\n",[84,22985,22986],{"class":86,"line":3782},[84,22987,22988],{"class":154},"    Phone m_Phone;\n",[84,22990,22991],{"class":86,"line":3788},[84,22992,5173],{"class":154},[84,22994,22995,22997,22999],{"class":86,"line":3794},[84,22996,6538],{"class":129},[84,22998,6762],{"class":90},[84,23000,183],{"class":154},[84,23002,23003],{"class":86,"line":3799},[84,23004,2727],{"class":154},[84,23006,23007,23009,23011,23013,23015,23017,23020],{"class":86,"line":9120},[84,23008,20601],{"class":154},[84,23010,19],{"class":90},[84,23012,155],{"class":154},[84,23014,9088],{"class":158},[84,23016,1688],{"class":154},[84,23018,23019],{"class":158},"\"安卓\"",[84,23021,3897],{"class":154},[84,23023,23024,23026,23028,23031,23033,23036,23038],{"class":86,"line":9144},[84,23025,2732],{"class":154},[84,23027,2352],{"class":129},[84,23029,23030],{"class":154},"p.Name",[84,23032,2352],{"class":129},[84,23034,23035],{"class":158},"\"拿着：\"",[84,23037,2352],{"class":129},[84,23039,23040],{"class":154},"p.m_phone.m_PName;\n",[84,23042,23043],{"class":86,"line":9149},[84,23044,2746],{"class":154},[84,23046,23047,23049,23051],{"class":86,"line":9155},[84,23048,1327],{"class":129},[84,23050,3153],{"class":90},[84,23052,183],{"class":154},[84,23054,23055],{"class":86,"line":9182},[84,23056,2727],{"class":154},[84,23058,23059,23061],{"class":86,"line":9187},[84,23060,6807],{"class":90},[84,23062,6810],{"class":154},[84,23064,23065],{"class":86,"line":9193},[84,23066,2746],{"class":154},[19,23068,10197],{},[60,23070,23072],{"className":1313,"code":23071,"language":1315,"meta":66,"style":66},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[39,23073,23074,23079],{"__ignoreMap":66},[84,23075,23076],{"class":86,"line":87},[84,23077,23078],{"class":1378},"    \u002F\u002F不需要写这个：\n",[84,23080,23081],{"class":86,"line":98},[84,23082,23083],{"class":1378},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23085,23086],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[60,23088,23090],{"className":1313,"code":23089,"language":1315,"meta":66,"style":66},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[39,23091,23092],{"__ignoreMap":66},[84,23093,23094,23096,23099,23101,23104,23107],{"class":86,"line":87},[84,23095,20216],{"class":90},[84,23097,23098],{"class":154},"(string name.string pname):",[84,23100,16180],{"class":90},[84,23102,23103],{"class":154},"(name),",[84,23105,23106],{"class":90},"m_phone",[84,23108,23109],{"class":154},"(pname) {}\n",[19,23111,23112,23113,867,23116],{},"采用的是隐式转换法，实际为如下：\n",[39,23114,23115],{},"m_phone(pname)",[39,23117,23118],{},"Phone m_phone=pname",[19,23120,23121,23124],{},[1464,23122,23123],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23126,23127],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[198,23129,23131],{"id":23130},"_828静态对象","8.2.8静态对象",[19,23133,23134],{},"静态对象在成员对象前static，称为静态对象",[19,23136,23137],{},"静态对象分为两类：",[26,23139,23140],{},[29,23141,23142],{},"静态成员变量",[2315,23144,23145,23148,23151],{},[29,23146,23147],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,23149,23150],{},"②在编译阶段分配内存",[29,23152,23153],{},"③类内声明，类外初始化",[26,23155,23156],{"start":98},[29,23157,23158],{},"静态成员函数",[2315,23160,23161,23164],{},[29,23162,23163],{},"①所有对象共享同一个函数",[29,23165,23166],{},"②静态成员函数只能访问静态成员变量",[23168,23169,23171],"h4",{"id":23170},"_8281静态成员变量","8.2.8.1静态成员变量",[60,23173,23175],{"className":1313,"code":23174,"language":1315,"meta":66,"style":66},"#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",[39,23176,23177,23183,23193,23199,23203,23207,23212,23217,23222,23230,23234,23238,23242,23250,23254,23258,23263,23276,23280,23288,23292,23298],{"__ignoreMap":66},[84,23178,23179,23181],{"class":86,"line":87},[84,23180,3130],{"class":129},[84,23182,3133],{"class":158},[84,23184,23185,23187,23189,23191],{"class":86,"line":98},[84,23186,3138],{"class":129},[84,23188,3141],{"class":129},[84,23190,3144],{"class":90},[84,23192,2471],{"class":154},[84,23194,23195,23197],{"class":86,"line":106},[84,23196,15864],{"class":129},[84,23198,16341],{"class":90},[84,23200,23201],{"class":86,"line":112},[84,23202,2727],{"class":154},[84,23204,23205],{"class":86,"line":425},[84,23206,15886],{"class":129},[84,23208,23209],{"class":86,"line":2395},[84,23210,23211],{"class":1378},"    \u002F\u002F非静态成员变量\n",[84,23213,23214],{"class":86,"line":2401},[84,23215,23216],{"class":1378},"    \u002F\u002F int m_A;\n",[84,23218,23219],{"class":86,"line":2492},[84,23220,23221],{"class":1378},"    \u002F\u002F定义静态成员变量\n",[84,23223,23224,23226,23228],{"class":86,"line":2498},[84,23225,12192],{"class":129},[84,23227,3560],{"class":129},[84,23229,22562],{"class":154},[84,23231,23232],{"class":86,"line":2510},[84,23233,3578],{"emptyLinePlaceholder":1252},[84,23235,23236],{"class":86,"line":2793},[84,23237,3578],{"emptyLinePlaceholder":1252},[84,23239,23240],{"class":86,"line":2798},[84,23241,5173],{"class":154},[84,23243,23244,23246,23248],{"class":86,"line":2804},[84,23245,6538],{"class":129},[84,23247,6762],{"class":90},[84,23249,183],{"class":154},[84,23251,23252],{"class":86,"line":2809},[84,23253,2727],{"class":154},[84,23255,23256],{"class":86,"line":2823},[84,23257,16483],{"class":154},[84,23259,23260],{"class":86,"line":2828},[84,23261,23262],{"class":1378},"    \u002F\u002F输出类成员变量这块内存\n",[84,23264,23265,23267,23269,23272,23274],{"class":86,"line":2834},[84,23266,2732],{"class":154},[84,23268,2352],{"class":129},[84,23270,23271],{"class":154},"p.m_A",[84,23273,2352],{"class":129},[84,23275,2374],{"class":154},[84,23277,23278],{"class":86,"line":2855},[84,23279,2746],{"class":154},[84,23281,23282,23284,23286],{"class":86,"line":2860},[84,23283,1327],{"class":129},[84,23285,3153],{"class":90},[84,23287,183],{"class":154},[84,23289,23290],{"class":86,"line":2874},[84,23291,2727],{"class":154},[84,23293,23294,23296],{"class":86,"line":2879},[84,23295,6807],{"class":90},[84,23297,183],{"class":154},[84,23299,23300],{"class":86,"line":2908},[84,23301,2746],{"class":154},[19,23303,23304],{},"此时输出是报错的：无法解析外部命令",[19,23306,23307],{},"解决这一问题：必须用到类内声明，类外初始化操作",[60,23309,23311],{"className":1313,"code":23310,"language":1315,"meta":66,"style":66},"#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",[39,23312,23313,23319,23329,23335,23339,23343,23348,23356,23360,23365,23380,23388,23392,23396,23401,23406,23418,23423,23434,23439,23444,23457,23461,23469,23473,23479],{"__ignoreMap":66},[84,23314,23315,23317],{"class":86,"line":87},[84,23316,3130],{"class":129},[84,23318,3133],{"class":158},[84,23320,23321,23323,23325,23327],{"class":86,"line":98},[84,23322,3138],{"class":129},[84,23324,3141],{"class":129},[84,23326,3144],{"class":90},[84,23328,2471],{"class":154},[84,23330,23331,23333],{"class":86,"line":106},[84,23332,15864],{"class":129},[84,23334,16341],{"class":90},[84,23336,23337],{"class":86,"line":112},[84,23338,2727],{"class":154},[84,23340,23341],{"class":86,"line":425},[84,23342,15886],{"class":129},[84,23344,23345],{"class":86,"line":2395},[84,23346,23347],{"class":1378},"    \u002F\u002F类内声明\n",[84,23349,23350,23352,23354],{"class":86,"line":2401},[84,23351,12192],{"class":129},[84,23353,3560],{"class":129},[84,23355,22562],{"class":154},[84,23357,23358],{"class":86,"line":2492},[84,23359,5173],{"class":154},[84,23361,23362],{"class":86,"line":2498},[84,23363,23364],{"class":1378},"\u002F\u002F类外初始化\n",[84,23366,23367,23369,23371,23374,23376,23378],{"class":86,"line":2510},[84,23368,1327],{"class":129},[84,23370,16739],{"class":90},[84,23372,23373],{"class":154},"::m_A",[84,23375,867],{"class":129},[84,23377,1756],{"class":94},[84,23379,2471],{"class":154},[84,23381,23382,23384,23386],{"class":86,"line":2793},[84,23383,6538],{"class":129},[84,23385,6762],{"class":90},[84,23387,183],{"class":154},[84,23389,23390],{"class":86,"line":2798},[84,23391,2727],{"class":154},[84,23393,23394],{"class":86,"line":2804},[84,23395,16483],{"class":154},[84,23397,23398],{"class":86,"line":2809},[84,23399,23400],{"class":1378},"    \u002F\u002F访问变量的原内存空间\n",[84,23402,23403],{"class":86,"line":2823},[84,23404,23405],{"class":1378},"    \u002F\u002F100\n",[84,23407,23408,23410,23412,23414,23416],{"class":86,"line":2828},[84,23409,2732],{"class":154},[84,23411,2352],{"class":129},[84,23413,23271],{"class":154},[84,23415,2352],{"class":129},[84,23417,2374],{"class":154},[84,23419,23420],{"class":86,"line":2834},[84,23421,23422],{"class":154},"    Person p2;\n",[84,23424,23425,23428,23430,23432],{"class":86,"line":2855},[84,23426,23427],{"class":154},"    p2.m_A",[84,23429,867],{"class":129},[84,23431,2903],{"class":94},[84,23433,2471],{"class":154},[84,23435,23436],{"class":86,"line":2860},[84,23437,23438],{"class":1378},"    \u002F\u002F继续访问这片空间\n",[84,23440,23441],{"class":86,"line":2874},[84,23442,23443],{"class":1378},"    \u002F\u002F200\n",[84,23445,23446,23448,23450,23453,23455],{"class":86,"line":2879},[84,23447,2732],{"class":154},[84,23449,2352],{"class":129},[84,23451,23452],{"class":154},"p2.m_A",[84,23454,2352],{"class":129},[84,23456,2374],{"class":154},[84,23458,23459],{"class":86,"line":2908},[84,23460,2746],{"class":154},[84,23462,23463,23465,23467],{"class":86,"line":2913},[84,23464,1327],{"class":129},[84,23466,3153],{"class":90},[84,23468,183],{"class":154},[84,23470,23471],{"class":86,"line":2930},[84,23472,2727],{"class":154},[84,23474,23475,23477],{"class":86,"line":2935},[84,23476,6807],{"class":90},[84,23478,6810],{"class":154},[84,23480,23481],{"class":86,"line":2940},[84,23482,2746],{"class":154},[19,23484,23485],{},[1464,23486,23487],{},"静态变量的访问",[60,23489,23491],{"className":1313,"code":23490,"language":1315,"meta":66,"style":66},"#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",[39,23492,23493,23499,23509,23515,23519,23523,23527,23535,23539,23544,23552,23556,23560,23574,23589,23597,23601,23606,23611,23616,23621,23633,23638,23643,23657,23674,23678,23686,23690,23696],{"__ignoreMap":66},[84,23494,23495,23497],{"class":86,"line":87},[84,23496,3130],{"class":129},[84,23498,3133],{"class":158},[84,23500,23501,23503,23505,23507],{"class":86,"line":98},[84,23502,3138],{"class":129},[84,23504,3141],{"class":129},[84,23506,3144],{"class":90},[84,23508,2471],{"class":154},[84,23510,23511,23513],{"class":86,"line":106},[84,23512,15864],{"class":129},[84,23514,16341],{"class":90},[84,23516,23517],{"class":86,"line":112},[84,23518,2727],{"class":154},[84,23520,23521],{"class":86,"line":425},[84,23522,15886],{"class":129},[84,23524,23525],{"class":86,"line":2395},[84,23526,23347],{"class":1378},[84,23528,23529,23531,23533],{"class":86,"line":2401},[84,23530,12192],{"class":129},[84,23532,3560],{"class":129},[84,23534,22562],{"class":154},[84,23536,23537],{"class":86,"line":2492},[84,23538,16392],{"class":129},[84,23540,23541],{"class":86,"line":2498},[84,23542,23543],{"class":1378},"    \u002F\u002F静态成员变量也是有访问权限的\n",[84,23545,23546,23548,23550],{"class":86,"line":2510},[84,23547,12192],{"class":129},[84,23549,3560],{"class":129},[84,23551,22569],{"class":154},[84,23553,23554],{"class":86,"line":2793},[84,23555,5173],{"class":154},[84,23557,23558],{"class":86,"line":2798},[84,23559,23364],{"class":1378},[84,23561,23562,23564,23566,23568,23570,23572],{"class":86,"line":2804},[84,23563,1327],{"class":129},[84,23565,16739],{"class":90},[84,23567,23373],{"class":154},[84,23569,867],{"class":129},[84,23571,1756],{"class":94},[84,23573,2471],{"class":154},[84,23575,23576,23578,23580,23583,23585,23587],{"class":86,"line":2809},[84,23577,1327],{"class":129},[84,23579,16739],{"class":90},[84,23581,23582],{"class":154},"::m_B",[84,23584,867],{"class":129},[84,23586,2008],{"class":94},[84,23588,2471],{"class":154},[84,23590,23591,23593,23595],{"class":86,"line":2823},[84,23592,6538],{"class":129},[84,23594,6831],{"class":90},[84,23596,183],{"class":154},[84,23598,23599],{"class":86,"line":2828},[84,23600,2727],{"class":154},[84,23602,23603],{"class":86,"line":2834},[84,23604,23605],{"class":1378},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[84,23607,23608],{"class":86,"line":2855},[84,23609,23610],{"class":1378},"    \u002F\u002F静态成员变量有两种访问方式：\n",[84,23612,23613],{"class":86,"line":2860},[84,23614,23615],{"class":1378},"    \u002F\u002F1.通过对象进行访问\n",[84,23617,23618],{"class":86,"line":2874},[84,23619,23620],{"class":154},"    Person p;  \n",[84,23622,23623,23625,23627,23629,23631],{"class":86,"line":2879},[84,23624,2732],{"class":154},[84,23626,2352],{"class":129},[84,23628,23271],{"class":154},[84,23630,2352],{"class":129},[84,23632,2374],{"class":154},[84,23634,23635],{"class":86,"line":2908},[84,23636,23637],{"class":1378},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[84,23639,23640],{"class":86,"line":2913},[84,23641,23642],{"class":1378},"    \u002F\u002F2.通过类名进行访问\n",[84,23644,23645,23647,23649,23651,23653,23655],{"class":86,"line":2930},[84,23646,2732],{"class":154},[84,23648,2352],{"class":129},[84,23650,20216],{"class":90},[84,23652,23373],{"class":154},[84,23654,2352],{"class":129},[84,23656,2374],{"class":154},[84,23658,23659,23661,23663,23665,23667,23669,23671],{"class":86,"line":2935},[84,23660,2732],{"class":154},[84,23662,2352],{"class":129},[84,23664,20216],{"class":90},[84,23666,23582],{"class":154},[84,23668,2352],{"class":129},[84,23670,2419],{"class":154},[84,23672,23673],{"class":1378}," \u002F\u002F没有访问权限，报错\n",[84,23675,23676],{"class":86,"line":2940},[84,23677,2746],{"class":154},[84,23679,23680,23682,23684],{"class":86,"line":2945},[84,23681,1327],{"class":129},[84,23683,3153],{"class":90},[84,23685,183],{"class":154},[84,23687,23688],{"class":86,"line":2959},[84,23689,2727],{"class":154},[84,23691,23692,23694],{"class":86,"line":2964},[84,23693,6876],{"class":90},[84,23695,6810],{"class":154},[84,23697,23698],{"class":86,"line":3755},[84,23699,2746],{"class":154},[23168,23701,23703],{"id":23702},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23705,23706],{},"1.静态成员函数定义与访问",[60,23708,23710],{"className":1313,"code":23709,"language":1315,"meta":66,"style":66},"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",[39,23711,23712,23718,23722,23726,23731,23742,23746,23760,23764,23768,23776,23780,23785,23790,23794,23802,23807,23817],{"__ignoreMap":66},[84,23713,23714,23716],{"class":86,"line":87},[84,23715,15864],{"class":129},[84,23717,16341],{"class":90},[84,23719,23720],{"class":86,"line":98},[84,23721,2727],{"class":154},[84,23723,23724],{"class":86,"line":106},[84,23725,15886],{"class":129},[84,23727,23728],{"class":86,"line":112},[84,23729,23730],{"class":1378},"    \u002F\u002F在公共权限下定义静态成员函数\n",[84,23732,23733,23735,23738,23740],{"class":86,"line":425},[84,23734,12192],{"class":129},[84,23736,23737],{"class":129}," void",[84,23739,12557],{"class":90},[84,23741,183],{"class":154},[84,23743,23744],{"class":86,"line":2395},[84,23745,3209],{"class":154},[84,23747,23748,23751,23753,23756,23758],{"class":86,"line":2401},[84,23749,23750],{"class":154},"        coout",[84,23752,2352],{"class":129},[84,23754,23755],{"class":158},"\"静态成员函数的调用\"",[84,23757,2352],{"class":129},[84,23759,2374],{"class":154},[84,23761,23762],{"class":86,"line":2492},[84,23763,3365],{"class":154},[84,23765,23766],{"class":86,"line":2498},[84,23767,5173],{"class":154},[84,23769,23770,23772,23774],{"class":86,"line":2510},[84,23771,6538],{"class":129},[84,23773,6762],{"class":90},[84,23775,183],{"class":154},[84,23777,23778],{"class":86,"line":2793},[84,23779,2727],{"class":154},[84,23781,23782],{"class":86,"line":2798},[84,23783,23784],{"class":1378},"    \u002F\u002F静态成员函数的调用方式:\n",[84,23786,23787],{"class":86,"line":2804},[84,23788,23789],{"class":1378},"    \u002F\u002F1.通过对象访问\n",[84,23791,23792],{"class":86,"line":2809},[84,23793,16483],{"class":154},[84,23795,23796,23798,23800],{"class":86,"line":2823},[84,23797,17036],{"class":154},[84,23799,12723],{"class":90},[84,23801,6810],{"class":154},[84,23803,23804],{"class":86,"line":2828},[84,23805,23806],{"class":1378},"    \u002F\u002F2.通过类名访问\n",[84,23808,23809,23811,23813,23815],{"class":86,"line":2834},[84,23810,19689],{"class":90},[84,23812,18902],{"class":154},[84,23814,12723],{"class":90},[84,23816,6810],{"class":154},[84,23818,23819],{"class":86,"line":2855},[84,23820,2746],{"class":154},[26,23822,23823],{"start":98},[29,23824,23825],{},"静态成员函数只能访问静态成员变量",[60,23827,23829],{"className":1313,"code":23828,"language":1315,"meta":66,"style":66},"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",[39,23830,23831,23837,23841,23845,23849,23859,23863,23877,23882,23894,23898,23909,23919,23923,23927,23931,23941,23945,23958,23962,23966,23970,23974,23988,23996,24000,24004,24008,24012,24020,24024,24034,24039,24043,24051,24055,24061],{"__ignoreMap":66},[84,23832,23833,23835],{"class":86,"line":87},[84,23834,15864],{"class":129},[84,23836,16341],{"class":90},[84,23838,23839],{"class":86,"line":98},[84,23840,2727],{"class":154},[84,23842,23843],{"class":86,"line":106},[84,23844,15886],{"class":129},[84,23846,23847],{"class":86,"line":112},[84,23848,23730],{"class":1378},[84,23850,23851,23853,23855,23857],{"class":86,"line":425},[84,23852,12192],{"class":129},[84,23854,23737],{"class":129},[84,23856,12557],{"class":90},[84,23858,183],{"class":154},[84,23860,23861],{"class":86,"line":2395},[84,23862,3209],{"class":154},[84,23864,23865,23868,23870,23872,23874],{"class":86,"line":2401},[84,23866,23867],{"class":154},"        m_A",[84,23869,867],{"class":129},[84,23871,821],{"class":94},[84,23873,1375],{"class":154},[84,23875,23876],{"class":1378}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[84,23878,23879],{"class":86,"line":2492},[84,23880,23881],{"class":1378},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[84,23883,23884,23886,23888,23890,23892],{"class":86,"line":2498},[84,23885,23750],{"class":154},[84,23887,2352],{"class":129},[84,23889,23755],{"class":158},[84,23891,2352],{"class":129},[84,23893,2374],{"class":154},[84,23895,23896],{"class":86,"line":2510},[84,23897,3365],{"class":154},[84,23899,23900,23902,23904,23906],{"class":86,"line":2793},[84,23901,12192],{"class":129},[84,23903,3560],{"class":129},[84,23905,16618],{"class":154},[84,23907,23908],{"class":1378}," \u002F\u002F静态成员变量\n",[84,23910,23911,23913,23916],{"class":86,"line":2798},[84,23912,3164],{"class":129},[84,23914,23915],{"class":154}," m_B;",[84,23917,23918],{"class":1378}," \u002F\u002F非静态成员变量\n",[84,23920,23921],{"class":86,"line":2804},[84,23922,3578],{"emptyLinePlaceholder":1252},[84,23924,23925],{"class":86,"line":2809},[84,23926,16392],{"class":129},[84,23928,23929],{"class":86,"line":2823},[84,23930,23543],{"class":1378},[84,23932,23933,23935,23937,23939],{"class":86,"line":2828},[84,23934,12192],{"class":129},[84,23936,23737],{"class":129},[84,23938,14789],{"class":90},[84,23940,183],{"class":154},[84,23942,23943],{"class":86,"line":2834},[84,23944,3209],{"class":154},[84,23946,23947,23949,23951,23954,23956],{"class":86,"line":2855},[84,23948,4629],{"class":154},[84,23950,2352],{"class":129},[84,23952,23953],{"class":158},"\"这是私有权限下的静态函数调用\"",[84,23955,2352],{"class":129},[84,23957,2374],{"class":154},[84,23959,23960],{"class":86,"line":2860},[84,23961,3365],{"class":154},[84,23963,23964],{"class":86,"line":2874},[84,23965,3578],{"emptyLinePlaceholder":1252},[84,23967,23968],{"class":86,"line":2879},[84,23969,3578],{"emptyLinePlaceholder":1252},[84,23971,23972],{"class":86,"line":2908},[84,23973,5173],{"class":154},[84,23975,23976,23978,23980,23982,23984,23986],{"class":86,"line":2913},[84,23977,1327],{"class":129},[84,23979,16739],{"class":90},[84,23981,23373],{"class":154},[84,23983,867],{"class":129},[84,23985,1504],{"class":94},[84,23987,2471],{"class":154},[84,23989,23990,23992,23994],{"class":86,"line":2930},[84,23991,6538],{"class":129},[84,23993,6762],{"class":90},[84,23995,183],{"class":154},[84,23997,23998],{"class":86,"line":2935},[84,23999,2727],{"class":154},[84,24001,24002],{"class":86,"line":2940},[84,24003,23784],{"class":1378},[84,24005,24006],{"class":86,"line":2945},[84,24007,23789],{"class":1378},[84,24009,24010],{"class":86,"line":2959},[84,24011,16483],{"class":154},[84,24013,24014,24016,24018],{"class":86,"line":2964},[84,24015,17036],{"class":154},[84,24017,12723],{"class":90},[84,24019,6810],{"class":154},[84,24021,24022],{"class":86,"line":3755},[84,24023,23806],{"class":1378},[84,24025,24026,24028,24030,24032],{"class":86,"line":3769},[84,24027,19689],{"class":90},[84,24029,18902],{"class":154},[84,24031,12723],{"class":90},[84,24033,6810],{"class":154},[84,24035,24036],{"class":86,"line":3777},[84,24037,24038],{"class":1378},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[84,24040,24041],{"class":86,"line":3782},[84,24042,2746],{"class":154},[84,24044,24045,24047,24049],{"class":86,"line":3788},[84,24046,1327],{"class":129},[84,24048,3153],{"class":90},[84,24050,183],{"class":154},[84,24052,24053],{"class":86,"line":3794},[84,24054,2727],{"class":154},[84,24056,24057,24059],{"class":86,"line":3799},[84,24058,6807],{"class":90},[84,24060,6810],{"class":154},[84,24062,24063],{"class":86,"line":9120},[84,24064,2746],{"class":154},[198,24066,24068],{"id":24067},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23168,24070,24072],{"id":24071},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24074,24075],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24077,24078],{},"只有非静态成员变量才属于类的对象上",[24080,24081,24083],"h5",{"id":24082},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[60,24085,24087],{"className":1313,"code":24086,"language":1315,"meta":66,"style":66},"#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",[39,24088,24089,24096,24106,24112,24116,24120,24124,24132,24136,24140,24163,24167,24175,24179,24185],{"__ignoreMap":66},[84,24090,24091,24093],{"class":86,"line":87},[84,24092,3130],{"class":129},[84,24094,24095],{"class":158},"\u003Ciostraem>\n",[84,24097,24098,24100,24102,24104],{"class":86,"line":98},[84,24099,3138],{"class":129},[84,24101,3141],{"class":129},[84,24103,3144],{"class":90},[84,24105,2471],{"class":154},[84,24107,24108,24110],{"class":86,"line":106},[84,24109,15864],{"class":129},[84,24111,16341],{"class":90},[84,24113,24114],{"class":86,"line":112},[84,24115,2727],{"class":154},[84,24117,24118],{"class":86,"line":425},[84,24119,3578],{"emptyLinePlaceholder":1252},[84,24121,24122],{"class":86,"line":2395},[84,24123,5173],{"class":154},[84,24125,24126,24128,24130],{"class":86,"line":2401},[84,24127,6538],{"class":129},[84,24129,6762],{"class":90},[84,24131,183],{"class":154},[84,24133,24134],{"class":86,"line":2492},[84,24135,2727],{"class":154},[84,24137,24138],{"class":86,"line":2498},[84,24139,16483],{"class":154},[84,24141,24142,24144,24146,24149,24151,24154,24156,24158,24160],{"class":86,"line":2510},[84,24143,2732],{"class":154},[84,24145,2352],{"class":129},[84,24147,24148],{"class":158},"\"size of p=\"",[84,24150,2352],{"class":129},[84,24152,24153],{"class":90},"sizeoif",[84,24155,7711],{"class":154},[84,24157,2352],{"class":129},[84,24159,2419],{"class":154},[84,24161,24162],{"class":1378}," \u002F\u002F查看这个空类的占用的内存空间\n",[84,24164,24165],{"class":86,"line":2793},[84,24166,2746],{"class":154},[84,24168,24169,24171,24173],{"class":86,"line":2798},[84,24170,1327],{"class":129},[84,24172,3153],{"class":90},[84,24174,183],{"class":154},[84,24176,24177],{"class":86,"line":2804},[84,24178,2727],{"class":154},[84,24180,24181,24183],{"class":86,"line":2809},[84,24182,6807],{"class":90},[84,24184,6810],{"class":154},[84,24186,24187],{"class":86,"line":2823},[84,24188,2746],{"class":154},[19,24190,24191],{},"输出结果为：size of p=1",[19,24193,24194],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24196,24197],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24080,24199,24201],{"id":24200},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[60,24203,24205],{"className":1313,"code":24204,"language":1315,"meta":66,"style":66},"#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",[39,24206,24207,24213,24223,24231,24235,24244,24248,24256,24260,24264,24283,24287,24291,24299,24303,24309],{"__ignoreMap":66},[84,24208,24209,24211],{"class":86,"line":87},[84,24210,3130],{"class":129},[84,24212,3133],{"class":158},[84,24214,24215,24217,24219,24221],{"class":86,"line":98},[84,24216,3138],{"class":129},[84,24218,3141],{"class":129},[84,24220,3144],{"class":90},[84,24222,2471],{"class":154},[84,24224,24225,24227,24229],{"class":86,"line":106},[84,24226,15864],{"class":129},[84,24228,16739],{"class":90},[84,24230,3852],{"class":154},[84,24232,24233],{"class":86,"line":112},[84,24234,2727],{"class":154},[84,24236,24237,24239,24241],{"class":86,"line":425},[84,24238,3164],{"class":129},[84,24240,16618],{"class":154},[84,24242,24243],{"class":1378},"\u002F\u002F非静态成员变量\n",[84,24245,24246],{"class":86,"line":2395},[84,24247,5173],{"class":154},[84,24249,24250,24252,24254],{"class":86,"line":2401},[84,24251,6538],{"class":129},[84,24253,6762],{"class":90},[84,24255,183],{"class":154},[84,24257,24258],{"class":86,"line":2492},[84,24259,2727],{"class":154},[84,24261,24262],{"class":86,"line":2498},[84,24263,16483],{"class":154},[84,24265,24266,24268,24270,24272,24274,24276,24278,24280],{"class":86,"line":2510},[84,24267,2732],{"class":154},[84,24269,2352],{"class":129},[84,24271,24148],{"class":158},[84,24273,2553],{"class":129},[84,24275,7711],{"class":154},[84,24277,2352],{"class":129},[84,24279,2419],{"class":154},[84,24281,24282],{"class":1378}," \u002F\u002F查看不是空对象时占用多少内存\n",[84,24284,24285],{"class":86,"line":2793},[84,24286,3578],{"emptyLinePlaceholder":1252},[84,24288,24289],{"class":86,"line":2798},[84,24290,2746],{"class":154},[84,24292,24293,24295,24297],{"class":86,"line":2804},[84,24294,1327],{"class":129},[84,24296,3153],{"class":90},[84,24298,183],{"class":154},[84,24300,24301],{"class":86,"line":2809},[84,24302,2727],{"class":154},[84,24304,24305,24307],{"class":86,"line":2823},[84,24306,6807],{"class":90},[84,24308,6810],{"class":154},[84,24310,24311],{"class":86,"line":2828},[84,24312,2746],{"class":154},[19,24314,24315],{},"输出结果：size of p=4",[19,24317,24318],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,24320,24321],{},[29,24322,24323],{},"如果加上非静态成员变量，Person类修改如下",[60,24325,24327],{"className":1313,"code":24326,"language":1315,"meta":66,"style":66},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[39,24328,24329,24335,24339,24345,24353,24357,24362],{"__ignoreMap":66},[84,24330,24331,24333],{"class":86,"line":87},[84,24332,15864],{"class":129},[84,24334,16341],{"class":90},[84,24336,24337],{"class":86,"line":98},[84,24338,2727],{"class":154},[84,24340,24341,24343],{"class":86,"line":106},[84,24342,3164],{"class":129},[84,24344,22562],{"class":154},[84,24346,24347,24349,24351],{"class":86,"line":112},[84,24348,12192],{"class":129},[84,24350,3560],{"class":129},[84,24352,22569],{"class":154},[84,24354,24355],{"class":86,"line":425},[84,24356,5173],{"class":154},[84,24358,24359],{"class":86,"line":2395},[84,24360,24361],{"class":1378},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[84,24363,24364,24366,24368,24370,24372,24374],{"class":86,"line":2401},[84,24365,1327],{"class":129},[84,24367,16739],{"class":90},[84,24369,23582],{"class":154},[84,24371,867],{"class":129},[84,24373,1504],{"class":94},[84,24375,2471],{"class":154},[19,24377,24378],{},"输出结果：4",[19,24380,24381],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,24383,24384],{"start":98},[29,24385,24386],{},"加上非静态成员函数",[60,24388,24390],{"className":1313,"code":24389,"language":1315,"meta":66,"style":66},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[39,24391,24392,24399,24403,24409,24417,24421,24425,24429],{"__ignoreMap":66},[84,24393,24394,24396],{"class":86,"line":87},[84,24395,15864],{"class":129},[84,24397,24398],{"class":90},"  Person\n",[84,24400,24401],{"class":86,"line":98},[84,24402,2727],{"class":154},[84,24404,24405,24407],{"class":86,"line":106},[84,24406,3164],{"class":129},[84,24408,22562],{"class":154},[84,24410,24411,24413,24415],{"class":86,"line":112},[84,24412,16079],{"class":129},[84,24414,12557],{"class":90},[84,24416,183],{"class":154},[84,24418,24419],{"class":86,"line":425},[84,24420,3209],{"class":154},[84,24422,24423],{"class":86,"line":2395},[84,24424,3578],{"emptyLinePlaceholder":1252},[84,24426,24427],{"class":86,"line":2401},[84,24428,3365],{"class":154},[84,24430,24431],{"class":86,"line":2492},[84,24432,5173],{"class":154},[19,24434,24435],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,24437,24438],{"start":106},[29,24439,24440],{},"加上静态成员函数",[60,24442,24444],{"className":1313,"code":24443,"language":1315,"meta":66,"style":66},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[39,24445,24446,24452,24456,24462,24470,24474,24478,24482,24493,24497,24501,24505],{"__ignoreMap":66},[84,24447,24448,24450],{"class":86,"line":87},[84,24449,15864],{"class":129},[84,24451,24398],{"class":90},[84,24453,24454],{"class":86,"line":98},[84,24455,2727],{"class":154},[84,24457,24458,24460],{"class":86,"line":106},[84,24459,3164],{"class":129},[84,24461,22562],{"class":154},[84,24463,24464,24466,24468],{"class":86,"line":112},[84,24465,16079],{"class":129},[84,24467,12557],{"class":90},[84,24469,183],{"class":154},[84,24471,24472],{"class":86,"line":425},[84,24473,3209],{"class":154},[84,24475,24476],{"class":86,"line":2395},[84,24477,3578],{"emptyLinePlaceholder":1252},[84,24479,24480],{"class":86,"line":2401},[84,24481,3365],{"class":154},[84,24483,24484,24486,24488,24491],{"class":86,"line":2492},[84,24485,12192],{"class":129},[84,24487,23737],{"class":129},[84,24489,24490],{"class":90}," func1",[84,24492,183],{"class":154},[84,24494,24495],{"class":86,"line":2498},[84,24496,3209],{"class":154},[84,24498,24499],{"class":86,"line":2510},[84,24500,3578],{"emptyLinePlaceholder":1252},[84,24502,24503],{"class":86,"line":2793},[84,24504,3365],{"class":154},[84,24506,24507],{"class":86,"line":2798},[84,24508,5173],{"class":154},[19,24510,24378],{},[19,24512,24513],{},"解释：静态成员函数也不属于类上",[1222,24515,8846],{},{"title":66,"searchDepth":98,"depth":98,"links":24517},[24518,24524],{"id":15815,"depth":98,"text":15816,"children":24519},[24520,24521,24522,24523],{"id":15819,"depth":106,"text":15820},{"id":16544,"depth":106,"text":16545},{"id":16716,"depth":106,"text":16717},{"id":17175,"depth":106,"text":17176},{"id":19547,"depth":98,"text":19548,"children":24525},[24526,24527,24528,24529,24530,24531,24532,24533,24534],{"id":19559,"depth":106,"text":19560},{"id":19852,"depth":106,"text":19853},{"id":20343,"depth":106,"text":20344},{"id":21440,"depth":106,"text":21441},{"id":21863,"depth":106,"text":21864},{"id":22342,"depth":106,"text":22343},{"id":22717,"depth":106,"text":22718},{"id":23130,"depth":106,"text":23131},{"id":24067,"depth":106,"text":24068},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15780,"description":24535},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24542,"title":1315,"body":24543,"description":1249,"extension":1250,"meta":24547,"navigation":1252,"path":24549,"seo":24550,"stem":24551,"__hash__":24552},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24544,"toc":24545},[],{"title":66,"searchDepth":98,"depth":98,"links":24546},[],{"category":24548},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1315,"description":1249},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24554,"title":24555,"body":24556,"description":66,"extension":1250,"meta":25142,"navigation":1252,"path":25143,"seo":25144,"stem":25145,"__hash__":25146},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24557,"toc":25124},[24558,24561,24565,24568,24571,24574,24592,24597,24600,24603,24606,24609,24614,24617,24622,24625,24628,24632,24635,24638,24644,24647,24665,24669,24673,24676,24681,24684,24688,24691,24704,24707,24711,24714,24717,24720,24745,24748,24757,24768,24783,24815,24819,24826,24834,24838,24841,24844,24849,24853,24856,24859,24864,24867,24871,24874,24877,24882,24885,24889,24894,24898,24965,24969,24972,24975,24978,24981,24984,24990,25007,25010,25024,25032,25036,25039,25042,25047,25050,25055,25060,25063,25066,25071,25076,25079,25084,25089,25092,25097,25102,25105,25108,25113,25116,25121],[10,24559,24555],{"id":24560},"_1强化学习基本认识",[14,24562,24564],{"id":24563},"_11什么是强化学习","1.1.什么是强化学习",[19,24566,24567],{},"强化学习有两部分组成：智能体和环境；",[19,24569,24570],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24572,24573],{},"强化学习与监督学习的区别:",[26,24575,24576,24579,24582,24585],{},[29,24577,24578],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,24580,24581],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,24583,24584],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,24586,24587,24588,24591],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1464,24589,24590],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24593,24594],{},[2643,24595],{"alt":66,"src":24596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24598,24599],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24601,24602],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24604,24605],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24607,24608],{},"获取奖励",[19,24610,24611],{},[2643,24612],{"alt":66,"src":24613},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24615,24616],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24618,24619],{},[2643,24620],{"alt":66,"src":24621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24623,24624],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24626,24627],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24629,24631],{"id":24630},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24633,24634],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24636,24637],{},"具身智能中的应用",[19,24639,24640,24643],{},[1464,24641,24642],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24645,24646],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24648,24649,24650,24653,24654,24657,24658,24661,24662],{},"机器人是",[1464,24651,24652],{},"躯体","，深度学习是",[1464,24655,24656],{},"神经元****网络","，VLA是",[1464,24659,24660],{},"通用的行为逻辑","，而强化学习是",[1464,24663,24664],{},"教练",[14,24666,24668],{"id":24667},"_13序列决策","1.3.序列决策",[198,24670,24672],{"id":24671},"_131智能体与环境","1.3.1.智能体与环境",[19,24674,24675],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24677,24678],{},[2643,24679],{"alt":66,"src":24680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24682,24683],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[198,24685,24687],{"id":24686},"_132奖励","1.3.2.奖励",[19,24689,24690],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24692,24693,24694,24703],{},"取某个策略的表现如何。强化学习的目的就是",[1464,24695,24696,24697,24702],{},"最大化",[1464,24698,24699],{},[1464,24700,24701],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24705,24706],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[198,24708,24710],{"id":24709},"_133序列决策","1.3.3.序列决策",[19,24712,24713],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24715,24716],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24718,24719],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24721,24722,24726,24727,24729,24730,24732,24733,24735,24736,14965,24739,14965,24742],{},[24723,24724,24725],"em",{},"Ht"," = ",[24723,24728,1905],{},"1*, a",[24723,24731,1529],{},", r",[24723,24734,1529],{},", . . . ,* ",[24723,24737,24738],{},"ot",[24723,24740,24741],{},", at ,",[24723,24743,24744],{},"rt",[19,24746,24747],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24749,24750,24726,24753,2839,24755,1739],{},[24723,24751,24752],{},"st",[24723,24754,1372],{},[24723,24756,24725],{},[19,24758,24759,24760,24763,24764,24767],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1464,24761,24762],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1464,24765,24766],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24769,24770,24771,24774,24775,24778,24779,24782],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1464,24772,24773],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1464,24776,24777],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24723,24780,24781],{},"S, A, T, R, Ω, O, γ",")。",[19,24784,24785,24786,24788,24789,24791,24792,155,24794,24797,24798,24800,24801,155,24804,24807,24808,24810,24811,24814],{},"其中 ",[24723,24787,1997],{}," 表示状态空间，为隐变量，",[24723,24790,1544],{}," 为动作空间，",[24723,24793,2022],{},[24723,24795,24796],{},"s ′ |s, a",") 为状态转移概率，",[24723,24799,1972],{}," 为奖励函数，",[24723,24802,24803],{},"Ω",[24723,24805,24806],{},"o|s, a",") 为观测概率，",[24723,24809,1899],{}," 为观测空间，",[24723,24812,24813],{},"γ"," 为折扣因子。",[14,24816,24818],{"id":24817},"_14动作空间","1.4.动作空间",[19,24820,24821,24822,24825],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1464,24823,24824],{},"动作空间"," ，动作空间分为:",[26,24827,24828,24831],{},[29,24829,24830],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,24832,24833],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24835,24837],{"id":24836},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24839,24840],{},"由策略、价值函数、模型三部分组成",[19,24842,24843],{},"这三者组成马尔可夫决策过程",[19,24845,24846],{},[2643,24847],{"alt":66,"src":24848},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[198,24850,24852],{"id":24851},"_151策略","1.5.1.策略",[19,24854,24855],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24857,24858],{},"策略可分为两种：",[19,24860,24861],{},[2643,24862],{"alt":66,"src":24863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24865,24866],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[198,24868,24870],{"id":24869},"_152价值函数","1.5.2.价值函数",[19,24872,24873],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24875,24876],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24878,24879],{},[2643,24880],{"alt":66,"src":24881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24883,24884],{},"进入某个状态采取的最优动作可以通过Q函数得到",[198,24886,24888],{"id":24887},"_153模型","1.5.3.模型",[19,24890,24891],{},[2643,24892],{"alt":66,"src":24893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24895,24897],{"id":24896},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[458,24899,24900,24911],{},[461,24901,24902],{},[464,24903,24904,24908],{},[467,24905,24907],{"align":24906},"left","类型",[467,24909,24910],{"align":24906},"特点",[474,24912,24913,24923,24933,24943,24955],{},[464,24914,24915,24920],{},[479,24916,24917],{"align":24906},[1464,24918,24919],{},"基于价值的智能体",[479,24921,24922],{"align":24906},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[464,24924,24925,24930],{},[479,24926,24927],{"align":24906},[1464,24928,24929],{},"基于策略的智能体",[479,24931,24932],{"align":24906},"直接学习策略，没有学习价值函数",[464,24934,24935,24940],{},[479,24936,24937],{"align":24906},[1464,24938,24939],{},"演员-评论员智能体",[479,24941,24942],{"align":24906},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[464,24944,24945,24950],{},[479,24946,24947],{"align":24906},[1464,24948,24949],{},"有模型强化学习智能体",[479,24951,24952],{"align":24906},[2643,24953],{"alt":66,"src":24954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[464,24956,24957,24962],{},[479,24958,24959],{"align":24906},[1464,24960,24961],{},"免模型强化学习智能体",[479,24963,24964],{"align":24906},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24966,24968],{"id":24967},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24970,24971],{},"学习和规划是序列决策的两个基本问题",[19,24973,24974],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24976,24977],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24979,24980],{},"强化学习用到的库：Gym",[19,24982,24983],{},"Gym可以检验强化学习算法的优劣",[19,24985,24986,24989],{},[1464,24987,24988],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[60,24991,24993],{"className":78,"code":24992,"language":80,"meta":66,"style":66},"pip install gym==0.25.2\n",[39,24994,24995],{"__ignoreMap":66},[84,24996,24997,24999,25001,25004],{"class":86,"line":87},[84,24998,246],{"class":90},[84,25000,275],{"class":158},[84,25002,25003],{"class":158}," gym==",[84,25005,25006],{"class":94},"0.25.2\n",[19,25008,25009],{},"显示图形界面需要",[60,25011,25013],{"className":78,"code":25012,"language":80,"meta":66,"style":66},"pip install pygame\n",[39,25014,25015],{"__ignoreMap":66},[84,25016,25017,25019,25021],{"class":86,"line":87},[84,25018,246],{"class":90},[84,25020,275],{"class":158},[84,25022,25023],{"class":158}," pygame\n",[19,25025,25026,25027],{},"有关Gym库的相关文档介绍：",[208,25028,25031],{"href":25029,"rel":25030},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[212],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25033,25035],{"id":25034},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25037,25038],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25040,25041],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25043,25044],{},[2643,25045],{"alt":66,"src":25046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25048,25049],{},"折扣率需要自己来设定",[19,25051,25052],{},[2643,25053],{"alt":66,"src":25054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25056,25057],{},[29,25058,25059],{},"状态转移函数：",[19,25061,25062],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25064,25065],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25067,25068],{},[2643,25069],{"alt":66,"src":25070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25072,25073],{"start":98},[29,25074,25075],{},"动作价值函数：",[19,25077,25078],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25080,25081],{},[2643,25082],{"alt":66,"src":25083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25085,25086],{"start":106},[29,25087,25088],{},"最优动作价值函数：",[19,25090,25091],{},"这个函数是对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,25093,25094],{},[2643,25095],{"alt":66,"src":25096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25098,25099],{"start":112},[29,25100,25101],{},"状态价值函数:",[19,25103,25104],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25106,25107],{},"它衡量的是“一个具体动作”的长期价值",[19,25109,25110],{},[2643,25111],{"alt":66,"src":25112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25114,25115],{},"几个价值函数之间的比较：",[19,25117,25118],{},[2643,25119],{"alt":66,"src":25120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1222,25122,25123],{},"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":66,"searchDepth":98,"depth":98,"links":25125},[25126,25127,25128,25133,25134,25139,25140,25141],{"id":24563,"depth":98,"text":24564},{"id":24630,"depth":98,"text":24631},{"id":24667,"depth":98,"text":24668,"children":25129},[25130,25131,25132],{"id":24671,"depth":106,"text":24672},{"id":24686,"depth":106,"text":24687},{"id":24709,"depth":106,"text":24710},{"id":24817,"depth":98,"text":24818},{"id":24836,"depth":98,"text":24837,"children":25135},[25136,25137,25138],{"id":24851,"depth":106,"text":24852},{"id":24869,"depth":106,"text":24870},{"id":24887,"depth":106,"text":24888},{"id":24896,"depth":98,"text":24897},{"id":24967,"depth":98,"text":24968},{"id":25034,"depth":98,"text":25035},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24555,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25148,"title":25149,"body":25150,"description":25157,"extension":1250,"meta":25168,"navigation":1252,"path":25169,"seo":25170,"stem":25171,"__hash__":25172},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25151,"toc":25166},[25152,25155,25158,25163],[10,25153,25149],{"id":25154},"_2马尔可夫决策过程",[19,25156,25157],{},"这是强化学习的基本框架",[19,25159,25160],{},[2643,25161],{"alt":66,"src":25162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25164,25165],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":66,"searchDepth":98,"depth":98,"links":25167},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25149,"description":25157},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25174,"title":25175,"body":25176,"description":66,"extension":1250,"meta":25292,"navigation":1252,"path":25293,"seo":25294,"stem":25295,"__hash__":25296},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25177,"toc":25287},[25178,25181,25185,25188,25193,25198,25201,25206,25209,25214,25217,25221,25226,25229,25234,25239,25244,25247,25251,25256,25259,25264,25269,25274,25279,25282],[10,25179,25175],{"id":25180},"_3动作价值函数",[14,25182,25184],{"id":25183},"_31dqn","3.1.DQN",[19,25186,25187],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25189,25190],{},[2643,25191],{"alt":66,"src":25192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25194,25195],{},[2643,25196],{"alt":66,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25199,25200],{},"DQN算法的描述：",[19,25202,25203],{},[2643,25204],{"alt":66,"src":25205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25207,25208],{},"这里的Dense指的是全连接层",[19,25210,25211],{},[2643,25212],{"alt":66,"src":25213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25215,25216],{},"当前观测的状态为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,25218,25220],{"id":25219},"_32dqn的举例","3.2.DQN的举例",[19,25222,25223],{},[2643,25224],{"alt":66,"src":25225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25227,25228],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25230,25231],{},[2643,25232],{"alt":66,"src":25233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25235,25236],{},[2643,25237],{"alt":66,"src":25238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25240,25241],{},[2643,25242],{"alt":66,"src":25243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25245,25246],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25248,25250],{"id":25249},"_33td算法","3.3.TD算法",[19,25252,25253],{},[2643,25254],{"alt":66,"src":25255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25257,25258],{},"强化学习TD算法公式的粗略解释：",[19,25260,25261],{},[2643,25262],{"alt":66,"src":25263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25265,25266],{},[2643,25267],{"alt":66,"src":25268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25270,25271],{},[2643,25272],{"alt":66,"src":25273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25275,25276],{},[2643,25277],{"alt":66,"src":25278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25280,25281],{},"TD算法总结：",[19,25283,25284],{},[2643,25285],{"alt":66,"src":25286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":66,"searchDepth":98,"depth":98,"links":25288},[25289,25290,25291],{"id":25183,"depth":98,"text":25184},{"id":25219,"depth":98,"text":25220},{"id":25249,"depth":98,"text":25250},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25175,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25298,"title":25299,"body":25300,"description":66,"extension":1250,"meta":25533,"navigation":1252,"path":25534,"seo":25535,"stem":25536,"__hash__":25537},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25301,"toc":25529},[25302,25305,25309,25312,25315,25320,25325,25328,25333,25338,25341,25346,25349,25354,25357,25362,25365,25370,25373,25378,25383,25386,25391,25394,25397,25402,25405,25410,25415,25419,25422,25425,25430,25435,25438,25443,25448,25451,25456,25459,25462,25467,25470,25475,25478,25483,25488,25491,25496,25501,25504,25509,25512,25517,25520],[10,25303,25299],{"id":25304},"_4策略学习",[14,25306,25308],{"id":25307},"_41概念描述","4.1.概念描述",[19,25310,25311],{},"用神经网络（策略网络）近似策略函数",[19,25313,25314],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25316,25317],{},[2643,25318],{"alt":66,"src":25319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25321,25322],{},[2643,25323],{"alt":66,"src":25324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25326,25327],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25329,25330],{},[2643,25331],{"alt":66,"src":25332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25334,25335],{},[2643,25336],{"alt":66,"src":25337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25339,25340],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25342,25343],{},[2643,25344],{"alt":66,"src":25345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25347,25348],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25350,25351],{},[2643,25352],{"alt":66,"src":25353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25355,25356],{},"改进theta要用到策略梯度算法",[19,25358,25359],{},[2643,25360],{"alt":66,"src":25361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25363,25364],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25366,25367],{},[2643,25368],{"alt":66,"src":25369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25371,25372],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25374,25375],{},[2643,25376],{"alt":66,"src":25377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25379,25380],{},[2643,25381],{"alt":66,"src":25382},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25384,25385],{},"梯度公式总结：",[19,25387,25388],{},[2643,25389],{"alt":66,"src":25390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25392,25393],{},"两个公式的分别应用场景：",[19,25395,25396],{},"对于离散的动作：",[19,25398,25399],{},[2643,25400],{"alt":66,"src":25401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25403,25404],{},"对于连续的动作：",[19,25406,25407],{},[2643,25408],{"alt":66,"src":25409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25411,25412],{},[2643,25413],{"alt":66,"src":25414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25416,25418],{"id":25417},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25420,25421],{},"使用蒙特卡洛来近似计算策略梯度",[19,25423,25424],{},"蒙特卡洛法的解释如下：",[19,25426,25427],{},[2643,25428],{"alt":66,"src":25429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25431,25432],{},[2643,25433],{"alt":66,"src":25434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25436,25437],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,25439,25440],{},[29,25441,25442],{},"方法一：reinforce算法",[19,25444,25445],{},[2643,25446],{"alt":66,"src":25447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25449,25450],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,25452,25453],{"start":98},[29,25454,25455],{},"方法二：actor-critic算法",[19,25457,25458],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25460,25461],{},"两个网络的构建：",[19,25463,25464],{},[2643,25465],{"alt":66,"src":25466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25468,25469],{},"actor网路：",[19,25471,25472],{},[2643,25473],{"alt":66,"src":25474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25476,25477],{},"critic网络",[19,25479,25480],{},[2643,25481],{"alt":66,"src":25482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,25484,25485],{"start":106},[29,25486,25487],{},"网络的训练",[19,25489,25490],{},"网络描述",[19,25492,25493],{},[2643,25494],{"alt":66,"src":25495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25497,25498],{},[2643,25499],{"alt":66,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25502,25503],{},"TD算法更新梯度：",[19,25505,25506],{},[2643,25507],{"alt":66,"src":25508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25510,25511],{},"策略网络更新梯度：",[19,25513,25514],{},[2643,25515],{"alt":66,"src":25516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25518,25519],{},"训练整个流程的具体描述：",[19,25521,25522,25525,25526],{},[2643,25523],{"alt":66,"src":25524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2643,25527],{"alt":66,"src":25528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":66,"searchDepth":98,"depth":98,"links":25530},[25531,25532],{"id":25307,"depth":98,"text":25308},{"id":25417,"depth":98,"text":25418},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25299,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25539,"title":25540,"body":25541,"description":25548,"extension":1250,"meta":25598,"navigation":1252,"path":25599,"seo":25600,"stem":25601,"__hash__":25602},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25542,"toc":25594},[25543,25546,25549,25553,25556,25561,25565,25568,25573,25576,25581,25586,25589],[10,25544,25540],{"id":25545},"_5alphago算法",[19,25547,25548],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25550,25552],{"id":25551},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25554,25555],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25557,25558],{},[2643,25559],{"alt":66,"src":25560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25562,25564],{"id":25563},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25566,25567],{},"采用强化学习的方式训练策略网络",[19,25569,25570],{},[2643,25571],{"alt":66,"src":25572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25574,25575],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25577,25578],{},[2643,25579],{"alt":66,"src":25580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25582,25583],{},[2643,25584],{"alt":66,"src":25585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25587,25588],{},"强化学习训练策略网络的总结：",[19,25590,25591],{},[2643,25592],{"alt":66,"src":25593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":66,"searchDepth":98,"depth":98,"links":25595},[25596,25597],{"id":25551,"depth":98,"text":25552},{"id":25563,"depth":98,"text":25564},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25540,"description":25548},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25604,"title":25605,"body":25606,"description":25613,"extension":1250,"meta":25616,"navigation":1252,"path":25617,"seo":25618,"stem":25619,"__hash__":25620},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25607,"toc":25614},[25608,25611],[10,25609,25605],{"id":25610},"_6价值网络",[19,25612,25613],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":66,"searchDepth":98,"depth":98,"links":25615},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25605,"description":25613},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25622,"title":25623,"body":25624,"description":25628,"extension":1250,"meta":25629,"navigation":1252,"path":25630,"seo":25631,"stem":25632,"__hash__":25633},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25625,"toc":25626},[],{"title":66,"searchDepth":98,"depth":98,"links":25627},[],"记录自己的强化学习笔记。",{"category":24548},"\u002Fwiki\u002F2025-12-04",{"title":25623,"description":25628},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25635,"title":25636,"body":25637,"description":1249,"extension":1250,"meta":25676,"navigation":1252,"path":25677,"seo":25678,"stem":25679,"__hash__":25680},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25638,"toc":25674},[25639,25642,25645,25651,25654,25660,25663,25668,25671],[10,25640,25636],{"id":25641},"_1-项目概览与官方资源",[19,25643,25644],{},"官方文档：",[19,25646,25647],{},[208,25648,25649],{"href":25649,"rel":25650},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[212],[19,25652,25653],{},"官方代码仓库：",[19,25655,25656],{},[208,25657,25658],{"href":25658,"rel":25659},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[212],[19,25661,25662],{},"复现大体流程：",[19,25664,25665],{},[2643,25666],{"alt":66,"src":25667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25669,25670],{},"本教程的目标是打通这条链路：",[19,25672,25673],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":66,"searchDepth":98,"depth":98,"links":25675},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25636,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25682,"title":25683,"body":25684,"description":1249,"extension":1250,"meta":25798,"navigation":1252,"path":25799,"seo":25800,"stem":25801,"__hash__":25802},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25685,"toc":25793},[25686,25689,25693,25696,25703,25707,25710,25719,25729,25733,25762,25765,25790],[10,25687,25683],{"id":25688},"_2-环境准备与设备连接",[14,25690,25692],{"id":25691},"_21-系统与环境","2.1 系统与环境",[19,25694,25695],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25697,25698,25699,25702],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[39,25700,25701],{},"lerobot"," 依赖。",[14,25704,25706],{"id":25705},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25708,25709],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[60,25711,25713],{"className":78,"code":25712,"language":80,"meta":66,"style":66},"lerobot-find-out\n",[39,25714,25715],{"__ignoreMap":66},[84,25716,25717],{"class":86,"line":87},[84,25718,25712],{"class":90},[19,25720,25721,25722,42,25725,25728],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[39,25723,25724],{},"\u002Fdev\u002FttyACM0",[39,25726,25727],{},"\u002Fdev\u002FttyACM1","）。",[14,25730,25732],{"id":25731},"_23-串口授权","2.3 串口授权",[60,25734,25736],{"className":78,"code":25735,"language":80,"meta":66,"style":66},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[39,25737,25738,25751],{"__ignoreMap":66},[84,25739,25740,25742,25745,25748],{"class":86,"line":87},[84,25741,311],{"class":90},[84,25743,25744],{"class":158}," chmod",[84,25746,25747],{"class":94}," 666",[84,25749,25750],{"class":158}," \u002Fdev\u002FttyACM0\n",[84,25752,25753,25755,25757,25759],{"class":86,"line":98},[84,25754,311],{"class":90},[84,25756,25744],{"class":158},[84,25758,25747],{"class":94},[84,25760,25761],{"class":158}," \u002Fdev\u002FttyACM1\n",[19,25763,25764],{},"说明：",[2315,25766,25767,25772,25778,25787],{},[29,25768,25769,25771],{},[39,25770,311],{},"：以 root 权限执行命令。",[29,25773,25774,25777],{},[39,25775,25776],{},"chmod","：修改设备节点权限。",[29,25779,25780,720,25783,25786],{},[39,25781,25782],{},"666",[39,25784,25785],{},"rw-rw-rw-","，所有用户可读写。",[29,25788,25789],{},"串口号必须替换为你机器上的真实端口。",[1222,25791,25792],{},"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":66,"searchDepth":98,"depth":98,"links":25794},[25795,25796,25797],{"id":25691,"depth":98,"text":25692},{"id":25705,"depth":98,"text":25706},{"id":25731,"depth":98,"text":25732},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25683,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25804,"title":25805,"body":25806,"description":1249,"extension":1250,"meta":25967,"navigation":1252,"path":25968,"seo":25969,"stem":25970,"__hash__":25971},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25807,"toc":25963},[25808,25812,25816,25822,25825,25882,25885,25889,25892,25960],[10,25809,25811],{"id":25810},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25813,25815],{"id":25814},"_31-配置电机-id","3.1 配置电机 ID",[19,25817,25818,25819,25821],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[39,25820,1529],{},"，需要改成机械臂链路里不冲突的编号。",[19,25823,25824],{},"方式一：用 LeRobot 命令逐步写入。",[60,25826,25828],{"className":78,"code":25827,"language":80,"meta":66,"style":66},"# 主臂舵机配置 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",[39,25829,25830,25835,25843,25850,25855,25859,25864,25870,25877],{"__ignoreMap":66},[84,25831,25832],{"class":86,"line":87},[84,25833,25834],{"class":1378},"# 主臂舵机配置 ID\n",[84,25836,25837,25840],{"class":86,"line":98},[84,25838,25839],{"class":90},"lerobot-setup-motors",[84,25841,25842],{"class":94}," \\\n",[84,25844,25845,25848],{"class":86,"line":106},[84,25846,25847],{"class":94},"  --teleop.type=so101_leader",[84,25849,25842],{"class":94},[84,25851,25852],{"class":86,"line":112},[84,25853,25854],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[84,25856,25857],{"class":86,"line":425},[84,25858,3578],{"emptyLinePlaceholder":1252},[84,25860,25861],{"class":86,"line":2395},[84,25862,25863],{"class":1378},"# 从臂舵机配置 ID\n",[84,25865,25866,25868],{"class":86,"line":2401},[84,25867,25839],{"class":90},[84,25869,25842],{"class":94},[84,25871,25872,25875],{"class":86,"line":2492},[84,25873,25874],{"class":94},"  --robot.type=so101_follower",[84,25876,25842],{"class":94},[84,25878,25879],{"class":86,"line":2498},[84,25880,25881],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25883,25884],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25886,25888],{"id":25887},"_32-机械臂校准","3.2 机械臂校准",[19,25890,25891],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[60,25893,25895],{"className":78,"code":25894,"language":80,"meta":66,"style":66},"# 主臂校准\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",[39,25896,25897,25902,25909,25915,25922,25927,25931,25936,25942,25948,25955],{"__ignoreMap":66},[84,25898,25899],{"class":86,"line":87},[84,25900,25901],{"class":1378},"# 主臂校准\n",[84,25903,25904,25907],{"class":86,"line":98},[84,25905,25906],{"class":90},"lerobot-calibrate",[84,25908,25842],{"class":94},[84,25910,25911,25913],{"class":86,"line":106},[84,25912,25847],{"class":94},[84,25914,25842],{"class":94},[84,25916,25917,25920],{"class":86,"line":112},[84,25918,25919],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0",[84,25921,25842],{"class":94},[84,25923,25924],{"class":86,"line":425},[84,25925,25926],{"class":94},"  --teleop.id=my_awesome_leader_arm\n",[84,25928,25929],{"class":86,"line":2395},[84,25930,3578],{"emptyLinePlaceholder":1252},[84,25932,25933],{"class":86,"line":2401},[84,25934,25935],{"class":1378},"# 从臂校准\n",[84,25937,25938,25940],{"class":86,"line":2492},[84,25939,25906],{"class":90},[84,25941,25842],{"class":94},[84,25943,25944,25946],{"class":86,"line":2498},[84,25945,25874],{"class":94},[84,25947,25842],{"class":94},[84,25949,25950,25953],{"class":86,"line":2510},[84,25951,25952],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1",[84,25954,25842],{"class":94},[84,25956,25957],{"class":86,"line":2793},[84,25958,25959],{"class":94},"  --robot.id=my_awesome_follower_arm\n",[1222,25961,25962],{},"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":66,"searchDepth":98,"depth":98,"links":25964},[25965,25966],{"id":25814,"depth":98,"text":25815},{"id":25887,"depth":98,"text":25888},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25805,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25973,"title":25974,"body":25975,"description":1249,"extension":1250,"meta":26166,"navigation":1252,"path":26167,"seo":26168,"stem":26169,"__hash__":26170},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25976,"toc":26162},[25977,25980,25984,26031,26035,26048,26111,26114,26159],[10,25978,25974],{"id":25979},"_4-遥操与相机接入",[14,25981,25983],{"id":25982},"_41-不带相机遥操","4.1 不带相机遥操",[60,25985,25987],{"className":78,"code":25986,"language":80,"meta":66,"style":66},"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",[39,25988,25989,25996,26002,26008,26015,26021,26027],{"__ignoreMap":66},[84,25990,25991,25994],{"class":86,"line":87},[84,25992,25993],{"class":90},"lerobot-teleoperate",[84,25995,25842],{"class":94},[84,25997,25998,26000],{"class":86,"line":98},[84,25999,25874],{"class":94},[84,26001,25842],{"class":94},[84,26003,26004,26006],{"class":86,"line":106},[84,26005,25952],{"class":94},[84,26007,25842],{"class":94},[84,26009,26010,26013],{"class":86,"line":112},[84,26011,26012],{"class":94},"  --robot.id=my_awesome_follower_arm",[84,26014,25842],{"class":94},[84,26016,26017,26019],{"class":86,"line":425},[84,26018,25847],{"class":94},[84,26020,25842],{"class":94},[84,26022,26023,26025],{"class":86,"line":2395},[84,26024,25919],{"class":94},[84,26026,25842],{"class":94},[84,26028,26029],{"class":86,"line":2401},[84,26030,25926],{"class":94},[14,26032,26034],{"id":26033},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[60,26036,26038],{"className":78,"code":26037,"language":80,"meta":66,"style":66},"lerobot-find-cameras opencv\n",[39,26039,26040],{"__ignoreMap":66},[84,26041,26042,26045],{"class":86,"line":87},[84,26043,26044],{"class":90},"lerobot-find-cameras",[84,26046,26047],{"class":158}," opencv\n",[60,26049,26051],{"className":78,"code":26050,"language":80,"meta":66,"style":66},"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",[39,26052,26053,26059,26065,26071,26077,26087,26093,26099,26106],{"__ignoreMap":66},[84,26054,26055,26057],{"class":86,"line":87},[84,26056,25993],{"class":90},[84,26058,25842],{"class":94},[84,26060,26061,26063],{"class":86,"line":98},[84,26062,25874],{"class":94},[84,26064,25842],{"class":94},[84,26066,26067,26069],{"class":86,"line":106},[84,26068,25952],{"class":94},[84,26070,25842],{"class":94},[84,26072,26073,26075],{"class":86,"line":112},[84,26074,26012],{"class":94},[84,26076,25842],{"class":94},[84,26078,26079,26082,26085],{"class":86,"line":425},[84,26080,26081],{"class":94},"  --robot.cameras=",[84,26083,26084],{"class":158},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[84,26086,25842],{"class":94},[84,26088,26089,26091],{"class":86,"line":2395},[84,26090,25847],{"class":94},[84,26092,25842],{"class":94},[84,26094,26095,26097],{"class":86,"line":2401},[84,26096,25919],{"class":94},[84,26098,25842],{"class":94},[84,26100,26101,26104],{"class":86,"line":2492},[84,26102,26103],{"class":94},"  --teleop.id=my_awesome_leader_arm",[84,26105,25842],{"class":94},[84,26107,26108],{"class":86,"line":2498},[84,26109,26110],{"class":94},"  --display_data=true\n",[19,26112,26113],{},"相机参数说明：",[2315,26115,26116,26122,26128,26137,26147,26153],{},[29,26117,26118,26121],{},[39,26119,26120],{},"front","：相机名称。",[29,26123,26124,26127],{},[39,26125,26126],{},"type: opencv","：相机驱动类型。",[29,26129,26130,26133,26134,25728],{},[39,26131,26132],{},"index_or_path","：设备编号或设备路径（如 ",[39,26135,26136],{},"\u002Fdev\u002Fvideo4",[29,26138,26139,26142,26143,26146],{},[39,26140,26141],{},"width"," \u002F ",[39,26144,26145],{},"height","：图像分辨率。",[29,26148,26149,26152],{},[39,26150,26151],{},"fps","：采样帧率。",[29,26154,26155,26158],{},[39,26156,26157],{},"--display_data=true","：启用实时可视化。",[1222,26160,26161],{},"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":66,"searchDepth":98,"depth":98,"links":26163},[26164,26165],{"id":25982,"depth":98,"text":25983},{"id":26033,"depth":98,"text":26034},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25974,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26172,"title":26173,"body":26174,"description":1249,"extension":1250,"meta":26345,"navigation":1252,"path":26346,"seo":26347,"stem":26348,"__hash__":26349},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26175,"toc":26340},[26176,26180,26184,26189,26194,26197,26239,26245,26249,26297,26302,26306,26309,26317,26322,26327,26332,26337],[10,26177,26179],{"id":26178},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26181,26183],{"id":26182},"_51-生成访问令牌","5.1 生成访问令牌",[19,26185,26186],{},[2643,26187],{"alt":66,"src":26188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26190,26191],{},[2643,26192],{"alt":66,"src":26193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26195,26196],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[60,26198,26200],{"className":78,"code":26199,"language":80,"meta":66,"style":66},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[39,26201,26202,26215],{"__ignoreMap":66},[84,26203,26204,26207,26210,26212],{"class":86,"line":87},[84,26205,26206],{"class":129},"export",[84,26208,26209],{"class":154}," HF_TOKEN",[84,26211,867],{"class":129},[84,26213,26214],{"class":158},"\"your_huggingface_token\"\n",[84,26216,26217,26220,26223,26226,26229,26231,26234,26236],{"class":86,"line":98},[84,26218,26219],{"class":90},"hf",[84,26221,26222],{"class":158}," auth",[84,26224,26225],{"class":158}," login",[84,26227,26228],{"class":94}," --token",[84,26230,10896],{"class":158},[84,26232,26233],{"class":154},"$HF_TOKEN",[84,26235,1562],{"class":158},[84,26237,26238],{"class":94}," --add-to-git-credential\n",[19,26240,26241,26244],{},[39,26242,26243],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26246,26248],{"id":26247},"_52-验证登录","5.2 验证登录",[60,26250,26252],{"className":78,"code":26251,"language":80,"meta":66,"style":66},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[39,26253,26254,26284],{"__ignoreMap":66},[84,26255,26256,26259,26261,26264,26266,26268,26271,26274,26277,26280,26282],{"class":86,"line":87},[84,26257,26258],{"class":154},"HF_USER",[84,26260,867],{"class":129},[84,26262,26263],{"class":154},"$(",[84,26265,26219],{"class":90},[84,26267,26222],{"class":158},[84,26269,26270],{"class":158}," whoami",[84,26272,26273],{"class":129}," |",[84,26275,26276],{"class":90}," head",[84,26278,26279],{"class":94}," -n",[84,26281,133],{"class":94},[84,26283,162],{"class":154},[84,26285,26286,26289,26291,26294],{"class":86,"line":98},[84,26287,26288],{"class":94},"echo",[84,26290,10896],{"class":158},[84,26292,26293],{"class":154},"$HF_USER",[84,26295,26296],{"class":158},"\"\n",[19,26298,26299],{},[2643,26300],{"alt":66,"src":26301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26303,26305],{"id":26304},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26307,26308],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2315,26310,26311,26314],{},[29,26312,26313],{},"Dataset Repo（用于上传演示数据）",[29,26315,26316],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26318,26319],{},[2643,26320],{"alt":66,"src":26321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26323,26324],{},[2643,26325],{"alt":66,"src":26326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26328,26329],{},[2643,26330],{"alt":66,"src":26331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26333,26334],{},[2643,26335],{"alt":66,"src":26336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1222,26338,26339],{},"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":66,"searchDepth":98,"depth":98,"links":26341},[26342,26343,26344],{"id":26182,"depth":98,"text":26183},{"id":26247,"depth":98,"text":26248},{"id":26304,"depth":98,"text":26305},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26173,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26351,"title":26352,"body":26353,"description":1249,"extension":1250,"meta":26550,"navigation":1252,"path":26551,"seo":26552,"stem":26553,"__hash__":26554},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26354,"toc":26545},[26355,26359,26363,26459,26467,26472,26476,26492,26495,26499,26542],[10,26356,26358],{"id":26357},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26360,26362],{"id":26361},"_61-录制示教数据","6.1 录制示教数据",[60,26364,26366],{"className":78,"code":26365,"language":80,"meta":66,"style":66},"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",[39,26367,26368,26375,26381,26387,26393,26402,26408,26414,26420,26427,26437,26444,26454],{"__ignoreMap":66},[84,26369,26370,26373],{"class":86,"line":87},[84,26371,26372],{"class":90},"lerobot-record",[84,26374,25842],{"class":94},[84,26376,26377,26379],{"class":86,"line":98},[84,26378,25874],{"class":94},[84,26380,25842],{"class":94},[84,26382,26383,26385],{"class":86,"line":106},[84,26384,25952],{"class":94},[84,26386,25842],{"class":94},[84,26388,26389,26391],{"class":86,"line":112},[84,26390,26012],{"class":94},[84,26392,25842],{"class":94},[84,26394,26395,26397,26400],{"class":86,"line":425},[84,26396,26081],{"class":94},[84,26398,26399],{"class":158},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[84,26401,25842],{"class":94},[84,26403,26404,26406],{"class":86,"line":2395},[84,26405,25847],{"class":94},[84,26407,25842],{"class":94},[84,26409,26410,26412],{"class":86,"line":2401},[84,26411,25919],{"class":94},[84,26413,25842],{"class":94},[84,26415,26416,26418],{"class":86,"line":2492},[84,26417,26103],{"class":94},[84,26419,25842],{"class":94},[84,26421,26422,26425],{"class":86,"line":2498},[84,26423,26424],{"class":94},"  --display_data=true",[84,26426,25842],{"class":94},[84,26428,26429,26432,26435],{"class":86,"line":2510},[84,26430,26431],{"class":94},"  --dataset.repo_id=",[84,26433,26434],{"class":158},"\"Embodied-AI-6\u002Fso101_test\"",[84,26436,25842],{"class":94},[84,26438,26439,26442],{"class":86,"line":2793},[84,26440,26441],{"class":94},"  --dataset.num_episodes=10",[84,26443,25842],{"class":94},[84,26445,26446,26449,26452],{"class":86,"line":2798},[84,26447,26448],{"class":94},"  --dataset.single_task=",[84,26450,26451],{"class":158},"\"Grab the green cube\"",[84,26453,25842],{"class":94},[84,26455,26456],{"class":86,"line":2804},[84,26457,26458],{"class":94},"  --resume=true\n",[2315,26460,26461],{},[29,26462,26463,26466],{},[39,26464,26465],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26468,26469],{},[2643,26470],{"alt":66,"src":26471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26473,26475],{"id":26474},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[60,26477,26479],{"className":78,"code":26478,"language":80,"meta":66,"style":66},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[39,26480,26481],{"__ignoreMap":66},[84,26482,26483,26486,26489],{"class":86,"line":87},[84,26484,26485],{"class":90},"rm",[84,26487,26488],{"class":94}," -rf",[84,26490,26491],{"class":158}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26493,26494],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26496,26498],{"id":26497},"_63-回放指定-episode","6.3 回放指定 episode",[60,26500,26502],{"className":78,"code":26501,"language":80,"meta":66,"style":66},"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",[39,26503,26504,26511,26517,26523,26529,26537],{"__ignoreMap":66},[84,26505,26506,26509],{"class":86,"line":87},[84,26507,26508],{"class":90},"lerobot-replay",[84,26510,25842],{"class":94},[84,26512,26513,26515],{"class":86,"line":98},[84,26514,25874],{"class":94},[84,26516,25842],{"class":94},[84,26518,26519,26521],{"class":86,"line":106},[84,26520,25952],{"class":94},[84,26522,25842],{"class":94},[84,26524,26525,26527],{"class":86,"line":112},[84,26526,26012],{"class":94},[84,26528,25842],{"class":94},[84,26530,26531,26533,26535],{"class":86,"line":425},[84,26532,26431],{"class":94},[84,26534,26434],{"class":158},[84,26536,25842],{"class":94},[84,26538,26539],{"class":86,"line":2395},[84,26540,26541],{"class":94},"  --dataset.episode=0\n",[1222,26543,26544],{},"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":66,"searchDepth":98,"depth":98,"links":26546},[26547,26548,26549],{"id":26361,"depth":98,"text":26362},{"id":26474,"depth":98,"text":26475},{"id":26497,"depth":98,"text":26498},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26352,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26556,"title":26557,"body":26558,"description":1249,"extension":1250,"meta":26686,"navigation":1252,"path":26687,"seo":26688,"stem":26689,"__hash__":26690},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26559,"toc":26684},[26560,26564,26627,26630,26677,26682],[10,26561,26563],{"id":26562},"_7-act-模型训练","7. ACT 模型训练",[60,26565,26567],{"className":78,"code":26566,"language":80,"meta":66,"style":66},"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",[39,26568,26569,26576,26584,26591,26598,26605,26612,26619],{"__ignoreMap":66},[84,26570,26571,26574],{"class":86,"line":87},[84,26572,26573],{"class":90},"lerobot-train",[84,26575,25842],{"class":94},[84,26577,26578,26580,26582],{"class":86,"line":98},[84,26579,26431],{"class":94},[84,26581,26434],{"class":158},[84,26583,25842],{"class":94},[84,26585,26586,26589],{"class":86,"line":106},[84,26587,26588],{"class":94},"  --policy.type=act",[84,26590,25842],{"class":94},[84,26592,26593,26596],{"class":86,"line":112},[84,26594,26595],{"class":94},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[84,26597,25842],{"class":94},[84,26599,26600,26603],{"class":86,"line":425},[84,26601,26602],{"class":94},"  --job_name=act_so101_test",[84,26604,25842],{"class":94},[84,26606,26607,26610],{"class":86,"line":2395},[84,26608,26609],{"class":94},"  --policy.device=cuda",[84,26611,25842],{"class":94},[84,26613,26614,26617],{"class":86,"line":2401},[84,26615,26616],{"class":94},"  --wandb.enable=false",[84,26618,25842],{"class":94},[84,26620,26621,26624],{"class":86,"line":2492},[84,26622,26623],{"class":94},"  --policy.repo_id=",[84,26625,26626],{"class":158},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26628,26629],{},"参数说明：",[2315,26631,26632,26638,26644,26650,26656,26665,26671],{},[29,26633,26634,26637],{},[39,26635,26636],{},"--dataset.repo_id","：训练数据集仓库。",[29,26639,26640,26643],{},[39,26641,26642],{},"--policy.type=act","：策略模型类型为 ACT。",[29,26645,26646,26649],{},[39,26647,26648],{},"--output_dir","：本地训练输出目录。",[29,26651,26652,26655],{},[39,26653,26654],{},"--job_name","：训练任务名称。",[29,26657,26658,26661,26662,25728],{},[39,26659,26660],{},"--policy.device","：训练设备（如 ",[39,26663,26664],{},"cuda",[29,26666,26667,26670],{},[39,26668,26669],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,26672,26673,26676],{},[39,26674,26675],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26678,26679],{},[2643,26680],{"alt":66,"src":26681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1222,26683,26544],{},{"title":66,"searchDepth":98,"depth":98,"links":26685},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26557,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26692,"title":26693,"body":26694,"description":1249,"extension":1250,"meta":26781,"navigation":1252,"path":26782,"seo":26783,"stem":26784,"__hash__":26785},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26695,"toc":26779},[26696,26699,26702,26769,26777],[10,26697,26693],{"id":26698},"_8-策略部署与自动采集",[19,26700,26701],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[60,26703,26705],{"className":78,"code":26704,"language":80,"meta":66,"style":66},"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",[39,26706,26707,26713,26719,26725,26733,26739,26746,26754,26762],{"__ignoreMap":66},[84,26708,26709,26711],{"class":86,"line":87},[84,26710,26372],{"class":90},[84,26712,25842],{"class":94},[84,26714,26715,26717],{"class":86,"line":98},[84,26716,25874],{"class":94},[84,26718,25842],{"class":94},[84,26720,26721,26723],{"class":86,"line":106},[84,26722,25952],{"class":94},[84,26724,25842],{"class":94},[84,26726,26727,26729,26731],{"class":86,"line":112},[84,26728,26081],{"class":94},[84,26730,26399],{"class":158},[84,26732,25842],{"class":94},[84,26734,26735,26737],{"class":86,"line":425},[84,26736,26012],{"class":94},[84,26738,25842],{"class":94},[84,26740,26741,26744],{"class":86,"line":2395},[84,26742,26743],{"class":94},"  --display_data=false",[84,26745,25842],{"class":94},[84,26747,26748,26750,26752],{"class":86,"line":2401},[84,26749,26431],{"class":94},[84,26751,26434],{"class":158},[84,26753,25842],{"class":94},[84,26755,26756,26758,26760],{"class":86,"line":2492},[84,26757,26448],{"class":94},[84,26759,26451],{"class":158},[84,26761,25842],{"class":94},[84,26763,26764,26767],{"class":86,"line":2498},[84,26765,26766],{"class":94},"  --policy.path=",[84,26768,26626],{"class":158},[2315,26770,26771],{},[29,26772,26773,26776],{},[39,26774,26775],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1222,26778,26544],{},{"title":66,"searchDepth":98,"depth":98,"links":26780},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26693,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26787,"title":26788,"body":26789,"description":1249,"extension":1250,"meta":26818,"navigation":1252,"path":26819,"seo":26820,"stem":26821,"__hash__":26822},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26790,"toc":26816},[26791,26795,26798,26804,26807,26813],[10,26792,26794],{"id":26793},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26796,26797],{},"项目地址：",[19,26799,26800],{},[208,26801,26802],{"href":26802,"rel":26803},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[212],[19,26805,26806],{},"参考教程：",[19,26808,26809],{},[208,26810,26811],{"href":26811,"rel":26812},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[212],[19,26814,26815],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":66,"searchDepth":98,"depth":98,"links":26817},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26788,"description":1249},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26824,"title":26825,"body":26826,"description":26830,"extension":1250,"meta":26831,"navigation":1252,"path":26832,"seo":26833,"stem":26834,"__hash__":26835},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26827,"toc":26828},[],{"title":66,"searchDepth":98,"depth":98,"links":26829},[],"act复现",{"category":24548},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26825,"description":26830},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26837,"title":26838,"body":26839,"description":66,"extension":1250,"meta":27141,"navigation":1252,"path":27142,"seo":27143,"stem":27144,"__hash__":27145},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26840,"toc":27133},[26841,26844,26848,26858,26865,26872,26875,26882,26885,26888,26892,26904,26908,26954,26957,26960,26963,26966,26969,26973,27011,27017,27021,27075,27080,27083,27086,27091,27094,27099,27102,27105,27109,27112,27115,27119],[10,26842,26838],{"id":26843},"_1简介",[198,26845,26847],{"id":26846},"_11什么是-docker","1.1什么是 Docker？",[19,26849,26850,26851,26854,26855],{},"Docker 是一个开源的 ",[1464,26852,26853],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1464,26856,26857],{},"一次构建，到处运行。",[19,26859,26860,26861,26864],{},"“ ",[1464,26862,26863],{},"一次构建，到处运行"," ”也就是说：",[26,26866,26867],{},[29,26868,26869],{},[1464,26870,26871],{},"之前：",[19,26873,26874],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,26876,26877],{},[29,26878,26879],{},[1464,26880,26881],{},"使用docker后：",[19,26883,26884],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26886,26887],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[198,26889,26891],{"id":26890},"_12它是怎么工作的","1.2.它是怎么工作的？",[2315,26893,26894,26897],{},[29,26895,26896],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,26898,26899,26900,26903],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1464,26901,26902],{},"无论在哪运行都一样稳定"," 。",[198,26905,26907],{"id":26906},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[458,26909,26910,26920],{},[461,26911,26912],{},[464,26913,26914,26917],{},[467,26915,26916],{"align":24906},"概念",[467,26918,26919],{"align":24906},"解释",[474,26921,26922,26930,26938,26946],{},[464,26923,26924,26927],{},[479,26925,26926],{"align":24906},"镜像",[479,26928,26929],{"align":24906},"Image，运行容器的模板，像是一个应用快照",[464,26931,26932,26935],{},[479,26933,26934],{"align":24906},"容器",[479,26936,26937],{"align":24906},"Container，运行中的镜像实例，有自己的文件系统、网络等",[464,26939,26940,26943],{},[479,26941,26942],{"align":24906},"Dockerfile",[479,26944,26945],{"align":24906},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[464,26947,26948,26951],{},[479,26949,26950],{"align":24906},"仓库",[479,26952,26953],{"align":24906},"Registry，存放镜像的地方，比如 Docker Hub",[19,26955,26956],{},"抽象化理解:",[19,26958,26959],{},"Docker镜像≈C++类",[19,26961,26962],{},"Docker容器≈C++类实例(即对象)",[19,26964,26965],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26967,26968],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[198,26970,26972],{"id":26971},"_14类比理解","1.4.类比理解",[458,26974,26975,26985],{},[461,26976,26977],{},[464,26978,26979,26982],{},[467,26980,26981],{"align":24906},"传统部署",[467,26983,26984],{"align":24906},"Docker部署",[474,26986,26987,26995,27003],{},[464,26988,26989,26992],{},[479,26990,26991],{"align":24906},"手动安装依赖、调试版本不一致问题",[479,26993,26994],{"align":24906},"一次打包环境和代码",[464,26996,26997,27000],{},[479,26998,26999],{"align":24906},"程序“裸奔”跑在系统上",[479,27001,27002],{"align":24906},"程序“穿着容器”隔离运行",[464,27004,27005,27008],{},[479,27006,27007],{"align":24906},"容易“在我电脑上能跑”",[479,27009,27010],{"align":24906},"保证“无论在哪都能跑”",[19,27012,27013,27014],{},"就像快递包裹： ",[1464,27015,27016],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[198,27018,27020],{"id":27019},"_15docker-的核心优势","1.5.Docker 的核心优势",[458,27022,27023,27033],{},[461,27024,27025],{},[464,27026,27027,27030],{},[467,27028,27029],{"align":24906},"优势",[467,27031,27032],{"align":24906},"说明",[474,27034,27035,27043,27051,27059,27067],{},[464,27036,27037,27040],{},[479,27038,27039],{"align":24906},"轻量级",[479,27041,27042],{"align":24906},"基于系统内核共享，启动速度快，占资源少",[464,27044,27045,27048],{},[479,27046,27047],{"align":24906},"跨平台",[479,27049,27050],{"align":24906},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[464,27052,27053,27056],{},[479,27054,27055],{"align":24906},"易于迁移部署",[479,27057,27058],{"align":24906},"应用和环境一起封装，不怕依赖不一致",[464,27060,27061,27064],{},[479,27062,27063],{"align":24906},"易于版本控制",[479,27065,27066],{"align":24906},"镜像版本可控，支持回滚",[464,27068,27069,27072],{},[479,27070,27071],{"align":24906},"生态丰富",[479,27073,27074],{"align":24906},"Docker Hub 上有成千上万的现成镜像可用",[26,27076,27077],{},[29,27078,27079],{},"在Linux上可以几乎实现无性能损失。",[19,27081,27082],{},"docker里的发行版和本机共用Linux内核。",[19,27084,27085],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27087,27088],{},[29,27089,27090],{},"可以快速部署在绝大多数Linux发行版",[19,27092,27093],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27095,27096],{},[29,27097,27098],{},"配置环境简单",[19,27100,27101],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27103,27104],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27106,27107],{},[29,27108,27071],{},[19,27110,27111],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27113,27114],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[198,27116,27118],{"id":27117},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2315,27120,27121,27124,27127,27130],{},[29,27122,27123],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,27125,27126],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,27128,27129],{},"微服务架构：每个服务一个容器，灵活组合",[29,27131,27132],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":66,"searchDepth":98,"depth":98,"links":27134},[27135,27136,27137,27138,27139,27140],{"id":26846,"depth":106,"text":26847},{"id":26890,"depth":106,"text":26891},{"id":26906,"depth":106,"text":26907},{"id":26971,"depth":106,"text":26972},{"id":27019,"depth":106,"text":27020},{"id":27117,"depth":106,"text":27118},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26838,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27147,"title":27148,"body":27149,"description":66,"extension":1250,"meta":27877,"navigation":1252,"path":27878,"seo":27879,"stem":27880,"__hash__":27881},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27150,"toc":27872},[27151,27154,27158,27161,27164,27170,27176,27180,27189,27192,27249,27252,27303,27306,27388,27391,27427,27431,27442,27454,27461,27464,27543,27546,27595,27598,27621,27625,27632,27635,27651,27657,27660,27676,27682,27685,27701,27715,27721,27741,27747,27750,27762,27768,27771,27785,27791,27794,27814,27819,27822,27825,27829,27832,27835,27838,27845,27848,27851,27854,27859,27864,27869],[10,27152,27148],{"id":27153},"_2安装docker",[198,27155,27157],{"id":27156},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27159,27160],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27162,27163],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27165,27166],{},[208,27167,27168],{"href":27168,"rel":27169},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[212],[19,27171,27172],{},[208,27173,27174],{"href":27174,"rel":27175},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[212],[23168,27177,27179],{"id":27178},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27181,27182,27183,27188],{},"以下内容根据 ",[208,27184,27187],{"href":27185,"rel":27186},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[212],"官方文档"," 修改而来。",[19,27190,27191],{},"如果你过去安装过 docker，先删掉：",[60,27193,27195],{"className":78,"code":27194,"language":80,"meta":66,"style":66},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[39,27196,27197],{"__ignoreMap":66},[84,27198,27199,27201,27204,27207,27210,27213,27216,27219,27222,27225,27228,27231,27234,27237,27240,27243,27246],{"class":86,"line":87},[84,27200,4203],{"class":129},[84,27202,27203],{"class":154}," pkg ",[84,27205,27206],{"class":129},"in",[84,27208,27209],{"class":158}," docker.io",[84,27211,27212],{"class":158}," docker-doc",[84,27214,27215],{"class":158}," docker-compose",[84,27217,27218],{"class":158}," docker-compose-v2",[84,27220,27221],{"class":158}," podman-docker",[84,27223,27224],{"class":158}," containerd",[84,27226,27227],{"class":158}," runc",[84,27229,27230],{"class":154},"; ",[84,27232,27233],{"class":129},"do",[84,27235,27236],{"class":90}," sudo",[84,27238,27239],{"class":158}," apt-get",[84,27241,27242],{"class":158}," remove",[84,27244,27245],{"class":154}," $pkg; ",[84,27247,27248],{"class":129},"done\n",[19,27250,27251],{},"首先安装依赖和GPG：",[60,27253,27257],{"className":27254,"code":27255,"language":27256,"meta":66,"style":66},"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",[39,27258,27259,27264,27269,27274,27279,27284,27289,27293,27298],{"__ignoreMap":66},[84,27260,27261],{"class":86,"line":87},[84,27262,27263],{},"# Add Docker's official GPG key:\n",[84,27265,27266],{"class":86,"line":98},[84,27267,27268],{},"sudo apt-get update\n",[84,27270,27271],{"class":86,"line":106},[84,27272,27273],{},"sudo apt-get install ca-certificates curl\n",[84,27275,27276],{"class":86,"line":112},[84,27277,27278],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[84,27280,27281],{"class":86,"line":425},[84,27282,27283],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[84,27285,27286],{"class":86,"line":2395},[84,27287,27288],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[84,27290,27291],{"class":86,"line":2401},[84,27292,3578],{"emptyLinePlaceholder":1252},[84,27294,27295],{"class":86,"line":2492},[84,27296,27297],{},"# 如果上面这行报错就弄下面这行\n",[84,27299,27300],{"class":86,"line":2498},[84,27301,27302],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27304,27305],{},"信任 Docker 的 GPG 公钥并添加仓库：",[60,27307,27309],{"className":78,"code":27308,"language":80,"meta":66,"style":66},"# 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",[39,27310,27311,27316,27322,27339,27372],{"__ignoreMap":66},[84,27312,27313],{"class":86,"line":87},[84,27314,27315],{"class":1378},"# Add the repository to Apt sources:\n",[84,27317,27318,27320],{"class":86,"line":98},[84,27319,26288],{"class":94},[84,27321,25842],{"class":94},[84,27323,27324,27327,27330,27333,27336],{"class":86,"line":106},[84,27325,27326],{"class":158},"  \"deb [arch=$(",[84,27328,27329],{"class":90},"dpkg",[84,27331,27332],{"class":94}," --print-architecture",[84,27334,27335],{"class":158},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[84,27337,27338],{"class":94},"\\\n",[84,27340,27341,27344,27346,27348,27351,27354,27356,27358,27361,27363,27365,27368,27370],{"class":86,"line":112},[84,27342,27343],{"class":158},"  \"",[84,27345,26263],{"class":154},[84,27347,1867],{"class":94},[84,27349,27350],{"class":158}," \u002Fetc\u002Fos-release",[84,27352,27353],{"class":154}," && ",[84,27355,26288],{"class":94},[84,27357,10896],{"class":158},[84,27359,27360],{"class":154},"$VERSION_CODENAME",[84,27362,1562],{"class":158},[84,27364,1739],{"class":154},[84,27366,27367],{"class":158},"\" stable\"",[84,27369,26273],{"class":129},[84,27371,25842],{"class":94},[84,27373,27374,27377,27380,27383,27385],{"class":86,"line":425},[84,27375,27376],{"class":90},"  sudo",[84,27378,27379],{"class":158}," tee",[84,27381,27382],{"class":158}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[84,27384,622],{"class":129},[84,27386,27387],{"class":158}," \u002Fdev\u002Fnull\n",[19,27389,27390],{},"最后安装",[60,27392,27394],{"className":78,"code":27393,"language":80,"meta":66,"style":66},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[39,27395,27396,27404],{"__ignoreMap":66},[84,27397,27398,27400,27402],{"class":86,"line":87},[84,27399,311],{"class":90},[84,27401,27239],{"class":158},[84,27403,317],{"class":158},[84,27405,27406,27408,27410,27412,27415,27418,27421,27424],{"class":86,"line":98},[84,27407,311],{"class":90},[84,27409,27239],{"class":158},[84,27411,275],{"class":158},[84,27413,27414],{"class":158}," docker-ce",[84,27416,27417],{"class":158}," docker-ce-cli",[84,27419,27420],{"class":158}," containerd.io",[84,27422,27423],{"class":158}," docker-buildx-plugin",[84,27425,27426],{"class":158}," docker-compose-plugin\n",[23168,27428,27430],{"id":27429},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27432,27433,27434,27437,27438,27441],{},"查看自己自己包管理工具版本（dnf是 ",[1464,27435,27436],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1464,27439,27440],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[60,27443,27445],{"className":78,"code":27444,"language":80,"meta":66,"style":66},"dnf --version\n",[39,27446,27447],{"__ignoreMap":66},[84,27448,27449,27452],{"class":86,"line":87},[84,27450,27451],{"class":90},"dnf",[84,27453,95],{"class":94},[19,27455,27182,27456,27460],{},[208,27457,27187],{"href":27458,"rel":27459},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[212]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27462,27463],{},"如果你之前安装过 docker，请先删掉",[60,27465,27467],{"className":78,"code":27466,"language":80,"meta":66,"style":66},"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",[39,27468,27469,27482,27489,27496,27503,27510,27517,27524,27531,27538],{"__ignoreMap":66},[84,27470,27471,27473,27475,27477,27480],{"class":86,"line":87},[84,27472,311],{"class":90},[84,27474,361],{"class":158},[84,27476,27242],{"class":158},[84,27478,27479],{"class":158}," docker",[84,27481,25842],{"class":94},[84,27483,27484,27487],{"class":86,"line":98},[84,27485,27486],{"class":158},"                  docker-client",[84,27488,25842],{"class":94},[84,27490,27491,27494],{"class":86,"line":106},[84,27492,27493],{"class":158},"                  docker-client-latest",[84,27495,25842],{"class":94},[84,27497,27498,27501],{"class":86,"line":112},[84,27499,27500],{"class":158},"                  docker-common",[84,27502,25842],{"class":94},[84,27504,27505,27508],{"class":86,"line":425},[84,27506,27507],{"class":158},"                  docker-latest",[84,27509,25842],{"class":94},[84,27511,27512,27515],{"class":86,"line":2395},[84,27513,27514],{"class":158},"                  docker-latest-logrotate",[84,27516,25842],{"class":94},[84,27518,27519,27522],{"class":86,"line":2401},[84,27520,27521],{"class":158},"                  docker-logrotate",[84,27523,25842],{"class":94},[84,27525,27526,27529],{"class":86,"line":2492},[84,27527,27528],{"class":158},"                  docker-selinux",[84,27530,25842],{"class":94},[84,27532,27533,27536],{"class":86,"line":2498},[84,27534,27535],{"class":158},"                  docker-engine-selinux",[84,27537,25842],{"class":94},[84,27539,27540],{"class":86,"line":2510},[84,27541,27542],{"class":158},"                  docker-engine\n",[19,27544,27545],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[60,27547,27549],{"className":78,"code":27548,"language":80,"meta":66,"style":66},"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",[39,27550,27551,27565,27580],{"__ignoreMap":66},[84,27552,27553,27555,27557,27560,27562],{"class":86,"line":87},[84,27554,311],{"class":90},[84,27556,361],{"class":158},[84,27558,27559],{"class":94}," -y",[84,27561,275],{"class":158},[84,27563,27564],{"class":158}," dnf-plugins-core\n",[84,27566,27567,27569,27571,27574,27577],{"class":86,"line":98},[84,27568,311],{"class":90},[84,27570,361],{"class":158},[84,27572,27573],{"class":158}," config-manager",[84,27575,27576],{"class":158}," addrepo",[84,27578,27579],{"class":94}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[84,27581,27582,27584,27587,27589,27592],{"class":86,"line":106},[84,27583,311],{"class":90},[84,27585,27586],{"class":158}," sed",[84,27588,450],{"class":94},[84,27590,27591],{"class":158}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[84,27593,27594],{"class":158}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27596,27597],{},"最后安装：",[60,27599,27601],{"className":78,"code":27600,"language":80,"meta":66,"style":66},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[39,27602,27603],{"__ignoreMap":66},[84,27604,27605,27607,27609,27611,27613,27615,27617,27619],{"class":86,"line":87},[84,27606,311],{"class":90},[84,27608,361],{"class":158},[84,27610,275],{"class":158},[84,27612,27414],{"class":158},[84,27614,27417],{"class":158},[84,27616,27420],{"class":158},[84,27618,27423],{"class":158},[84,27620,27426],{"class":158},[198,27622,27624],{"id":27623},"_22配置环境","2.2.配置环境",[23168,27626,27628,27631],{"id":27627},"_221检查-docker-服务状态",[1464,27629,27630],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27633,27634],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[60,27636,27638],{"className":78,"code":27637,"language":80,"meta":66,"style":66},"systemctl status docker\n",[39,27639,27640],{"__ignoreMap":66},[84,27641,27642,27645,27648],{"class":86,"line":87},[84,27643,27644],{"class":90},"systemctl",[84,27646,27647],{"class":158}," status",[84,27649,27650],{"class":158}," docker\n",[23168,27652,27654,27631],{"id":27653},"_222启动-docker-服务",[1464,27655,27656],{},"2.2.2.启动 Docker 服务",[19,27658,27659],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[60,27661,27663],{"className":78,"code":27662,"language":80,"meta":66,"style":66},"sudo systemctl start docker\n",[39,27664,27665],{"__ignoreMap":66},[84,27666,27667,27669,27672,27674],{"class":86,"line":87},[84,27668,311],{"class":90},[84,27670,27671],{"class":158}," systemctl",[84,27673,5362],{"class":158},[84,27675,27650],{"class":158},[23168,27677,27679,27631],{"id":27678},"_223设置-docker-开机自启",[1464,27680,27681],{},"2.2.3.设置 Docker 开机自启",[19,27683,27684],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[60,27686,27688],{"className":78,"code":27687,"language":80,"meta":66,"style":66},"sudo systemctl enable docker\n",[39,27689,27690],{"__ignoreMap":66},[84,27691,27692,27694,27696,27699],{"class":86,"line":87},[84,27693,311],{"class":90},[84,27695,27671],{"class":158},[84,27697,27698],{"class":158}," enable",[84,27700,27650],{"class":158},[23168,27702,27704,14965,27707,14965,27712,27631],{"id":27703},"_224将用户添加到-docker-组",[1464,27705,27706],{},"2.2.4.将用户添加到",[1464,27708,27709],{},[39,27710,27711],{},"docker",[1464,27713,27714],{},"组",[19,27716,27717,27718,27720],{},"使用以下命令将当前用户添加到 ",[39,27719,27711],{}," 组：",[60,27722,27724],{"className":78,"code":27723,"language":80,"meta":66,"style":66},"sudo usermod -aG docker $USER\n",[39,27725,27726],{"__ignoreMap":66},[84,27727,27728,27730,27733,27736,27738],{"class":86,"line":87},[84,27729,311],{"class":90},[84,27731,27732],{"class":158}," usermod",[84,27734,27735],{"class":94}," -aG",[84,27737,27479],{"class":158},[84,27739,27740],{"class":154}," $USER\n",[23168,27742,27744,27631],{"id":27743},"_225退出并重新登录",[1464,27745,27746],{},"2.2.5.退出并重新登录",[19,27748,27749],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[60,27751,27753],{"className":78,"code":27752,"language":80,"meta":66,"style":66},"newgrp docker\n",[39,27754,27755],{"__ignoreMap":66},[84,27756,27757,27760],{"class":86,"line":87},[84,27758,27759],{"class":90},"newgrp",[84,27761,27650],{"class":158},[23168,27763,27765,27631],{"id":27764},"_226重新启动-docker-服务如果需要",[1464,27766,27767],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27769,27770],{},"确保 Docker 服务正在运行，可以使用以下命令：",[60,27772,27773],{"className":78,"code":27662,"language":80,"meta":66,"style":66},[39,27774,27775],{"__ignoreMap":66},[84,27776,27777,27779,27781,27783],{"class":86,"line":87},[84,27778,311],{"class":90},[84,27780,27671],{"class":158},[84,27782,5362],{"class":158},[84,27784,27650],{"class":158},[23168,27786,27788,27631],{"id":27787},"_227重启电脑后检查-docker-服务状态",[1464,27789,27790],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27792,27793],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[60,27795,27797],{"className":78,"code":27796,"language":80,"meta":66,"style":66},"sudo reboot\nsystemctl status docker\n",[39,27798,27799,27806],{"__ignoreMap":66},[84,27800,27801,27803],{"class":86,"line":87},[84,27802,311],{"class":90},[84,27804,27805],{"class":158}," reboot\n",[84,27807,27808,27810,27812],{"class":86,"line":98},[84,27809,27644],{"class":90},[84,27811,27647],{"class":158},[84,27813,27650],{"class":158},[19,27815,27816],{},[2643,27817],{"alt":66,"src":27818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27820,27821],{},"第三行显示enabled说明开机自启动成功",[19,27823,27824],{},"按q退出",[198,27826,27828],{"id":27827},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27830,27831],{},"优先使用linux来使用docker是比较好的",[19,27833,27834],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27836,27837],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27839,27840,27841],{},"官方下载安装:",[208,27842,27843],{"href":27843,"rel":27844},"https:\u002F\u002Fwww.docker.com\u002F",[212],[19,27846,27847],{},"Windows的Docker显卡直通与USB直通:",[19,27849,27850],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27852,27853],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27855,27856],{},[2643,27857],{"alt":66,"src":27858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27860,27861],{},[2643,27862],{"alt":66,"src":27863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27865,27866],{},[2643,27867],{"alt":66,"src":27868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1222,27870,27871],{},"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":66,"searchDepth":98,"depth":98,"links":27873},[27874,27875,27876],{"id":27156,"depth":106,"text":27157},{"id":27623,"depth":106,"text":27624},{"id":27827,"depth":106,"text":27828},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27148,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27883,"title":27884,"body":27885,"description":27892,"extension":1250,"meta":28585,"navigation":1252,"path":28586,"seo":28587,"stem":28588,"__hash__":28589},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27886,"toc":28579},[27887,27890,27893,27897,27902,27907,27910,27938,27943,27952,27955,27960,27964,27971,27976,27982,27986,27989,27993,27998,28090,28095,28113,28118,28139,28144,28160,28164,28169,28198,28203,28249,28254,28298,28306,28323,28328,28344,28349,28363,28366,28369,28372,28375,28404,28407,28412,28416,28419,28422,28428,28431,28434,28437,28499,28506,28511,28514,28532,28536,28539,28556,28559,28562,28576],[10,27888,27884],{"id":27889},"_3docker直通",[19,27891,27892],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[198,27894,27896],{"id":27895},"_31usb直通","3.1.USB直通",[19,27898,27899],{},[2643,27900],{"alt":66,"src":27901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,27903,27904],{},[29,27905,27906],{},"方法一(不是很推荐新手)：",[19,27908,27909],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[60,27911,27913],{"className":78,"code":27912,"language":80,"meta":66,"style":66},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[39,27914,27915,27923,27928],{"__ignoreMap":66},[84,27916,27917,27920],{"class":86,"line":87},[84,27918,27919],{"class":90},"ls",[84,27921,27922],{"class":158}," \u002Fdev\n",[84,27924,27925],{"class":86,"line":98},[84,27926,27927],{"class":1378},"#例如\n",[84,27929,27930,27933,27935],{"class":86,"line":106},[84,27931,27932],{"class":154},"--device",[84,27934,867],{"class":129},[84,27936,27937],{"class":158},"\u002Fdev\u002Ftty_USB0\n",[26,27939,27940],{"start":98},[29,27941,27942],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[60,27944,27946],{"className":78,"code":27945,"language":80,"meta":66,"style":66},"--privileged\n",[39,27947,27948],{"__ignoreMap":66},[84,27949,27950],{"class":86,"line":87},[84,27951,27945],{"class":90},[19,27953,27954],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27956,27957],{},[2643,27958],{"alt":66,"src":27959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[198,27961,27963],{"id":27962},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27965,27966,27967,27970],{},"NVIDIA Container Toolkit使用户 ",[1464,27968,27969],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27972,27973],{},[2643,27974],{"alt":66,"src":27975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27977,27978],{},[208,27979,27980],{"href":27980,"rel":27981},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[212],[23168,27983,27985],{"id":27984},"_321安装","3.2.1.安装",[19,27987,27988],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24080,27990,27992],{"id":27991},"_3211ubuntu","3.2.1.1.Ubuntu",[26,27994,27995],{},[29,27996,27997],{},"配置存储库 并更新",[60,27999,28001],{"className":78,"code":28000,"language":80,"meta":66,"style":66},"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",[39,28002,28003,28032,28052,28064,28076,28082],{"__ignoreMap":66},[84,28004,28005,28008,28011,28014,28016,28018,28021,28024,28027,28030],{"class":86,"line":87},[84,28006,28007],{"class":90},"curl",[84,28009,28010],{"class":94}," -fsSL",[84,28012,28013],{"class":158}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[84,28015,26273],{"class":129},[84,28017,27236],{"class":90},[84,28019,28020],{"class":158}," gpg",[84,28022,28023],{"class":94}," --dearmor",[84,28025,28026],{"class":94}," -o",[84,28028,28029],{"class":158}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[84,28031,25842],{"class":94},[84,28033,28034,28037,28039,28042,28045,28048,28050],{"class":86,"line":98},[84,28035,28036],{"class":154},"  && ",[84,28038,28007],{"class":90},[84,28040,28041],{"class":94}," -s",[84,28043,28044],{"class":94}," -L",[84,28046,28047],{"class":158}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[84,28049,26273],{"class":129},[84,28051,25842],{"class":94},[84,28053,28054,28057,28060,28062],{"class":86,"line":106},[84,28055,28056],{"class":90},"    sed",[84,28058,28059],{"class":158}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[84,28061,26273],{"class":129},[84,28063,25842],{"class":94},[84,28065,28066,28069,28071,28074],{"class":86,"line":112},[84,28067,28068],{"class":90},"    sudo",[84,28070,27379],{"class":158},[84,28072,28073],{"class":158}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[84,28075,25842],{"class":94},[84,28077,28078,28080],{"class":86,"line":425},[84,28079,28036],{"class":154},[84,28081,27338],{"class":94},[84,28083,28084,28086,28088],{"class":86,"line":2395},[84,28085,28068],{"class":90},[84,28087,27239],{"class":158},[84,28089,317],{"class":158},[26,28091,28092],{"start":98},[29,28093,28094],{},"安装nvidia-docker2",[60,28096,28098],{"className":78,"code":28097,"language":80,"meta":66,"style":66},"sudo apt-get install -y nvidia-docker2\n",[39,28099,28100],{"__ignoreMap":66},[84,28101,28102,28104,28106,28108,28110],{"class":86,"line":87},[84,28103,311],{"class":90},[84,28105,27239],{"class":158},[84,28107,275],{"class":158},[84,28109,27559],{"class":94},[84,28111,28112],{"class":158}," nvidia-docker2\n",[26,28114,28115],{"start":106},[29,28116,28117],{},"使用nvidia-ctk命令配置container runtime",[60,28119,28121],{"className":78,"code":28120,"language":80,"meta":66,"style":66},"sudo nvidia-ctk runtime configure --runtime=docker\n",[39,28122,28123],{"__ignoreMap":66},[84,28124,28125,28127,28130,28133,28136],{"class":86,"line":87},[84,28126,311],{"class":90},[84,28128,28129],{"class":158}," nvidia-ctk",[84,28131,28132],{"class":158}," runtime",[84,28134,28135],{"class":158}," configure",[84,28137,28138],{"class":94}," --runtime=docker\n",[26,28140,28141],{"start":112},[29,28142,28143],{},"重启docker服务:",[60,28145,28147],{"className":78,"code":28146,"language":80,"meta":66,"style":66},"sudo systemctl restart docker\n",[39,28148,28149],{"__ignoreMap":66},[84,28150,28151,28153,28155,28158],{"class":86,"line":87},[84,28152,311],{"class":90},[84,28154,27671],{"class":158},[84,28156,28157],{"class":158}," restart",[84,28159,27650],{"class":158},[24080,28161,28163],{"id":28162},"_3212fedora","3.2.1.2.Fedora",[26,28165,28166],{},[29,28167,28168],{},"配置存储库",[60,28170,28172],{"className":78,"code":28171,"language":80,"meta":66,"style":66},"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",[39,28173,28174,28189],{"__ignoreMap":66},[84,28175,28176,28178,28180,28182,28185,28187],{"class":86,"line":87},[84,28177,28007],{"class":90},[84,28179,28041],{"class":94},[84,28181,28044],{"class":94},[84,28183,28184],{"class":158}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[84,28186,26273],{"class":129},[84,28188,25842],{"class":94},[84,28190,28191,28193,28195],{"class":86,"line":98},[84,28192,311],{"class":90},[84,28194,27379],{"class":158},[84,28196,28197],{"class":158}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,28199,28200],{"start":98},[29,28201,28202],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[60,28204,28206],{"className":78,"code":28205,"language":80,"meta":66,"style":66},"# 如果是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",[39,28207,28208,28213,28227,28231,28236],{"__ignoreMap":66},[84,28209,28210],{"class":86,"line":87},[84,28211,28212],{"class":1378},"# 如果是RHEL或者Rocky（DNF4）\n",[84,28214,28215,28217,28219,28221,28224],{"class":86,"line":98},[84,28216,311],{"class":90},[84,28218,361],{"class":158},[84,28220,27573],{"class":158},[84,28222,28223],{"class":94}," --add-repo",[84,28225,28226],{"class":158}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[84,28228,28229],{"class":86,"line":106},[84,28230,3578],{"emptyLinePlaceholder":1252},[84,28232,28233],{"class":86,"line":112},[84,28234,28235],{"class":1378},"# 如果是Feodra41+（DNF5）\n",[84,28237,28238,28240,28242,28244,28246],{"class":86,"line":425},[84,28239,311],{"class":90},[84,28241,361],{"class":158},[84,28243,27573],{"class":158},[84,28245,27576],{"class":158},[84,28247,28248],{"class":94}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,28250,28251],{"start":106},[29,28252,28253],{},"安装NVIDIA Container Toolki包",[60,28255,28257],{"className":78,"code":28256,"language":80,"meta":66,"style":66},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[39,28258,28259,28264,28277,28281,28286],{"__ignoreMap":66},[84,28260,28261],{"class":86,"line":87},[84,28262,28263],{"class":1378},"# 如果是RHEL或者Rocky\n",[84,28265,28266,28268,28270,28272,28274],{"class":86,"line":98},[84,28267,311],{"class":90},[84,28269,361],{"class":158},[84,28271,275],{"class":158},[84,28273,27559],{"class":94},[84,28275,28276],{"class":158}," nvidia-container-toolkit\n",[84,28278,28279],{"class":86,"line":106},[84,28280,3578],{"emptyLinePlaceholder":1252},[84,28282,28283],{"class":86,"line":112},[84,28284,28285],{"class":1378},"# 如果是Fedora\n",[84,28287,28288,28290,28292,28294,28296],{"class":86,"line":425},[84,28289,311],{"class":90},[84,28291,361],{"class":158},[84,28293,275],{"class":158},[84,28295,27559],{"class":94},[84,28297,28276],{"class":158},[26,28299,28300],{"start":112},[29,28301,28302,28303,28305],{},"安装nvidia-docker2 ： 在Fedora上使用",[39,28304,27451],{},"进行安装",[60,28307,28309],{"className":78,"code":28308,"language":80,"meta":66,"style":66},"sudo dnf install -y nvidia-docker2\n",[39,28310,28311],{"__ignoreMap":66},[84,28312,28313,28315,28317,28319,28321],{"class":86,"line":87},[84,28314,311],{"class":90},[84,28316,361],{"class":158},[84,28318,275],{"class":158},[84,28320,27559],{"class":94},[84,28322,28112],{"class":158},[26,28324,28325],{"start":425},[29,28326,28327],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[60,28329,28330],{"className":78,"code":28120,"language":80,"meta":66,"style":66},[39,28331,28332],{"__ignoreMap":66},[84,28333,28334,28336,28338,28340,28342],{"class":86,"line":87},[84,28335,311],{"class":90},[84,28337,28129],{"class":158},[84,28339,28132],{"class":158},[84,28341,28135],{"class":158},[84,28343,28138],{"class":94},[26,28345,28346],{"start":2395},[29,28347,28348],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[60,28350,28351],{"className":78,"code":28146,"language":80,"meta":66,"style":66},[39,28352,28353],{"__ignoreMap":66},[84,28354,28355,28357,28359,28361],{"class":86,"line":87},[84,28356,311],{"class":90},[84,28358,27671],{"class":158},[84,28360,28157],{"class":158},[84,28362,27650],{"class":158},[19,28364,28365],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28367,28368],{},"方法：",[19,28370,28371],{},"1️⃣nvidia-smi",[19,28373,28374],{},"2️⃣运行nvidia cuda 容器进行测试",[60,28376,28378],{"className":78,"code":28377,"language":80,"meta":66,"style":66},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[39,28379,28380],{"__ignoreMap":66},[84,28381,28382,28384,28386,28389,28392,28395,28398,28401],{"class":86,"line":87},[84,28383,311],{"class":90},[84,28385,27479],{"class":158},[84,28387,28388],{"class":158}," run",[84,28390,28391],{"class":94}," --rm",[84,28393,28394],{"class":94}," --gpus",[84,28396,28397],{"class":158}," all",[84,28399,28400],{"class":158}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[84,28402,28403],{"class":158}," nvidia-smi\n",[19,28405,28406],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28408,28409],{},[2643,28410],{"alt":66,"src":28411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[198,28413,28415],{"id":28414},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28417,28418],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28420,28421],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28423,28424],{},[208,28425,28426],{"href":28426,"rel":28427},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[212],[19,28429,28430],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28432,28433],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28435,28436],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[458,28438,28439,28455],{},[461,28440,28441],{},[464,28442,28443,28446,28449,28452],{},[467,28444,28445],{"align":24906},"镜像类型",[467,28447,28448],{"align":24906},"适用场景",[467,28450,28451],{"align":24906},"示例标签",[467,28453,28454],{"align":24906},"大小",[474,28456,28457,28471,28485],{},[464,28458,28459,28462,28465,28468],{},[479,28460,28461],{"align":24906},"base",[479,28463,28464],{"align":24906},"仅需 CUDA 运行时库",[479,28466,28467],{"align":24906},"12.4.0-base-ubuntu22.04",[479,28469,28470],{"align":24906},"~240MB",[464,28472,28473,28476,28479,28482],{},[479,28474,28475],{"align":24906},"runtime",[479,28477,28478],{"align":24906},"部署编译后的应用（含数学库）",[479,28480,28481],{"align":24906},"12.4.0-runtime-ubuntu22.04",[479,28483,28484],{"align":24906},"~2GB",[464,28486,28487,28490,28493,28496],{},[479,28488,28489],{"align":24906},"devel",[479,28491,28492],{"align":24906},"开发环境（含编译工具）",[479,28494,28495],{"align":24906},"12.4.0-devel-ubuntu22.04",[479,28497,28498],{"align":24906},"~3GB",[19,28500,28501,28502,28505],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[39,28503,28504],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28507,28508],{},[2643,28509],{"alt":66,"src":28510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28512,28513],{},"在dockerfile里就可以开头这么写：",[60,28515,28517],{"className":78,"code":28516,"language":80,"meta":66,"style":66},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[39,28518,28519,28524],{"__ignoreMap":66},[84,28520,28521],{"class":86,"line":87},[84,28522,28523],{"class":1378},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[84,28525,28526,28529],{"class":86,"line":98},[84,28527,28528],{"class":90},"FROM",[84,28530,28531],{"class":158}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[198,28533,28535],{"id":28534},"_34配置以太网","3.4.配置以太网",[19,28537,28538],{},"指定网络模式",[60,28540,28542],{"className":78,"code":28541,"language":80,"meta":66,"style":66},"--net=host \\\n",[39,28543,28544],{"__ignoreMap":66},[84,28545,28546,28549,28551,28554],{"class":86,"line":87},[84,28547,28548],{"class":154},"--net",[84,28550,867],{"class":129},[84,28552,28553],{"class":158},"host",[84,28555,25842],{"class":90},[19,28557,28558],{},"启动参数里加上这行即可。具体在下方",[19,28560,28561],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2315,28563,28564,28567,28570,28573],{},[29,28565,28566],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,28568,28569],{},"--net=host:容器使用宿主机的网络",[29,28571,28572],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,28574,28575],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1222,28577,28578],{},"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":66,"searchDepth":98,"depth":98,"links":28580},[28581,28582,28583,28584],{"id":27895,"depth":106,"text":27896},{"id":27962,"depth":106,"text":27963},{"id":28414,"depth":106,"text":28415},{"id":28534,"depth":106,"text":28535},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27884,"description":27892},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28591,"title":28592,"body":28593,"description":28600,"extension":1250,"meta":28606,"navigation":1252,"path":28607,"seo":28608,"stem":28609,"__hash__":28610},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28594,"toc":28604},[28595,28598,28601],[10,28596,28592],{"id":28597},"_4dockerhub换源",[19,28599,28600],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28602,28603],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":66,"searchDepth":98,"depth":98,"links":28605},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28592,"description":28600},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28612,"title":28613,"body":28614,"description":66,"extension":1250,"meta":29625,"navigation":1252,"path":29626,"seo":29627,"stem":29628,"__hash__":29629},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28615,"toc":29620},[28616,28619,28623,28629,28633,28636,28976,28979,28982,28985,28990,28995,28998,29001,29004,29007,29026,29029,29040,29046,29228,29238,29254,29517,29519,29543,29558,29567,29617],[10,28617,28613],{"id":28618},"_5docker命令学习",[198,28620,28622],{"id":28621},"_51参考文档","5.1.参考文档",[19,28624,28625],{},[208,28626,28627],{"href":28627,"rel":28628},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[212],[198,28630,28632],{"id":28631},"_52常用命令","5.2.常用命令",[19,28634,28635],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[458,28637,28638,28651],{},[461,28639,28640],{},[464,28641,28642,28645,28648],{},[467,28643,28644],{"align":24906},"命令",[467,28646,28647],{"align":24906},"描述",[467,28649,28650],{"align":24906},"示例",[474,28652,28653,28664,28675,28686,28697,28708,28719,28730,28740,28751,28762,28773,28783,28794,28805,28816,28826,28836,28846,28856,28867,28878,28889,28900,28911,28922,28932,28943,28954,28965],{},[464,28654,28655,28658,28661],{},[479,28656,28657],{"align":24906},"docker run",[479,28659,28660],{"align":24906},"创建并启动一个新的容器。",[479,28662,28663],{"align":24906},"docker run -it ubuntu bash",[464,28665,28666,28669,28672],{},[479,28667,28668],{"align":24906},"docker build",[479,28670,28671],{"align":24906},"通过指定的 Dockerfile 创建一个新的镜像。",[479,28673,28674],{"align":24906},"docker build -t myimage .",[464,28676,28677,28680,28683],{},[479,28678,28679],{"align":24906},"docker pull",[479,28681,28682],{"align":24906},"从 Docker 仓库拉取镜像。",[479,28684,28685],{"align":24906},"docker pull ubuntu",[464,28687,28688,28691,28694],{},[479,28689,28690],{"align":24906},"docker push",[479,28692,28693],{"align":24906},"将本地镜像推送到 Docker 仓库。",[479,28695,28696],{"align":24906},"docker push myimage",[464,28698,28699,28702,28705],{},[479,28700,28701],{"align":24906},"docker stop",[479,28703,28704],{"align":24906},"停止一个正在运行的容器。",[479,28706,28707],{"align":24906},"docker stop container_id",[464,28709,28710,28713,28716],{},[479,28711,28712],{"align":24906},"docker start",[479,28714,28715],{"align":24906},"启动一个已经存在的容器。",[479,28717,28718],{"align":24906},"docker start container_id",[464,28720,28721,28724,28727],{},[479,28722,28723],{"align":24906},"docker restart",[479,28725,28726],{"align":24906},"重新启动容器。",[479,28728,28729],{"align":24906},"docker restart container_id",[464,28731,28732,28735,28738],{},[479,28733,28734],{"align":24906},"docker ps",[479,28736,28737],{"align":24906},"列出当前正在运行的容器。",[479,28739,28734],{"align":24906},[464,28741,28742,28745,28748],{},[479,28743,28744],{"align":24906},"docker rm",[479,28746,28747],{"align":24906},"删除一个或多个停止的容器。",[479,28749,28750],{"align":24906},"docker rm container_id",[464,28752,28753,28756,28759],{},[479,28754,28755],{"align":24906},"docker exec",[479,28757,28758],{"align":24906},"在一个正在运行的容器中执行命令。",[479,28760,28761],{"align":24906},"docker exec -it container_id bash",[464,28763,28764,28767,28770],{},[479,28765,28766],{"align":24906},"docker logs",[479,28768,28769],{"align":24906},"查看容器的日志输出。",[479,28771,28772],{"align":24906},"docker logs container_id",[464,28774,28775,28778,28781],{},[479,28776,28777],{"align":24906},"docker images",[479,28779,28780],{"align":24906},"列出本地所有镜像。",[479,28782,28777],{"align":24906},[464,28784,28785,28788,28791],{},[479,28786,28787],{"align":24906},"docker rmi",[479,28789,28790],{"align":24906},"删除一个或多个镜像。",[479,28792,28793],{"align":24906},"docker rmi myimage",[464,28795,28796,28799,28802],{},[479,28797,28798],{"align":24906},"docker network",[479,28800,28801],{"align":24906},"管理 Docker 网络。",[479,28803,28804],{"align":24906},"docker network ls",[464,28806,28807,28810,28813],{},[479,28808,28809],{"align":24906},"docker volume",[479,28811,28812],{"align":24906},"管理 Docker 数据卷。",[479,28814,28815],{"align":24906},"docker volume ls",[464,28817,28818,28821,28824],{},[479,28819,28820],{"align":24906},"docker-compose up",[479,28822,28823],{"align":24906},"启动 docker-compose.yml 中定义的所有服务。",[479,28825,28820],{"align":24906},[464,28827,28828,28831,28834],{},[479,28829,28830],{"align":24906},"docker-compose down",[479,28832,28833],{"align":24906},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[479,28835,28830],{"align":24906},[464,28837,28838,28841,28844],{},[479,28839,28840],{"align":24906},"docker info",[479,28842,28843],{"align":24906},"显示 Docker 系统的详细信息。",[479,28845,28840],{"align":24906},[464,28847,28848,28851,28854],{},[479,28849,28850],{"align":24906},"docker stats",[479,28852,28853],{"align":24906},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[479,28855,28850],{"align":24906},[464,28857,28858,28861,28864],{},[479,28859,28860],{"align":24906},"docker inspect",[479,28862,28863],{"align":24906},"查看容器或镜像的详细信息（JSON 格式）。",[479,28865,28866],{"align":24906},"docker inspect container_id",[464,28868,28869,28872,28875],{},[479,28870,28871],{"align":24906},"docker save",[479,28873,28874],{"align":24906},"将一个镜像保存为 tar 文件。",[479,28876,28877],{"align":24906},"docker save -o myimage.tar myimage",[464,28879,28880,28883,28886],{},[479,28881,28882],{"align":24906},"docker load",[479,28884,28885],{"align":24906},"从 tar 文件中加载镜像。",[479,28887,28888],{"align":24906},"docker load -i myimage.tar",[464,28890,28891,28894,28897],{},[479,28892,28893],{"align":24906},"docker tag",[479,28895,28896],{"align":24906},"为镜像添加标签（tag）。",[479,28898,28899],{"align":24906},"docker tag myimage myimage:v1",[464,28901,28902,28905,28908],{},[479,28903,28904],{"align":24906},"docker buildx build",[479,28906,28907],{"align":24906},"使用 Buildx 构建多架构镜像。",[479,28909,28910],{"align":24906},"docker buildx build -t myimage .",[464,28912,28913,28916,28919],{},[479,28914,28915],{"align":24906},"docker buildx create",[479,28917,28918],{"align":24906},"创建一个新的 Buildx 构建实例。",[479,28920,28921],{"align":24906},"docker buildx create –use",[464,28923,28924,28927,28930],{},[479,28925,28926],{"align":24906},"docker buildx ls",[479,28928,28929],{"align":24906},"列出所有可用的 Buildx 构建实例。",[479,28931,28926],{"align":24906},[464,28933,28934,28937,28940],{},[479,28935,28936],{"align":24906},"docker buildx use",[479,28938,28939],{"align":24906},"设置当前的 Buildx 构建实例。",[479,28941,28942],{"align":24906},"docker buildx use mybuilder",[464,28944,28945,28948,28951],{},[479,28946,28947],{"align":24906},"docker buildx bake",[479,28949,28950],{"align":24906},"使用 Bake 文件批量构建镜像。",[479,28952,28953],{"align":24906},"docker buildx bake -f bake.hcl",[464,28955,28956,28959,28962],{},[479,28957,28958],{"align":24906},"docker buildx build –push",[479,28960,28961],{"align":24906},"构建镜像并推送到镜像仓库。",[479,28963,28964],{"align":24906},"docker buildx build –push -t myimage .",[464,28966,28967,28970,28973],{},[479,28968,28969],{"align":24906},"docker buildx build –platform",[479,28971,28972],{"align":24906},"构建镜像并为多个平台生成支持。",[479,28974,28975],{"align":24906},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28977,28978],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28980,28981],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28983,28984],{},"docker images 可以查看已经下载的镜像",[19,28986,28987],{},[2643,28988],{"alt":66,"src":28989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28991,28992],{},[1464,28993,28994],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28996,28997],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28999,29000],{},"docker container logs 查看容器日志",[19,29002,29003],{},"docker top 查看容器里的进程",[19,29005,29006],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[60,29008,29010],{"className":78,"code":29009,"language":80,"meta":66,"style":66},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[39,29011,29012],{"__ignoreMap":66},[84,29013,29014,29017,29020,29023],{"class":86,"line":87},[84,29015,29016],{"class":90},"如：docker",[84,29018,29019],{"class":158}," cp",[84,29021,29022],{"class":158}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[84,29024,29025],{"class":158}," \u002Fmydata\u002Fnginx\n",[19,29027,29028],{},"docker run时在启动容器的时候会有几个常用的选项：",[2315,29030,29031,29034,29037],{},[29,29032,29033],{},"-d选项：表示后台运行",[29,29035,29036],{},"-P选项：随机端口映射",[29,29038,29039],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[198,29041,29043],{"id":29042},"_53run命令的参数非常重要",[1464,29044,29045],{},"5.3.run命令的参数（非常重要）",[458,29047,29048,29061],{},[461,29049,29050],{},[464,29051,29052,29055,29058],{},[467,29053,29054],{"align":24906},"参数\u002F配置",[467,29056,29057],{"align":24906},"功能说明",[467,29059,29060],{"align":24906},"重要性与参考依据",[474,29062,29063,29074,29085,29096,29107,29118,29129,29140,29151,29162,29173,29184,29195,29206,29217],{},[464,29064,29065,29068,29071],{},[479,29066,29067],{"align":24906},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[479,29069,29070],{"align":24906},"指定容器名称，便于后续管理",[479,29072,29073],{"align":24906},"替代随机生成的容器名。",[464,29075,29076,29079,29082],{},[479,29077,29078],{"align":24906},"–gpus all",[479,29080,29081],{"align":24906},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[479,29083,29084],{"align":24906},"用于CUDA加速等GPU依赖任务。",[464,29086,29087,29090,29093],{},[479,29088,29089],{"align":24906},"-e NVIDIA_DRIVER_CAPABILITIES=all",[479,29091,29092],{"align":24906},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[479,29094,29095],{"align":24906},"确保容器内GPU功能完整67。",[464,29097,29098,29101,29104],{},[479,29099,29100],{"align":24906},"-dit",[479,29102,29103],{"align":24906},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[479,29105,29106],{"align":24906},"允许容器在后台运行并支持交互操作。",[464,29108,29109,29112,29115],{},[479,29110,29111],{"align":24906},"–privileged",[479,29113,29114],{"align":24906},"赋予容器完全主机权限（可访问设备、内核模块等）",[479,29116,29117],{"align":24906},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[464,29119,29120,29123,29126],{},[479,29121,29122],{"align":24906},"–net=host",[479,29124,29125],{"align":24906},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[479,29127,29128],{"align":24906},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[464,29130,29131,29134,29137],{},[479,29132,29133],{"align":24906},"–group-add audio–group-add video–group-add dialout",[479,29135,29136],{"align":24906},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[479,29138,29139],{"align":24906},"避免权限问题（如避免无法调用摄像头、麦克风）。",[464,29141,29142,29145,29148],{},[479,29143,29144],{"align":24906},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[479,29146,29147],{"align":24906},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[479,29149,29150],{"align":24906},"支持容器内运行图形界面应用（如OpenCV可视化）。",[464,29152,29153,29156,29159],{},[479,29154,29155],{"align":24906},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[479,29157,29158],{"align":24906},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[479,29160,29161],{"align":24906},"实现容器内图形显示。",[464,29163,29164,29167,29170],{},[479,29165,29166],{"align":24906},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[479,29168,29169],{"align":24906},"挂载X11认证文件（只读）",[479,29171,29172],{"align":24906},"确保容器有权连接宿主机显示服务。",[464,29174,29175,29178,29181],{},[479,29176,29177],{"align":24906},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[479,29179,29180],{"align":24906},"挂载Wayland显示协议相关目录",[479,29182,29183],{"align":24906},"支持Wayland协议的图形显示。",[464,29185,29186,29189,29192],{},[479,29187,29188],{"align":24906},"–ulimit nofile=1024:524288",[479,29190,29191],{"align":24906},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[479,29193,29194],{"align":24906},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[464,29196,29197,29200,29203],{},[479,29198,29199],{"align":24906},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[479,29201,29202],{"align":24906},"挂载宿主机用户目录到容器内同名路径",[479,29204,29205],{"align":24906},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[464,29207,29208,29211,29214],{},[479,29209,29210],{"align":24906},"-w \u002Fhome\u002Ftungchiahui",[479,29212,29213],{"align":24906},"设置容器启动后的默认工作目录",[479,29215,29216],{"align":24906},"直接进入项目路径，方便执行命令2324。",[464,29218,29219,29222,29225],{},[479,29220,29221],{"align":24906},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[479,29223,29224],{"align":24906},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[479,29226,29227],{"align":24906},"提供预配置的深度学习与机器人开发环境。",[19,29229,29230,29231,29233,29234,29237],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[39,29232,311],{},"加不加",[39,29235,29236],{},"sudo -E","都无所谓。",[19,29239,29240,29241,29243,29244,29246,29247,29250,29251,29253],{},"用户已经被加到docker组了，不用",[39,29242,311],{},"也行跑，其次，",[39,29245,311],{},"运行的话，你的",[39,29248,29249],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[39,29252,29249],{},"更不可能变了。",[60,29255,29257],{"className":78,"code":29256,"language":80,"meta":66,"style":66},"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",[39,29258,29259,29272,29282,29292,29304,29311,29318,29325,29335,29344,29353,29367,29379,29391,29400,29410,29419,29434,29467,29494,29505,29512],{"__ignoreMap":66},[84,29260,29261,29263,29265,29267,29270],{"class":86,"line":87},[84,29262,311],{"class":90},[84,29264,27479],{"class":158},[84,29266,28388],{"class":158},[84,29268,29269],{"class":94}," --name=ros_opencv_cuda",[84,29271,25842],{"class":94},[84,29273,29274,29277,29280],{"class":86,"line":98},[84,29275,29276],{"class":154},"--gpus ",[84,29278,29279],{"class":158},"all",[84,29281,25842],{"class":94},[84,29283,29284,29287,29290],{"class":86,"line":106},[84,29285,29286],{"class":154},"-e ",[84,29288,29289],{"class":158},"NVIDIA_DRIVER_CAPABILITIES=all",[84,29291,25842],{"class":94},[84,29293,29294,29296,29299,29302],{"class":86,"line":112},[84,29295,29286],{"class":154},[84,29297,29298],{"class":158},"DISPLAY=",[84,29300,29301],{"class":154},"$DISPLAY ",[84,29303,27338],{"class":94},[84,29305,29306,29309],{"class":86,"line":425},[84,29307,29308],{"class":154},"-dit ",[84,29310,27338],{"class":94},[84,29312,29313,29316],{"class":86,"line":2395},[84,29314,29315],{"class":154},"--privileged ",[84,29317,27338],{"class":94},[84,29319,29320,29323],{"class":86,"line":2401},[84,29321,29322],{"class":154},"--net=host ",[84,29324,27338],{"class":94},[84,29326,29327,29330,29333],{"class":86,"line":2492},[84,29328,29329],{"class":154},"--group-add ",[84,29331,29332],{"class":158},"audio",[84,29334,25842],{"class":94},[84,29336,29337,29339,29342],{"class":86,"line":2498},[84,29338,29329],{"class":154},[84,29340,29341],{"class":158},"video",[84,29343,25842],{"class":94},[84,29345,29346,29348,29351],{"class":86,"line":2510},[84,29347,29329],{"class":154},[84,29349,29350],{"class":158},"dialout",[84,29352,25842],{"class":94},[84,29354,29355,29357,29360,29362,29365],{"class":86,"line":2793},[84,29356,29286],{"class":154},[84,29358,29359],{"class":158},"XAUTHORITY=",[84,29361,29249],{"class":154},[84,29363,29364],{"class":158},"\u002F.Xauthority",[84,29366,25842],{"class":94},[84,29368,29369,29371,29374,29377],{"class":86,"line":2798},[84,29370,29286],{"class":154},[84,29372,29373],{"class":158},"WAYLAND_DISPLAY=",[84,29375,29376],{"class":154},"$WAYLAND_DISPLAY ",[84,29378,27338],{"class":94},[84,29380,29381,29383,29386,29389],{"class":86,"line":2804},[84,29382,29286],{"class":154},[84,29384,29385],{"class":158},"XDG_RUNTIME_DIR=",[84,29387,29388],{"class":154},"$XDG_RUNTIME_DIR ",[84,29390,27338],{"class":94},[84,29392,29393,29395,29398],{"class":86,"line":2809},[84,29394,29286],{"class":154},[84,29396,29397],{"class":158},"QT_QPA_PLATFORM=xcb",[84,29399,25842],{"class":94},[84,29401,29402,29405,29408],{"class":86,"line":2823},[84,29403,29404],{"class":154},"-v ",[84,29406,29407],{"class":158},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[84,29409,25842],{"class":94},[84,29411,29412,29414,29417],{"class":86,"line":2828},[84,29413,29404],{"class":154},[84,29415,29416],{"class":158},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[84,29418,25842],{"class":94},[84,29420,29421,29424,29427,29429,29432],{"class":86,"line":2834},[84,29422,29423],{"class":154},"-v $HOME",[84,29425,29426],{"class":158},"\u002F.Xauthority:",[84,29428,29249],{"class":154},[84,29430,29431],{"class":158},"\u002F.Xauthority:ro",[84,29433,25842],{"class":94},[84,29435,29436,29438,29441,29443,29446,29449,29451,29454,29456,29458,29460,29462,29465],{"class":86,"line":2855},[84,29437,29404],{"class":154},[84,29439,29440],{"class":158},"\u002Frun\u002Fuser\u002F",[84,29442,26263],{"class":154},[84,29444,29445],{"class":90},"id",[84,29447,29448],{"class":94}," -u",[84,29450,1739],{"class":154},[84,29452,29453],{"class":158},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[84,29455,26263],{"class":154},[84,29457,29445],{"class":90},[84,29459,29448],{"class":94},[84,29461,1739],{"class":154},[84,29463,29464],{"class":158},"\u002Fwayland-0",[84,29466,25842],{"class":94},[84,29468,29469,29471,29473,29475,29477,29479,29481,29484,29486,29488,29490,29492],{"class":86,"line":2860},[84,29470,29404],{"class":154},[84,29472,29440],{"class":158},[84,29474,26263],{"class":154},[84,29476,29445],{"class":90},[84,29478,29448],{"class":94},[84,29480,1739],{"class":154},[84,29482,29483],{"class":158},":\u002Frun\u002Fuser\u002F",[84,29485,26263],{"class":154},[84,29487,29445],{"class":90},[84,29489,29448],{"class":94},[84,29491,1154],{"class":154},[84,29493,27338],{"class":94},[84,29495,29496,29498,29500,29503],{"class":86,"line":2874},[84,29497,29423],{"class":154},[84,29499,2167],{"class":158},[84,29501,29502],{"class":154},"$HOME ",[84,29504,27338],{"class":94},[84,29506,29507,29510],{"class":86,"line":2879},[84,29508,29509],{"class":154},"-w $HOME ",[84,29511,27338],{"class":94},[84,29513,29514],{"class":86,"line":2908},[84,29515,29516],{"class":154},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29518,10197],{},[26,29520,29521,29529,29532,29535],{},[29,29522,29523,14965,29525,29528],{},[39,29524,29289],{},[39,29526,29527],{},"--gpus all","没有英伟达显卡请注释。",[29,29530,29531],{},"--name后面请自己为容器起名。",[29,29533,29534],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,29536,29537,29538,55],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24723,29539,29540],{},[1464,29541,29542],{},"请不要加",[60,29544,29546],{"className":78,"code":29545,"language":80,"meta":66,"style":66},"--ulimit nofile=1024:524288 \\\n",[39,29547,29548],{"__ignoreMap":66},[84,29549,29550,29553,29556],{"class":86,"line":87},[84,29551,29552],{"class":90},"--ulimit",[84,29554,29555],{"class":158}," nofile=1024:524288",[84,29557,25842],{"class":94},[19,29559,29560,29561,29566],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24723,29562,29563],{},[1464,29564,29565],{},"不建议","**.**",[60,29568,29570],{"className":78,"code":29569,"language":80,"meta":66,"style":66},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[39,29571,29572,29599,29608],{"__ignoreMap":66},[84,29573,29574,29577,29580,29582,29584,29586,29588,29590,29592,29595,29597],{"class":86,"line":87},[84,29575,29576],{"class":90},"--user",[84,29578,29579],{"class":154}," $(",[84,29581,29445],{"class":90},[84,29583,29448],{"class":94},[84,29585,1739],{"class":154},[84,29587,2167],{"class":158},[84,29589,26263],{"class":154},[84,29591,29445],{"class":90},[84,29593,29594],{"class":94}," -g",[84,29596,1154],{"class":154},[84,29598,27338],{"class":94},[84,29600,29601,29603,29606],{"class":86,"line":98},[84,29602,29404],{"class":154},[84,29604,29605],{"class":158},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[84,29607,25842],{"class":94},[84,29609,29610,29612,29615],{"class":86,"line":106},[84,29611,29404],{"class":154},[84,29613,29614],{"class":158},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[84,29616,25842],{"class":94},[1222,29618,29619],{},"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":66,"searchDepth":98,"depth":98,"links":29621},[29622,29623,29624],{"id":28621,"depth":106,"text":28622},{"id":28631,"depth":106,"text":28632},{"id":29042,"depth":106,"text":29045},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28613,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29631,"title":29632,"body":29633,"description":66,"extension":1250,"meta":31256,"navigation":1252,"path":31257,"seo":31258,"stem":31259,"__hash__":31260},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29634,"toc":31251},[29635,29638,29642,29645,29867,29871,29875,29878,29984,29989,29992,29997,30000,30005,30008,30013,30016,30028,30031,30036,30043,30071,30078,30154,30159,30162,30185,30187,30262,30267,30270,30274,30282,30287,30292,30296,30307,30313,30316,30319,30343,30346,30349,30377,30380,30383,30848,30851,30856,30861,30865,30888,30893,30897,30901,30904,30907,30910,30937,30940,30943,30961,30964,30967,30989,30997,31002,31007,31011,31014,31017,31020,31023,31068,31071,31089,31092,31097,31100,31121,31124,31180,31183,31188,31192,31195,31202,31205,31208,31213,31216,31232,31235,31248],[10,29636,29632],{"id":29637},"_6手动创建docker镜像",[198,29639,29641],{"id":29640},"_61dockerfile","6.1.DockerFile",[19,29643,29644],{},"常用命令：",[458,29646,29647,29658],{},[461,29648,29649],{},[464,29650,29651,29654,29656],{},[467,29652,29653],{"align":24906},"指令",[467,29655,27032],{"align":24906},[467,29657,28650],{"align":24906},[474,29659,29660,29670,29686,29697,29708,29719,29730,29741,29752,29766,29780,29791,29805,29816,29827,29841,29856],{},[464,29661,29662,29664,29667],{},[479,29663,28528],{"align":24906},[479,29665,29666],{"align":24906},"指定基础镜像，是 Dockerfile 的起点",[479,29668,29669],{"align":24906},"FROM ubuntu:22.04",[464,29671,29672,29675,29678],{},[479,29673,29674],{"align":24906},"LABEL",[479,29676,29677],{"align":24906},"添加元数据（如作者、版本等）",[479,29679,29680,29681,29685],{"align":24906},"LABEL maintainer=”",[208,29682,29684],{"href":29683},"mailto:you@example.com","you@example.com","”",[464,29687,29688,29691,29694],{},[479,29689,29690],{"align":24906},"ENV",[479,29692,29693],{"align":24906},"设置环境变量",[479,29695,29696],{"align":24906},"ENV PORT=8080",[464,29698,29699,29702,29705],{},[479,29700,29701],{"align":24906},"ARG",[479,29703,29704],{"align":24906},"构建参数，只在构建期间可用",[479,29706,29707],{"align":24906},"ARG VERSION=1.0",[464,29709,29710,29713,29716],{},[479,29711,29712],{"align":24906},"RUN",[479,29714,29715],{"align":24906},"构建镜像时运行命令",[479,29717,29718],{"align":24906},"RUN apt-get update && apt-get install -y curl",[464,29720,29721,29724,29727],{},[479,29722,29723],{"align":24906},"COPY",[479,29725,29726],{"align":24906},"复制文件到镜像中",[479,29728,29729],{"align":24906},"COPY . \u002Fapp",[464,29731,29732,29735,29738],{},[479,29733,29734],{"align":24906},"ADD",[479,29736,29737],{"align":24906},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[479,29739,29740],{"align":24906},"ADD archive.tar.gz \u002Fdata\u002F",[464,29742,29743,29746,29749],{},[479,29744,29745],{"align":24906},"WORKDIR",[479,29747,29748],{"align":24906},"设置工作目录",[479,29750,29751],{"align":24906},"WORKDIR \u002Fopt",[464,29753,29754,29757,29760],{},[479,29755,29756],{"align":24906},"CMD",[479,29758,29759],{"align":24906},"设置容器启动时默认命令（可被 docker run 覆盖）",[479,29761,29762,29763],{"align":24906},"CMD ",[84,29764,29765],{},"“node”, “index.js”",[464,29767,29768,29771,29774],{},[479,29769,29770],{"align":24906},"ENTRYPOINT",[479,29772,29773],{"align":24906},"设置容器启动时固定命令（通常用于 CLI 工具等）",[479,29775,29776,29777],{"align":24906},"ENTRYPOINT ",[84,29778,29779],{},"“python3”",[464,29781,29782,29785,29788],{},[479,29783,29784],{"align":24906},"EXPOSE",[479,29786,29787],{"align":24906},"声明镜像内服务监听的端口（不会自动映射）",[479,29789,29790],{"align":24906},"EXPOSE 80",[464,29792,29793,29796,29799],{},[479,29794,29795],{"align":24906},"VOLUME",[479,29797,29798],{"align":24906},"声明数据卷挂载点",[479,29800,29801,29802],{"align":24906},"VOLUME ",[84,29803,29804],{},"“\u002Fdata”",[464,29806,29807,29810,29813],{},[479,29808,29809],{"align":24906},"USER",[479,29811,29812],{"align":24906},"设置后续命令执行的用户",[479,29814,29815],{"align":24906},"USER appuser",[464,29817,29818,29821,29824],{},[479,29819,29820],{"align":24906},"ONBUILD",[479,29822,29823],{"align":24906},"当镜像作为其他镜像基础镜像时触发的构建指令",[479,29825,29826],{"align":24906},"ONBUILD COPY . \u002Fsrc",[464,29828,29829,29832,29835],{},[479,29830,29831],{"align":24906},"SHELL",[479,29833,29834],{"align":24906},"更改默认 shell，比如将 sh -c 改为 bash -c",[479,29836,29837,29838],{"align":24906},"SHELL ",[84,29839,29840],{},"“\u002Fbin\u002Fbash”, “-c”",[464,29842,29843,29846,29849],{},[479,29844,29845],{"align":24906},"HEALTHCHECK",[479,29847,29848],{"align":24906},"定义容器运行时的健康检查命令",[479,29850,29851,29852],{"align":24906},"`HEALTHCHECK CMD curl –fail ",[208,29853,29854],{"href":29854,"rel":29855},"http:\u002F\u002Flocalhost:8080",[212],[464,29857,29858,29861,29864],{},[479,29859,29860],{"align":24906},"STOPSIGNAL",[479,29862,29863],{"align":24906},"容器停止时发送的信号",[479,29865,29866],{"align":24906},"STOPSIGNAL SIGKILL",[198,29868,29870],{"id":29869},"_62自己创建容器","6.2.自己创建容器",[23168,29872,29874],{"id":29873},"_621手动创建","6.2.1.手动创建",[19,29876,29877],{},"在x86电脑上编译x86的：",[60,29879,29881],{"className":78,"code":29880,"language":80,"meta":66,"style":66},"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",[39,29882,29883,29899,29903,29916,29920,29933,29937,29950,29954,29967,29971],{"__ignoreMap":66},[84,29884,29885,29887,29890,29893,29896],{"class":86,"line":87},[84,29886,27711],{"class":90},[84,29888,29889],{"class":158}," build",[84,29891,29892],{"class":94}," -t",[84,29894,29895],{"class":158}," ros-melodic-cuda118-cudnn8-bionic:latest",[84,29897,29898],{"class":158}," .\n",[84,29900,29901],{"class":86,"line":98},[84,29902,3578],{"emptyLinePlaceholder":1252},[84,29904,29905,29907,29909,29911,29914],{"class":86,"line":106},[84,29906,27711],{"class":90},[84,29908,29889],{"class":158},[84,29910,29892],{"class":94},[84,29912,29913],{"class":158}," ros-noetic-focal:latest",[84,29915,29898],{"class":158},[84,29917,29918],{"class":86,"line":112},[84,29919,3578],{"emptyLinePlaceholder":1252},[84,29921,29922,29924,29926,29928,29931],{"class":86,"line":425},[84,29923,27711],{"class":90},[84,29925,29889],{"class":158},[84,29927,29892],{"class":94},[84,29929,29930],{"class":158}," ros-humble-jammy:latest",[84,29932,29898],{"class":158},[84,29934,29935],{"class":86,"line":2395},[84,29936,3578],{"emptyLinePlaceholder":1252},[84,29938,29939,29941,29943,29945,29948],{"class":86,"line":2401},[84,29940,27711],{"class":90},[84,29942,29889],{"class":158},[84,29944,29892],{"class":94},[84,29946,29947],{"class":158}," ros-jazzy-noble:latest",[84,29949,29898],{"class":158},[84,29951,29952],{"class":86,"line":2492},[84,29953,3578],{"emptyLinePlaceholder":1252},[84,29955,29956,29958,29960,29962,29965],{"class":86,"line":2498},[84,29957,27711],{"class":90},[84,29959,29889],{"class":158},[84,29961,29892],{"class":94},[84,29963,29964],{"class":158}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[84,29966,29898],{"class":158},[84,29968,29969],{"class":86,"line":2510},[84,29970,3578],{"emptyLinePlaceholder":1252},[84,29972,29973,29975,29977,29979,29982],{"class":86,"line":2793},[84,29974,27711],{"class":90},[84,29976,29889],{"class":158},[84,29978,29892],{"class":94},[84,29980,29981],{"class":158}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[84,29983,29898],{"class":158},[19,29985,29986],{},[2643,29987],{"alt":66,"src":29988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29990,29991],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29993,29994],{},[2643,29995],{"alt":66,"src":29996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29998,29999],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30001,30002],{},[29,30003,30004],{},"创建 Docker Hub 账户",[19,30006,30007],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30009,30010],{"start":98},[29,30011,30012],{},"登录 Docker Hub",[19,30014,30015],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[60,30017,30019],{"className":78,"code":30018,"language":80,"meta":66,"style":66},"docker login\n",[39,30020,30021],{"__ignoreMap":66},[84,30022,30023,30025],{"class":86,"line":87},[84,30024,27711],{"class":90},[84,30026,30027],{"class":158}," login\n",[19,30029,30030],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30032,30033],{},[29,30034,30035],{},"为你的镜像打标签",[19,30037,30038,30039,30042],{},"Docker Hub 使用 ",[39,30040,30041],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[60,30044,30046],{"className":78,"code":30045,"language":80,"meta":66,"style":66},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[39,30047,30048],{"__ignoreMap":66},[84,30049,30050,30052,30055,30057,30060,30063,30066,30068],{"class":86,"line":87},[84,30051,27711],{"class":90},[84,30053,30054],{"class":158}," tag",[84,30056,29947],{"class":158},[84,30058,30059],{"class":129}," \u003C",[84,30061,30062],{"class":158},"你的用户",[84,30064,30065],{"class":154},"名",[84,30067,2268],{"class":129},[84,30069,30070],{"class":158},"\u002Fros-jazzy-noble:latest\n",[19,30072,30073,30074,30077],{},"例如，如果你的 Docker Hub 用户名是 ",[39,30075,30076],{},"tungchiahui","，你应该执行：",[60,30079,30081],{"className":78,"code":30080,"language":80,"meta":66,"style":66},"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",[39,30082,30083,30094,30098,30109,30113,30124,30128,30139,30143],{"__ignoreMap":66},[84,30084,30085,30087,30089,30091],{"class":86,"line":87},[84,30086,27711],{"class":90},[84,30088,30054],{"class":158},[84,30090,29913],{"class":158},[84,30092,30093],{"class":158}," tungchiahui\u002Fros-noetic-focal:latest\n",[84,30095,30096],{"class":86,"line":98},[84,30097,3578],{"emptyLinePlaceholder":1252},[84,30099,30100,30102,30104,30106],{"class":86,"line":106},[84,30101,27711],{"class":90},[84,30103,30054],{"class":158},[84,30105,29930],{"class":158},[84,30107,30108],{"class":158}," tungchiahui\u002Fros-humble-jammy:latest\n",[84,30110,30111],{"class":86,"line":112},[84,30112,3578],{"emptyLinePlaceholder":1252},[84,30114,30115,30117,30119,30121],{"class":86,"line":425},[84,30116,27711],{"class":90},[84,30118,30054],{"class":158},[84,30120,29947],{"class":158},[84,30122,30123],{"class":158}," tungchiahui\u002Fros-jazzy-noble:latest\n",[84,30125,30126],{"class":86,"line":2395},[84,30127,3578],{"emptyLinePlaceholder":1252},[84,30129,30130,30132,30134,30136],{"class":86,"line":2401},[84,30131,27711],{"class":90},[84,30133,30054],{"class":158},[84,30135,29964],{"class":158},[84,30137,30138],{"class":158}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[84,30140,30141],{"class":86,"line":2492},[84,30142,3578],{"emptyLinePlaceholder":1252},[84,30144,30145,30147,30149,30151],{"class":86,"line":2498},[84,30146,27711],{"class":90},[84,30148,30054],{"class":158},[84,30150,29981],{"class":158},[84,30152,30153],{"class":158}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,30155,30156],{"start":98},[29,30157,30158],{},"推送镜像到 Docker Hub",[19,30160,30161],{},"使用以下命令将镜像推送到 Docker Hub：",[60,30163,30165],{"className":78,"code":30164,"language":80,"meta":66,"style":66},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[39,30166,30167],{"__ignoreMap":66},[84,30168,30169,30171,30174,30176,30178,30180,30182],{"class":86,"line":87},[84,30170,27711],{"class":90},[84,30172,30173],{"class":158}," push",[84,30175,30059],{"class":129},[84,30177,30062],{"class":158},[84,30179,30065],{"class":154},[84,30181,2268],{"class":129},[84,30183,30184],{"class":158},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30186,15803],{},[60,30188,30190],{"className":78,"code":30189,"language":80,"meta":66,"style":66},"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",[39,30191,30192,30200,30204,30212,30216,30224,30228,30237,30241,30249,30253],{"__ignoreMap":66},[84,30193,30194,30196,30198],{"class":86,"line":87},[84,30195,27711],{"class":90},[84,30197,30173],{"class":158},[84,30199,30093],{"class":158},[84,30201,30202],{"class":86,"line":98},[84,30203,3578],{"emptyLinePlaceholder":1252},[84,30205,30206,30208,30210],{"class":86,"line":106},[84,30207,27711],{"class":90},[84,30209,30173],{"class":158},[84,30211,30108],{"class":158},[84,30213,30214],{"class":86,"line":112},[84,30215,3578],{"emptyLinePlaceholder":1252},[84,30217,30218,30220,30222],{"class":86,"line":425},[84,30219,27711],{"class":90},[84,30221,30173],{"class":158},[84,30223,30123],{"class":158},[84,30225,30226],{"class":86,"line":2395},[84,30227,3578],{"emptyLinePlaceholder":1252},[84,30229,30230,30232,30234],{"class":86,"line":2401},[84,30231,27711],{"class":90},[84,30233,30173],{"class":158},[84,30235,30236],{"class":158}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[84,30238,30239],{"class":86,"line":2492},[84,30240,3578],{"emptyLinePlaceholder":1252},[84,30242,30243,30245,30247],{"class":86,"line":2498},[84,30244,27711],{"class":90},[84,30246,30173],{"class":158},[84,30248,30153],{"class":158},[84,30250,30251],{"class":86,"line":2510},[84,30252,3578],{"emptyLinePlaceholder":1252},[84,30254,30255,30257,30259],{"class":86,"line":2793},[84,30256,27711],{"class":90},[84,30258,30173],{"class":158},[84,30260,30261],{"class":158}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,30263,30264],{"start":106},[29,30265,30266],{},"验证推送成功",[19,30268,30269],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30271,30272],{},[1464,30273,4962],{},[2315,30275,30276,30279],{},[29,30277,30278],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,30280,30281],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30283,30284],{},[2643,30285],{"alt":66,"src":30286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30288,30289],{},[2643,30290],{"alt":66,"src":30291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23168,30293,30295],{"id":30294},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30297,30298,30299,30302,30303,30306],{},"如果您想在 ",[1464,30300,30301],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1464,30304,30305],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30308,30309,30310],{},"1. ",[1464,30311,30312],{},"启用 Docker 跨平台构建",[19,30314,30315],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30317,30318],{},"第一步：启用 buildx（只需执行一次）",[60,30320,30322],{"className":78,"code":30321,"language":80,"meta":66,"style":66},"docker buildx create --name multiarch_builder --use\n",[39,30323,30324],{"__ignoreMap":66},[84,30325,30326,30328,30331,30334,30337,30340],{"class":86,"line":87},[84,30327,27711],{"class":90},[84,30329,30330],{"class":158}," buildx",[84,30332,30333],{"class":158}," create",[84,30335,30336],{"class":94}," --name",[84,30338,30339],{"class":158}," multiarch_builder",[84,30341,30342],{"class":94}," --use\n",[19,30344,30345],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30347,30348],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[60,30350,30352],{"className":78,"code":30351,"language":80,"meta":66,"style":66},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[39,30353,30354],{"__ignoreMap":66},[84,30355,30356,30358,30360,30362,30365,30368,30371,30374],{"class":86,"line":87},[84,30357,27711],{"class":90},[84,30359,28388],{"class":158},[84,30361,28391],{"class":94},[84,30363,30364],{"class":94}," --privileged",[84,30366,30367],{"class":158}," multiarch\u002Fqemu-user-static",[84,30369,30370],{"class":94}," --reset",[84,30372,30373],{"class":94}," -p",[84,30375,30376],{"class":158}," yes\n",[19,30378,30379],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30381,30382],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[60,30384,30386],{"className":78,"code":30385,"language":80,"meta":66,"style":66},"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",[39,30387,30388,30430,30434,30439,30449,30459,30468,30474,30478,30482,30492,30500,30509,30515,30519,30523,30533,30541,30550,30556,30560,30564,30574,30582,30591,30597,30601,30605,30615,30623,30632,30638,30642,30646,30656,30664,30673,30679,30683,30687,30697,30705,30714,30720,30724,30728,30738,30746,30755,30761,30765,30769,30779,30787,30796,30802,30806,30810,30821,30829,30838,30844],{"__ignoreMap":66},[84,30389,30390,30392,30394,30396,30399,30402,30404,30406,30409,30411,30413,30415,30417,30420,30423,30425,30428],{"class":86,"line":87},[84,30391,27711],{"class":90},[84,30393,30330],{"class":158},[84,30395,29889],{"class":158},[84,30397,30398],{"class":94}," --platform",[84,30400,30401],{"class":158}," linux\u002Famd64,linux\u002Farm64",[84,30403,29892],{"class":94},[84,30405,30059],{"class":129},[84,30407,30408],{"class":158},"你的镜像",[84,30410,30065],{"class":154},[84,30412,2268],{"class":129},[84,30414,2167],{"class":158},[84,30416,2218],{"class":129},[84,30418,30419],{"class":158},"标",[84,30421,30422],{"class":154},"签",[84,30424,2268],{"class":129},[84,30426,30427],{"class":94}," --push",[84,30429,29898],{"class":158},[84,30431,30432],{"class":86,"line":98},[84,30433,3578],{"emptyLinePlaceholder":1252},[84,30435,30436],{"class":86,"line":106},[84,30437,30438],{"class":1378},"# 例子：\n",[84,30440,30441,30443,30445,30447],{"class":86,"line":112},[84,30442,27711],{"class":90},[84,30444,30330],{"class":158},[84,30446,29889],{"class":158},[84,30448,25842],{"class":94},[84,30450,30451,30454,30457],{"class":86,"line":425},[84,30452,30453],{"class":154},"--platform ",[84,30455,30456],{"class":158},"linux\u002Famd64,linux\u002Farm64",[84,30458,25842],{"class":94},[84,30460,30461,30463,30466],{"class":86,"line":2395},[84,30462,29892],{"class":94},[84,30464,30465],{"class":158}," tungchiahui\u002Fros:noetic-focal",[84,30467,25842],{"class":94},[84,30469,30470,30472],{"class":86,"line":2401},[84,30471,30427],{"class":94},[84,30473,25842],{"class":94},[84,30475,30476],{"class":86,"line":2492},[84,30477,29898],{"class":158},[84,30479,30480],{"class":86,"line":2498},[84,30481,3578],{"emptyLinePlaceholder":1252},[84,30483,30484,30486,30488,30490],{"class":86,"line":2510},[84,30485,27711],{"class":90},[84,30487,30330],{"class":158},[84,30489,29889],{"class":158},[84,30491,25842],{"class":94},[84,30493,30494,30496,30498],{"class":86,"line":2793},[84,30495,30453],{"class":154},[84,30497,30456],{"class":158},[84,30499,25842],{"class":94},[84,30501,30502,30504,30507],{"class":86,"line":2798},[84,30503,29892],{"class":94},[84,30505,30506],{"class":158}," tungchiahui\u002Fros:humble-jammy",[84,30508,25842],{"class":94},[84,30510,30511,30513],{"class":86,"line":2804},[84,30512,30427],{"class":94},[84,30514,25842],{"class":94},[84,30516,30517],{"class":86,"line":2809},[84,30518,29898],{"class":158},[84,30520,30521],{"class":86,"line":2823},[84,30522,3578],{"emptyLinePlaceholder":1252},[84,30524,30525,30527,30529,30531],{"class":86,"line":2828},[84,30526,27711],{"class":90},[84,30528,30330],{"class":158},[84,30530,29889],{"class":158},[84,30532,25842],{"class":94},[84,30534,30535,30537,30539],{"class":86,"line":2834},[84,30536,30453],{"class":154},[84,30538,30456],{"class":158},[84,30540,25842],{"class":94},[84,30542,30543,30545,30548],{"class":86,"line":2855},[84,30544,29892],{"class":94},[84,30546,30547],{"class":158}," tungchiahui\u002Fros:jazzy-noble",[84,30549,25842],{"class":94},[84,30551,30552,30554],{"class":86,"line":2860},[84,30553,30427],{"class":94},[84,30555,25842],{"class":94},[84,30557,30558],{"class":86,"line":2874},[84,30559,29898],{"class":158},[84,30561,30562],{"class":86,"line":2879},[84,30563,3578],{"emptyLinePlaceholder":1252},[84,30565,30566,30568,30570,30572],{"class":86,"line":2908},[84,30567,27479],{"class":90},[84,30569,30330],{"class":158},[84,30571,29889],{"class":158},[84,30573,25842],{"class":94},[84,30575,30576,30578,30580],{"class":86,"line":2913},[84,30577,30453],{"class":154},[84,30579,30456],{"class":158},[84,30581,25842],{"class":94},[84,30583,30584,30586,30589],{"class":86,"line":2930},[84,30585,29892],{"class":94},[84,30587,30588],{"class":158}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[84,30590,25842],{"class":94},[84,30592,30593,30595],{"class":86,"line":2935},[84,30594,30427],{"class":94},[84,30596,25842],{"class":94},[84,30598,30599],{"class":86,"line":2940},[84,30600,29898],{"class":158},[84,30602,30603],{"class":86,"line":2945},[84,30604,3578],{"emptyLinePlaceholder":1252},[84,30606,30607,30609,30611,30613],{"class":86,"line":2959},[84,30608,27711],{"class":90},[84,30610,30330],{"class":158},[84,30612,29889],{"class":158},[84,30614,25842],{"class":94},[84,30616,30617,30619,30621],{"class":86,"line":2964},[84,30618,30453],{"class":154},[84,30620,30456],{"class":158},[84,30622,25842],{"class":94},[84,30624,30625,30627,30630],{"class":86,"line":3755},[84,30626,29892],{"class":94},[84,30628,30629],{"class":158}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[84,30631,25842],{"class":94},[84,30633,30634,30636],{"class":86,"line":3769},[84,30635,30427],{"class":94},[84,30637,25842],{"class":94},[84,30639,30640],{"class":86,"line":3777},[84,30641,29898],{"class":158},[84,30643,30644],{"class":86,"line":3782},[84,30645,3578],{"emptyLinePlaceholder":1252},[84,30647,30648,30650,30652,30654],{"class":86,"line":3788},[84,30649,27479],{"class":90},[84,30651,30330],{"class":158},[84,30653,29889],{"class":158},[84,30655,25842],{"class":94},[84,30657,30658,30660,30662],{"class":86,"line":3794},[84,30659,30453],{"class":154},[84,30661,30456],{"class":158},[84,30663,25842],{"class":94},[84,30665,30666,30668,30671],{"class":86,"line":3799},[84,30667,29892],{"class":94},[84,30669,30670],{"class":158}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[84,30672,25842],{"class":94},[84,30674,30675,30677],{"class":86,"line":9120},[84,30676,30427],{"class":94},[84,30678,25842],{"class":94},[84,30680,30681],{"class":86,"line":9144},[84,30682,29898],{"class":158},[84,30684,30685],{"class":86,"line":9149},[84,30686,3578],{"emptyLinePlaceholder":1252},[84,30688,30689,30691,30693,30695],{"class":86,"line":9155},[84,30690,27711],{"class":90},[84,30692,30330],{"class":158},[84,30694,29889],{"class":158},[84,30696,25842],{"class":94},[84,30698,30699,30701,30703],{"class":86,"line":9182},[84,30700,30453],{"class":154},[84,30702,30456],{"class":158},[84,30704,25842],{"class":94},[84,30706,30707,30709,30712],{"class":86,"line":9187},[84,30708,29892],{"class":94},[84,30710,30711],{"class":158}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[84,30713,25842],{"class":94},[84,30715,30716,30718],{"class":86,"line":9193},[84,30717,30427],{"class":94},[84,30719,25842],{"class":94},[84,30721,30722],{"class":86,"line":9205},[84,30723,29898],{"class":158},[84,30725,30726],{"class":86,"line":9217},[84,30727,3578],{"emptyLinePlaceholder":1252},[84,30729,30730,30732,30734,30736],{"class":86,"line":9229},[84,30731,27711],{"class":90},[84,30733,30330],{"class":158},[84,30735,29889],{"class":158},[84,30737,25842],{"class":94},[84,30739,30740,30742,30744],{"class":86,"line":10888},[84,30741,30453],{"class":154},[84,30743,30456],{"class":158},[84,30745,25842],{"class":94},[84,30747,30748,30750,30753],{"class":86,"line":10913},[84,30749,29892],{"class":94},[84,30751,30752],{"class":158}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[84,30754,25842],{"class":94},[84,30756,30757,30759],{"class":86,"line":10936},[84,30758,30427],{"class":94},[84,30760,25842],{"class":94},[84,30762,30763],{"class":86,"line":10960},[84,30764,29898],{"class":158},[84,30766,30767],{"class":86,"line":10965},[84,30768,3578],{"emptyLinePlaceholder":1252},[84,30770,30771,30773,30775,30777],{"class":86,"line":10970},[84,30772,27479],{"class":90},[84,30774,30330],{"class":158},[84,30776,29889],{"class":158},[84,30778,25842],{"class":94},[84,30780,30781,30783,30785],{"class":86,"line":10975},[84,30782,30453],{"class":154},[84,30784,30456],{"class":158},[84,30786,25842],{"class":94},[84,30788,30789,30791,30794],{"class":86,"line":10984},[84,30790,29892],{"class":94},[84,30792,30793],{"class":158}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[84,30795,25842],{"class":94},[84,30797,30798,30800],{"class":86,"line":10989},[84,30799,30427],{"class":94},[84,30801,25842],{"class":94},[84,30803,30804],{"class":86,"line":10995},[84,30805,29898],{"class":158},[84,30807,30808],{"class":86,"line":11016},[84,30809,3578],{"emptyLinePlaceholder":1252},[84,30811,30812,30815,30817,30819],{"class":86,"line":11022},[84,30813,30814],{"class":90},"  docker",[84,30816,30330],{"class":158},[84,30818,29889],{"class":158},[84,30820,25842],{"class":94},[84,30822,30823,30825,30827],{"class":86,"line":11036},[84,30824,30453],{"class":154},[84,30826,30456],{"class":158},[84,30828,25842],{"class":94},[84,30830,30831,30833,30836],{"class":86,"line":11042},[84,30832,29892],{"class":94},[84,30834,30835],{"class":158}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[84,30837,25842],{"class":94},[84,30839,30840,30842],{"class":86,"line":11069},[84,30841,30427],{"class":94},[84,30843,25842],{"class":94},[84,30845,30846],{"class":86,"line":11078},[84,30847,29898],{"class":158},[19,30849,30850],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30852,30853],{},[2643,30854],{"alt":66,"src":30855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30857,30858],{},[2643,30859],{"alt":66,"src":30860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23168,30862,30864],{"id":30863},"_623清除构建缓存","6.2.3.清除构建缓存",[60,30866,30868],{"className":78,"code":30867,"language":80,"meta":66,"style":66},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[39,30869,30870,30875],{"__ignoreMap":66},[84,30871,30872],{"class":86,"line":87},[84,30873,30874],{"class":1378},"# 清理BuildKit构建缓存\n",[84,30876,30877,30879,30882,30885],{"class":86,"line":98},[84,30878,27711],{"class":90},[84,30880,30881],{"class":158}," builder",[84,30883,30884],{"class":158}," prune",[84,30886,30887],{"class":94}," -f\n",[19,30889,30890],{},[2643,30891],{"alt":66,"src":30892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[198,30894,30896],{"id":30895},"_63补充","6.3.补充",[23168,30898,30900],{"id":30899},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30902,30903],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30905,30906],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30908,30909],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[60,30911,30913],{"className":78,"code":30912,"language":80,"meta":66,"style":66},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[39,30914,30915,30922],{"__ignoreMap":66},[84,30916,30917,30919],{"class":86,"line":87},[84,30918,28528],{"class":90},[84,30920,30921],{"class":158}," nginx\n",[84,30923,30924,30926,30929,30932,30934],{"class":86,"line":98},[84,30925,29712],{"class":90},[84,30927,30928],{"class":158}," echo",[84,30930,30931],{"class":158}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[84,30933,622],{"class":129},[84,30935,30936],{"class":158}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30938,30939],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30941,30942],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[60,30944,30946],{"className":78,"code":30945,"language":80,"meta":66,"style":66},"docker build -t nginx:tuling .\n",[39,30947,30948],{"__ignoreMap":66},[84,30949,30950,30952,30954,30956,30959],{"class":86,"line":87},[84,30951,27711],{"class":90},[84,30953,29889],{"class":158},[84,30955,29892],{"class":94},[84,30957,30958],{"class":158}," nginx:tuling",[84,30960,29898],{"class":158},[19,30962,30963],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30965,30966],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[60,30968,30970],{"className":78,"code":30969,"language":80,"meta":66,"style":66},"docker run -d -p 92:80 nginx:tuling\n",[39,30971,30972],{"__ignoreMap":66},[84,30973,30974,30976,30978,30981,30983,30986],{"class":86,"line":87},[84,30975,27711],{"class":90},[84,30977,28388],{"class":158},[84,30979,30980],{"class":94}," -d",[84,30982,30373],{"class":94},[84,30984,30985],{"class":158}," 92:80",[84,30987,30988],{"class":158}," nginx:tuling\n",[19,30990,30991,30992],{},"4、访问 ",[208,30993,30996],{"href":30994,"rel":30995},"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",[212],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30998,30999],{},[2643,31000],{"alt":66,"src":31001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31003,31004],{},[2643,31005],{"alt":66,"src":31006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23168,31008,31010],{"id":31009},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31012,31013],{},"只需要知道大体流程即可",[19,31015,31016],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31018,31019],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31021,31022],{},"2、在Dockerfile中添加以下内容",[60,31024,31026],{"className":27254,"code":31025,"language":27256,"meta":66,"style":66},"# 基于哪个镜像\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",[39,31027,31028,31033,31038,31043,31048,31053,31058,31063],{"__ignoreMap":66},[84,31029,31030],{"class":86,"line":87},[84,31031,31032],{},"# 基于哪个镜像\n",[84,31034,31035],{"class":86,"line":98},[84,31036,31037],{},"From java:8\n",[84,31039,31040],{"class":86,"line":106},[84,31041,31042],{},"# 复制文件到容器\n",[84,31044,31045],{"class":86,"line":112},[84,31046,31047],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[84,31049,31050],{"class":86,"line":425},[84,31051,31052],{},"# 声明需要暴露的端口\n",[84,31054,31055],{"class":86,"line":2395},[84,31056,31057],{},"EXPOSE 8877\n",[84,31059,31060],{"class":86,"line":2401},[84,31061,31062],{},"# 配置容器启动后执行的命令\n",[84,31064,31065],{"class":86,"line":2492},[84,31066,31067],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31069,31070],{},"3、使用docker build命令构建镜像",[60,31072,31074],{"className":78,"code":31073,"language":80,"meta":66,"style":66},"docker build -t tulingmall-member:0.0.5 .\n",[39,31075,31076],{"__ignoreMap":66},[84,31077,31078,31080,31082,31084,31087],{"class":86,"line":87},[84,31079,27711],{"class":90},[84,31081,29889],{"class":158},[84,31083,29892],{"class":94},[84,31085,31086],{"class":158}," tulingmall-member:0.0.5",[84,31088,29898],{"class":158},[19,31090,31091],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31093,31094],{},[2643,31095],{"alt":66,"src":31096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31098,31099],{},"4、启动镜像，加-d可在后台启动",[60,31101,31103],{"className":78,"code":31102,"language":80,"meta":66,"style":66},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[39,31104,31105],{"__ignoreMap":66},[84,31106,31107,31109,31111,31113,31115,31118],{"class":86,"line":87},[84,31108,27711],{"class":90},[84,31110,28388],{"class":158},[84,31112,30980],{"class":94},[84,31114,30373],{"class":94},[84,31116,31117],{"class":158}," 8877:8877",[84,31119,31120],{"class":158}," tulingmall-member:0.0.5\n",[19,31122,31123],{},"加上JVM参数：",[60,31125,31127],{"className":78,"code":31126,"language":80,"meta":66,"style":66},"# --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",[39,31128,31129,31134,31149,31159,31168,31175],{"__ignoreMap":66},[84,31130,31131],{"class":86,"line":87},[84,31132,31133],{"class":1378},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[84,31135,31136,31138,31140,31143,31145,31147],{"class":86,"line":98},[84,31137,27711],{"class":90},[84,31139,28388],{"class":158},[84,31141,31142],{"class":94},"  -d",[84,31144,30373],{"class":94},[84,31146,31117],{"class":158},[84,31148,25842],{"class":94},[84,31150,31151,31153,31156],{"class":86,"line":106},[84,31152,29286],{"class":154},[84,31154,31155],{"class":158},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[84,31157,31158],{"class":94},"  \\\n",[84,31160,31161,31163,31166],{"class":86,"line":112},[84,31162,29286],{"class":154},[84,31164,31165],{"class":158},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[84,31167,31158],{"class":94},[84,31169,31170,31173],{"class":86,"line":425},[84,31171,31172],{"class":154},"--cap-add=SYS_PTRACE  ",[84,31174,27338],{"class":94},[84,31176,31177],{"class":86,"line":2395},[84,31178,31179],{"class":154},"tulingmall-member:0.0.5\n",[19,31181,31182],{},"5、访问会员服务接口",[19,31184,31185],{},[2643,31186],{"alt":66,"src":31187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23168,31189,31191],{"id":31190},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31193,31194],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31196,31197,31198],{},"阿里云docker镜像仓库：",[208,31199,31200],{"href":31200,"rel":31201},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[212],[19,31203,31204],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31206,31207],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31209,31210],{},[2643,31211],{"alt":66,"src":31212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31214,31215],{},"要把镜像推送到镜像仓库",[60,31217,31219],{"className":78,"code":31218,"language":80,"meta":66,"style":66},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[39,31220,31221],{"__ignoreMap":66},[84,31222,31223,31225,31227,31229],{"class":86,"line":87},[84,31224,27711],{"class":90},[84,31226,30054],{"class":158},[84,31228,31086],{"class":158},[84,31230,31231],{"class":158}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31233,31234],{},"最后将镜像推送到远程仓库",[60,31236,31238],{"className":78,"code":31237,"language":80,"meta":66,"style":66},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[39,31239,31240],{"__ignoreMap":66},[84,31241,31242,31244,31246],{"class":86,"line":87},[84,31243,27711],{"class":90},[84,31245,30173],{"class":158},[84,31247,31231],{"class":158},[1222,31249,31250],{},"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":66,"searchDepth":98,"depth":98,"links":31252},[31253,31254,31255],{"id":29640,"depth":106,"text":29641},{"id":29869,"depth":106,"text":29870},{"id":30895,"depth":106,"text":30896},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29632,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31262,"title":31263,"body":31264,"description":66,"extension":1250,"meta":31407,"navigation":1252,"path":31408,"seo":31409,"stem":31410,"__hash__":31411},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31265,"toc":31405},[31266,31269,31274,31279,31282,31287,31292,31295,31300,31305,31308,31313,31316,31319,31322,31325,31328,31331,31351,31373,31376,31379,31399,31402],[10,31267,31263],{"id":31268},"_7vscode远程开发",[26,31270,31271],{},[29,31272,31273],{},"插件1：微软Docker工具",[19,31275,31276],{},[2643,31277],{"alt":66,"src":31278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31280,31281],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31283,31284],{},[2643,31285],{"alt":66,"src":31286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,31288,31289],{"start":98},[29,31290,31291],{},"插件2：微软Docker远程开发工具",[19,31293,31294],{},"下面这是远程开发的插件。",[19,31296,31297],{},[2643,31298],{"alt":66,"src":31299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31301,31302],{},[2643,31303],{"alt":66,"src":31304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31306,31307],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31309,31310],{},[2643,31311],{"alt":66,"src":31312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31314,31315],{},"安装完拓展之后，vscode进行链接：",[19,31317,31318],{},"1.按ctrl+shift+p",[19,31320,31321],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31323,31324],{},"3.选择目前运行的容器",[19,31326,31327],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31329,31330],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[60,31332,31334],{"className":78,"code":31333,"language":80,"meta":66,"style":66},"docker run -v 主机目录:容器目录 image-name\n",[39,31335,31336],{"__ignoreMap":66},[84,31337,31338,31340,31342,31345,31348],{"class":86,"line":87},[84,31339,27711],{"class":90},[84,31341,28388],{"class":158},[84,31343,31344],{"class":94}," -v",[84,31346,31347],{"class":158}," 主机目录:容器目录",[84,31349,31350],{"class":158}," image-name\n",[60,31352,31354],{"className":78,"code":31353,"language":80,"meta":66,"style":66},"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",[39,31355,31356],{"__ignoreMap":66},[84,31357,31358,31360,31362,31365,31367,31370],{"class":86,"line":87},[84,31359,27711],{"class":90},[84,31361,28388],{"class":158},[84,31363,31364],{"class":94}," -it",[84,31366,31344],{"class":94},[84,31368,31369],{"class":158}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[84,31371,31372],{"class":158}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31374,31375],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31377,31378],{},"查看挂载情况：",[60,31380,31382],{"className":78,"code":31381,"language":80,"meta":66,"style":66},"mount | grep -i project\n",[39,31383,31384],{"__ignoreMap":66},[84,31385,31386,31389,31391,31394,31396],{"class":86,"line":87},[84,31387,31388],{"class":90},"mount",[84,31390,26273],{"class":129},[84,31392,31393],{"class":90}," grep",[84,31395,450],{"class":94},[84,31397,31398],{"class":158}," project\n",[19,31400,31401],{},"也可以通过ls来进行查看",[1222,31403,31404],{},"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":66,"searchDepth":98,"depth":98,"links":31406},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31263,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31413,"title":31414,"body":31415,"description":1249,"extension":1250,"meta":31419,"navigation":1252,"path":31421,"seo":31422,"stem":31423,"__hash__":31424},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31416,"toc":31417},[],{"title":66,"searchDepth":98,"depth":98,"links":31418},[],{"category":31420},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31414,"description":1249},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31426,"title":31427,"body":31428,"description":1249,"extension":1250,"meta":31432,"navigation":1252,"path":31433,"seo":31434,"stem":31435,"__hash__":31436},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31429,"toc":31430},[],{"title":66,"searchDepth":98,"depth":98,"links":31431},[],{"category":31420},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31427,"description":1249},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31438,"title":31439,"body":31440,"description":1249,"extension":1250,"meta":31730,"navigation":1252,"path":31731,"seo":31732,"stem":31733,"__hash__":31734},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31441,"toc":31728},[31442,31445,31453,31468,31473,31524,31527,31533,31717,31722,31725],[10,31443,31439],{"id":31444},"_1验证深度学习环境",[19,31446,31447,31448],{},"关于环境的安装，看",[208,31449,31452],{"href":31450,"rel":31451},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[212],"Pytorch-->深度学习",[19,31454,31455,31456,31459,31460,31463,31464,31467],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[39,31457,31458],{},"pytorch-cuda=12.4"," 是一个“ ",[1464,31461,31462],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1464,31465,31466],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31469,31470],{},[2643,31471],{"alt":66,"src":31472},"\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",[60,31474,31476],{"className":78,"code":31475,"language":80,"meta":66,"style":66},"# 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",[39,31477,31478,31483],{"__ignoreMap":66},[84,31479,31480],{"class":86,"line":87},[84,31481,31482],{"class":1378},"# CUDA 12.4\n",[84,31484,31485,31488,31490,31493,31496,31499,31502,31505,31507,31510,31513,31516,31519,31521],{"class":86,"line":98},[84,31486,31487],{"class":90},"conda",[84,31489,275],{"class":158},[84,31491,31492],{"class":158}," pytorch==",[84,31494,31495],{"class":94},"2.5.1",[84,31497,31498],{"class":158}," torchvision==",[84,31500,31501],{"class":94},"0.20.1",[84,31503,31504],{"class":158}," torchaudio==",[84,31506,31495],{"class":94},[84,31508,31509],{"class":158}," pytorch-cuda=",[84,31511,31512],{"class":94},"12.4",[84,31514,31515],{"class":94}," -c",[84,31517,31518],{"class":158}," pytorch",[84,31520,31515],{"class":94},[84,31522,31523],{"class":158}," nvidia\n",[19,31525,31526],{},"）：",[19,31528,31529],{},[208,31530,31531],{"href":31531,"rel":31532},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[212],[60,31534,31536],{"className":121,"code":31535,"language":91,"meta":66,"style":66},"# 对深度学习环境进行测试\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",[39,31537,31538,31543,31551,31556,31566,31581,31586,31596,31633,31640,31652,31668,31673,31683,31695,31705],{"__ignoreMap":66},[84,31539,31540],{"class":86,"line":87},[84,31541,31542],{"class":1378},"# 对深度学习环境进行测试\n",[84,31544,31545,31548],{"class":86,"line":98},[84,31546,31547],{"class":129},"import",[84,31549,31550],{"class":154}," torch\n",[84,31552,31553],{"class":86,"line":106},[84,31554,31555],{"class":1378},"# 查看cuda是否被激活\n",[84,31557,31558,31561,31563],{"class":86,"line":112},[84,31559,31560],{"class":154},"flag",[84,31562,867],{"class":129},[84,31564,31565],{"class":154},"torch.cuda.is_available()\n",[84,31567,31568,31570,31572,31575,31578],{"class":86,"line":425},[84,31569,730],{"class":94},[84,31571,155],{"class":154},[84,31573,31574],{"class":158},"\"cuda:\"",[84,31576,31577],{"class":154},", flag)   ",[84,31579,31580],{"class":1378},"#返回true的话说明被激活\n",[84,31582,31583],{"class":86,"line":2395},[84,31584,31585],{"class":1378},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[84,31587,31588,31591,31593],{"class":86,"line":2401},[84,31589,31590],{"class":154},"ngpu",[84,31592,867],{"class":129},[84,31594,31595],{"class":94},"1\n",[84,31597,31598,31601,31603,31606,31609,31611,31614,31617,31620,31622,31624,31626,31628,31631],{"class":86,"line":2492},[84,31599,31600],{"class":154},"device",[84,31602,867],{"class":129},[84,31604,31605],{"class":154},"torch.device(",[84,31607,31608],{"class":158},"\"cuda:0\"",[84,31610,2885],{"class":129},[84,31612,31613],{"class":154},"(torch.cuda.is_available() ",[84,31615,31616],{"class":129},"and",[84,31618,31619],{"class":154}," ngpu",[84,31621,2268],{"class":129},[84,31623,1504],{"class":94},[84,31625,1154],{"class":154},[84,31627,2882],{"class":129},[84,31629,31630],{"class":158}," \"cpu\"",[84,31632,162],{"class":154},[84,31634,31635,31637],{"class":86,"line":2498},[84,31636,730],{"class":94},[84,31638,31639],{"class":154},"(device)\n",[84,31641,31642,31644,31647,31649],{"class":86,"line":2510},[84,31643,730],{"class":94},[84,31645,31646],{"class":154},"(torch.cuda.get_device_name(",[84,31648,1504],{"class":94},[84,31650,31651],{"class":154},"))\n",[84,31653,31654,31656,31659,31661,31663,31665],{"class":86,"line":2793},[84,31655,730],{"class":94},[84,31657,31658],{"class":154},"(torch.rand(",[84,31660,1391],{"class":94},[84,31662,1688],{"class":154},[84,31664,1391],{"class":94},[84,31666,31667],{"class":154},").cuda())\n",[84,31669,31670],{"class":86,"line":2798},[84,31671,31672],{"class":1378},"# 查看cuda和cudnn的版本\n",[84,31674,31675,31678,31680],{"class":86,"line":2804},[84,31676,31677],{"class":154},"cuda_version",[84,31679,867],{"class":129},[84,31681,31682],{"class":154},"torch.version.cuda\n",[84,31684,31685,31687,31689,31692],{"class":86,"line":2809},[84,31686,730],{"class":94},[84,31688,155],{"class":154},[84,31690,31691],{"class":158},"\"cuda version\"",[84,31693,31694],{"class":154},",cuda_version)\n",[84,31696,31697,31700,31702],{"class":86,"line":2823},[84,31698,31699],{"class":154},"cudnn_version",[84,31701,867],{"class":129},[84,31703,31704],{"class":154},"torch.backends.cudnn.version()\n",[84,31706,31707,31709,31711,31714],{"class":86,"line":2828},[84,31708,730],{"class":94},[84,31710,155],{"class":154},[84,31712,31713],{"class":158},"\"cudnn version\"",[84,31715,31716],{"class":154},",cudnn_version)\n",[19,31718,31719],{},[2643,31720],{"alt":66,"src":31721},"\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,31723,31724],{},"cuda:0 指的是一块显卡",[1222,31726,31727],{},"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":66,"searchDepth":98,"depth":98,"links":31729},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31439,"description":1249},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31736,"title":31737,"body":31738,"description":1249,"extension":1250,"meta":51537,"navigation":1252,"path":51538,"seo":51539,"stem":51540,"__hash__":51541},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31739,"toc":51531},[31740,31743,31747,31751,31754,31759,31764,31767,31772,31777,31782,31785,31789,31794,31798,31803,31806,31811,31814,31817,31820,31823,31828,31831,31836,31841,31846,31851,31854,31858,31861,31866,32470,32475,32478,32483,32486,32489,32952,32955,32958,32961,32964,35014,35017,35022,35027,35822,35825,35830,36608,36612,38271,38275,38989,38993,38997,39002,39007,39012,39015,39020,39025,39030,39035,39040,39044,39049,40331,40336,40339,40342,40345,40500,40503,40506,41722,41727,42422,42426,42430,42435,42440,42443,42448,42453,42458,42463,42468,42473,42478,42483,42488,42493,42498,42503,42508,42513,42518,42523,42528,42533,42538,42543,42548,42553,42558,42563,42568,42573,42578,42583,42588,42593,42597,42601,42604,44082,44086,45733,45737,46431,46435,46438,46441,46983,46986,46990,46993,48390,48394,48397,48974,50761,50765,50768,51528],[10,31741,31737],{"id":31742},"_2经典神经网络",[198,31744,31746],{"id":31745},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23168,31748,31750],{"id":31749},"_211原理介绍","2.1.1.原理介绍",[19,31752,31753],{},"LeNet-5",[26,31755,31756],{},[29,31757,31758],{},"原理",[19,31760,31761],{},[2643,31762],{"alt":66,"src":31763},"\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,31765,31766],{},"B是batch批次；C是channel通道",[26,31768,31769],{"start":98},[29,31770,31771],{},"网络参数详细",[19,31773,31774],{},[2643,31775],{"alt":66,"src":31776},"\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,31778,31779],{},[2643,31780],{"alt":66,"src":31781},"\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,31783,31784],{},"AlexNet",[26,31786,31787],{},[29,31788,31758],{},[19,31790,31791],{},[2643,31792],{"alt":66,"src":31793},"\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",[26,31795,31796],{"start":98},[29,31797,31771],{},[19,31799,31800],{},[2643,31801],{"alt":66,"src":31802},"\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,31804,31805],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31807,31808],{},[2643,31809],{"alt":66,"src":31810},"\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,31812,31813],{},"数据处理中的图像增强操作:",[19,31815,31816],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31818,31819],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31821,31822],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31824,31825],{},[2643,31826],{"alt":66,"src":31827},"\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,31829,31830],{},"提升网络精确度的方法：LRN正则化",[19,31832,31833],{},[2643,31834],{"alt":66,"src":31835},"\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,31837,31838],{},[2643,31839],{"alt":66,"src":31840},"\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",[26,31842,31843],{"start":106},[29,31844,31845],{},"AlexNet的总结",[19,31847,31848],{},[2643,31849],{"alt":66,"src":31850},"\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,31852,31853],{},"比LeNet模型要深一丢丢",[23168,31855,31857],{"id":31856},"_212代码实现","2.1.2.代码实现",[19,31859,31860],{},"（1）LeNet",[26,31862,31863],{},[29,31864,31865],{},"模型搭建",[60,31867,31869],{"className":121,"code":31868,"language":91,"meta":66,"style":66},"# 导入库\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",[39,31870,31871,31876,31882,31887,31900,31905,31917,31921,31941,31946,31951,31962,31967,31986,31990,31995,32044,32056,32061,32090,32125,32152,32157,32169,32174,32194,32213,32232,32236,32241,32251,32268,32279,32294,32305,32316,32331,32346,32357,32364,32368,32382,32387,32410,32415,32420,32425,32429,32434,32439,32449],{"__ignoreMap":66},[84,31872,31873],{"class":86,"line":87},[84,31874,31875],{"class":1378},"# 导入库\n",[84,31877,31878,31880],{"class":86,"line":98},[84,31879,31547],{"class":129},[84,31881,31550],{"class":154},[84,31883,31884],{"class":86,"line":106},[84,31885,31886],{"class":1378},"# 导入神经网络层\n",[84,31888,31889,31892,31895,31897],{"class":86,"line":112},[84,31890,31891],{"class":129},"from",[84,31893,31894],{"class":154}," torch ",[84,31896,31547],{"class":129},[84,31898,31899],{"class":154}," nn\n",[84,31901,31902],{"class":86,"line":425},[84,31903,31904],{"class":1378},"# 导入展示神经网络参数的包\n",[84,31906,31907,31909,31912,31914],{"class":86,"line":2395},[84,31908,31891],{"class":129},[84,31910,31911],{"class":154}," torchsummary ",[84,31913,31547],{"class":129},[84,31915,31916],{"class":154}," summary\n",[84,31918,31919],{"class":86,"line":2401},[84,31920,3578],{"emptyLinePlaceholder":1252},[84,31922,31923,31925,31928,31930,31933,31935,31938],{"class":86,"line":2492},[84,31924,15864],{"class":129},[84,31926,31927],{"class":90}," LeNet",[84,31929,155],{"class":154},[84,31931,31932],{"class":90},"nn",[84,31934,1867],{"class":154},[84,31936,31937],{"class":90},"Module",[84,31939,31940],{"class":154},"):\n",[84,31942,31943],{"class":86,"line":2498},[84,31944,31945],{"class":1378},"    # 模型初始化:\n",[84,31947,31948],{"class":86,"line":2510},[84,31949,31950],{"class":1378},"    # 定义一些网络层和激活函数\n",[84,31952,31953,31956,31959],{"class":86,"line":2793},[84,31954,31955],{"class":129},"    def",[84,31957,31958],{"class":94}," __init__",[84,31960,31961],{"class":154},"(self):\n",[84,31963,31964],{"class":86,"line":2798},[84,31965,31966],{"class":1378},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[84,31968,31969,31972,31975,31978,31981,31984],{"class":86,"line":2804},[84,31970,31971],{"class":94},"        super",[84,31973,31974],{"class":154},"(LeNet,",[84,31976,31977],{"class":94},"self",[84,31979,31980],{"class":154},").",[84,31982,31983],{"class":94},"__init__",[84,31985,183],{"class":154},[84,31987,31988],{"class":86,"line":2809},[84,31989,3578],{"emptyLinePlaceholder":1252},[84,31991,31992],{"class":86,"line":2823},[84,31993,31994],{"class":1378},"        # 定义网络层\n",[84,31996,31997,32000,32003,32005,32008,32011,32013,32015,32017,32020,32022,32024,32026,32029,32031,32033,32035,32038,32040,32042],{"class":86,"line":2828},[84,31998,31999],{"class":94},"        self",[84,32001,32002],{"class":154},".c1",[84,32004,867],{"class":129},[84,32006,32007],{"class":154},"nn.Conv2d(",[84,32009,32010],{"class":928},"in_channels",[84,32012,867],{"class":129},[84,32014,1529],{"class":94},[84,32016,1688],{"class":154},[84,32018,32019],{"class":928},"out_channels",[84,32021,867],{"class":129},[84,32023,1654],{"class":94},[84,32025,1688],{"class":154},[84,32027,32028],{"class":928},"kernel_size",[84,32030,867],{"class":129},[84,32032,1629],{"class":94},[84,32034,1688],{"class":154},[84,32036,32037],{"class":928},"padding",[84,32039,867],{"class":129},[84,32041,1397],{"class":94},[84,32043,162],{"class":154},[84,32045,32046,32048,32051,32053],{"class":86,"line":2834},[84,32047,31999],{"class":94},[84,32049,32050],{"class":154},".sig",[84,32052,867],{"class":129},[84,32054,32055],{"class":154},"nn.Sigmoid()\n",[84,32057,32058],{"class":86,"line":2855},[84,32059,32060],{"class":1378},"        # 定义池化\n",[84,32062,32063,32065,32068,32070,32073,32075,32077,32079,32081,32084,32086,32088],{"class":86,"line":2860},[84,32064,31999],{"class":94},[84,32066,32067],{"class":154},".s2",[84,32069,867],{"class":129},[84,32071,32072],{"class":154},"nn.AvgPool2d(",[84,32074,32028],{"class":928},[84,32076,867],{"class":129},[84,32078,1397],{"class":94},[84,32080,1688],{"class":154},[84,32082,32083],{"class":928},"stride",[84,32085,867],{"class":129},[84,32087,1397],{"class":94},[84,32089,162],{"class":154},[84,32091,32092,32094,32097,32099,32101,32103,32105,32107,32109,32111,32113,32115,32117,32119,32121,32123],{"class":86,"line":2874},[84,32093,31999],{"class":94},[84,32095,32096],{"class":154},".c3",[84,32098,867],{"class":129},[84,32100,32007],{"class":154},[84,32102,32010],{"class":928},[84,32104,867],{"class":129},[84,32106,1654],{"class":94},[84,32108,1688],{"class":154},[84,32110,32019],{"class":928},[84,32112,867],{"class":129},[84,32114,1910],{"class":94},[84,32116,1688],{"class":154},[84,32118,32028],{"class":928},[84,32120,867],{"class":129},[84,32122,1629],{"class":94},[84,32124,162],{"class":154},[84,32126,32127,32129,32132,32134,32136,32138,32140,32142,32144,32146,32148,32150],{"class":86,"line":2879},[84,32128,31999],{"class":94},[84,32130,32131],{"class":154},".s4",[84,32133,867],{"class":129},[84,32135,32072],{"class":154},[84,32137,32028],{"class":928},[84,32139,867],{"class":129},[84,32141,1397],{"class":94},[84,32143,1688],{"class":154},[84,32145,32083],{"class":928},[84,32147,867],{"class":129},[84,32149,1397],{"class":94},[84,32151,162],{"class":154},[84,32153,32154],{"class":86,"line":2908},[84,32155,32156],{"class":1378},"        # 定义平展层\n",[84,32158,32159,32161,32164,32166],{"class":86,"line":2913},[84,32160,31999],{"class":94},[84,32162,32163],{"class":154},".flatten",[84,32165,867],{"class":129},[84,32167,32168],{"class":154},"nn.Flatten()\n",[84,32170,32171],{"class":86,"line":2930},[84,32172,32173],{"class":1378},"        # 定义全连接层\n",[84,32175,32176,32178,32181,32183,32186,32188,32190,32192],{"class":86,"line":2935},[84,32177,31999],{"class":94},[84,32179,32180],{"class":154},".f5",[84,32182,867],{"class":129},[84,32184,32185],{"class":154},"nn.Linear(",[84,32187,5165],{"class":94},[84,32189,1688],{"class":154},[84,32191,2125],{"class":94},[84,32193,162],{"class":154},[84,32195,32196,32198,32201,32203,32205,32207,32209,32211],{"class":86,"line":2940},[84,32197,31999],{"class":94},[84,32199,32200],{"class":154},".f6",[84,32202,867],{"class":129},[84,32204,32185],{"class":154},[84,32206,2125],{"class":94},[84,32208,1688],{"class":154},[84,32210,2019],{"class":94},[84,32212,162],{"class":154},[84,32214,32215,32217,32220,32222,32224,32226,32228,32230],{"class":86,"line":2945},[84,32216,31999],{"class":94},[84,32218,32219],{"class":154},".f7",[84,32221,867],{"class":129},[84,32223,32185],{"class":154},[84,32225,2019],{"class":94},[84,32227,1688],{"class":154},[84,32229,1756],{"class":94},[84,32231,162],{"class":154},[84,32233,32234],{"class":86,"line":2959},[84,32235,3578],{"emptyLinePlaceholder":1252},[84,32237,32238],{"class":86,"line":2964},[84,32239,32240],{"class":1378},"    # 写工具->写前向传播\n",[84,32242,32243,32245,32248],{"class":86,"line":3755},[84,32244,31955],{"class":129},[84,32246,32247],{"class":90}," forward",[84,32249,32250],{"class":154},"(self,x):\n",[84,32252,32253,32256,32258,32260,32263,32265],{"class":86,"line":3769},[84,32254,32255],{"class":154},"        x",[84,32257,867],{"class":129},[84,32259,31977],{"class":94},[84,32261,32262],{"class":154},".sig(",[84,32264,31977],{"class":94},[84,32266,32267],{"class":154},".c1(x))\n",[84,32269,32270,32272,32274,32276],{"class":86,"line":3777},[84,32271,32255],{"class":154},[84,32273,867],{"class":129},[84,32275,31977],{"class":94},[84,32277,32278],{"class":154},".s2(x)\n",[84,32280,32281,32283,32285,32287,32289,32291],{"class":86,"line":3782},[84,32282,32255],{"class":154},[84,32284,867],{"class":129},[84,32286,31977],{"class":94},[84,32288,32262],{"class":154},[84,32290,31977],{"class":94},[84,32292,32293],{"class":154},".c3(x))\n",[84,32295,32296,32298,32300,32302],{"class":86,"line":3788},[84,32297,32255],{"class":154},[84,32299,867],{"class":129},[84,32301,31977],{"class":94},[84,32303,32304],{"class":154},".s4(x)\n",[84,32306,32307,32309,32311,32313],{"class":86,"line":3794},[84,32308,32255],{"class":154},[84,32310,867],{"class":129},[84,32312,31977],{"class":94},[84,32314,32315],{"class":154},".flatten(x)\n",[84,32317,32318,32320,32322,32324,32326,32328],{"class":86,"line":3799},[84,32319,32255],{"class":154},[84,32321,867],{"class":129},[84,32323,31977],{"class":94},[84,32325,32262],{"class":154},[84,32327,31977],{"class":94},[84,32329,32330],{"class":154},".f5(x))\n",[84,32332,32333,32335,32337,32339,32341,32343],{"class":86,"line":9120},[84,32334,32255],{"class":154},[84,32336,867],{"class":129},[84,32338,31977],{"class":94},[84,32340,32262],{"class":154},[84,32342,31977],{"class":94},[84,32344,32345],{"class":154},".f6(x))\n",[84,32347,32348,32350,32352,32354],{"class":86,"line":9144},[84,32349,32255],{"class":154},[84,32351,867],{"class":129},[84,32353,31977],{"class":94},[84,32355,32356],{"class":154},".f7(x)\n",[84,32358,32359,32361],{"class":86,"line":9149},[84,32360,15922],{"class":129},[84,32362,32363],{"class":154}," x\n",[84,32365,32366],{"class":86,"line":9155},[84,32367,3578],{"emptyLinePlaceholder":1252},[84,32369,32370,32372,32375,32377,32380],{"class":86,"line":9182},[84,32371,2712],{"class":129},[84,32373,32374],{"class":94}," __name__",[84,32376,4127],{"class":129},[84,32378,32379],{"class":158},"\"__main__\"",[84,32381,4917],{"class":154},[84,32383,32384],{"class":86,"line":9187},[84,32385,32386],{"class":1378},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[84,32388,32389,32392,32394,32396,32399,32401,32404,32406,32408],{"class":86,"line":9193},[84,32390,32391],{"class":154},"    device",[84,32393,867],{"class":129},[84,32395,31605],{"class":154},[84,32397,32398],{"class":158},"\"cuda\"",[84,32400,2885],{"class":129},[84,32402,32403],{"class":154}," torch.cuda.is_available() ",[84,32405,2882],{"class":129},[84,32407,31630],{"class":158},[84,32409,162],{"class":154},[84,32411,32412],{"class":86,"line":9205},[84,32413,32414],{"class":1378},"    # 如果就是想指定用cpu用下方代码:\n",[84,32416,32417],{"class":86,"line":9217},[84,32418,32419],{"class":1378},"    # device=\"cpu\"\n",[84,32421,32422],{"class":86,"line":9229},[84,32423,32424],{"class":1378},"    # print(device)\n",[84,32426,32427],{"class":86,"line":10888},[84,32428,3578],{"emptyLinePlaceholder":1252},[84,32430,32431],{"class":86,"line":10913},[84,32432,32433],{"class":1378},"    # 实例化模型\n",[84,32435,32436],{"class":86,"line":10936},[84,32437,32438],{"class":1378},"    # 将模型放到设备中去运行\n",[84,32440,32441,32444,32446],{"class":86,"line":10960},[84,32442,32443],{"class":154},"    model",[84,32445,867],{"class":129},[84,32447,32448],{"class":154},"LeNet().to(device)\n",[84,32450,32451,32454,32457,32459,32461,32463,32465,32467],{"class":86,"line":10965},[84,32452,32453],{"class":94},"    print",[84,32455,32456],{"class":154},"(summary(model,(",[84,32458,1529],{"class":94},[84,32460,1688],{"class":154},[84,32462,2209],{"class":94},[84,32464,1688],{"class":154},[84,32466,2209],{"class":94},[84,32468,32469],{"class":154},")))\n",[19,32471,32472],{},[2643,32473],{"alt":66,"src":32474},"\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,32476,32477],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,32479,32480],{"start":98},[29,32481,32482],{},"训练",[19,32484,32485],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32487,32488],{},"在训练之前可以将数据展示看一下",[60,32490,32492],{"className":121,"code":32491,"language":91,"meta":66,"style":66},"# 建立画图的函数，用于展示数据\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",[39,32493,32494,32499,32504,32516,32528,32540,32545,32557,32562,32574,32579,32591,32595,32599,32620,32632,32637,32658,32669,32673,32678,32696,32707,32712,32723,32728,32739,32743,32748,32763,32776,32781,32786,32799,32812,32825,32830,32834,32839,32859,32876,32896,32909,32922,32932,32947],{"__ignoreMap":66},[84,32495,32496],{"class":86,"line":87},[84,32497,32498],{"class":1378},"# 建立画图的函数，用于展示数据\n",[84,32500,32501],{"class":86,"line":98},[84,32502,32503],{"class":1378},"# torchvision中包含很多内置的数据集\n",[84,32505,32506,32508,32511,32513],{"class":86,"line":106},[84,32507,31891],{"class":129},[84,32509,32510],{"class":154}," sklearn.externals.array_api_compat.torch ",[84,32512,31547],{"class":129},[84,32514,32515],{"class":154}," squeeze\n",[84,32517,32518,32520,32523,32525],{"class":86,"line":112},[84,32519,31891],{"class":129},[84,32521,32522],{"class":154}," torchvision.datasets ",[84,32524,31547],{"class":129},[84,32526,32527],{"class":154}," FashionMNIST\n",[84,32529,32530,32532,32535,32537],{"class":86,"line":425},[84,32531,31547],{"class":129},[84,32533,32534],{"class":154}," numpy ",[84,32536,1157],{"class":129},[84,32538,32539],{"class":154}," np\n",[84,32541,32542],{"class":86,"line":2395},[84,32543,32544],{"class":1378},"# 引入处理数据集的包\n",[84,32546,32547,32549,32552,32554],{"class":86,"line":2401},[84,32548,31891],{"class":129},[84,32550,32551],{"class":154}," torchvision ",[84,32553,31547],{"class":129},[84,32555,32556],{"class":154}," transforms\n",[84,32558,32559],{"class":86,"line":2492},[84,32560,32561],{"class":1378},"# 从torch库中引入数据处理的包\n",[84,32563,32564,32566,32569,32571],{"class":86,"line":2498},[84,32565,31547],{"class":129},[84,32567,32568],{"class":154}," torch.utils.data ",[84,32570,1157],{"class":129},[84,32572,32573],{"class":154}," Data\n",[84,32575,32576],{"class":86,"line":2510},[84,32577,32578],{"class":1378},"# 导入画图的库\n",[84,32580,32581,32583,32586,32588],{"class":86,"line":2793},[84,32582,31547],{"class":129},[84,32584,32585],{"class":154}," matplotlib.pyplot ",[84,32587,1157],{"class":129},[84,32589,32590],{"class":154}," plt\n",[84,32592,32593],{"class":86,"line":2798},[84,32594,3578],{"emptyLinePlaceholder":1252},[84,32596,32597],{"class":86,"line":2804},[84,32598,3578],{"emptyLinePlaceholder":1252},[84,32600,32601,32604,32606,32609,32612,32614,32617],{"class":86,"line":2809},[84,32602,32603],{"class":154},"train_data",[84,32605,867],{"class":129},[84,32607,32608],{"class":154},"FashionMNIST(",[84,32610,32611],{"class":928},"root",[84,32613,867],{"class":129},[84,32615,32616],{"class":158},"'.\u002Fdata'",[84,32618,32619],{"class":154},",\n",[84,32621,32622,32625,32627,32630],{"class":86,"line":2823},[84,32623,32624],{"class":928},"                        train",[84,32626,867],{"class":129},[84,32628,32629],{"class":94},"True",[84,32631,32619],{"class":154},[84,32633,32634],{"class":86,"line":2828},[84,32635,32636],{"class":1378},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[84,32638,32639,32642,32644,32647,32650,32652,32655],{"class":86,"line":2834},[84,32640,32641],{"class":928},"                        transform",[84,32643,867],{"class":129},[84,32645,32646],{"class":154},"transforms.Compose([transforms.Resize(",[84,32648,32649],{"class":928},"size",[84,32651,867],{"class":129},[84,32653,32654],{"class":94},"224",[84,32656,32657],{"class":154},"),transforms.ToTensor()]),\n",[84,32659,32660,32663,32665,32667],{"class":86,"line":2855},[84,32661,32662],{"class":928},"                        download",[84,32664,867],{"class":129},[84,32666,32629],{"class":94},[84,32668,162],{"class":154},[84,32670,32671],{"class":86,"line":2860},[84,32672,3578],{"emptyLinePlaceholder":1252},[84,32674,32675],{"class":86,"line":2874},[84,32676,32677],{"class":1378},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[84,32679,32680,32683,32685,32688,32691,32693],{"class":86,"line":2879},[84,32681,32682],{"class":154},"train_loader",[84,32684,867],{"class":129},[84,32686,32687],{"class":154},"Data.DataLoader(",[84,32689,32690],{"class":928},"dataset",[84,32692,867],{"class":129},[84,32694,32695],{"class":154},"train_data,\n",[84,32697,32698,32701,32703,32705],{"class":86,"line":2908},[84,32699,32700],{"class":928},"                             batch_size",[84,32702,867],{"class":129},[84,32704,1516],{"class":94},[84,32706,32619],{"class":154},[84,32708,32709],{"class":86,"line":2913},[84,32710,32711],{"class":1378},"                             # 数据是否打乱\n",[84,32713,32714,32717,32719,32721],{"class":86,"line":2930},[84,32715,32716],{"class":928},"                             shuffle",[84,32718,867],{"class":129},[84,32720,32629],{"class":94},[84,32722,32619],{"class":154},[84,32724,32725],{"class":86,"line":2935},[84,32726,32727],{"class":1378},"                             # 规定加载数据的进程\n",[84,32729,32730,32733,32735,32737],{"class":86,"line":2940},[84,32731,32732],{"class":928},"                             num_workers",[84,32734,867],{"class":129},[84,32736,1504],{"class":94},[84,32738,162],{"class":154},[84,32740,32741],{"class":86,"line":2945},[84,32742,3578],{"emptyLinePlaceholder":1252},[84,32744,32745],{"class":86,"line":2959},[84,32746,32747],{"class":1378},"# 获得一个batch的数据\n",[84,32749,32750,32752,32755,32757,32760],{"class":86,"line":2964},[84,32751,4203],{"class":129},[84,32753,32754],{"class":154}," step,(b_x,b_y) ",[84,32756,27206],{"class":129},[84,32758,32759],{"class":94}," enumerate",[84,32761,32762],{"class":154},"(train_loader):\n",[84,32764,32765,32767,32770,32772,32774],{"class":86,"line":3755},[84,32766,4279],{"class":129},[84,32768,32769],{"class":154}," step ",[84,32771,2268],{"class":129},[84,32773,5271],{"class":94},[84,32775,4917],{"class":154},[84,32777,32778],{"class":86,"line":3769},[84,32779,32780],{"class":129},"        break\n",[84,32782,32783],{"class":86,"line":3777},[84,32784,32785],{"class":1378},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[84,32787,32788,32791,32793,32796],{"class":86,"line":3782},[84,32789,32790],{"class":154},"batch_x",[84,32792,867],{"class":129},[84,32794,32795],{"class":154},"b_x.squeeze().numpy()  ",[84,32797,32798],{"class":1378},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[84,32800,32801,32804,32806,32809],{"class":86,"line":3788},[84,32802,32803],{"class":154},"batch_y",[84,32805,867],{"class":129},[84,32807,32808],{"class":154},"b_y.numpy()   ",[84,32810,32811],{"class":1378},"#将张量转换成功numpy数组\n",[84,32813,32814,32817,32819,32822],{"class":86,"line":3794},[84,32815,32816],{"class":154},"class_label",[84,32818,867],{"class":129},[84,32820,32821],{"class":154},"train_data.classes  ",[84,32823,32824],{"class":1378},"#训练集标签\n",[84,32826,32827],{"class":86,"line":3799},[84,32828,32829],{"class":1378},"# print(class_label)\n",[84,32831,32832],{"class":86,"line":9120},[84,32833,3578],{"emptyLinePlaceholder":1252},[84,32835,32836],{"class":86,"line":9144},[84,32837,32838],{"class":1378},"# 可视化一个batch的图像\n",[84,32840,32841,32844,32847,32849,32851,32853,32855,32857],{"class":86,"line":9149},[84,32842,32843],{"class":154},"plt.figure(",[84,32845,32846],{"class":928},"figsize",[84,32848,867],{"class":129},[84,32850,155],{"class":154},[84,32852,1807],{"class":94},[84,32854,1688],{"class":154},[84,32856,1629],{"class":94},[84,32858,31651],{"class":154},[84,32860,32861,32863,32866,32868,32871,32873],{"class":86,"line":9155},[84,32862,4203],{"class":129},[84,32864,32865],{"class":154}," ii ",[84,32867,27206],{"class":129},[84,32869,32870],{"class":154}," np.arange(",[84,32872,8530],{"class":94},[84,32874,32875],{"class":154},"(batch_y)):\n",[84,32877,32878,32881,32883,32885,32887,32890,32892,32894],{"class":86,"line":9182},[84,32879,32880],{"class":154},"    plt.subplot(",[84,32882,1604],{"class":94},[84,32884,1688],{"class":154},[84,32886,1910],{"class":94},[84,32888,32889],{"class":154},",ii ",[84,32891,1790],{"class":129},[84,32893,133],{"class":94},[84,32895,162],{"class":154},[84,32897,32898,32901,32904,32906],{"class":86,"line":9187},[84,32899,32900],{"class":154},"    plt.imshow(batch_x[ii,:,:],",[84,32902,32903],{"class":928},"cmap",[84,32905,867],{"class":129},[84,32907,32908],{"class":154},"plt.cm.gray)\n",[84,32910,32911,32914,32916,32918,32920],{"class":86,"line":9193},[84,32912,32913],{"class":154},"    plt.title(class_label[batch_y[ii]],",[84,32915,32649],{"class":928},[84,32917,867],{"class":129},[84,32919,1756],{"class":94},[84,32921,162],{"class":154},[84,32923,32924,32927,32930],{"class":86,"line":9205},[84,32925,32926],{"class":154},"    plt.axis(",[84,32928,32929],{"class":158},"\"off\"",[84,32931,162],{"class":154},[84,32933,32934,32937,32940,32942,32945],{"class":86,"line":9217},[84,32935,32936],{"class":154},"    plt.subplots_adjust(",[84,32938,32939],{"class":928},"wspace",[84,32941,867],{"class":129},[84,32943,32944],{"class":94},"0.05",[84,32946,162],{"class":154},[84,32948,32949],{"class":86,"line":9229},[84,32950,32951],{"class":154},"plt.show()\n",[19,32953,32954],{},"用matplotlib进行展示的过程可以后续再补",[19,32956,32957],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32959,32960],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32962,32963],{},"模型训练：",[60,32965,32967],{"className":121,"code":32966,"language":91,"meta":66,"style":66},"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",[39,32968,32969,32976,32983,32987,32999,33005,33016,33026,33036,33046,33056,33061,33073,33083,33087,33091,33096,33107,33120,33131,33148,33159,33198,33214,33226,33237,33242,33253,33269,33280,33291,33302,33309,33313,33318,33323,33327,33332,33342,33363,33367,33371,33376,33381,33386,33406,33410,33415,33425,33429,33434,33443,33448,33453,33458,33468,33472,33476,33481,33486,33496,33501,33511,33516,33525,33530,33539,33544,33553,33557,33562,33572,33576,33580,33585,33600,33628,33642,33646,33651,33656,33665,33670,33679,33684,33693,33698,33707,33712,33721,33726,33735,33740,33753,33758,33768,33773,33783,33789,33795,33801,33807,33818,33824,33844,33850,33861,33867,33873,33879,33885,33891,33897,33903,33923,33929,33945,33951,33965,33971,33986,33992,34001,34007,34016,34022,34028,34037,34043,34054,34060,34079,34085,34096,34102,34122,34138,34144,34158,34164,34170,34181,34187,34193,34203,34209,34220,34226,34236,34241,34247,34296,34343,34348,34354,34373,34379,34399,34405,34411,34421,34426,34432,34448,34493,34499,34505,34511,34522,34528,34534,34540,34558,34572,34581,34590,34599,34608,34614,34620,34628,34633,34639,34650,34656,34676,34682,34688,34694,34711,34717,34723,34729,34735,34741,34768,34792,34798,34804,34810,34821,34832,34838,34855,34878,34901,34907,34912,34921,34931,34937,34942,34948,34961,34967,34978,34989,35008],{"__ignoreMap":66},[84,32970,32971,32973],{"class":86,"line":87},[84,32972,31547],{"class":129},[84,32974,32975],{"class":154}," copy\n",[84,32977,32978,32980],{"class":86,"line":98},[84,32979,31547],{"class":129},[84,32981,32982],{"class":154}," time\n",[84,32984,32985],{"class":86,"line":106},[84,32986,3578],{"emptyLinePlaceholder":1252},[84,32988,32989,32991,32994,32996],{"class":86,"line":112},[84,32990,31547],{"class":129},[84,32992,32993],{"class":154}," pandas ",[84,32995,1157],{"class":129},[84,32997,32998],{"class":154}," pd\n",[84,33000,33001,33003],{"class":86,"line":425},[84,33002,31547],{"class":129},[84,33004,31550],{"class":154},[84,33006,33007,33009,33011,33013],{"class":86,"line":2395},[84,33008,31891],{"class":129},[84,33010,32568],{"class":154},[84,33012,31547],{"class":129},[84,33014,33015],{"class":154}," Dataset\n",[84,33017,33018,33020,33022,33024],{"class":86,"line":2401},[84,33019,31891],{"class":129},[84,33021,32522],{"class":154},[84,33023,31547],{"class":129},[84,33025,32527],{"class":154},[84,33027,33028,33030,33032,33034],{"class":86,"line":2492},[84,33029,31891],{"class":129},[84,33031,32551],{"class":154},[84,33033,31547],{"class":129},[84,33035,32556],{"class":154},[84,33037,33038,33040,33042,33044],{"class":86,"line":2498},[84,33039,31547],{"class":129},[84,33041,32568],{"class":154},[84,33043,1157],{"class":129},[84,33045,32573],{"class":154},[84,33047,33048,33050,33052,33054],{"class":86,"line":2510},[84,33049,31547],{"class":129},[84,33051,32585],{"class":154},[84,33053,1157],{"class":129},[84,33055,32590],{"class":154},[84,33057,33058],{"class":86,"line":2793},[84,33059,33060],{"class":1378},"# 导入模型\n",[84,33062,33063,33065,33068,33070],{"class":86,"line":2798},[84,33064,31891],{"class":129},[84,33066,33067],{"class":154}," model ",[84,33069,31547],{"class":129},[84,33071,33072],{"class":154}," LeNet\n",[84,33074,33075,33077,33079,33081],{"class":86,"line":2804},[84,33076,31891],{"class":129},[84,33078,31894],{"class":154},[84,33080,31547],{"class":129},[84,33082,31899],{"class":154},[84,33084,33085],{"class":86,"line":2809},[84,33086,3578],{"emptyLinePlaceholder":1252},[84,33088,33089],{"class":86,"line":2823},[84,33090,3578],{"emptyLinePlaceholder":1252},[84,33092,33093],{"class":86,"line":2828},[84,33094,33095],{"class":1378},"# 处理训练集与验证集函数--->划分数据集\n",[84,33097,33098,33101,33104],{"class":86,"line":2834},[84,33099,33100],{"class":129},"def",[84,33102,33103],{"class":90}," train_val_data_process",[84,33105,33106],{"class":154},"():\n",[84,33108,33109,33112,33114,33116,33118],{"class":86,"line":2855},[84,33110,33111],{"class":154},"    train_data",[84,33113,867],{"class":129},[84,33115,32608],{"class":154},[84,33117,32616],{"class":158},[84,33119,32619],{"class":154},[84,33121,33122,33125,33127,33129],{"class":86,"line":2860},[84,33123,33124],{"class":928},"                            train",[84,33126,867],{"class":129},[84,33128,32629],{"class":94},[84,33130,32619],{"class":154},[84,33132,33133,33136,33138,33140,33142,33144,33146],{"class":86,"line":2874},[84,33134,33135],{"class":928},"                            transform",[84,33137,867],{"class":129},[84,33139,32646],{"class":154},[84,33141,32649],{"class":928},[84,33143,867],{"class":129},[84,33145,2209],{"class":94},[84,33147,32657],{"class":154},[84,33149,33150,33153,33155,33157],{"class":86,"line":2879},[84,33151,33152],{"class":928},"                            download",[84,33154,867],{"class":129},[84,33156,32629],{"class":94},[84,33158,162],{"class":154},[84,33160,33161,33164,33166,33169,33172,33174,33177,33179,33181,33184,33186,33188,33191,33193,33195],{"class":86,"line":2908},[84,33162,33163],{"class":154},"    train_data,val_data",[84,33165,867],{"class":129},[84,33167,33168],{"class":154},"Data.random_split(train_data,[",[84,33170,33171],{"class":94},"round",[84,33173,155],{"class":154},[84,33175,33176],{"class":94},"0.8",[84,33178,1043],{"class":129},[84,33180,8530],{"class":94},[84,33182,33183],{"class":154},"(train_data)),",[84,33185,33171],{"class":94},[84,33187,155],{"class":154},[84,33189,33190],{"class":94},"0.2",[84,33192,1043],{"class":129},[84,33194,8530],{"class":94},[84,33196,33197],{"class":154},"(train_data))])\n",[84,33199,33200,33203,33205,33208,33210,33212],{"class":86,"line":2913},[84,33201,33202],{"class":154},"    train_dataloader ",[84,33204,867],{"class":129},[84,33206,33207],{"class":154}," Data.DataLoader(",[84,33209,32690],{"class":928},[84,33211,867],{"class":129},[84,33213,32695],{"class":154},[84,33215,33216,33219,33221,33224],{"class":86,"line":2930},[84,33217,33218],{"class":928},"                                       batch_size",[84,33220,867],{"class":129},[84,33222,33223],{"class":94},"128",[84,33225,32619],{"class":154},[84,33227,33228,33231,33233,33235],{"class":86,"line":2935},[84,33229,33230],{"class":928},"                                       shuffle",[84,33232,867],{"class":129},[84,33234,32629],{"class":94},[84,33236,32619],{"class":154},[84,33238,33239],{"class":86,"line":2940},[84,33240,33241],{"class":1378},"                                       # 规定8个进程\n",[84,33243,33244,33247,33249,33251],{"class":86,"line":2945},[84,33245,33246],{"class":928},"                                       num_workers",[84,33248,867],{"class":129},[84,33250,1705],{"class":94},[84,33252,162],{"class":154},[84,33254,33255,33258,33260,33262,33264,33266],{"class":86,"line":2959},[84,33256,33257],{"class":154},"    val_dataloader",[84,33259,867],{"class":129},[84,33261,32687],{"class":154},[84,33263,32690],{"class":928},[84,33265,867],{"class":129},[84,33267,33268],{"class":154},"val_data,\n",[84,33270,33271,33274,33276,33278],{"class":86,"line":2964},[84,33272,33273],{"class":928},"                                   batch_size",[84,33275,867],{"class":129},[84,33277,33223],{"class":94},[84,33279,32619],{"class":154},[84,33281,33282,33285,33287,33289],{"class":86,"line":3755},[84,33283,33284],{"class":928},"                                   shuffle",[84,33286,867],{"class":129},[84,33288,32629],{"class":94},[84,33290,32619],{"class":154},[84,33292,33293,33296,33298,33300],{"class":86,"line":3769},[84,33294,33295],{"class":928},"                                   num_workers",[84,33297,867],{"class":129},[84,33299,1705],{"class":94},[84,33301,162],{"class":154},[84,33303,33304,33306],{"class":86,"line":3777},[84,33305,5268],{"class":129},[84,33307,33308],{"class":154}," train_dataloader,val_dataloader\n",[84,33310,33311],{"class":86,"line":3782},[84,33312,3578],{"emptyLinePlaceholder":1252},[84,33314,33315],{"class":86,"line":3788},[84,33316,33317],{"class":1378},"# 验证是否出错\n",[84,33319,33320],{"class":86,"line":3794},[84,33321,33322],{"class":1378},"# train_val_data_process()\n",[84,33324,33325],{"class":86,"line":3799},[84,33326,3578],{"emptyLinePlaceholder":1252},[84,33328,33329],{"class":86,"line":9120},[84,33330,33331],{"class":1378},"# 定义模型训练函数\n",[84,33333,33334,33336,33339],{"class":86,"line":9144},[84,33335,33100],{"class":129},[84,33337,33338],{"class":90}," train_model_process",[84,33340,33341],{"class":154},"(model,train_dataloader,val_dataloader,num_epochs):\n",[84,33343,33344,33346,33348,33350,33352,33354,33356,33358,33361],{"class":86,"line":9149},[84,33345,32391],{"class":154},[84,33347,867],{"class":129},[84,33349,31605],{"class":154},[84,33351,32398],{"class":158},[84,33353,2885],{"class":129},[84,33355,32403],{"class":154},[84,33357,2882],{"class":129},[84,33359,33360],{"class":158}," 'cpu'",[84,33362,162],{"class":154},[84,33364,33365],{"class":86,"line":9155},[84,33366,3578],{"emptyLinePlaceholder":1252},[84,33368,33369],{"class":86,"line":9182},[84,33370,3578],{"emptyLinePlaceholder":1252},[84,33372,33373],{"class":86,"line":9187},[84,33374,33375],{"class":1378},"    # 定义优化器\n",[84,33377,33378],{"class":86,"line":9193},[84,33379,33380],{"class":1378},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[84,33382,33383],{"class":86,"line":9205},[84,33384,33385],{"class":1378},"    # lr为学习率\n",[84,33387,33388,33391,33393,33396,33399,33401,33404],{"class":86,"line":9217},[84,33389,33390],{"class":154},"    optimizer",[84,33392,867],{"class":129},[84,33394,33395],{"class":154},"torch.optim.Adam(model.parameters(),",[84,33397,33398],{"class":928},"lr",[84,33400,867],{"class":129},[84,33402,33403],{"class":94},"0.001",[84,33405,162],{"class":154},[84,33407,33408],{"class":86,"line":9229},[84,33409,3578],{"emptyLinePlaceholder":1252},[84,33411,33412],{"class":86,"line":10888},[84,33413,33414],{"class":1378},"    # 定义损失函数使用交叉熵损失函数\n",[84,33416,33417,33420,33422],{"class":86,"line":10913},[84,33418,33419],{"class":154},"    criterion",[84,33421,867],{"class":129},[84,33423,33424],{"class":154},"nn.CrossEntropyLoss()\n",[84,33426,33427],{"class":86,"line":10936},[84,33428,3578],{"emptyLinePlaceholder":1252},[84,33430,33431],{"class":86,"line":10960},[84,33432,33433],{"class":1378},"    # 将模型放到GPU中进行训练\n",[84,33435,33436,33438,33440],{"class":86,"line":10965},[84,33437,32443],{"class":154},[84,33439,867],{"class":129},[84,33441,33442],{"class":154},"model.to(device)\n",[84,33444,33445],{"class":86,"line":10970},[84,33446,33447],{"class":1378},"    # 复制当前模型的参数\n",[84,33449,33450],{"class":86,"line":10975},[84,33451,33452],{"class":1378},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[84,33454,33455],{"class":86,"line":10984},[84,33456,33457],{"class":1378},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[84,33459,33460,33463,33465],{"class":86,"line":10989},[84,33461,33462],{"class":154},"    best_model_wts",[84,33464,867],{"class":129},[84,33466,33467],{"class":154},"copy.deepcopy(model.state_dict())\n",[84,33469,33470],{"class":86,"line":10995},[84,33471,3578],{"emptyLinePlaceholder":1252},[84,33473,33474],{"class":86,"line":11016},[84,33475,3578],{"emptyLinePlaceholder":1252},[84,33477,33478],{"class":86,"line":11022},[84,33479,33480],{"class":1378},"    # 初始化参数\n",[84,33482,33483],{"class":86,"line":11036},[84,33484,33485],{"class":1378},"    # 最高准确度\n",[84,33487,33488,33491,33493],{"class":86,"line":11042},[84,33489,33490],{"class":154},"    best_acc",[84,33492,867],{"class":129},[84,33494,33495],{"class":94},"0.0\n",[84,33497,33498],{"class":86,"line":11069},[84,33499,33500],{"class":1378},"    # 训练集损失列表\n",[84,33502,33503,33506,33508],{"class":86,"line":11078},[84,33504,33505],{"class":154},"    train_loss_all",[84,33507,867],{"class":129},[84,33509,33510],{"class":154},"[]\n",[84,33512,33513],{"class":86,"line":11084},[84,33514,33515],{"class":1378},"    # 验证集函数列表\n",[84,33517,33518,33521,33523],{"class":86,"line":11092},[84,33519,33520],{"class":154},"    val_loss_all",[84,33522,867],{"class":129},[84,33524,33510],{"class":154},[84,33526,33527],{"class":86,"line":11097},[84,33528,33529],{"class":1378},"    # 训练集准确度列表\n",[84,33531,33532,33535,33537],{"class":86,"line":17774},[84,33533,33534],{"class":154},"    train_acc_all",[84,33536,867],{"class":129},[84,33538,33510],{"class":154},[84,33540,33541],{"class":86,"line":17780},[84,33542,33543],{"class":1378},"    # 验证集准确度列表\n",[84,33545,33546,33549,33551],{"class":86,"line":17803},[84,33547,33548],{"class":154},"    val_acc_all",[84,33550,867],{"class":129},[84,33552,33510],{"class":154},[84,33554,33555],{"class":86,"line":17809},[84,33556,3578],{"emptyLinePlaceholder":1252},[84,33558,33559],{"class":86,"line":17832},[84,33560,33561],{"class":1378},"    # 保存当前时间--->方便看每轮训练的时间\n",[84,33563,33564,33567,33569],{"class":86,"line":17846},[84,33565,33566],{"class":154},"    since",[84,33568,867],{"class":129},[84,33570,33571],{"class":154},"time.time()\n",[84,33573,33574],{"class":86,"line":17866},[84,33575,3578],{"emptyLinePlaceholder":1252},[84,33577,33578],{"class":86,"line":17872},[84,33579,3578],{"emptyLinePlaceholder":1252},[84,33581,33582],{"class":86,"line":17883},[84,33583,33584],{"class":1378},"    # 准备工作完成--->开始训练模型\n",[84,33586,33587,33589,33592,33594,33597],{"class":86,"line":17906},[84,33588,4379],{"class":129},[84,33590,33591],{"class":154}," epoch ",[84,33593,27206],{"class":129},[84,33595,33596],{"class":94}," range",[84,33598,33599],{"class":154},"(num_epochs):\n",[84,33601,33602,33605,33607,33610,33613,33615,33617,33619,33622,33624,33626],{"class":86,"line":17928},[84,33603,33604],{"class":94},"        print",[84,33606,155],{"class":154},[84,33608,33609],{"class":158},"\"Epoch ",[84,33611,33612],{"class":94},"{}",[84,33614,1893],{"class":158},[84,33616,33612],{"class":94},[84,33618,1562],{"class":158},[84,33620,33621],{"class":154},".format(epoch,num_epochs",[84,33623,1841],{"class":129},[84,33625,1529],{"class":94},[84,33627,31651],{"class":154},[84,33629,33630,33632,33634,33636,33638,33640],{"class":86,"line":17933},[84,33631,33604],{"class":94},[84,33633,155],{"class":154},[84,33635,934],{"class":158},[84,33637,1043],{"class":129},[84,33639,1756],{"class":94},[84,33641,162],{"class":154},[84,33643,33644],{"class":86,"line":17939},[84,33645,3578],{"emptyLinePlaceholder":1252},[84,33647,33648],{"class":86,"line":17953},[84,33649,33650],{"class":1378},"        # 初始化参数\n",[84,33652,33653],{"class":86,"line":17966},[84,33654,33655],{"class":1378},"        # 训练集损失函数\n",[84,33657,33658,33661,33663],{"class":86,"line":17971},[84,33659,33660],{"class":154},"        train_loss",[84,33662,867],{"class":129},[84,33664,33495],{"class":94},[84,33666,33667],{"class":86,"line":17985},[84,33668,33669],{"class":1378},"        # 训练集准确度\n",[84,33671,33672,33675,33677],{"class":86,"line":17990},[84,33673,33674],{"class":154},"        train_corrects",[84,33676,867],{"class":129},[84,33678,4263],{"class":94},[84,33680,33681],{"class":86,"line":17996},[84,33682,33683],{"class":1378},"        # 验证集损失函数\n",[84,33685,33686,33689,33691],{"class":86,"line":18001},[84,33687,33688],{"class":154},"        val_loss",[84,33690,867],{"class":129},[84,33692,33495],{"class":94},[84,33694,33695],{"class":86,"line":18015},[84,33696,33697],{"class":1378},"        # 验证集准确度\n",[84,33699,33700,33703,33705],{"class":86,"line":18020},[84,33701,33702],{"class":154},"        val_corrects",[84,33704,867],{"class":129},[84,33706,4263],{"class":94},[84,33708,33709],{"class":86,"line":18025},[84,33710,33711],{"class":1378},"        # 训练集样本数量\n",[84,33713,33714,33717,33719],{"class":86,"line":18039},[84,33715,33716],{"class":154},"        train_num",[84,33718,867],{"class":129},[84,33720,4263],{"class":94},[84,33722,33723],{"class":86,"line":18051},[84,33724,33725],{"class":1378},"        # 验证集样本数量\n",[84,33727,33728,33731,33733],{"class":86,"line":18056},[84,33729,33730],{"class":154},"        val_num",[84,33732,867],{"class":129},[84,33734,4263],{"class":94},[84,33736,33737],{"class":86,"line":18069},[84,33738,33739],{"class":1378},"        # 将数据放到设备,并开始训练\n",[84,33741,33742,33744,33746,33748,33750],{"class":86,"line":18074},[84,33743,4581],{"class":129},[84,33745,32754],{"class":154},[84,33747,27206],{"class":129},[84,33749,32759],{"class":94},[84,33751,33752],{"class":154},"(train_dataloader):\n",[84,33754,33755],{"class":86,"line":18079},[84,33756,33757],{"class":1378},"            # 将特征放入到训练设备\n",[84,33759,33760,33763,33765],{"class":86,"line":18084},[84,33761,33762],{"class":154},"            b_x",[84,33764,867],{"class":129},[84,33766,33767],{"class":154},"b_x.to(device)\n",[84,33769,33770],{"class":86,"line":18097},[84,33771,33772],{"class":1378},"            # 将标签放入到训练设备当中\n",[84,33774,33775,33778,33780],{"class":86,"line":18102},[84,33776,33777],{"class":154},"            b_y",[84,33779,867],{"class":129},[84,33781,33782],{"class":154},"b_y.to(device)\n",[84,33784,33786],{"class":86,"line":33785},98,[84,33787,33788],{"class":1378},"            # 设置模型为训练模式\n",[84,33790,33792],{"class":86,"line":33791},99,[84,33793,33794],{"class":154},"            model.train()\n",[84,33796,33798],{"class":86,"line":33797},100,[84,33799,33800],{"class":1378},"            # 将数据放到模型当中,开始前向传播\n",[84,33802,33804],{"class":86,"line":33803},101,[84,33805,33806],{"class":1378},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[84,33808,33810,33813,33815],{"class":86,"line":33809},102,[84,33811,33812],{"class":154},"            output",[84,33814,867],{"class":129},[84,33816,33817],{"class":154},"model(b_x)\n",[84,33819,33821],{"class":86,"line":33820},103,[84,33822,33823],{"class":1378},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[84,33825,33827,33830,33832,33835,33838,33840,33842],{"class":86,"line":33826},104,[84,33828,33829],{"class":154},"            pre_lab",[84,33831,867],{"class":129},[84,33833,33834],{"class":154},"torch.argmax(output,",[84,33836,33837],{"class":928},"dim",[84,33839,867],{"class":129},[84,33841,1529],{"class":94},[84,33843,162],{"class":154},[84,33845,33847],{"class":86,"line":33846},105,[84,33848,33849],{"class":1378},"            # 计算每一个batch的损失函数\n",[84,33851,33853,33856,33858],{"class":86,"line":33852},106,[84,33854,33855],{"class":154},"            loss",[84,33857,867],{"class":129},[84,33859,33860],{"class":154},"criterion(output,b_y)\n",[84,33862,33864],{"class":86,"line":33863},107,[84,33865,33866],{"class":1378},"            # 将梯度初始化为0\n",[84,33868,33870],{"class":86,"line":33869},108,[84,33871,33872],{"class":154},"            optimizer.zero_grad()\n",[84,33874,33876],{"class":86,"line":33875},109,[84,33877,33878],{"class":1378},"            # 梯度置为0后再进行反向传播\n",[84,33880,33882],{"class":86,"line":33881},110,[84,33883,33884],{"class":154},"            loss.backward()\n",[84,33886,33888],{"class":86,"line":33887},111,[84,33889,33890],{"class":1378},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[84,33892,33894],{"class":86,"line":33893},112,[84,33895,33896],{"class":154},"            optimizer.step()\n",[84,33898,33900],{"class":86,"line":33899},113,[84,33901,33902],{"class":1378},"            # loss.item()指的是batch的平均损失\n",[84,33904,33906,33909,33911,33914,33916,33919,33921],{"class":86,"line":33905},114,[84,33907,33908],{"class":154},"            train_loss",[84,33910,10649],{"class":129},[84,33912,33913],{"class":154},"loss.item()",[84,33915,1043],{"class":129},[84,33917,33918],{"class":154},"b_x.size(",[84,33920,1504],{"class":94},[84,33922,162],{"class":154},[84,33924,33926],{"class":86,"line":33925},115,[84,33927,33928],{"class":1378},"            # 计算每个批次中正确预测的数量\n",[84,33930,33932,33935,33937,33940,33942],{"class":86,"line":33931},116,[84,33933,33934],{"class":154},"            train_corrects",[84,33936,10649],{"class":129},[84,33938,33939],{"class":154},"torch.sum(pre_lab",[84,33941,4127],{"class":129},[84,33943,33944],{"class":154},"b_y.data)\n",[84,33946,33948],{"class":86,"line":33947},117,[84,33949,33950],{"class":1378},"            # 计算目前为止一共处理了多少样本\n",[84,33952,33954,33957,33959,33961,33963],{"class":86,"line":33953},118,[84,33955,33956],{"class":154},"            train_num",[84,33958,10649],{"class":129},[84,33960,33918],{"class":154},[84,33962,1504],{"class":94},[84,33964,162],{"class":154},[84,33966,33968],{"class":86,"line":33967},119,[84,33969,33970],{"class":1378},"        # 验证数据\n",[84,33972,33974,33976,33979,33981,33983],{"class":86,"line":33973},120,[84,33975,4581],{"class":129},[84,33977,33978],{"class":154}," step ,(b_x,b_y) ",[84,33980,27206],{"class":129},[84,33982,32759],{"class":94},[84,33984,33985],{"class":154},"(val_dataloader):\n",[84,33987,33989],{"class":86,"line":33988},121,[84,33990,33991],{"class":1378},"            # 将特征放到验证设备当中\n",[84,33993,33995,33997,33999],{"class":86,"line":33994},122,[84,33996,33762],{"class":154},[84,33998,867],{"class":129},[84,34000,33767],{"class":154},[84,34002,34004],{"class":86,"line":34003},123,[84,34005,34006],{"class":1378},"            # 将标签放到放到训练设备当中\n",[84,34008,34010,34012,34014],{"class":86,"line":34009},124,[84,34011,33777],{"class":154},[84,34013,867],{"class":129},[84,34015,33782],{"class":154},[84,34017,34019],{"class":86,"line":34018},125,[84,34020,34021],{"class":1378},"            # 开启验证模式，设置模型为评估模式\n",[84,34023,34025],{"class":86,"line":34024},126,[84,34026,34027],{"class":154},"            model.eval()\n",[84,34029,34031,34034],{"class":86,"line":34030},127,[84,34032,34033],{"class":129},"            with",[84,34035,34036],{"class":154}," torch.no_grad():\n",[84,34038,34040],{"class":86,"line":34039},128,[84,34041,34042],{"class":1378},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[84,34044,34046,34049,34051],{"class":86,"line":34045},129,[84,34047,34048],{"class":154},"                output ",[84,34050,867],{"class":129},[84,34052,34053],{"class":154}," model(b_x)\n",[84,34055,34057],{"class":86,"line":34056},130,[84,34058,34059],{"class":1378},"                # 查找每一行中最大值对应的下标\n",[84,34061,34063,34066,34068,34071,34073,34075,34077],{"class":86,"line":34062},131,[84,34064,34065],{"class":154},"                pre_lab ",[84,34067,867],{"class":129},[84,34069,34070],{"class":154}," torch.argmax(output, ",[84,34072,33837],{"class":928},[84,34074,867],{"class":129},[84,34076,1529],{"class":94},[84,34078,162],{"class":154},[84,34080,34082],{"class":86,"line":34081},132,[84,34083,34084],{"class":1378},"                # 计算验证集上的当前 batch 损失\n",[84,34086,34088,34091,34093],{"class":86,"line":34087},133,[84,34089,34090],{"class":154},"                val_batch_loss ",[84,34092,867],{"class":129},[84,34094,34095],{"class":154}," criterion(output, b_y)\n",[84,34097,34099],{"class":86,"line":34098},134,[84,34100,34101],{"class":1378},"                # 对损失函数进行累加（按样本数加权）\n",[84,34103,34105,34108,34110,34113,34115,34118,34120],{"class":86,"line":34104},135,[84,34106,34107],{"class":154},"                val_loss ",[84,34109,10649],{"class":129},[84,34111,34112],{"class":154}," val_batch_loss.item() ",[84,34114,1043],{"class":129},[84,34116,34117],{"class":154}," b_x.size(",[84,34119,1504],{"class":94},[84,34121,162],{"class":154},[84,34123,34125,34128,34130,34133,34135],{"class":86,"line":34124},136,[84,34126,34127],{"class":154},"                val_corrects ",[84,34129,10649],{"class":129},[84,34131,34132],{"class":154}," torch.sum(pre_lab ",[84,34134,4127],{"class":129},[84,34136,34137],{"class":154}," b_y.data)\n",[84,34139,34141],{"class":86,"line":34140},137,[84,34142,34143],{"class":1378},"                # 当前用于验证的样本数量\n",[84,34145,34147,34150,34152,34154,34156],{"class":86,"line":34146},138,[84,34148,34149],{"class":154},"            val_num ",[84,34151,10649],{"class":129},[84,34153,34117],{"class":154},[84,34155,1504],{"class":94},[84,34157,162],{"class":154},[84,34159,34161],{"class":86,"line":34160},139,[84,34162,34163],{"class":1378},"        # 计算并保存每一次迭代的loss值和准确率\n",[84,34165,34167],{"class":86,"line":34166},140,[84,34168,34169],{"class":1378},"        # 计算并保存训练集的loss值\n",[84,34171,34173,34176,34178],{"class":86,"line":34172},141,[84,34174,34175],{"class":154},"        train_loss_all.append(train_loss",[84,34177,1893],{"class":129},[84,34179,34180],{"class":154},"train_num)\n",[84,34182,34184],{"class":86,"line":34183},142,[84,34185,34186],{"class":1378},"        # 取双精度\n",[84,34188,34190],{"class":86,"line":34189},143,[84,34191,34192],{"class":1378},"        # 计算并保存训练集的准确率\n",[84,34194,34196,34199,34201],{"class":86,"line":34195},144,[84,34197,34198],{"class":154},"        train_acc_all.append(train_corrects.double().item()",[84,34200,1893],{"class":129},[84,34202,34180],{"class":154},[84,34204,34206],{"class":86,"line":34205},145,[84,34207,34208],{"class":1378},"        # 计算并保存验证集的loss值\n",[84,34210,34212,34215,34217],{"class":86,"line":34211},146,[84,34213,34214],{"class":154},"        val_loss_all.append(val_loss",[84,34216,1893],{"class":129},[84,34218,34219],{"class":154},"val_num)\n",[84,34221,34223],{"class":86,"line":34222},147,[84,34224,34225],{"class":1378},"        # 计算并保存验证集的准确率\n",[84,34227,34229,34232,34234],{"class":86,"line":34228},148,[84,34230,34231],{"class":154},"        val_acc_all.append(val_corrects.double().item()",[84,34233,1893],{"class":129},[84,34235,34219],{"class":154},[84,34237,34239],{"class":86,"line":34238},149,[84,34240,3578],{"emptyLinePlaceholder":1252},[84,34242,34244],{"class":86,"line":34243},150,[84,34245,34246],{"class":1378},"        # 打印训练一轮的loss值和准确率\n",[84,34248,34250,34252,34254,34256,34258,34261,34263,34266,34268,34271,34273,34275,34277,34279,34282,34284,34286,34289,34291,34293],{"class":86,"line":34249},151,[84,34251,33604],{"class":94},[84,34253,155],{"class":154},[84,34255,4770],{"class":158},[84,34257,33612],{"class":94},[84,34259,34260],{"class":158},"train loss:",[84,34262,2204],{"class":94},[84,34264,34265],{"class":129},":.4f",[84,34267,2254],{"class":94},[84,34269,34270],{"class":158}," train acc:",[84,34272,2204],{"class":94},[84,34274,34265],{"class":129},[84,34276,2254],{"class":94},[84,34278,4770],{"class":158},[84,34280,34281],{"class":154},".format(epoch,train_loss_all[",[84,34283,1841],{"class":129},[84,34285,1529],{"class":94},[84,34287,34288],{"class":154},"],train_acc_all[",[84,34290,1841],{"class":129},[84,34292,1529],{"class":94},[84,34294,34295],{"class":154},"]))\n",[84,34297,34299,34301,34303,34305,34307,34310,34312,34314,34316,34319,34321,34323,34325,34327,34330,34332,34334,34337,34339,34341],{"class":86,"line":34298},152,[84,34300,33604],{"class":94},[84,34302,155],{"class":154},[84,34304,4770],{"class":158},[84,34306,33612],{"class":94},[84,34308,34309],{"class":158},"val loss:",[84,34311,2204],{"class":94},[84,34313,34265],{"class":129},[84,34315,2254],{"class":94},[84,34317,34318],{"class":158}," val acc:",[84,34320,2204],{"class":94},[84,34322,34265],{"class":129},[84,34324,2254],{"class":94},[84,34326,4770],{"class":158},[84,34328,34329],{"class":154},".format(epoch,val_loss_all[",[84,34331,1841],{"class":129},[84,34333,1529],{"class":94},[84,34335,34336],{"class":154},"],val_acc_all[",[84,34338,1841],{"class":129},[84,34340,1529],{"class":94},[84,34342,34295],{"class":154},[84,34344,34346],{"class":86,"line":34345},153,[84,34347,3578],{"emptyLinePlaceholder":1252},[84,34349,34351],{"class":86,"line":34350},154,[84,34352,34353],{"class":1378},"        # 判断准确度--->保存最优模型\n",[84,34355,34357,34359,34362,34364,34366,34368,34370],{"class":86,"line":34356},155,[84,34358,3675],{"class":129},[84,34360,34361],{"class":154}," val_acc_all[",[84,34363,1841],{"class":129},[84,34365,1529],{"class":94},[84,34367,2248],{"class":154},[84,34369,2268],{"class":129},[84,34371,34372],{"class":154},"best_acc:\n",[84,34374,34376],{"class":86,"line":34375},156,[84,34377,34378],{"class":1378},"            # 保存当前模型准确度\n",[84,34380,34382,34385,34387,34389,34392,34394,34396],{"class":86,"line":34381},157,[84,34383,34384],{"class":154},"            best_acc:",[84,34386,1362],{"class":94},[84,34388,867],{"class":129},[84,34390,34391],{"class":154},"val_acc_all[",[84,34393,1841],{"class":129},[84,34395,1529],{"class":94},[84,34397,34398],{"class":154},"]\n",[84,34400,34402],{"class":86,"line":34401},158,[84,34403,34404],{"class":1378},"            # 保存当前的准确度\n",[84,34406,34408],{"class":86,"line":34407},159,[84,34409,34410],{"class":1378},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[84,34412,34414,34417,34419],{"class":86,"line":34413},160,[84,34415,34416],{"class":154},"            best_model_wts",[84,34418,867],{"class":129},[84,34420,33467],{"class":154},[84,34422,34424],{"class":86,"line":34423},161,[84,34425,3578],{"emptyLinePlaceholder":1252},[84,34427,34429],{"class":86,"line":34428},162,[84,34430,34431],{"class":1378},"        # 计算耗时\n",[84,34433,34435,34438,34440,34443,34445],{"class":86,"line":34434},163,[84,34436,34437],{"class":154},"        time_use",[84,34439,867],{"class":129},[84,34441,34442],{"class":154},"time.time()",[84,34444,1841],{"class":129},[84,34446,34447],{"class":154},"since\n",[84,34449,34451,34453,34455,34458,34460,34463,34465,34467,34469,34471,34473,34476,34479,34482,34484,34487,34489,34491],{"class":86,"line":34450},164,[84,34452,33604],{"class":94},[84,34454,155],{"class":154},[84,34456,34457],{"class":158},"'训练和验证耗费的时间",[84,34459,2204],{"class":94},[84,34461,34462],{"class":129},":.0f",[84,34464,2254],{"class":94},[84,34466,1853],{"class":158},[84,34468,2204],{"class":94},[84,34470,34462],{"class":129},[84,34472,2254],{"class":94},[84,34474,34475],{"class":158},"s'",[84,34477,34478],{"class":154},".format(time_use",[84,34480,34481],{"class":129},"\u002F\u002F",[84,34483,2215],{"class":94},[84,34485,34486],{"class":154},",time_use",[84,34488,1638],{"class":129},[84,34490,2215],{"class":94},[84,34492,31651],{"class":154},[84,34494,34496],{"class":86,"line":34495},165,[84,34497,34498],{"class":1378},"    # 选择最优参数\n",[84,34500,34502],{"class":86,"line":34501},166,[84,34503,34504],{"class":1378},"    # 加载最高准确率下的模型参数\n",[84,34506,34508],{"class":86,"line":34507},167,[84,34509,34510],{"class":1378},"    # model.load_state_dict(best_model_wts)\n",[84,34512,34514,34517,34520],{"class":86,"line":34513},168,[84,34515,34516],{"class":154},"    torch.save(model.state_dict(best_model_wts), ",[84,34518,34519],{"class":158},"'.\u002Fbest_model.pth'",[84,34521,162],{"class":154},[84,34523,34525],{"class":86,"line":34524},169,[84,34526,34527],{"class":1378},"    # 或者写成\n",[84,34529,34531],{"class":86,"line":34530},170,[84,34532,34533],{"class":1378},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[84,34535,34537],{"class":86,"line":34536},171,[84,34538,34539],{"class":1378},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[84,34541,34543,34546,34548,34551,34554,34556],{"class":86,"line":34542},172,[84,34544,34545],{"class":154},"    train_process",[84,34547,867],{"class":129},[84,34549,34550],{"class":154},"pd.DataFrame(",[84,34552,34553],{"class":928},"data",[84,34555,867],{"class":129},[84,34557,2727],{"class":154},[84,34559,34561,34564,34566,34569],{"class":86,"line":34560},173,[84,34562,34563],{"class":158},"        \"epoch\"",[84,34565,2167],{"class":154},[84,34567,34568],{"class":94},"range",[84,34570,34571],{"class":154},"(num_epochs),\n",[84,34573,34575,34578],{"class":86,"line":34574},174,[84,34576,34577],{"class":158},"        \"train_loss_all\"",[84,34579,34580],{"class":154},":train_loss_all,\n",[84,34582,34584,34587],{"class":86,"line":34583},175,[84,34585,34586],{"class":158},"        \"val_loss_all\"",[84,34588,34589],{"class":154},":val_loss_all,\n",[84,34591,34593,34596],{"class":86,"line":34592},176,[84,34594,34595],{"class":158},"        \"train_acc_all\"",[84,34597,34598],{"class":154},":train_acc_all,\n",[84,34600,34602,34605],{"class":86,"line":34601},177,[84,34603,34604],{"class":158},"        \"val_acc_all\"",[84,34606,34607],{"class":154},":val_acc_all\n",[84,34609,34611],{"class":86,"line":34610},178,[84,34612,34613],{"class":154},"    })\n",[84,34615,34617],{"class":86,"line":34616},179,[84,34618,34619],{"class":1378},"    # 返回训练保存的过程\n",[84,34621,34623,34625],{"class":86,"line":34622},180,[84,34624,5268],{"class":129},[84,34626,34627],{"class":154}," train_process\n",[84,34629,34631],{"class":86,"line":34630},181,[84,34632,3578],{"emptyLinePlaceholder":1252},[84,34634,34636],{"class":86,"line":34635},182,[84,34637,34638],{"class":1378},"# 将loss值和精度按照图片的形式展示出来\n",[84,34640,34642,34644,34647],{"class":86,"line":34641},183,[84,34643,33100],{"class":129},[84,34645,34646],{"class":90}," matplot_acc_loss",[84,34648,34649],{"class":154},"(train_process):\n",[84,34651,34653],{"class":86,"line":34652},184,[84,34654,34655],{"class":1378},"    # 设置图的大小\n",[84,34657,34659,34662,34664,34666,34668,34670,34672,34674],{"class":86,"line":34658},185,[84,34660,34661],{"class":154},"    plt.figure(",[84,34663,32846],{"class":928},[84,34665,867],{"class":129},[84,34667,155],{"class":154},[84,34669,1807],{"class":94},[84,34671,1688],{"class":154},[84,34673,1604],{"class":94},[84,34675,31651],{"class":154},[84,34677,34679],{"class":86,"line":34678},186,[84,34680,34681],{"class":1378},"    # 设置图中有几张图\n",[84,34683,34685],{"class":86,"line":34684},187,[84,34686,34687],{"class":1378},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[84,34689,34691],{"class":86,"line":34690},188,[84,34692,34693],{"class":1378},"    # ①loss图\n",[84,34695,34697,34699,34701,34703,34705,34707,34709],{"class":86,"line":34696},189,[84,34698,32880],{"class":154},[84,34700,1529],{"class":94},[84,34702,1688],{"class":154},[84,34704,1397],{"class":94},[84,34706,1688],{"class":154},[84,34708,1529],{"class":94},[84,34710,162],{"class":154},[84,34712,34714],{"class":86,"line":34713},190,[84,34715,34716],{"class":1378},"    # 补充:\n",[84,34718,34720],{"class":86,"line":34719},191,[84,34721,34722],{"class":1378},"    # plt.subplot(nrows, ncols, index)\n",[84,34724,34726],{"class":86,"line":34725},192,[84,34727,34728],{"class":1378},"    # nrows：行数\n",[84,34730,34732],{"class":86,"line":34731},193,[84,34733,34734],{"class":1378},"    # ncols：列数\n",[84,34736,34738],{"class":86,"line":34737},194,[84,34739,34740],{"class":1378},"    # index：目前选中第几个子图（从1开始）\n",[84,34742,34744,34747,34750,34753,34756,34758,34761,34763,34766],{"class":86,"line":34743},195,[84,34745,34746],{"class":154},"    plt.plot(train_process[",[84,34748,34749],{"class":158},"\"epoch\"",[84,34751,34752],{"class":154},"],train_process.train_loss_all,",[84,34754,34755],{"class":158},"'ro-'",[84,34757,1688],{"class":154},[84,34759,34760],{"class":928},"label",[84,34762,867],{"class":129},[84,34764,34765],{"class":158},"'train loss'",[84,34767,162],{"class":154},[84,34769,34771,34773,34775,34778,34781,34783,34785,34787,34790],{"class":86,"line":34770},196,[84,34772,34746],{"class":154},[84,34774,34749],{"class":158},[84,34776,34777],{"class":154},"],train_process.val_loss_all,",[84,34779,34780],{"class":158},"'bs--'",[84,34782,1688],{"class":154},[84,34784,34760],{"class":928},[84,34786,867],{"class":129},[84,34788,34789],{"class":158},"'val loss'",[84,34791,162],{"class":154},[84,34793,34795],{"class":86,"line":34794},197,[84,34796,34797],{"class":1378},"    # 添加一个图例\n",[84,34799,34801],{"class":86,"line":34800},198,[84,34802,34803],{"class":154},"    plt.legend()\n",[84,34805,34807],{"class":86,"line":34806},199,[84,34808,34809],{"class":1378},"    # 给轴添加标签\n",[84,34811,34813,34816,34819],{"class":86,"line":34812},200,[84,34814,34815],{"class":154},"    plt.xlabel(",[84,34817,34818],{"class":158},"'epoch'",[84,34820,162],{"class":154},[84,34822,34824,34827,34830],{"class":86,"line":34823},201,[84,34825,34826],{"class":154},"    plt.ylabel(",[84,34828,34829],{"class":158},"'loss'",[84,34831,162],{"class":154},[84,34833,34835],{"class":86,"line":34834},202,[84,34836,34837],{"class":1378},"    # ②准确度图\n",[84,34839,34841,34843,34845,34847,34849,34851,34853],{"class":86,"line":34840},203,[84,34842,32880],{"class":154},[84,34844,1529],{"class":94},[84,34846,1688],{"class":154},[84,34848,1397],{"class":94},[84,34850,1688],{"class":154},[84,34852,1397],{"class":94},[84,34854,162],{"class":154},[84,34856,34858,34860,34862,34865,34867,34869,34871,34873,34876],{"class":86,"line":34857},204,[84,34859,34746],{"class":154},[84,34861,34749],{"class":158},[84,34863,34864],{"class":154},"],train_process.train_acc_all,",[84,34866,34755],{"class":158},[84,34868,1688],{"class":154},[84,34870,34760],{"class":928},[84,34872,867],{"class":129},[84,34874,34875],{"class":158},"'train acc'",[84,34877,162],{"class":154},[84,34879,34881,34883,34885,34888,34890,34892,34894,34896,34899],{"class":86,"line":34880},205,[84,34882,34746],{"class":154},[84,34884,34749],{"class":158},[84,34886,34887],{"class":154},"],train_process.val_acc_all,",[84,34889,34780],{"class":158},[84,34891,1688],{"class":154},[84,34893,34760],{"class":928},[84,34895,867],{"class":129},[84,34897,34898],{"class":158},"'val acc'",[84,34900,162],{"class":154},[84,34902,34904],{"class":86,"line":34903},206,[84,34905,34906],{"class":1378},"    # 添加图例\n",[84,34908,34910],{"class":86,"line":34909},207,[84,34911,34803],{"class":154},[84,34913,34915,34917,34919],{"class":86,"line":34914},208,[84,34916,34815],{"class":154},[84,34918,34749],{"class":158},[84,34920,162],{"class":154},[84,34922,34924,34926,34929],{"class":86,"line":34923},209,[84,34925,34826],{"class":154},[84,34927,34928],{"class":158},"\"acc\"",[84,34930,162],{"class":154},[84,34932,34934],{"class":86,"line":34933},210,[84,34935,34936],{"class":154},"    plt.show()\n",[84,34938,34940],{"class":86,"line":34939},211,[84,34941,3578],{"emptyLinePlaceholder":1252},[84,34943,34945],{"class":86,"line":34944},212,[84,34946,34947],{"class":1378},"# 正式开始训练:\n",[84,34949,34951,34953,34955,34957,34959],{"class":86,"line":34950},213,[84,34952,2712],{"class":129},[84,34954,32374],{"class":94},[84,34956,4127],{"class":129},[84,34958,32379],{"class":158},[84,34960,4917],{"class":154},[84,34962,34964],{"class":86,"line":34963},214,[84,34965,34966],{"class":1378},"    # 将模型实例化\n",[84,34968,34970,34973,34975],{"class":86,"line":34969},215,[84,34971,34972],{"class":154},"    LeNet",[84,34974,867],{"class":129},[84,34976,34977],{"class":154},"LeNet()\n",[84,34979,34981,34984,34986],{"class":86,"line":34980},216,[84,34982,34983],{"class":154},"    train_dataloader,val_dataloader",[84,34985,867],{"class":129},[84,34987,34988],{"class":154},"train_val_data_process()\n",[84,34990,34992,34994,34996,34999,35002,35004,35006],{"class":86,"line":34991},217,[84,34993,34545],{"class":154},[84,34995,867],{"class":129},[84,34997,34998],{"class":154},"train_model_process(LeNet,train_dataloader,val_dataloader,",[84,35000,35001],{"class":928},"num_epochs",[84,35003,867],{"class":129},[84,35005,2008],{"class":94},[84,35007,162],{"class":154},[84,35009,35011],{"class":86,"line":35010},218,[84,35012,35013],{"class":154},"    matplot_acc_loss(train_process)\n",[19,35015,35016],{},"画图的补充点学习：",[19,35018,35019],{},[2643,35020],{"alt":66,"src":35021},"\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",[26,35023,35024],{"start":106},[29,35025,35026],{},"测试",[60,35028,35030],{"className":121,"code":35029,"language":91,"meta":66,"style":66},"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",[39,35031,35032,35038,35048,35060,35070,35075,35085,35095,35099,35104,35113,35130,35142,35159,35170,35186,35191,35202,35213,35224,35231,35235,35240,35250,35255,35272,35280,35284,35289,35298,35307,35311,35316,35321,35326,35333,35338,35350,35360,35370,35375,35379,35384,35393,35398,35414,35419,35424,35429,35443,35448,35462,35466,35471,35486,35491,35503,35507,35512,35524,35529,35537,35542,35547,35557,35562,35571,35576,35581,35585,35590,35595,35611,35619,35624,35629,35688,35694,35699,35710,35718,35726,35730,35735,35739,35744,35752,35757,35773,35778,35788,35798],{"__ignoreMap":66},[84,35033,35034,35036],{"class":86,"line":87},[84,35035,31547],{"class":129},[84,35037,31550],{"class":154},[84,35039,35040,35042,35044,35046],{"class":86,"line":98},[84,35041,31547],{"class":129},[84,35043,32568],{"class":154},[84,35045,1157],{"class":129},[84,35047,32573],{"class":154},[84,35049,35050,35052,35055,35057],{"class":86,"line":106},[84,35051,31891],{"class":129},[84,35053,35054],{"class":154}," jupyter_client.consoleapp ",[84,35056,31547],{"class":129},[84,35058,35059],{"class":154}," classes\n",[84,35061,35062,35064,35066,35068],{"class":86,"line":112},[84,35063,31891],{"class":129},[84,35065,32551],{"class":154},[84,35067,31547],{"class":129},[84,35069,32556],{"class":154},[84,35071,35072],{"class":86,"line":425},[84,35073,35074],{"class":1378},"# 导入数据集\n",[84,35076,35077,35079,35081,35083],{"class":86,"line":2395},[84,35078,31891],{"class":129},[84,35080,32522],{"class":154},[84,35082,31547],{"class":129},[84,35084,32527],{"class":154},[84,35086,35087,35089,35091,35093],{"class":86,"line":2401},[84,35088,31891],{"class":129},[84,35090,33067],{"class":154},[84,35092,31547],{"class":129},[84,35094,33072],{"class":154},[84,35096,35097],{"class":86,"line":2492},[84,35098,3578],{"emptyLinePlaceholder":1252},[84,35100,35101],{"class":86,"line":2498},[84,35102,35103],{"class":1378},"# 测试数据处理\n",[84,35105,35106,35108,35111],{"class":86,"line":2510},[84,35107,33100],{"class":129},[84,35109,35110],{"class":90}," test_data_process",[84,35112,33106],{"class":154},[84,35114,35115,35118,35120,35122,35124,35126,35128],{"class":86,"line":2793},[84,35116,35117],{"class":154},"    test_data",[84,35119,867],{"class":129},[84,35121,32608],{"class":154},[84,35123,32611],{"class":928},[84,35125,867],{"class":129},[84,35127,32616],{"class":158},[84,35129,32619],{"class":154},[84,35131,35132,35135,35137,35140],{"class":86,"line":2798},[84,35133,35134],{"class":928},"                           train",[84,35136,867],{"class":129},[84,35138,35139],{"class":94},"False",[84,35141,32619],{"class":154},[84,35143,35144,35147,35149,35151,35153,35155,35157],{"class":86,"line":2804},[84,35145,35146],{"class":928},"                           transform",[84,35148,867],{"class":129},[84,35150,32646],{"class":154},[84,35152,32649],{"class":928},[84,35154,867],{"class":129},[84,35156,2209],{"class":94},[84,35158,32657],{"class":154},[84,35160,35161,35164,35166,35168],{"class":86,"line":2809},[84,35162,35163],{"class":928},"                           download",[84,35165,867],{"class":129},[84,35167,32629],{"class":94},[84,35169,162],{"class":154},[84,35171,35172,35175,35177,35179,35181,35183],{"class":86,"line":2823},[84,35173,35174],{"class":154},"    test_dataloader",[84,35176,867],{"class":129},[84,35178,32687],{"class":154},[84,35180,32690],{"class":928},[84,35182,867],{"class":129},[84,35184,35185],{"class":154},"test_data,\n",[84,35187,35188],{"class":86,"line":2828},[84,35189,35190],{"class":1378},"                                    # 这里是一张一张进行测试\n",[84,35192,35193,35196,35198,35200],{"class":86,"line":2834},[84,35194,35195],{"class":928},"                                    batch_size",[84,35197,867],{"class":129},[84,35199,1529],{"class":94},[84,35201,32619],{"class":154},[84,35203,35204,35207,35209,35211],{"class":86,"line":2855},[84,35205,35206],{"class":928},"                                    shuffle",[84,35208,867],{"class":129},[84,35210,32629],{"class":94},[84,35212,32619],{"class":154},[84,35214,35215,35218,35220,35222],{"class":86,"line":2860},[84,35216,35217],{"class":928},"                                    num_workers",[84,35219,867],{"class":129},[84,35221,1504],{"class":94},[84,35223,162],{"class":154},[84,35225,35226,35228],{"class":86,"line":2874},[84,35227,5268],{"class":129},[84,35229,35230],{"class":154}," test_dataloader\n",[84,35232,35233],{"class":86,"line":2879},[84,35234,3578],{"emptyLinePlaceholder":1252},[84,35236,35237],{"class":86,"line":2908},[84,35238,35239],{"class":1378},"# 定义模型测试函数\n",[84,35241,35242,35244,35247],{"class":86,"line":2913},[84,35243,33100],{"class":129},[84,35245,35246],{"class":90}," test_model_process",[84,35248,35249],{"class":154},"(model,test_dataloader):\n",[84,35251,35252],{"class":86,"line":2930},[84,35253,35254],{"class":1378},"    # 将模型放到设备当中，先进行判断\n",[84,35256,35257,35259,35261,35263,35265,35267,35269],{"class":86,"line":2935},[84,35258,32391],{"class":154},[84,35260,867],{"class":129},[84,35262,32398],{"class":158},[84,35264,2885],{"class":129},[84,35266,32403],{"class":154},[84,35268,2882],{"class":129},[84,35270,35271],{"class":158}," \"cpu\"\n",[84,35273,35274,35276,35278],{"class":86,"line":2940},[84,35275,32443],{"class":154},[84,35277,867],{"class":129},[84,35279,33442],{"class":154},[84,35281,35282],{"class":86,"line":2945},[84,35283,3578],{"emptyLinePlaceholder":1252},[84,35285,35286],{"class":86,"line":2959},[84,35287,35288],{"class":1378},"    # 设置初始化参数\n",[84,35290,35291,35294,35296],{"class":86,"line":2964},[84,35292,35293],{"class":154},"    test_corrects",[84,35295,867],{"class":129},[84,35297,33495],{"class":94},[84,35299,35300,35303,35305],{"class":86,"line":3755},[84,35301,35302],{"class":154},"    test_num",[84,35304,867],{"class":129},[84,35306,4263],{"class":94},[84,35308,35309],{"class":86,"line":3769},[84,35310,3578],{"emptyLinePlaceholder":1252},[84,35312,35313],{"class":86,"line":3777},[84,35314,35315],{"class":1378},"    # 进行模型测试\n",[84,35317,35318],{"class":86,"line":3782},[84,35319,35320],{"class":1378},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[84,35322,35323],{"class":86,"line":3788},[84,35324,35325],{"class":1378},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[84,35327,35328,35331],{"class":86,"line":3794},[84,35329,35330],{"class":129},"    with",[84,35332,34036],{"class":154},[84,35334,35335],{"class":86,"line":3799},[84,35336,35337],{"class":1378},"        # 从数据中进行\n",[84,35339,35340,35342,35345,35347],{"class":86,"line":9120},[84,35341,4581],{"class":129},[84,35343,35344],{"class":154}," test_data_x,test_data_y ",[84,35346,27206],{"class":129},[84,35348,35349],{"class":154}," test_dataloader:\n",[84,35351,35352,35355,35357],{"class":86,"line":9144},[84,35353,35354],{"class":154},"            test_data_x",[84,35356,867],{"class":129},[84,35358,35359],{"class":154},"test_data_x.to(device)\n",[84,35361,35362,35365,35367],{"class":86,"line":9149},[84,35363,35364],{"class":154},"            test_data_y",[84,35366,867],{"class":129},[84,35368,35369],{"class":154},"test_data_y.to(device)\n",[84,35371,35372],{"class":86,"line":9155},[84,35373,35374],{"class":1378},"            # 设置为验证模式\n",[84,35376,35377],{"class":86,"line":9182},[84,35378,34027],{"class":154},[84,35380,35381],{"class":86,"line":9187},[84,35382,35383],{"class":1378},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[84,35385,35386,35388,35390],{"class":86,"line":9193},[84,35387,33812],{"class":154},[84,35389,867],{"class":129},[84,35391,35392],{"class":154},"model(test_data_x)\n",[84,35394,35395],{"class":86,"line":9205},[84,35396,35397],{"class":1378},"            # 查找每一行中最大值对应的下标\n",[84,35399,35400,35402,35404,35406,35408,35410,35412],{"class":86,"line":9217},[84,35401,33829],{"class":154},[84,35403,867],{"class":129},[84,35405,33834],{"class":154},[84,35407,33837],{"class":928},[84,35409,867],{"class":129},[84,35411,1529],{"class":94},[84,35413,162],{"class":154},[84,35415,35416],{"class":86,"line":9229},[84,35417,35418],{"class":1378},"            # 计算正确率\n",[84,35420,35421],{"class":86,"line":10888},[84,35422,35423],{"class":1378},"            # .data表示是一个不带梯度信息的tensor\n",[84,35425,35426],{"class":86,"line":10913},[84,35427,35428],{"class":1378},"            # 如果预测正确，则准确度test_corrects加1\n",[84,35430,35431,35434,35436,35438,35440],{"class":86,"line":10936},[84,35432,35433],{"class":154},"            test_corrects",[84,35435,10649],{"class":129},[84,35437,33939],{"class":154},[84,35439,4127],{"class":129},[84,35441,35442],{"class":154},"test_data_y.data)\n",[84,35444,35445],{"class":86,"line":10960},[84,35446,35447],{"class":1378},"            # 将所有的测试样本进行累计\n",[84,35449,35450,35453,35455,35458,35460],{"class":86,"line":10965},[84,35451,35452],{"class":154},"            test_num",[84,35454,10649],{"class":129},[84,35456,35457],{"class":154},"test_data_x.size(",[84,35459,1504],{"class":94},[84,35461,162],{"class":154},[84,35463,35464],{"class":86,"line":10970},[84,35465,3578],{"emptyLinePlaceholder":1252},[84,35467,35468],{"class":86,"line":10975},[84,35469,35470],{"class":1378},"        # 计算准确度\n",[84,35472,35473,35476,35478,35481,35483],{"class":86,"line":10984},[84,35474,35475],{"class":154},"        test_acc",[84,35477,867],{"class":129},[84,35479,35480],{"class":154},"test_corrects.double().item()",[84,35482,1893],{"class":129},[84,35484,35485],{"class":154},"test_num\n",[84,35487,35488],{"class":86,"line":10989},[84,35489,35490],{"class":1378},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[84,35492,35493,35495,35497,35500],{"class":86,"line":10995},[84,35494,33604],{"class":94},[84,35496,155],{"class":154},[84,35498,35499],{"class":158},"\"测试的准确率：\"",[84,35501,35502],{"class":154},",test_acc)\n",[84,35504,35505],{"class":86,"line":11016},[84,35506,3578],{"emptyLinePlaceholder":1252},[84,35508,35509],{"class":86,"line":11022},[84,35510,35511],{"class":1378},"# 实现模型的测试功能\n",[84,35513,35514,35516,35518,35520,35522],{"class":86,"line":11036},[84,35515,2712],{"class":129},[84,35517,32374],{"class":94},[84,35519,4127],{"class":129},[84,35521,32379],{"class":158},[84,35523,4917],{"class":154},[84,35525,35526],{"class":86,"line":11042},[84,35527,35528],{"class":1378},"    # 加载模型\n",[84,35530,35531,35533,35535],{"class":86,"line":11069},[84,35532,32443],{"class":154},[84,35534,867],{"class":129},[84,35536,34977],{"class":154},[84,35538,35539],{"class":86,"line":11078},[84,35540,35541],{"class":1378},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[84,35543,35544],{"class":86,"line":11084},[84,35545,35546],{"class":1378},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[84,35548,35549,35552,35555],{"class":86,"line":11092},[84,35550,35551],{"class":154},"    model.load_state_dict(torch.load(",[84,35553,35554],{"class":158},"'best_model.pth'",[84,35556,31651],{"class":154},[84,35558,35559],{"class":86,"line":11097},[84,35560,35561],{"class":1378},"    # 数据加载\n",[84,35563,35564,35566,35568],{"class":86,"line":17774},[84,35565,35174],{"class":154},[84,35567,867],{"class":129},[84,35569,35570],{"class":154},"test_data_process()\n",[84,35572,35573],{"class":86,"line":17780},[84,35574,35575],{"class":1378},"    # 加载模型测试的函数\n",[84,35577,35578],{"class":86,"line":17803},[84,35579,35580],{"class":154},"    test_model_process(model,test_dataloader)\n",[84,35582,35583],{"class":86,"line":17809},[84,35584,3578],{"emptyLinePlaceholder":1252},[84,35586,35587],{"class":86,"line":17832},[84,35588,35589],{"class":1378},"    # 验证集推理实现：\n",[84,35591,35592],{"class":86,"line":17846},[84,35593,35594],{"class":1378},"    # 加载数据加载的更详细一些\n",[84,35596,35597,35599,35601,35603,35605,35607,35609],{"class":86,"line":17866},[84,35598,32391],{"class":154},[84,35600,867],{"class":129},[84,35602,32398],{"class":158},[84,35604,2885],{"class":129},[84,35606,32403],{"class":154},[84,35608,2882],{"class":129},[84,35610,35271],{"class":158},[84,35612,35613,35615,35617],{"class":86,"line":17872},[84,35614,32443],{"class":154},[84,35616,867],{"class":129},[84,35618,33442],{"class":154},[84,35620,35621],{"class":86,"line":17883},[84,35622,35623],{"class":1378},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[84,35625,35626],{"class":86,"line":17906},[84,35627,35628],{"class":1378},"    # 顺序不可改变\n",[84,35630,35631,35634,35636,35638,35641,35643,35646,35648,35651,35653,35656,35658,35661,35663,35666,35668,35671,35673,35676,35678,35681,35683,35686],{"class":86,"line":17928},[84,35632,35633],{"class":154},"    classes",[84,35635,867],{"class":129},[84,35637,2198],{"class":154},[84,35639,35640],{"class":158},"'T-shirt\u002Ftop'",[84,35642,1688],{"class":154},[84,35644,35645],{"class":158},"'Trouser'",[84,35647,1688],{"class":154},[84,35649,35650],{"class":158},"'Pullover'",[84,35652,1688],{"class":154},[84,35654,35655],{"class":158},"'Dress'",[84,35657,1688],{"class":154},[84,35659,35660],{"class":158},"'Coat'",[84,35662,1688],{"class":154},[84,35664,35665],{"class":158},"'Sandal'",[84,35667,1688],{"class":154},[84,35669,35670],{"class":158},"'Shirt'",[84,35672,1688],{"class":154},[84,35674,35675],{"class":158},"'Sneaker'",[84,35677,1688],{"class":154},[84,35679,35680],{"class":158},"'Bag'",[84,35682,1688],{"class":154},[84,35684,35685],{"class":158},"'Ankle boot'",[84,35687,34398],{"class":154},[84,35689,35690,35692],{"class":86,"line":17933},[84,35691,35330],{"class":129},[84,35693,34036],{"class":154},[84,35695,35696],{"class":86,"line":17939},[84,35697,35698],{"class":1378},"        # 将数据和标签都放到设备当中\n",[84,35700,35701,35703,35706,35708],{"class":86,"line":17953},[84,35702,4581],{"class":129},[84,35704,35705],{"class":154}," b_x,b_y ",[84,35707,27206],{"class":129},[84,35709,35349],{"class":154},[84,35711,35712,35714,35716],{"class":86,"line":17966},[84,35713,33762],{"class":154},[84,35715,867],{"class":129},[84,35717,33767],{"class":154},[84,35719,35720,35722,35724],{"class":86,"line":17971},[84,35721,33777],{"class":154},[84,35723,867],{"class":129},[84,35725,33782],{"class":154},[84,35727,35728],{"class":86,"line":17985},[84,35729,3578],{"emptyLinePlaceholder":1252},[84,35731,35732],{"class":86,"line":17990},[84,35733,35734],{"class":1378},"            # 设置模型为验证模式\n",[84,35736,35737],{"class":86,"line":17996},[84,35738,34027],{"class":154},[84,35740,35741],{"class":86,"line":18001},[84,35742,35743],{"class":1378},"            # 模型推理结果\n",[84,35745,35746,35748,35750],{"class":86,"line":18015},[84,35747,33812],{"class":154},[84,35749,867],{"class":129},[84,35751,33817],{"class":154},[84,35753,35754],{"class":86,"line":18020},[84,35755,35756],{"class":1378},"            # 获取最大下标，最大下标就是类别号\n",[84,35758,35759,35761,35763,35765,35767,35769,35771],{"class":86,"line":18025},[84,35760,33829],{"class":154},[84,35762,867],{"class":129},[84,35764,33834],{"class":154},[84,35766,33837],{"class":928},[84,35768,867],{"class":129},[84,35770,1529],{"class":94},[84,35772,162],{"class":154},[84,35774,35775],{"class":86,"line":18039},[84,35776,35777],{"class":1378},"            # 取出张量中的数值\n",[84,35779,35780,35783,35785],{"class":86,"line":18051},[84,35781,35782],{"class":154},"            result",[84,35784,867],{"class":129},[84,35786,35787],{"class":154},"pre_lab.item()\n",[84,35789,35790,35793,35795],{"class":86,"line":18056},[84,35791,35792],{"class":154},"            label",[84,35794,867],{"class":129},[84,35796,35797],{"class":154},"b_y.item()\n",[84,35799,35800,35803,35805,35808,35811,35814,35816,35819],{"class":86,"line":18069},[84,35801,35802],{"class":94},"            print",[84,35804,155],{"class":154},[84,35806,35807],{"class":158},"\"预测值：\"",[84,35809,35810],{"class":154},",classes[result],",[84,35812,35813],{"class":158},"\"------\"",[84,35815,1688],{"class":154},[84,35817,35818],{"class":158},"\"真实值：\"",[84,35820,35821],{"class":154},",classes[label])\n",[19,35823,35824],{},"（2）AlexNet",[26,35826,35827],{},[29,35828,35829],{},"神经网络构建",[60,35831,35833],{"className":121,"code":35832,"language":91,"meta":66,"style":66},"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",[39,35834,35835,35841,35851,35861,35873,35877,35894,35902,35917,35929,35971,35998,36041,36067,36111,36154,36197,36224,36228,36238,36243,36271,36290,36309,36313,36318,36326,36341,36351,36365,36375,36390,36405,36420,36431,36435,36440,36450,36465,36470,36484,36499,36511,36516,36527,36532,36538,36543,36555,36575,36580,36589],{"__ignoreMap":66},[84,35836,35837,35839],{"class":86,"line":87},[84,35838,31547],{"class":129},[84,35840,31550],{"class":154},[84,35842,35843,35845,35847,35849],{"class":86,"line":98},[84,35844,31891],{"class":129},[84,35846,31894],{"class":154},[84,35848,31547],{"class":129},[84,35850,31899],{"class":154},[84,35852,35853,35855,35857,35859],{"class":86,"line":106},[84,35854,31891],{"class":129},[84,35856,31911],{"class":154},[84,35858,31547],{"class":129},[84,35860,31916],{"class":154},[84,35862,35863,35865,35868,35870],{"class":86,"line":112},[84,35864,31547],{"class":129},[84,35866,35867],{"class":154}," torch.nn.functional ",[84,35869,1157],{"class":129},[84,35871,35872],{"class":154}," F\n",[84,35874,35875],{"class":86,"line":425},[84,35876,3578],{"emptyLinePlaceholder":1252},[84,35878,35879,35881,35884,35886,35888,35890,35892],{"class":86,"line":2395},[84,35880,15864],{"class":129},[84,35882,35883],{"class":90}," AlexNet",[84,35885,155],{"class":154},[84,35887,31932],{"class":90},[84,35889,1867],{"class":154},[84,35891,31937],{"class":90},[84,35893,31940],{"class":154},[84,35895,35896,35898,35900],{"class":86,"line":2401},[84,35897,31955],{"class":129},[84,35899,31958],{"class":94},[84,35901,31961],{"class":154},[84,35903,35904,35906,35909,35911,35913,35915],{"class":86,"line":2492},[84,35905,31971],{"class":94},[84,35907,35908],{"class":154},"(AlexNet,",[84,35910,31977],{"class":94},[84,35912,31980],{"class":154},[84,35914,31983],{"class":94},[84,35916,183],{"class":154},[84,35918,35919,35921,35924,35926],{"class":86,"line":2498},[84,35920,31999],{"class":94},[84,35922,35923],{"class":154},".ReLu",[84,35925,867],{"class":129},[84,35927,35928],{"class":154},"nn.ReLU()\n",[84,35930,35931,35933,35935,35937,35939,35941,35943,35945,35947,35949,35951,35953,35955,35957,35959,35961,35963,35965,35967,35969],{"class":86,"line":2510},[84,35932,31999],{"class":94},[84,35934,32002],{"class":154},[84,35936,867],{"class":129},[84,35938,32007],{"class":154},[84,35940,32010],{"class":928},[84,35942,867],{"class":129},[84,35944,1529],{"class":94},[84,35946,1688],{"class":154},[84,35948,32019],{"class":928},[84,35950,867],{"class":129},[84,35952,1522],{"class":94},[84,35954,1688],{"class":154},[84,35956,32028],{"class":928},[84,35958,867],{"class":129},[84,35960,1781],{"class":94},[84,35962,1688],{"class":154},[84,35964,32083],{"class":928},[84,35966,867],{"class":129},[84,35968,1604],{"class":94},[84,35970,162],{"class":154},[84,35972,35973,35975,35977,35979,35982,35984,35986,35988,35990,35992,35994,35996],{"class":86,"line":2793},[84,35974,31999],{"class":94},[84,35976,32067],{"class":154},[84,35978,867],{"class":129},[84,35980,35981],{"class":154},"nn.MaxPool2d(",[84,35983,32028],{"class":928},[84,35985,867],{"class":129},[84,35987,1391],{"class":94},[84,35989,1688],{"class":154},[84,35991,32083],{"class":928},[84,35993,867],{"class":129},[84,35995,1397],{"class":94},[84,35997,162],{"class":154},[84,35999,36000,36002,36004,36006,36008,36010,36012,36014,36016,36018,36020,36023,36025,36027,36029,36031,36033,36035,36037,36039],{"class":86,"line":2798},[84,36001,31999],{"class":94},[84,36003,32096],{"class":154},[84,36005,867],{"class":129},[84,36007,32007],{"class":154},[84,36009,32010],{"class":928},[84,36011,867],{"class":129},[84,36013,1522],{"class":94},[84,36015,1688],{"class":154},[84,36017,32019],{"class":928},[84,36019,867],{"class":129},[84,36021,36022],{"class":94},"256",[84,36024,1688],{"class":154},[84,36026,32028],{"class":928},[84,36028,867],{"class":129},[84,36030,1629],{"class":94},[84,36032,1688],{"class":154},[84,36034,32037],{"class":928},[84,36036,867],{"class":129},[84,36038,1397],{"class":94},[84,36040,162],{"class":154},[84,36042,36043,36045,36047,36049,36051,36053,36055,36057,36059,36061,36063,36065],{"class":86,"line":2804},[84,36044,31999],{"class":94},[84,36046,32131],{"class":154},[84,36048,867],{"class":129},[84,36050,35981],{"class":154},[84,36052,32028],{"class":928},[84,36054,867],{"class":129},[84,36056,1391],{"class":94},[84,36058,1688],{"class":154},[84,36060,32083],{"class":928},[84,36062,867],{"class":129},[84,36064,1397],{"class":94},[84,36066,162],{"class":154},[84,36068,36069,36071,36074,36076,36078,36080,36082,36084,36086,36088,36090,36093,36095,36097,36099,36101,36103,36105,36107,36109],{"class":86,"line":2809},[84,36070,31999],{"class":94},[84,36072,36073],{"class":154},".c5",[84,36075,867],{"class":129},[84,36077,32007],{"class":154},[84,36079,32010],{"class":928},[84,36081,867],{"class":129},[84,36083,36022],{"class":94},[84,36085,1688],{"class":154},[84,36087,32019],{"class":928},[84,36089,867],{"class":129},[84,36091,36092],{"class":94},"384",[84,36094,1688],{"class":154},[84,36096,32028],{"class":928},[84,36098,867],{"class":129},[84,36100,1391],{"class":94},[84,36102,1688],{"class":154},[84,36104,32037],{"class":928},[84,36106,867],{"class":129},[84,36108,1529],{"class":94},[84,36110,162],{"class":154},[84,36112,36113,36115,36118,36120,36122,36124,36126,36128,36130,36132,36134,36136,36138,36140,36142,36144,36146,36148,36150,36152],{"class":86,"line":2823},[84,36114,31999],{"class":94},[84,36116,36117],{"class":154},".c6",[84,36119,867],{"class":129},[84,36121,32007],{"class":154},[84,36123,32010],{"class":928},[84,36125,867],{"class":129},[84,36127,36092],{"class":94},[84,36129,1688],{"class":154},[84,36131,32019],{"class":928},[84,36133,867],{"class":129},[84,36135,36092],{"class":94},[84,36137,1688],{"class":154},[84,36139,32028],{"class":928},[84,36141,867],{"class":129},[84,36143,1391],{"class":94},[84,36145,1688],{"class":154},[84,36147,32037],{"class":928},[84,36149,867],{"class":129},[84,36151,1529],{"class":94},[84,36153,162],{"class":154},[84,36155,36156,36158,36161,36163,36165,36167,36169,36171,36173,36175,36177,36179,36181,36183,36185,36187,36189,36191,36193,36195],{"class":86,"line":2828},[84,36157,31999],{"class":94},[84,36159,36160],{"class":154},".c7",[84,36162,867],{"class":129},[84,36164,32007],{"class":154},[84,36166,32010],{"class":928},[84,36168,867],{"class":129},[84,36170,36092],{"class":94},[84,36172,1688],{"class":154},[84,36174,32019],{"class":928},[84,36176,867],{"class":129},[84,36178,36022],{"class":94},[84,36180,1688],{"class":154},[84,36182,32028],{"class":928},[84,36184,867],{"class":129},[84,36186,1391],{"class":94},[84,36188,1688],{"class":154},[84,36190,32037],{"class":928},[84,36192,867],{"class":129},[84,36194,1529],{"class":94},[84,36196,162],{"class":154},[84,36198,36199,36201,36204,36206,36208,36210,36212,36214,36216,36218,36220,36222],{"class":86,"line":2834},[84,36200,31999],{"class":94},[84,36202,36203],{"class":154},".s8",[84,36205,867],{"class":129},[84,36207,35981],{"class":154},[84,36209,32028],{"class":928},[84,36211,867],{"class":129},[84,36213,1391],{"class":94},[84,36215,1688],{"class":154},[84,36217,32083],{"class":928},[84,36219,867],{"class":129},[84,36221,1397],{"class":94},[84,36223,162],{"class":154},[84,36225,36226],{"class":86,"line":2855},[84,36227,32156],{"class":1378},[84,36229,36230,36232,36234,36236],{"class":86,"line":2860},[84,36231,31999],{"class":94},[84,36233,32163],{"class":154},[84,36235,867],{"class":129},[84,36237,32168],{"class":154},[84,36239,36240],{"class":86,"line":2874},[84,36241,36242],{"class":1378},"       # 定义全连接层\n",[84,36244,36245,36247,36250,36252,36254,36256,36258,36260,36262,36264,36266,36269],{"class":86,"line":2879},[84,36246,31999],{"class":94},[84,36248,36249],{"class":154},".f1",[84,36251,867],{"class":129},[84,36253,32185],{"class":154},[84,36255,1654],{"class":94},[84,36257,1043],{"class":129},[84,36259,1654],{"class":94},[84,36261,1043],{"class":129},[84,36263,36022],{"class":94},[84,36265,1688],{"class":154},[84,36267,36268],{"class":94},"4096",[84,36270,162],{"class":154},[84,36272,36273,36275,36278,36280,36282,36284,36286,36288],{"class":86,"line":2908},[84,36274,31999],{"class":94},[84,36276,36277],{"class":154},".f2",[84,36279,867],{"class":129},[84,36281,32185],{"class":154},[84,36283,36268],{"class":94},[84,36285,1688],{"class":154},[84,36287,36268],{"class":94},[84,36289,162],{"class":154},[84,36291,36292,36294,36297,36299,36301,36303,36305,36307],{"class":86,"line":2913},[84,36293,31999],{"class":94},[84,36295,36296],{"class":154},".f3",[84,36298,867],{"class":129},[84,36300,32185],{"class":154},[84,36302,36268],{"class":94},[84,36304,1688],{"class":154},[84,36306,1756],{"class":94},[84,36308,162],{"class":154},[84,36310,36311],{"class":86,"line":2930},[84,36312,3578],{"emptyLinePlaceholder":1252},[84,36314,36315],{"class":86,"line":2935},[84,36316,36317],{"class":1378},"    # 定义前向传播\n",[84,36319,36320,36322,36324],{"class":86,"line":2940},[84,36321,31955],{"class":129},[84,36323,32247],{"class":90},[84,36325,32250],{"class":154},[84,36327,36328,36330,36332,36334,36337,36339],{"class":86,"line":2945},[84,36329,32255],{"class":154},[84,36331,867],{"class":129},[84,36333,31977],{"class":94},[84,36335,36336],{"class":154},".ReLu(",[84,36338,31977],{"class":94},[84,36340,32267],{"class":154},[84,36342,36343,36345,36347,36349],{"class":86,"line":2959},[84,36344,32255],{"class":154},[84,36346,867],{"class":129},[84,36348,31977],{"class":94},[84,36350,32278],{"class":154},[84,36352,36353,36355,36357,36359,36361,36363],{"class":86,"line":2964},[84,36354,32255],{"class":154},[84,36356,867],{"class":129},[84,36358,31977],{"class":94},[84,36360,36336],{"class":154},[84,36362,31977],{"class":94},[84,36364,32293],{"class":154},[84,36366,36367,36369,36371,36373],{"class":86,"line":3755},[84,36368,32255],{"class":154},[84,36370,867],{"class":129},[84,36372,31977],{"class":94},[84,36374,32304],{"class":154},[84,36376,36377,36379,36381,36383,36385,36387],{"class":86,"line":3769},[84,36378,32255],{"class":154},[84,36380,867],{"class":129},[84,36382,31977],{"class":94},[84,36384,36336],{"class":154},[84,36386,31977],{"class":94},[84,36388,36389],{"class":154},".c5(x))\n",[84,36391,36392,36394,36396,36398,36400,36402],{"class":86,"line":3777},[84,36393,32255],{"class":154},[84,36395,867],{"class":129},[84,36397,31977],{"class":94},[84,36399,36336],{"class":154},[84,36401,31977],{"class":94},[84,36403,36404],{"class":154},".c6(x))\n",[84,36406,36407,36409,36411,36413,36415,36417],{"class":86,"line":3782},[84,36408,32255],{"class":154},[84,36410,867],{"class":129},[84,36412,31977],{"class":94},[84,36414,36336],{"class":154},[84,36416,31977],{"class":94},[84,36418,36419],{"class":154},".c7(x))\n",[84,36421,36422,36424,36426,36428],{"class":86,"line":3788},[84,36423,32255],{"class":154},[84,36425,867],{"class":129},[84,36427,31977],{"class":94},[84,36429,36430],{"class":154},".s8(x)\n",[84,36432,36433],{"class":86,"line":3794},[84,36434,3578],{"emptyLinePlaceholder":1252},[84,36436,36437],{"class":86,"line":3799},[84,36438,36439],{"class":1378},"        # 展平加线性全连接层\n",[84,36441,36442,36444,36446,36448],{"class":86,"line":9120},[84,36443,32255],{"class":154},[84,36445,867],{"class":129},[84,36447,31977],{"class":94},[84,36449,32315],{"class":154},[84,36451,36452,36454,36456,36458,36460,36462],{"class":86,"line":9144},[84,36453,32255],{"class":154},[84,36455,867],{"class":129},[84,36457,31977],{"class":94},[84,36459,36336],{"class":154},[84,36461,31977],{"class":94},[84,36463,36464],{"class":154},".f1(x))\n",[84,36466,36467],{"class":86,"line":9149},[84,36468,36469],{"class":1378},"        # 还需要dropout对神经元随机进行失活\n",[84,36471,36472,36474,36476,36479,36482],{"class":86,"line":9155},[84,36473,32255],{"class":154},[84,36475,867],{"class":129},[84,36477,36478],{"class":154},"F.dropout(x,",[84,36480,36481],{"class":94},"0.5",[84,36483,162],{"class":154},[84,36485,36486,36488,36490,36492,36494,36496],{"class":86,"line":9182},[84,36487,32255],{"class":154},[84,36489,867],{"class":129},[84,36491,31977],{"class":94},[84,36493,36336],{"class":154},[84,36495,31977],{"class":94},[84,36497,36498],{"class":154},".f2(x))\n",[84,36500,36501,36503,36505,36507,36509],{"class":86,"line":9187},[84,36502,32255],{"class":154},[84,36504,867],{"class":129},[84,36506,36478],{"class":154},[84,36508,36481],{"class":94},[84,36510,162],{"class":154},[84,36512,36513],{"class":86,"line":9193},[84,36514,36515],{"class":1378},"        # 直接输出\n",[84,36517,36518,36520,36522,36524],{"class":86,"line":9205},[84,36519,32255],{"class":154},[84,36521,867],{"class":129},[84,36523,31977],{"class":94},[84,36525,36526],{"class":154},".f3(x)\n",[84,36528,36529],{"class":86,"line":9217},[84,36530,36531],{"class":1378},"        # 前向传播输出\n",[84,36533,36534,36536],{"class":86,"line":9229},[84,36535,15922],{"class":129},[84,36537,32363],{"class":154},[84,36539,36540],{"class":86,"line":10888},[84,36541,36542],{"class":1378},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[84,36544,36545,36547,36549,36551,36553],{"class":86,"line":10913},[84,36546,2712],{"class":129},[84,36548,32374],{"class":94},[84,36550,4127],{"class":129},[84,36552,32379],{"class":158},[84,36554,4917],{"class":154},[84,36556,36557,36559,36561,36563,36565,36567,36569,36571,36573],{"class":86,"line":10936},[84,36558,32391],{"class":154},[84,36560,867],{"class":129},[84,36562,31605],{"class":154},[84,36564,32398],{"class":158},[84,36566,2885],{"class":129},[84,36568,32403],{"class":154},[84,36570,2882],{"class":129},[84,36572,31630],{"class":158},[84,36574,162],{"class":154},[84,36576,36577],{"class":86,"line":10960},[84,36578,36579],{"class":1378},"    # 模型实例化，然后将实例化的模型放到设备中\n",[84,36581,36582,36584,36586],{"class":86,"line":10965},[84,36583,32443],{"class":154},[84,36585,867],{"class":129},[84,36587,36588],{"class":154},"AlexNet().to(device)\n",[84,36590,36591,36593,36595,36597,36599,36602,36604,36606],{"class":86,"line":10970},[84,36592,32453],{"class":94},[84,36594,32456],{"class":154},[84,36596,1529],{"class":94},[84,36598,1688],{"class":154},[84,36600,36601],{"class":94},"227",[84,36603,1688],{"class":154},[84,36605,36601],{"class":94},[84,36607,32469],{"class":154},[26,36609,36610],{"start":98},[29,36611,32482],{},[60,36613,36615],{"className":121,"code":36614,"language":91,"meta":66,"style":66},"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",[39,36616,36617,36623,36629,36639,36645,36655,36665,36675,36685,36695,36699,36710,36720,36724,36728,36732,36740,36752,36762,36778,36788,36820,36834,36844,36854,36858,36868,36882,36892,36902,36912,36918,36922,36926,36930,36934,36938,36946,36966,36970,36974,36978,36982,36986,37002,37006,37010,37018,37022,37026,37034,37038,37042,37046,37054,37058,37062,37066,37070,37078,37082,37090,37094,37102,37106,37114,37118,37126,37130,37134,37142,37146,37150,37154,37166,37190,37204,37208,37212,37216,37224,37228,37236,37240,37248,37252,37260,37264,37272,37276,37284,37288,37300,37304,37312,37316,37324,37328,37332,37336,37340,37348,37352,37368,37372,37380,37384,37388,37392,37396,37400,37404,37408,37424,37428,37440,37444,37456,37460,37472,37476,37484,37488,37496,37500,37504,37509,37515,37519,37528,37532,37549,37553,37562,37566,37584,37597,37602,37615,37619,37623,37631,37635,37639,37647,37651,37659,37663,37671,37675,37679,37721,37763,37767,37771,37787,37791,37807,37811,37815,37823,37827,37831,37843,37881,37886,37891,37900,37904,37918,37928,37934,37940,37946,37952,37956,37960,37966,37970,37974,37982,37986,38004,38008,38012,38016,38032,38036,38040,38044,38048,38052,38072,38092,38096,38100,38104,38112,38120,38124,38140,38160,38180,38184,38188,38196,38204,38208,38212,38216,38228,38232,38242,38250,38267],{"__ignoreMap":66},[84,36618,36619,36621],{"class":86,"line":87},[84,36620,31547],{"class":129},[84,36622,32975],{"class":154},[84,36624,36625,36627],{"class":86,"line":98},[84,36626,31547],{"class":129},[84,36628,32982],{"class":154},[84,36630,36631,36633,36635,36637],{"class":86,"line":106},[84,36632,31547],{"class":129},[84,36634,32993],{"class":154},[84,36636,1157],{"class":129},[84,36638,32998],{"class":154},[84,36640,36641,36643],{"class":86,"line":112},[84,36642,31547],{"class":129},[84,36644,31550],{"class":154},[84,36646,36647,36649,36651,36653],{"class":86,"line":425},[84,36648,31891],{"class":129},[84,36650,32568],{"class":154},[84,36652,31547],{"class":129},[84,36654,33015],{"class":154},[84,36656,36657,36659,36661,36663],{"class":86,"line":2395},[84,36658,31891],{"class":129},[84,36660,32522],{"class":154},[84,36662,31547],{"class":129},[84,36664,32527],{"class":154},[84,36666,36667,36669,36671,36673],{"class":86,"line":2401},[84,36668,31891],{"class":129},[84,36670,32551],{"class":154},[84,36672,31547],{"class":129},[84,36674,32556],{"class":154},[84,36676,36677,36679,36681,36683],{"class":86,"line":2492},[84,36678,31547],{"class":129},[84,36680,32568],{"class":154},[84,36682,1157],{"class":129},[84,36684,32573],{"class":154},[84,36686,36687,36689,36691,36693],{"class":86,"line":2498},[84,36688,31547],{"class":129},[84,36690,32585],{"class":154},[84,36692,1157],{"class":129},[84,36694,32590],{"class":154},[84,36696,36697],{"class":86,"line":2510},[84,36698,33060],{"class":1378},[84,36700,36701,36703,36705,36707],{"class":86,"line":2793},[84,36702,31891],{"class":129},[84,36704,33067],{"class":154},[84,36706,31547],{"class":129},[84,36708,36709],{"class":154}," AlexNet\n",[84,36711,36712,36714,36716,36718],{"class":86,"line":2798},[84,36713,31891],{"class":129},[84,36715,31894],{"class":154},[84,36717,31547],{"class":129},[84,36719,31899],{"class":154},[84,36721,36722],{"class":86,"line":2804},[84,36723,3578],{"emptyLinePlaceholder":1252},[84,36725,36726],{"class":86,"line":2809},[84,36727,3578],{"emptyLinePlaceholder":1252},[84,36729,36730],{"class":86,"line":2823},[84,36731,33095],{"class":1378},[84,36733,36734,36736,36738],{"class":86,"line":2828},[84,36735,33100],{"class":129},[84,36737,33103],{"class":90},[84,36739,33106],{"class":154},[84,36741,36742,36744,36746,36748,36750],{"class":86,"line":2834},[84,36743,33111],{"class":154},[84,36745,867],{"class":129},[84,36747,32608],{"class":154},[84,36749,32616],{"class":158},[84,36751,32619],{"class":154},[84,36753,36754,36756,36758,36760],{"class":86,"line":2855},[84,36755,33124],{"class":928},[84,36757,867],{"class":129},[84,36759,32629],{"class":94},[84,36761,32619],{"class":154},[84,36763,36764,36766,36768,36770,36772,36774,36776],{"class":86,"line":2860},[84,36765,33135],{"class":928},[84,36767,867],{"class":129},[84,36769,32646],{"class":154},[84,36771,32649],{"class":928},[84,36773,867],{"class":129},[84,36775,36601],{"class":94},[84,36777,32657],{"class":154},[84,36779,36780,36782,36784,36786],{"class":86,"line":2874},[84,36781,33152],{"class":928},[84,36783,867],{"class":129},[84,36785,32629],{"class":94},[84,36787,162],{"class":154},[84,36789,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808,36810,36812,36814,36816,36818],{"class":86,"line":2879},[84,36791,33163],{"class":154},[84,36793,867],{"class":129},[84,36795,33168],{"class":154},[84,36797,33171],{"class":94},[84,36799,155],{"class":154},[84,36801,33176],{"class":94},[84,36803,1043],{"class":129},[84,36805,8530],{"class":94},[84,36807,33183],{"class":154},[84,36809,33171],{"class":94},[84,36811,155],{"class":154},[84,36813,33190],{"class":94},[84,36815,1043],{"class":129},[84,36817,8530],{"class":94},[84,36819,33197],{"class":154},[84,36821,36822,36824,36826,36828,36830,36832],{"class":86,"line":2908},[84,36823,33202],{"class":154},[84,36825,867],{"class":129},[84,36827,33207],{"class":154},[84,36829,32690],{"class":928},[84,36831,867],{"class":129},[84,36833,32695],{"class":154},[84,36835,36836,36838,36840,36842],{"class":86,"line":2913},[84,36837,33218],{"class":928},[84,36839,867],{"class":129},[84,36841,33223],{"class":94},[84,36843,32619],{"class":154},[84,36845,36846,36848,36850,36852],{"class":86,"line":2930},[84,36847,33230],{"class":928},[84,36849,867],{"class":129},[84,36851,32629],{"class":94},[84,36853,32619],{"class":154},[84,36855,36856],{"class":86,"line":2935},[84,36857,33241],{"class":1378},[84,36859,36860,36862,36864,36866],{"class":86,"line":2940},[84,36861,33246],{"class":928},[84,36863,867],{"class":129},[84,36865,1705],{"class":94},[84,36867,162],{"class":154},[84,36869,36870,36872,36874,36876,36878,36880],{"class":86,"line":2945},[84,36871,33257],{"class":154},[84,36873,867],{"class":129},[84,36875,32687],{"class":154},[84,36877,32690],{"class":928},[84,36879,867],{"class":129},[84,36881,33268],{"class":154},[84,36883,36884,36886,36888,36890],{"class":86,"line":2959},[84,36885,33273],{"class":928},[84,36887,867],{"class":129},[84,36889,33223],{"class":94},[84,36891,32619],{"class":154},[84,36893,36894,36896,36898,36900],{"class":86,"line":2964},[84,36895,33284],{"class":928},[84,36897,867],{"class":129},[84,36899,32629],{"class":94},[84,36901,32619],{"class":154},[84,36903,36904,36906,36908,36910],{"class":86,"line":3755},[84,36905,33295],{"class":928},[84,36907,867],{"class":129},[84,36909,1705],{"class":94},[84,36911,162],{"class":154},[84,36913,36914,36916],{"class":86,"line":3769},[84,36915,5268],{"class":129},[84,36917,33308],{"class":154},[84,36919,36920],{"class":86,"line":3777},[84,36921,3578],{"emptyLinePlaceholder":1252},[84,36923,36924],{"class":86,"line":3782},[84,36925,33317],{"class":1378},[84,36927,36928],{"class":86,"line":3788},[84,36929,33322],{"class":1378},[84,36931,36932],{"class":86,"line":3794},[84,36933,3578],{"emptyLinePlaceholder":1252},[84,36935,36936],{"class":86,"line":3799},[84,36937,33331],{"class":1378},[84,36939,36940,36942,36944],{"class":86,"line":9120},[84,36941,33100],{"class":129},[84,36943,33338],{"class":90},[84,36945,33341],{"class":154},[84,36947,36948,36950,36952,36954,36956,36958,36960,36962,36964],{"class":86,"line":9144},[84,36949,32391],{"class":154},[84,36951,867],{"class":129},[84,36953,31605],{"class":154},[84,36955,32398],{"class":158},[84,36957,2885],{"class":129},[84,36959,32403],{"class":154},[84,36961,2882],{"class":129},[84,36963,33360],{"class":158},[84,36965,162],{"class":154},[84,36967,36968],{"class":86,"line":9149},[84,36969,3578],{"emptyLinePlaceholder":1252},[84,36971,36972],{"class":86,"line":9155},[84,36973,3578],{"emptyLinePlaceholder":1252},[84,36975,36976],{"class":86,"line":9182},[84,36977,33375],{"class":1378},[84,36979,36980],{"class":86,"line":9187},[84,36981,33380],{"class":1378},[84,36983,36984],{"class":86,"line":9193},[84,36985,33385],{"class":1378},[84,36987,36988,36990,36992,36994,36996,36998,37000],{"class":86,"line":9205},[84,36989,33390],{"class":154},[84,36991,867],{"class":129},[84,36993,33395],{"class":154},[84,36995,33398],{"class":928},[84,36997,867],{"class":129},[84,36999,33403],{"class":94},[84,37001,162],{"class":154},[84,37003,37004],{"class":86,"line":9217},[84,37005,3578],{"emptyLinePlaceholder":1252},[84,37007,37008],{"class":86,"line":9229},[84,37009,33414],{"class":1378},[84,37011,37012,37014,37016],{"class":86,"line":10888},[84,37013,33419],{"class":154},[84,37015,867],{"class":129},[84,37017,33424],{"class":154},[84,37019,37020],{"class":86,"line":10913},[84,37021,3578],{"emptyLinePlaceholder":1252},[84,37023,37024],{"class":86,"line":10936},[84,37025,33433],{"class":1378},[84,37027,37028,37030,37032],{"class":86,"line":10960},[84,37029,32443],{"class":154},[84,37031,867],{"class":129},[84,37033,33442],{"class":154},[84,37035,37036],{"class":86,"line":10965},[84,37037,33447],{"class":1378},[84,37039,37040],{"class":86,"line":10970},[84,37041,33452],{"class":1378},[84,37043,37044],{"class":86,"line":10975},[84,37045,33457],{"class":1378},[84,37047,37048,37050,37052],{"class":86,"line":10984},[84,37049,33462],{"class":154},[84,37051,867],{"class":129},[84,37053,33467],{"class":154},[84,37055,37056],{"class":86,"line":10989},[84,37057,3578],{"emptyLinePlaceholder":1252},[84,37059,37060],{"class":86,"line":10995},[84,37061,3578],{"emptyLinePlaceholder":1252},[84,37063,37064],{"class":86,"line":11016},[84,37065,33480],{"class":1378},[84,37067,37068],{"class":86,"line":11022},[84,37069,33485],{"class":1378},[84,37071,37072,37074,37076],{"class":86,"line":11036},[84,37073,33490],{"class":154},[84,37075,867],{"class":129},[84,37077,33495],{"class":94},[84,37079,37080],{"class":86,"line":11042},[84,37081,33500],{"class":1378},[84,37083,37084,37086,37088],{"class":86,"line":11069},[84,37085,33505],{"class":154},[84,37087,867],{"class":129},[84,37089,33510],{"class":154},[84,37091,37092],{"class":86,"line":11078},[84,37093,33515],{"class":1378},[84,37095,37096,37098,37100],{"class":86,"line":11084},[84,37097,33520],{"class":154},[84,37099,867],{"class":129},[84,37101,33510],{"class":154},[84,37103,37104],{"class":86,"line":11092},[84,37105,33529],{"class":1378},[84,37107,37108,37110,37112],{"class":86,"line":11097},[84,37109,33534],{"class":154},[84,37111,867],{"class":129},[84,37113,33510],{"class":154},[84,37115,37116],{"class":86,"line":17774},[84,37117,33543],{"class":1378},[84,37119,37120,37122,37124],{"class":86,"line":17780},[84,37121,33548],{"class":154},[84,37123,867],{"class":129},[84,37125,33510],{"class":154},[84,37127,37128],{"class":86,"line":17803},[84,37129,3578],{"emptyLinePlaceholder":1252},[84,37131,37132],{"class":86,"line":17809},[84,37133,33561],{"class":1378},[84,37135,37136,37138,37140],{"class":86,"line":17832},[84,37137,33566],{"class":154},[84,37139,867],{"class":129},[84,37141,33571],{"class":154},[84,37143,37144],{"class":86,"line":17846},[84,37145,3578],{"emptyLinePlaceholder":1252},[84,37147,37148],{"class":86,"line":17866},[84,37149,3578],{"emptyLinePlaceholder":1252},[84,37151,37152],{"class":86,"line":17872},[84,37153,33584],{"class":1378},[84,37155,37156,37158,37160,37162,37164],{"class":86,"line":17883},[84,37157,4379],{"class":129},[84,37159,33591],{"class":154},[84,37161,27206],{"class":129},[84,37163,33596],{"class":94},[84,37165,33599],{"class":154},[84,37167,37168,37170,37172,37174,37176,37178,37180,37182,37184,37186,37188],{"class":86,"line":17906},[84,37169,33604],{"class":94},[84,37171,155],{"class":154},[84,37173,33609],{"class":158},[84,37175,33612],{"class":94},[84,37177,1893],{"class":158},[84,37179,33612],{"class":94},[84,37181,1562],{"class":158},[84,37183,33621],{"class":154},[84,37185,1841],{"class":129},[84,37187,1529],{"class":94},[84,37189,31651],{"class":154},[84,37191,37192,37194,37196,37198,37200,37202],{"class":86,"line":17928},[84,37193,33604],{"class":94},[84,37195,155],{"class":154},[84,37197,934],{"class":158},[84,37199,1043],{"class":129},[84,37201,1756],{"class":94},[84,37203,162],{"class":154},[84,37205,37206],{"class":86,"line":17933},[84,37207,3578],{"emptyLinePlaceholder":1252},[84,37209,37210],{"class":86,"line":17939},[84,37211,33650],{"class":1378},[84,37213,37214],{"class":86,"line":17953},[84,37215,33655],{"class":1378},[84,37217,37218,37220,37222],{"class":86,"line":17966},[84,37219,33660],{"class":154},[84,37221,867],{"class":129},[84,37223,33495],{"class":94},[84,37225,37226],{"class":86,"line":17971},[84,37227,33669],{"class":1378},[84,37229,37230,37232,37234],{"class":86,"line":17985},[84,37231,33674],{"class":154},[84,37233,867],{"class":129},[84,37235,4263],{"class":94},[84,37237,37238],{"class":86,"line":17990},[84,37239,33683],{"class":1378},[84,37241,37242,37244,37246],{"class":86,"line":17996},[84,37243,33688],{"class":154},[84,37245,867],{"class":129},[84,37247,33495],{"class":94},[84,37249,37250],{"class":86,"line":18001},[84,37251,33697],{"class":1378},[84,37253,37254,37256,37258],{"class":86,"line":18015},[84,37255,33702],{"class":154},[84,37257,867],{"class":129},[84,37259,4263],{"class":94},[84,37261,37262],{"class":86,"line":18020},[84,37263,33711],{"class":1378},[84,37265,37266,37268,37270],{"class":86,"line":18025},[84,37267,33716],{"class":154},[84,37269,867],{"class":129},[84,37271,4263],{"class":94},[84,37273,37274],{"class":86,"line":18039},[84,37275,33725],{"class":1378},[84,37277,37278,37280,37282],{"class":86,"line":18051},[84,37279,33730],{"class":154},[84,37281,867],{"class":129},[84,37283,4263],{"class":94},[84,37285,37286],{"class":86,"line":18056},[84,37287,33739],{"class":1378},[84,37289,37290,37292,37294,37296,37298],{"class":86,"line":18069},[84,37291,4581],{"class":129},[84,37293,32754],{"class":154},[84,37295,27206],{"class":129},[84,37297,32759],{"class":94},[84,37299,33752],{"class":154},[84,37301,37302],{"class":86,"line":18074},[84,37303,33757],{"class":1378},[84,37305,37306,37308,37310],{"class":86,"line":18079},[84,37307,33762],{"class":154},[84,37309,867],{"class":129},[84,37311,33767],{"class":154},[84,37313,37314],{"class":86,"line":18084},[84,37315,33772],{"class":1378},[84,37317,37318,37320,37322],{"class":86,"line":18097},[84,37319,33777],{"class":154},[84,37321,867],{"class":129},[84,37323,33782],{"class":154},[84,37325,37326],{"class":86,"line":18102},[84,37327,33788],{"class":1378},[84,37329,37330],{"class":86,"line":33785},[84,37331,33794],{"class":154},[84,37333,37334],{"class":86,"line":33791},[84,37335,33800],{"class":1378},[84,37337,37338],{"class":86,"line":33797},[84,37339,33806],{"class":1378},[84,37341,37342,37344,37346],{"class":86,"line":33803},[84,37343,33812],{"class":154},[84,37345,867],{"class":129},[84,37347,33817],{"class":154},[84,37349,37350],{"class":86,"line":33809},[84,37351,33823],{"class":1378},[84,37353,37354,37356,37358,37360,37362,37364,37366],{"class":86,"line":33820},[84,37355,33829],{"class":154},[84,37357,867],{"class":129},[84,37359,33834],{"class":154},[84,37361,33837],{"class":928},[84,37363,867],{"class":129},[84,37365,1529],{"class":94},[84,37367,162],{"class":154},[84,37369,37370],{"class":86,"line":33826},[84,37371,33849],{"class":1378},[84,37373,37374,37376,37378],{"class":86,"line":33846},[84,37375,33855],{"class":154},[84,37377,867],{"class":129},[84,37379,33860],{"class":154},[84,37381,37382],{"class":86,"line":33852},[84,37383,33866],{"class":1378},[84,37385,37386],{"class":86,"line":33863},[84,37387,33872],{"class":154},[84,37389,37390],{"class":86,"line":33869},[84,37391,33878],{"class":1378},[84,37393,37394],{"class":86,"line":33875},[84,37395,33884],{"class":154},[84,37397,37398],{"class":86,"line":33881},[84,37399,33890],{"class":1378},[84,37401,37402],{"class":86,"line":33887},[84,37403,33896],{"class":154},[84,37405,37406],{"class":86,"line":33893},[84,37407,33902],{"class":1378},[84,37409,37410,37412,37414,37416,37418,37420,37422],{"class":86,"line":33899},[84,37411,33908],{"class":154},[84,37413,10649],{"class":129},[84,37415,33913],{"class":154},[84,37417,1043],{"class":129},[84,37419,33918],{"class":154},[84,37421,1504],{"class":94},[84,37423,162],{"class":154},[84,37425,37426],{"class":86,"line":33905},[84,37427,33928],{"class":1378},[84,37429,37430,37432,37434,37436,37438],{"class":86,"line":33925},[84,37431,33934],{"class":154},[84,37433,10649],{"class":129},[84,37435,33939],{"class":154},[84,37437,4127],{"class":129},[84,37439,33944],{"class":154},[84,37441,37442],{"class":86,"line":33931},[84,37443,33950],{"class":1378},[84,37445,37446,37448,37450,37452,37454],{"class":86,"line":33947},[84,37447,33956],{"class":154},[84,37449,10649],{"class":129},[84,37451,33918],{"class":154},[84,37453,1504],{"class":94},[84,37455,162],{"class":154},[84,37457,37458],{"class":86,"line":33953},[84,37459,33970],{"class":1378},[84,37461,37462,37464,37466,37468,37470],{"class":86,"line":33967},[84,37463,4581],{"class":129},[84,37465,33978],{"class":154},[84,37467,27206],{"class":129},[84,37469,32759],{"class":94},[84,37471,33985],{"class":154},[84,37473,37474],{"class":86,"line":33973},[84,37475,33991],{"class":1378},[84,37477,37478,37480,37482],{"class":86,"line":33988},[84,37479,33762],{"class":154},[84,37481,867],{"class":129},[84,37483,33767],{"class":154},[84,37485,37486],{"class":86,"line":33994},[84,37487,34006],{"class":1378},[84,37489,37490,37492,37494],{"class":86,"line":34003},[84,37491,33777],{"class":154},[84,37493,867],{"class":129},[84,37495,33782],{"class":154},[84,37497,37498],{"class":86,"line":34009},[84,37499,34021],{"class":1378},[84,37501,37502],{"class":86,"line":34018},[84,37503,34027],{"class":154},[84,37505,37506],{"class":86,"line":34024},[84,37507,37508],{"class":1378},"            # 验证时不计算梯度以节省内存\u002F计算\n",[84,37510,37511,37513],{"class":86,"line":34030},[84,37512,34033],{"class":129},[84,37514,34036],{"class":154},[84,37516,37517],{"class":86,"line":34039},[84,37518,34042],{"class":1378},[84,37520,37521,37524,37526],{"class":86,"line":34045},[84,37522,37523],{"class":154},"                output",[84,37525,867],{"class":129},[84,37527,33817],{"class":154},[84,37529,37530],{"class":86,"line":34056},[84,37531,34059],{"class":1378},[84,37533,37534,37537,37539,37541,37543,37545,37547],{"class":86,"line":34062},[84,37535,37536],{"class":154},"                pre_lab",[84,37538,867],{"class":129},[84,37540,33834],{"class":154},[84,37542,33837],{"class":928},[84,37544,867],{"class":129},[84,37546,1529],{"class":94},[84,37548,162],{"class":154},[84,37550,37551],{"class":86,"line":34081},[84,37552,34084],{"class":1378},[84,37554,37555,37558,37560],{"class":86,"line":34087},[84,37556,37557],{"class":154},"                val_batch_loss",[84,37559,867],{"class":129},[84,37561,33860],{"class":154},[84,37563,37564],{"class":86,"line":34098},[84,37565,34101],{"class":1378},[84,37567,37568,37571,37573,37576,37578,37580,37582],{"class":86,"line":34104},[84,37569,37570],{"class":154},"                val_loss",[84,37572,10649],{"class":129},[84,37574,37575],{"class":154},"val_batch_loss.item()",[84,37577,1043],{"class":129},[84,37579,33918],{"class":154},[84,37581,1504],{"class":94},[84,37583,162],{"class":154},[84,37585,37586,37589,37591,37593,37595],{"class":86,"line":34124},[84,37587,37588],{"class":154},"                val_corrects",[84,37590,10649],{"class":129},[84,37592,33939],{"class":154},[84,37594,4127],{"class":129},[84,37596,33944],{"class":154},[84,37598,37599],{"class":86,"line":34140},[84,37600,37601],{"class":1378},"            # 当前用于验证的样本数量\n",[84,37603,37604,37607,37609,37611,37613],{"class":86,"line":34146},[84,37605,37606],{"class":154},"            val_num",[84,37608,10649],{"class":129},[84,37610,33918],{"class":154},[84,37612,1504],{"class":94},[84,37614,162],{"class":154},[84,37616,37617],{"class":86,"line":34160},[84,37618,34163],{"class":1378},[84,37620,37621],{"class":86,"line":34166},[84,37622,34169],{"class":1378},[84,37624,37625,37627,37629],{"class":86,"line":34172},[84,37626,34175],{"class":154},[84,37628,1893],{"class":129},[84,37630,34180],{"class":154},[84,37632,37633],{"class":86,"line":34183},[84,37634,34186],{"class":1378},[84,37636,37637],{"class":86,"line":34189},[84,37638,34192],{"class":1378},[84,37640,37641,37643,37645],{"class":86,"line":34195},[84,37642,34198],{"class":154},[84,37644,1893],{"class":129},[84,37646,34180],{"class":154},[84,37648,37649],{"class":86,"line":34205},[84,37650,34208],{"class":1378},[84,37652,37653,37655,37657],{"class":86,"line":34211},[84,37654,34214],{"class":154},[84,37656,1893],{"class":129},[84,37658,34219],{"class":154},[84,37660,37661],{"class":86,"line":34222},[84,37662,34225],{"class":1378},[84,37664,37665,37667,37669],{"class":86,"line":34228},[84,37666,34231],{"class":154},[84,37668,1893],{"class":129},[84,37670,34219],{"class":154},[84,37672,37673],{"class":86,"line":34238},[84,37674,3578],{"emptyLinePlaceholder":1252},[84,37676,37677],{"class":86,"line":34243},[84,37678,34246],{"class":1378},[84,37680,37681,37683,37685,37687,37689,37691,37693,37695,37697,37699,37701,37703,37705,37707,37709,37711,37713,37715,37717,37719],{"class":86,"line":34249},[84,37682,33604],{"class":94},[84,37684,155],{"class":154},[84,37686,4770],{"class":158},[84,37688,33612],{"class":94},[84,37690,34260],{"class":158},[84,37692,2204],{"class":94},[84,37694,34265],{"class":129},[84,37696,2254],{"class":94},[84,37698,34270],{"class":158},[84,37700,2204],{"class":94},[84,37702,34265],{"class":129},[84,37704,2254],{"class":94},[84,37706,4770],{"class":158},[84,37708,34281],{"class":154},[84,37710,1841],{"class":129},[84,37712,1529],{"class":94},[84,37714,34288],{"class":154},[84,37716,1841],{"class":129},[84,37718,1529],{"class":94},[84,37720,34295],{"class":154},[84,37722,37723,37725,37727,37729,37731,37733,37735,37737,37739,37741,37743,37745,37747,37749,37751,37753,37755,37757,37759,37761],{"class":86,"line":34298},[84,37724,33604],{"class":94},[84,37726,155],{"class":154},[84,37728,4770],{"class":158},[84,37730,33612],{"class":94},[84,37732,34309],{"class":158},[84,37734,2204],{"class":94},[84,37736,34265],{"class":129},[84,37738,2254],{"class":94},[84,37740,34318],{"class":158},[84,37742,2204],{"class":94},[84,37744,34265],{"class":129},[84,37746,2254],{"class":94},[84,37748,4770],{"class":158},[84,37750,34329],{"class":154},[84,37752,1841],{"class":129},[84,37754,1529],{"class":94},[84,37756,34336],{"class":154},[84,37758,1841],{"class":129},[84,37760,1529],{"class":94},[84,37762,34295],{"class":154},[84,37764,37765],{"class":86,"line":34345},[84,37766,3578],{"emptyLinePlaceholder":1252},[84,37768,37769],{"class":86,"line":34350},[84,37770,34353],{"class":1378},[84,37772,37773,37775,37777,37779,37781,37783,37785],{"class":86,"line":34356},[84,37774,3675],{"class":129},[84,37776,34361],{"class":154},[84,37778,1841],{"class":129},[84,37780,1529],{"class":94},[84,37782,2248],{"class":154},[84,37784,2268],{"class":129},[84,37786,34372],{"class":154},[84,37788,37789],{"class":86,"line":34375},[84,37790,34378],{"class":1378},[84,37792,37793,37795,37797,37799,37801,37803,37805],{"class":86,"line":34381},[84,37794,34384],{"class":154},[84,37796,1362],{"class":94},[84,37798,867],{"class":129},[84,37800,34391],{"class":154},[84,37802,1841],{"class":129},[84,37804,1529],{"class":94},[84,37806,34398],{"class":154},[84,37808,37809],{"class":86,"line":34401},[84,37810,34404],{"class":1378},[84,37812,37813],{"class":86,"line":34407},[84,37814,34410],{"class":1378},[84,37816,37817,37819,37821],{"class":86,"line":34413},[84,37818,34416],{"class":154},[84,37820,867],{"class":129},[84,37822,33467],{"class":154},[84,37824,37825],{"class":86,"line":34423},[84,37826,3578],{"emptyLinePlaceholder":1252},[84,37828,37829],{"class":86,"line":34428},[84,37830,34431],{"class":1378},[84,37832,37833,37835,37837,37839,37841],{"class":86,"line":34434},[84,37834,34437],{"class":154},[84,37836,867],{"class":129},[84,37838,34442],{"class":154},[84,37840,1841],{"class":129},[84,37842,34447],{"class":154},[84,37844,37845,37847,37849,37851,37853,37855,37857,37859,37861,37863,37865,37867,37869,37871,37873,37875,37877,37879],{"class":86,"line":34450},[84,37846,33604],{"class":94},[84,37848,155],{"class":154},[84,37850,34457],{"class":158},[84,37852,2204],{"class":94},[84,37854,34462],{"class":129},[84,37856,2254],{"class":94},[84,37858,1853],{"class":158},[84,37860,2204],{"class":94},[84,37862,34462],{"class":129},[84,37864,2254],{"class":94},[84,37866,34475],{"class":158},[84,37868,34478],{"class":154},[84,37870,34481],{"class":129},[84,37872,2215],{"class":94},[84,37874,34486],{"class":154},[84,37876,1638],{"class":129},[84,37878,2215],{"class":94},[84,37880,31651],{"class":154},[84,37882,37883],{"class":86,"line":34495},[84,37884,37885],{"class":1378},"    # 选择最优参数并保存\n",[84,37887,37888],{"class":86,"line":34501},[84,37889,37890],{"class":1378},"    # 保存最佳模型权重字典\n",[84,37892,37893,37896,37898],{"class":86,"line":34507},[84,37894,37895],{"class":154},"    torch.save(best_model_wts,",[84,37897,34519],{"class":158},[84,37899,162],{"class":154},[84,37901,37902],{"class":86,"line":34513},[84,37903,34539],{"class":1378},[84,37905,37906,37908,37910,37912,37914,37916],{"class":86,"line":34524},[84,37907,34545],{"class":154},[84,37909,867],{"class":129},[84,37911,34550],{"class":154},[84,37913,34553],{"class":928},[84,37915,867],{"class":129},[84,37917,2727],{"class":154},[84,37919,37920,37922,37924,37926],{"class":86,"line":34530},[84,37921,34563],{"class":158},[84,37923,2167],{"class":154},[84,37925,34568],{"class":94},[84,37927,34571],{"class":154},[84,37929,37930,37932],{"class":86,"line":34536},[84,37931,34577],{"class":158},[84,37933,34580],{"class":154},[84,37935,37936,37938],{"class":86,"line":34542},[84,37937,34586],{"class":158},[84,37939,34589],{"class":154},[84,37941,37942,37944],{"class":86,"line":34560},[84,37943,34595],{"class":158},[84,37945,34598],{"class":154},[84,37947,37948,37950],{"class":86,"line":34574},[84,37949,34604],{"class":158},[84,37951,34607],{"class":154},[84,37953,37954],{"class":86,"line":34583},[84,37955,34613],{"class":154},[84,37957,37958],{"class":86,"line":34592},[84,37959,34619],{"class":1378},[84,37961,37962,37964],{"class":86,"line":34601},[84,37963,5268],{"class":129},[84,37965,34627],{"class":154},[84,37967,37968],{"class":86,"line":34610},[84,37969,3578],{"emptyLinePlaceholder":1252},[84,37971,37972],{"class":86,"line":34616},[84,37973,34638],{"class":1378},[84,37975,37976,37978,37980],{"class":86,"line":34622},[84,37977,33100],{"class":129},[84,37979,34646],{"class":90},[84,37981,34649],{"class":154},[84,37983,37984],{"class":86,"line":34630},[84,37985,34655],{"class":1378},[84,37987,37988,37990,37992,37994,37996,37998,38000,38002],{"class":86,"line":34635},[84,37989,34661],{"class":154},[84,37991,32846],{"class":928},[84,37993,867],{"class":129},[84,37995,155],{"class":154},[84,37997,1807],{"class":94},[84,37999,1688],{"class":154},[84,38001,1604],{"class":94},[84,38003,31651],{"class":154},[84,38005,38006],{"class":86,"line":34641},[84,38007,34681],{"class":1378},[84,38009,38010],{"class":86,"line":34652},[84,38011,34687],{"class":1378},[84,38013,38014],{"class":86,"line":34658},[84,38015,34693],{"class":1378},[84,38017,38018,38020,38022,38024,38026,38028,38030],{"class":86,"line":34678},[84,38019,32880],{"class":154},[84,38021,1529],{"class":94},[84,38023,1688],{"class":154},[84,38025,1397],{"class":94},[84,38027,1688],{"class":154},[84,38029,1529],{"class":94},[84,38031,162],{"class":154},[84,38033,38034],{"class":86,"line":34684},[84,38035,34716],{"class":1378},[84,38037,38038],{"class":86,"line":34690},[84,38039,34722],{"class":1378},[84,38041,38042],{"class":86,"line":34696},[84,38043,34728],{"class":1378},[84,38045,38046],{"class":86,"line":34713},[84,38047,34734],{"class":1378},[84,38049,38050],{"class":86,"line":34719},[84,38051,34740],{"class":1378},[84,38053,38054,38056,38058,38060,38062,38064,38066,38068,38070],{"class":86,"line":34725},[84,38055,34746],{"class":154},[84,38057,34749],{"class":158},[84,38059,34752],{"class":154},[84,38061,34755],{"class":158},[84,38063,1688],{"class":154},[84,38065,34760],{"class":928},[84,38067,867],{"class":129},[84,38069,34765],{"class":158},[84,38071,162],{"class":154},[84,38073,38074,38076,38078,38080,38082,38084,38086,38088,38090],{"class":86,"line":34731},[84,38075,34746],{"class":154},[84,38077,34749],{"class":158},[84,38079,34777],{"class":154},[84,38081,34780],{"class":158},[84,38083,1688],{"class":154},[84,38085,34760],{"class":928},[84,38087,867],{"class":129},[84,38089,34789],{"class":158},[84,38091,162],{"class":154},[84,38093,38094],{"class":86,"line":34737},[84,38095,34797],{"class":1378},[84,38097,38098],{"class":86,"line":34743},[84,38099,34803],{"class":154},[84,38101,38102],{"class":86,"line":34770},[84,38103,34809],{"class":1378},[84,38105,38106,38108,38110],{"class":86,"line":34794},[84,38107,34815],{"class":154},[84,38109,34818],{"class":158},[84,38111,162],{"class":154},[84,38113,38114,38116,38118],{"class":86,"line":34800},[84,38115,34826],{"class":154},[84,38117,34829],{"class":158},[84,38119,162],{"class":154},[84,38121,38122],{"class":86,"line":34806},[84,38123,34837],{"class":1378},[84,38125,38126,38128,38130,38132,38134,38136,38138],{"class":86,"line":34812},[84,38127,32880],{"class":154},[84,38129,1529],{"class":94},[84,38131,1688],{"class":154},[84,38133,1397],{"class":94},[84,38135,1688],{"class":154},[84,38137,1397],{"class":94},[84,38139,162],{"class":154},[84,38141,38142,38144,38146,38148,38150,38152,38154,38156,38158],{"class":86,"line":34823},[84,38143,34746],{"class":154},[84,38145,34749],{"class":158},[84,38147,34864],{"class":154},[84,38149,34755],{"class":158},[84,38151,1688],{"class":154},[84,38153,34760],{"class":928},[84,38155,867],{"class":129},[84,38157,34875],{"class":158},[84,38159,162],{"class":154},[84,38161,38162,38164,38166,38168,38170,38172,38174,38176,38178],{"class":86,"line":34834},[84,38163,34746],{"class":154},[84,38165,34749],{"class":158},[84,38167,34887],{"class":154},[84,38169,34780],{"class":158},[84,38171,1688],{"class":154},[84,38173,34760],{"class":928},[84,38175,867],{"class":129},[84,38177,34898],{"class":158},[84,38179,162],{"class":154},[84,38181,38182],{"class":86,"line":34840},[84,38183,34906],{"class":1378},[84,38185,38186],{"class":86,"line":34857},[84,38187,34803],{"class":154},[84,38189,38190,38192,38194],{"class":86,"line":34880},[84,38191,34815],{"class":154},[84,38193,34749],{"class":158},[84,38195,162],{"class":154},[84,38197,38198,38200,38202],{"class":86,"line":34903},[84,38199,34826],{"class":154},[84,38201,34928],{"class":158},[84,38203,162],{"class":154},[84,38205,38206],{"class":86,"line":34909},[84,38207,34936],{"class":154},[84,38209,38210],{"class":86,"line":34914},[84,38211,3578],{"emptyLinePlaceholder":1252},[84,38213,38214],{"class":86,"line":34923},[84,38215,34947],{"class":1378},[84,38217,38218,38220,38222,38224,38226],{"class":86,"line":34933},[84,38219,2712],{"class":129},[84,38221,32374],{"class":94},[84,38223,4127],{"class":129},[84,38225,32379],{"class":158},[84,38227,4917],{"class":154},[84,38229,38230],{"class":86,"line":34939},[84,38231,34966],{"class":1378},[84,38233,38234,38237,38239],{"class":86,"line":34944},[84,38235,38236],{"class":154},"    AlexNet",[84,38238,867],{"class":129},[84,38240,38241],{"class":154},"AlexNet()\n",[84,38243,38244,38246,38248],{"class":86,"line":34950},[84,38245,34983],{"class":154},[84,38247,867],{"class":129},[84,38249,34988],{"class":154},[84,38251,38252,38254,38256,38259,38261,38263,38265],{"class":86,"line":34963},[84,38253,34545],{"class":154},[84,38255,867],{"class":129},[84,38257,38258],{"class":154},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[84,38260,35001],{"class":928},[84,38262,867],{"class":129},[84,38264,2008],{"class":94},[84,38266,162],{"class":154},[84,38268,38269],{"class":86,"line":34969},[84,38270,35013],{"class":154},[26,38272,38273],{"start":106},[29,38274,35026],{},[60,38276,38278],{"className":121,"code":38277,"language":91,"meta":66,"style":66},"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",[39,38279,38280,38286,38296,38306,38316,38320,38330,38340,38351,38355,38359,38363,38371,38387,38397,38413,38423,38437,38441,38451,38461,38471,38477,38481,38485,38493,38497,38513,38521,38525,38529,38537,38545,38549,38553,38557,38561,38567,38571,38581,38589,38597,38601,38605,38609,38617,38621,38637,38641,38645,38649,38661,38665,38677,38681,38685,38697,38701,38711,38715,38719,38731,38735,38743,38747,38751,38759,38763,38771,38775,38779,38783,38787,38791,38807,38815,38819,38823,38871,38877,38881,38891,38899,38907,38911,38915,38919,38923,38931,38935,38951,38955,38963,38971],{"__ignoreMap":66},[84,38281,38282,38284],{"class":86,"line":87},[84,38283,31547],{"class":129},[84,38285,31550],{"class":154},[84,38287,38288,38290,38292,38294],{"class":86,"line":98},[84,38289,31547],{"class":129},[84,38291,32568],{"class":154},[84,38293,1157],{"class":129},[84,38295,32573],{"class":154},[84,38297,38298,38300,38302,38304],{"class":86,"line":106},[84,38299,31891],{"class":129},[84,38301,35054],{"class":154},[84,38303,31547],{"class":129},[84,38305,35059],{"class":154},[84,38307,38308,38310,38312,38314],{"class":86,"line":112},[84,38309,31891],{"class":129},[84,38311,32551],{"class":154},[84,38313,31547],{"class":129},[84,38315,32556],{"class":154},[84,38317,38318],{"class":86,"line":425},[84,38319,35074],{"class":1378},[84,38321,38322,38324,38326,38328],{"class":86,"line":2395},[84,38323,31891],{"class":129},[84,38325,32522],{"class":154},[84,38327,31547],{"class":129},[84,38329,32527],{"class":154},[84,38331,38332,38334,38336,38338],{"class":86,"line":2401},[84,38333,31891],{"class":129},[84,38335,33067],{"class":154},[84,38337,31547],{"class":129},[84,38339,36709],{"class":154},[84,38341,38342,38344,38347,38349],{"class":86,"line":2492},[84,38343,31891],{"class":129},[84,38345,38346],{"class":154}," 练习.AlexNet.model ",[84,38348,31547],{"class":129},[84,38350,36709],{"class":154},[84,38352,38353],{"class":86,"line":2498},[84,38354,3578],{"emptyLinePlaceholder":1252},[84,38356,38357],{"class":86,"line":2510},[84,38358,3578],{"emptyLinePlaceholder":1252},[84,38360,38361],{"class":86,"line":2793},[84,38362,35103],{"class":1378},[84,38364,38365,38367,38369],{"class":86,"line":2798},[84,38366,33100],{"class":129},[84,38368,35110],{"class":90},[84,38370,33106],{"class":154},[84,38372,38373,38375,38377,38379,38381,38383,38385],{"class":86,"line":2804},[84,38374,35117],{"class":154},[84,38376,867],{"class":129},[84,38378,32608],{"class":154},[84,38380,32611],{"class":928},[84,38382,867],{"class":129},[84,38384,32616],{"class":158},[84,38386,32619],{"class":154},[84,38388,38389,38391,38393,38395],{"class":86,"line":2809},[84,38390,35134],{"class":928},[84,38392,867],{"class":129},[84,38394,35139],{"class":94},[84,38396,32619],{"class":154},[84,38398,38399,38401,38403,38405,38407,38409,38411],{"class":86,"line":2823},[84,38400,35146],{"class":928},[84,38402,867],{"class":129},[84,38404,32646],{"class":154},[84,38406,32649],{"class":928},[84,38408,867],{"class":129},[84,38410,36601],{"class":94},[84,38412,32657],{"class":154},[84,38414,38415,38417,38419,38421],{"class":86,"line":2828},[84,38416,35163],{"class":928},[84,38418,867],{"class":129},[84,38420,32629],{"class":94},[84,38422,162],{"class":154},[84,38424,38425,38427,38429,38431,38433,38435],{"class":86,"line":2834},[84,38426,35174],{"class":154},[84,38428,867],{"class":129},[84,38430,32687],{"class":154},[84,38432,32690],{"class":928},[84,38434,867],{"class":129},[84,38436,35185],{"class":154},[84,38438,38439],{"class":86,"line":2855},[84,38440,35190],{"class":1378},[84,38442,38443,38445,38447,38449],{"class":86,"line":2860},[84,38444,35195],{"class":928},[84,38446,867],{"class":129},[84,38448,1529],{"class":94},[84,38450,32619],{"class":154},[84,38452,38453,38455,38457,38459],{"class":86,"line":2874},[84,38454,35206],{"class":928},[84,38456,867],{"class":129},[84,38458,32629],{"class":94},[84,38460,32619],{"class":154},[84,38462,38463,38465,38467,38469],{"class":86,"line":2879},[84,38464,35217],{"class":928},[84,38466,867],{"class":129},[84,38468,1504],{"class":94},[84,38470,162],{"class":154},[84,38472,38473,38475],{"class":86,"line":2908},[84,38474,5268],{"class":129},[84,38476,35230],{"class":154},[84,38478,38479],{"class":86,"line":2913},[84,38480,3578],{"emptyLinePlaceholder":1252},[84,38482,38483],{"class":86,"line":2930},[84,38484,35239],{"class":1378},[84,38486,38487,38489,38491],{"class":86,"line":2935},[84,38488,33100],{"class":129},[84,38490,35246],{"class":90},[84,38492,35249],{"class":154},[84,38494,38495],{"class":86,"line":2940},[84,38496,35254],{"class":1378},[84,38498,38499,38501,38503,38505,38507,38509,38511],{"class":86,"line":2945},[84,38500,32391],{"class":154},[84,38502,867],{"class":129},[84,38504,32398],{"class":158},[84,38506,2885],{"class":129},[84,38508,32403],{"class":154},[84,38510,2882],{"class":129},[84,38512,35271],{"class":158},[84,38514,38515,38517,38519],{"class":86,"line":2959},[84,38516,32443],{"class":154},[84,38518,867],{"class":129},[84,38520,33442],{"class":154},[84,38522,38523],{"class":86,"line":2964},[84,38524,3578],{"emptyLinePlaceholder":1252},[84,38526,38527],{"class":86,"line":3755},[84,38528,35288],{"class":1378},[84,38530,38531,38533,38535],{"class":86,"line":3769},[84,38532,35293],{"class":154},[84,38534,867],{"class":129},[84,38536,33495],{"class":94},[84,38538,38539,38541,38543],{"class":86,"line":3777},[84,38540,35302],{"class":154},[84,38542,867],{"class":129},[84,38544,4263],{"class":94},[84,38546,38547],{"class":86,"line":3782},[84,38548,3578],{"emptyLinePlaceholder":1252},[84,38550,38551],{"class":86,"line":3788},[84,38552,35315],{"class":1378},[84,38554,38555],{"class":86,"line":3794},[84,38556,35320],{"class":1378},[84,38558,38559],{"class":86,"line":3799},[84,38560,35325],{"class":1378},[84,38562,38563,38565],{"class":86,"line":9120},[84,38564,35330],{"class":129},[84,38566,34036],{"class":154},[84,38568,38569],{"class":86,"line":9144},[84,38570,35337],{"class":1378},[84,38572,38573,38575,38577,38579],{"class":86,"line":9149},[84,38574,4581],{"class":129},[84,38576,35344],{"class":154},[84,38578,27206],{"class":129},[84,38580,35349],{"class":154},[84,38582,38583,38585,38587],{"class":86,"line":9155},[84,38584,35354],{"class":154},[84,38586,867],{"class":129},[84,38588,35359],{"class":154},[84,38590,38591,38593,38595],{"class":86,"line":9182},[84,38592,35364],{"class":154},[84,38594,867],{"class":129},[84,38596,35369],{"class":154},[84,38598,38599],{"class":86,"line":9187},[84,38600,35374],{"class":1378},[84,38602,38603],{"class":86,"line":9193},[84,38604,34027],{"class":154},[84,38606,38607],{"class":86,"line":9205},[84,38608,35383],{"class":1378},[84,38610,38611,38613,38615],{"class":86,"line":9217},[84,38612,33812],{"class":154},[84,38614,867],{"class":129},[84,38616,35392],{"class":154},[84,38618,38619],{"class":86,"line":9229},[84,38620,35397],{"class":1378},[84,38622,38623,38625,38627,38629,38631,38633,38635],{"class":86,"line":10888},[84,38624,33829],{"class":154},[84,38626,867],{"class":129},[84,38628,33834],{"class":154},[84,38630,33837],{"class":928},[84,38632,867],{"class":129},[84,38634,1529],{"class":94},[84,38636,162],{"class":154},[84,38638,38639],{"class":86,"line":10913},[84,38640,35418],{"class":1378},[84,38642,38643],{"class":86,"line":10936},[84,38644,35423],{"class":1378},[84,38646,38647],{"class":86,"line":10960},[84,38648,35428],{"class":1378},[84,38650,38651,38653,38655,38657,38659],{"class":86,"line":10965},[84,38652,35433],{"class":154},[84,38654,10649],{"class":129},[84,38656,33939],{"class":154},[84,38658,4127],{"class":129},[84,38660,35442],{"class":154},[84,38662,38663],{"class":86,"line":10970},[84,38664,35447],{"class":1378},[84,38666,38667,38669,38671,38673,38675],{"class":86,"line":10975},[84,38668,35452],{"class":154},[84,38670,10649],{"class":129},[84,38672,35457],{"class":154},[84,38674,1504],{"class":94},[84,38676,162],{"class":154},[84,38678,38679],{"class":86,"line":10984},[84,38680,3578],{"emptyLinePlaceholder":1252},[84,38682,38683],{"class":86,"line":10989},[84,38684,35470],{"class":1378},[84,38686,38687,38689,38691,38693,38695],{"class":86,"line":10995},[84,38688,35475],{"class":154},[84,38690,867],{"class":129},[84,38692,35480],{"class":154},[84,38694,1893],{"class":129},[84,38696,35485],{"class":154},[84,38698,38699],{"class":86,"line":11016},[84,38700,35490],{"class":1378},[84,38702,38703,38705,38707,38709],{"class":86,"line":11022},[84,38704,33604],{"class":94},[84,38706,155],{"class":154},[84,38708,35499],{"class":158},[84,38710,35502],{"class":154},[84,38712,38713],{"class":86,"line":11036},[84,38714,3578],{"emptyLinePlaceholder":1252},[84,38716,38717],{"class":86,"line":11042},[84,38718,35511],{"class":1378},[84,38720,38721,38723,38725,38727,38729],{"class":86,"line":11069},[84,38722,2712],{"class":129},[84,38724,32374],{"class":94},[84,38726,4127],{"class":129},[84,38728,32379],{"class":158},[84,38730,4917],{"class":154},[84,38732,38733],{"class":86,"line":11078},[84,38734,35528],{"class":1378},[84,38736,38737,38739,38741],{"class":86,"line":11084},[84,38738,32443],{"class":154},[84,38740,867],{"class":129},[84,38742,38241],{"class":154},[84,38744,38745],{"class":86,"line":11092},[84,38746,35541],{"class":1378},[84,38748,38749],{"class":86,"line":11097},[84,38750,35546],{"class":1378},[84,38752,38753,38755,38757],{"class":86,"line":17774},[84,38754,35551],{"class":154},[84,38756,35554],{"class":158},[84,38758,31651],{"class":154},[84,38760,38761],{"class":86,"line":17780},[84,38762,35561],{"class":1378},[84,38764,38765,38767,38769],{"class":86,"line":17803},[84,38766,35174],{"class":154},[84,38768,867],{"class":129},[84,38770,35570],{"class":154},[84,38772,38773],{"class":86,"line":17809},[84,38774,35575],{"class":1378},[84,38776,38777],{"class":86,"line":17832},[84,38778,35580],{"class":154},[84,38780,38781],{"class":86,"line":17846},[84,38782,3578],{"emptyLinePlaceholder":1252},[84,38784,38785],{"class":86,"line":17866},[84,38786,35589],{"class":1378},[84,38788,38789],{"class":86,"line":17872},[84,38790,35594],{"class":1378},[84,38792,38793,38795,38797,38799,38801,38803,38805],{"class":86,"line":17883},[84,38794,32391],{"class":154},[84,38796,867],{"class":129},[84,38798,32398],{"class":158},[84,38800,2885],{"class":129},[84,38802,32403],{"class":154},[84,38804,2882],{"class":129},[84,38806,35271],{"class":158},[84,38808,38809,38811,38813],{"class":86,"line":17906},[84,38810,32443],{"class":154},[84,38812,867],{"class":129},[84,38814,33442],{"class":154},[84,38816,38817],{"class":86,"line":17928},[84,38818,35623],{"class":1378},[84,38820,38821],{"class":86,"line":17933},[84,38822,35628],{"class":1378},[84,38824,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869],{"class":86,"line":17939},[84,38826,35633],{"class":154},[84,38828,867],{"class":129},[84,38830,2198],{"class":154},[84,38832,35640],{"class":158},[84,38834,1688],{"class":154},[84,38836,35645],{"class":158},[84,38838,1688],{"class":154},[84,38840,35650],{"class":158},[84,38842,1688],{"class":154},[84,38844,35655],{"class":158},[84,38846,1688],{"class":154},[84,38848,35660],{"class":158},[84,38850,1688],{"class":154},[84,38852,35665],{"class":158},[84,38854,1688],{"class":154},[84,38856,35670],{"class":158},[84,38858,1688],{"class":154},[84,38860,35675],{"class":158},[84,38862,1688],{"class":154},[84,38864,35680],{"class":158},[84,38866,1688],{"class":154},[84,38868,35685],{"class":158},[84,38870,34398],{"class":154},[84,38872,38873,38875],{"class":86,"line":17953},[84,38874,35330],{"class":129},[84,38876,34036],{"class":154},[84,38878,38879],{"class":86,"line":17966},[84,38880,35698],{"class":1378},[84,38882,38883,38885,38887,38889],{"class":86,"line":17971},[84,38884,4581],{"class":129},[84,38886,35705],{"class":154},[84,38888,27206],{"class":129},[84,38890,35349],{"class":154},[84,38892,38893,38895,38897],{"class":86,"line":17985},[84,38894,33762],{"class":154},[84,38896,867],{"class":129},[84,38898,33767],{"class":154},[84,38900,38901,38903,38905],{"class":86,"line":17990},[84,38902,33777],{"class":154},[84,38904,867],{"class":129},[84,38906,33782],{"class":154},[84,38908,38909],{"class":86,"line":17996},[84,38910,3578],{"emptyLinePlaceholder":1252},[84,38912,38913],{"class":86,"line":18001},[84,38914,35734],{"class":1378},[84,38916,38917],{"class":86,"line":18015},[84,38918,34027],{"class":154},[84,38920,38921],{"class":86,"line":18020},[84,38922,35743],{"class":1378},[84,38924,38925,38927,38929],{"class":86,"line":18025},[84,38926,33812],{"class":154},[84,38928,867],{"class":129},[84,38930,33817],{"class":154},[84,38932,38933],{"class":86,"line":18039},[84,38934,35756],{"class":1378},[84,38936,38937,38939,38941,38943,38945,38947,38949],{"class":86,"line":18051},[84,38938,33829],{"class":154},[84,38940,867],{"class":129},[84,38942,33834],{"class":154},[84,38944,33837],{"class":928},[84,38946,867],{"class":129},[84,38948,1529],{"class":94},[84,38950,162],{"class":154},[84,38952,38953],{"class":86,"line":18056},[84,38954,35777],{"class":1378},[84,38956,38957,38959,38961],{"class":86,"line":18069},[84,38958,35782],{"class":154},[84,38960,867],{"class":129},[84,38962,35787],{"class":154},[84,38964,38965,38967,38969],{"class":86,"line":18074},[84,38966,35792],{"class":154},[84,38968,867],{"class":129},[84,38970,35797],{"class":154},[84,38972,38973,38975,38977,38979,38981,38983,38985,38987],{"class":86,"line":18079},[84,38974,35802],{"class":94},[84,38976,155],{"class":154},[84,38978,35807],{"class":158},[84,38980,35810],{"class":154},[84,38982,35813],{"class":158},[84,38984,1688],{"class":154},[84,38986,35818],{"class":158},[84,38988,35821],{"class":154},[198,38990,38992],{"id":38991},"_22vgg","2.2.VGG",[23168,38994,38996],{"id":38995},"_221原理","2.2.1.原理",[19,38998,38999],{},[2643,39000],{"alt":66,"src":39001},"\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,39003,39004],{},[2643,39005],{"alt":66,"src":39006},"\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,39008,39009],{},[2643,39010],{"alt":66,"src":39011},"\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,39013,39014],{},"参数详细描述：",[19,39016,39017],{},[2643,39018],{"alt":66,"src":39019},"\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,39021,39022],{},[2643,39023],{"alt":66,"src":39024},"\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,39026,39027],{},[2643,39028],{"alt":66,"src":39029},"\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,39031,39032],{},[2643,39033],{"alt":66,"src":39034},"\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,39036,39037],{},[2643,39038],{"alt":66,"src":39039},"\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",[23168,39041,39043],{"id":39042},"_222代码实现","2.2.2.代码实现",[26,39045,39046],{},[29,39047,39048],{},"网络搭建",[60,39050,39052],{"className":121,"code":39051,"language":91,"meta":66,"style":66},"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",[39,39053,39054,39060,39072,39082,39092,39096,39113,39121,39140,39145,39150,39162,39200,39205,39241,39245,39274,39279,39284,39295,39331,39335,39371,39375,39403,39407,39412,39423,39459,39463,39499,39503,39539,39543,39571,39575,39580,39591,39628,39632,39668,39672,39708,39712,39740,39744,39749,39760,39796,39800,39836,39840,39876,39880,39908,39912,39917,39928,39933,39938,39943,39964,39968,39980,39984,39996,40000,40004,40009,40014,40029,40034,40044,40049,40064,40069,40088,40093,40102,40107,40117,40122,40127,40141,40146,40160,40168,40172,40176,40184,40195,40206,40217,40228,40239,40250,40256,40260,40265,40278,40298,40304,40313],{"__ignoreMap":66},[84,39055,39056,39058],{"class":86,"line":87},[84,39057,31547],{"class":129},[84,39059,31550],{"class":154},[84,39061,39062,39064,39067,39069],{"class":86,"line":98},[84,39063,31891],{"class":129},[84,39065,39066],{"class":154}," sympy.core.sympify ",[84,39068,31547],{"class":129},[84,39070,39071],{"class":154}," kernS\n",[84,39073,39074,39076,39078,39080],{"class":86,"line":106},[84,39075,31891],{"class":129},[84,39077,31894],{"class":154},[84,39079,31547],{"class":129},[84,39081,31899],{"class":154},[84,39083,39084,39086,39088,39090],{"class":86,"line":112},[84,39085,31891],{"class":129},[84,39087,31911],{"class":154},[84,39089,31547],{"class":129},[84,39091,31916],{"class":154},[84,39093,39094],{"class":86,"line":425},[84,39095,3578],{"emptyLinePlaceholder":1252},[84,39097,39098,39100,39103,39105,39107,39109,39111],{"class":86,"line":2395},[84,39099,15864],{"class":129},[84,39101,39102],{"class":90}," VGG16",[84,39104,155],{"class":154},[84,39106,31932],{"class":90},[84,39108,1867],{"class":154},[84,39110,31937],{"class":90},[84,39112,31940],{"class":154},[84,39114,39115,39117,39119],{"class":86,"line":2401},[84,39116,31955],{"class":129},[84,39118,31958],{"class":94},[84,39120,31961],{"class":154},[84,39122,39123,39125,39127,39130,39132,39134,39136,39138],{"class":86,"line":2492},[84,39124,31971],{"class":94},[84,39126,155],{"class":154},[84,39128,39129],{"class":94},"VGG16",[84,39131,846],{"class":154},[84,39133,31977],{"class":94},[84,39135,31980],{"class":154},[84,39137,31983],{"class":94},[84,39139,183],{"class":154},[84,39141,39142],{"class":86,"line":2498},[84,39143,39144],{"class":1378},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[84,39146,39147],{"class":86,"line":2510},[84,39148,39149],{"class":1378},"        # 这里用的是灰度图\n",[84,39151,39152,39154,39157,39159],{"class":86,"line":2793},[84,39153,31999],{"class":94},[84,39155,39156],{"class":154},".block1",[84,39158,867],{"class":129},[84,39160,39161],{"class":154},"nn.Sequential(\n",[84,39163,39164,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197],{"class":86,"line":2798},[84,39165,39166],{"class":154},"            nn.Conv2d(",[84,39168,32010],{"class":928},[84,39170,867],{"class":129},[84,39172,1529],{"class":94},[84,39174,1688],{"class":154},[84,39176,32019],{"class":928},[84,39178,867],{"class":129},[84,39180,1516],{"class":94},[84,39182,1688],{"class":154},[84,39184,32028],{"class":928},[84,39186,867],{"class":129},[84,39188,1391],{"class":94},[84,39190,1688],{"class":154},[84,39192,32037],{"class":928},[84,39194,867],{"class":129},[84,39196,1529],{"class":94},[84,39198,39199],{"class":154},"),\n",[84,39201,39202],{"class":86,"line":2804},[84,39203,39204],{"class":154},"            nn.ReLU(),\n",[84,39206,39207,39209,39211,39213,39215,39217,39219,39221,39223,39225,39227,39229,39231,39233,39235,39237,39239],{"class":86,"line":2809},[84,39208,39166],{"class":154},[84,39210,32010],{"class":928},[84,39212,867],{"class":129},[84,39214,1516],{"class":94},[84,39216,1688],{"class":154},[84,39218,32019],{"class":928},[84,39220,867],{"class":129},[84,39222,1516],{"class":94},[84,39224,1688],{"class":154},[84,39226,32028],{"class":928},[84,39228,867],{"class":129},[84,39230,1391],{"class":94},[84,39232,1688],{"class":154},[84,39234,32037],{"class":928},[84,39236,867],{"class":129},[84,39238,1529],{"class":94},[84,39240,39199],{"class":154},[84,39242,39243],{"class":86,"line":2823},[84,39244,39204],{"class":154},[84,39246,39247,39250,39252,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272],{"class":86,"line":2828},[84,39248,39249],{"class":154},"            nn.MaxPool2d(",[84,39251,32028],{"class":928},[84,39253,867],{"class":129},[84,39255,1397],{"class":94},[84,39257,1688],{"class":154},[84,39259,32083],{"class":928},[84,39261,867],{"class":129},[84,39263,1397],{"class":94},[84,39265,1688],{"class":154},[84,39267,32037],{"class":928},[84,39269,867],{"class":129},[84,39271,1504],{"class":94},[84,39273,162],{"class":154},[84,39275,39276],{"class":86,"line":2834},[84,39277,39278],{"class":154},"        )\n",[84,39280,39281],{"class":86,"line":2855},[84,39282,39283],{"class":1378},"        # 第二层\n",[84,39285,39286,39288,39291,39293],{"class":86,"line":2860},[84,39287,31999],{"class":94},[84,39289,39290],{"class":154},".block2",[84,39292,867],{"class":129},[84,39294,39161],{"class":154},[84,39296,39297,39299,39301,39303,39305,39307,39309,39311,39313,39315,39317,39319,39321,39323,39325,39327,39329],{"class":86,"line":2874},[84,39298,39166],{"class":154},[84,39300,32010],{"class":928},[84,39302,867],{"class":129},[84,39304,1516],{"class":94},[84,39306,1688],{"class":154},[84,39308,32019],{"class":928},[84,39310,867],{"class":129},[84,39312,33223],{"class":94},[84,39314,1688],{"class":154},[84,39316,32028],{"class":928},[84,39318,867],{"class":129},[84,39320,1391],{"class":94},[84,39322,1688],{"class":154},[84,39324,32037],{"class":928},[84,39326,867],{"class":129},[84,39328,1529],{"class":94},[84,39330,39199],{"class":154},[84,39332,39333],{"class":86,"line":2879},[84,39334,39204],{"class":154},[84,39336,39337,39339,39341,39343,39345,39347,39349,39351,39353,39355,39357,39359,39361,39363,39365,39367,39369],{"class":86,"line":2908},[84,39338,39166],{"class":154},[84,39340,32010],{"class":928},[84,39342,867],{"class":129},[84,39344,33223],{"class":94},[84,39346,1688],{"class":154},[84,39348,32019],{"class":928},[84,39350,867],{"class":129},[84,39352,33223],{"class":94},[84,39354,1688],{"class":154},[84,39356,32028],{"class":928},[84,39358,867],{"class":129},[84,39360,1391],{"class":94},[84,39362,1688],{"class":154},[84,39364,32037],{"class":928},[84,39366,867],{"class":129},[84,39368,1529],{"class":94},[84,39370,39199],{"class":154},[84,39372,39373],{"class":86,"line":2913},[84,39374,39204],{"class":154},[84,39376,39377,39379,39381,39383,39385,39387,39389,39391,39393,39395,39397,39399,39401],{"class":86,"line":2930},[84,39378,39249],{"class":154},[84,39380,32028],{"class":928},[84,39382,867],{"class":129},[84,39384,1397],{"class":94},[84,39386,1688],{"class":154},[84,39388,32083],{"class":928},[84,39390,867],{"class":129},[84,39392,1397],{"class":94},[84,39394,1688],{"class":154},[84,39396,32037],{"class":928},[84,39398,867],{"class":129},[84,39400,1504],{"class":94},[84,39402,162],{"class":154},[84,39404,39405],{"class":86,"line":2935},[84,39406,39278],{"class":154},[84,39408,39409],{"class":86,"line":2940},[84,39410,39411],{"class":1378},"        # 第三层\n",[84,39413,39414,39416,39419,39421],{"class":86,"line":2945},[84,39415,31999],{"class":94},[84,39417,39418],{"class":154},".block3",[84,39420,867],{"class":129},[84,39422,39161],{"class":154},[84,39424,39425,39427,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457],{"class":86,"line":2959},[84,39426,39166],{"class":154},[84,39428,32010],{"class":928},[84,39430,867],{"class":129},[84,39432,33223],{"class":94},[84,39434,1688],{"class":154},[84,39436,32019],{"class":928},[84,39438,867],{"class":129},[84,39440,36022],{"class":94},[84,39442,1688],{"class":154},[84,39444,32028],{"class":928},[84,39446,867],{"class":129},[84,39448,1391],{"class":94},[84,39450,1688],{"class":154},[84,39452,32037],{"class":928},[84,39454,867],{"class":129},[84,39456,1529],{"class":94},[84,39458,39199],{"class":154},[84,39460,39461],{"class":86,"line":2964},[84,39462,39204],{"class":154},[84,39464,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497],{"class":86,"line":3755},[84,39466,39166],{"class":154},[84,39468,32010],{"class":928},[84,39470,867],{"class":129},[84,39472,36022],{"class":94},[84,39474,1688],{"class":154},[84,39476,32019],{"class":928},[84,39478,867],{"class":129},[84,39480,36022],{"class":94},[84,39482,1688],{"class":154},[84,39484,32028],{"class":928},[84,39486,867],{"class":129},[84,39488,1391],{"class":94},[84,39490,1688],{"class":154},[84,39492,32037],{"class":928},[84,39494,867],{"class":129},[84,39496,1529],{"class":94},[84,39498,39199],{"class":154},[84,39500,39501],{"class":86,"line":3769},[84,39502,39204],{"class":154},[84,39504,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537],{"class":86,"line":3777},[84,39506,39166],{"class":154},[84,39508,32010],{"class":928},[84,39510,867],{"class":129},[84,39512,36022],{"class":94},[84,39514,1688],{"class":154},[84,39516,32019],{"class":928},[84,39518,867],{"class":129},[84,39520,36022],{"class":94},[84,39522,1688],{"class":154},[84,39524,32028],{"class":928},[84,39526,867],{"class":129},[84,39528,1391],{"class":94},[84,39530,1688],{"class":154},[84,39532,32037],{"class":928},[84,39534,867],{"class":129},[84,39536,1529],{"class":94},[84,39538,39199],{"class":154},[84,39540,39541],{"class":86,"line":3782},[84,39542,39204],{"class":154},[84,39544,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569],{"class":86,"line":3788},[84,39546,39249],{"class":154},[84,39548,32028],{"class":928},[84,39550,867],{"class":129},[84,39552,1397],{"class":94},[84,39554,1688],{"class":154},[84,39556,32083],{"class":928},[84,39558,867],{"class":129},[84,39560,1397],{"class":94},[84,39562,1688],{"class":154},[84,39564,32037],{"class":928},[84,39566,867],{"class":129},[84,39568,1504],{"class":94},[84,39570,162],{"class":154},[84,39572,39573],{"class":86,"line":3794},[84,39574,39278],{"class":154},[84,39576,39577],{"class":86,"line":3799},[84,39578,39579],{"class":1378},"        # 第四层\n",[84,39581,39582,39584,39587,39589],{"class":86,"line":9120},[84,39583,31999],{"class":94},[84,39585,39586],{"class":154},".block4",[84,39588,867],{"class":129},[84,39590,39161],{"class":154},[84,39592,39593,39595,39597,39599,39601,39603,39605,39607,39610,39612,39614,39616,39618,39620,39622,39624,39626],{"class":86,"line":9144},[84,39594,39166],{"class":154},[84,39596,32010],{"class":928},[84,39598,867],{"class":129},[84,39600,36022],{"class":94},[84,39602,1688],{"class":154},[84,39604,32019],{"class":928},[84,39606,867],{"class":129},[84,39608,39609],{"class":94},"512",[84,39611,1688],{"class":154},[84,39613,32028],{"class":928},[84,39615,867],{"class":129},[84,39617,1391],{"class":94},[84,39619,1688],{"class":154},[84,39621,32037],{"class":928},[84,39623,867],{"class":129},[84,39625,1529],{"class":94},[84,39627,39199],{"class":154},[84,39629,39630],{"class":86,"line":9149},[84,39631,39204],{"class":154},[84,39633,39634,39636,39638,39640,39642,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666],{"class":86,"line":9155},[84,39635,39166],{"class":154},[84,39637,32010],{"class":928},[84,39639,867],{"class":129},[84,39641,39609],{"class":94},[84,39643,1688],{"class":154},[84,39645,32019],{"class":928},[84,39647,867],{"class":129},[84,39649,39609],{"class":94},[84,39651,1688],{"class":154},[84,39653,32028],{"class":928},[84,39655,867],{"class":129},[84,39657,1391],{"class":94},[84,39659,1688],{"class":154},[84,39661,32037],{"class":928},[84,39663,867],{"class":129},[84,39665,1529],{"class":94},[84,39667,39199],{"class":154},[84,39669,39670],{"class":86,"line":9182},[84,39671,39204],{"class":154},[84,39673,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706],{"class":86,"line":9187},[84,39675,39166],{"class":154},[84,39677,32010],{"class":928},[84,39679,867],{"class":129},[84,39681,39609],{"class":94},[84,39683,1688],{"class":154},[84,39685,32019],{"class":928},[84,39687,867],{"class":129},[84,39689,39609],{"class":94},[84,39691,1688],{"class":154},[84,39693,32028],{"class":928},[84,39695,867],{"class":129},[84,39697,1391],{"class":94},[84,39699,1688],{"class":154},[84,39701,32037],{"class":928},[84,39703,867],{"class":129},[84,39705,1529],{"class":94},[84,39707,39199],{"class":154},[84,39709,39710],{"class":86,"line":9193},[84,39711,39204],{"class":154},[84,39713,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738],{"class":86,"line":9205},[84,39715,39249],{"class":154},[84,39717,32028],{"class":928},[84,39719,867],{"class":129},[84,39721,1397],{"class":94},[84,39723,1688],{"class":154},[84,39725,32083],{"class":928},[84,39727,867],{"class":129},[84,39729,1397],{"class":94},[84,39731,1688],{"class":154},[84,39733,32037],{"class":928},[84,39735,867],{"class":129},[84,39737,1504],{"class":94},[84,39739,162],{"class":154},[84,39741,39742],{"class":86,"line":9217},[84,39743,39278],{"class":154},[84,39745,39746],{"class":86,"line":9229},[84,39747,39748],{"class":1378},"        # 第五层\n",[84,39750,39751,39753,39756,39758],{"class":86,"line":10888},[84,39752,31999],{"class":94},[84,39754,39755],{"class":154},".block5",[84,39757,867],{"class":129},[84,39759,39161],{"class":154},[84,39761,39762,39764,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794],{"class":86,"line":10913},[84,39763,39166],{"class":154},[84,39765,32010],{"class":928},[84,39767,867],{"class":129},[84,39769,39609],{"class":94},[84,39771,1688],{"class":154},[84,39773,32019],{"class":928},[84,39775,867],{"class":129},[84,39777,39609],{"class":94},[84,39779,1688],{"class":154},[84,39781,32028],{"class":928},[84,39783,867],{"class":129},[84,39785,1391],{"class":94},[84,39787,1688],{"class":154},[84,39789,32037],{"class":928},[84,39791,867],{"class":129},[84,39793,1529],{"class":94},[84,39795,39199],{"class":154},[84,39797,39798],{"class":86,"line":10936},[84,39799,39204],{"class":154},[84,39801,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834],{"class":86,"line":10960},[84,39803,39166],{"class":154},[84,39805,32010],{"class":928},[84,39807,867],{"class":129},[84,39809,39609],{"class":94},[84,39811,1688],{"class":154},[84,39813,32019],{"class":928},[84,39815,867],{"class":129},[84,39817,39609],{"class":94},[84,39819,1688],{"class":154},[84,39821,32028],{"class":928},[84,39823,867],{"class":129},[84,39825,1391],{"class":94},[84,39827,1688],{"class":154},[84,39829,32037],{"class":928},[84,39831,867],{"class":129},[84,39833,1529],{"class":94},[84,39835,39199],{"class":154},[84,39837,39838],{"class":86,"line":10965},[84,39839,39204],{"class":154},[84,39841,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874],{"class":86,"line":10970},[84,39843,39166],{"class":154},[84,39845,32010],{"class":928},[84,39847,867],{"class":129},[84,39849,39609],{"class":94},[84,39851,1688],{"class":154},[84,39853,32019],{"class":928},[84,39855,867],{"class":129},[84,39857,39609],{"class":94},[84,39859,1688],{"class":154},[84,39861,32028],{"class":928},[84,39863,867],{"class":129},[84,39865,1391],{"class":94},[84,39867,1688],{"class":154},[84,39869,32037],{"class":928},[84,39871,867],{"class":129},[84,39873,1529],{"class":94},[84,39875,39199],{"class":154},[84,39877,39878],{"class":86,"line":10975},[84,39879,39204],{"class":154},[84,39881,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906],{"class":86,"line":10984},[84,39883,39249],{"class":154},[84,39885,32028],{"class":928},[84,39887,867],{"class":129},[84,39889,1397],{"class":94},[84,39891,1688],{"class":154},[84,39893,32083],{"class":928},[84,39895,867],{"class":129},[84,39897,1397],{"class":94},[84,39899,1688],{"class":154},[84,39901,32037],{"class":928},[84,39903,867],{"class":129},[84,39905,1504],{"class":94},[84,39907,162],{"class":154},[84,39909,39910],{"class":86,"line":10989},[84,39911,39278],{"class":154},[84,39913,39914],{"class":86,"line":10995},[84,39915,39916],{"class":1378},"        # 全连接层\n",[84,39918,39919,39921,39924,39926],{"class":86,"line":11016},[84,39920,31999],{"class":94},[84,39922,39923],{"class":154},".block6",[84,39925,867],{"class":129},[84,39927,39161],{"class":154},[84,39929,39930],{"class":86,"line":11022},[84,39931,39932],{"class":1378},"            # 平展操作\n",[84,39934,39935],{"class":86,"line":11036},[84,39936,39937],{"class":1378},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[84,39939,39940],{"class":86,"line":11042},[84,39941,39942],{"class":154},"            nn.Flatten(),\n",[84,39944,39945,39948,39950,39952,39954,39956,39958,39960,39962],{"class":86,"line":11069},[84,39946,39947],{"class":154},"            nn.Linear(",[84,39949,1679],{"class":94},[84,39951,1043],{"class":129},[84,39953,1679],{"class":94},[84,39955,1043],{"class":129},[84,39957,39609],{"class":94},[84,39959,1688],{"class":154},[84,39961,36022],{"class":94},[84,39963,39199],{"class":154},[84,39965,39966],{"class":86,"line":11078},[84,39967,39204],{"class":154},[84,39969,39970,39972,39974,39976,39978],{"class":86,"line":11084},[84,39971,39947],{"class":154},[84,39973,36022],{"class":94},[84,39975,1688],{"class":154},[84,39977,33223],{"class":94},[84,39979,39199],{"class":154},[84,39981,39982],{"class":86,"line":11092},[84,39983,39204],{"class":154},[84,39985,39986,39988,39990,39992,39994],{"class":86,"line":11097},[84,39987,39947],{"class":154},[84,39989,33223],{"class":94},[84,39991,1688],{"class":154},[84,39993,1756],{"class":94},[84,39995,162],{"class":154},[84,39997,39998],{"class":86,"line":17774},[84,39999,39278],{"class":154},[84,40001,40002],{"class":86,"line":17780},[84,40003,3578],{"emptyLinePlaceholder":1252},[84,40005,40006],{"class":86,"line":17803},[84,40007,40008],{"class":1378},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[84,40010,40011],{"class":86,"line":17809},[84,40012,40013],{"class":1378},"        # 循环遍历模型\n",[84,40015,40016,40018,40021,40023,40026],{"class":86,"line":17832},[84,40017,4581],{"class":129},[84,40019,40020],{"class":154}," m ",[84,40022,27206],{"class":129},[84,40024,40025],{"class":94}," self",[84,40027,40028],{"class":154},".modules():\n",[84,40030,40031],{"class":86,"line":17846},[84,40032,40033],{"class":1378},"            # print(m)\n",[84,40035,40036,40038,40041],{"class":86,"line":17866},[84,40037,5819],{"class":129},[84,40039,40040],{"class":94}," isinstance",[84,40042,40043],{"class":154},"(m,nn.Conv2d):\n",[84,40045,40046],{"class":86,"line":17872},[84,40047,40048],{"class":1378},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[84,40050,40051,40054,40057,40059,40062],{"class":86,"line":17883},[84,40052,40053],{"class":154},"                nn.init.kaiming_normal_(m.weight,",[84,40055,40056],{"class":928},"nonlinearity",[84,40058,867],{"class":129},[84,40060,40061],{"class":158},"'relu'",[84,40063,162],{"class":154},[84,40065,40066],{"class":86,"line":17906},[84,40067,40068],{"class":1378},"                # 判断b参数是否存在\n",[84,40070,40071,40074,40077,40080,40083,40086],{"class":86,"line":17928},[84,40072,40073],{"class":129},"                if",[84,40075,40076],{"class":154}," m.bias ",[84,40078,40079],{"class":129},"is",[84,40081,40082],{"class":129}," not",[84,40084,40085],{"class":94}," None",[84,40087,4917],{"class":154},[84,40089,40090],{"class":86,"line":17933},[84,40091,40092],{"class":1378},"                    # 如果参数不存在的化初始化b=0\n",[84,40094,40095,40098,40100],{"class":86,"line":17939},[84,40096,40097],{"class":154},"                    nn.init.constant_(m.bias,",[84,40099,1504],{"class":94},[84,40101,162],{"class":154},[84,40103,40104],{"class":86,"line":17953},[84,40105,40106],{"class":1378},"            # 全连接层初始化\n",[84,40108,40109,40112,40114],{"class":86,"line":17966},[84,40110,40111],{"class":129},"            elif",[84,40113,40040],{"class":94},[84,40115,40116],{"class":154},"(m,nn.Linear):\n",[84,40118,40119],{"class":86,"line":17971},[84,40120,40121],{"class":1378},"                # 这个初始化方法是利用的是正太分布的方式\n",[84,40123,40124],{"class":86,"line":17985},[84,40125,40126],{"class":1378},"                # 均值为0，方差为0.01\n",[84,40128,40129,40132,40134,40136,40139],{"class":86,"line":17990},[84,40130,40131],{"class":154},"                nn.init.normal_(m.weight,",[84,40133,1504],{"class":94},[84,40135,1688],{"class":154},[84,40137,40138],{"class":94},"0.01",[84,40140,162],{"class":154},[84,40142,40143],{"class":86,"line":17996},[84,40144,40145],{"class":1378},"                # 初始化b参数\n",[84,40147,40148,40150,40152,40154,40156,40158],{"class":86,"line":18001},[84,40149,40073],{"class":129},[84,40151,40076],{"class":154},[84,40153,40079],{"class":129},[84,40155,40082],{"class":129},[84,40157,40085],{"class":94},[84,40159,4917],{"class":154},[84,40161,40162,40164,40166],{"class":86,"line":18015},[84,40163,40097],{"class":154},[84,40165,1504],{"class":94},[84,40167,162],{"class":154},[84,40169,40170],{"class":86,"line":18020},[84,40171,3578],{"emptyLinePlaceholder":1252},[84,40173,40174],{"class":86,"line":18025},[84,40175,36317],{"class":1378},[84,40177,40178,40180,40182],{"class":86,"line":18039},[84,40179,31955],{"class":129},[84,40181,32247],{"class":90},[84,40183,32250],{"class":154},[84,40185,40186,40188,40190,40192],{"class":86,"line":18051},[84,40187,32255],{"class":154},[84,40189,867],{"class":129},[84,40191,31977],{"class":94},[84,40193,40194],{"class":154},".block1(x)\n",[84,40196,40197,40199,40201,40203],{"class":86,"line":18056},[84,40198,32255],{"class":154},[84,40200,867],{"class":129},[84,40202,31977],{"class":94},[84,40204,40205],{"class":154},".block2(x)\n",[84,40207,40208,40210,40212,40214],{"class":86,"line":18069},[84,40209,32255],{"class":154},[84,40211,867],{"class":129},[84,40213,31977],{"class":94},[84,40215,40216],{"class":154},".block3(x)\n",[84,40218,40219,40221,40223,40225],{"class":86,"line":18074},[84,40220,32255],{"class":154},[84,40222,867],{"class":129},[84,40224,31977],{"class":94},[84,40226,40227],{"class":154},".block4(x)\n",[84,40229,40230,40232,40234,40236],{"class":86,"line":18079},[84,40231,32255],{"class":154},[84,40233,867],{"class":129},[84,40235,31977],{"class":94},[84,40237,40238],{"class":154},".block5(x)\n",[84,40240,40241,40243,40245,40247],{"class":86,"line":18084},[84,40242,32255],{"class":154},[84,40244,867],{"class":129},[84,40246,31977],{"class":94},[84,40248,40249],{"class":154},".block6(x)\n",[84,40251,40252,40254],{"class":86,"line":18097},[84,40253,15922],{"class":129},[84,40255,32363],{"class":154},[84,40257,40258],{"class":86,"line":18102},[84,40259,3578],{"emptyLinePlaceholder":1252},[84,40261,40262],{"class":86,"line":33785},[84,40263,40264],{"class":1378},"# 验证模型\n",[84,40266,40267,40269,40271,40273,40276],{"class":86,"line":33791},[84,40268,2712],{"class":129},[84,40270,32374],{"class":94},[84,40272,4127],{"class":129},[84,40274,40275],{"class":158},"'__main__'",[84,40277,4917],{"class":154},[84,40279,40280,40282,40284,40286,40288,40290,40292,40294,40296],{"class":86,"line":33797},[84,40281,32391],{"class":154},[84,40283,867],{"class":129},[84,40285,31605],{"class":154},[84,40287,32398],{"class":158},[84,40289,2885],{"class":129},[84,40291,32403],{"class":154},[84,40293,2882],{"class":129},[84,40295,31630],{"class":158},[84,40297,162],{"class":154},[84,40299,40300,40302],{"class":86,"line":33803},[84,40301,32453],{"class":94},[84,40303,31639],{"class":154},[84,40305,40306,40308,40310],{"class":86,"line":33809},[84,40307,32443],{"class":154},[84,40309,867],{"class":129},[84,40311,40312],{"class":154},"VGG16().to(device)\n",[84,40314,40315,40317,40319,40321,40323,40325,40327,40329],{"class":86,"line":33820},[84,40316,32453],{"class":94},[84,40318,32456],{"class":154},[84,40320,1529],{"class":94},[84,40322,1688],{"class":154},[84,40324,32654],{"class":94},[84,40326,1688],{"class":154},[84,40328,32654],{"class":94},[84,40330,32469],{"class":154},[26,40332,40333],{"start":98},[29,40334,40335],{},"训练代码",[19,40337,40338],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40340,40341],{},"解决方式:",[19,40343,40344],{},"①权重初始化",[60,40346,40348],{"className":121,"code":40347,"language":91,"meta":66,"style":66},"# 权重初始化,保证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",[39,40349,40350,40355,40360,40372,40377,40385,40390,40403,40408,40422,40427,40436,40441,40450,40455,40460,40473,40478,40492],{"__ignoreMap":66},[84,40351,40352],{"class":86,"line":87},[84,40353,40354],{"class":1378},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[84,40356,40357],{"class":86,"line":98},[84,40358,40359],{"class":1378},"# 循环遍历模型\n",[84,40361,40362,40364,40366,40368,40370],{"class":86,"line":106},[84,40363,4203],{"class":129},[84,40365,40020],{"class":154},[84,40367,27206],{"class":129},[84,40369,40025],{"class":94},[84,40371,40028],{"class":154},[84,40373,40374],{"class":86,"line":112},[84,40375,40376],{"class":1378},"    # print(m)\n",[84,40378,40379,40381,40383],{"class":86,"line":425},[84,40380,4279],{"class":129},[84,40382,40040],{"class":94},[84,40384,40043],{"class":154},[84,40386,40387],{"class":86,"line":2395},[84,40388,40389],{"class":1378},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[84,40391,40392,40395,40397,40399,40401],{"class":86,"line":2401},[84,40393,40394],{"class":154},"        nn.init.kaiming_normal_(m.weight,",[84,40396,40056],{"class":928},[84,40398,867],{"class":129},[84,40400,40061],{"class":158},[84,40402,162],{"class":154},[84,40404,40405],{"class":86,"line":2492},[84,40406,40407],{"class":1378},"        # 判断b参数是否存在\n",[84,40409,40410,40412,40414,40416,40418,40420],{"class":86,"line":2498},[84,40411,3675],{"class":129},[84,40413,40076],{"class":154},[84,40415,40079],{"class":129},[84,40417,40082],{"class":129},[84,40419,40085],{"class":94},[84,40421,4917],{"class":154},[84,40423,40424],{"class":86,"line":2510},[84,40425,40426],{"class":1378},"            # 如果参数不存在的化初始化b=0\n",[84,40428,40429,40432,40434],{"class":86,"line":2793},[84,40430,40431],{"class":154},"            nn.init.constant_(m.bias,",[84,40433,1504],{"class":94},[84,40435,162],{"class":154},[84,40437,40438],{"class":86,"line":2798},[84,40439,40440],{"class":1378},"    # 全连接层初始化\n",[84,40442,40443,40446,40448],{"class":86,"line":2804},[84,40444,40445],{"class":129},"    elif",[84,40447,40040],{"class":94},[84,40449,40116],{"class":154},[84,40451,40452],{"class":86,"line":2809},[84,40453,40454],{"class":1378},"        # 这个初始化方法是利用的是正太分布的方式\n",[84,40456,40457],{"class":86,"line":2823},[84,40458,40459],{"class":1378},"        # 均值为0，方差为0.01\n",[84,40461,40462,40465,40467,40469,40471],{"class":86,"line":2828},[84,40463,40464],{"class":154},"        nn.init.normal_(m.weight,",[84,40466,1504],{"class":94},[84,40468,1688],{"class":154},[84,40470,40138],{"class":94},[84,40472,162],{"class":154},[84,40474,40475],{"class":86,"line":2834},[84,40476,40477],{"class":1378},"        # 初始化b参数\n",[84,40479,40480,40482,40484,40486,40488,40490],{"class":86,"line":2855},[84,40481,3675],{"class":129},[84,40483,40076],{"class":154},[84,40485,40079],{"class":129},[84,40487,40082],{"class":129},[84,40489,40085],{"class":94},[84,40491,4917],{"class":154},[84,40493,40494,40496,40498],{"class":86,"line":2860},[84,40495,40431],{"class":154},[84,40497,1504],{"class":94},[84,40499,162],{"class":154},[19,40501,40502],{},"②尽可能地增加批次",[19,40504,40505],{},"训练完整代码：",[60,40507,40508],{"className":121,"code":39051,"language":91,"meta":66,"style":66},[39,40509,40510,40516,40526,40536,40546,40550,40566,40574,40592,40596,40600,40610,40646,40650,40686,40690,40718,40722,40726,40736,40772,40776,40812,40816,40844,40848,40852,40862,40898,40902,40938,40942,40978,40982,41010,41014,41018,41028,41064,41068,41104,41108,41144,41148,41176,41180,41184,41194,41230,41234,41270,41274,41310,41314,41342,41346,41350,41360,41364,41368,41372,41392,41396,41408,41412,41424,41428,41432,41436,41440,41452,41456,41464,41468,41480,41484,41498,41502,41510,41514,41522,41526,41530,41542,41546,41560,41568,41572,41576,41584,41594,41604,41614,41624,41634,41644,41650,41654,41658,41670,41690,41696,41704],{"__ignoreMap":66},[84,40511,40512,40514],{"class":86,"line":87},[84,40513,31547],{"class":129},[84,40515,31550],{"class":154},[84,40517,40518,40520,40522,40524],{"class":86,"line":98},[84,40519,31891],{"class":129},[84,40521,39066],{"class":154},[84,40523,31547],{"class":129},[84,40525,39071],{"class":154},[84,40527,40528,40530,40532,40534],{"class":86,"line":106},[84,40529,31891],{"class":129},[84,40531,31894],{"class":154},[84,40533,31547],{"class":129},[84,40535,31899],{"class":154},[84,40537,40538,40540,40542,40544],{"class":86,"line":112},[84,40539,31891],{"class":129},[84,40541,31911],{"class":154},[84,40543,31547],{"class":129},[84,40545,31916],{"class":154},[84,40547,40548],{"class":86,"line":425},[84,40549,3578],{"emptyLinePlaceholder":1252},[84,40551,40552,40554,40556,40558,40560,40562,40564],{"class":86,"line":2395},[84,40553,15864],{"class":129},[84,40555,39102],{"class":90},[84,40557,155],{"class":154},[84,40559,31932],{"class":90},[84,40561,1867],{"class":154},[84,40563,31937],{"class":90},[84,40565,31940],{"class":154},[84,40567,40568,40570,40572],{"class":86,"line":2401},[84,40569,31955],{"class":129},[84,40571,31958],{"class":94},[84,40573,31961],{"class":154},[84,40575,40576,40578,40580,40582,40584,40586,40588,40590],{"class":86,"line":2492},[84,40577,31971],{"class":94},[84,40579,155],{"class":154},[84,40581,39129],{"class":94},[84,40583,846],{"class":154},[84,40585,31977],{"class":94},[84,40587,31980],{"class":154},[84,40589,31983],{"class":94},[84,40591,183],{"class":154},[84,40593,40594],{"class":86,"line":2498},[84,40595,39144],{"class":1378},[84,40597,40598],{"class":86,"line":2510},[84,40599,39149],{"class":1378},[84,40601,40602,40604,40606,40608],{"class":86,"line":2793},[84,40603,31999],{"class":94},[84,40605,39156],{"class":154},[84,40607,867],{"class":129},[84,40609,39161],{"class":154},[84,40611,40612,40614,40616,40618,40620,40622,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642,40644],{"class":86,"line":2798},[84,40613,39166],{"class":154},[84,40615,32010],{"class":928},[84,40617,867],{"class":129},[84,40619,1529],{"class":94},[84,40621,1688],{"class":154},[84,40623,32019],{"class":928},[84,40625,867],{"class":129},[84,40627,1516],{"class":94},[84,40629,1688],{"class":154},[84,40631,32028],{"class":928},[84,40633,867],{"class":129},[84,40635,1391],{"class":94},[84,40637,1688],{"class":154},[84,40639,32037],{"class":928},[84,40641,867],{"class":129},[84,40643,1529],{"class":94},[84,40645,39199],{"class":154},[84,40647,40648],{"class":86,"line":2804},[84,40649,39204],{"class":154},[84,40651,40652,40654,40656,40658,40660,40662,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682,40684],{"class":86,"line":2809},[84,40653,39166],{"class":154},[84,40655,32010],{"class":928},[84,40657,867],{"class":129},[84,40659,1516],{"class":94},[84,40661,1688],{"class":154},[84,40663,32019],{"class":928},[84,40665,867],{"class":129},[84,40667,1516],{"class":94},[84,40669,1688],{"class":154},[84,40671,32028],{"class":928},[84,40673,867],{"class":129},[84,40675,1391],{"class":94},[84,40677,1688],{"class":154},[84,40679,32037],{"class":928},[84,40681,867],{"class":129},[84,40683,1529],{"class":94},[84,40685,39199],{"class":154},[84,40687,40688],{"class":86,"line":2823},[84,40689,39204],{"class":154},[84,40691,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714,40716],{"class":86,"line":2828},[84,40693,39249],{"class":154},[84,40695,32028],{"class":928},[84,40697,867],{"class":129},[84,40699,1397],{"class":94},[84,40701,1688],{"class":154},[84,40703,32083],{"class":928},[84,40705,867],{"class":129},[84,40707,1397],{"class":94},[84,40709,1688],{"class":154},[84,40711,32037],{"class":928},[84,40713,867],{"class":129},[84,40715,1504],{"class":94},[84,40717,162],{"class":154},[84,40719,40720],{"class":86,"line":2834},[84,40721,39278],{"class":154},[84,40723,40724],{"class":86,"line":2855},[84,40725,39283],{"class":1378},[84,40727,40728,40730,40732,40734],{"class":86,"line":2860},[84,40729,31999],{"class":94},[84,40731,39290],{"class":154},[84,40733,867],{"class":129},[84,40735,39161],{"class":154},[84,40737,40738,40740,40742,40744,40746,40748,40750,40752,40754,40756,40758,40760,40762,40764,40766,40768,40770],{"class":86,"line":2874},[84,40739,39166],{"class":154},[84,40741,32010],{"class":928},[84,40743,867],{"class":129},[84,40745,1516],{"class":94},[84,40747,1688],{"class":154},[84,40749,32019],{"class":928},[84,40751,867],{"class":129},[84,40753,33223],{"class":94},[84,40755,1688],{"class":154},[84,40757,32028],{"class":928},[84,40759,867],{"class":129},[84,40761,1391],{"class":94},[84,40763,1688],{"class":154},[84,40765,32037],{"class":928},[84,40767,867],{"class":129},[84,40769,1529],{"class":94},[84,40771,39199],{"class":154},[84,40773,40774],{"class":86,"line":2879},[84,40775,39204],{"class":154},[84,40777,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796,40798,40800,40802,40804,40806,40808,40810],{"class":86,"line":2908},[84,40779,39166],{"class":154},[84,40781,32010],{"class":928},[84,40783,867],{"class":129},[84,40785,33223],{"class":94},[84,40787,1688],{"class":154},[84,40789,32019],{"class":928},[84,40791,867],{"class":129},[84,40793,33223],{"class":94},[84,40795,1688],{"class":154},[84,40797,32028],{"class":928},[84,40799,867],{"class":129},[84,40801,1391],{"class":94},[84,40803,1688],{"class":154},[84,40805,32037],{"class":928},[84,40807,867],{"class":129},[84,40809,1529],{"class":94},[84,40811,39199],{"class":154},[84,40813,40814],{"class":86,"line":2913},[84,40815,39204],{"class":154},[84,40817,40818,40820,40822,40824,40826,40828,40830,40832,40834,40836,40838,40840,40842],{"class":86,"line":2930},[84,40819,39249],{"class":154},[84,40821,32028],{"class":928},[84,40823,867],{"class":129},[84,40825,1397],{"class":94},[84,40827,1688],{"class":154},[84,40829,32083],{"class":928},[84,40831,867],{"class":129},[84,40833,1397],{"class":94},[84,40835,1688],{"class":154},[84,40837,32037],{"class":928},[84,40839,867],{"class":129},[84,40841,1504],{"class":94},[84,40843,162],{"class":154},[84,40845,40846],{"class":86,"line":2935},[84,40847,39278],{"class":154},[84,40849,40850],{"class":86,"line":2940},[84,40851,39411],{"class":1378},[84,40853,40854,40856,40858,40860],{"class":86,"line":2945},[84,40855,31999],{"class":94},[84,40857,39418],{"class":154},[84,40859,867],{"class":129},[84,40861,39161],{"class":154},[84,40863,40864,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886,40888,40890,40892,40894,40896],{"class":86,"line":2959},[84,40865,39166],{"class":154},[84,40867,32010],{"class":928},[84,40869,867],{"class":129},[84,40871,33223],{"class":94},[84,40873,1688],{"class":154},[84,40875,32019],{"class":928},[84,40877,867],{"class":129},[84,40879,36022],{"class":94},[84,40881,1688],{"class":154},[84,40883,32028],{"class":928},[84,40885,867],{"class":129},[84,40887,1391],{"class":94},[84,40889,1688],{"class":154},[84,40891,32037],{"class":928},[84,40893,867],{"class":129},[84,40895,1529],{"class":94},[84,40897,39199],{"class":154},[84,40899,40900],{"class":86,"line":2964},[84,40901,39204],{"class":154},[84,40903,40904,40906,40908,40910,40912,40914,40916,40918,40920,40922,40924,40926,40928,40930,40932,40934,40936],{"class":86,"line":3755},[84,40905,39166],{"class":154},[84,40907,32010],{"class":928},[84,40909,867],{"class":129},[84,40911,36022],{"class":94},[84,40913,1688],{"class":154},[84,40915,32019],{"class":928},[84,40917,867],{"class":129},[84,40919,36022],{"class":94},[84,40921,1688],{"class":154},[84,40923,32028],{"class":928},[84,40925,867],{"class":129},[84,40927,1391],{"class":94},[84,40929,1688],{"class":154},[84,40931,32037],{"class":928},[84,40933,867],{"class":129},[84,40935,1529],{"class":94},[84,40937,39199],{"class":154},[84,40939,40940],{"class":86,"line":3769},[84,40941,39204],{"class":154},[84,40943,40944,40946,40948,40950,40952,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974,40976],{"class":86,"line":3777},[84,40945,39166],{"class":154},[84,40947,32010],{"class":928},[84,40949,867],{"class":129},[84,40951,36022],{"class":94},[84,40953,1688],{"class":154},[84,40955,32019],{"class":928},[84,40957,867],{"class":129},[84,40959,36022],{"class":94},[84,40961,1688],{"class":154},[84,40963,32028],{"class":928},[84,40965,867],{"class":129},[84,40967,1391],{"class":94},[84,40969,1688],{"class":154},[84,40971,32037],{"class":928},[84,40973,867],{"class":129},[84,40975,1529],{"class":94},[84,40977,39199],{"class":154},[84,40979,40980],{"class":86,"line":3782},[84,40981,39204],{"class":154},[84,40983,40984,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008],{"class":86,"line":3788},[84,40985,39249],{"class":154},[84,40987,32028],{"class":928},[84,40989,867],{"class":129},[84,40991,1397],{"class":94},[84,40993,1688],{"class":154},[84,40995,32083],{"class":928},[84,40997,867],{"class":129},[84,40999,1397],{"class":94},[84,41001,1688],{"class":154},[84,41003,32037],{"class":928},[84,41005,867],{"class":129},[84,41007,1504],{"class":94},[84,41009,162],{"class":154},[84,41011,41012],{"class":86,"line":3794},[84,41013,39278],{"class":154},[84,41015,41016],{"class":86,"line":3799},[84,41017,39579],{"class":1378},[84,41019,41020,41022,41024,41026],{"class":86,"line":9120},[84,41021,31999],{"class":94},[84,41023,39586],{"class":154},[84,41025,867],{"class":129},[84,41027,39161],{"class":154},[84,41029,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058,41060,41062],{"class":86,"line":9144},[84,41031,39166],{"class":154},[84,41033,32010],{"class":928},[84,41035,867],{"class":129},[84,41037,36022],{"class":94},[84,41039,1688],{"class":154},[84,41041,32019],{"class":928},[84,41043,867],{"class":129},[84,41045,39609],{"class":94},[84,41047,1688],{"class":154},[84,41049,32028],{"class":928},[84,41051,867],{"class":129},[84,41053,1391],{"class":94},[84,41055,1688],{"class":154},[84,41057,32037],{"class":928},[84,41059,867],{"class":129},[84,41061,1529],{"class":94},[84,41063,39199],{"class":154},[84,41065,41066],{"class":86,"line":9149},[84,41067,39204],{"class":154},[84,41069,41070,41072,41074,41076,41078,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102],{"class":86,"line":9155},[84,41071,39166],{"class":154},[84,41073,32010],{"class":928},[84,41075,867],{"class":129},[84,41077,39609],{"class":94},[84,41079,1688],{"class":154},[84,41081,32019],{"class":928},[84,41083,867],{"class":129},[84,41085,39609],{"class":94},[84,41087,1688],{"class":154},[84,41089,32028],{"class":928},[84,41091,867],{"class":129},[84,41093,1391],{"class":94},[84,41095,1688],{"class":154},[84,41097,32037],{"class":928},[84,41099,867],{"class":129},[84,41101,1529],{"class":94},[84,41103,39199],{"class":154},[84,41105,41106],{"class":86,"line":9182},[84,41107,39204],{"class":154},[84,41109,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142],{"class":86,"line":9187},[84,41111,39166],{"class":154},[84,41113,32010],{"class":928},[84,41115,867],{"class":129},[84,41117,39609],{"class":94},[84,41119,1688],{"class":154},[84,41121,32019],{"class":928},[84,41123,867],{"class":129},[84,41125,39609],{"class":94},[84,41127,1688],{"class":154},[84,41129,32028],{"class":928},[84,41131,867],{"class":129},[84,41133,1391],{"class":94},[84,41135,1688],{"class":154},[84,41137,32037],{"class":928},[84,41139,867],{"class":129},[84,41141,1529],{"class":94},[84,41143,39199],{"class":154},[84,41145,41146],{"class":86,"line":9193},[84,41147,39204],{"class":154},[84,41149,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174],{"class":86,"line":9205},[84,41151,39249],{"class":154},[84,41153,32028],{"class":928},[84,41155,867],{"class":129},[84,41157,1397],{"class":94},[84,41159,1688],{"class":154},[84,41161,32083],{"class":928},[84,41163,867],{"class":129},[84,41165,1397],{"class":94},[84,41167,1688],{"class":154},[84,41169,32037],{"class":928},[84,41171,867],{"class":129},[84,41173,1504],{"class":94},[84,41175,162],{"class":154},[84,41177,41178],{"class":86,"line":9217},[84,41179,39278],{"class":154},[84,41181,41182],{"class":86,"line":9229},[84,41183,39748],{"class":1378},[84,41185,41186,41188,41190,41192],{"class":86,"line":10888},[84,41187,31999],{"class":94},[84,41189,39755],{"class":154},[84,41191,867],{"class":129},[84,41193,39161],{"class":154},[84,41195,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228],{"class":86,"line":10913},[84,41197,39166],{"class":154},[84,41199,32010],{"class":928},[84,41201,867],{"class":129},[84,41203,39609],{"class":94},[84,41205,1688],{"class":154},[84,41207,32019],{"class":928},[84,41209,867],{"class":129},[84,41211,39609],{"class":94},[84,41213,1688],{"class":154},[84,41215,32028],{"class":928},[84,41217,867],{"class":129},[84,41219,1391],{"class":94},[84,41221,1688],{"class":154},[84,41223,32037],{"class":928},[84,41225,867],{"class":129},[84,41227,1529],{"class":94},[84,41229,39199],{"class":154},[84,41231,41232],{"class":86,"line":10936},[84,41233,39204],{"class":154},[84,41235,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268],{"class":86,"line":10960},[84,41237,39166],{"class":154},[84,41239,32010],{"class":928},[84,41241,867],{"class":129},[84,41243,39609],{"class":94},[84,41245,1688],{"class":154},[84,41247,32019],{"class":928},[84,41249,867],{"class":129},[84,41251,39609],{"class":94},[84,41253,1688],{"class":154},[84,41255,32028],{"class":928},[84,41257,867],{"class":129},[84,41259,1391],{"class":94},[84,41261,1688],{"class":154},[84,41263,32037],{"class":928},[84,41265,867],{"class":129},[84,41267,1529],{"class":94},[84,41269,39199],{"class":154},[84,41271,41272],{"class":86,"line":10965},[84,41273,39204],{"class":154},[84,41275,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298,41300,41302,41304,41306,41308],{"class":86,"line":10970},[84,41277,39166],{"class":154},[84,41279,32010],{"class":928},[84,41281,867],{"class":129},[84,41283,39609],{"class":94},[84,41285,1688],{"class":154},[84,41287,32019],{"class":928},[84,41289,867],{"class":129},[84,41291,39609],{"class":94},[84,41293,1688],{"class":154},[84,41295,32028],{"class":928},[84,41297,867],{"class":129},[84,41299,1391],{"class":94},[84,41301,1688],{"class":154},[84,41303,32037],{"class":928},[84,41305,867],{"class":129},[84,41307,1529],{"class":94},[84,41309,39199],{"class":154},[84,41311,41312],{"class":86,"line":10975},[84,41313,39204],{"class":154},[84,41315,41316,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338,41340],{"class":86,"line":10984},[84,41317,39249],{"class":154},[84,41319,32028],{"class":928},[84,41321,867],{"class":129},[84,41323,1397],{"class":94},[84,41325,1688],{"class":154},[84,41327,32083],{"class":928},[84,41329,867],{"class":129},[84,41331,1397],{"class":94},[84,41333,1688],{"class":154},[84,41335,32037],{"class":928},[84,41337,867],{"class":129},[84,41339,1504],{"class":94},[84,41341,162],{"class":154},[84,41343,41344],{"class":86,"line":10989},[84,41345,39278],{"class":154},[84,41347,41348],{"class":86,"line":10995},[84,41349,39916],{"class":1378},[84,41351,41352,41354,41356,41358],{"class":86,"line":11016},[84,41353,31999],{"class":94},[84,41355,39923],{"class":154},[84,41357,867],{"class":129},[84,41359,39161],{"class":154},[84,41361,41362],{"class":86,"line":11022},[84,41363,39932],{"class":1378},[84,41365,41366],{"class":86,"line":11036},[84,41367,39937],{"class":1378},[84,41369,41370],{"class":86,"line":11042},[84,41371,39942],{"class":154},[84,41373,41374,41376,41378,41380,41382,41384,41386,41388,41390],{"class":86,"line":11069},[84,41375,39947],{"class":154},[84,41377,1679],{"class":94},[84,41379,1043],{"class":129},[84,41381,1679],{"class":94},[84,41383,1043],{"class":129},[84,41385,39609],{"class":94},[84,41387,1688],{"class":154},[84,41389,36022],{"class":94},[84,41391,39199],{"class":154},[84,41393,41394],{"class":86,"line":11078},[84,41395,39204],{"class":154},[84,41397,41398,41400,41402,41404,41406],{"class":86,"line":11084},[84,41399,39947],{"class":154},[84,41401,36022],{"class":94},[84,41403,1688],{"class":154},[84,41405,33223],{"class":94},[84,41407,39199],{"class":154},[84,41409,41410],{"class":86,"line":11092},[84,41411,39204],{"class":154},[84,41413,41414,41416,41418,41420,41422],{"class":86,"line":11097},[84,41415,39947],{"class":154},[84,41417,33223],{"class":94},[84,41419,1688],{"class":154},[84,41421,1756],{"class":94},[84,41423,162],{"class":154},[84,41425,41426],{"class":86,"line":17774},[84,41427,39278],{"class":154},[84,41429,41430],{"class":86,"line":17780},[84,41431,3578],{"emptyLinePlaceholder":1252},[84,41433,41434],{"class":86,"line":17803},[84,41435,40008],{"class":1378},[84,41437,41438],{"class":86,"line":17809},[84,41439,40013],{"class":1378},[84,41441,41442,41444,41446,41448,41450],{"class":86,"line":17832},[84,41443,4581],{"class":129},[84,41445,40020],{"class":154},[84,41447,27206],{"class":129},[84,41449,40025],{"class":94},[84,41451,40028],{"class":154},[84,41453,41454],{"class":86,"line":17846},[84,41455,40033],{"class":1378},[84,41457,41458,41460,41462],{"class":86,"line":17866},[84,41459,5819],{"class":129},[84,41461,40040],{"class":94},[84,41463,40043],{"class":154},[84,41465,41466],{"class":86,"line":17872},[84,41467,40048],{"class":1378},[84,41469,41470,41472,41474,41476,41478],{"class":86,"line":17883},[84,41471,40053],{"class":154},[84,41473,40056],{"class":928},[84,41475,867],{"class":129},[84,41477,40061],{"class":158},[84,41479,162],{"class":154},[84,41481,41482],{"class":86,"line":17906},[84,41483,40068],{"class":1378},[84,41485,41486,41488,41490,41492,41494,41496],{"class":86,"line":17928},[84,41487,40073],{"class":129},[84,41489,40076],{"class":154},[84,41491,40079],{"class":129},[84,41493,40082],{"class":129},[84,41495,40085],{"class":94},[84,41497,4917],{"class":154},[84,41499,41500],{"class":86,"line":17933},[84,41501,40092],{"class":1378},[84,41503,41504,41506,41508],{"class":86,"line":17939},[84,41505,40097],{"class":154},[84,41507,1504],{"class":94},[84,41509,162],{"class":154},[84,41511,41512],{"class":86,"line":17953},[84,41513,40106],{"class":1378},[84,41515,41516,41518,41520],{"class":86,"line":17966},[84,41517,40111],{"class":129},[84,41519,40040],{"class":94},[84,41521,40116],{"class":154},[84,41523,41524],{"class":86,"line":17971},[84,41525,40121],{"class":1378},[84,41527,41528],{"class":86,"line":17985},[84,41529,40126],{"class":1378},[84,41531,41532,41534,41536,41538,41540],{"class":86,"line":17990},[84,41533,40131],{"class":154},[84,41535,1504],{"class":94},[84,41537,1688],{"class":154},[84,41539,40138],{"class":94},[84,41541,162],{"class":154},[84,41543,41544],{"class":86,"line":17996},[84,41545,40145],{"class":1378},[84,41547,41548,41550,41552,41554,41556,41558],{"class":86,"line":18001},[84,41549,40073],{"class":129},[84,41551,40076],{"class":154},[84,41553,40079],{"class":129},[84,41555,40082],{"class":129},[84,41557,40085],{"class":94},[84,41559,4917],{"class":154},[84,41561,41562,41564,41566],{"class":86,"line":18015},[84,41563,40097],{"class":154},[84,41565,1504],{"class":94},[84,41567,162],{"class":154},[84,41569,41570],{"class":86,"line":18020},[84,41571,3578],{"emptyLinePlaceholder":1252},[84,41573,41574],{"class":86,"line":18025},[84,41575,36317],{"class":1378},[84,41577,41578,41580,41582],{"class":86,"line":18039},[84,41579,31955],{"class":129},[84,41581,32247],{"class":90},[84,41583,32250],{"class":154},[84,41585,41586,41588,41590,41592],{"class":86,"line":18051},[84,41587,32255],{"class":154},[84,41589,867],{"class":129},[84,41591,31977],{"class":94},[84,41593,40194],{"class":154},[84,41595,41596,41598,41600,41602],{"class":86,"line":18056},[84,41597,32255],{"class":154},[84,41599,867],{"class":129},[84,41601,31977],{"class":94},[84,41603,40205],{"class":154},[84,41605,41606,41608,41610,41612],{"class":86,"line":18069},[84,41607,32255],{"class":154},[84,41609,867],{"class":129},[84,41611,31977],{"class":94},[84,41613,40216],{"class":154},[84,41615,41616,41618,41620,41622],{"class":86,"line":18074},[84,41617,32255],{"class":154},[84,41619,867],{"class":129},[84,41621,31977],{"class":94},[84,41623,40227],{"class":154},[84,41625,41626,41628,41630,41632],{"class":86,"line":18079},[84,41627,32255],{"class":154},[84,41629,867],{"class":129},[84,41631,31977],{"class":94},[84,41633,40238],{"class":154},[84,41635,41636,41638,41640,41642],{"class":86,"line":18084},[84,41637,32255],{"class":154},[84,41639,867],{"class":129},[84,41641,31977],{"class":94},[84,41643,40249],{"class":154},[84,41645,41646,41648],{"class":86,"line":18097},[84,41647,15922],{"class":129},[84,41649,32363],{"class":154},[84,41651,41652],{"class":86,"line":18102},[84,41653,3578],{"emptyLinePlaceholder":1252},[84,41655,41656],{"class":86,"line":33785},[84,41657,40264],{"class":1378},[84,41659,41660,41662,41664,41666,41668],{"class":86,"line":33791},[84,41661,2712],{"class":129},[84,41663,32374],{"class":94},[84,41665,4127],{"class":129},[84,41667,40275],{"class":158},[84,41669,4917],{"class":154},[84,41671,41672,41674,41676,41678,41680,41682,41684,41686,41688],{"class":86,"line":33797},[84,41673,32391],{"class":154},[84,41675,867],{"class":129},[84,41677,31605],{"class":154},[84,41679,32398],{"class":158},[84,41681,2885],{"class":129},[84,41683,32403],{"class":154},[84,41685,2882],{"class":129},[84,41687,31630],{"class":158},[84,41689,162],{"class":154},[84,41691,41692,41694],{"class":86,"line":33803},[84,41693,32453],{"class":94},[84,41695,31639],{"class":154},[84,41697,41698,41700,41702],{"class":86,"line":33809},[84,41699,32443],{"class":154},[84,41701,867],{"class":129},[84,41703,40312],{"class":154},[84,41705,41706,41708,41710,41712,41714,41716,41718,41720],{"class":86,"line":33820},[84,41707,32453],{"class":94},[84,41709,32456],{"class":154},[84,41711,1529],{"class":94},[84,41713,1688],{"class":154},[84,41715,32654],{"class":94},[84,41717,1688],{"class":154},[84,41719,32654],{"class":94},[84,41721,32469],{"class":154},[26,41723,41724],{"start":106},[29,41725,41726],{},"测试代码",[60,41728,41730],{"className":121,"code":41729,"language":91,"meta":66,"style":66},"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",[39,41731,41732,41738,41748,41758,41762,41772,41783,41787,41791,41795,41803,41819,41829,41845,41855,41869,41873,41883,41893,41903,41909,41913,41917,41925,41929,41945,41953,41957,41961,41969,41977,41981,41985,41989,41993,41999,42003,42013,42021,42029,42033,42037,42041,42049,42053,42069,42073,42077,42081,42093,42097,42109,42113,42117,42129,42133,42143,42147,42151,42163,42167,42176,42180,42184,42192,42196,42204,42208,42212,42216,42220,42224,42240,42248,42252,42256,42304,42310,42314,42324,42332,42340,42344,42348,42352,42356,42364,42368,42384,42388,42396,42404],{"__ignoreMap":66},[84,41733,41734,41736],{"class":86,"line":87},[84,41735,31547],{"class":129},[84,41737,31550],{"class":154},[84,41739,41740,41742,41744,41746],{"class":86,"line":98},[84,41741,31547],{"class":129},[84,41743,32568],{"class":154},[84,41745,1157],{"class":129},[84,41747,32573],{"class":154},[84,41749,41750,41752,41754,41756],{"class":86,"line":106},[84,41751,31891],{"class":129},[84,41753,32551],{"class":154},[84,41755,31547],{"class":129},[84,41757,32556],{"class":154},[84,41759,41760],{"class":86,"line":112},[84,41761,35074],{"class":1378},[84,41763,41764,41766,41768,41770],{"class":86,"line":425},[84,41765,31891],{"class":129},[84,41767,32522],{"class":154},[84,41769,31547],{"class":129},[84,41771,32527],{"class":154},[84,41773,41774,41776,41778,41780],{"class":86,"line":2395},[84,41775,31891],{"class":129},[84,41777,33067],{"class":154},[84,41779,31547],{"class":129},[84,41781,41782],{"class":94}," VGG16\n",[84,41784,41785],{"class":86,"line":2401},[84,41786,3578],{"emptyLinePlaceholder":1252},[84,41788,41789],{"class":86,"line":2492},[84,41790,3578],{"emptyLinePlaceholder":1252},[84,41792,41793],{"class":86,"line":2498},[84,41794,35103],{"class":1378},[84,41796,41797,41799,41801],{"class":86,"line":2510},[84,41798,33100],{"class":129},[84,41800,35110],{"class":90},[84,41802,33106],{"class":154},[84,41804,41805,41807,41809,41811,41813,41815,41817],{"class":86,"line":2793},[84,41806,35117],{"class":154},[84,41808,867],{"class":129},[84,41810,32608],{"class":154},[84,41812,32611],{"class":928},[84,41814,867],{"class":129},[84,41816,32616],{"class":158},[84,41818,32619],{"class":154},[84,41820,41821,41823,41825,41827],{"class":86,"line":2798},[84,41822,35134],{"class":928},[84,41824,867],{"class":129},[84,41826,35139],{"class":94},[84,41828,32619],{"class":154},[84,41830,41831,41833,41835,41837,41839,41841,41843],{"class":86,"line":2804},[84,41832,35146],{"class":928},[84,41834,867],{"class":129},[84,41836,32646],{"class":154},[84,41838,32649],{"class":928},[84,41840,867],{"class":129},[84,41842,32654],{"class":94},[84,41844,32657],{"class":154},[84,41846,41847,41849,41851,41853],{"class":86,"line":2809},[84,41848,35163],{"class":928},[84,41850,867],{"class":129},[84,41852,32629],{"class":94},[84,41854,162],{"class":154},[84,41856,41857,41859,41861,41863,41865,41867],{"class":86,"line":2823},[84,41858,35174],{"class":154},[84,41860,867],{"class":129},[84,41862,32687],{"class":154},[84,41864,32690],{"class":928},[84,41866,867],{"class":129},[84,41868,35185],{"class":154},[84,41870,41871],{"class":86,"line":2828},[84,41872,35190],{"class":1378},[84,41874,41875,41877,41879,41881],{"class":86,"line":2834},[84,41876,35195],{"class":928},[84,41878,867],{"class":129},[84,41880,1529],{"class":94},[84,41882,32619],{"class":154},[84,41884,41885,41887,41889,41891],{"class":86,"line":2855},[84,41886,35206],{"class":928},[84,41888,867],{"class":129},[84,41890,32629],{"class":94},[84,41892,32619],{"class":154},[84,41894,41895,41897,41899,41901],{"class":86,"line":2860},[84,41896,35217],{"class":928},[84,41898,867],{"class":129},[84,41900,1504],{"class":94},[84,41902,162],{"class":154},[84,41904,41905,41907],{"class":86,"line":2874},[84,41906,5268],{"class":129},[84,41908,35230],{"class":154},[84,41910,41911],{"class":86,"line":2879},[84,41912,3578],{"emptyLinePlaceholder":1252},[84,41914,41915],{"class":86,"line":2908},[84,41916,35239],{"class":1378},[84,41918,41919,41921,41923],{"class":86,"line":2913},[84,41920,33100],{"class":129},[84,41922,35246],{"class":90},[84,41924,35249],{"class":154},[84,41926,41927],{"class":86,"line":2930},[84,41928,35254],{"class":1378},[84,41930,41931,41933,41935,41937,41939,41941,41943],{"class":86,"line":2935},[84,41932,32391],{"class":154},[84,41934,867],{"class":129},[84,41936,32398],{"class":158},[84,41938,2885],{"class":129},[84,41940,32403],{"class":154},[84,41942,2882],{"class":129},[84,41944,35271],{"class":158},[84,41946,41947,41949,41951],{"class":86,"line":2940},[84,41948,32443],{"class":154},[84,41950,867],{"class":129},[84,41952,33442],{"class":154},[84,41954,41955],{"class":86,"line":2945},[84,41956,3578],{"emptyLinePlaceholder":1252},[84,41958,41959],{"class":86,"line":2959},[84,41960,35288],{"class":1378},[84,41962,41963,41965,41967],{"class":86,"line":2964},[84,41964,35293],{"class":154},[84,41966,867],{"class":129},[84,41968,33495],{"class":94},[84,41970,41971,41973,41975],{"class":86,"line":3755},[84,41972,35302],{"class":154},[84,41974,867],{"class":129},[84,41976,4263],{"class":94},[84,41978,41979],{"class":86,"line":3769},[84,41980,3578],{"emptyLinePlaceholder":1252},[84,41982,41983],{"class":86,"line":3777},[84,41984,35315],{"class":1378},[84,41986,41987],{"class":86,"line":3782},[84,41988,35320],{"class":1378},[84,41990,41991],{"class":86,"line":3788},[84,41992,35325],{"class":1378},[84,41994,41995,41997],{"class":86,"line":3794},[84,41996,35330],{"class":129},[84,41998,34036],{"class":154},[84,42000,42001],{"class":86,"line":3799},[84,42002,35337],{"class":1378},[84,42004,42005,42007,42009,42011],{"class":86,"line":9120},[84,42006,4581],{"class":129},[84,42008,35344],{"class":154},[84,42010,27206],{"class":129},[84,42012,35349],{"class":154},[84,42014,42015,42017,42019],{"class":86,"line":9144},[84,42016,35354],{"class":154},[84,42018,867],{"class":129},[84,42020,35359],{"class":154},[84,42022,42023,42025,42027],{"class":86,"line":9149},[84,42024,35364],{"class":154},[84,42026,867],{"class":129},[84,42028,35369],{"class":154},[84,42030,42031],{"class":86,"line":9155},[84,42032,35374],{"class":1378},[84,42034,42035],{"class":86,"line":9182},[84,42036,34027],{"class":154},[84,42038,42039],{"class":86,"line":9187},[84,42040,35383],{"class":1378},[84,42042,42043,42045,42047],{"class":86,"line":9193},[84,42044,33812],{"class":154},[84,42046,867],{"class":129},[84,42048,35392],{"class":154},[84,42050,42051],{"class":86,"line":9205},[84,42052,35397],{"class":1378},[84,42054,42055,42057,42059,42061,42063,42065,42067],{"class":86,"line":9217},[84,42056,33829],{"class":154},[84,42058,867],{"class":129},[84,42060,33834],{"class":154},[84,42062,33837],{"class":928},[84,42064,867],{"class":129},[84,42066,1529],{"class":94},[84,42068,162],{"class":154},[84,42070,42071],{"class":86,"line":9229},[84,42072,35418],{"class":1378},[84,42074,42075],{"class":86,"line":10888},[84,42076,35423],{"class":1378},[84,42078,42079],{"class":86,"line":10913},[84,42080,35428],{"class":1378},[84,42082,42083,42085,42087,42089,42091],{"class":86,"line":10936},[84,42084,35433],{"class":154},[84,42086,10649],{"class":129},[84,42088,33939],{"class":154},[84,42090,4127],{"class":129},[84,42092,35442],{"class":154},[84,42094,42095],{"class":86,"line":10960},[84,42096,35447],{"class":1378},[84,42098,42099,42101,42103,42105,42107],{"class":86,"line":10965},[84,42100,35452],{"class":154},[84,42102,10649],{"class":129},[84,42104,35457],{"class":154},[84,42106,1504],{"class":94},[84,42108,162],{"class":154},[84,42110,42111],{"class":86,"line":10970},[84,42112,3578],{"emptyLinePlaceholder":1252},[84,42114,42115],{"class":86,"line":10975},[84,42116,35470],{"class":1378},[84,42118,42119,42121,42123,42125,42127],{"class":86,"line":10984},[84,42120,35475],{"class":154},[84,42122,867],{"class":129},[84,42124,35480],{"class":154},[84,42126,1893],{"class":129},[84,42128,35485],{"class":154},[84,42130,42131],{"class":86,"line":10989},[84,42132,35490],{"class":1378},[84,42134,42135,42137,42139,42141],{"class":86,"line":10995},[84,42136,33604],{"class":94},[84,42138,155],{"class":154},[84,42140,35499],{"class":158},[84,42142,35502],{"class":154},[84,42144,42145],{"class":86,"line":11016},[84,42146,3578],{"emptyLinePlaceholder":1252},[84,42148,42149],{"class":86,"line":11022},[84,42150,35511],{"class":1378},[84,42152,42153,42155,42157,42159,42161],{"class":86,"line":11036},[84,42154,2712],{"class":129},[84,42156,32374],{"class":94},[84,42158,4127],{"class":129},[84,42160,32379],{"class":158},[84,42162,4917],{"class":154},[84,42164,42165],{"class":86,"line":11042},[84,42166,35528],{"class":1378},[84,42168,42169,42171,42173],{"class":86,"line":11069},[84,42170,32443],{"class":154},[84,42172,867],{"class":129},[84,42174,42175],{"class":154},"VGG16()\n",[84,42177,42178],{"class":86,"line":11078},[84,42179,35541],{"class":1378},[84,42181,42182],{"class":86,"line":11084},[84,42183,35546],{"class":1378},[84,42185,42186,42188,42190],{"class":86,"line":11092},[84,42187,35551],{"class":154},[84,42189,35554],{"class":158},[84,42191,31651],{"class":154},[84,42193,42194],{"class":86,"line":11097},[84,42195,35561],{"class":1378},[84,42197,42198,42200,42202],{"class":86,"line":17774},[84,42199,35174],{"class":154},[84,42201,867],{"class":129},[84,42203,35570],{"class":154},[84,42205,42206],{"class":86,"line":17780},[84,42207,35575],{"class":1378},[84,42209,42210],{"class":86,"line":17803},[84,42211,35580],{"class":154},[84,42213,42214],{"class":86,"line":17809},[84,42215,3578],{"emptyLinePlaceholder":1252},[84,42217,42218],{"class":86,"line":17832},[84,42219,35589],{"class":1378},[84,42221,42222],{"class":86,"line":17846},[84,42223,35594],{"class":1378},[84,42225,42226,42228,42230,42232,42234,42236,42238],{"class":86,"line":17866},[84,42227,32391],{"class":154},[84,42229,867],{"class":129},[84,42231,32398],{"class":158},[84,42233,2885],{"class":129},[84,42235,32403],{"class":154},[84,42237,2882],{"class":129},[84,42239,35271],{"class":158},[84,42241,42242,42244,42246],{"class":86,"line":17872},[84,42243,32443],{"class":154},[84,42245,867],{"class":129},[84,42247,33442],{"class":154},[84,42249,42250],{"class":86,"line":17883},[84,42251,35623],{"class":1378},[84,42253,42254],{"class":86,"line":17906},[84,42255,35628],{"class":1378},[84,42257,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302],{"class":86,"line":17928},[84,42259,35633],{"class":154},[84,42261,867],{"class":129},[84,42263,2198],{"class":154},[84,42265,35640],{"class":158},[84,42267,1688],{"class":154},[84,42269,35645],{"class":158},[84,42271,1688],{"class":154},[84,42273,35650],{"class":158},[84,42275,1688],{"class":154},[84,42277,35655],{"class":158},[84,42279,1688],{"class":154},[84,42281,35660],{"class":158},[84,42283,1688],{"class":154},[84,42285,35665],{"class":158},[84,42287,1688],{"class":154},[84,42289,35670],{"class":158},[84,42291,1688],{"class":154},[84,42293,35675],{"class":158},[84,42295,1688],{"class":154},[84,42297,35680],{"class":158},[84,42299,1688],{"class":154},[84,42301,35685],{"class":158},[84,42303,34398],{"class":154},[84,42305,42306,42308],{"class":86,"line":17933},[84,42307,35330],{"class":129},[84,42309,34036],{"class":154},[84,42311,42312],{"class":86,"line":17939},[84,42313,35698],{"class":1378},[84,42315,42316,42318,42320,42322],{"class":86,"line":17953},[84,42317,4581],{"class":129},[84,42319,35705],{"class":154},[84,42321,27206],{"class":129},[84,42323,35349],{"class":154},[84,42325,42326,42328,42330],{"class":86,"line":17966},[84,42327,33762],{"class":154},[84,42329,867],{"class":129},[84,42331,33767],{"class":154},[84,42333,42334,42336,42338],{"class":86,"line":17971},[84,42335,33777],{"class":154},[84,42337,867],{"class":129},[84,42339,33782],{"class":154},[84,42341,42342],{"class":86,"line":17985},[84,42343,3578],{"emptyLinePlaceholder":1252},[84,42345,42346],{"class":86,"line":17990},[84,42347,35734],{"class":1378},[84,42349,42350],{"class":86,"line":17996},[84,42351,34027],{"class":154},[84,42353,42354],{"class":86,"line":18001},[84,42355,35743],{"class":1378},[84,42357,42358,42360,42362],{"class":86,"line":18015},[84,42359,33812],{"class":154},[84,42361,867],{"class":129},[84,42363,33817],{"class":154},[84,42365,42366],{"class":86,"line":18020},[84,42367,35756],{"class":1378},[84,42369,42370,42372,42374,42376,42378,42380,42382],{"class":86,"line":18025},[84,42371,33829],{"class":154},[84,42373,867],{"class":129},[84,42375,33834],{"class":154},[84,42377,33837],{"class":928},[84,42379,867],{"class":129},[84,42381,1529],{"class":94},[84,42383,162],{"class":154},[84,42385,42386],{"class":86,"line":18039},[84,42387,35777],{"class":1378},[84,42389,42390,42392,42394],{"class":86,"line":18051},[84,42391,35782],{"class":154},[84,42393,867],{"class":129},[84,42395,35787],{"class":154},[84,42397,42398,42400,42402],{"class":86,"line":18056},[84,42399,35792],{"class":154},[84,42401,867],{"class":129},[84,42403,35797],{"class":154},[84,42405,42406,42408,42410,42412,42414,42416,42418,42420],{"class":86,"line":18069},[84,42407,35802],{"class":94},[84,42409,155],{"class":154},[84,42411,35807],{"class":158},[84,42413,35810],{"class":154},[84,42415,35813],{"class":158},[84,42417,1688],{"class":154},[84,42419,35818],{"class":158},[84,42421,35821],{"class":154},[198,42423,42425],{"id":42424},"_23googlenet","2.3.GoogLeNet",[23168,42427,42429],{"id":42428},"_231原理","2.3.1.原理",[26,42431,42432],{},[29,42433,42434],{},"网络结构",[19,42436,42437],{},[2643,42438],{"alt":66,"src":42439},"\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,42441,42442],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42444,42445],{},[2643,42446],{"alt":66,"src":42447},"\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,42449,42450],{},[2643,42451],{"alt":66,"src":42452},"\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,42454,42455],{},[2643,42456],{"alt":66,"src":42457},"\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",[26,42459,42460],{"start":98},[29,42461,42462],{},"1x1卷积的优点",[19,42464,42465],{},[2643,42466],{"alt":66,"src":42467},"\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",[26,42469,42470],{"start":106},[29,42471,42472],{},"全局平均池化层优点",[19,42474,42475],{},[2643,42476],{"alt":66,"src":42477},"\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,42479,42480],{},[2643,42481],{"alt":66,"src":42482},"\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",[26,42484,42485],{"start":112},[29,42486,42487],{},"参数详细描述",[19,42489,42490],{},[2643,42491],{"alt":66,"src":42492},"\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,42494,42495],{},[2643,42496],{"alt":66,"src":42497},"\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,42499,42500],{},[2643,42501],{"alt":66,"src":42502},"\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,42504,42505],{},[2643,42506],{"alt":66,"src":42507},"\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,42509,42510],{},[2643,42511],{"alt":66,"src":42512},"\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,42514,42515],{},[2643,42516],{"alt":66,"src":42517},"\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,42519,42520],{},[2643,42521],{"alt":66,"src":42522},"\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,42524,42525],{},[2643,42526],{"alt":66,"src":42527},"\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,42529,42530],{},[2643,42531],{"alt":66,"src":42532},"\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,42534,42535],{},[2643,42536],{"alt":66,"src":42537},"\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,42539,42540],{},[2643,42541],{"alt":66,"src":42542},"\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,42544,42545],{},[2643,42546],{"alt":66,"src":42547},"\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,42549,42550],{},[2643,42551],{"alt":66,"src":42552},"\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,42554,42555],{},[2643,42556],{"alt":66,"src":42557},"\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,42559,42560],{},[2643,42561],{"alt":66,"src":42562},"\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,42564,42565],{},[2643,42566],{"alt":66,"src":42567},"\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,42569,42570],{},[2643,42571],{"alt":66,"src":42572},"\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,42574,42575],{},[2643,42576],{"alt":66,"src":42577},"\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,42579,42580],{},[2643,42581],{"alt":66,"src":42582},"\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,42584,42585],{},[2643,42586],{"alt":66,"src":42587},"\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,42589,42590],{},[2643,42591],{"alt":66,"src":42592},"\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",[23168,42594,42596],{"id":42595},"_232代码实现","2.3.2.代码实现",[26,42598,42599],{},[29,42600,31865],{},[19,42602,42603],{},"根据原理一步一步搭建即可",[60,42605,42607],{"className":121,"code":42606,"language":91,"meta":66,"style":66},"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",[39,42608,42609,42615,42625,42635,42639,42656,42665,42680,42690,42695,42728,42733,42770,42817,42822,42858,42905,42910,42915,42950,42982,42986,42994,43010,43034,43059,43080,43085,43100,43104,43108,43113,43130,43135,43144,43159,43170,43214,43218,43246,43250,43261,43289,43293,43330,43334,43362,43366,43377,43413,43445,43473,43477,43488,43522,43554,43586,43619,43653,43681,43685,43696,43729,43761,43775,43779,43792,43796,43801,43813,43821,43843,43848,43853,43858,43863,43868,43873,43887,43895,43904,43917,43932,43941,43945,43953,43964,43975,43986,43997,44008,44014,44018,44023,44035,44055,44064],{"__ignoreMap":66},[84,42610,42611,42613],{"class":86,"line":87},[84,42612,31547],{"class":129},[84,42614,31550],{"class":154},[84,42616,42617,42619,42621,42623],{"class":86,"line":98},[84,42618,31891],{"class":129},[84,42620,31894],{"class":154},[84,42622,31547],{"class":129},[84,42624,31899],{"class":154},[84,42626,42627,42629,42631,42633],{"class":86,"line":106},[84,42628,31891],{"class":129},[84,42630,31911],{"class":154},[84,42632,31547],{"class":129},[84,42634,31916],{"class":154},[84,42636,42637],{"class":86,"line":112},[84,42638,3578],{"emptyLinePlaceholder":1252},[84,42640,42641,42643,42646,42648,42650,42652,42654],{"class":86,"line":425},[84,42642,15864],{"class":129},[84,42644,42645],{"class":90}," Inception",[84,42647,155],{"class":154},[84,42649,31932],{"class":90},[84,42651,1867],{"class":154},[84,42653,31937],{"class":90},[84,42655,31940],{"class":154},[84,42657,42658,42660,42662],{"class":86,"line":2395},[84,42659,31955],{"class":129},[84,42661,31958],{"class":94},[84,42663,42664],{"class":154},"(self,in_channels,c1,c2,c3,c4):\n",[84,42666,42667,42669,42672,42674,42676,42678],{"class":86,"line":2401},[84,42668,31971],{"class":94},[84,42670,42671],{"class":154},"(Inception,",[84,42673,31977],{"class":94},[84,42675,31980],{"class":154},[84,42677,31983],{"class":94},[84,42679,183],{"class":154},[84,42681,42682,42684,42686,42688],{"class":86,"line":2492},[84,42683,31999],{"class":94},[84,42685,35923],{"class":154},[84,42687,867],{"class":129},[84,42689,35928],{"class":154},[84,42691,42692],{"class":86,"line":2498},[84,42693,42694],{"class":1378},"        # 路线1：定义1*1卷积\n",[84,42696,42697,42699,42702,42704,42706,42708,42710,42713,42715,42717,42720,42722,42724,42726],{"class":86,"line":2510},[84,42698,31999],{"class":94},[84,42700,42701],{"class":154},".p1_1",[84,42703,867],{"class":129},[84,42705,32007],{"class":154},[84,42707,32010],{"class":928},[84,42709,867],{"class":129},[84,42711,42712],{"class":154},"in_channels,",[84,42714,32019],{"class":928},[84,42716,867],{"class":129},[84,42718,42719],{"class":154},"c1,",[84,42721,32028],{"class":928},[84,42723,867],{"class":129},[84,42725,1529],{"class":94},[84,42727,162],{"class":154},[84,42729,42730],{"class":86,"line":2793},[84,42731,42732],{"class":1378},"        # 路线2：定义1*1卷积和3*3\n",[84,42734,42735,42737,42740,42742,42744,42746,42748,42750,42752,42754,42757,42759,42762,42764,42766,42768],{"class":86,"line":2798},[84,42736,31999],{"class":94},[84,42738,42739],{"class":154},".p2_1",[84,42741,867],{"class":129},[84,42743,32007],{"class":154},[84,42745,32010],{"class":928},[84,42747,867],{"class":129},[84,42749,42712],{"class":154},[84,42751,32019],{"class":928},[84,42753,867],{"class":129},[84,42755,42756],{"class":154},"c2[",[84,42758,1504],{"class":94},[84,42760,42761],{"class":154},"],",[84,42763,32028],{"class":928},[84,42765,867],{"class":129},[84,42767,1529],{"class":94},[84,42769,162],{"class":154},[84,42771,42772,42774,42777,42779,42781,42783,42785,42787,42789,42791,42793,42795,42797,42799,42801,42803,42805,42807,42809,42811,42813,42815],{"class":86,"line":2804},[84,42773,31999],{"class":94},[84,42775,42776],{"class":154},".p2_2",[84,42778,867],{"class":129},[84,42780,32007],{"class":154},[84,42782,32010],{"class":928},[84,42784,867],{"class":129},[84,42786,42756],{"class":154},[84,42788,1504],{"class":94},[84,42790,42761],{"class":154},[84,42792,32019],{"class":928},[84,42794,867],{"class":129},[84,42796,42756],{"class":154},[84,42798,1529],{"class":94},[84,42800,42761],{"class":154},[84,42802,32028],{"class":928},[84,42804,867],{"class":129},[84,42806,1391],{"class":94},[84,42808,1688],{"class":154},[84,42810,32037],{"class":928},[84,42812,867],{"class":129},[84,42814,1529],{"class":94},[84,42816,162],{"class":154},[84,42818,42819],{"class":86,"line":2809},[84,42820,42821],{"class":1378},"        # 路线3：定义1*1卷积和5*5\n",[84,42823,42824,42826,42829,42831,42833,42835,42837,42839,42841,42843,42846,42848,42850,42852,42854,42856],{"class":86,"line":2823},[84,42825,31999],{"class":94},[84,42827,42828],{"class":154},".p3_1",[84,42830,867],{"class":129},[84,42832,32007],{"class":154},[84,42834,32010],{"class":928},[84,42836,867],{"class":129},[84,42838,42712],{"class":154},[84,42840,32019],{"class":928},[84,42842,867],{"class":129},[84,42844,42845],{"class":154},"c3[",[84,42847,1504],{"class":94},[84,42849,42761],{"class":154},[84,42851,32028],{"class":928},[84,42853,867],{"class":129},[84,42855,1529],{"class":94},[84,42857,162],{"class":154},[84,42859,42860,42862,42865,42867,42869,42871,42873,42875,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903],{"class":86,"line":2828},[84,42861,31999],{"class":94},[84,42863,42864],{"class":154},".p3_2",[84,42866,867],{"class":129},[84,42868,32007],{"class":154},[84,42870,32010],{"class":928},[84,42872,867],{"class":129},[84,42874,42845],{"class":154},[84,42876,1504],{"class":94},[84,42878,42761],{"class":154},[84,42880,32019],{"class":928},[84,42882,867],{"class":129},[84,42884,42845],{"class":154},[84,42886,1529],{"class":94},[84,42888,42761],{"class":154},[84,42890,32028],{"class":928},[84,42892,867],{"class":129},[84,42894,1629],{"class":94},[84,42896,1688],{"class":154},[84,42898,32037],{"class":928},[84,42900,867],{"class":129},[84,42902,1397],{"class":94},[84,42904,162],{"class":154},[84,42906,42907],{"class":86,"line":2834},[84,42908,42909],{"class":1378},"        # 路线4：定义3*3最大池化和1*1卷积\n",[84,42911,42912],{"class":86,"line":2855},[84,42913,42914],{"class":1378},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[84,42916,42917,42919,42922,42924,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948],{"class":86,"line":2860},[84,42918,31999],{"class":94},[84,42920,42921],{"class":154},".p4_1",[84,42923,867],{"class":129},[84,42925,35981],{"class":154},[84,42927,32028],{"class":928},[84,42929,867],{"class":129},[84,42931,1391],{"class":94},[84,42933,1688],{"class":154},[84,42935,32083],{"class":928},[84,42937,867],{"class":129},[84,42939,1529],{"class":94},[84,42941,1688],{"class":154},[84,42943,32037],{"class":928},[84,42945,867],{"class":129},[84,42947,1529],{"class":94},[84,42949,162],{"class":154},[84,42951,42952,42954,42957,42959,42961,42963,42965,42967,42969,42971,42974,42976,42978,42980],{"class":86,"line":2874},[84,42953,31999],{"class":94},[84,42955,42956],{"class":154},".p4_2",[84,42958,867],{"class":129},[84,42960,32007],{"class":154},[84,42962,32010],{"class":928},[84,42964,867],{"class":129},[84,42966,42712],{"class":154},[84,42968,32019],{"class":928},[84,42970,867],{"class":129},[84,42972,42973],{"class":154},"c4,",[84,42975,32028],{"class":928},[84,42977,867],{"class":129},[84,42979,1529],{"class":94},[84,42981,162],{"class":154},[84,42983,42984],{"class":86,"line":2879},[84,42985,3578],{"emptyLinePlaceholder":1252},[84,42987,42988,42990,42992],{"class":86,"line":2908},[84,42989,31955],{"class":129},[84,42991,32247],{"class":90},[84,42993,32250],{"class":154},[84,42995,42996,42999,43001,43003,43005,43007],{"class":86,"line":2913},[84,42997,42998],{"class":154},"        p1",[84,43000,867],{"class":129},[84,43002,31977],{"class":94},[84,43004,36336],{"class":154},[84,43006,31977],{"class":94},[84,43008,43009],{"class":154},".p1_1(x))\n",[84,43011,43012,43014,43016,43018,43020,43022,43025,43027,43029,43031],{"class":86,"line":2930},[84,43013,8257],{"class":154},[84,43015,867],{"class":129},[84,43017,31977],{"class":94},[84,43019,36336],{"class":154},[84,43021,31977],{"class":94},[84,43023,43024],{"class":154},".p2_2(",[84,43026,31977],{"class":94},[84,43028,36336],{"class":154},[84,43030,31977],{"class":94},[84,43032,43033],{"class":154},".p2_1(x))))\n",[84,43035,43036,43039,43041,43043,43045,43047,43050,43052,43054,43056],{"class":86,"line":2935},[84,43037,43038],{"class":154},"        p3",[84,43040,867],{"class":129},[84,43042,31977],{"class":94},[84,43044,36336],{"class":154},[84,43046,31977],{"class":94},[84,43048,43049],{"class":154},".p3_2(",[84,43051,31977],{"class":94},[84,43053,36336],{"class":154},[84,43055,31977],{"class":94},[84,43057,43058],{"class":154},".p3_1(x))))\n",[84,43060,43061,43064,43066,43068,43070,43072,43075,43077],{"class":86,"line":2940},[84,43062,43063],{"class":154},"        p4",[84,43065,867],{"class":129},[84,43067,31977],{"class":94},[84,43069,36336],{"class":154},[84,43071,31977],{"class":94},[84,43073,43074],{"class":154},".p4_2(",[84,43076,31977],{"class":94},[84,43078,43079],{"class":154},".p4_1(x)))\n",[84,43081,43082],{"class":86,"line":2945},[84,43083,43084],{"class":1378},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[84,43086,43087,43089,43092,43094,43096,43098],{"class":86,"line":2959},[84,43088,15922],{"class":129},[84,43090,43091],{"class":154}," torch.cat((p1,p2,p3,p4),",[84,43093,33837],{"class":928},[84,43095,867],{"class":129},[84,43097,1529],{"class":94},[84,43099,162],{"class":154},[84,43101,43102],{"class":86,"line":2964},[84,43103,3578],{"emptyLinePlaceholder":1252},[84,43105,43106],{"class":86,"line":3755},[84,43107,3578],{"emptyLinePlaceholder":1252},[84,43109,43110],{"class":86,"line":3769},[84,43111,43112],{"class":1378},"# 搭建GoogLeNet网络\n",[84,43114,43115,43117,43120,43122,43124,43126,43128],{"class":86,"line":3777},[84,43116,15864],{"class":129},[84,43118,43119],{"class":90}," GoogLeNet",[84,43121,155],{"class":154},[84,43123,31932],{"class":90},[84,43125,1867],{"class":154},[84,43127,31937],{"class":90},[84,43129,31940],{"class":154},[84,43131,43132],{"class":86,"line":3782},[84,43133,43134],{"class":1378},"    # 必须把Inception导入到里边\n",[84,43136,43137,43139,43141],{"class":86,"line":3788},[84,43138,31955],{"class":129},[84,43140,31958],{"class":94},[84,43142,43143],{"class":154},"(self,Inception):\n",[84,43145,43146,43148,43151,43153,43155,43157],{"class":86,"line":3794},[84,43147,31971],{"class":94},[84,43149,43150],{"class":154},"(GoogLeNet,",[84,43152,31977],{"class":94},[84,43154,31980],{"class":154},[84,43156,31983],{"class":94},[84,43158,183],{"class":154},[84,43160,43161,43163,43166,43168],{"class":86,"line":3799},[84,43162,31999],{"class":94},[84,43164,43165],{"class":154},".b1",[84,43167,867],{"class":129},[84,43169,39161],{"class":154},[84,43171,43172,43174,43176,43178,43180,43182,43184,43186,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210,43212],{"class":86,"line":9120},[84,43173,39166],{"class":154},[84,43175,32010],{"class":928},[84,43177,867],{"class":129},[84,43179,1529],{"class":94},[84,43181,1688],{"class":154},[84,43183,32019],{"class":928},[84,43185,867],{"class":129},[84,43187,1516],{"class":94},[84,43189,1688],{"class":154},[84,43191,32028],{"class":928},[84,43193,867],{"class":129},[84,43195,1679],{"class":94},[84,43197,1688],{"class":154},[84,43199,32083],{"class":928},[84,43201,867],{"class":129},[84,43203,1397],{"class":94},[84,43205,1688],{"class":154},[84,43207,32037],{"class":928},[84,43209,867],{"class":129},[84,43211,1391],{"class":94},[84,43213,39199],{"class":154},[84,43215,43216],{"class":86,"line":9144},[84,43217,39204],{"class":154},[84,43219,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244],{"class":86,"line":9149},[84,43221,39249],{"class":154},[84,43223,32028],{"class":928},[84,43225,867],{"class":129},[84,43227,1391],{"class":94},[84,43229,1688],{"class":154},[84,43231,32083],{"class":928},[84,43233,867],{"class":129},[84,43235,1397],{"class":94},[84,43237,1688],{"class":154},[84,43239,32037],{"class":928},[84,43241,867],{"class":129},[84,43243,1529],{"class":94},[84,43245,162],{"class":154},[84,43247,43248],{"class":86,"line":9155},[84,43249,39278],{"class":154},[84,43251,43252,43254,43257,43259],{"class":86,"line":9182},[84,43253,31999],{"class":94},[84,43255,43256],{"class":154},".b2",[84,43258,867],{"class":129},[84,43260,39161],{"class":154},[84,43262,43263,43265,43267,43269,43271,43273,43275,43277,43279,43281,43283,43285,43287],{"class":86,"line":9187},[84,43264,39166],{"class":154},[84,43266,32010],{"class":928},[84,43268,867],{"class":129},[84,43270,1516],{"class":94},[84,43272,1688],{"class":154},[84,43274,32019],{"class":928},[84,43276,867],{"class":129},[84,43278,1516],{"class":94},[84,43280,1688],{"class":154},[84,43282,32028],{"class":928},[84,43284,867],{"class":129},[84,43286,1529],{"class":94},[84,43288,39199],{"class":154},[84,43290,43291],{"class":86,"line":9193},[84,43292,39204],{"class":154},[84,43294,43295,43297,43299,43301,43303,43305,43307,43309,43312,43314,43316,43318,43320,43322,43324,43326,43328],{"class":86,"line":9205},[84,43296,39166],{"class":154},[84,43298,32010],{"class":928},[84,43300,867],{"class":129},[84,43302,1516],{"class":94},[84,43304,1688],{"class":154},[84,43306,32019],{"class":928},[84,43308,867],{"class":129},[84,43310,43311],{"class":94},"192",[84,43313,1688],{"class":154},[84,43315,32028],{"class":928},[84,43317,867],{"class":129},[84,43319,1391],{"class":94},[84,43321,1688],{"class":154},[84,43323,32037],{"class":928},[84,43325,867],{"class":129},[84,43327,1529],{"class":94},[84,43329,39199],{"class":154},[84,43331,43332],{"class":86,"line":9217},[84,43333,39204],{"class":154},[84,43335,43336,43338,43340,43342,43344,43346,43348,43350,43352,43354,43356,43358,43360],{"class":86,"line":9229},[84,43337,39249],{"class":154},[84,43339,32028],{"class":928},[84,43341,867],{"class":129},[84,43343,1391],{"class":94},[84,43345,1688],{"class":154},[84,43347,32083],{"class":928},[84,43349,867],{"class":129},[84,43351,1397],{"class":94},[84,43353,1688],{"class":154},[84,43355,32037],{"class":928},[84,43357,867],{"class":129},[84,43359,1529],{"class":94},[84,43361,162],{"class":154},[84,43363,43364],{"class":86,"line":10888},[84,43365,39278],{"class":154},[84,43367,43368,43370,43373,43375],{"class":86,"line":10913},[84,43369,31999],{"class":94},[84,43371,43372],{"class":154},".b3",[84,43374,867],{"class":129},[84,43376,39161],{"class":154},[84,43378,43379,43382,43384,43386,43388,43391,43393,43395,43397,43400,43402,43404,43406,43409,43411],{"class":86,"line":10936},[84,43380,43381],{"class":154},"            Inception(",[84,43383,43311],{"class":94},[84,43385,1688],{"class":154},[84,43387,1516],{"class":94},[84,43389,43390],{"class":154},",(",[84,43392,1522],{"class":94},[84,43394,1688],{"class":154},[84,43396,33223],{"class":94},[84,43398,43399],{"class":154},"),(",[84,43401,1910],{"class":94},[84,43403,1688],{"class":154},[84,43405,1510],{"class":94},[84,43407,43408],{"class":154},"),",[84,43410,1510],{"class":94},[84,43412,39199],{"class":154},[84,43414,43415,43417,43419,43421,43423,43425,43427,43429,43431,43433,43435,43437,43439,43441,43443],{"class":86,"line":10960},[84,43416,43381],{"class":154},[84,43418,36022],{"class":94},[84,43420,1688],{"class":154},[84,43422,33223],{"class":94},[84,43424,43390],{"class":154},[84,43426,33223],{"class":94},[84,43428,1688],{"class":154},[84,43430,43311],{"class":94},[84,43432,43399],{"class":154},[84,43434,1510],{"class":94},[84,43436,1688],{"class":154},[84,43438,1522],{"class":94},[84,43440,43408],{"class":154},[84,43442,1516],{"class":94},[84,43444,39199],{"class":154},[84,43446,43447,43449,43451,43453,43455,43457,43459,43461,43463,43465,43467,43469,43471],{"class":86,"line":10965},[84,43448,39249],{"class":154},[84,43450,32028],{"class":928},[84,43452,867],{"class":129},[84,43454,1391],{"class":94},[84,43456,1688],{"class":154},[84,43458,32083],{"class":928},[84,43460,867],{"class":129},[84,43462,1397],{"class":94},[84,43464,1688],{"class":154},[84,43466,32037],{"class":928},[84,43468,867],{"class":129},[84,43470,1529],{"class":94},[84,43472,162],{"class":154},[84,43474,43475],{"class":86,"line":10970},[84,43476,39278],{"class":154},[84,43478,43479,43481,43484,43486],{"class":86,"line":10975},[84,43480,31999],{"class":94},[84,43482,43483],{"class":154},".b4",[84,43485,867],{"class":129},[84,43487,39161],{"class":154},[84,43489,43490,43492,43495,43497,43499,43501,43503,43505,43508,43510,43512,43514,43516,43518,43520],{"class":86,"line":10984},[84,43491,43381],{"class":154},[84,43493,43494],{"class":94},"480",[84,43496,1688],{"class":154},[84,43498,43311],{"class":94},[84,43500,43390],{"class":154},[84,43502,1522],{"class":94},[84,43504,1688],{"class":154},[84,43506,43507],{"class":94},"208",[84,43509,43399],{"class":154},[84,43511,1910],{"class":94},[84,43513,1688],{"class":154},[84,43515,1916],{"class":94},[84,43517,43408],{"class":154},[84,43519,1516],{"class":94},[84,43521,39199],{"class":154},[84,43523,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548,43550,43552],{"class":86,"line":10989},[84,43525,43381],{"class":154},[84,43527,39609],{"class":94},[84,43529,1688],{"class":154},[84,43531,22218],{"class":94},[84,43533,43390],{"class":154},[84,43535,1927],{"class":94},[84,43537,1688],{"class":154},[84,43539,32654],{"class":94},[84,43541,43399],{"class":154},[84,43543,2108],{"class":94},[84,43545,1688],{"class":154},[84,43547,1516],{"class":94},[84,43549,43408],{"class":154},[84,43551,1516],{"class":94},[84,43553,39199],{"class":154},[84,43555,43556,43558,43560,43562,43564,43566,43568,43570,43572,43574,43576,43578,43580,43582,43584],{"class":86,"line":10995},[84,43557,43381],{"class":154},[84,43559,39609],{"class":94},[84,43561,1688],{"class":154},[84,43563,33223],{"class":94},[84,43565,43390],{"class":154},[84,43567,33223],{"class":94},[84,43569,1688],{"class":154},[84,43571,36022],{"class":94},[84,43573,43399],{"class":154},[84,43575,2108],{"class":94},[84,43577,1688],{"class":154},[84,43579,1516],{"class":94},[84,43581,43408],{"class":154},[84,43583,1516],{"class":94},[84,43585,39199],{"class":154},[84,43587,43588,43590,43592,43594,43596,43598,43600,43602,43605,43607,43609,43611,43613,43615,43617],{"class":86,"line":11016},[84,43589,43381],{"class":154},[84,43591,39609],{"class":94},[84,43593,1688],{"class":154},[84,43595,1927],{"class":94},[84,43597,43390],{"class":154},[84,43599,33223],{"class":94},[84,43601,1688],{"class":154},[84,43603,43604],{"class":94},"288",[84,43606,43399],{"class":154},[84,43608,1510],{"class":94},[84,43610,1688],{"class":154},[84,43612,1516],{"class":94},[84,43614,43408],{"class":154},[84,43616,1516],{"class":94},[84,43618,39199],{"class":154},[84,43620,43621,43623,43626,43628,43630,43632,43634,43636,43639,43641,43643,43645,43647,43649,43651],{"class":86,"line":11022},[84,43622,43381],{"class":154},[84,43624,43625],{"class":94},"528",[84,43627,1688],{"class":154},[84,43629,36022],{"class":94},[84,43631,43390],{"class":154},[84,43633,22218],{"class":94},[84,43635,1688],{"class":154},[84,43637,43638],{"class":94},"320",[84,43640,43399],{"class":154},[84,43642,1510],{"class":94},[84,43644,1688],{"class":154},[84,43646,33223],{"class":94},[84,43648,43408],{"class":154},[84,43650,33223],{"class":94},[84,43652,39199],{"class":154},[84,43654,43655,43657,43659,43661,43663,43665,43667,43669,43671,43673,43675,43677,43679],{"class":86,"line":11036},[84,43656,39249],{"class":154},[84,43658,32028],{"class":928},[84,43660,867],{"class":129},[84,43662,1391],{"class":94},[84,43664,1688],{"class":154},[84,43666,32083],{"class":928},[84,43668,867],{"class":129},[84,43670,1397],{"class":94},[84,43672,1688],{"class":154},[84,43674,32037],{"class":928},[84,43676,867],{"class":129},[84,43678,1529],{"class":94},[84,43680,162],{"class":154},[84,43682,43683],{"class":86,"line":11042},[84,43684,39278],{"class":154},[84,43686,43687,43689,43692,43694],{"class":86,"line":11069},[84,43688,31999],{"class":94},[84,43690,43691],{"class":154},".b5",[84,43693,867],{"class":129},[84,43695,39161],{"class":154},[84,43697,43698,43700,43703,43705,43707,43709,43711,43713,43715,43717,43719,43721,43723,43725,43727],{"class":86,"line":11078},[84,43699,43381],{"class":154},[84,43701,43702],{"class":94},"832",[84,43704,1688],{"class":154},[84,43706,36022],{"class":94},[84,43708,43390],{"class":154},[84,43710,22218],{"class":94},[84,43712,1688],{"class":154},[84,43714,43638],{"class":94},[84,43716,43399],{"class":154},[84,43718,1510],{"class":94},[84,43720,1688],{"class":154},[84,43722,33223],{"class":94},[84,43724,43408],{"class":154},[84,43726,33223],{"class":94},[84,43728,39199],{"class":154},[84,43730,43731,43733,43735,43737,43739,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759],{"class":86,"line":11084},[84,43732,43381],{"class":154},[84,43734,43702],{"class":94},[84,43736,1688],{"class":154},[84,43738,36092],{"class":94},[84,43740,43390],{"class":154},[84,43742,43311],{"class":94},[84,43744,1688],{"class":154},[84,43746,36092],{"class":94},[84,43748,43399],{"class":154},[84,43750,1916],{"class":94},[84,43752,1688],{"class":154},[84,43754,33223],{"class":94},[84,43756,43408],{"class":154},[84,43758,33223],{"class":94},[84,43760,39199],{"class":154},[84,43762,43763,43766,43768,43770,43772],{"class":86,"line":11092},[84,43764,43765],{"class":154},"            nn.AdaptiveAvgPool2d((",[84,43767,1529],{"class":94},[84,43769,1688],{"class":154},[84,43771,1529],{"class":94},[84,43773,43774],{"class":154},")),\n",[84,43776,43777],{"class":86,"line":11097},[84,43778,39942],{"class":154},[84,43780,43781,43783,43786,43788,43790],{"class":86,"line":17774},[84,43782,39947],{"class":154},[84,43784,43785],{"class":94},"1024",[84,43787,1688],{"class":154},[84,43789,1756],{"class":94},[84,43791,162],{"class":154},[84,43793,43794],{"class":86,"line":17780},[84,43795,39278],{"class":154},[84,43797,43798],{"class":86,"line":17803},[84,43799,43800],{"class":1378},"        # 对模型参数初始化\n",[84,43802,43803,43805,43807,43809,43811],{"class":86,"line":17809},[84,43804,4581],{"class":129},[84,43806,40020],{"class":154},[84,43808,27206],{"class":129},[84,43810,40025],{"class":94},[84,43812,40028],{"class":154},[84,43814,43815,43817,43819],{"class":86,"line":17832},[84,43816,5819],{"class":129},[84,43818,40040],{"class":94},[84,43820,40043],{"class":154},[84,43822,43823,43825,43828,43830,43833,43835,43837,43839,43841],{"class":86,"line":17846},[84,43824,40053],{"class":154},[84,43826,43827],{"class":928},"mode",[84,43829,867],{"class":129},[84,43831,43832],{"class":158},"'fan_out'",[84,43834,1688],{"class":154},[84,43836,40056],{"class":928},[84,43838,867],{"class":129},[84,43840,40061],{"class":158},[84,43842,162],{"class":154},[84,43844,43845],{"class":86,"line":17866},[84,43846,43847],{"class":1378},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[84,43849,43850],{"class":86,"line":17872},[84,43851,43852],{"class":1378},"                # ② mode = 'fan_out'决定使用的fan值：\n",[84,43854,43855],{"class":86,"line":17883},[84,43856,43857],{"class":1378},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[84,43859,43860],{"class":86,"line":17906},[84,43861,43862],{"class":1378},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[84,43864,43865],{"class":86,"line":17928},[84,43866,43867],{"class":1378},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[84,43869,43870],{"class":86,"line":17933},[84,43871,43872],{"class":1378},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[84,43874,43875,43877,43879,43881,43883,43885],{"class":86,"line":17939},[84,43876,40073],{"class":129},[84,43878,40076],{"class":154},[84,43880,40079],{"class":129},[84,43882,40082],{"class":129},[84,43884,40085],{"class":94},[84,43886,4917],{"class":154},[84,43888,43889,43891,43893],{"class":86,"line":17953},[84,43890,40097],{"class":154},[84,43892,1504],{"class":94},[84,43894,162],{"class":154},[84,43896,43897,43900,43902],{"class":86,"line":17966},[84,43898,43899],{"class":129},"                elif",[84,43901,40040],{"class":94},[84,43903,40116],{"class":154},[84,43905,43906,43909,43911,43913,43915],{"class":86,"line":17971},[84,43907,43908],{"class":154},"                    nn.init.normal_(m.weight,",[84,43910,1504],{"class":94},[84,43912,1688],{"class":154},[84,43914,40138],{"class":94},[84,43916,162],{"class":154},[84,43918,43919,43922,43924,43926,43928,43930],{"class":86,"line":17985},[84,43920,43921],{"class":129},"                    if",[84,43923,40076],{"class":154},[84,43925,40079],{"class":129},[84,43927,40082],{"class":129},[84,43929,40085],{"class":94},[84,43931,4917],{"class":154},[84,43933,43934,43937,43939],{"class":86,"line":17990},[84,43935,43936],{"class":154},"                        nn.init.constant_(m.bias,",[84,43938,1504],{"class":94},[84,43940,162],{"class":154},[84,43942,43943],{"class":86,"line":17996},[84,43944,36317],{"class":1378},[84,43946,43947,43949,43951],{"class":86,"line":18001},[84,43948,31955],{"class":129},[84,43950,32247],{"class":90},[84,43952,32250],{"class":154},[84,43954,43955,43957,43959,43961],{"class":86,"line":18015},[84,43956,32255],{"class":154},[84,43958,867],{"class":129},[84,43960,31977],{"class":94},[84,43962,43963],{"class":154},".b1(x)\n",[84,43965,43966,43968,43970,43972],{"class":86,"line":18020},[84,43967,32255],{"class":154},[84,43969,867],{"class":129},[84,43971,31977],{"class":94},[84,43973,43974],{"class":154},".b2(x)\n",[84,43976,43977,43979,43981,43983],{"class":86,"line":18025},[84,43978,32255],{"class":154},[84,43980,867],{"class":129},[84,43982,31977],{"class":94},[84,43984,43985],{"class":154},".b3(x)\n",[84,43987,43988,43990,43992,43994],{"class":86,"line":18039},[84,43989,32255],{"class":154},[84,43991,867],{"class":129},[84,43993,31977],{"class":94},[84,43995,43996],{"class":154},".b4(x)\n",[84,43998,43999,44001,44003,44005],{"class":86,"line":18051},[84,44000,32255],{"class":154},[84,44002,867],{"class":129},[84,44004,31977],{"class":94},[84,44006,44007],{"class":154},".b5(x)\n",[84,44009,44010,44012],{"class":86,"line":18056},[84,44011,15922],{"class":129},[84,44013,32363],{"class":154},[84,44015,44016],{"class":86,"line":18069},[84,44017,3578],{"emptyLinePlaceholder":1252},[84,44019,44020],{"class":86,"line":18074},[84,44021,44022],{"class":1378},"# 模型展示\n",[84,44024,44025,44027,44029,44031,44033],{"class":86,"line":18079},[84,44026,2712],{"class":129},[84,44028,32374],{"class":94},[84,44030,4127],{"class":129},[84,44032,32379],{"class":158},[84,44034,4917],{"class":154},[84,44036,44037,44039,44041,44043,44045,44047,44049,44051,44053],{"class":86,"line":18084},[84,44038,32391],{"class":154},[84,44040,867],{"class":129},[84,44042,31605],{"class":154},[84,44044,32398],{"class":158},[84,44046,2885],{"class":129},[84,44048,32403],{"class":154},[84,44050,2882],{"class":129},[84,44052,31630],{"class":158},[84,44054,162],{"class":154},[84,44056,44057,44059,44061],{"class":86,"line":18097},[84,44058,32443],{"class":154},[84,44060,867],{"class":129},[84,44062,44063],{"class":154},"GoogLeNet(Inception).to(device)\n",[84,44065,44066,44068,44070,44072,44074,44076,44078,44080],{"class":86,"line":18102},[84,44067,32453],{"class":94},[84,44069,32456],{"class":154},[84,44071,1529],{"class":94},[84,44073,1688],{"class":154},[84,44075,32654],{"class":94},[84,44077,1688],{"class":154},[84,44079,32654],{"class":94},[84,44081,32469],{"class":154},[26,44083,44084],{"start":98},[29,44085,40335],{},[60,44087,44089],{"className":121,"code":44088,"language":91,"meta":66,"style":66},"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",[39,44090,44091,44097,44103,44113,44119,44129,44139,44149,44159,44169,44173,44184,44194,44198,44202,44206,44214,44226,44236,44252,44262,44294,44308,44318,44328,44332,44342,44356,44366,44376,44386,44392,44396,44400,44404,44408,44412,44420,44440,44444,44448,44452,44456,44460,44476,44480,44484,44492,44496,44500,44508,44512,44516,44520,44528,44532,44536,44540,44544,44552,44556,44564,44568,44576,44580,44588,44592,44600,44604,44608,44616,44620,44624,44628,44640,44664,44678,44682,44686,44690,44698,44702,44710,44714,44722,44726,44734,44738,44746,44750,44758,44762,44774,44778,44786,44790,44798,44802,44806,44810,44814,44822,44826,44842,44846,44854,44858,44862,44866,44870,44874,44878,44882,44898,44902,44914,44918,44930,44934,44946,44950,44958,44962,44970,44974,44978,44982,44988,44992,45000,45004,45020,45024,45032,45036,45052,45064,45068,45080,45084,45088,45096,45100,45104,45112,45116,45124,45128,45136,45140,45144,45186,45228,45232,45236,45252,45256,45272,45276,45280,45288,45292,45296,45308,45346,45350,45354,45362,45366,45380,45390,45396,45402,45408,45414,45418,45422,45428,45432,45436,45444,45448,45466,45470,45474,45478,45494,45498,45502,45506,45510,45514,45534,45554,45558,45562,45566,45574,45582,45586,45602,45622,45642,45646,45650,45658,45666,45670,45674,45678,45690,45694,45704,45712,45729],{"__ignoreMap":66},[84,44092,44093,44095],{"class":86,"line":87},[84,44094,31547],{"class":129},[84,44096,32975],{"class":154},[84,44098,44099,44101],{"class":86,"line":98},[84,44100,31547],{"class":129},[84,44102,32982],{"class":154},[84,44104,44105,44107,44109,44111],{"class":86,"line":106},[84,44106,31547],{"class":129},[84,44108,32993],{"class":154},[84,44110,1157],{"class":129},[84,44112,32998],{"class":154},[84,44114,44115,44117],{"class":86,"line":112},[84,44116,31547],{"class":129},[84,44118,31550],{"class":154},[84,44120,44121,44123,44125,44127],{"class":86,"line":425},[84,44122,31891],{"class":129},[84,44124,32568],{"class":154},[84,44126,31547],{"class":129},[84,44128,33015],{"class":154},[84,44130,44131,44133,44135,44137],{"class":86,"line":2395},[84,44132,31891],{"class":129},[84,44134,32522],{"class":154},[84,44136,31547],{"class":129},[84,44138,32527],{"class":154},[84,44140,44141,44143,44145,44147],{"class":86,"line":2401},[84,44142,31891],{"class":129},[84,44144,32551],{"class":154},[84,44146,31547],{"class":129},[84,44148,32556],{"class":154},[84,44150,44151,44153,44155,44157],{"class":86,"line":2492},[84,44152,31547],{"class":129},[84,44154,32568],{"class":154},[84,44156,1157],{"class":129},[84,44158,32573],{"class":154},[84,44160,44161,44163,44165,44167],{"class":86,"line":2498},[84,44162,31547],{"class":129},[84,44164,32585],{"class":154},[84,44166,1157],{"class":129},[84,44168,32590],{"class":154},[84,44170,44171],{"class":86,"line":2510},[84,44172,33060],{"class":1378},[84,44174,44175,44177,44179,44181],{"class":86,"line":2793},[84,44176,31891],{"class":129},[84,44178,33067],{"class":154},[84,44180,31547],{"class":129},[84,44182,44183],{"class":154}," GoogLeNet, Inception\n",[84,44185,44186,44188,44190,44192],{"class":86,"line":2798},[84,44187,31891],{"class":129},[84,44189,31894],{"class":154},[84,44191,31547],{"class":129},[84,44193,31899],{"class":154},[84,44195,44196],{"class":86,"line":2804},[84,44197,3578],{"emptyLinePlaceholder":1252},[84,44199,44200],{"class":86,"line":2809},[84,44201,3578],{"emptyLinePlaceholder":1252},[84,44203,44204],{"class":86,"line":2823},[84,44205,33095],{"class":1378},[84,44207,44208,44210,44212],{"class":86,"line":2828},[84,44209,33100],{"class":129},[84,44211,33103],{"class":90},[84,44213,33106],{"class":154},[84,44215,44216,44218,44220,44222,44224],{"class":86,"line":2834},[84,44217,33111],{"class":154},[84,44219,867],{"class":129},[84,44221,32608],{"class":154},[84,44223,32616],{"class":158},[84,44225,32619],{"class":154},[84,44227,44228,44230,44232,44234],{"class":86,"line":2855},[84,44229,33124],{"class":928},[84,44231,867],{"class":129},[84,44233,32629],{"class":94},[84,44235,32619],{"class":154},[84,44237,44238,44240,44242,44244,44246,44248,44250],{"class":86,"line":2860},[84,44239,33135],{"class":928},[84,44241,867],{"class":129},[84,44243,32646],{"class":154},[84,44245,32649],{"class":928},[84,44247,867],{"class":129},[84,44249,36601],{"class":94},[84,44251,32657],{"class":154},[84,44253,44254,44256,44258,44260],{"class":86,"line":2874},[84,44255,33152],{"class":928},[84,44257,867],{"class":129},[84,44259,32629],{"class":94},[84,44261,162],{"class":154},[84,44263,44264,44266,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288,44290,44292],{"class":86,"line":2879},[84,44265,33163],{"class":154},[84,44267,867],{"class":129},[84,44269,33168],{"class":154},[84,44271,33171],{"class":94},[84,44273,155],{"class":154},[84,44275,33176],{"class":94},[84,44277,1043],{"class":129},[84,44279,8530],{"class":94},[84,44281,33183],{"class":154},[84,44283,33171],{"class":94},[84,44285,155],{"class":154},[84,44287,33190],{"class":94},[84,44289,1043],{"class":129},[84,44291,8530],{"class":94},[84,44293,33197],{"class":154},[84,44295,44296,44298,44300,44302,44304,44306],{"class":86,"line":2908},[84,44297,33202],{"class":154},[84,44299,867],{"class":129},[84,44301,33207],{"class":154},[84,44303,32690],{"class":928},[84,44305,867],{"class":129},[84,44307,32695],{"class":154},[84,44309,44310,44312,44314,44316],{"class":86,"line":2913},[84,44311,33218],{"class":928},[84,44313,867],{"class":129},[84,44315,1510],{"class":94},[84,44317,32619],{"class":154},[84,44319,44320,44322,44324,44326],{"class":86,"line":2930},[84,44321,33230],{"class":928},[84,44323,867],{"class":129},[84,44325,32629],{"class":94},[84,44327,32619],{"class":154},[84,44329,44330],{"class":86,"line":2935},[84,44331,33241],{"class":1378},[84,44333,44334,44336,44338,44340],{"class":86,"line":2940},[84,44335,33246],{"class":928},[84,44337,867],{"class":129},[84,44339,1705],{"class":94},[84,44341,162],{"class":154},[84,44343,44344,44346,44348,44350,44352,44354],{"class":86,"line":2945},[84,44345,33257],{"class":154},[84,44347,867],{"class":129},[84,44349,32687],{"class":154},[84,44351,32690],{"class":928},[84,44353,867],{"class":129},[84,44355,33268],{"class":154},[84,44357,44358,44360,44362,44364],{"class":86,"line":2959},[84,44359,33273],{"class":928},[84,44361,867],{"class":129},[84,44363,1510],{"class":94},[84,44365,32619],{"class":154},[84,44367,44368,44370,44372,44374],{"class":86,"line":2964},[84,44369,33284],{"class":928},[84,44371,867],{"class":129},[84,44373,32629],{"class":94},[84,44375,32619],{"class":154},[84,44377,44378,44380,44382,44384],{"class":86,"line":3755},[84,44379,33295],{"class":928},[84,44381,867],{"class":129},[84,44383,1705],{"class":94},[84,44385,162],{"class":154},[84,44387,44388,44390],{"class":86,"line":3769},[84,44389,5268],{"class":129},[84,44391,33308],{"class":154},[84,44393,44394],{"class":86,"line":3777},[84,44395,3578],{"emptyLinePlaceholder":1252},[84,44397,44398],{"class":86,"line":3782},[84,44399,33317],{"class":1378},[84,44401,44402],{"class":86,"line":3788},[84,44403,33322],{"class":1378},[84,44405,44406],{"class":86,"line":3794},[84,44407,3578],{"emptyLinePlaceholder":1252},[84,44409,44410],{"class":86,"line":3799},[84,44411,33331],{"class":1378},[84,44413,44414,44416,44418],{"class":86,"line":9120},[84,44415,33100],{"class":129},[84,44417,33338],{"class":90},[84,44419,33341],{"class":154},[84,44421,44422,44424,44426,44428,44430,44432,44434,44436,44438],{"class":86,"line":9144},[84,44423,32391],{"class":154},[84,44425,867],{"class":129},[84,44427,31605],{"class":154},[84,44429,32398],{"class":158},[84,44431,2885],{"class":129},[84,44433,32403],{"class":154},[84,44435,2882],{"class":129},[84,44437,33360],{"class":158},[84,44439,162],{"class":154},[84,44441,44442],{"class":86,"line":9149},[84,44443,3578],{"emptyLinePlaceholder":1252},[84,44445,44446],{"class":86,"line":9155},[84,44447,3578],{"emptyLinePlaceholder":1252},[84,44449,44450],{"class":86,"line":9182},[84,44451,33375],{"class":1378},[84,44453,44454],{"class":86,"line":9187},[84,44455,33380],{"class":1378},[84,44457,44458],{"class":86,"line":9193},[84,44459,33385],{"class":1378},[84,44461,44462,44464,44466,44468,44470,44472,44474],{"class":86,"line":9205},[84,44463,33390],{"class":154},[84,44465,867],{"class":129},[84,44467,33395],{"class":154},[84,44469,33398],{"class":928},[84,44471,867],{"class":129},[84,44473,33403],{"class":94},[84,44475,162],{"class":154},[84,44477,44478],{"class":86,"line":9217},[84,44479,3578],{"emptyLinePlaceholder":1252},[84,44481,44482],{"class":86,"line":9229},[84,44483,33414],{"class":1378},[84,44485,44486,44488,44490],{"class":86,"line":10888},[84,44487,33419],{"class":154},[84,44489,867],{"class":129},[84,44491,33424],{"class":154},[84,44493,44494],{"class":86,"line":10913},[84,44495,3578],{"emptyLinePlaceholder":1252},[84,44497,44498],{"class":86,"line":10936},[84,44499,33433],{"class":1378},[84,44501,44502,44504,44506],{"class":86,"line":10960},[84,44503,32443],{"class":154},[84,44505,867],{"class":129},[84,44507,33442],{"class":154},[84,44509,44510],{"class":86,"line":10965},[84,44511,33447],{"class":1378},[84,44513,44514],{"class":86,"line":10970},[84,44515,33452],{"class":1378},[84,44517,44518],{"class":86,"line":10975},[84,44519,33457],{"class":1378},[84,44521,44522,44524,44526],{"class":86,"line":10984},[84,44523,33462],{"class":154},[84,44525,867],{"class":129},[84,44527,33467],{"class":154},[84,44529,44530],{"class":86,"line":10989},[84,44531,3578],{"emptyLinePlaceholder":1252},[84,44533,44534],{"class":86,"line":10995},[84,44535,3578],{"emptyLinePlaceholder":1252},[84,44537,44538],{"class":86,"line":11016},[84,44539,33480],{"class":1378},[84,44541,44542],{"class":86,"line":11022},[84,44543,33485],{"class":1378},[84,44545,44546,44548,44550],{"class":86,"line":11036},[84,44547,33490],{"class":154},[84,44549,867],{"class":129},[84,44551,33495],{"class":94},[84,44553,44554],{"class":86,"line":11042},[84,44555,33500],{"class":1378},[84,44557,44558,44560,44562],{"class":86,"line":11069},[84,44559,33505],{"class":154},[84,44561,867],{"class":129},[84,44563,33510],{"class":154},[84,44565,44566],{"class":86,"line":11078},[84,44567,33515],{"class":1378},[84,44569,44570,44572,44574],{"class":86,"line":11084},[84,44571,33520],{"class":154},[84,44573,867],{"class":129},[84,44575,33510],{"class":154},[84,44577,44578],{"class":86,"line":11092},[84,44579,33529],{"class":1378},[84,44581,44582,44584,44586],{"class":86,"line":11097},[84,44583,33534],{"class":154},[84,44585,867],{"class":129},[84,44587,33510],{"class":154},[84,44589,44590],{"class":86,"line":17774},[84,44591,33543],{"class":1378},[84,44593,44594,44596,44598],{"class":86,"line":17780},[84,44595,33548],{"class":154},[84,44597,867],{"class":129},[84,44599,33510],{"class":154},[84,44601,44602],{"class":86,"line":17803},[84,44603,3578],{"emptyLinePlaceholder":1252},[84,44605,44606],{"class":86,"line":17809},[84,44607,33561],{"class":1378},[84,44609,44610,44612,44614],{"class":86,"line":17832},[84,44611,33566],{"class":154},[84,44613,867],{"class":129},[84,44615,33571],{"class":154},[84,44617,44618],{"class":86,"line":17846},[84,44619,3578],{"emptyLinePlaceholder":1252},[84,44621,44622],{"class":86,"line":17866},[84,44623,3578],{"emptyLinePlaceholder":1252},[84,44625,44626],{"class":86,"line":17872},[84,44627,33584],{"class":1378},[84,44629,44630,44632,44634,44636,44638],{"class":86,"line":17883},[84,44631,4379],{"class":129},[84,44633,33591],{"class":154},[84,44635,27206],{"class":129},[84,44637,33596],{"class":94},[84,44639,33599],{"class":154},[84,44641,44642,44644,44646,44648,44650,44652,44654,44656,44658,44660,44662],{"class":86,"line":17906},[84,44643,33604],{"class":94},[84,44645,155],{"class":154},[84,44647,33609],{"class":158},[84,44649,33612],{"class":94},[84,44651,1893],{"class":158},[84,44653,33612],{"class":94},[84,44655,1562],{"class":158},[84,44657,33621],{"class":154},[84,44659,1841],{"class":129},[84,44661,1529],{"class":94},[84,44663,31651],{"class":154},[84,44665,44666,44668,44670,44672,44674,44676],{"class":86,"line":17928},[84,44667,33604],{"class":94},[84,44669,155],{"class":154},[84,44671,934],{"class":158},[84,44673,1043],{"class":129},[84,44675,1756],{"class":94},[84,44677,162],{"class":154},[84,44679,44680],{"class":86,"line":17933},[84,44681,3578],{"emptyLinePlaceholder":1252},[84,44683,44684],{"class":86,"line":17939},[84,44685,33650],{"class":1378},[84,44687,44688],{"class":86,"line":17953},[84,44689,33655],{"class":1378},[84,44691,44692,44694,44696],{"class":86,"line":17966},[84,44693,33660],{"class":154},[84,44695,867],{"class":129},[84,44697,33495],{"class":94},[84,44699,44700],{"class":86,"line":17971},[84,44701,33669],{"class":1378},[84,44703,44704,44706,44708],{"class":86,"line":17985},[84,44705,33674],{"class":154},[84,44707,867],{"class":129},[84,44709,4263],{"class":94},[84,44711,44712],{"class":86,"line":17990},[84,44713,33683],{"class":1378},[84,44715,44716,44718,44720],{"class":86,"line":17996},[84,44717,33688],{"class":154},[84,44719,867],{"class":129},[84,44721,33495],{"class":94},[84,44723,44724],{"class":86,"line":18001},[84,44725,33697],{"class":1378},[84,44727,44728,44730,44732],{"class":86,"line":18015},[84,44729,33702],{"class":154},[84,44731,867],{"class":129},[84,44733,4263],{"class":94},[84,44735,44736],{"class":86,"line":18020},[84,44737,33711],{"class":1378},[84,44739,44740,44742,44744],{"class":86,"line":18025},[84,44741,33716],{"class":154},[84,44743,867],{"class":129},[84,44745,4263],{"class":94},[84,44747,44748],{"class":86,"line":18039},[84,44749,33725],{"class":1378},[84,44751,44752,44754,44756],{"class":86,"line":18051},[84,44753,33730],{"class":154},[84,44755,867],{"class":129},[84,44757,4263],{"class":94},[84,44759,44760],{"class":86,"line":18056},[84,44761,33739],{"class":1378},[84,44763,44764,44766,44768,44770,44772],{"class":86,"line":18069},[84,44765,4581],{"class":129},[84,44767,32754],{"class":154},[84,44769,27206],{"class":129},[84,44771,32759],{"class":94},[84,44773,33752],{"class":154},[84,44775,44776],{"class":86,"line":18074},[84,44777,33757],{"class":1378},[84,44779,44780,44782,44784],{"class":86,"line":18079},[84,44781,33762],{"class":154},[84,44783,867],{"class":129},[84,44785,33767],{"class":154},[84,44787,44788],{"class":86,"line":18084},[84,44789,33772],{"class":1378},[84,44791,44792,44794,44796],{"class":86,"line":18097},[84,44793,33777],{"class":154},[84,44795,867],{"class":129},[84,44797,33782],{"class":154},[84,44799,44800],{"class":86,"line":18102},[84,44801,33788],{"class":1378},[84,44803,44804],{"class":86,"line":33785},[84,44805,33794],{"class":154},[84,44807,44808],{"class":86,"line":33791},[84,44809,33800],{"class":1378},[84,44811,44812],{"class":86,"line":33797},[84,44813,33806],{"class":1378},[84,44815,44816,44818,44820],{"class":86,"line":33803},[84,44817,33812],{"class":154},[84,44819,867],{"class":129},[84,44821,33817],{"class":154},[84,44823,44824],{"class":86,"line":33809},[84,44825,33823],{"class":1378},[84,44827,44828,44830,44832,44834,44836,44838,44840],{"class":86,"line":33820},[84,44829,33829],{"class":154},[84,44831,867],{"class":129},[84,44833,33834],{"class":154},[84,44835,33837],{"class":928},[84,44837,867],{"class":129},[84,44839,1529],{"class":94},[84,44841,162],{"class":154},[84,44843,44844],{"class":86,"line":33826},[84,44845,33849],{"class":1378},[84,44847,44848,44850,44852],{"class":86,"line":33846},[84,44849,33855],{"class":154},[84,44851,867],{"class":129},[84,44853,33860],{"class":154},[84,44855,44856],{"class":86,"line":33852},[84,44857,33866],{"class":1378},[84,44859,44860],{"class":86,"line":33863},[84,44861,33872],{"class":154},[84,44863,44864],{"class":86,"line":33869},[84,44865,33878],{"class":1378},[84,44867,44868],{"class":86,"line":33875},[84,44869,33884],{"class":154},[84,44871,44872],{"class":86,"line":33881},[84,44873,33890],{"class":1378},[84,44875,44876],{"class":86,"line":33887},[84,44877,33896],{"class":154},[84,44879,44880],{"class":86,"line":33893},[84,44881,33902],{"class":1378},[84,44883,44884,44886,44888,44890,44892,44894,44896],{"class":86,"line":33899},[84,44885,33908],{"class":154},[84,44887,10649],{"class":129},[84,44889,33913],{"class":154},[84,44891,1043],{"class":129},[84,44893,33918],{"class":154},[84,44895,1504],{"class":94},[84,44897,162],{"class":154},[84,44899,44900],{"class":86,"line":33905},[84,44901,33928],{"class":1378},[84,44903,44904,44906,44908,44910,44912],{"class":86,"line":33925},[84,44905,33934],{"class":154},[84,44907,10649],{"class":129},[84,44909,33939],{"class":154},[84,44911,4127],{"class":129},[84,44913,33944],{"class":154},[84,44915,44916],{"class":86,"line":33931},[84,44917,33950],{"class":1378},[84,44919,44920,44922,44924,44926,44928],{"class":86,"line":33947},[84,44921,33956],{"class":154},[84,44923,10649],{"class":129},[84,44925,33918],{"class":154},[84,44927,1504],{"class":94},[84,44929,162],{"class":154},[84,44931,44932],{"class":86,"line":33953},[84,44933,33970],{"class":1378},[84,44935,44936,44938,44940,44942,44944],{"class":86,"line":33967},[84,44937,4581],{"class":129},[84,44939,33978],{"class":154},[84,44941,27206],{"class":129},[84,44943,32759],{"class":94},[84,44945,33985],{"class":154},[84,44947,44948],{"class":86,"line":33973},[84,44949,33991],{"class":1378},[84,44951,44952,44954,44956],{"class":86,"line":33988},[84,44953,33762],{"class":154},[84,44955,867],{"class":129},[84,44957,33767],{"class":154},[84,44959,44960],{"class":86,"line":33994},[84,44961,34006],{"class":1378},[84,44963,44964,44966,44968],{"class":86,"line":34003},[84,44965,33777],{"class":154},[84,44967,867],{"class":129},[84,44969,33782],{"class":154},[84,44971,44972],{"class":86,"line":34009},[84,44973,34021],{"class":1378},[84,44975,44976],{"class":86,"line":34018},[84,44977,34027],{"class":154},[84,44979,44980],{"class":86,"line":34024},[84,44981,37508],{"class":1378},[84,44983,44984,44986],{"class":86,"line":34030},[84,44985,34033],{"class":129},[84,44987,34036],{"class":154},[84,44989,44990],{"class":86,"line":34039},[84,44991,34042],{"class":1378},[84,44993,44994,44996,44998],{"class":86,"line":34045},[84,44995,37523],{"class":154},[84,44997,867],{"class":129},[84,44999,33817],{"class":154},[84,45001,45002],{"class":86,"line":34056},[84,45003,34059],{"class":1378},[84,45005,45006,45008,45010,45012,45014,45016,45018],{"class":86,"line":34062},[84,45007,37536],{"class":154},[84,45009,867],{"class":129},[84,45011,33834],{"class":154},[84,45013,33837],{"class":928},[84,45015,867],{"class":129},[84,45017,1529],{"class":94},[84,45019,162],{"class":154},[84,45021,45022],{"class":86,"line":34081},[84,45023,34084],{"class":1378},[84,45025,45026,45028,45030],{"class":86,"line":34087},[84,45027,37557],{"class":154},[84,45029,867],{"class":129},[84,45031,33860],{"class":154},[84,45033,45034],{"class":86,"line":34098},[84,45035,34101],{"class":1378},[84,45037,45038,45040,45042,45044,45046,45048,45050],{"class":86,"line":34104},[84,45039,37570],{"class":154},[84,45041,10649],{"class":129},[84,45043,37575],{"class":154},[84,45045,1043],{"class":129},[84,45047,33918],{"class":154},[84,45049,1504],{"class":94},[84,45051,162],{"class":154},[84,45053,45054,45056,45058,45060,45062],{"class":86,"line":34124},[84,45055,37588],{"class":154},[84,45057,10649],{"class":129},[84,45059,33939],{"class":154},[84,45061,4127],{"class":129},[84,45063,33944],{"class":154},[84,45065,45066],{"class":86,"line":34140},[84,45067,37601],{"class":1378},[84,45069,45070,45072,45074,45076,45078],{"class":86,"line":34146},[84,45071,37606],{"class":154},[84,45073,10649],{"class":129},[84,45075,33918],{"class":154},[84,45077,1504],{"class":94},[84,45079,162],{"class":154},[84,45081,45082],{"class":86,"line":34160},[84,45083,34163],{"class":1378},[84,45085,45086],{"class":86,"line":34166},[84,45087,34169],{"class":1378},[84,45089,45090,45092,45094],{"class":86,"line":34172},[84,45091,34175],{"class":154},[84,45093,1893],{"class":129},[84,45095,34180],{"class":154},[84,45097,45098],{"class":86,"line":34183},[84,45099,34186],{"class":1378},[84,45101,45102],{"class":86,"line":34189},[84,45103,34192],{"class":1378},[84,45105,45106,45108,45110],{"class":86,"line":34195},[84,45107,34198],{"class":154},[84,45109,1893],{"class":129},[84,45111,34180],{"class":154},[84,45113,45114],{"class":86,"line":34205},[84,45115,34208],{"class":1378},[84,45117,45118,45120,45122],{"class":86,"line":34211},[84,45119,34214],{"class":154},[84,45121,1893],{"class":129},[84,45123,34219],{"class":154},[84,45125,45126],{"class":86,"line":34222},[84,45127,34225],{"class":1378},[84,45129,45130,45132,45134],{"class":86,"line":34228},[84,45131,34231],{"class":154},[84,45133,1893],{"class":129},[84,45135,34219],{"class":154},[84,45137,45138],{"class":86,"line":34238},[84,45139,3578],{"emptyLinePlaceholder":1252},[84,45141,45142],{"class":86,"line":34243},[84,45143,34246],{"class":1378},[84,45145,45146,45148,45150,45152,45154,45156,45158,45160,45162,45164,45166,45168,45170,45172,45174,45176,45178,45180,45182,45184],{"class":86,"line":34249},[84,45147,33604],{"class":94},[84,45149,155],{"class":154},[84,45151,4770],{"class":158},[84,45153,33612],{"class":94},[84,45155,34260],{"class":158},[84,45157,2204],{"class":94},[84,45159,34265],{"class":129},[84,45161,2254],{"class":94},[84,45163,34270],{"class":158},[84,45165,2204],{"class":94},[84,45167,34265],{"class":129},[84,45169,2254],{"class":94},[84,45171,4770],{"class":158},[84,45173,34281],{"class":154},[84,45175,1841],{"class":129},[84,45177,1529],{"class":94},[84,45179,34288],{"class":154},[84,45181,1841],{"class":129},[84,45183,1529],{"class":94},[84,45185,34295],{"class":154},[84,45187,45188,45190,45192,45194,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226],{"class":86,"line":34298},[84,45189,33604],{"class":94},[84,45191,155],{"class":154},[84,45193,4770],{"class":158},[84,45195,33612],{"class":94},[84,45197,34309],{"class":158},[84,45199,2204],{"class":94},[84,45201,34265],{"class":129},[84,45203,2254],{"class":94},[84,45205,34318],{"class":158},[84,45207,2204],{"class":94},[84,45209,34265],{"class":129},[84,45211,2254],{"class":94},[84,45213,4770],{"class":158},[84,45215,34329],{"class":154},[84,45217,1841],{"class":129},[84,45219,1529],{"class":94},[84,45221,34336],{"class":154},[84,45223,1841],{"class":129},[84,45225,1529],{"class":94},[84,45227,34295],{"class":154},[84,45229,45230],{"class":86,"line":34345},[84,45231,3578],{"emptyLinePlaceholder":1252},[84,45233,45234],{"class":86,"line":34350},[84,45235,34353],{"class":1378},[84,45237,45238,45240,45242,45244,45246,45248,45250],{"class":86,"line":34356},[84,45239,3675],{"class":129},[84,45241,34361],{"class":154},[84,45243,1841],{"class":129},[84,45245,1529],{"class":94},[84,45247,2248],{"class":154},[84,45249,2268],{"class":129},[84,45251,34372],{"class":154},[84,45253,45254],{"class":86,"line":34375},[84,45255,34378],{"class":1378},[84,45257,45258,45260,45262,45264,45266,45268,45270],{"class":86,"line":34381},[84,45259,34384],{"class":154},[84,45261,1362],{"class":94},[84,45263,867],{"class":129},[84,45265,34391],{"class":154},[84,45267,1841],{"class":129},[84,45269,1529],{"class":94},[84,45271,34398],{"class":154},[84,45273,45274],{"class":86,"line":34401},[84,45275,34404],{"class":1378},[84,45277,45278],{"class":86,"line":34407},[84,45279,34410],{"class":1378},[84,45281,45282,45284,45286],{"class":86,"line":34413},[84,45283,34416],{"class":154},[84,45285,867],{"class":129},[84,45287,33467],{"class":154},[84,45289,45290],{"class":86,"line":34423},[84,45291,3578],{"emptyLinePlaceholder":1252},[84,45293,45294],{"class":86,"line":34428},[84,45295,34431],{"class":1378},[84,45297,45298,45300,45302,45304,45306],{"class":86,"line":34434},[84,45299,34437],{"class":154},[84,45301,867],{"class":129},[84,45303,34442],{"class":154},[84,45305,1841],{"class":129},[84,45307,34447],{"class":154},[84,45309,45310,45312,45314,45316,45318,45320,45322,45324,45326,45328,45330,45332,45334,45336,45338,45340,45342,45344],{"class":86,"line":34450},[84,45311,33604],{"class":94},[84,45313,155],{"class":154},[84,45315,34457],{"class":158},[84,45317,2204],{"class":94},[84,45319,34462],{"class":129},[84,45321,2254],{"class":94},[84,45323,1853],{"class":158},[84,45325,2204],{"class":94},[84,45327,34462],{"class":129},[84,45329,2254],{"class":94},[84,45331,34475],{"class":158},[84,45333,34478],{"class":154},[84,45335,34481],{"class":129},[84,45337,2215],{"class":94},[84,45339,34486],{"class":154},[84,45341,1638],{"class":129},[84,45343,2215],{"class":94},[84,45345,31651],{"class":154},[84,45347,45348],{"class":86,"line":34495},[84,45349,37885],{"class":1378},[84,45351,45352],{"class":86,"line":34501},[84,45353,37890],{"class":1378},[84,45355,45356,45358,45360],{"class":86,"line":34507},[84,45357,37895],{"class":154},[84,45359,34519],{"class":158},[84,45361,162],{"class":154},[84,45363,45364],{"class":86,"line":34513},[84,45365,34539],{"class":1378},[84,45367,45368,45370,45372,45374,45376,45378],{"class":86,"line":34524},[84,45369,34545],{"class":154},[84,45371,867],{"class":129},[84,45373,34550],{"class":154},[84,45375,34553],{"class":928},[84,45377,867],{"class":129},[84,45379,2727],{"class":154},[84,45381,45382,45384,45386,45388],{"class":86,"line":34530},[84,45383,34563],{"class":158},[84,45385,2167],{"class":154},[84,45387,34568],{"class":94},[84,45389,34571],{"class":154},[84,45391,45392,45394],{"class":86,"line":34536},[84,45393,34577],{"class":158},[84,45395,34580],{"class":154},[84,45397,45398,45400],{"class":86,"line":34542},[84,45399,34586],{"class":158},[84,45401,34589],{"class":154},[84,45403,45404,45406],{"class":86,"line":34560},[84,45405,34595],{"class":158},[84,45407,34598],{"class":154},[84,45409,45410,45412],{"class":86,"line":34574},[84,45411,34604],{"class":158},[84,45413,34607],{"class":154},[84,45415,45416],{"class":86,"line":34583},[84,45417,34613],{"class":154},[84,45419,45420],{"class":86,"line":34592},[84,45421,34619],{"class":1378},[84,45423,45424,45426],{"class":86,"line":34601},[84,45425,5268],{"class":129},[84,45427,34627],{"class":154},[84,45429,45430],{"class":86,"line":34610},[84,45431,3578],{"emptyLinePlaceholder":1252},[84,45433,45434],{"class":86,"line":34616},[84,45435,34638],{"class":1378},[84,45437,45438,45440,45442],{"class":86,"line":34622},[84,45439,33100],{"class":129},[84,45441,34646],{"class":90},[84,45443,34649],{"class":154},[84,45445,45446],{"class":86,"line":34630},[84,45447,34655],{"class":1378},[84,45449,45450,45452,45454,45456,45458,45460,45462,45464],{"class":86,"line":34635},[84,45451,34661],{"class":154},[84,45453,32846],{"class":928},[84,45455,867],{"class":129},[84,45457,155],{"class":154},[84,45459,1807],{"class":94},[84,45461,1688],{"class":154},[84,45463,1604],{"class":94},[84,45465,31651],{"class":154},[84,45467,45468],{"class":86,"line":34641},[84,45469,34681],{"class":1378},[84,45471,45472],{"class":86,"line":34652},[84,45473,34687],{"class":1378},[84,45475,45476],{"class":86,"line":34658},[84,45477,34693],{"class":1378},[84,45479,45480,45482,45484,45486,45488,45490,45492],{"class":86,"line":34678},[84,45481,32880],{"class":154},[84,45483,1529],{"class":94},[84,45485,1688],{"class":154},[84,45487,1397],{"class":94},[84,45489,1688],{"class":154},[84,45491,1529],{"class":94},[84,45493,162],{"class":154},[84,45495,45496],{"class":86,"line":34684},[84,45497,34716],{"class":1378},[84,45499,45500],{"class":86,"line":34690},[84,45501,34722],{"class":1378},[84,45503,45504],{"class":86,"line":34696},[84,45505,34728],{"class":1378},[84,45507,45508],{"class":86,"line":34713},[84,45509,34734],{"class":1378},[84,45511,45512],{"class":86,"line":34719},[84,45513,34740],{"class":1378},[84,45515,45516,45518,45520,45522,45524,45526,45528,45530,45532],{"class":86,"line":34725},[84,45517,34746],{"class":154},[84,45519,34749],{"class":158},[84,45521,34752],{"class":154},[84,45523,34755],{"class":158},[84,45525,1688],{"class":154},[84,45527,34760],{"class":928},[84,45529,867],{"class":129},[84,45531,34765],{"class":158},[84,45533,162],{"class":154},[84,45535,45536,45538,45540,45542,45544,45546,45548,45550,45552],{"class":86,"line":34731},[84,45537,34746],{"class":154},[84,45539,34749],{"class":158},[84,45541,34777],{"class":154},[84,45543,34780],{"class":158},[84,45545,1688],{"class":154},[84,45547,34760],{"class":928},[84,45549,867],{"class":129},[84,45551,34789],{"class":158},[84,45553,162],{"class":154},[84,45555,45556],{"class":86,"line":34737},[84,45557,34797],{"class":1378},[84,45559,45560],{"class":86,"line":34743},[84,45561,34803],{"class":154},[84,45563,45564],{"class":86,"line":34770},[84,45565,34809],{"class":1378},[84,45567,45568,45570,45572],{"class":86,"line":34794},[84,45569,34815],{"class":154},[84,45571,34818],{"class":158},[84,45573,162],{"class":154},[84,45575,45576,45578,45580],{"class":86,"line":34800},[84,45577,34826],{"class":154},[84,45579,34829],{"class":158},[84,45581,162],{"class":154},[84,45583,45584],{"class":86,"line":34806},[84,45585,34837],{"class":1378},[84,45587,45588,45590,45592,45594,45596,45598,45600],{"class":86,"line":34812},[84,45589,32880],{"class":154},[84,45591,1529],{"class":94},[84,45593,1688],{"class":154},[84,45595,1397],{"class":94},[84,45597,1688],{"class":154},[84,45599,1397],{"class":94},[84,45601,162],{"class":154},[84,45603,45604,45606,45608,45610,45612,45614,45616,45618,45620],{"class":86,"line":34823},[84,45605,34746],{"class":154},[84,45607,34749],{"class":158},[84,45609,34864],{"class":154},[84,45611,34755],{"class":158},[84,45613,1688],{"class":154},[84,45615,34760],{"class":928},[84,45617,867],{"class":129},[84,45619,34875],{"class":158},[84,45621,162],{"class":154},[84,45623,45624,45626,45628,45630,45632,45634,45636,45638,45640],{"class":86,"line":34834},[84,45625,34746],{"class":154},[84,45627,34749],{"class":158},[84,45629,34887],{"class":154},[84,45631,34780],{"class":158},[84,45633,1688],{"class":154},[84,45635,34760],{"class":928},[84,45637,867],{"class":129},[84,45639,34898],{"class":158},[84,45641,162],{"class":154},[84,45643,45644],{"class":86,"line":34840},[84,45645,34906],{"class":1378},[84,45647,45648],{"class":86,"line":34857},[84,45649,34803],{"class":154},[84,45651,45652,45654,45656],{"class":86,"line":34880},[84,45653,34815],{"class":154},[84,45655,34749],{"class":158},[84,45657,162],{"class":154},[84,45659,45660,45662,45664],{"class":86,"line":34903},[84,45661,34826],{"class":154},[84,45663,34928],{"class":158},[84,45665,162],{"class":154},[84,45667,45668],{"class":86,"line":34909},[84,45669,34936],{"class":154},[84,45671,45672],{"class":86,"line":34914},[84,45673,3578],{"emptyLinePlaceholder":1252},[84,45675,45676],{"class":86,"line":34923},[84,45677,34947],{"class":1378},[84,45679,45680,45682,45684,45686,45688],{"class":86,"line":34933},[84,45681,2712],{"class":129},[84,45683,32374],{"class":94},[84,45685,4127],{"class":129},[84,45687,32379],{"class":158},[84,45689,4917],{"class":154},[84,45691,45692],{"class":86,"line":34939},[84,45693,34966],{"class":1378},[84,45695,45696,45699,45701],{"class":86,"line":34944},[84,45697,45698],{"class":154},"    GoogLeNet",[84,45700,867],{"class":129},[84,45702,45703],{"class":154},"GoogLeNet(Inception)\n",[84,45705,45706,45708,45710],{"class":86,"line":34950},[84,45707,34983],{"class":154},[84,45709,867],{"class":129},[84,45711,34988],{"class":154},[84,45713,45714,45716,45718,45721,45723,45725,45727],{"class":86,"line":34963},[84,45715,34545],{"class":154},[84,45717,867],{"class":129},[84,45719,45720],{"class":154},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[84,45722,35001],{"class":928},[84,45724,867],{"class":129},[84,45726,2259],{"class":94},[84,45728,162],{"class":154},[84,45730,45731],{"class":86,"line":34969},[84,45732,35013],{"class":154},[26,45734,45735],{"start":106},[29,45736,41726],{},[60,45738,45740],{"className":121,"code":45739,"language":91,"meta":66,"style":66},"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",[39,45741,45742,45748,45758,45768,45772,45782,45793,45797,45801,45805,45813,45829,45839,45855,45865,45879,45883,45893,45903,45913,45919,45923,45927,45935,45939,45955,45963,45967,45971,45979,45987,45991,45995,45999,46003,46009,46013,46023,46031,46039,46043,46047,46051,46059,46063,46079,46083,46087,46091,46103,46107,46119,46123,46127,46139,46143,46153,46157,46161,46173,46177,46185,46189,46193,46201,46205,46213,46217,46221,46225,46229,46233,46249,46257,46261,46265,46313,46319,46323,46333,46341,46349,46353,46357,46361,46365,46373,46377,46393,46397,46405,46413],{"__ignoreMap":66},[84,45743,45744,45746],{"class":86,"line":87},[84,45745,31547],{"class":129},[84,45747,31550],{"class":154},[84,45749,45750,45752,45754,45756],{"class":86,"line":98},[84,45751,31547],{"class":129},[84,45753,32568],{"class":154},[84,45755,1157],{"class":129},[84,45757,32573],{"class":154},[84,45759,45760,45762,45764,45766],{"class":86,"line":106},[84,45761,31891],{"class":129},[84,45763,32551],{"class":154},[84,45765,31547],{"class":129},[84,45767,32556],{"class":154},[84,45769,45770],{"class":86,"line":112},[84,45771,35074],{"class":1378},[84,45773,45774,45776,45778,45780],{"class":86,"line":425},[84,45775,31891],{"class":129},[84,45777,32522],{"class":154},[84,45779,31547],{"class":129},[84,45781,32527],{"class":154},[84,45783,45784,45786,45788,45790],{"class":86,"line":2395},[84,45785,31891],{"class":129},[84,45787,33067],{"class":154},[84,45789,31547],{"class":129},[84,45791,45792],{"class":154}," GoogLeNet,Inception\n",[84,45794,45795],{"class":86,"line":2401},[84,45796,3578],{"emptyLinePlaceholder":1252},[84,45798,45799],{"class":86,"line":2492},[84,45800,3578],{"emptyLinePlaceholder":1252},[84,45802,45803],{"class":86,"line":2498},[84,45804,35103],{"class":1378},[84,45806,45807,45809,45811],{"class":86,"line":2510},[84,45808,33100],{"class":129},[84,45810,35110],{"class":90},[84,45812,33106],{"class":154},[84,45814,45815,45817,45819,45821,45823,45825,45827],{"class":86,"line":2793},[84,45816,35117],{"class":154},[84,45818,867],{"class":129},[84,45820,32608],{"class":154},[84,45822,32611],{"class":928},[84,45824,867],{"class":129},[84,45826,32616],{"class":158},[84,45828,32619],{"class":154},[84,45830,45831,45833,45835,45837],{"class":86,"line":2798},[84,45832,35134],{"class":928},[84,45834,867],{"class":129},[84,45836,35139],{"class":94},[84,45838,32619],{"class":154},[84,45840,45841,45843,45845,45847,45849,45851,45853],{"class":86,"line":2804},[84,45842,35146],{"class":928},[84,45844,867],{"class":129},[84,45846,32646],{"class":154},[84,45848,32649],{"class":928},[84,45850,867],{"class":129},[84,45852,36601],{"class":94},[84,45854,32657],{"class":154},[84,45856,45857,45859,45861,45863],{"class":86,"line":2809},[84,45858,35163],{"class":928},[84,45860,867],{"class":129},[84,45862,32629],{"class":94},[84,45864,162],{"class":154},[84,45866,45867,45869,45871,45873,45875,45877],{"class":86,"line":2823},[84,45868,35174],{"class":154},[84,45870,867],{"class":129},[84,45872,32687],{"class":154},[84,45874,32690],{"class":928},[84,45876,867],{"class":129},[84,45878,35185],{"class":154},[84,45880,45881],{"class":86,"line":2828},[84,45882,35190],{"class":1378},[84,45884,45885,45887,45889,45891],{"class":86,"line":2834},[84,45886,35195],{"class":928},[84,45888,867],{"class":129},[84,45890,1529],{"class":94},[84,45892,32619],{"class":154},[84,45894,45895,45897,45899,45901],{"class":86,"line":2855},[84,45896,35206],{"class":928},[84,45898,867],{"class":129},[84,45900,32629],{"class":94},[84,45902,32619],{"class":154},[84,45904,45905,45907,45909,45911],{"class":86,"line":2860},[84,45906,35217],{"class":928},[84,45908,867],{"class":129},[84,45910,1504],{"class":94},[84,45912,162],{"class":154},[84,45914,45915,45917],{"class":86,"line":2874},[84,45916,5268],{"class":129},[84,45918,35230],{"class":154},[84,45920,45921],{"class":86,"line":2879},[84,45922,3578],{"emptyLinePlaceholder":1252},[84,45924,45925],{"class":86,"line":2908},[84,45926,35239],{"class":1378},[84,45928,45929,45931,45933],{"class":86,"line":2913},[84,45930,33100],{"class":129},[84,45932,35246],{"class":90},[84,45934,35249],{"class":154},[84,45936,45937],{"class":86,"line":2930},[84,45938,35254],{"class":1378},[84,45940,45941,45943,45945,45947,45949,45951,45953],{"class":86,"line":2935},[84,45942,32391],{"class":154},[84,45944,867],{"class":129},[84,45946,32398],{"class":158},[84,45948,2885],{"class":129},[84,45950,32403],{"class":154},[84,45952,2882],{"class":129},[84,45954,35271],{"class":158},[84,45956,45957,45959,45961],{"class":86,"line":2940},[84,45958,32443],{"class":154},[84,45960,867],{"class":129},[84,45962,33442],{"class":154},[84,45964,45965],{"class":86,"line":2945},[84,45966,3578],{"emptyLinePlaceholder":1252},[84,45968,45969],{"class":86,"line":2959},[84,45970,35288],{"class":1378},[84,45972,45973,45975,45977],{"class":86,"line":2964},[84,45974,35293],{"class":154},[84,45976,867],{"class":129},[84,45978,33495],{"class":94},[84,45980,45981,45983,45985],{"class":86,"line":3755},[84,45982,35302],{"class":154},[84,45984,867],{"class":129},[84,45986,4263],{"class":94},[84,45988,45989],{"class":86,"line":3769},[84,45990,3578],{"emptyLinePlaceholder":1252},[84,45992,45993],{"class":86,"line":3777},[84,45994,35315],{"class":1378},[84,45996,45997],{"class":86,"line":3782},[84,45998,35320],{"class":1378},[84,46000,46001],{"class":86,"line":3788},[84,46002,35325],{"class":1378},[84,46004,46005,46007],{"class":86,"line":3794},[84,46006,35330],{"class":129},[84,46008,34036],{"class":154},[84,46010,46011],{"class":86,"line":3799},[84,46012,35337],{"class":1378},[84,46014,46015,46017,46019,46021],{"class":86,"line":9120},[84,46016,4581],{"class":129},[84,46018,35344],{"class":154},[84,46020,27206],{"class":129},[84,46022,35349],{"class":154},[84,46024,46025,46027,46029],{"class":86,"line":9144},[84,46026,35354],{"class":154},[84,46028,867],{"class":129},[84,46030,35359],{"class":154},[84,46032,46033,46035,46037],{"class":86,"line":9149},[84,46034,35364],{"class":154},[84,46036,867],{"class":129},[84,46038,35369],{"class":154},[84,46040,46041],{"class":86,"line":9155},[84,46042,35374],{"class":1378},[84,46044,46045],{"class":86,"line":9182},[84,46046,34027],{"class":154},[84,46048,46049],{"class":86,"line":9187},[84,46050,35383],{"class":1378},[84,46052,46053,46055,46057],{"class":86,"line":9193},[84,46054,33812],{"class":154},[84,46056,867],{"class":129},[84,46058,35392],{"class":154},[84,46060,46061],{"class":86,"line":9205},[84,46062,35397],{"class":1378},[84,46064,46065,46067,46069,46071,46073,46075,46077],{"class":86,"line":9217},[84,46066,33829],{"class":154},[84,46068,867],{"class":129},[84,46070,33834],{"class":154},[84,46072,33837],{"class":928},[84,46074,867],{"class":129},[84,46076,1529],{"class":94},[84,46078,162],{"class":154},[84,46080,46081],{"class":86,"line":9229},[84,46082,35418],{"class":1378},[84,46084,46085],{"class":86,"line":10888},[84,46086,35423],{"class":1378},[84,46088,46089],{"class":86,"line":10913},[84,46090,35428],{"class":1378},[84,46092,46093,46095,46097,46099,46101],{"class":86,"line":10936},[84,46094,35433],{"class":154},[84,46096,10649],{"class":129},[84,46098,33939],{"class":154},[84,46100,4127],{"class":129},[84,46102,35442],{"class":154},[84,46104,46105],{"class":86,"line":10960},[84,46106,35447],{"class":1378},[84,46108,46109,46111,46113,46115,46117],{"class":86,"line":10965},[84,46110,35452],{"class":154},[84,46112,10649],{"class":129},[84,46114,35457],{"class":154},[84,46116,1504],{"class":94},[84,46118,162],{"class":154},[84,46120,46121],{"class":86,"line":10970},[84,46122,3578],{"emptyLinePlaceholder":1252},[84,46124,46125],{"class":86,"line":10975},[84,46126,35470],{"class":1378},[84,46128,46129,46131,46133,46135,46137],{"class":86,"line":10984},[84,46130,35475],{"class":154},[84,46132,867],{"class":129},[84,46134,35480],{"class":154},[84,46136,1893],{"class":129},[84,46138,35485],{"class":154},[84,46140,46141],{"class":86,"line":10989},[84,46142,35490],{"class":1378},[84,46144,46145,46147,46149,46151],{"class":86,"line":10995},[84,46146,33604],{"class":94},[84,46148,155],{"class":154},[84,46150,35499],{"class":158},[84,46152,35502],{"class":154},[84,46154,46155],{"class":86,"line":11016},[84,46156,3578],{"emptyLinePlaceholder":1252},[84,46158,46159],{"class":86,"line":11022},[84,46160,35511],{"class":1378},[84,46162,46163,46165,46167,46169,46171],{"class":86,"line":11036},[84,46164,2712],{"class":129},[84,46166,32374],{"class":94},[84,46168,4127],{"class":129},[84,46170,32379],{"class":158},[84,46172,4917],{"class":154},[84,46174,46175],{"class":86,"line":11042},[84,46176,35528],{"class":1378},[84,46178,46179,46181,46183],{"class":86,"line":11069},[84,46180,32443],{"class":154},[84,46182,867],{"class":129},[84,46184,45703],{"class":154},[84,46186,46187],{"class":86,"line":11078},[84,46188,35541],{"class":1378},[84,46190,46191],{"class":86,"line":11084},[84,46192,35546],{"class":1378},[84,46194,46195,46197,46199],{"class":86,"line":11092},[84,46196,35551],{"class":154},[84,46198,35554],{"class":158},[84,46200,31651],{"class":154},[84,46202,46203],{"class":86,"line":11097},[84,46204,35561],{"class":1378},[84,46206,46207,46209,46211],{"class":86,"line":17774},[84,46208,35174],{"class":154},[84,46210,867],{"class":129},[84,46212,35570],{"class":154},[84,46214,46215],{"class":86,"line":17780},[84,46216,35575],{"class":1378},[84,46218,46219],{"class":86,"line":17803},[84,46220,35580],{"class":154},[84,46222,46223],{"class":86,"line":17809},[84,46224,3578],{"emptyLinePlaceholder":1252},[84,46226,46227],{"class":86,"line":17832},[84,46228,35589],{"class":1378},[84,46230,46231],{"class":86,"line":17846},[84,46232,35594],{"class":1378},[84,46234,46235,46237,46239,46241,46243,46245,46247],{"class":86,"line":17866},[84,46236,32391],{"class":154},[84,46238,867],{"class":129},[84,46240,32398],{"class":158},[84,46242,2885],{"class":129},[84,46244,32403],{"class":154},[84,46246,2882],{"class":129},[84,46248,35271],{"class":158},[84,46250,46251,46253,46255],{"class":86,"line":17872},[84,46252,32443],{"class":154},[84,46254,867],{"class":129},[84,46256,33442],{"class":154},[84,46258,46259],{"class":86,"line":17883},[84,46260,35623],{"class":1378},[84,46262,46263],{"class":86,"line":17906},[84,46264,35628],{"class":1378},[84,46266,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311],{"class":86,"line":17928},[84,46268,35633],{"class":154},[84,46270,867],{"class":129},[84,46272,2198],{"class":154},[84,46274,35640],{"class":158},[84,46276,1688],{"class":154},[84,46278,35645],{"class":158},[84,46280,1688],{"class":154},[84,46282,35650],{"class":158},[84,46284,1688],{"class":154},[84,46286,35655],{"class":158},[84,46288,1688],{"class":154},[84,46290,35660],{"class":158},[84,46292,1688],{"class":154},[84,46294,35665],{"class":158},[84,46296,1688],{"class":154},[84,46298,35670],{"class":158},[84,46300,1688],{"class":154},[84,46302,35675],{"class":158},[84,46304,1688],{"class":154},[84,46306,35680],{"class":158},[84,46308,1688],{"class":154},[84,46310,35685],{"class":158},[84,46312,34398],{"class":154},[84,46314,46315,46317],{"class":86,"line":17933},[84,46316,35330],{"class":129},[84,46318,34036],{"class":154},[84,46320,46321],{"class":86,"line":17939},[84,46322,35698],{"class":1378},[84,46324,46325,46327,46329,46331],{"class":86,"line":17953},[84,46326,4581],{"class":129},[84,46328,35705],{"class":154},[84,46330,27206],{"class":129},[84,46332,35349],{"class":154},[84,46334,46335,46337,46339],{"class":86,"line":17966},[84,46336,33762],{"class":154},[84,46338,867],{"class":129},[84,46340,33767],{"class":154},[84,46342,46343,46345,46347],{"class":86,"line":17971},[84,46344,33777],{"class":154},[84,46346,867],{"class":129},[84,46348,33782],{"class":154},[84,46350,46351],{"class":86,"line":17985},[84,46352,3578],{"emptyLinePlaceholder":1252},[84,46354,46355],{"class":86,"line":17990},[84,46356,35734],{"class":1378},[84,46358,46359],{"class":86,"line":17996},[84,46360,34027],{"class":154},[84,46362,46363],{"class":86,"line":18001},[84,46364,35743],{"class":1378},[84,46366,46367,46369,46371],{"class":86,"line":18015},[84,46368,33812],{"class":154},[84,46370,867],{"class":129},[84,46372,33817],{"class":154},[84,46374,46375],{"class":86,"line":18020},[84,46376,35756],{"class":1378},[84,46378,46379,46381,46383,46385,46387,46389,46391],{"class":86,"line":18025},[84,46380,33829],{"class":154},[84,46382,867],{"class":129},[84,46384,33834],{"class":154},[84,46386,33837],{"class":928},[84,46388,867],{"class":129},[84,46390,1529],{"class":94},[84,46392,162],{"class":154},[84,46394,46395],{"class":86,"line":18039},[84,46396,35777],{"class":1378},[84,46398,46399,46401,46403],{"class":86,"line":18051},[84,46400,35782],{"class":154},[84,46402,867],{"class":129},[84,46404,35787],{"class":154},[84,46406,46407,46409,46411],{"class":86,"line":18056},[84,46408,35792],{"class":154},[84,46410,867],{"class":129},[84,46412,35797],{"class":154},[84,46414,46415,46417,46419,46421,46423,46425,46427,46429],{"class":86,"line":18069},[84,46416,35802],{"class":94},[84,46418,155],{"class":154},[84,46420,35807],{"class":158},[84,46422,35810],{"class":154},[84,46424,35813],{"class":158},[84,46426,1688],{"class":154},[84,46428,35818],{"class":158},[84,46430,35821],{"class":154},[198,46432,46434],{"id":46433},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46436,46437],{},"猫狗分类任务",[19,46439,46440],{},"划分数据集和验证集",[60,46442,46444],{"className":121,"code":46443,"language":91,"meta":66,"style":66},"# 创建脚本，用于划分数据集和验证集\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",[39,46445,46446,46451,46458,46463,46474,46481,46485,46495,46509,46518,46522,46527,46537,46557,46561,46566,46576,46587,46600,46604,46609,46618,46628,46639,46643,46648,46658,46662,46667,46672,46677,46682,46687,46691,46701,46727,46740,46752,46779,46784,46789,46803,46808,46820,46835,46850,46858,46862,46867,46873,46885,46898,46903,46908,46913,46962,46968,46972],{"__ignoreMap":66},[84,46447,46448],{"class":86,"line":87},[84,46449,46450],{"class":1378},"# 创建脚本，用于划分数据集和验证集\n",[84,46452,46453,46455],{"class":86,"line":98},[84,46454,31547],{"class":129},[84,46456,46457],{"class":154}," os\n",[84,46459,46460],{"class":86,"line":106},[84,46461,46462],{"class":1378},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[84,46464,46465,46467,46470,46472],{"class":86,"line":112},[84,46466,31891],{"class":129},[84,46468,46469],{"class":154}," shutil ",[84,46471,31547],{"class":129},[84,46473,32975],{"class":154},[84,46475,46476,46478],{"class":86,"line":425},[84,46477,31547],{"class":129},[84,46479,46480],{"class":154}," random\n",[84,46482,46483],{"class":86,"line":2395},[84,46484,3578],{"emptyLinePlaceholder":1252},[84,46486,46487,46489,46492],{"class":86,"line":2401},[84,46488,33100],{"class":129},[84,46490,46491],{"class":90}," mkfile",[84,46493,46494],{"class":154},"(file):\n",[84,46496,46497,46499,46501,46504,46507],{"class":86,"line":2492},[84,46498,4279],{"class":129},[84,46500,40082],{"class":129},[84,46502,46503],{"class":154}," os.path.exists(",[84,46505,46506],{"class":928},"file",[84,46508,31940],{"class":154},[84,46510,46511,46514,46516],{"class":86,"line":2498},[84,46512,46513],{"class":154},"        os.makedirs(",[84,46515,46506],{"class":928},[84,46517,162],{"class":154},[84,46519,46520],{"class":86,"line":2510},[84,46521,3578],{"emptyLinePlaceholder":1252},[84,46523,46524],{"class":86,"line":2793},[84,46525,46526],{"class":1378},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[84,46528,46529,46532,46534],{"class":86,"line":2798},[84,46530,46531],{"class":154},"file_path",[84,46533,867],{"class":129},[84,46535,46536],{"class":158},"'data_cat_dog'\n",[84,46538,46539,46542,46544,46547,46549,46552,46554],{"class":86,"line":2804},[84,46540,46541],{"class":154},"flower_class",[84,46543,867],{"class":129},[84,46545,46546],{"class":154},"[cla ",[84,46548,4203],{"class":129},[84,46550,46551],{"class":154}," cla ",[84,46553,27206],{"class":129},[84,46555,46556],{"class":154}," os.listdir(file_path)]\n",[84,46558,46559],{"class":86,"line":2809},[84,46560,3578],{"emptyLinePlaceholder":1252},[84,46562,46563],{"class":86,"line":2823},[84,46564,46565],{"class":1378},"# 创建训练集train文件夹\n",[84,46567,46568,46571,46574],{"class":86,"line":2828},[84,46569,46570],{"class":154},"mkfile(",[84,46572,46573],{"class":158},"'data\u002Ftrain'",[84,46575,162],{"class":154},[84,46577,46578,46580,46582,46584],{"class":86,"line":2834},[84,46579,4203],{"class":129},[84,46581,46551],{"class":154},[84,46583,27206],{"class":129},[84,46585,46586],{"class":154}," flower_class:\n",[84,46588,46589,46592,46595,46597],{"class":86,"line":2855},[84,46590,46591],{"class":154},"    mkfile(",[84,46593,46594],{"class":158},"'data\u002Ftrain\u002F'",[84,46596,1790],{"class":129},[84,46598,46599],{"class":154},"cla)\n",[84,46601,46602],{"class":86,"line":2860},[84,46603,3578],{"emptyLinePlaceholder":1252},[84,46605,46606],{"class":86,"line":2874},[84,46607,46608],{"class":1378},"# 创建验证集val文件夹\n",[84,46610,46611,46613,46616],{"class":86,"line":2879},[84,46612,46570],{"class":154},[84,46614,46615],{"class":158},"'data\u002Ftest'",[84,46617,162],{"class":154},[84,46619,46620,46622,46624,46626],{"class":86,"line":2908},[84,46621,4203],{"class":129},[84,46623,46551],{"class":154},[84,46625,27206],{"class":129},[84,46627,46586],{"class":154},[84,46629,46630,46632,46635,46637],{"class":86,"line":2913},[84,46631,46591],{"class":154},[84,46633,46634],{"class":158},"'data\u002Ftest\u002F'",[84,46636,1790],{"class":129},[84,46638,46599],{"class":154},[84,46640,46641],{"class":86,"line":2930},[84,46642,3578],{"emptyLinePlaceholder":1252},[84,46644,46645],{"class":86,"line":2935},[84,46646,46647],{"class":1378},"# 划分比例，训练集：测试集=9：1\n",[84,46649,46650,46653,46655],{"class":86,"line":2940},[84,46651,46652],{"class":154},"split_rate",[84,46654,867],{"class":129},[84,46656,46657],{"class":94},"0.1\n",[84,46659,46660],{"class":86,"line":2945},[84,46661,3578],{"emptyLinePlaceholder":1252},[84,46663,46664],{"class":86,"line":2959},[84,46665,46666],{"class":1378},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[84,46668,46669],{"class":86,"line":2964},[84,46670,46671],{"class":1378},"# cla_path：当前类别的原始图片路径\n",[84,46673,46674],{"class":86,"line":3755},[84,46675,46676],{"class":1378},"# images：当前类别下所有图片的文件名列表\n",[84,46678,46679],{"class":86,"line":3769},[84,46680,46681],{"class":1378},"# num：该类别图片总数\n",[84,46683,46684],{"class":86,"line":3777},[84,46685,46686],{"class":1378},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[84,46688,46689],{"class":86,"line":3782},[84,46690,3578],{"emptyLinePlaceholder":1252},[84,46692,46693,46695,46697,46699],{"class":86,"line":3788},[84,46694,4203],{"class":129},[84,46696,46551],{"class":154},[84,46698,27206],{"class":129},[84,46700,46586],{"class":154},[84,46702,46703,46706,46708,46711,46713,46716,46718,46720,46722,46724],{"class":86,"line":3794},[84,46704,46705],{"class":154},"    cla_path ",[84,46707,867],{"class":129},[84,46709,46710],{"class":154}," file_path ",[84,46712,1790],{"class":129},[84,46714,46715],{"class":158}," '\u002F'",[84,46717,136],{"class":129},[84,46719,46551],{"class":154},[84,46721,1790],{"class":129},[84,46723,46715],{"class":158},[84,46725,46726],{"class":1378},"  # 某一类别的子目录\n",[84,46728,46729,46732,46734,46737],{"class":86,"line":3799},[84,46730,46731],{"class":154},"    images ",[84,46733,867],{"class":129},[84,46735,46736],{"class":154}," os.listdir(cla_path)  ",[84,46738,46739],{"class":1378},"# iamges 列表存储了该目录下所有图像的名称\n",[84,46741,46742,46745,46747,46749],{"class":86,"line":9120},[84,46743,46744],{"class":154},"    num ",[84,46746,867],{"class":129},[84,46748,8503],{"class":94},[84,46750,46751],{"class":154},"(images)\n",[84,46753,46754,46757,46759,46762,46764,46766,46768,46771,46773,46776],{"class":86,"line":9144},[84,46755,46756],{"class":154},"    eval_index ",[84,46758,867],{"class":129},[84,46760,46761],{"class":154}," random.sample(images, ",[84,46763,1802],{"class":928},[84,46765,867],{"class":129},[84,46767,1327],{"class":94},[84,46769,46770],{"class":154},"(num ",[84,46772,1043],{"class":129},[84,46774,46775],{"class":154}," split_rate))  ",[84,46777,46778],{"class":1378},"# 从images列表中随机抽取 k 个图像名称\n",[84,46780,46781],{"class":86,"line":9149},[84,46782,46783],{"class":1378},"    # 遍历该类别下的所有图片\n",[84,46785,46786],{"class":86,"line":9155},[84,46787,46788],{"class":1378},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[84,46790,46791,46793,46796,46798,46800],{"class":86,"line":9182},[84,46792,4379],{"class":129},[84,46794,46795],{"class":154}," index, image ",[84,46797,27206],{"class":129},[84,46799,32759],{"class":94},[84,46801,46802],{"class":154},"(images):\n",[84,46804,46805],{"class":86,"line":9187},[84,46806,46807],{"class":1378},"        # eval_index 中保存验证集val的图像名称\n",[84,46809,46810,46812,46815,46817],{"class":86,"line":9193},[84,46811,3675],{"class":129},[84,46813,46814],{"class":154}," image ",[84,46816,27206],{"class":129},[84,46818,46819],{"class":154}," eval_index:\n",[84,46821,46822,46825,46827,46830,46832],{"class":86,"line":9205},[84,46823,46824],{"class":154},"            image_path ",[84,46826,867],{"class":129},[84,46828,46829],{"class":154}," cla_path ",[84,46831,1790],{"class":129},[84,46833,46834],{"class":154}," image\n",[84,46836,46837,46840,46842,46845,46847],{"class":86,"line":9217},[84,46838,46839],{"class":154},"            new_path ",[84,46841,867],{"class":129},[84,46843,46844],{"class":158}," 'data\u002Ftest\u002F'",[84,46846,136],{"class":129},[84,46848,46849],{"class":154}," cla\n",[84,46851,46852,46855],{"class":86,"line":9229},[84,46853,46854],{"class":154},"            copy(image_path, new_path)  ",[84,46856,46857],{"class":1378},"# 将选中的图像复制到新路径\n",[84,46859,46860],{"class":86,"line":10888},[84,46861,3578],{"emptyLinePlaceholder":1252},[84,46863,46864],{"class":86,"line":10913},[84,46865,46866],{"class":1378},"        # 其余的图像保存在训练集train中\n",[84,46868,46869,46871],{"class":86,"line":10936},[84,46870,3712],{"class":129},[84,46872,4917],{"class":154},[84,46874,46875,46877,46879,46881,46883],{"class":86,"line":10960},[84,46876,46824],{"class":154},[84,46878,867],{"class":129},[84,46880,46829],{"class":154},[84,46882,1790],{"class":129},[84,46884,46834],{"class":154},[84,46886,46887,46889,46891,46894,46896],{"class":86,"line":10965},[84,46888,46839],{"class":154},[84,46890,867],{"class":129},[84,46892,46893],{"class":158}," 'data\u002Ftrain\u002F'",[84,46895,136],{"class":129},[84,46897,46849],{"class":154},[84,46899,46900],{"class":86,"line":10970},[84,46901,46902],{"class":154},"            copy(image_path, new_path)\n",[84,46904,46905],{"class":86,"line":10975},[84,46906,46907],{"class":1378},"            # 打印进度条信息\n",[84,46909,46910],{"class":86,"line":10984},[84,46911,46912],{"class":1378},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[84,46914,46915,46917,46919,46921,46924,46926,46928,46931,46933,46935,46937,46940,46943,46945,46947,46950,46952,46954,46956,46959],{"class":86,"line":10989},[84,46916,33604],{"class":94},[84,46918,155],{"class":154},[84,46920,1562],{"class":158},[84,46922,46923],{"class":94},"\\r",[84,46925,2198],{"class":158},[84,46927,33612],{"class":94},[84,46929,46930],{"class":158},"] processing [",[84,46932,33612],{"class":94},[84,46934,1893],{"class":158},[84,46936,33612],{"class":94},[84,46938,46939],{"class":158},"]\"",[84,46941,46942],{"class":154},".format(cla, index ",[84,46944,1790],{"class":129},[84,46946,133],{"class":94},[84,46948,46949],{"class":154},", num), ",[84,46951,957],{"class":928},[84,46953,867],{"class":129},[84,46955,8824],{"class":158},[84,46957,46958],{"class":154},")  ",[84,46960,46961],{"class":1378},"# processing bar\n",[84,46963,46964,46966],{"class":86,"line":10995},[84,46965,32453],{"class":94},[84,46967,183],{"class":154},[84,46969,46970],{"class":86,"line":11016},[84,46971,3578],{"emptyLinePlaceholder":1252},[84,46973,46974,46976,46978,46981],{"class":86,"line":11022},[84,46975,730],{"class":94},[84,46977,155],{"class":154},[84,46979,46980],{"class":158},"\"processing done!\"",[84,46982,162],{"class":154},[19,46984,46985],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23168,46987,46989],{"id":46988},"_242模型代码","2.4.2.模型代码",[19,46991,46992],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[60,46994,46996],{"className":121,"code":46995,"language":91,"meta":66,"style":66},"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",[39,46997,46998,47004,47014,47024,47028,47044,47052,47066,47076,47080,47110,47114,47148,47194,47198,47232,47278,47282,47286,47320,47350,47354,47362,47376,47398,47420,47438,47442,47456,47460,47464,47480,47484,47492,47506,47516,47560,47564,47592,47596,47606,47634,47638,47674,47678,47706,47710,47720,47752,47784,47812,47816,47826,47858,47890,47922,47954,47986,48014,48018,48028,48060,48092,48104,48108,48120,48124,48128,48140,48148,48168,48172,48176,48180,48184,48188,48192,48206,48214,48222,48234,48248,48256,48260,48268,48278,48288,48298,48308,48318,48324,48328,48332,48344,48364,48372],{"__ignoreMap":66},[84,46999,47000,47002],{"class":86,"line":87},[84,47001,31547],{"class":129},[84,47003,31550],{"class":154},[84,47005,47006,47008,47010,47012],{"class":86,"line":98},[84,47007,31891],{"class":129},[84,47009,31894],{"class":154},[84,47011,31547],{"class":129},[84,47013,31899],{"class":154},[84,47015,47016,47018,47020,47022],{"class":86,"line":106},[84,47017,31891],{"class":129},[84,47019,31911],{"class":154},[84,47021,31547],{"class":129},[84,47023,31916],{"class":154},[84,47025,47026],{"class":86,"line":112},[84,47027,3578],{"emptyLinePlaceholder":1252},[84,47029,47030,47032,47034,47036,47038,47040,47042],{"class":86,"line":425},[84,47031,15864],{"class":129},[84,47033,42645],{"class":90},[84,47035,155],{"class":154},[84,47037,31932],{"class":90},[84,47039,1867],{"class":154},[84,47041,31937],{"class":90},[84,47043,31940],{"class":154},[84,47045,47046,47048,47050],{"class":86,"line":2395},[84,47047,31955],{"class":129},[84,47049,31958],{"class":94},[84,47051,42664],{"class":154},[84,47053,47054,47056,47058,47060,47062,47064],{"class":86,"line":2401},[84,47055,31971],{"class":94},[84,47057,42671],{"class":154},[84,47059,31977],{"class":94},[84,47061,31980],{"class":154},[84,47063,31983],{"class":94},[84,47065,183],{"class":154},[84,47067,47068,47070,47072,47074],{"class":86,"line":2492},[84,47069,31999],{"class":94},[84,47071,35923],{"class":154},[84,47073,867],{"class":129},[84,47075,35928],{"class":154},[84,47077,47078],{"class":86,"line":2498},[84,47079,42694],{"class":1378},[84,47081,47082,47084,47086,47088,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108],{"class":86,"line":2510},[84,47083,31999],{"class":94},[84,47085,42701],{"class":154},[84,47087,867],{"class":129},[84,47089,32007],{"class":154},[84,47091,32010],{"class":928},[84,47093,867],{"class":129},[84,47095,42712],{"class":154},[84,47097,32019],{"class":928},[84,47099,867],{"class":129},[84,47101,42719],{"class":154},[84,47103,32028],{"class":928},[84,47105,867],{"class":129},[84,47107,1529],{"class":94},[84,47109,162],{"class":154},[84,47111,47112],{"class":86,"line":2793},[84,47113,42732],{"class":1378},[84,47115,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140,47142,47144,47146],{"class":86,"line":2798},[84,47117,31999],{"class":94},[84,47119,42739],{"class":154},[84,47121,867],{"class":129},[84,47123,32007],{"class":154},[84,47125,32010],{"class":928},[84,47127,867],{"class":129},[84,47129,42712],{"class":154},[84,47131,32019],{"class":928},[84,47133,867],{"class":129},[84,47135,42756],{"class":154},[84,47137,1504],{"class":94},[84,47139,42761],{"class":154},[84,47141,32028],{"class":928},[84,47143,867],{"class":129},[84,47145,1529],{"class":94},[84,47147,162],{"class":154},[84,47149,47150,47152,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188,47190,47192],{"class":86,"line":2804},[84,47151,31999],{"class":94},[84,47153,42776],{"class":154},[84,47155,867],{"class":129},[84,47157,32007],{"class":154},[84,47159,32010],{"class":928},[84,47161,867],{"class":129},[84,47163,42756],{"class":154},[84,47165,1504],{"class":94},[84,47167,42761],{"class":154},[84,47169,32019],{"class":928},[84,47171,867],{"class":129},[84,47173,42756],{"class":154},[84,47175,1529],{"class":94},[84,47177,42761],{"class":154},[84,47179,32028],{"class":928},[84,47181,867],{"class":129},[84,47183,1391],{"class":94},[84,47185,1688],{"class":154},[84,47187,32037],{"class":928},[84,47189,867],{"class":129},[84,47191,1529],{"class":94},[84,47193,162],{"class":154},[84,47195,47196],{"class":86,"line":2809},[84,47197,42821],{"class":1378},[84,47199,47200,47202,47204,47206,47208,47210,47212,47214,47216,47218,47220,47222,47224,47226,47228,47230],{"class":86,"line":2823},[84,47201,31999],{"class":94},[84,47203,42828],{"class":154},[84,47205,867],{"class":129},[84,47207,32007],{"class":154},[84,47209,32010],{"class":928},[84,47211,867],{"class":129},[84,47213,42712],{"class":154},[84,47215,32019],{"class":928},[84,47217,867],{"class":129},[84,47219,42845],{"class":154},[84,47221,1504],{"class":94},[84,47223,42761],{"class":154},[84,47225,32028],{"class":928},[84,47227,867],{"class":129},[84,47229,1529],{"class":94},[84,47231,162],{"class":154},[84,47233,47234,47236,47238,47240,47242,47244,47246,47248,47250,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276],{"class":86,"line":2828},[84,47235,31999],{"class":94},[84,47237,42864],{"class":154},[84,47239,867],{"class":129},[84,47241,32007],{"class":154},[84,47243,32010],{"class":928},[84,47245,867],{"class":129},[84,47247,42845],{"class":154},[84,47249,1504],{"class":94},[84,47251,42761],{"class":154},[84,47253,32019],{"class":928},[84,47255,867],{"class":129},[84,47257,42845],{"class":154},[84,47259,1529],{"class":94},[84,47261,42761],{"class":154},[84,47263,32028],{"class":928},[84,47265,867],{"class":129},[84,47267,1629],{"class":94},[84,47269,1688],{"class":154},[84,47271,32037],{"class":928},[84,47273,867],{"class":129},[84,47275,1397],{"class":94},[84,47277,162],{"class":154},[84,47279,47280],{"class":86,"line":2834},[84,47281,42909],{"class":1378},[84,47283,47284],{"class":86,"line":2855},[84,47285,42914],{"class":1378},[84,47287,47288,47290,47292,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318],{"class":86,"line":2860},[84,47289,31999],{"class":94},[84,47291,42921],{"class":154},[84,47293,867],{"class":129},[84,47295,35981],{"class":154},[84,47297,32028],{"class":928},[84,47299,867],{"class":129},[84,47301,1391],{"class":94},[84,47303,1688],{"class":154},[84,47305,32083],{"class":928},[84,47307,867],{"class":129},[84,47309,1529],{"class":94},[84,47311,1688],{"class":154},[84,47313,32037],{"class":928},[84,47315,867],{"class":129},[84,47317,1529],{"class":94},[84,47319,162],{"class":154},[84,47321,47322,47324,47326,47328,47330,47332,47334,47336,47338,47340,47342,47344,47346,47348],{"class":86,"line":2874},[84,47323,31999],{"class":94},[84,47325,42956],{"class":154},[84,47327,867],{"class":129},[84,47329,32007],{"class":154},[84,47331,32010],{"class":928},[84,47333,867],{"class":129},[84,47335,42712],{"class":154},[84,47337,32019],{"class":928},[84,47339,867],{"class":129},[84,47341,42973],{"class":154},[84,47343,32028],{"class":928},[84,47345,867],{"class":129},[84,47347,1529],{"class":94},[84,47349,162],{"class":154},[84,47351,47352],{"class":86,"line":2879},[84,47353,3578],{"emptyLinePlaceholder":1252},[84,47355,47356,47358,47360],{"class":86,"line":2908},[84,47357,31955],{"class":129},[84,47359,32247],{"class":90},[84,47361,32250],{"class":154},[84,47363,47364,47366,47368,47370,47372,47374],{"class":86,"line":2913},[84,47365,42998],{"class":154},[84,47367,867],{"class":129},[84,47369,31977],{"class":94},[84,47371,36336],{"class":154},[84,47373,31977],{"class":94},[84,47375,43009],{"class":154},[84,47377,47378,47380,47382,47384,47386,47388,47390,47392,47394,47396],{"class":86,"line":2930},[84,47379,8257],{"class":154},[84,47381,867],{"class":129},[84,47383,31977],{"class":94},[84,47385,36336],{"class":154},[84,47387,31977],{"class":94},[84,47389,43024],{"class":154},[84,47391,31977],{"class":94},[84,47393,36336],{"class":154},[84,47395,31977],{"class":94},[84,47397,43033],{"class":154},[84,47399,47400,47402,47404,47406,47408,47410,47412,47414,47416,47418],{"class":86,"line":2935},[84,47401,43038],{"class":154},[84,47403,867],{"class":129},[84,47405,31977],{"class":94},[84,47407,36336],{"class":154},[84,47409,31977],{"class":94},[84,47411,43049],{"class":154},[84,47413,31977],{"class":94},[84,47415,36336],{"class":154},[84,47417,31977],{"class":94},[84,47419,43058],{"class":154},[84,47421,47422,47424,47426,47428,47430,47432,47434,47436],{"class":86,"line":2940},[84,47423,43063],{"class":154},[84,47425,867],{"class":129},[84,47427,31977],{"class":94},[84,47429,36336],{"class":154},[84,47431,31977],{"class":94},[84,47433,43074],{"class":154},[84,47435,31977],{"class":94},[84,47437,43079],{"class":154},[84,47439,47440],{"class":86,"line":2945},[84,47441,43084],{"class":1378},[84,47443,47444,47446,47448,47450,47452,47454],{"class":86,"line":2959},[84,47445,15922],{"class":129},[84,47447,43091],{"class":154},[84,47449,33837],{"class":928},[84,47451,867],{"class":129},[84,47453,1529],{"class":94},[84,47455,162],{"class":154},[84,47457,47458],{"class":86,"line":2964},[84,47459,3578],{"emptyLinePlaceholder":1252},[84,47461,47462],{"class":86,"line":3755},[84,47463,43112],{"class":1378},[84,47465,47466,47468,47470,47472,47474,47476,47478],{"class":86,"line":3769},[84,47467,15864],{"class":129},[84,47469,43119],{"class":90},[84,47471,155],{"class":154},[84,47473,31932],{"class":90},[84,47475,1867],{"class":154},[84,47477,31937],{"class":90},[84,47479,31940],{"class":154},[84,47481,47482],{"class":86,"line":3777},[84,47483,43134],{"class":1378},[84,47485,47486,47488,47490],{"class":86,"line":3782},[84,47487,31955],{"class":129},[84,47489,31958],{"class":94},[84,47491,43143],{"class":154},[84,47493,47494,47496,47498,47500,47502,47504],{"class":86,"line":3788},[84,47495,31971],{"class":94},[84,47497,43150],{"class":154},[84,47499,31977],{"class":94},[84,47501,31980],{"class":154},[84,47503,31983],{"class":94},[84,47505,183],{"class":154},[84,47507,47508,47510,47512,47514],{"class":86,"line":3794},[84,47509,31999],{"class":94},[84,47511,43165],{"class":154},[84,47513,867],{"class":129},[84,47515,39161],{"class":154},[84,47517,47518,47520,47522,47524,47526,47528,47530,47532,47534,47536,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556,47558],{"class":86,"line":3799},[84,47519,39166],{"class":154},[84,47521,32010],{"class":928},[84,47523,867],{"class":129},[84,47525,1391],{"class":94},[84,47527,1688],{"class":154},[84,47529,32019],{"class":928},[84,47531,867],{"class":129},[84,47533,1516],{"class":94},[84,47535,1688],{"class":154},[84,47537,32028],{"class":928},[84,47539,867],{"class":129},[84,47541,1679],{"class":94},[84,47543,1688],{"class":154},[84,47545,32083],{"class":928},[84,47547,867],{"class":129},[84,47549,1397],{"class":94},[84,47551,1688],{"class":154},[84,47553,32037],{"class":928},[84,47555,867],{"class":129},[84,47557,1391],{"class":94},[84,47559,39199],{"class":154},[84,47561,47562],{"class":86,"line":9120},[84,47563,39204],{"class":154},[84,47565,47566,47568,47570,47572,47574,47576,47578,47580,47582,47584,47586,47588,47590],{"class":86,"line":9144},[84,47567,39249],{"class":154},[84,47569,32028],{"class":928},[84,47571,867],{"class":129},[84,47573,1391],{"class":94},[84,47575,1688],{"class":154},[84,47577,32083],{"class":928},[84,47579,867],{"class":129},[84,47581,1397],{"class":94},[84,47583,1688],{"class":154},[84,47585,32037],{"class":928},[84,47587,867],{"class":129},[84,47589,1529],{"class":94},[84,47591,162],{"class":154},[84,47593,47594],{"class":86,"line":9149},[84,47595,39278],{"class":154},[84,47597,47598,47600,47602,47604],{"class":86,"line":9155},[84,47599,31999],{"class":94},[84,47601,43256],{"class":154},[84,47603,867],{"class":129},[84,47605,39161],{"class":154},[84,47607,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630,47632],{"class":86,"line":9182},[84,47609,39166],{"class":154},[84,47611,32010],{"class":928},[84,47613,867],{"class":129},[84,47615,1516],{"class":94},[84,47617,1688],{"class":154},[84,47619,32019],{"class":928},[84,47621,867],{"class":129},[84,47623,1516],{"class":94},[84,47625,1688],{"class":154},[84,47627,32028],{"class":928},[84,47629,867],{"class":129},[84,47631,1529],{"class":94},[84,47633,39199],{"class":154},[84,47635,47636],{"class":86,"line":9187},[84,47637,39204],{"class":154},[84,47639,47640,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662,47664,47666,47668,47670,47672],{"class":86,"line":9193},[84,47641,39166],{"class":154},[84,47643,32010],{"class":928},[84,47645,867],{"class":129},[84,47647,1516],{"class":94},[84,47649,1688],{"class":154},[84,47651,32019],{"class":928},[84,47653,867],{"class":129},[84,47655,43311],{"class":94},[84,47657,1688],{"class":154},[84,47659,32028],{"class":928},[84,47661,867],{"class":129},[84,47663,1391],{"class":94},[84,47665,1688],{"class":154},[84,47667,32037],{"class":928},[84,47669,867],{"class":129},[84,47671,1529],{"class":94},[84,47673,39199],{"class":154},[84,47675,47676],{"class":86,"line":9205},[84,47677,39204],{"class":154},[84,47679,47680,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700,47702,47704],{"class":86,"line":9217},[84,47681,39249],{"class":154},[84,47683,32028],{"class":928},[84,47685,867],{"class":129},[84,47687,1391],{"class":94},[84,47689,1688],{"class":154},[84,47691,32083],{"class":928},[84,47693,867],{"class":129},[84,47695,1397],{"class":94},[84,47697,1688],{"class":154},[84,47699,32037],{"class":928},[84,47701,867],{"class":129},[84,47703,1529],{"class":94},[84,47705,162],{"class":154},[84,47707,47708],{"class":86,"line":9229},[84,47709,39278],{"class":154},[84,47711,47712,47714,47716,47718],{"class":86,"line":10888},[84,47713,31999],{"class":94},[84,47715,43372],{"class":154},[84,47717,867],{"class":129},[84,47719,39161],{"class":154},[84,47721,47722,47724,47726,47728,47730,47732,47734,47736,47738,47740,47742,47744,47746,47748,47750],{"class":86,"line":10913},[84,47723,43381],{"class":154},[84,47725,43311],{"class":94},[84,47727,1688],{"class":154},[84,47729,1516],{"class":94},[84,47731,43390],{"class":154},[84,47733,1522],{"class":94},[84,47735,1688],{"class":154},[84,47737,33223],{"class":94},[84,47739,43399],{"class":154},[84,47741,1910],{"class":94},[84,47743,1688],{"class":154},[84,47745,1510],{"class":94},[84,47747,43408],{"class":154},[84,47749,1510],{"class":94},[84,47751,39199],{"class":154},[84,47753,47754,47756,47758,47760,47762,47764,47766,47768,47770,47772,47774,47776,47778,47780,47782],{"class":86,"line":10936},[84,47755,43381],{"class":154},[84,47757,36022],{"class":94},[84,47759,1688],{"class":154},[84,47761,33223],{"class":94},[84,47763,43390],{"class":154},[84,47765,33223],{"class":94},[84,47767,1688],{"class":154},[84,47769,43311],{"class":94},[84,47771,43399],{"class":154},[84,47773,1510],{"class":94},[84,47775,1688],{"class":154},[84,47777,1522],{"class":94},[84,47779,43408],{"class":154},[84,47781,1516],{"class":94},[84,47783,39199],{"class":154},[84,47785,47786,47788,47790,47792,47794,47796,47798,47800,47802,47804,47806,47808,47810],{"class":86,"line":10960},[84,47787,39249],{"class":154},[84,47789,32028],{"class":928},[84,47791,867],{"class":129},[84,47793,1391],{"class":94},[84,47795,1688],{"class":154},[84,47797,32083],{"class":928},[84,47799,867],{"class":129},[84,47801,1397],{"class":94},[84,47803,1688],{"class":154},[84,47805,32037],{"class":928},[84,47807,867],{"class":129},[84,47809,1529],{"class":94},[84,47811,162],{"class":154},[84,47813,47814],{"class":86,"line":10965},[84,47815,39278],{"class":154},[84,47817,47818,47820,47822,47824],{"class":86,"line":10970},[84,47819,31999],{"class":94},[84,47821,43483],{"class":154},[84,47823,867],{"class":129},[84,47825,39161],{"class":154},[84,47827,47828,47830,47832,47834,47836,47838,47840,47842,47844,47846,47848,47850,47852,47854,47856],{"class":86,"line":10975},[84,47829,43381],{"class":154},[84,47831,43494],{"class":94},[84,47833,1688],{"class":154},[84,47835,43311],{"class":94},[84,47837,43390],{"class":154},[84,47839,1522],{"class":94},[84,47841,1688],{"class":154},[84,47843,43507],{"class":94},[84,47845,43399],{"class":154},[84,47847,1910],{"class":94},[84,47849,1688],{"class":154},[84,47851,1916],{"class":94},[84,47853,43408],{"class":154},[84,47855,1516],{"class":94},[84,47857,39199],{"class":154},[84,47859,47860,47862,47864,47866,47868,47870,47872,47874,47876,47878,47880,47882,47884,47886,47888],{"class":86,"line":10984},[84,47861,43381],{"class":154},[84,47863,39609],{"class":94},[84,47865,1688],{"class":154},[84,47867,22218],{"class":94},[84,47869,43390],{"class":154},[84,47871,1927],{"class":94},[84,47873,1688],{"class":154},[84,47875,32654],{"class":94},[84,47877,43399],{"class":154},[84,47879,2108],{"class":94},[84,47881,1688],{"class":154},[84,47883,1516],{"class":94},[84,47885,43408],{"class":154},[84,47887,1516],{"class":94},[84,47889,39199],{"class":154},[84,47891,47892,47894,47896,47898,47900,47902,47904,47906,47908,47910,47912,47914,47916,47918,47920],{"class":86,"line":10989},[84,47893,43381],{"class":154},[84,47895,39609],{"class":94},[84,47897,1688],{"class":154},[84,47899,33223],{"class":94},[84,47901,43390],{"class":154},[84,47903,33223],{"class":94},[84,47905,1688],{"class":154},[84,47907,36022],{"class":94},[84,47909,43399],{"class":154},[84,47911,2108],{"class":94},[84,47913,1688],{"class":154},[84,47915,1516],{"class":94},[84,47917,43408],{"class":154},[84,47919,1516],{"class":94},[84,47921,39199],{"class":154},[84,47923,47924,47926,47928,47930,47932,47934,47936,47938,47940,47942,47944,47946,47948,47950,47952],{"class":86,"line":10995},[84,47925,43381],{"class":154},[84,47927,39609],{"class":94},[84,47929,1688],{"class":154},[84,47931,1927],{"class":94},[84,47933,43390],{"class":154},[84,47935,33223],{"class":94},[84,47937,1688],{"class":154},[84,47939,43604],{"class":94},[84,47941,43399],{"class":154},[84,47943,1510],{"class":94},[84,47945,1688],{"class":154},[84,47947,1516],{"class":94},[84,47949,43408],{"class":154},[84,47951,1516],{"class":94},[84,47953,39199],{"class":154},[84,47955,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984],{"class":86,"line":11016},[84,47957,43381],{"class":154},[84,47959,43625],{"class":94},[84,47961,1688],{"class":154},[84,47963,36022],{"class":94},[84,47965,43390],{"class":154},[84,47967,22218],{"class":94},[84,47969,1688],{"class":154},[84,47971,43638],{"class":94},[84,47973,43399],{"class":154},[84,47975,1510],{"class":94},[84,47977,1688],{"class":154},[84,47979,33223],{"class":94},[84,47981,43408],{"class":154},[84,47983,33223],{"class":94},[84,47985,39199],{"class":154},[84,47987,47988,47990,47992,47994,47996,47998,48000,48002,48004,48006,48008,48010,48012],{"class":86,"line":11022},[84,47989,39249],{"class":154},[84,47991,32028],{"class":928},[84,47993,867],{"class":129},[84,47995,1391],{"class":94},[84,47997,1688],{"class":154},[84,47999,32083],{"class":928},[84,48001,867],{"class":129},[84,48003,1397],{"class":94},[84,48005,1688],{"class":154},[84,48007,32037],{"class":928},[84,48009,867],{"class":129},[84,48011,1529],{"class":94},[84,48013,162],{"class":154},[84,48015,48016],{"class":86,"line":11036},[84,48017,39278],{"class":154},[84,48019,48020,48022,48024,48026],{"class":86,"line":11042},[84,48021,31999],{"class":94},[84,48023,43691],{"class":154},[84,48025,867],{"class":129},[84,48027,39161],{"class":154},[84,48029,48030,48032,48034,48036,48038,48040,48042,48044,48046,48048,48050,48052,48054,48056,48058],{"class":86,"line":11069},[84,48031,43381],{"class":154},[84,48033,43702],{"class":94},[84,48035,1688],{"class":154},[84,48037,36022],{"class":94},[84,48039,43390],{"class":154},[84,48041,22218],{"class":94},[84,48043,1688],{"class":154},[84,48045,43638],{"class":94},[84,48047,43399],{"class":154},[84,48049,1510],{"class":94},[84,48051,1688],{"class":154},[84,48053,33223],{"class":94},[84,48055,43408],{"class":154},[84,48057,33223],{"class":94},[84,48059,39199],{"class":154},[84,48061,48062,48064,48066,48068,48070,48072,48074,48076,48078,48080,48082,48084,48086,48088,48090],{"class":86,"line":11078},[84,48063,43381],{"class":154},[84,48065,43702],{"class":94},[84,48067,1688],{"class":154},[84,48069,36092],{"class":94},[84,48071,43390],{"class":154},[84,48073,43311],{"class":94},[84,48075,1688],{"class":154},[84,48077,36092],{"class":94},[84,48079,43399],{"class":154},[84,48081,1916],{"class":94},[84,48083,1688],{"class":154},[84,48085,33223],{"class":94},[84,48087,43408],{"class":154},[84,48089,33223],{"class":94},[84,48091,39199],{"class":154},[84,48093,48094,48096,48098,48100,48102],{"class":86,"line":11084},[84,48095,43765],{"class":154},[84,48097,1529],{"class":94},[84,48099,1688],{"class":154},[84,48101,1529],{"class":94},[84,48103,43774],{"class":154},[84,48105,48106],{"class":86,"line":11092},[84,48107,39942],{"class":154},[84,48109,48110,48112,48114,48116,48118],{"class":86,"line":11097},[84,48111,39947],{"class":154},[84,48113,43785],{"class":94},[84,48115,1688],{"class":154},[84,48117,1397],{"class":94},[84,48119,162],{"class":154},[84,48121,48122],{"class":86,"line":17774},[84,48123,39278],{"class":154},[84,48125,48126],{"class":86,"line":17780},[84,48127,43800],{"class":1378},[84,48129,48130,48132,48134,48136,48138],{"class":86,"line":17803},[84,48131,4581],{"class":129},[84,48133,40020],{"class":154},[84,48135,27206],{"class":129},[84,48137,40025],{"class":94},[84,48139,40028],{"class":154},[84,48141,48142,48144,48146],{"class":86,"line":17809},[84,48143,5819],{"class":129},[84,48145,40040],{"class":94},[84,48147,40043],{"class":154},[84,48149,48150,48152,48154,48156,48158,48160,48162,48164,48166],{"class":86,"line":17832},[84,48151,40053],{"class":154},[84,48153,43827],{"class":928},[84,48155,867],{"class":129},[84,48157,43832],{"class":158},[84,48159,1688],{"class":154},[84,48161,40056],{"class":928},[84,48163,867],{"class":129},[84,48165,40061],{"class":158},[84,48167,162],{"class":154},[84,48169,48170],{"class":86,"line":17846},[84,48171,43847],{"class":1378},[84,48173,48174],{"class":86,"line":17866},[84,48175,43852],{"class":1378},[84,48177,48178],{"class":86,"line":17872},[84,48179,43857],{"class":1378},[84,48181,48182],{"class":86,"line":17883},[84,48183,43862],{"class":1378},[84,48185,48186],{"class":86,"line":17906},[84,48187,43867],{"class":1378},[84,48189,48190],{"class":86,"line":17928},[84,48191,43872],{"class":1378},[84,48193,48194,48196,48198,48200,48202,48204],{"class":86,"line":17933},[84,48195,40073],{"class":129},[84,48197,40076],{"class":154},[84,48199,40079],{"class":129},[84,48201,40082],{"class":129},[84,48203,40085],{"class":94},[84,48205,4917],{"class":154},[84,48207,48208,48210,48212],{"class":86,"line":17939},[84,48209,40097],{"class":154},[84,48211,1504],{"class":94},[84,48213,162],{"class":154},[84,48215,48216,48218,48220],{"class":86,"line":17953},[84,48217,43899],{"class":129},[84,48219,40040],{"class":94},[84,48221,40116],{"class":154},[84,48223,48224,48226,48228,48230,48232],{"class":86,"line":17966},[84,48225,43908],{"class":154},[84,48227,1504],{"class":94},[84,48229,1688],{"class":154},[84,48231,40138],{"class":94},[84,48233,162],{"class":154},[84,48235,48236,48238,48240,48242,48244,48246],{"class":86,"line":17971},[84,48237,43921],{"class":129},[84,48239,40076],{"class":154},[84,48241,40079],{"class":129},[84,48243,40082],{"class":129},[84,48245,40085],{"class":94},[84,48247,4917],{"class":154},[84,48249,48250,48252,48254],{"class":86,"line":17985},[84,48251,43936],{"class":154},[84,48253,1504],{"class":94},[84,48255,162],{"class":154},[84,48257,48258],{"class":86,"line":17990},[84,48259,36317],{"class":1378},[84,48261,48262,48264,48266],{"class":86,"line":17996},[84,48263,31955],{"class":129},[84,48265,32247],{"class":90},[84,48267,32250],{"class":154},[84,48269,48270,48272,48274,48276],{"class":86,"line":18001},[84,48271,32255],{"class":154},[84,48273,867],{"class":129},[84,48275,31977],{"class":94},[84,48277,43963],{"class":154},[84,48279,48280,48282,48284,48286],{"class":86,"line":18015},[84,48281,32255],{"class":154},[84,48283,867],{"class":129},[84,48285,31977],{"class":94},[84,48287,43974],{"class":154},[84,48289,48290,48292,48294,48296],{"class":86,"line":18020},[84,48291,32255],{"class":154},[84,48293,867],{"class":129},[84,48295,31977],{"class":94},[84,48297,43985],{"class":154},[84,48299,48300,48302,48304,48306],{"class":86,"line":18025},[84,48301,32255],{"class":154},[84,48303,867],{"class":129},[84,48305,31977],{"class":94},[84,48307,43996],{"class":154},[84,48309,48310,48312,48314,48316],{"class":86,"line":18039},[84,48311,32255],{"class":154},[84,48313,867],{"class":129},[84,48315,31977],{"class":94},[84,48317,44007],{"class":154},[84,48319,48320,48322],{"class":86,"line":18051},[84,48321,15922],{"class":129},[84,48323,32363],{"class":154},[84,48325,48326],{"class":86,"line":18056},[84,48327,3578],{"emptyLinePlaceholder":1252},[84,48329,48330],{"class":86,"line":18069},[84,48331,44022],{"class":1378},[84,48333,48334,48336,48338,48340,48342],{"class":86,"line":18074},[84,48335,2712],{"class":129},[84,48337,32374],{"class":94},[84,48339,4127],{"class":129},[84,48341,32379],{"class":158},[84,48343,4917],{"class":154},[84,48345,48346,48348,48350,48352,48354,48356,48358,48360,48362],{"class":86,"line":18079},[84,48347,32391],{"class":154},[84,48349,867],{"class":129},[84,48351,31605],{"class":154},[84,48353,32398],{"class":158},[84,48355,2885],{"class":129},[84,48357,32403],{"class":154},[84,48359,2882],{"class":129},[84,48361,31630],{"class":158},[84,48363,162],{"class":154},[84,48365,48366,48368,48370],{"class":86,"line":18084},[84,48367,32443],{"class":154},[84,48369,867],{"class":129},[84,48371,44063],{"class":154},[84,48373,48374,48376,48378,48380,48382,48384,48386,48388],{"class":86,"line":18097},[84,48375,32453],{"class":94},[84,48377,32456],{"class":154},[84,48379,1529],{"class":94},[84,48381,1688],{"class":154},[84,48383,32654],{"class":94},[84,48385,1688],{"class":154},[84,48387,32654],{"class":94},[84,48389,32469],{"class":154},[23168,48391,48393],{"id":48392},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48395,48396],{},"计算图片的均值与方差，用于训练中归一化处理操作",[60,48398,48400],{"className":121,"code":48399,"language":91,"meta":66,"style":66},"# 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",[39,48401,48402,48407,48420,48425,48431,48436,48446,48450,48455,48465,48469,48474,48484,48501,48505,48510,48522,48534,48565,48574,48584,48594,48598,48603,48618,48622,48627,48632,48637,48647,48652,48677,48681,48686,48701,48705,48718,48722,48727,48732,48737,48742,48747,48757,48767,48790,48798,48806,48814,48818,48830,48834,48839,48843,48847,48854,48873,48897,48904,48918,48923,48928,48932,48946,48950,48962],{"__ignoreMap":66},[84,48403,48404],{"class":86,"line":87},[84,48405,48406],{"class":1378},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[84,48408,48409,48411,48414,48417],{"class":86,"line":98},[84,48410,31891],{"class":129},[84,48412,48413],{"class":94}," PIL",[84,48415,48416],{"class":129}," import",[84,48418,48419],{"class":154}," Image\n",[84,48421,48422],{"class":86,"line":106},[84,48423,48424],{"class":1378},"# os 用来处理文件夹和文件路径\n",[84,48426,48427,48429],{"class":86,"line":112},[84,48428,31547],{"class":129},[84,48430,46457],{"class":154},[84,48432,48433],{"class":86,"line":425},[84,48434,48435],{"class":1378},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[84,48437,48438,48440,48442,48444],{"class":86,"line":2395},[84,48439,31547],{"class":129},[84,48441,32534],{"class":154},[84,48443,1157],{"class":129},[84,48445,32539],{"class":154},[84,48447,48448],{"class":86,"line":2401},[84,48449,3578],{"emptyLinePlaceholder":1252},[84,48451,48452],{"class":86,"line":2492},[84,48453,48454],{"class":1378},"# 文件夹路径，包含所有图片文件\n",[84,48456,48457,48460,48462],{"class":86,"line":2498},[84,48458,48459],{"class":154},"folder_path ",[84,48461,867],{"class":129},[84,48463,48464],{"class":158}," 'data_cat_dog'\n",[84,48466,48467],{"class":86,"line":2510},[84,48468,3578],{"emptyLinePlaceholder":1252},[84,48470,48471],{"class":86,"line":2793},[84,48472,48473],{"class":1378},"# 初始化累积变量\n",[84,48475,48476,48479,48481],{"class":86,"line":2798},[84,48477,48478],{"class":154},"total_pixels ",[84,48480,867],{"class":129},[84,48482,48483],{"class":94}," 0\n",[84,48485,48486,48489,48491,48494,48496,48498],{"class":86,"line":2804},[84,48487,48488],{"class":154},"sum_normalized_pixel_values ",[84,48490,867],{"class":129},[84,48492,48493],{"class":154}," np.zeros(",[84,48495,1391],{"class":94},[84,48497,46958],{"class":154},[84,48499,48500],{"class":1378},"# 如果是RGB图像，需要三个通道的均值和方差\n",[84,48502,48503],{"class":86,"line":2809},[84,48504,3578],{"emptyLinePlaceholder":1252},[84,48506,48507],{"class":86,"line":2823},[84,48508,48509],{"class":1378},"# 遍历文件夹中的图片文件\n",[84,48511,48512,48514,48517,48519],{"class":86,"line":2828},[84,48513,4203],{"class":129},[84,48515,48516],{"class":154}," root, dirs, files ",[84,48518,27206],{"class":129},[84,48520,48521],{"class":154}," os.walk(folder_path):\n",[84,48523,48524,48526,48529,48531],{"class":86,"line":2834},[84,48525,4379],{"class":129},[84,48527,48528],{"class":154}," filename ",[84,48530,27206],{"class":129},[84,48532,48533],{"class":154}," files:\n",[84,48535,48536,48538,48541,48544,48546,48549,48551,48554,48556,48559,48562],{"class":86,"line":2855},[84,48537,3675],{"class":129},[84,48539,48540],{"class":154}," filename.endswith((",[84,48542,48543],{"class":158},"'.jpg'",[84,48545,846],{"class":154},[84,48547,48548],{"class":158},"'.jpeg'",[84,48550,846],{"class":154},[84,48552,48553],{"class":158},"'.png'",[84,48555,846],{"class":154},[84,48557,48558],{"class":158},"'.bmp'",[84,48560,48561],{"class":154},")):  ",[84,48563,48564],{"class":1378},"# 可根据实际情况添加其他格式\n",[84,48566,48567,48569,48571],{"class":86,"line":2860},[84,48568,46824],{"class":154},[84,48570,867],{"class":129},[84,48572,48573],{"class":154}," os.path.join(root, filename)\n",[84,48575,48576,48579,48581],{"class":86,"line":2874},[84,48577,48578],{"class":154},"            image ",[84,48580,867],{"class":129},[84,48582,48583],{"class":154}," Image.open(image_path)\n",[84,48585,48586,48589,48591],{"class":86,"line":2879},[84,48587,48588],{"class":154},"            image_array ",[84,48590,867],{"class":129},[84,48592,48593],{"class":154}," np.array(image)\n",[84,48595,48596],{"class":86,"line":2908},[84,48597,3578],{"emptyLinePlaceholder":1252},[84,48599,48600],{"class":86,"line":2913},[84,48601,48602],{"class":1378},"            # 归一化像素值到0-1之间\n",[84,48604,48605,48608,48610,48613,48615],{"class":86,"line":2930},[84,48606,48607],{"class":154},"            normalized_image_array ",[84,48609,867],{"class":129},[84,48611,48612],{"class":154}," image_array ",[84,48614,1893],{"class":129},[84,48616,48617],{"class":94}," 255.0\n",[84,48619,48620],{"class":86,"line":2935},[84,48621,3578],{"emptyLinePlaceholder":1252},[84,48623,48624],{"class":86,"line":2940},[84,48625,48626],{"class":1378},"            # print(image_path)\n",[84,48628,48629],{"class":86,"line":2945},[84,48630,48631],{"class":1378},"            # print(normalized_image_array.shape)\n",[84,48633,48634],{"class":86,"line":2959},[84,48635,48636],{"class":1378},"            # 累积归一化后的像素值和像素数量\n",[84,48638,48639,48642,48644],{"class":86,"line":2964},[84,48640,48641],{"class":154},"            total_pixels ",[84,48643,10649],{"class":129},[84,48645,48646],{"class":154}," normalized_image_array.size\n",[84,48648,48649],{"class":86,"line":3755},[84,48650,48651],{"class":1378},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[84,48653,48654,48657,48659,48662,48665,48667,48669,48671,48673,48675],{"class":86,"line":3769},[84,48655,48656],{"class":154},"            sum_normalized_pixel_values ",[84,48658,10649],{"class":129},[84,48660,48661],{"class":154}," np.sum(normalized_image_array, ",[84,48663,48664],{"class":928},"axis",[84,48666,867],{"class":129},[84,48668,155],{"class":154},[84,48670,1504],{"class":94},[84,48672,846],{"class":154},[84,48674,1529],{"class":94},[84,48676,31651],{"class":154},[84,48678,48679],{"class":86,"line":3777},[84,48680,3578],{"emptyLinePlaceholder":1252},[84,48682,48683],{"class":86,"line":3782},[84,48684,48685],{"class":1378},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[84,48687,48688,48691,48693,48696,48698],{"class":86,"line":3788},[84,48689,48690],{"class":154},"mean ",[84,48692,867],{"class":129},[84,48694,48695],{"class":154}," sum_normalized_pixel_values ",[84,48697,1893],{"class":129},[84,48699,48700],{"class":154}," total_pixels\n",[84,48702,48703],{"class":86,"line":3794},[84,48704,3578],{"emptyLinePlaceholder":1252},[84,48706,48707,48710,48712,48714,48716],{"class":86,"line":3799},[84,48708,48709],{"class":154},"sum_squared_diff ",[84,48711,867],{"class":129},[84,48713,48493],{"class":154},[84,48715,1391],{"class":94},[84,48717,162],{"class":154},[84,48719,48720],{"class":86,"line":9120},[84,48721,3578],{"emptyLinePlaceholder":1252},[84,48723,48724],{"class":86,"line":9144},[84,48725,48726],{"class":1378},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[84,48728,48729],{"class":86,"line":9149},[84,48730,48731],{"class":1378},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[84,48733,48734],{"class":86,"line":9155},[84,48735,48736],{"class":1378},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[84,48738,48739],{"class":86,"line":9182},[84,48740,48741],{"class":1378},"# Image.open(image_path)：打开图片\n",[84,48743,48744],{"class":86,"line":9187},[84,48745,48746],{"class":1378},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[84,48748,48749,48751,48753,48755],{"class":86,"line":9193},[84,48750,4203],{"class":129},[84,48752,48516],{"class":154},[84,48754,27206],{"class":129},[84,48756,48521],{"class":154},[84,48758,48759,48761,48763,48765],{"class":86,"line":9205},[84,48760,4379],{"class":129},[84,48762,48528],{"class":154},[84,48764,27206],{"class":129},[84,48766,48533],{"class":154},[84,48768,48769,48771,48773,48775,48777,48779,48781,48783,48785,48787],{"class":86,"line":9217},[84,48770,3675],{"class":129},[84,48772,48540],{"class":154},[84,48774,48543],{"class":158},[84,48776,846],{"class":154},[84,48778,48548],{"class":158},[84,48780,846],{"class":154},[84,48782,48553],{"class":158},[84,48784,846],{"class":154},[84,48786,48558],{"class":158},[84,48788,48789],{"class":154},")):\n",[84,48791,48792,48794,48796],{"class":86,"line":9229},[84,48793,46824],{"class":154},[84,48795,867],{"class":129},[84,48797,48573],{"class":154},[84,48799,48800,48802,48804],{"class":86,"line":10888},[84,48801,48578],{"class":154},[84,48803,867],{"class":129},[84,48805,48583],{"class":154},[84,48807,48808,48810,48812],{"class":86,"line":10913},[84,48809,48588],{"class":154},[84,48811,867],{"class":129},[84,48813,48593],{"class":154},[84,48815,48816],{"class":86,"line":10936},[84,48817,48602],{"class":1378},[84,48819,48820,48822,48824,48826,48828],{"class":86,"line":10960},[84,48821,48607],{"class":154},[84,48823,867],{"class":129},[84,48825,48612],{"class":154},[84,48827,1893],{"class":129},[84,48829,48617],{"class":94},[84,48831,48832],{"class":86,"line":10965},[84,48833,48631],{"class":1378},[84,48835,48836],{"class":86,"line":10970},[84,48837,48838],{"class":1378},"            # print(mean.shape)\n",[84,48840,48841],{"class":86,"line":10975},[84,48842,48626],{"class":1378},[84,48844,48845],{"class":86,"line":10984},[84,48846,3578],{"emptyLinePlaceholder":1252},[84,48848,48849,48852],{"class":86,"line":10989},[84,48850,48851],{"class":129},"            try",[84,48853,4917],{"class":154},[84,48855,48856,48859,48861,48864,48866,48869,48871],{"class":86,"line":10995},[84,48857,48858],{"class":154},"                diff ",[84,48860,867],{"class":129},[84,48862,48863],{"class":154}," (normalized_image_array ",[84,48865,1841],{"class":129},[84,48867,48868],{"class":154}," mean) ",[84,48870,11833],{"class":129},[84,48872,139],{"class":94},[84,48874,48875,48878,48880,48883,48885,48887,48889,48891,48893,48895],{"class":86,"line":11016},[84,48876,48877],{"class":154},"                sum_squared_diff ",[84,48879,10649],{"class":129},[84,48881,48882],{"class":154}," np.sum(diff, ",[84,48884,48664],{"class":928},[84,48886,867],{"class":129},[84,48888,155],{"class":154},[84,48890,1504],{"class":94},[84,48892,846],{"class":154},[84,48894,1529],{"class":94},[84,48896,31651],{"class":154},[84,48898,48899,48902],{"class":86,"line":11022},[84,48900,48901],{"class":129},"            except",[84,48903,4917],{"class":154},[84,48905,48906,48909,48911,48913,48916],{"class":86,"line":11036},[84,48907,48908],{"class":94},"                print",[84,48910,155],{"class":154},[84,48912,1372],{"class":129},[84,48914,48915],{"class":158},"\"捕获到自定义异常\"",[84,48917,162],{"class":154},[84,48919,48920],{"class":86,"line":11042},[84,48921,48922],{"class":1378},"            # diff = (normalized_image_array - mean) ** 2\n",[84,48924,48925],{"class":86,"line":11069},[84,48926,48927],{"class":1378},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[84,48929,48930],{"class":86,"line":11078},[84,48931,3578],{"emptyLinePlaceholder":1252},[84,48933,48934,48937,48939,48942,48944],{"class":86,"line":11084},[84,48935,48936],{"class":154},"variance ",[84,48938,867],{"class":129},[84,48940,48941],{"class":154}," sum_squared_diff ",[84,48943,1893],{"class":129},[84,48945,48700],{"class":154},[84,48947,48948],{"class":86,"line":11092},[84,48949,3578],{"emptyLinePlaceholder":1252},[84,48951,48952,48954,48956,48959],{"class":86,"line":11097},[84,48953,730],{"class":94},[84,48955,155],{"class":154},[84,48957,48958],{"class":158},"\"Mean:\"",[84,48960,48961],{"class":154},", mean)\n",[84,48963,48964,48966,48968,48971],{"class":86,"line":17774},[84,48965,730],{"class":94},[84,48967,155],{"class":154},[84,48969,48970],{"class":158},"\"Variance:\"",[84,48972,48973],{"class":154},", variance)\n",[60,48975,48977],{"className":121,"code":48976,"language":91,"meta":66,"style":66},"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",[39,48978,48979,48985,48991,49001,49007,49017,49031,49041,49051,49061,49065,49075,49085,49089,49093,49101,49106,49111,49130,49134,49139,49144,49149,49154,49195,49200,49210,49215,49228,49233,49238,49243,49248,49253,49257,49262,49267,49289,49293,49325,49339,49349,49359,49363,49373,49387,49397,49407,49417,49423,49427,49431,49435,49439,49443,49451,49471,49475,49479,49483,49487,49503,49507,49511,49519,49523,49527,49535,49539,49543,49547,49555,49559,49563,49567,49575,49579,49587,49591,49599,49603,49611,49615,49623,49627,49631,49639,49643,49647,49659,49683,49697,49701,49705,49709,49717,49721,49729,49733,49741,49745,49753,49757,49765,49769,49777,49781,49793,49797,49805,49809,49817,49821,49825,49829,49833,49841,49845,49861,49865,49873,49877,49881,49885,49889,49893,49897,49901,49917,49921,49933,49937,49949,49953,49965,49969,49977,49981,49989,49993,49997,50001,50007,50011,50019,50023,50039,50043,50051,50055,50071,50083,50087,50099,50103,50107,50115,50119,50123,50131,50135,50143,50147,50155,50159,50163,50205,50247,50251,50255,50271,50275,50291,50295,50299,50307,50311,50315,50327,50365,50369,50373,50381,50385,50399,50409,50415,50421,50427,50433,50437,50441,50447,50451,50455,50463,50467,50485,50489,50493,50497,50513,50517,50521,50525,50529,50533,50553,50573,50577,50581,50585,50593,50601,50605,50621,50641,50661,50665,50670,50679,50688,50693,50698,50703,50716,50721,50730,50739,50756],{"__ignoreMap":66},[84,48980,48981,48983],{"class":86,"line":87},[84,48982,31547],{"class":129},[84,48984,32975],{"class":154},[84,48986,48987,48989],{"class":86,"line":98},[84,48988,31547],{"class":129},[84,48990,32982],{"class":154},[84,48992,48993,48995,48997,48999],{"class":86,"line":106},[84,48994,31547],{"class":129},[84,48996,32993],{"class":154},[84,48998,1157],{"class":129},[84,49000,32998],{"class":154},[84,49002,49003,49005],{"class":86,"line":112},[84,49004,31547],{"class":129},[84,49006,31550],{"class":154},[84,49008,49009,49011,49013,49015],{"class":86,"line":425},[84,49010,31891],{"class":129},[84,49012,32568],{"class":154},[84,49014,31547],{"class":129},[84,49016,33015],{"class":154},[84,49018,49019,49021,49023,49025,49028],{"class":86,"line":2395},[84,49020,31891],{"class":129},[84,49022,32522],{"class":154},[84,49024,31547],{"class":129},[84,49026,49027],{"class":154}," ImageFolder ",[84,49029,49030],{"class":1378},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[84,49032,49033,49035,49037,49039],{"class":86,"line":2401},[84,49034,31891],{"class":129},[84,49036,32551],{"class":154},[84,49038,31547],{"class":129},[84,49040,32556],{"class":154},[84,49042,49043,49045,49047,49049],{"class":86,"line":2492},[84,49044,31547],{"class":129},[84,49046,32568],{"class":154},[84,49048,1157],{"class":129},[84,49050,32573],{"class":154},[84,49052,49053,49055,49057,49059],{"class":86,"line":2498},[84,49054,31547],{"class":129},[84,49056,32585],{"class":154},[84,49058,1157],{"class":129},[84,49060,32590],{"class":154},[84,49062,49063],{"class":86,"line":2510},[84,49064,33060],{"class":1378},[84,49066,49067,49069,49071,49073],{"class":86,"line":2793},[84,49068,31891],{"class":129},[84,49070,33067],{"class":154},[84,49072,31547],{"class":129},[84,49074,44183],{"class":154},[84,49076,49077,49079,49081,49083],{"class":86,"line":2798},[84,49078,31891],{"class":129},[84,49080,31894],{"class":154},[84,49082,31547],{"class":129},[84,49084,31899],{"class":154},[84,49086,49087],{"class":86,"line":2804},[84,49088,3578],{"emptyLinePlaceholder":1252},[84,49090,49091],{"class":86,"line":2809},[84,49092,33095],{"class":1378},[84,49094,49095,49097,49099],{"class":86,"line":2823},[84,49096,33100],{"class":129},[84,49098,33103],{"class":90},[84,49100,33106],{"class":154},[84,49102,49103],{"class":86,"line":2828},[84,49104,49105],{"class":1378},"    # 导入自己的数据集，并进行数据处理\n",[84,49107,49108],{"class":86,"line":2834},[84,49109,49110],{"class":1378},"    # 定义数据集的路径\n",[84,49112,49113,49116,49118,49120,49122,49124,49128],{"class":86,"line":2855},[84,49114,49115],{"class":94},"    ROOT_PATH",[84,49117,867],{"class":129},[84,49119,1978],{"class":129},[84,49121,1562],{"class":158},[84,49123,1867],{"class":94},[84,49125,49127],{"class":49126},"sA_wV","\u002Fdata\u002Ftrain",[84,49129,26296],{"class":158},[84,49131,49132],{"class":86,"line":2860},[84,49133,3578],{"emptyLinePlaceholder":1252},[84,49135,49136],{"class":86,"line":2874},[84,49137,49138],{"class":1378},"    # 定义归一化方法\n",[84,49140,49141],{"class":86,"line":2879},[84,49142,49143],{"class":1378},"    # 这里需要先计算一下数据集的均值和方差\n",[84,49145,49146],{"class":86,"line":2908},[84,49147,49148],{"class":1378},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[84,49150,49151],{"class":86,"line":2913},[84,49152,49153],{"class":1378},"    # 第一个参数是均值，第二个参数是方差\n",[84,49155,49156,49159,49161,49164,49167,49169,49172,49174,49177,49180,49183,49185,49188,49190,49193],{"class":86,"line":2930},[84,49157,49158],{"class":154},"    normalize",[84,49160,867],{"class":129},[84,49162,49163],{"class":154},"transforms.Normalize([",[84,49165,49166],{"class":94},"0.162",[84,49168,1688],{"class":154},[84,49170,49171],{"class":94},"0.151",[84,49173,1688],{"class":154},[84,49175,49176],{"class":94},"0.138",[84,49178,49179],{"class":154},"],[",[84,49181,49182],{"class":94},"0.058",[84,49184,1688],{"class":154},[84,49186,49187],{"class":94},"0.052",[84,49189,1688],{"class":154},[84,49191,49192],{"class":94},"0.048",[84,49194,5834],{"class":154},[84,49196,49197],{"class":86,"line":2935},[84,49198,49199],{"class":1378},"    # 定义数据集处理方法变量\n",[84,49201,49202,49205,49207],{"class":86,"line":2940},[84,49203,49204],{"class":154},"    train_transform",[84,49206,867],{"class":129},[84,49208,49209],{"class":154},"transforms.Compose([\n",[84,49211,49212],{"class":86,"line":2945},[84,49213,49214],{"class":1378},"        # 调整图像大小为224*224\n",[84,49216,49217,49220,49222,49224,49226],{"class":86,"line":2959},[84,49218,49219],{"class":154},"        transforms.Resize((",[84,49221,32654],{"class":94},[84,49223,1688],{"class":154},[84,49225,32654],{"class":94},[84,49227,43774],{"class":154},[84,49229,49230],{"class":86,"line":2964},[84,49231,49232],{"class":1378},"        # 将图像转换为张量\n",[84,49234,49235],{"class":86,"line":3755},[84,49236,49237],{"class":154},"        transforms.ToTensor(),\n",[84,49239,49240],{"class":86,"line":3769},[84,49241,49242],{"class":154},"        normalize])\n",[84,49244,49245],{"class":86,"line":3777},[84,49246,49247],{"class":1378},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[84,49249,49250],{"class":86,"line":3782},[84,49251,49252],{"class":1378},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[84,49254,49255],{"class":86,"line":3788},[84,49256,3578],{"emptyLinePlaceholder":1252},[84,49258,49259],{"class":86,"line":3794},[84,49260,49261],{"class":1378},"    # 加载数据集\n",[84,49263,49264],{"class":86,"line":3799},[84,49265,49266],{"class":1378},"    # 传入数据集路径与处理方法\n",[84,49268,49269,49271,49273,49276,49279,49281,49284,49286],{"class":86,"line":9120},[84,49270,33111],{"class":154},[84,49272,867],{"class":129},[84,49274,49275],{"class":154},"ImageFolder(",[84,49277,49278],{"class":94},"ROOT_PATH",[84,49280,1688],{"class":154},[84,49282,49283],{"class":928},"transform",[84,49285,867],{"class":129},[84,49287,49288],{"class":154},"train_transform)\n",[84,49290,49291],{"class":86,"line":9144},[84,49292,3578],{"emptyLinePlaceholder":1252},[84,49294,49295,49297,49299,49301,49303,49305,49307,49309,49311,49313,49315,49317,49319,49321,49323],{"class":86,"line":9149},[84,49296,33163],{"class":154},[84,49298,867],{"class":129},[84,49300,33168],{"class":154},[84,49302,33171],{"class":94},[84,49304,155],{"class":154},[84,49306,33176],{"class":94},[84,49308,1043],{"class":129},[84,49310,8530],{"class":94},[84,49312,33183],{"class":154},[84,49314,33171],{"class":94},[84,49316,155],{"class":154},[84,49318,33190],{"class":94},[84,49320,1043],{"class":129},[84,49322,8530],{"class":94},[84,49324,33197],{"class":154},[84,49326,49327,49329,49331,49333,49335,49337],{"class":86,"line":9155},[84,49328,33202],{"class":154},[84,49330,867],{"class":129},[84,49332,33207],{"class":154},[84,49334,32690],{"class":928},[84,49336,867],{"class":129},[84,49338,32695],{"class":154},[84,49340,49341,49343,49345,49347],{"class":86,"line":9182},[84,49342,33218],{"class":928},[84,49344,867],{"class":129},[84,49346,1510],{"class":94},[84,49348,32619],{"class":154},[84,49350,49351,49353,49355,49357],{"class":86,"line":9187},[84,49352,33230],{"class":928},[84,49354,867],{"class":129},[84,49356,32629],{"class":94},[84,49358,32619],{"class":154},[84,49360,49361],{"class":86,"line":9193},[84,49362,33241],{"class":1378},[84,49364,49365,49367,49369,49371],{"class":86,"line":9205},[84,49366,33246],{"class":928},[84,49368,867],{"class":129},[84,49370,1705],{"class":94},[84,49372,162],{"class":154},[84,49374,49375,49377,49379,49381,49383,49385],{"class":86,"line":9217},[84,49376,33257],{"class":154},[84,49378,867],{"class":129},[84,49380,32687],{"class":154},[84,49382,32690],{"class":928},[84,49384,867],{"class":129},[84,49386,33268],{"class":154},[84,49388,49389,49391,49393,49395],{"class":86,"line":9229},[84,49390,33273],{"class":928},[84,49392,867],{"class":129},[84,49394,1510],{"class":94},[84,49396,32619],{"class":154},[84,49398,49399,49401,49403,49405],{"class":86,"line":10888},[84,49400,33284],{"class":928},[84,49402,867],{"class":129},[84,49404,32629],{"class":94},[84,49406,32619],{"class":154},[84,49408,49409,49411,49413,49415],{"class":86,"line":10913},[84,49410,33295],{"class":928},[84,49412,867],{"class":129},[84,49414,1705],{"class":94},[84,49416,162],{"class":154},[84,49418,49419,49421],{"class":86,"line":10936},[84,49420,5268],{"class":129},[84,49422,33308],{"class":154},[84,49424,49425],{"class":86,"line":10960},[84,49426,3578],{"emptyLinePlaceholder":1252},[84,49428,49429],{"class":86,"line":10965},[84,49430,33317],{"class":1378},[84,49432,49433],{"class":86,"line":10970},[84,49434,33322],{"class":1378},[84,49436,49437],{"class":86,"line":10975},[84,49438,3578],{"emptyLinePlaceholder":1252},[84,49440,49441],{"class":86,"line":10984},[84,49442,33331],{"class":1378},[84,49444,49445,49447,49449],{"class":86,"line":10989},[84,49446,33100],{"class":129},[84,49448,33338],{"class":90},[84,49450,33341],{"class":154},[84,49452,49453,49455,49457,49459,49461,49463,49465,49467,49469],{"class":86,"line":10995},[84,49454,32391],{"class":154},[84,49456,867],{"class":129},[84,49458,31605],{"class":154},[84,49460,32398],{"class":158},[84,49462,2885],{"class":129},[84,49464,32403],{"class":154},[84,49466,2882],{"class":129},[84,49468,33360],{"class":158},[84,49470,162],{"class":154},[84,49472,49473],{"class":86,"line":11016},[84,49474,3578],{"emptyLinePlaceholder":1252},[84,49476,49477],{"class":86,"line":11022},[84,49478,33375],{"class":1378},[84,49480,49481],{"class":86,"line":11036},[84,49482,33380],{"class":1378},[84,49484,49485],{"class":86,"line":11042},[84,49486,33385],{"class":1378},[84,49488,49489,49491,49493,49495,49497,49499,49501],{"class":86,"line":11069},[84,49490,33390],{"class":154},[84,49492,867],{"class":129},[84,49494,33395],{"class":154},[84,49496,33398],{"class":928},[84,49498,867],{"class":129},[84,49500,33403],{"class":94},[84,49502,162],{"class":154},[84,49504,49505],{"class":86,"line":11078},[84,49506,3578],{"emptyLinePlaceholder":1252},[84,49508,49509],{"class":86,"line":11084},[84,49510,33414],{"class":1378},[84,49512,49513,49515,49517],{"class":86,"line":11092},[84,49514,33419],{"class":154},[84,49516,867],{"class":129},[84,49518,33424],{"class":154},[84,49520,49521],{"class":86,"line":11097},[84,49522,3578],{"emptyLinePlaceholder":1252},[84,49524,49525],{"class":86,"line":17774},[84,49526,33433],{"class":1378},[84,49528,49529,49531,49533],{"class":86,"line":17780},[84,49530,32443],{"class":154},[84,49532,867],{"class":129},[84,49534,33442],{"class":154},[84,49536,49537],{"class":86,"line":17803},[84,49538,33447],{"class":1378},[84,49540,49541],{"class":86,"line":17809},[84,49542,33452],{"class":1378},[84,49544,49545],{"class":86,"line":17832},[84,49546,33457],{"class":1378},[84,49548,49549,49551,49553],{"class":86,"line":17846},[84,49550,33462],{"class":154},[84,49552,867],{"class":129},[84,49554,33467],{"class":154},[84,49556,49557],{"class":86,"line":17866},[84,49558,3578],{"emptyLinePlaceholder":1252},[84,49560,49561],{"class":86,"line":17872},[84,49562,33480],{"class":1378},[84,49564,49565],{"class":86,"line":17883},[84,49566,33485],{"class":1378},[84,49568,49569,49571,49573],{"class":86,"line":17906},[84,49570,33490],{"class":154},[84,49572,867],{"class":129},[84,49574,33495],{"class":94},[84,49576,49577],{"class":86,"line":17928},[84,49578,33500],{"class":1378},[84,49580,49581,49583,49585],{"class":86,"line":17933},[84,49582,33505],{"class":154},[84,49584,867],{"class":129},[84,49586,33510],{"class":154},[84,49588,49589],{"class":86,"line":17939},[84,49590,33515],{"class":1378},[84,49592,49593,49595,49597],{"class":86,"line":17953},[84,49594,33520],{"class":154},[84,49596,867],{"class":129},[84,49598,33510],{"class":154},[84,49600,49601],{"class":86,"line":17966},[84,49602,33529],{"class":1378},[84,49604,49605,49607,49609],{"class":86,"line":17971},[84,49606,33534],{"class":154},[84,49608,867],{"class":129},[84,49610,33510],{"class":154},[84,49612,49613],{"class":86,"line":17985},[84,49614,33543],{"class":1378},[84,49616,49617,49619,49621],{"class":86,"line":17990},[84,49618,33548],{"class":154},[84,49620,867],{"class":129},[84,49622,33510],{"class":154},[84,49624,49625],{"class":86,"line":17996},[84,49626,3578],{"emptyLinePlaceholder":1252},[84,49628,49629],{"class":86,"line":18001},[84,49630,33561],{"class":1378},[84,49632,49633,49635,49637],{"class":86,"line":18015},[84,49634,33566],{"class":154},[84,49636,867],{"class":129},[84,49638,33571],{"class":154},[84,49640,49641],{"class":86,"line":18020},[84,49642,3578],{"emptyLinePlaceholder":1252},[84,49644,49645],{"class":86,"line":18025},[84,49646,33584],{"class":1378},[84,49648,49649,49651,49653,49655,49657],{"class":86,"line":18039},[84,49650,4379],{"class":129},[84,49652,33591],{"class":154},[84,49654,27206],{"class":129},[84,49656,33596],{"class":94},[84,49658,33599],{"class":154},[84,49660,49661,49663,49665,49667,49669,49671,49673,49675,49677,49679,49681],{"class":86,"line":18051},[84,49662,33604],{"class":94},[84,49664,155],{"class":154},[84,49666,33609],{"class":158},[84,49668,33612],{"class":94},[84,49670,1893],{"class":158},[84,49672,33612],{"class":94},[84,49674,1562],{"class":158},[84,49676,33621],{"class":154},[84,49678,1841],{"class":129},[84,49680,1529],{"class":94},[84,49682,31651],{"class":154},[84,49684,49685,49687,49689,49691,49693,49695],{"class":86,"line":18056},[84,49686,33604],{"class":94},[84,49688,155],{"class":154},[84,49690,934],{"class":158},[84,49692,1043],{"class":129},[84,49694,1756],{"class":94},[84,49696,162],{"class":154},[84,49698,49699],{"class":86,"line":18069},[84,49700,3578],{"emptyLinePlaceholder":1252},[84,49702,49703],{"class":86,"line":18074},[84,49704,33650],{"class":1378},[84,49706,49707],{"class":86,"line":18079},[84,49708,33655],{"class":1378},[84,49710,49711,49713,49715],{"class":86,"line":18084},[84,49712,33660],{"class":154},[84,49714,867],{"class":129},[84,49716,33495],{"class":94},[84,49718,49719],{"class":86,"line":18097},[84,49720,33669],{"class":1378},[84,49722,49723,49725,49727],{"class":86,"line":18102},[84,49724,33674],{"class":154},[84,49726,867],{"class":129},[84,49728,4263],{"class":94},[84,49730,49731],{"class":86,"line":33785},[84,49732,33683],{"class":1378},[84,49734,49735,49737,49739],{"class":86,"line":33791},[84,49736,33688],{"class":154},[84,49738,867],{"class":129},[84,49740,33495],{"class":94},[84,49742,49743],{"class":86,"line":33797},[84,49744,33697],{"class":1378},[84,49746,49747,49749,49751],{"class":86,"line":33803},[84,49748,33702],{"class":154},[84,49750,867],{"class":129},[84,49752,4263],{"class":94},[84,49754,49755],{"class":86,"line":33809},[84,49756,33711],{"class":1378},[84,49758,49759,49761,49763],{"class":86,"line":33820},[84,49760,33716],{"class":154},[84,49762,867],{"class":129},[84,49764,4263],{"class":94},[84,49766,49767],{"class":86,"line":33826},[84,49768,33725],{"class":1378},[84,49770,49771,49773,49775],{"class":86,"line":33846},[84,49772,33730],{"class":154},[84,49774,867],{"class":129},[84,49776,4263],{"class":94},[84,49778,49779],{"class":86,"line":33852},[84,49780,33739],{"class":1378},[84,49782,49783,49785,49787,49789,49791],{"class":86,"line":33863},[84,49784,4581],{"class":129},[84,49786,32754],{"class":154},[84,49788,27206],{"class":129},[84,49790,32759],{"class":94},[84,49792,33752],{"class":154},[84,49794,49795],{"class":86,"line":33869},[84,49796,33757],{"class":1378},[84,49798,49799,49801,49803],{"class":86,"line":33875},[84,49800,33762],{"class":154},[84,49802,867],{"class":129},[84,49804,33767],{"class":154},[84,49806,49807],{"class":86,"line":33881},[84,49808,33772],{"class":1378},[84,49810,49811,49813,49815],{"class":86,"line":33887},[84,49812,33777],{"class":154},[84,49814,867],{"class":129},[84,49816,33782],{"class":154},[84,49818,49819],{"class":86,"line":33893},[84,49820,33788],{"class":1378},[84,49822,49823],{"class":86,"line":33899},[84,49824,33794],{"class":154},[84,49826,49827],{"class":86,"line":33905},[84,49828,33800],{"class":1378},[84,49830,49831],{"class":86,"line":33925},[84,49832,33806],{"class":1378},[84,49834,49835,49837,49839],{"class":86,"line":33931},[84,49836,33812],{"class":154},[84,49838,867],{"class":129},[84,49840,33817],{"class":154},[84,49842,49843],{"class":86,"line":33947},[84,49844,33823],{"class":1378},[84,49846,49847,49849,49851,49853,49855,49857,49859],{"class":86,"line":33953},[84,49848,33829],{"class":154},[84,49850,867],{"class":129},[84,49852,33834],{"class":154},[84,49854,33837],{"class":928},[84,49856,867],{"class":129},[84,49858,1529],{"class":94},[84,49860,162],{"class":154},[84,49862,49863],{"class":86,"line":33967},[84,49864,33849],{"class":1378},[84,49866,49867,49869,49871],{"class":86,"line":33973},[84,49868,33855],{"class":154},[84,49870,867],{"class":129},[84,49872,33860],{"class":154},[84,49874,49875],{"class":86,"line":33988},[84,49876,33866],{"class":1378},[84,49878,49879],{"class":86,"line":33994},[84,49880,33872],{"class":154},[84,49882,49883],{"class":86,"line":34003},[84,49884,33878],{"class":1378},[84,49886,49887],{"class":86,"line":34009},[84,49888,33884],{"class":154},[84,49890,49891],{"class":86,"line":34018},[84,49892,33890],{"class":1378},[84,49894,49895],{"class":86,"line":34024},[84,49896,33896],{"class":154},[84,49898,49899],{"class":86,"line":34030},[84,49900,33902],{"class":1378},[84,49902,49903,49905,49907,49909,49911,49913,49915],{"class":86,"line":34039},[84,49904,33908],{"class":154},[84,49906,10649],{"class":129},[84,49908,33913],{"class":154},[84,49910,1043],{"class":129},[84,49912,33918],{"class":154},[84,49914,1504],{"class":94},[84,49916,162],{"class":154},[84,49918,49919],{"class":86,"line":34045},[84,49920,33928],{"class":1378},[84,49922,49923,49925,49927,49929,49931],{"class":86,"line":34056},[84,49924,33934],{"class":154},[84,49926,10649],{"class":129},[84,49928,33939],{"class":154},[84,49930,4127],{"class":129},[84,49932,33944],{"class":154},[84,49934,49935],{"class":86,"line":34062},[84,49936,33950],{"class":1378},[84,49938,49939,49941,49943,49945,49947],{"class":86,"line":34081},[84,49940,33956],{"class":154},[84,49942,10649],{"class":129},[84,49944,33918],{"class":154},[84,49946,1504],{"class":94},[84,49948,162],{"class":154},[84,49950,49951],{"class":86,"line":34087},[84,49952,33970],{"class":1378},[84,49954,49955,49957,49959,49961,49963],{"class":86,"line":34098},[84,49956,4581],{"class":129},[84,49958,33978],{"class":154},[84,49960,27206],{"class":129},[84,49962,32759],{"class":94},[84,49964,33985],{"class":154},[84,49966,49967],{"class":86,"line":34104},[84,49968,33991],{"class":1378},[84,49970,49971,49973,49975],{"class":86,"line":34124},[84,49972,33762],{"class":154},[84,49974,867],{"class":129},[84,49976,33767],{"class":154},[84,49978,49979],{"class":86,"line":34140},[84,49980,34006],{"class":1378},[84,49982,49983,49985,49987],{"class":86,"line":34146},[84,49984,33777],{"class":154},[84,49986,867],{"class":129},[84,49988,33782],{"class":154},[84,49990,49991],{"class":86,"line":34160},[84,49992,34021],{"class":1378},[84,49994,49995],{"class":86,"line":34166},[84,49996,34027],{"class":154},[84,49998,49999],{"class":86,"line":34172},[84,50000,37508],{"class":1378},[84,50002,50003,50005],{"class":86,"line":34183},[84,50004,34033],{"class":129},[84,50006,34036],{"class":154},[84,50008,50009],{"class":86,"line":34189},[84,50010,34042],{"class":1378},[84,50012,50013,50015,50017],{"class":86,"line":34195},[84,50014,37523],{"class":154},[84,50016,867],{"class":129},[84,50018,33817],{"class":154},[84,50020,50021],{"class":86,"line":34205},[84,50022,34059],{"class":1378},[84,50024,50025,50027,50029,50031,50033,50035,50037],{"class":86,"line":34211},[84,50026,37536],{"class":154},[84,50028,867],{"class":129},[84,50030,33834],{"class":154},[84,50032,33837],{"class":928},[84,50034,867],{"class":129},[84,50036,1529],{"class":94},[84,50038,162],{"class":154},[84,50040,50041],{"class":86,"line":34222},[84,50042,34084],{"class":1378},[84,50044,50045,50047,50049],{"class":86,"line":34228},[84,50046,37557],{"class":154},[84,50048,867],{"class":129},[84,50050,33860],{"class":154},[84,50052,50053],{"class":86,"line":34238},[84,50054,34101],{"class":1378},[84,50056,50057,50059,50061,50063,50065,50067,50069],{"class":86,"line":34243},[84,50058,37570],{"class":154},[84,50060,10649],{"class":129},[84,50062,37575],{"class":154},[84,50064,1043],{"class":129},[84,50066,33918],{"class":154},[84,50068,1504],{"class":94},[84,50070,162],{"class":154},[84,50072,50073,50075,50077,50079,50081],{"class":86,"line":34249},[84,50074,37588],{"class":154},[84,50076,10649],{"class":129},[84,50078,33939],{"class":154},[84,50080,4127],{"class":129},[84,50082,33944],{"class":154},[84,50084,50085],{"class":86,"line":34298},[84,50086,37601],{"class":1378},[84,50088,50089,50091,50093,50095,50097],{"class":86,"line":34345},[84,50090,37606],{"class":154},[84,50092,10649],{"class":129},[84,50094,33918],{"class":154},[84,50096,1504],{"class":94},[84,50098,162],{"class":154},[84,50100,50101],{"class":86,"line":34350},[84,50102,34163],{"class":1378},[84,50104,50105],{"class":86,"line":34356},[84,50106,34169],{"class":1378},[84,50108,50109,50111,50113],{"class":86,"line":34375},[84,50110,34175],{"class":154},[84,50112,1893],{"class":129},[84,50114,34180],{"class":154},[84,50116,50117],{"class":86,"line":34381},[84,50118,34186],{"class":1378},[84,50120,50121],{"class":86,"line":34401},[84,50122,34192],{"class":1378},[84,50124,50125,50127,50129],{"class":86,"line":34407},[84,50126,34198],{"class":154},[84,50128,1893],{"class":129},[84,50130,34180],{"class":154},[84,50132,50133],{"class":86,"line":34413},[84,50134,34208],{"class":1378},[84,50136,50137,50139,50141],{"class":86,"line":34423},[84,50138,34214],{"class":154},[84,50140,1893],{"class":129},[84,50142,34219],{"class":154},[84,50144,50145],{"class":86,"line":34428},[84,50146,34225],{"class":1378},[84,50148,50149,50151,50153],{"class":86,"line":34434},[84,50150,34231],{"class":154},[84,50152,1893],{"class":129},[84,50154,34219],{"class":154},[84,50156,50157],{"class":86,"line":34450},[84,50158,3578],{"emptyLinePlaceholder":1252},[84,50160,50161],{"class":86,"line":34495},[84,50162,34246],{"class":1378},[84,50164,50165,50167,50169,50171,50173,50175,50177,50179,50181,50183,50185,50187,50189,50191,50193,50195,50197,50199,50201,50203],{"class":86,"line":34501},[84,50166,33604],{"class":94},[84,50168,155],{"class":154},[84,50170,4770],{"class":158},[84,50172,33612],{"class":94},[84,50174,34260],{"class":158},[84,50176,2204],{"class":94},[84,50178,34265],{"class":129},[84,50180,2254],{"class":94},[84,50182,34270],{"class":158},[84,50184,2204],{"class":94},[84,50186,34265],{"class":129},[84,50188,2254],{"class":94},[84,50190,4770],{"class":158},[84,50192,34281],{"class":154},[84,50194,1841],{"class":129},[84,50196,1529],{"class":94},[84,50198,34288],{"class":154},[84,50200,1841],{"class":129},[84,50202,1529],{"class":94},[84,50204,34295],{"class":154},[84,50206,50207,50209,50211,50213,50215,50217,50219,50221,50223,50225,50227,50229,50231,50233,50235,50237,50239,50241,50243,50245],{"class":86,"line":34507},[84,50208,33604],{"class":94},[84,50210,155],{"class":154},[84,50212,4770],{"class":158},[84,50214,33612],{"class":94},[84,50216,34309],{"class":158},[84,50218,2204],{"class":94},[84,50220,34265],{"class":129},[84,50222,2254],{"class":94},[84,50224,34318],{"class":158},[84,50226,2204],{"class":94},[84,50228,34265],{"class":129},[84,50230,2254],{"class":94},[84,50232,4770],{"class":158},[84,50234,34329],{"class":154},[84,50236,1841],{"class":129},[84,50238,1529],{"class":94},[84,50240,34336],{"class":154},[84,50242,1841],{"class":129},[84,50244,1529],{"class":94},[84,50246,34295],{"class":154},[84,50248,50249],{"class":86,"line":34513},[84,50250,3578],{"emptyLinePlaceholder":1252},[84,50252,50253],{"class":86,"line":34524},[84,50254,34353],{"class":1378},[84,50256,50257,50259,50261,50263,50265,50267,50269],{"class":86,"line":34530},[84,50258,3675],{"class":129},[84,50260,34361],{"class":154},[84,50262,1841],{"class":129},[84,50264,1529],{"class":94},[84,50266,2248],{"class":154},[84,50268,2268],{"class":129},[84,50270,34372],{"class":154},[84,50272,50273],{"class":86,"line":34536},[84,50274,34378],{"class":1378},[84,50276,50277,50279,50281,50283,50285,50287,50289],{"class":86,"line":34542},[84,50278,34384],{"class":154},[84,50280,1362],{"class":94},[84,50282,867],{"class":129},[84,50284,34391],{"class":154},[84,50286,1841],{"class":129},[84,50288,1529],{"class":94},[84,50290,34398],{"class":154},[84,50292,50293],{"class":86,"line":34560},[84,50294,34404],{"class":1378},[84,50296,50297],{"class":86,"line":34574},[84,50298,34410],{"class":1378},[84,50300,50301,50303,50305],{"class":86,"line":34583},[84,50302,34416],{"class":154},[84,50304,867],{"class":129},[84,50306,33467],{"class":154},[84,50308,50309],{"class":86,"line":34592},[84,50310,3578],{"emptyLinePlaceholder":1252},[84,50312,50313],{"class":86,"line":34601},[84,50314,34431],{"class":1378},[84,50316,50317,50319,50321,50323,50325],{"class":86,"line":34610},[84,50318,34437],{"class":154},[84,50320,867],{"class":129},[84,50322,34442],{"class":154},[84,50324,1841],{"class":129},[84,50326,34447],{"class":154},[84,50328,50329,50331,50333,50335,50337,50339,50341,50343,50345,50347,50349,50351,50353,50355,50357,50359,50361,50363],{"class":86,"line":34616},[84,50330,33604],{"class":94},[84,50332,155],{"class":154},[84,50334,34457],{"class":158},[84,50336,2204],{"class":94},[84,50338,34462],{"class":129},[84,50340,2254],{"class":94},[84,50342,1853],{"class":158},[84,50344,2204],{"class":94},[84,50346,34462],{"class":129},[84,50348,2254],{"class":94},[84,50350,34475],{"class":158},[84,50352,34478],{"class":154},[84,50354,34481],{"class":129},[84,50356,2215],{"class":94},[84,50358,34486],{"class":154},[84,50360,1638],{"class":129},[84,50362,2215],{"class":94},[84,50364,31651],{"class":154},[84,50366,50367],{"class":86,"line":34622},[84,50368,37885],{"class":1378},[84,50370,50371],{"class":86,"line":34630},[84,50372,37890],{"class":1378},[84,50374,50375,50377,50379],{"class":86,"line":34635},[84,50376,37895],{"class":154},[84,50378,34519],{"class":158},[84,50380,162],{"class":154},[84,50382,50383],{"class":86,"line":34641},[84,50384,34539],{"class":1378},[84,50386,50387,50389,50391,50393,50395,50397],{"class":86,"line":34652},[84,50388,34545],{"class":154},[84,50390,867],{"class":129},[84,50392,34550],{"class":154},[84,50394,34553],{"class":928},[84,50396,867],{"class":129},[84,50398,2727],{"class":154},[84,50400,50401,50403,50405,50407],{"class":86,"line":34658},[84,50402,34563],{"class":158},[84,50404,2167],{"class":154},[84,50406,34568],{"class":94},[84,50408,34571],{"class":154},[84,50410,50411,50413],{"class":86,"line":34678},[84,50412,34577],{"class":158},[84,50414,34580],{"class":154},[84,50416,50417,50419],{"class":86,"line":34684},[84,50418,34586],{"class":158},[84,50420,34589],{"class":154},[84,50422,50423,50425],{"class":86,"line":34690},[84,50424,34595],{"class":158},[84,50426,34598],{"class":154},[84,50428,50429,50431],{"class":86,"line":34696},[84,50430,34604],{"class":158},[84,50432,34607],{"class":154},[84,50434,50435],{"class":86,"line":34713},[84,50436,34613],{"class":154},[84,50438,50439],{"class":86,"line":34719},[84,50440,34619],{"class":1378},[84,50442,50443,50445],{"class":86,"line":34725},[84,50444,5268],{"class":129},[84,50446,34627],{"class":154},[84,50448,50449],{"class":86,"line":34731},[84,50450,3578],{"emptyLinePlaceholder":1252},[84,50452,50453],{"class":86,"line":34737},[84,50454,34638],{"class":1378},[84,50456,50457,50459,50461],{"class":86,"line":34743},[84,50458,33100],{"class":129},[84,50460,34646],{"class":90},[84,50462,34649],{"class":154},[84,50464,50465],{"class":86,"line":34770},[84,50466,34655],{"class":1378},[84,50468,50469,50471,50473,50475,50477,50479,50481,50483],{"class":86,"line":34794},[84,50470,34661],{"class":154},[84,50472,32846],{"class":928},[84,50474,867],{"class":129},[84,50476,155],{"class":154},[84,50478,1807],{"class":94},[84,50480,1688],{"class":154},[84,50482,1604],{"class":94},[84,50484,31651],{"class":154},[84,50486,50487],{"class":86,"line":34800},[84,50488,34681],{"class":1378},[84,50490,50491],{"class":86,"line":34806},[84,50492,34687],{"class":1378},[84,50494,50495],{"class":86,"line":34812},[84,50496,34693],{"class":1378},[84,50498,50499,50501,50503,50505,50507,50509,50511],{"class":86,"line":34823},[84,50500,32880],{"class":154},[84,50502,1529],{"class":94},[84,50504,1688],{"class":154},[84,50506,1397],{"class":94},[84,50508,1688],{"class":154},[84,50510,1529],{"class":94},[84,50512,162],{"class":154},[84,50514,50515],{"class":86,"line":34834},[84,50516,34716],{"class":1378},[84,50518,50519],{"class":86,"line":34840},[84,50520,34722],{"class":1378},[84,50522,50523],{"class":86,"line":34857},[84,50524,34728],{"class":1378},[84,50526,50527],{"class":86,"line":34880},[84,50528,34734],{"class":1378},[84,50530,50531],{"class":86,"line":34903},[84,50532,34740],{"class":1378},[84,50534,50535,50537,50539,50541,50543,50545,50547,50549,50551],{"class":86,"line":34909},[84,50536,34746],{"class":154},[84,50538,34749],{"class":158},[84,50540,34752],{"class":154},[84,50542,34755],{"class":158},[84,50544,1688],{"class":154},[84,50546,34760],{"class":928},[84,50548,867],{"class":129},[84,50550,34765],{"class":158},[84,50552,162],{"class":154},[84,50554,50555,50557,50559,50561,50563,50565,50567,50569,50571],{"class":86,"line":34914},[84,50556,34746],{"class":154},[84,50558,34749],{"class":158},[84,50560,34777],{"class":154},[84,50562,34780],{"class":158},[84,50564,1688],{"class":154},[84,50566,34760],{"class":928},[84,50568,867],{"class":129},[84,50570,34789],{"class":158},[84,50572,162],{"class":154},[84,50574,50575],{"class":86,"line":34923},[84,50576,34797],{"class":1378},[84,50578,50579],{"class":86,"line":34933},[84,50580,34803],{"class":154},[84,50582,50583],{"class":86,"line":34939},[84,50584,34809],{"class":1378},[84,50586,50587,50589,50591],{"class":86,"line":34944},[84,50588,34815],{"class":154},[84,50590,34818],{"class":158},[84,50592,162],{"class":154},[84,50594,50595,50597,50599],{"class":86,"line":34950},[84,50596,34826],{"class":154},[84,50598,34829],{"class":158},[84,50600,162],{"class":154},[84,50602,50603],{"class":86,"line":34963},[84,50604,34837],{"class":1378},[84,50606,50607,50609,50611,50613,50615,50617,50619],{"class":86,"line":34969},[84,50608,32880],{"class":154},[84,50610,1529],{"class":94},[84,50612,1688],{"class":154},[84,50614,1397],{"class":94},[84,50616,1688],{"class":154},[84,50618,1397],{"class":94},[84,50620,162],{"class":154},[84,50622,50623,50625,50627,50629,50631,50633,50635,50637,50639],{"class":86,"line":34980},[84,50624,34746],{"class":154},[84,50626,34749],{"class":158},[84,50628,34864],{"class":154},[84,50630,34755],{"class":158},[84,50632,1688],{"class":154},[84,50634,34760],{"class":928},[84,50636,867],{"class":129},[84,50638,34875],{"class":158},[84,50640,162],{"class":154},[84,50642,50643,50645,50647,50649,50651,50653,50655,50657,50659],{"class":86,"line":34991},[84,50644,34746],{"class":154},[84,50646,34749],{"class":158},[84,50648,34887],{"class":154},[84,50650,34780],{"class":158},[84,50652,1688],{"class":154},[84,50654,34760],{"class":928},[84,50656,867],{"class":129},[84,50658,34898],{"class":158},[84,50660,162],{"class":154},[84,50662,50663],{"class":86,"line":35010},[84,50664,34906],{"class":1378},[84,50666,50668],{"class":86,"line":50667},219,[84,50669,34803],{"class":154},[84,50671,50673,50675,50677],{"class":86,"line":50672},220,[84,50674,34815],{"class":154},[84,50676,34749],{"class":158},[84,50678,162],{"class":154},[84,50680,50682,50684,50686],{"class":86,"line":50681},221,[84,50683,34826],{"class":154},[84,50685,34928],{"class":158},[84,50687,162],{"class":154},[84,50689,50691],{"class":86,"line":50690},222,[84,50692,34936],{"class":154},[84,50694,50696],{"class":86,"line":50695},223,[84,50697,3578],{"emptyLinePlaceholder":1252},[84,50699,50701],{"class":86,"line":50700},224,[84,50702,34947],{"class":1378},[84,50704,50706,50708,50710,50712,50714],{"class":86,"line":50705},225,[84,50707,2712],{"class":129},[84,50709,32374],{"class":94},[84,50711,4127],{"class":129},[84,50713,32379],{"class":158},[84,50715,4917],{"class":154},[84,50717,50719],{"class":86,"line":50718},226,[84,50720,34966],{"class":1378},[84,50722,50724,50726,50728],{"class":86,"line":50723},227,[84,50725,45698],{"class":154},[84,50727,867],{"class":129},[84,50729,45703],{"class":154},[84,50731,50733,50735,50737],{"class":86,"line":50732},228,[84,50734,34983],{"class":154},[84,50736,867],{"class":129},[84,50738,34988],{"class":154},[84,50740,50742,50744,50746,50748,50750,50752,50754],{"class":86,"line":50741},229,[84,50743,34545],{"class":154},[84,50745,867],{"class":129},[84,50747,45720],{"class":154},[84,50749,35001],{"class":928},[84,50751,867],{"class":129},[84,50753,2215],{"class":94},[84,50755,162],{"class":154},[84,50757,50759],{"class":86,"line":50758},230,[84,50760,35013],{"class":154},[23168,50762,50764],{"id":50763},"_242测试代码","2.4.2.测试代码",[19,50766,50767],{},"使用测试集进行测试与推理",[60,50769,50771],{"className":121,"code":50770,"language":91,"meta":66,"style":66},"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",[39,50772,50773,50779,50789,50799,50810,50820,50824,50828,50836,50841,50845,50862,50866,50870,50874,50878,50882,50914,50918,50926,50930,50942,50946,50950,50954,50958,50962,50966,50970,50974,50992,51006,51010,51020,51030,51040,51046,51050,51054,51062,51066,51082,51090,51094,51098,51106,51114,51118,51122,51126,51130,51136,51140,51150,51158,51166,51170,51174,51178,51186,51190,51206,51210,51214,51218,51230,51234,51246,51250,51254,51266,51270,51280,51284,51288,51300,51304,51312,51316,51320,51328,51332,51340,51344,51348,51352,51356,51360,51376,51384,51388,51392,51410,51416,51420,51430,51438,51446,51450,51454,51458,51462,51470,51474,51490,51494,51502,51510],{"__ignoreMap":66},[84,50774,50775,50777],{"class":86,"line":87},[84,50776,31547],{"class":129},[84,50778,31550],{"class":154},[84,50780,50781,50783,50785,50787],{"class":86,"line":98},[84,50782,31547],{"class":129},[84,50784,32568],{"class":154},[84,50786,1157],{"class":129},[84,50788,32573],{"class":154},[84,50790,50791,50793,50795,50797],{"class":86,"line":106},[84,50792,31891],{"class":129},[84,50794,32551],{"class":154},[84,50796,31547],{"class":129},[84,50798,32556],{"class":154},[84,50800,50801,50803,50805,50807],{"class":86,"line":112},[84,50802,31891],{"class":129},[84,50804,32522],{"class":154},[84,50806,31547],{"class":129},[84,50808,50809],{"class":154}," ImageFolder\n",[84,50811,50812,50814,50816,50818],{"class":86,"line":425},[84,50813,31891],{"class":129},[84,50815,33067],{"class":154},[84,50817,31547],{"class":129},[84,50819,45792],{"class":154},[84,50821,50822],{"class":86,"line":2395},[84,50823,3578],{"emptyLinePlaceholder":1252},[84,50825,50826],{"class":86,"line":2401},[84,50827,35103],{"class":1378},[84,50829,50830,50832,50834],{"class":86,"line":2492},[84,50831,33100],{"class":129},[84,50833,35110],{"class":90},[84,50835,33106],{"class":154},[84,50837,50838],{"class":86,"line":2498},[84,50839,50840],{"class":1378},"   # 导入自己的数据集，并进行数据处理\n",[84,50842,50843],{"class":86,"line":2510},[84,50844,49110],{"class":1378},[84,50846,50847,50849,50851,50853,50855,50857,50860],{"class":86,"line":2793},[84,50848,49115],{"class":94},[84,50850,867],{"class":129},[84,50852,1978],{"class":129},[84,50854,1562],{"class":158},[84,50856,1867],{"class":94},[84,50858,50859],{"class":49126},"\u002Fdata\u002Ftest",[84,50861,26296],{"class":158},[84,50863,50864],{"class":86,"line":2798},[84,50865,3578],{"emptyLinePlaceholder":1252},[84,50867,50868],{"class":86,"line":2804},[84,50869,49138],{"class":1378},[84,50871,50872],{"class":86,"line":2809},[84,50873,49143],{"class":1378},[84,50875,50876],{"class":86,"line":2823},[84,50877,49148],{"class":1378},[84,50879,50880],{"class":86,"line":2828},[84,50881,49153],{"class":1378},[84,50883,50884,50886,50888,50890,50892,50894,50896,50898,50900,50902,50904,50906,50908,50910,50912],{"class":86,"line":2834},[84,50885,49158],{"class":154},[84,50887,867],{"class":129},[84,50889,49163],{"class":154},[84,50891,49166],{"class":94},[84,50893,1688],{"class":154},[84,50895,49171],{"class":94},[84,50897,1688],{"class":154},[84,50899,49176],{"class":94},[84,50901,49179],{"class":154},[84,50903,49182],{"class":94},[84,50905,1688],{"class":154},[84,50907,49187],{"class":94},[84,50909,1688],{"class":154},[84,50911,49192],{"class":94},[84,50913,5834],{"class":154},[84,50915,50916],{"class":86,"line":2855},[84,50917,49199],{"class":1378},[84,50919,50920,50922,50924],{"class":86,"line":2860},[84,50921,49204],{"class":154},[84,50923,867],{"class":129},[84,50925,49209],{"class":154},[84,50927,50928],{"class":86,"line":2874},[84,50929,49214],{"class":1378},[84,50931,50932,50934,50936,50938,50940],{"class":86,"line":2879},[84,50933,49219],{"class":154},[84,50935,32654],{"class":94},[84,50937,1688],{"class":154},[84,50939,32654],{"class":94},[84,50941,43774],{"class":154},[84,50943,50944],{"class":86,"line":2908},[84,50945,49232],{"class":1378},[84,50947,50948],{"class":86,"line":2913},[84,50949,49237],{"class":154},[84,50951,50952],{"class":86,"line":2930},[84,50953,49242],{"class":154},[84,50955,50956],{"class":86,"line":2935},[84,50957,49247],{"class":1378},[84,50959,50960],{"class":86,"line":2940},[84,50961,49252],{"class":1378},[84,50963,50964],{"class":86,"line":2945},[84,50965,3578],{"emptyLinePlaceholder":1252},[84,50967,50968],{"class":86,"line":2959},[84,50969,49261],{"class":1378},[84,50971,50972],{"class":86,"line":2964},[84,50973,49266],{"class":1378},[84,50975,50976,50978,50980,50982,50984,50986,50988,50990],{"class":86,"line":3755},[84,50977,35117],{"class":154},[84,50979,867],{"class":129},[84,50981,49275],{"class":154},[84,50983,49278],{"class":94},[84,50985,1688],{"class":154},[84,50987,49283],{"class":928},[84,50989,867],{"class":129},[84,50991,49288],{"class":154},[84,50993,50994,50996,50998,51000,51002,51004],{"class":86,"line":3769},[84,50995,35174],{"class":154},[84,50997,867],{"class":129},[84,50999,32687],{"class":154},[84,51001,32690],{"class":928},[84,51003,867],{"class":129},[84,51005,35185],{"class":154},[84,51007,51008],{"class":86,"line":3777},[84,51009,35190],{"class":1378},[84,51011,51012,51014,51016,51018],{"class":86,"line":3782},[84,51013,35195],{"class":928},[84,51015,867],{"class":129},[84,51017,1529],{"class":94},[84,51019,32619],{"class":154},[84,51021,51022,51024,51026,51028],{"class":86,"line":3788},[84,51023,35206],{"class":928},[84,51025,867],{"class":129},[84,51027,32629],{"class":94},[84,51029,32619],{"class":154},[84,51031,51032,51034,51036,51038],{"class":86,"line":3794},[84,51033,35217],{"class":928},[84,51035,867],{"class":129},[84,51037,1504],{"class":94},[84,51039,162],{"class":154},[84,51041,51042,51044],{"class":86,"line":3799},[84,51043,5268],{"class":129},[84,51045,35230],{"class":154},[84,51047,51048],{"class":86,"line":9120},[84,51049,3578],{"emptyLinePlaceholder":1252},[84,51051,51052],{"class":86,"line":9144},[84,51053,35239],{"class":1378},[84,51055,51056,51058,51060],{"class":86,"line":9149},[84,51057,33100],{"class":129},[84,51059,35246],{"class":90},[84,51061,35249],{"class":154},[84,51063,51064],{"class":86,"line":9155},[84,51065,35254],{"class":1378},[84,51067,51068,51070,51072,51074,51076,51078,51080],{"class":86,"line":9182},[84,51069,32391],{"class":154},[84,51071,867],{"class":129},[84,51073,32398],{"class":158},[84,51075,2885],{"class":129},[84,51077,32403],{"class":154},[84,51079,2882],{"class":129},[84,51081,35271],{"class":158},[84,51083,51084,51086,51088],{"class":86,"line":9187},[84,51085,32443],{"class":154},[84,51087,867],{"class":129},[84,51089,33442],{"class":154},[84,51091,51092],{"class":86,"line":9193},[84,51093,3578],{"emptyLinePlaceholder":1252},[84,51095,51096],{"class":86,"line":9205},[84,51097,35288],{"class":1378},[84,51099,51100,51102,51104],{"class":86,"line":9217},[84,51101,35293],{"class":154},[84,51103,867],{"class":129},[84,51105,33495],{"class":94},[84,51107,51108,51110,51112],{"class":86,"line":9229},[84,51109,35302],{"class":154},[84,51111,867],{"class":129},[84,51113,4263],{"class":94},[84,51115,51116],{"class":86,"line":10888},[84,51117,3578],{"emptyLinePlaceholder":1252},[84,51119,51120],{"class":86,"line":10913},[84,51121,35315],{"class":1378},[84,51123,51124],{"class":86,"line":10936},[84,51125,35320],{"class":1378},[84,51127,51128],{"class":86,"line":10960},[84,51129,35325],{"class":1378},[84,51131,51132,51134],{"class":86,"line":10965},[84,51133,35330],{"class":129},[84,51135,34036],{"class":154},[84,51137,51138],{"class":86,"line":10970},[84,51139,35337],{"class":1378},[84,51141,51142,51144,51146,51148],{"class":86,"line":10975},[84,51143,4581],{"class":129},[84,51145,35344],{"class":154},[84,51147,27206],{"class":129},[84,51149,35349],{"class":154},[84,51151,51152,51154,51156],{"class":86,"line":10984},[84,51153,35354],{"class":154},[84,51155,867],{"class":129},[84,51157,35359],{"class":154},[84,51159,51160,51162,51164],{"class":86,"line":10989},[84,51161,35364],{"class":154},[84,51163,867],{"class":129},[84,51165,35369],{"class":154},[84,51167,51168],{"class":86,"line":10995},[84,51169,35374],{"class":1378},[84,51171,51172],{"class":86,"line":11016},[84,51173,34027],{"class":154},[84,51175,51176],{"class":86,"line":11022},[84,51177,35383],{"class":1378},[84,51179,51180,51182,51184],{"class":86,"line":11036},[84,51181,33812],{"class":154},[84,51183,867],{"class":129},[84,51185,35392],{"class":154},[84,51187,51188],{"class":86,"line":11042},[84,51189,35397],{"class":1378},[84,51191,51192,51194,51196,51198,51200,51202,51204],{"class":86,"line":11069},[84,51193,33829],{"class":154},[84,51195,867],{"class":129},[84,51197,33834],{"class":154},[84,51199,33837],{"class":928},[84,51201,867],{"class":129},[84,51203,1529],{"class":94},[84,51205,162],{"class":154},[84,51207,51208],{"class":86,"line":11078},[84,51209,35418],{"class":1378},[84,51211,51212],{"class":86,"line":11084},[84,51213,35423],{"class":1378},[84,51215,51216],{"class":86,"line":11092},[84,51217,35428],{"class":1378},[84,51219,51220,51222,51224,51226,51228],{"class":86,"line":11097},[84,51221,35433],{"class":154},[84,51223,10649],{"class":129},[84,51225,33939],{"class":154},[84,51227,4127],{"class":129},[84,51229,35442],{"class":154},[84,51231,51232],{"class":86,"line":17774},[84,51233,35447],{"class":1378},[84,51235,51236,51238,51240,51242,51244],{"class":86,"line":17780},[84,51237,35452],{"class":154},[84,51239,10649],{"class":129},[84,51241,35457],{"class":154},[84,51243,1504],{"class":94},[84,51245,162],{"class":154},[84,51247,51248],{"class":86,"line":17803},[84,51249,3578],{"emptyLinePlaceholder":1252},[84,51251,51252],{"class":86,"line":17809},[84,51253,35470],{"class":1378},[84,51255,51256,51258,51260,51262,51264],{"class":86,"line":17832},[84,51257,35475],{"class":154},[84,51259,867],{"class":129},[84,51261,35480],{"class":154},[84,51263,1893],{"class":129},[84,51265,35485],{"class":154},[84,51267,51268],{"class":86,"line":17846},[84,51269,35490],{"class":1378},[84,51271,51272,51274,51276,51278],{"class":86,"line":17866},[84,51273,33604],{"class":94},[84,51275,155],{"class":154},[84,51277,35499],{"class":158},[84,51279,35502],{"class":154},[84,51281,51282],{"class":86,"line":17872},[84,51283,3578],{"emptyLinePlaceholder":1252},[84,51285,51286],{"class":86,"line":17883},[84,51287,35511],{"class":1378},[84,51289,51290,51292,51294,51296,51298],{"class":86,"line":17906},[84,51291,2712],{"class":129},[84,51293,32374],{"class":94},[84,51295,4127],{"class":129},[84,51297,32379],{"class":158},[84,51299,4917],{"class":154},[84,51301,51302],{"class":86,"line":17928},[84,51303,35528],{"class":1378},[84,51305,51306,51308,51310],{"class":86,"line":17933},[84,51307,32443],{"class":154},[84,51309,867],{"class":129},[84,51311,45703],{"class":154},[84,51313,51314],{"class":86,"line":17939},[84,51315,35541],{"class":1378},[84,51317,51318],{"class":86,"line":17953},[84,51319,35546],{"class":1378},[84,51321,51322,51324,51326],{"class":86,"line":17966},[84,51323,35551],{"class":154},[84,51325,35554],{"class":158},[84,51327,31651],{"class":154},[84,51329,51330],{"class":86,"line":17971},[84,51331,35561],{"class":1378},[84,51333,51334,51336,51338],{"class":86,"line":17985},[84,51335,35174],{"class":154},[84,51337,867],{"class":129},[84,51339,35570],{"class":154},[84,51341,51342],{"class":86,"line":17990},[84,51343,35575],{"class":1378},[84,51345,51346],{"class":86,"line":17996},[84,51347,35580],{"class":154},[84,51349,51350],{"class":86,"line":18001},[84,51351,3578],{"emptyLinePlaceholder":1252},[84,51353,51354],{"class":86,"line":18015},[84,51355,35589],{"class":1378},[84,51357,51358],{"class":86,"line":18020},[84,51359,35594],{"class":1378},[84,51361,51362,51364,51366,51368,51370,51372,51374],{"class":86,"line":18025},[84,51363,32391],{"class":154},[84,51365,867],{"class":129},[84,51367,32398],{"class":158},[84,51369,2885],{"class":129},[84,51371,32403],{"class":154},[84,51373,2882],{"class":129},[84,51375,35271],{"class":158},[84,51377,51378,51380,51382],{"class":86,"line":18039},[84,51379,32443],{"class":154},[84,51381,867],{"class":129},[84,51383,33442],{"class":154},[84,51385,51386],{"class":86,"line":18051},[84,51387,35623],{"class":1378},[84,51389,51390],{"class":86,"line":18056},[84,51391,35628],{"class":1378},[84,51393,51394,51396,51398,51400,51403,51405,51408],{"class":86,"line":18069},[84,51395,35633],{"class":154},[84,51397,867],{"class":129},[84,51399,2198],{"class":154},[84,51401,51402],{"class":158},"'猫'",[84,51404,1688],{"class":154},[84,51406,51407],{"class":158},"'狗'",[84,51409,34398],{"class":154},[84,51411,51412,51414],{"class":86,"line":18074},[84,51413,35330],{"class":129},[84,51415,34036],{"class":154},[84,51417,51418],{"class":86,"line":18079},[84,51419,35698],{"class":1378},[84,51421,51422,51424,51426,51428],{"class":86,"line":18084},[84,51423,4581],{"class":129},[84,51425,35705],{"class":154},[84,51427,27206],{"class":129},[84,51429,35349],{"class":154},[84,51431,51432,51434,51436],{"class":86,"line":18097},[84,51433,33762],{"class":154},[84,51435,867],{"class":129},[84,51437,33767],{"class":154},[84,51439,51440,51442,51444],{"class":86,"line":18102},[84,51441,33777],{"class":154},[84,51443,867],{"class":129},[84,51445,33782],{"class":154},[84,51447,51448],{"class":86,"line":33785},[84,51449,3578],{"emptyLinePlaceholder":1252},[84,51451,51452],{"class":86,"line":33791},[84,51453,35734],{"class":1378},[84,51455,51456],{"class":86,"line":33797},[84,51457,34027],{"class":154},[84,51459,51460],{"class":86,"line":33803},[84,51461,35743],{"class":1378},[84,51463,51464,51466,51468],{"class":86,"line":33809},[84,51465,33812],{"class":154},[84,51467,867],{"class":129},[84,51469,33817],{"class":154},[84,51471,51472],{"class":86,"line":33820},[84,51473,35756],{"class":1378},[84,51475,51476,51478,51480,51482,51484,51486,51488],{"class":86,"line":33826},[84,51477,33829],{"class":154},[84,51479,867],{"class":129},[84,51481,33834],{"class":154},[84,51483,33837],{"class":928},[84,51485,867],{"class":129},[84,51487,1529],{"class":94},[84,51489,162],{"class":154},[84,51491,51492],{"class":86,"line":33846},[84,51493,35777],{"class":1378},[84,51495,51496,51498,51500],{"class":86,"line":33852},[84,51497,35782],{"class":154},[84,51499,867],{"class":129},[84,51501,35787],{"class":154},[84,51503,51504,51506,51508],{"class":86,"line":33863},[84,51505,35792],{"class":154},[84,51507,867],{"class":129},[84,51509,35797],{"class":154},[84,51511,51512,51514,51516,51518,51520,51522,51524,51526],{"class":86,"line":33869},[84,51513,35802],{"class":94},[84,51515,155],{"class":154},[84,51517,35807],{"class":158},[84,51519,35810],{"class":154},[84,51521,35813],{"class":158},[84,51523,1688],{"class":154},[84,51525,35818],{"class":158},[84,51527,35821],{"class":154},[1222,51529,51530],{},"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":66,"searchDepth":98,"depth":98,"links":51532},[51533,51534,51535,51536],{"id":31745,"depth":106,"text":31746},{"id":38991,"depth":106,"text":38992},{"id":42424,"depth":106,"text":42425},{"id":46433,"depth":106,"text":46434},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31737,"description":1249},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51543,"title":51544,"body":51545,"description":1249,"extension":1250,"meta":51552,"navigation":1252,"path":51553,"seo":51554,"stem":51555,"__hash__":51556},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51546,"toc":51550},[51547],[10,51548,51544],{"id":51549},"_3yolo模型学习",{"title":66,"searchDepth":98,"depth":98,"links":51551},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51544,"description":1249},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51558,"title":51559,"body":51560,"description":51567,"extension":1250,"meta":51568,"navigation":1252,"path":51570,"seo":51571,"stem":51572,"__hash__":51573},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51561,"toc":51565},[51562],[19,51563,51564],{},"yolo模型还未补充",{"title":66,"searchDepth":98,"depth":98,"links":51566},[],"深度学习学习",{"category":51569},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51559,"description":51567},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51575,"title":51576,"body":51577,"description":1249,"extension":1250,"meta":51602,"navigation":1252,"path":51603,"seo":51604,"stem":51605,"__hash__":51606},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51578,"toc":51600},[51579,51582,51585,51590,51597],[10,51580,51576],{"id":51581},"_1工具",[19,51583,51584],{},"提示错误插件：有问题会提前报错",[19,51586,51587],{},[2643,51588],{"alt":66,"src":51589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51591,51592],{},[208,51593,51596],{"href":51594,"rel":51595},"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",[212],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51598,51599],{},"alt键加上下箭头可以实现语句的移动",{"title":66,"searchDepth":98,"depth":98,"links":51601},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51576,"description":1249},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51608,"title":51609,"body":51610,"description":1249,"extension":1250,"meta":54474,"navigation":1252,"path":54475,"seo":54476,"stem":54477,"__hash__":54478},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51611,"toc":54425},[51612,51615,51619,51623,51628,51631,51636,51640,51647,51652,51659,51664,51671,51676,51680,51685,51688,51692,51697,51701,51706,51709,51712,51715,51718,51721,51724,51727,51730,51735,51740,51745,51749,51752,51755,51759,51764,51767,51775,51780,51797,51805,51810,51815,51820,51825,51830,51833,51838,51843,51847,51856,51861,51866,51870,51875,51878,51882,51887,51895,51900,51905,51908,51913,51918,51923,51926,51929,51932,51937,51942,51945,51950,51953,51958,51961,51964,51967,51972,51975,51978,51993,51998,52003,52008,52011,52014,52017,52031,52034,52039,52044,52047,52050,52053,52056,52059,52062,52065,52069,52073,52078,52082,52085,52090,52095,52098,52103,52106,52110,52115,52118,52121,52124,52127,52130,52133,52136,52139,52142,52146,52151,52156,52161,52164,52167,52171,52176,52179,52183,52186,52189,52194,52197,52200,52204,52208,52211,52216,52221,52224,52253,52258,52263,52268,52273,52277,52282,52286,52291,52294,52298,52302,52307,52311,52316,52321,52325,52330,52333,52335,52338,52343,52347,52352,52356,52360,52365,52370,52375,52380,52384,52389,52394,52399,52402,52405,52410,52413,52418,52423,52428,52433,52437,53244,53248,53591,53596,53599,53602,53605,53608,53611,53614,53617,53620,53622,53625,53627,53630,53634,53639,53642,53645,53648,53652,53657,53662,53682,53685,53689,53694,53699,53716,53720,53749,53753,53775,53777,53816,53824,53830,53834,53837,53840,53845,53850,53853,53856,53859,53864,53869,53872,53875,53878,53881,53884,53887,53890,53893,53896,53899,53902,53904,53907,53910,53913,53916,53919,53922,53925,53928,53932,53937,53940,53945,53948,53951,53954,53957,53960,53963,53966,53968,53971,53974,53977,53980,53983,53986,53990,53993,54002,54005,54010,54013,54018,54021,54024,54027,54030,54033,54036,54039,54043,54047,54050,54053,54058,54063,54068,54072,54077,54082,54085,54088,54091,54094,54097,54102,54105,54110,54112,54117,54120,54124,54129,54132,54135,54140,54144,54147,54152,54155,54158,54187,54192,54195,54198,54201,54204,54207,54211,54214,54300,54304,54307,54312,54317,54324,54327,54330,54333,54336,54339,54344,54349,54352,54355,54358,54361,54364,54367,54370,54373,54376,54378,54381,54385,54390,54395,54400,54403,54408,54413,54416,54419,54422],[10,51613,51609],{"id":51614},"_2基础语法",[14,51616,51618],{"id":51617},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[198,51620,51622],{"id":51621},"_211-js组成","2.1.1 js组成",[26,51624,51625],{},[29,51626,51627],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51629,51630],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,51632,51633],{"start":98},[29,51634,51635],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[198,51637,51639],{"id":51638},"_212-js书写位置","2.1.2 js书写位置",[26,51641,51642],{},[29,51643,51644],{},[1464,51645,51646],{},"内部 JavaScript",[19,51648,51649],{},[2643,51650],{"alt":66,"src":51651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,51653,51654],{"start":98},[29,51655,51656],{},[1464,51657,51658],{},"外部 JavaScript",[19,51660,51661],{},[2643,51662],{"alt":66,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,51665,51666],{"start":106},[29,51667,51668],{},[1464,51669,51670],{},"内联 JavaScript",[19,51672,51673],{},[2643,51674],{"alt":66,"src":51675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[198,51677,51679],{"id":51678},"_213-javascript注释","2.1.3 JavaScript注释",[19,51681,51682],{},[2643,51683],{"alt":66,"src":51684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51686,51687],{},"alt+shift+a一定要记住！",[198,51689,51691],{"id":51690},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51693,51694],{},[2643,51695],{"alt":66,"src":51696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[198,51698,51700],{"id":51699},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,51702,51703],{},[29,51704,51705],{},"输出语法：",[19,51707,51708],{},"①document.write('要出的内容')",[19,51710,51711],{},"向body内输出内容；",[19,51713,51714],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51716,51717],{},"②alert('要出的内容')",[19,51719,51720],{},"页面弹出警告对话框",[19,51722,51723],{},"③console.log('控制台打印')",[19,51725,51726],{},"控制台输出语法，程序员调试使用",[19,51728,51729],{},"输入log就行，自动生成：",[19,51731,51732],{},[2643,51733],{"alt":66,"src":51734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,51736,51737],{"start":98},[29,51738,51739],{},"输入语法：",[19,51741,51742],{},[2643,51743],{"alt":66,"src":51744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[198,51746,51748],{"id":51747},"_2116-字面量","21.1.6 字面量",[19,51750,51751],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51753,51754],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51756,51758],{"id":51757},"_22-变量","2.2 变量",[26,51760,51761],{},[29,51762,51763],{},"变量声明",[19,51765,51766],{},"let 变量名",[2315,51768,51769,51772],{},[29,51770,51771],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,51773,51774],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,51776,51777],{"start":98},[29,51778,51779],{},"变量赋值",[60,51781,51785],{"className":51782,"code":51783,"language":51784,"meta":66,"style":66},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[39,51786,51787,51792],{"__ignoreMap":66},[84,51788,51789],{"class":86,"line":87},[84,51790,51791],{"class":154},"let age\n",[84,51793,51794],{"class":86,"line":98},[84,51795,51796],{"class":154},"age=18\n",[26,51798,51799,51802],{"start":106},[29,51800,51801],{},"连这些（变量的初始化）：let age=18",[29,51803,51804],{},"更新变量",[19,51806,51807],{},[2643,51808],{"alt":66,"src":51809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,51811,51812],{"start":425},[29,51813,51814],{},"声明多个变量",[19,51816,51817],{},[2643,51818],{"alt":66,"src":51819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,51821,51822],{"start":2395},[29,51823,51824],{},"变量命名规则与规范",[19,51826,51827],{},[2643,51828],{"alt":66,"src":51829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51831,51832],{},"遵守小驼峰！",[26,51834,51835],{"start":2401},[29,51836,51837],{},"变量拓展-let和var的区别",[19,51839,51840],{},[2643,51841],{"alt":66,"src":51842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51844,51846],{"id":51845},"_23-数组","2.3 数组",[60,51848,51850],{"className":51782,"code":51849,"language":51784,"meta":66,"style":66},"let arr = []\n",[39,51851,51852],{"__ignoreMap":66},[84,51853,51854],{"class":86,"line":87},[84,51855,51849],{"class":154},[19,51857,51858],{},[2643,51859],{"alt":66,"src":51860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51862,51863],{},[2643,51864],{"alt":66,"src":51865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51867,51869],{"id":51868},"_24-常量","2.4 常量",[19,51871,51872],{},[2643,51873],{"alt":66,"src":51874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51876,51877],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51879,51881],{"id":51880},"_25-数据类型","2.5 数据类型",[19,51883,51884],{},[2643,51885],{"alt":66,"src":51886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,51888,51889,51892],{},[29,51890,51891],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,51893,51894],{},"算数运算符：",[19,51896,51897],{},[2643,51898],{"alt":66,"src":51899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,51901,51902],{"start":106},[29,51903,51904],{},"数字类型（Number）",[19,51906,51907],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51909,51910],{},[2643,51911],{"alt":66,"src":51912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,51914,51915],{"start":112},[29,51916,51917],{},"字符串类型（string）",[19,51919,51920],{},[2643,51921],{"alt":66,"src":51922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51924,51925],{},"反引号也是可以使用的",[19,51927,51928],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51930,51931],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,51933,51934],{"start":425},[29,51935,51936],{},"模板字符串",[19,51938,51939],{},[2643,51940],{"alt":66,"src":51941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51943,51944],{},"类似于python的字符串格式化",[26,51946,51947],{"start":2395},[29,51948,51949],{},"布尔类型",[19,51951,51952],{},"true 和 false",[26,51954,51955],{"start":2401},[29,51956,51957],{},"未定义类型（underfined）",[19,51959,51960],{},"表示没有赋值",[19,51962,51963],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51965,51966],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,51968,51969],{"start":2492},[29,51970,51971],{},"null（空类型）",[19,51973,51974],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51976,51977],{},"赋值了，但是内容为空",[60,51979,51981],{"className":51782,"code":51980,"language":51784,"meta":66,"style":66},"typeof null\n输出的是'object'，是一个对象数据类型\n",[39,51982,51983,51988],{"__ignoreMap":66},[84,51984,51985],{"class":86,"line":87},[84,51986,51987],{"class":154},"typeof null\n",[84,51989,51990],{"class":86,"line":98},[84,51991,51992],{"class":154},"输出的是'object'，是一个对象数据类型\n",[26,51994,51995],{"start":2498},[29,51996,51997],{},"控制台检测数据类型",[19,51999,52000],{},[2643,52001],{"alt":66,"src":52002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52004,52005],{"start":2510},[29,52006,52007],{},"类型转换",[19,52009,52010],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52012,52013],{},"转换方式：隐式转换和显示转换",[19,52015,52016],{},"①隐式转换",[2315,52018,52019,52022,52025,52028],{},[29,52020,52021],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52023,52024],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52026,52027],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52029,52030],{},"任何数据和字符串相加结果都是字符串",[19,52032,52033],{},"②显示转换",[19,52035,52036],{},[2643,52037],{"alt":66,"src":52038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52040,52041],{},[2643,52042],{"alt":66,"src":52043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52045,52046],{},"在输入的时候要用好隐式转换，简单写起来",[19,52048,52049],{},"let num = +prompt(’请输入数字：‘)",[19,52051,52052],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52054,52055],{},"console.log(parseInt('12.333px'))",[19,52057,52058],{},"输出为：12",[19,52060,52061],{},"console.log(parseInt('a'a'a12.333px'))",[19,52063,52064],{},"输出：NaN",[14,52066,52068],{"id":52067},"_26-运算符","2.6 运算符",[198,52070,52072],{"id":52071},"_261-赋值运算符","2.6.1 赋值运算符",[19,52074,52075],{},[2643,52076],{"alt":66,"src":52077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[198,52079,52081],{"id":52080},"_262-一元运算符","2.6.2 一元运算符",[19,52083,52084],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52086,52087],{},[2643,52088],{"alt":66,"src":52089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52091,52092],{},[2643,52093],{"alt":66,"src":52094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52096,52097],{},"两者的区别：",[19,52099,52100],{},[2643,52101],{"alt":66,"src":52102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52104,52105],{},"前置先自加；后置后加，代码执行完之后再加",[198,52107,52109],{"id":52108},"_263-比较运算符","2.6.3 比较运算符",[19,52111,52112],{},[2643,52113],{"alt":66,"src":52114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52116,52117],{},"比较运算符也有隐式转换",[19,52119,52120],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52122,52123],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52125,52126],{},"要使用三等，开发的时候",[19,52128,52129],{},"NaN不等于任何人，包括它自己",[19,52131,52132],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52134,52135],{},"7\u002F10=0.7",[19,52137,52138],{},"最后：0.5+0.2=0.7",[19,52140,52141],{},"字符串比较，比较的是字符对应的ASCII码",[198,52143,52145],{"id":52144},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52147,52148],{},[2643,52149],{"alt":66,"src":52150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52152,52153],{},[2643,52154],{"alt":66,"src":52155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52157,52158],{},[2643,52159],{"alt":66,"src":52160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52162,52163],{},"上述题目选D",[19,52165,52166],{},"与真2假1；或真1假2",[198,52168,52170],{"id":52169},"_265-运算符优先级","2.6.5 运算符优先级",[19,52172,52173],{},[2643,52174],{"alt":66,"src":52175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52177,52178],{},"先算逻辑与，后算逻辑或",[14,52180,52182],{"id":52181},"_27-语句","2.7 语句",[19,52184,52185],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52187,52188],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52190,52191],{},[2643,52192],{"alt":66,"src":52193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52195,52196],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52198,52199],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[198,52201,52203],{"id":52202},"_271-分支语句","2.7.1 分支语句",[23168,52205,52207],{"id":52206},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52209,52210],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,52212,52213],{},[29,52214,52215],{},"单分支语句",[19,52217,52218],{},[2643,52219],{"alt":66,"src":52220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52222,52223],{},"除了0，所有数字都为真",[60,52225,52227],{"className":51782,"code":52226,"language":51784,"meta":66,"style":66},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[39,52228,52229,52234,52239,52244,52248],{"__ignoreMap":66},[84,52230,52231],{"class":86,"line":87},[84,52232,52233],{"class":154},"if（0) {\n",[84,52235,52236],{"class":86,"line":98},[84,52237,52238],{"class":154},"    let a=1\n",[84,52240,52241],{"class":86,"line":106},[84,52242,52243],{"class":154},"    alert(typeof a)\n",[84,52245,52246],{"class":86,"line":112},[84,52247,2746],{"class":154},[84,52249,52250],{"class":86,"line":425},[84,52251,52252],{"class":154},"不输出，括号为假\n",[26,52254,52255],{"start":98},[29,52256,52257],{},"双分支语句",[19,52259,52260],{},[2643,52261],{"alt":66,"src":52262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,52264,52265],{"start":106},[29,52266,52267],{},"多分支语句",[19,52269,52270],{},[2643,52271],{"alt":66,"src":52272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23168,52274,52276],{"id":52275},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52278,52279],{},[2643,52280],{"alt":66,"src":52281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23168,52283,52285],{"id":52284},"_2713-switch语句","2.7.1.3 switch语句",[19,52287,52288],{},[2643,52289],{"alt":66,"src":52290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52292,52293],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[198,52295,52297],{"id":52296},"_272-循环语句","2.7.2 循环语句",[23168,52299,52301],{"id":52300},"_2721-断点演示","2.7.2.1 断点演示",[19,52303,52304],{},[2643,52305],{"alt":66,"src":52306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23168,52308,52310],{"id":52309},"_2722-while循环","2.7.2.2 while循环",[19,52312,52313],{},[2643,52314],{"alt":66,"src":52315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52317,52318],{},[2643,52319],{"alt":66,"src":52320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23168,52322,52324],{"id":52323},"_2723-for循环","2.7.2.3 for循环",[19,52326,52327],{},[2643,52328],{"alt":66,"src":52329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52331,52332],{},"for(;;) {",[19,52334,2254],{},[19,52336,52337],{},"表示无限循环",[19,52339,52340],{},[2643,52341],{"alt":66,"src":52342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23168,52344,52346],{"id":52345},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52348,52349],{},[2643,52350],{"alt":66,"src":52351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52353,52355],{"id":52354},"_28-数组","2.8 数组",[198,52357,52359],{"id":52358},"_281-基础认识","2.8.1 基础认识",[19,52361,52362],{},[2643,52363],{"alt":66,"src":52364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52366,52367],{},[2643,52368],{"alt":66,"src":52369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52371,52372],{},[2643,52373],{"alt":66,"src":52374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52376,52377],{},[2643,52378],{"alt":66,"src":52379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[198,52381,52383],{"id":52382},"_282-操作数组","2.8.2 操作数组",[19,52385,52386],{},[2643,52387],{"alt":66,"src":52388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,52390,52391],{},[29,52392,52393],{},"添加元素",[19,52395,52396],{},[2643,52397],{"alt":66,"src":52398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52400,52401],{},"console.log(arr.push('green'))",[19,52403,52404],{},"输出结果：为新数组的长度",[19,52406,52407],{},[2643,52408],{"alt":66,"src":52409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52411,52412],{},"push用的非常多，一定要记住",[26,52414,52415],{},[29,52416,52417],{},"删除元素",[19,52419,52420],{},[2643,52421],{"alt":66,"src":52422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52424,52425],{},[2643,52426],{"alt":66,"src":52427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52429,52430],{},[2643,52431],{"alt":66,"src":52432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[198,52434,52436],{"id":52435},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[60,52438,52440],{"className":51782,"code":52439,"language":51784,"meta":66,"style":66},"\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",[39,52441,52442,52457,52473,52477,52486,52504,52528,52550,52564,52572,52579,52591,52602,52606,52610,52617,52629,52644,52657,52676,52693,52708,52720,52732,52744,52748,52752,52763,52773,52785,52797,52809,52820,52824,52828,52840,52844,52858,52862,52866,52877,52891,52903,52917,52921,52930,52939,52943,52952,52956,52965,52970,52975,52988,53016,53021,53026,53051,53056,53060,53065,53070,53085,53089,53094,53124,53136,53152,53168,53182,53187,53194,53198,53203,53216,53224,53232,53236],{"__ignoreMap":66},[84,52443,52444,52447,52451,52454],{"class":86,"line":87},[84,52445,52446],{"class":154},"\u003C!",[84,52448,52450],{"class":52449},"s9eBZ","DOCTYPE",[84,52452,52453],{"class":90}," html",[84,52455,52456],{"class":154},">\n",[84,52458,52459,52461,52463,52466,52468,52471],{"class":86,"line":98},[84,52460,2218],{"class":154},[84,52462,51784],{"class":52449},[84,52464,52465],{"class":90}," lang",[84,52467,867],{"class":154},[84,52469,52470],{"class":158},"\"en\"",[84,52472,52456],{"class":154},[84,52474,52475],{"class":86,"line":106},[84,52476,3578],{"emptyLinePlaceholder":1252},[84,52478,52479,52481,52484],{"class":86,"line":112},[84,52480,2218],{"class":154},[84,52482,52483],{"class":52449},"head",[84,52485,52456],{"class":154},[84,52487,52488,52491,52494,52497,52499,52502],{"class":86,"line":425},[84,52489,52490],{"class":154},"    \u003C",[84,52492,52493],{"class":52449},"meta",[84,52495,52496],{"class":90}," charset",[84,52498,867],{"class":154},[84,52500,52501],{"class":158},"\"UTF-8\"",[84,52503,52456],{"class":154},[84,52505,52506,52508,52510,52513,52515,52518,52521,52523,52526],{"class":86,"line":2395},[84,52507,52490],{"class":154},[84,52509,52493],{"class":52449},[84,52511,52512],{"class":90}," http-equiv",[84,52514,867],{"class":154},[84,52516,52517],{"class":158},"\"X-UA-Compatible\"",[84,52519,52520],{"class":90}," content",[84,52522,867],{"class":154},[84,52524,52525],{"class":158},"\"IE=edge\"",[84,52527,52456],{"class":154},[84,52529,52530,52532,52534,52536,52538,52541,52543,52545,52548],{"class":86,"line":2401},[84,52531,52490],{"class":154},[84,52533,52493],{"class":52449},[84,52535,16090],{"class":90},[84,52537,867],{"class":154},[84,52539,52540],{"class":158},"\"viewport\"",[84,52542,52520],{"class":90},[84,52544,867],{"class":154},[84,52546,52547],{"class":158},"\"width=device-width, initial-scale=1.0\"",[84,52549,52456],{"class":154},[84,52551,52552,52554,52557,52560,52562],{"class":86,"line":2492},[84,52553,52490],{"class":154},[84,52555,52556],{"class":52449},"title",[84,52558,52559],{"class":154},">Document\u003C\u002F",[84,52561,52556],{"class":52449},[84,52563,52456],{"class":154},[84,52565,52566,52568,52570],{"class":86,"line":2498},[84,52567,52490],{"class":154},[84,52569,1222],{"class":52449},[84,52571,52456],{"class":154},[84,52573,52574,52577],{"class":86,"line":2510},[84,52575,52576],{"class":52449},"        *",[84,52578,16742],{"class":154},[84,52580,52581,52584,52587,52589],{"class":86,"line":2793},[84,52582,52583],{"class":94},"            margin",[84,52585,52586],{"class":154},": ",[84,52588,1504],{"class":94},[84,52590,2471],{"class":154},[84,52592,52593,52596,52598,52600],{"class":86,"line":2798},[84,52594,52595],{"class":94},"            padding",[84,52597,52586],{"class":154},[84,52599,1504],{"class":94},[84,52601,2471],{"class":154},[84,52603,52604],{"class":86,"line":2804},[84,52605,3707],{"class":154},[84,52607,52608],{"class":86,"line":2809},[84,52609,3578],{"emptyLinePlaceholder":1252},[84,52611,52612,52615],{"class":86,"line":2823},[84,52613,52614],{"class":90},"        .box",[84,52616,16742],{"class":154},[84,52618,52619,52622,52624,52627],{"class":86,"line":2828},[84,52620,52621],{"class":94},"            display",[84,52623,52586],{"class":154},[84,52625,52626],{"class":94},"flex",[84,52628,2471],{"class":154},[84,52630,52631,52634,52636,52639,52642],{"class":86,"line":2834},[84,52632,52633],{"class":94},"            width",[84,52635,52586],{"class":154},[84,52637,52638],{"class":94},"700",[84,52640,52641],{"class":129},"px",[84,52643,2471],{"class":154},[84,52645,52646,52649,52651,52653,52655],{"class":86,"line":2855},[84,52647,52648],{"class":94},"            height",[84,52650,52586],{"class":154},[84,52652,5151],{"class":94},[84,52654,52641],{"class":129},[84,52656,2471],{"class":154},[84,52658,52659,52662,52664,52666,52668,52671,52674],{"class":86,"line":2860},[84,52660,52661],{"class":94},"            border-left",[84,52663,52586],{"class":154},[84,52665,1529],{"class":94},[84,52667,52641],{"class":129},[84,52669,52670],{"class":94}," solid",[84,52672,52673],{"class":94}," pink",[84,52675,2471],{"class":154},[84,52677,52678,52681,52683,52685,52687,52689,52691],{"class":86,"line":2874},[84,52679,52680],{"class":94},"            border-bottom",[84,52682,52586],{"class":154},[84,52684,1529],{"class":94},[84,52686,52641],{"class":129},[84,52688,52670],{"class":94},[84,52690,52673],{"class":94},[84,52692,2471],{"class":154},[84,52694,52695,52697,52699,52701,52703,52706],{"class":86,"line":2879},[84,52696,52583],{"class":94},[84,52698,52586],{"class":154},[84,52700,1964],{"class":94},[84,52702,52641],{"class":129},[84,52704,52705],{"class":94}," auto",[84,52707,2471],{"class":154},[84,52709,52710,52713,52715,52718],{"class":86,"line":2908},[84,52711,52712],{"class":94},"            justify-content",[84,52714,52586],{"class":154},[84,52716,52717],{"class":94},"space-around",[84,52719,2471],{"class":154},[84,52721,52722,52725,52727,52730],{"class":86,"line":2913},[84,52723,52724],{"class":94},"            align-items",[84,52726,52586],{"class":154},[84,52728,52729],{"class":94},"flex-end",[84,52731,2471],{"class":154},[84,52733,52734,52737,52739,52742],{"class":86,"line":2930},[84,52735,52736],{"class":94},"            text-align",[84,52738,52586],{"class":154},[84,52740,52741],{"class":94},"center",[84,52743,2471],{"class":154},[84,52745,52746],{"class":86,"line":2935},[84,52747,3707],{"class":154},[84,52749,52750],{"class":86,"line":2940},[84,52751,3578],{"emptyLinePlaceholder":1252},[84,52753,52754,52756,52758,52761],{"class":86,"line":2945},[84,52755,52614],{"class":90},[84,52757,2268],{"class":129},[84,52759,52760],{"class":52449},"div",[84,52762,16742],{"class":154},[84,52764,52765,52767,52769,52771],{"class":86,"line":2959},[84,52766,52621],{"class":94},[84,52768,52586],{"class":154},[84,52770,52626],{"class":94},[84,52772,2471],{"class":154},[84,52774,52775,52777,52779,52781,52783],{"class":86,"line":2964},[84,52776,52633],{"class":94},[84,52778,52586],{"class":154},[84,52780,1964],{"class":94},[84,52782,52641],{"class":129},[84,52784,2471],{"class":154},[84,52786,52787,52790,52792,52795],{"class":86,"line":3755},[84,52788,52789],{"class":94},"            background-color",[84,52791,52586],{"class":154},[84,52793,52794],{"class":94},"pink",[84,52796,2471],{"class":154},[84,52798,52799,52802,52804,52807],{"class":86,"line":3769},[84,52800,52801],{"class":94},"            flex-direction",[84,52803,52586],{"class":154},[84,52805,52806],{"class":94},"column",[84,52808,2471],{"class":154},[84,52810,52811,52813,52815,52818],{"class":86,"line":3777},[84,52812,52712],{"class":94},[84,52814,52586],{"class":154},[84,52816,52817],{"class":94},"space-between",[84,52819,2471],{"class":154},[84,52821,52822],{"class":86,"line":3782},[84,52823,3707],{"class":154},[84,52825,52826],{"class":86,"line":3788},[84,52827,3578],{"emptyLinePlaceholder":1252},[84,52829,52830,52832,52835,52838],{"class":86,"line":3794},[84,52831,52614],{"class":90},[84,52833,52834],{"class":52449}," div",[84,52836,52837],{"class":52449}," span",[84,52839,16742],{"class":154},[84,52841,52842],{"class":86,"line":3799},[84,52843,3578],{"emptyLinePlaceholder":1252},[84,52845,52846,52849,52851,52854,52856],{"class":86,"line":9120},[84,52847,52848],{"class":94},"            margin-top",[84,52850,52586],{"class":154},[84,52852,52853],{"class":94},"-20",[84,52855,52641],{"class":129},[84,52857,2471],{"class":154},[84,52859,52860],{"class":86,"line":9144},[84,52861,3707],{"class":154},[84,52863,52864],{"class":86,"line":9149},[84,52865,3578],{"emptyLinePlaceholder":1252},[84,52867,52868,52870,52872,52875],{"class":86,"line":9155},[84,52869,52614],{"class":90},[84,52871,52834],{"class":52449},[84,52873,52874],{"class":52449}," h4",[84,52876,16742],{"class":154},[84,52878,52879,52882,52884,52887,52889],{"class":86,"line":9182},[84,52880,52881],{"class":94},"            margin-bottom",[84,52883,52586],{"class":154},[84,52885,52886],{"class":94},"-35",[84,52888,52641],{"class":129},[84,52890,2471],{"class":154},[84,52892,52893,52895,52897,52899,52901],{"class":86,"line":9187},[84,52894,52633],{"class":94},[84,52896,52586],{"class":154},[84,52898,1666],{"class":94},[84,52900,52641],{"class":129},[84,52902,2471],{"class":154},[84,52904,52905,52908,52910,52913,52915],{"class":86,"line":9193},[84,52906,52907],{"class":94},"            margin-left",[84,52909,52586],{"class":154},[84,52911,52912],{"class":94},"-10",[84,52914,52641],{"class":129},[84,52916,2471],{"class":154},[84,52918,52919],{"class":86,"line":9205},[84,52920,3707],{"class":154},[84,52922,52923,52926,52928],{"class":86,"line":9217},[84,52924,52925],{"class":154},"    \u003C\u002F",[84,52927,1222],{"class":52449},[84,52929,52456],{"class":154},[84,52931,52932,52935,52937],{"class":86,"line":9229},[84,52933,52934],{"class":154},"\u003C\u002F",[84,52936,52483],{"class":52449},[84,52938,52456],{"class":154},[84,52940,52941],{"class":86,"line":10888},[84,52942,3578],{"emptyLinePlaceholder":1252},[84,52944,52945,52947,52950],{"class":86,"line":10913},[84,52946,2218],{"class":154},[84,52948,52949],{"class":52449},"body",[84,52951,52456],{"class":154},[84,52953,52954],{"class":86,"line":10936},[84,52955,3578],{"emptyLinePlaceholder":1252},[84,52957,52958,52960,52963],{"class":86,"line":10960},[84,52959,52490],{"class":154},[84,52961,52962],{"class":52449},"script",[84,52964,52456],{"class":154},[84,52966,52967],{"class":86,"line":10965},[84,52968,52969],{"class":1378},"        \u002F\u002F 1. 四次弹框效果\n",[84,52971,52972],{"class":86,"line":10970},[84,52973,52974],{"class":1378},"        \u002F\u002F 声明一个新的数组\n",[84,52976,52977,52980,52983,52985],{"class":86,"line":10975},[84,52978,52979],{"class":129},"        let",[84,52981,52982],{"class":154}," arr ",[84,52984,867],{"class":129},[84,52986,52987],{"class":154}," []\n",[84,52989,52990,52992,52994,52997,52999,53001,53003,53005,53007,53010,53012,53014],{"class":86,"line":10984},[84,52991,4581],{"class":129},[84,52993,2839],{"class":154},[84,52995,52996],{"class":129},"let",[84,52998,10610],{"class":154},[84,53000,867],{"class":129},[84,53002,133],{"class":94},[84,53004,10617],{"class":154},[84,53006,2769],{"class":129},[84,53008,53009],{"class":94}," 4",[84,53011,4392],{"class":154},[84,53013,3470],{"class":129},[84,53015,13613],{"class":154},[84,53017,53018],{"class":86,"line":10989},[84,53019,53020],{"class":1378},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[84,53022,53023],{"class":86,"line":10995},[84,53024,53025],{"class":1378},"            \u002F\u002F arr.push(num)\n",[84,53027,53028,53031,53034,53036,53039,53041,53044,53046,53049],{"class":86,"line":11016},[84,53029,53030],{"class":154},"            arr.",[84,53032,53033],{"class":90},"push",[84,53035,155],{"class":154},[84,53037,53038],{"class":90},"prompt",[84,53040,155],{"class":154},[84,53042,53043],{"class":158},"`请输入第${",[84,53045,1751],{"class":154},[84,53047,53048],{"class":158},"}季度的数据:`",[84,53050,31651],{"class":154},[84,53052,53053],{"class":86,"line":11022},[84,53054,53055],{"class":1378},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[84,53057,53058],{"class":86,"line":11036},[84,53059,3707],{"class":154},[84,53061,53062],{"class":86,"line":11042},[84,53063,53064],{"class":1378},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[84,53066,53067],{"class":86,"line":11069},[84,53068,53069],{"class":1378},"        \u002F\u002F 盒子开头\n",[84,53071,53072,53075,53078,53080,53083],{"class":86,"line":11078},[84,53073,53074],{"class":154},"        document.",[84,53076,53077],{"class":90},"write",[84,53079,155],{"class":154},[84,53081,53082],{"class":158},"` \u003Cdiv class=\"box\">`",[84,53084,162],{"class":154},[84,53086,53087],{"class":86,"line":11084},[84,53088,3578],{"emptyLinePlaceholder":1252},[84,53090,53091],{"class":86,"line":11092},[84,53092,53093],{"class":1378},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[84,53095,53096,53098,53100,53102,53104,53106,53108,53110,53112,53115,53118,53120,53122],{"class":86,"line":11097},[84,53097,4581],{"class":129},[84,53099,2839],{"class":154},[84,53101,52996],{"class":129},[84,53103,10610],{"class":154},[84,53105,867],{"class":129},[84,53107,5271],{"class":94},[84,53109,10617],{"class":154},[84,53111,2218],{"class":129},[84,53113,53114],{"class":154}," arr.",[84,53116,53117],{"class":94},"length",[84,53119,4392],{"class":154},[84,53121,3470],{"class":129},[84,53123,13613],{"class":154},[84,53125,53126,53129,53131,53133],{"class":86,"line":17774},[84,53127,53128],{"class":154},"            document.",[84,53130,53077],{"class":90},[84,53132,155],{"class":154},[84,53134,53135],{"class":158},"`\n",[84,53137,53138,53141,53143,53145,53147,53149],{"class":86,"line":17780},[84,53139,53140],{"class":158},"              \u003Cdiv style=\"height: ${",[84,53142,5058],{"class":154},[84,53144,2198],{"class":158},[84,53146,1751],{"class":154},[84,53148,2248],{"class":158},[84,53150,53151],{"class":158},"}px;\">\n",[84,53153,53154,53157,53159,53161,53163,53165],{"class":86,"line":17803},[84,53155,53156],{"class":158},"                \u003Cspan>${",[84,53158,5058],{"class":154},[84,53160,2198],{"class":158},[84,53162,1751],{"class":154},[84,53164,2248],{"class":158},[84,53166,53167],{"class":158},"}\u003C\u002Fspan>\n",[84,53169,53170,53173,53175,53177,53179],{"class":86,"line":17809},[84,53171,53172],{"class":158},"                \u003Ch4>第${",[84,53174,1751],{"class":154},[84,53176,136],{"class":129},[84,53178,133],{"class":94},[84,53180,53181],{"class":158},"}季度\u003C\u002Fh4>\n",[84,53183,53184],{"class":86,"line":17832},[84,53185,53186],{"class":158},"              \u003C\u002Fdiv>          \n",[84,53188,53189,53192],{"class":86,"line":17846},[84,53190,53191],{"class":158},"            `",[84,53193,162],{"class":154},[84,53195,53196],{"class":86,"line":17866},[84,53197,3707],{"class":154},[84,53199,53200],{"class":86,"line":17872},[84,53201,53202],{"class":1378},"        \u002F\u002F 盒子结尾\n",[84,53204,53205,53207,53209,53211,53214],{"class":86,"line":17883},[84,53206,53074],{"class":154},[84,53208,53077],{"class":90},[84,53210,155],{"class":154},[84,53212,53213],{"class":158},"` \u003C\u002Fdiv>`",[84,53215,162],{"class":154},[84,53217,53218,53220,53222],{"class":86,"line":17906},[84,53219,52925],{"class":154},[84,53221,52962],{"class":52449},[84,53223,52456],{"class":154},[84,53225,53226,53228,53230],{"class":86,"line":17928},[84,53227,52934],{"class":154},[84,53229,52949],{"class":52449},[84,53231,52456],{"class":154},[84,53233,53234],{"class":86,"line":17933},[84,53235,3578],{"emptyLinePlaceholder":1252},[84,53237,53238,53240,53242],{"class":86,"line":17939},[84,53239,52934],{"class":154},[84,53241,51784],{"class":52449},[84,53243,52456],{"class":154},[198,53245,53247],{"id":53246},"_284-冒泡排序","2.8.4 冒泡排序",[60,53249,53251],{"className":51782,"code":53250,"language":51784,"meta":66,"style":66},"\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",[39,53252,53253,53263,53277,53281,53289,53304,53324,53336,53344,53348,53356,53364,53396,53429,53466,53471,53490,53495,53508,53523,53539,53543,53548,53552,53562,53571,53579,53583],{"__ignoreMap":66},[84,53254,53255,53257,53259,53261],{"class":86,"line":87},[84,53256,52446],{"class":154},[84,53258,52450],{"class":52449},[84,53260,52453],{"class":90},[84,53262,52456],{"class":154},[84,53264,53265,53267,53269,53271,53273,53275],{"class":86,"line":98},[84,53266,2218],{"class":154},[84,53268,51784],{"class":52449},[84,53270,52465],{"class":90},[84,53272,867],{"class":154},[84,53274,52470],{"class":158},[84,53276,52456],{"class":154},[84,53278,53279],{"class":86,"line":106},[84,53280,3578],{"emptyLinePlaceholder":1252},[84,53282,53283,53285,53287],{"class":86,"line":112},[84,53284,2218],{"class":154},[84,53286,52483],{"class":52449},[84,53288,52456],{"class":154},[84,53290,53291,53294,53296,53298,53300,53302],{"class":86,"line":425},[84,53292,53293],{"class":154},"  \u003C",[84,53295,52493],{"class":52449},[84,53297,52496],{"class":90},[84,53299,867],{"class":154},[84,53301,52501],{"class":158},[84,53303,52456],{"class":154},[84,53305,53306,53308,53310,53312,53314,53316,53318,53320,53322],{"class":86,"line":2395},[84,53307,53293],{"class":154},[84,53309,52493],{"class":52449},[84,53311,16090],{"class":90},[84,53313,867],{"class":154},[84,53315,52540],{"class":158},[84,53317,52520],{"class":90},[84,53319,867],{"class":154},[84,53321,52547],{"class":158},[84,53323,52456],{"class":154},[84,53325,53326,53328,53330,53332,53334],{"class":86,"line":2401},[84,53327,53293],{"class":154},[84,53329,52556],{"class":52449},[84,53331,52559],{"class":154},[84,53333,52556],{"class":52449},[84,53335,52456],{"class":154},[84,53337,53338,53340,53342],{"class":86,"line":2492},[84,53339,52934],{"class":154},[84,53341,52483],{"class":52449},[84,53343,52456],{"class":154},[84,53345,53346],{"class":86,"line":2498},[84,53347,3578],{"emptyLinePlaceholder":1252},[84,53349,53350,53352,53354],{"class":86,"line":2510},[84,53351,2218],{"class":154},[84,53353,52949],{"class":52449},[84,53355,52456],{"class":154},[84,53357,53358,53360,53362],{"class":86,"line":2793},[84,53359,53293],{"class":154},[84,53361,52962],{"class":52449},[84,53363,52456],{"class":154},[84,53365,53366,53369,53371,53373,53376,53378,53380,53382,53384,53386,53388,53390,53392,53394],{"class":86,"line":2798},[84,53367,53368],{"class":129},"    let",[84,53370,52982],{"class":154},[84,53372,867],{"class":129},[84,53374,53375],{"class":154}," [",[84,53377,1629],{"class":94},[84,53379,846],{"class":154},[84,53381,1604],{"class":94},[84,53383,846],{"class":154},[84,53385,1391],{"class":94},[84,53387,846],{"class":154},[84,53389,1397],{"class":94},[84,53391,846],{"class":154},[84,53393,1529],{"class":94},[84,53395,34398],{"class":154},[84,53397,53398,53400,53402,53404,53406,53408,53410,53412,53414,53416,53418,53421,53423,53425,53427],{"class":86,"line":2804},[84,53399,4379],{"class":129},[84,53401,2839],{"class":154},[84,53403,52996],{"class":129},[84,53405,10610],{"class":154},[84,53407,867],{"class":129},[84,53409,5271],{"class":94},[84,53411,10617],{"class":154},[84,53413,2218],{"class":129},[84,53415,53114],{"class":154},[84,53417,53117],{"class":94},[84,53419,53420],{"class":129}," -",[84,53422,133],{"class":94},[84,53424,4392],{"class":154},[84,53426,3470],{"class":129},[84,53428,13613],{"class":154},[84,53430,53431,53434,53436,53438,53440,53442,53444,53446,53448,53450,53452,53454,53456,53458,53460,53462,53464],{"class":86,"line":2809},[84,53432,53433],{"class":129},"      for",[84,53435,2839],{"class":154},[84,53437,52996],{"class":129},[84,53439,10672],{"class":154},[84,53441,867],{"class":129},[84,53443,5271],{"class":94},[84,53445,10679],{"class":154},[84,53447,2218],{"class":129},[84,53449,53114],{"class":154},[84,53451,53117],{"class":94},[84,53453,53420],{"class":129},[84,53455,10610],{"class":154},[84,53457,1841],{"class":129},[84,53459,133],{"class":94},[84,53461,10686],{"class":154},[84,53463,3470],{"class":129},[84,53465,13613],{"class":154},[84,53467,53468],{"class":86,"line":2823},[84,53469,53470],{"class":1378},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[84,53472,53473,53475,53478,53480,53483,53485,53487],{"class":86,"line":2828},[84,53474,3675],{"class":129},[84,53476,53477],{"class":154}," (arr[j] ",[84,53479,2268],{"class":129},[84,53481,53482],{"class":154}," arr[j ",[84,53484,1790],{"class":129},[84,53486,133],{"class":94},[84,53488,53489],{"class":154},"]) {\n",[84,53491,53492],{"class":86,"line":2834},[84,53493,53494],{"class":1378},"          \u002F\u002F 交换两个变量\n",[84,53496,53497,53500,53503,53505],{"class":86,"line":2855},[84,53498,53499],{"class":129},"          let",[84,53501,53502],{"class":154}," tmp ",[84,53504,867],{"class":129},[84,53506,53507],{"class":154}," arr[j]\n",[84,53509,53510,53513,53515,53517,53519,53521],{"class":86,"line":2860},[84,53511,53512],{"class":154},"          arr[j] ",[84,53514,867],{"class":129},[84,53516,53482],{"class":154},[84,53518,1790],{"class":129},[84,53520,133],{"class":94},[84,53522,34398],{"class":154},[84,53524,53525,53528,53530,53532,53534,53536],{"class":86,"line":2874},[84,53526,53527],{"class":154},"          arr[j ",[84,53529,1790],{"class":129},[84,53531,133],{"class":94},[84,53533,5620],{"class":154},[84,53535,867],{"class":129},[84,53537,53538],{"class":154}," tmp\n",[84,53540,53541],{"class":86,"line":2879},[84,53542,3707],{"class":154},[84,53544,53545],{"class":86,"line":2908},[84,53546,53547],{"class":154},"      }\n",[84,53549,53550],{"class":86,"line":2913},[84,53551,3365],{"class":154},[84,53553,53554,53557,53559],{"class":86,"line":2930},[84,53555,53556],{"class":154},"    document.",[84,53558,53077],{"class":90},[84,53560,53561],{"class":154},"(arr)\n",[84,53563,53564,53567,53569],{"class":86,"line":2935},[84,53565,53566],{"class":154},"  \u003C\u002F",[84,53568,52962],{"class":52449},[84,53570,52456],{"class":154},[84,53572,53573,53575,53577],{"class":86,"line":2940},[84,53574,52934],{"class":154},[84,53576,52949],{"class":52449},[84,53578,52456],{"class":154},[84,53580,53581],{"class":86,"line":2945},[84,53582,3578],{"emptyLinePlaceholder":1252},[84,53584,53585,53587,53589],{"class":86,"line":2959},[84,53586,52934],{"class":154},[84,53588,51784],{"class":52449},[84,53590,52456],{"class":154},[19,53592,53593],{},[2643,53594],{"alt":66,"src":53595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53597,53598],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53600,53601],{},"let arr = [4, 2, 5, 1, 3]",[19,53603,53604],{},"\u002F\u002F 1.升序排列写法",[19,53606,53607],{},"arr.sort(function (a, b) {",[19,53609,53610],{},"return a - b",[19,53612,53613],{},"})",[19,53615,53616],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53618,53619],{},"\u002F\u002F 降序排列写法",[19,53621,53607],{},[19,53623,53624],{},"return b - a",[19,53626,53613],{},[19,53628,53629],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53631,53633],{"id":53632},"_29-函数","2.9 函数",[19,53635,53636],{},[2643,53637],{"alt":66,"src":53638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53640,53641],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53643,53644],{},"函数的声明用function",[19,53646,53647],{},"函数里边可以嵌套函数",[198,53649,53651],{"id":53650},"_291-函数传参","2.9.1 函数传参",[19,53653,53654],{},[2643,53655],{"alt":66,"src":53656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53658,53659],{},[2643,53660],{"alt":66,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2315,53663,53664,53667,53670,53673,53676,53679],{},[29,53665,53666],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,53668,53669],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,53671,53672],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,53674,53675],{},"开发中尽量保持形参和实参个数一致",[29,53677,53678],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,53680,53681],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53683,53684],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[198,53686,53688],{"id":53687},"_292-函数的返回值","2.9.2 函数的返回值",[19,53690,53691],{},[2643,53692],{"alt":66,"src":53693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53695,53696],{},[2643,53697],{"alt":66,"src":53698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2315,53700,53701,53704,53707,53710,53713],{},[29,53702,53703],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,53705,53706],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,53708,53709],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,53711,53712],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,53714,53715],{},"断点调试:进入函数内部看执行过程F11",[198,53717,53719],{"id":53718},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[60,53721,53723],{"className":51782,"code":53722,"language":51784,"meta":66,"style":66},"    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",[39,53724,53725,53730,53735,53739,53744],{"__ignoreMap":66},[84,53726,53727],{"class":86,"line":87},[84,53728,53729],{"class":154},"    function fn(a, b) {\n",[84,53731,53732],{"class":86,"line":98},[84,53733,53734],{"class":154},"      console.log(a + b);\n",[84,53736,53737],{"class":86,"line":106},[84,53738,3365],{"class":154},[84,53740,53741],{"class":86,"line":112},[84,53742,53743],{"class":154},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[84,53745,53746],{"class":86,"line":425},[84,53747,53748],{"class":154},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[198,53750,53752],{"id":53751},"_294-作用域","2.9.4 作用域",[2315,53754,53755,53761,53766,53769,53772],{},[29,53756,53757,53758],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1464,53759,53760],{},"作用域",[29,53762,53763],{},[1464,53764,53765],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,53767,53768],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,53770,53771],{},"函数内部可以直接所使用全局变量",[29,53773,53774],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53776,15803],{},[60,53778,53780],{"className":51782,"code":53779,"language":51784,"meta":66,"style":66},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[39,53781,53782,53787,53792,53796,53801,53806,53811],{"__ignoreMap":66},[84,53783,53784],{"class":86,"line":87},[84,53785,53786],{"class":154},"    function fun() {\n",[84,53788,53789],{"class":86,"line":98},[84,53790,53791],{"class":154},"      num = 10\n",[84,53793,53794],{"class":86,"line":106},[84,53795,3365],{"class":154},[84,53797,53798],{"class":86,"line":112},[84,53799,53800],{"class":154},"    fun()\n",[84,53802,53803],{"class":86,"line":425},[84,53804,53805],{"class":154},"    console.log(num)\n",[84,53807,53808],{"class":86,"line":2395},[84,53809,53810],{"class":154},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[84,53812,53813],{"class":86,"line":2401},[84,53814,53815],{"class":154},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2315,53817,53818,53821],{},[29,53819,53820],{},"函数内部的形参可以看做是局部变量",[29,53822,53823],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53825,53826,53827],{},"变量访问原则： ",[1464,53828,53829],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[198,53831,53833],{"id":53832},"_295-匿名函数","2.9.5 匿名函数",[19,53835,53836],{},"函数可以分为具名函数和匿名函数",[19,53838,53839],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,53841,53842],{},[29,53843,53844],{},"函数表达式",[19,53846,53847],{},[2643,53848],{"alt":66,"src":53849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53851,53852],{},"里边也可以写参数",[19,53854,53855],{},"具名函数调用位置可以随意调整；",[19,53857,53858],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,53860,53861],{"start":98},[29,53862,53863],{},"立即执行函数",[19,53865,53866],{},[2643,53867],{"alt":66,"src":53868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53870,53871],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53873,53874],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53876,53877],{},"(function () {})();",[19,53879,53880],{},"不要落下最后的;",[19,53882,53883],{},"立即执行函数必须要加;",[19,53885,53886],{},"分号写前写后都没问题",[19,53888,53889],{},"写前：",[19,53891,53892],{},"(function() {})()",[19,53894,53895],{},";(function () {})();",[19,53897,53898],{},"写后:",[19,53900,53901],{},"(function() {})();",[19,53903,53877],{},[19,53905,53906],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53908,53909],{},"还有一种写法：",[19,53911,53912],{},"(function(){}());",[19,53914,53915],{},"或者:",[19,53917,53918],{},"!function(){}();",[19,53920,53921],{},"立即执行函数有时候也是可以加名字的：",[19,53923,53924],{},"(function flexible(window,document) {}(window,document));",[19,53926,53927],{},"省一些调用方法",[198,53929,53931],{"id":53930},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53933,53934],{},[2643,53935],{"alt":66,"src":53936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53938,53939],{},"这样就不用非得给x,y初始化了",[19,53941,53942],{},[2643,53943],{"alt":66,"src":53944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53946,53947],{},"代码执行时先看左边",[19,53949,53950],{},"例如：console.log(false && 3+5)",[19,53952,53953],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53955,53956],{},"&&都是真时，就返回最后一个真值",[19,53958,53959],{},"console.log(11 && 22)",[19,53961,53962],{},"输出22",[19,53964,53965],{},"逻辑与：遇真则真",[19,53967,15803],{},[19,53969,53970],{},"let age=1",[19,53972,53973],{},"console.log(11 || age++)",[19,53975,53976],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53978,53979],{},"console.log(11 || 22)",[19,53981,53982],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53984,53985],{},"||如果都是假的话，就取最后一个假的值了",[198,53987,53989],{"id":53988},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53991,53992],{},"显示转换：",[19,53994,53995,53998,53999],{},[1464,53996,53997],{},"记忆","： ",[1464,54000,54001],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54003,54004],{},"空字符串为假，其他字符串全为真",[19,54006,54007],{},[2643,54008],{"alt":66,"src":54009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54011,54012],{},"隐式转换：",[19,54014,54015],{},[2643,54016],{"alt":66,"src":54017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54019,54020],{},"隐式转换:",[19,54022,54023],{},"null+3=3",[19,54025,54026],{},"undefined+3=NaN",[19,54028,54029],{},"null==undefined 输出true,他两个都当0看",[19,54031,54032],{},"null===undefined 输出false",[19,54034,54035],{},"undefined做任何操作都是NaN",[19,54037,54038],{},"NaN不等于NaN，NaN表示计算错误",[14,54040,54042],{"id":54041},"_210-对象","2.10 对象",[198,54044,54046],{"id":54045},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54048,54049],{},"对象也是一种数据类型，里边的数据是无序的",[19,54051,54052],{},"对象由属性和方法组成",[19,54054,54055],{},[2643,54056],{"alt":66,"src":54057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54059,54060],{},[2643,54061],{"alt":66,"src":54062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54064,54065],{},[2643,54066],{"alt":66,"src":54067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[198,54069,54071],{"id":54070},"_2102-对象属性","2.10.2 对象属性",[19,54073,54074],{},[2643,54075],{"alt":66,"src":54076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54078,54079],{},[29,54080,54081],{},"查询对象",[19,54083,54084],{},"对象名.属性 goods.uname",[19,54086,54087],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54089,54090],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54092,54093],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54095,54096],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54098,54099],{"start":98},[29,54100,54101],{},"重新赋值",[19,54103,54104],{},"对象名.属性=新值",[26,54106,54107],{"start":106},[29,54108,54109],{},"增加新数据",[19,54111,54104],{},[26,54113,54114],{"start":112},[29,54115,54116],{},"删除对象中的属性",[19,54118,54119],{},"delete 对象名.属性",[198,54121,54123],{"id":54122},"_2103-对象方法","2.10.3 对象方法",[19,54125,54126],{},[2643,54127],{"alt":66,"src":54128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54130,54131],{},"后边跟的是匿名函数",[19,54133,54134],{},"对象外面的叫函数；对象内部的叫方法",[19,54136,54137],{},[2643,54138],{"alt":66,"src":54139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[198,54141,54143],{"id":54142},"_2104-遍历对象","2.10.4 遍历对象",[19,54145,54146],{},"理解为加括号的python字典遍历",[19,54148,54149],{},[2643,54150],{"alt":66,"src":54151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54153,54154],{},"k是字符串类型",[19,54156,54157],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[60,54159,54161],{"className":51782,"code":54160,"language":51784,"meta":66,"style":66},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[39,54162,54163,54168,54173,54178,54183],{"__ignoreMap":66},[84,54164,54165],{"class":86,"line":87},[84,54166,54167],{"class":154},"   let arr = [1, 2, 3]\n",[84,54169,54170],{"class":86,"line":98},[84,54171,54172],{"class":154},"    for (let k in arr) {\n",[84,54174,54175],{"class":86,"line":106},[84,54176,54177],{"class":154},"      console.log(k)\n",[84,54179,54180],{"class":86,"line":112},[84,54181,54182],{"class":154},"      console.log(arr[k])\n",[84,54184,54185],{"class":86,"line":425},[84,54186,3365],{"class":154},[19,54188,54189],{},[2643,54190],{"alt":66,"src":54191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54193,54194],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54196,54197],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54199,54200],{},"for in 得到的k是属性名",[52962,54202,54203],{},"\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,54205,54206],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[198,54208,54210],{"id":54209},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54212,54213],{},"数组中放对象信息",[60,54215,54219],{"className":54216,"code":54217,"language":54218,"meta":66,"style":66},"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",[39,54220,54221,54229,54234,54239,54244,54249,54254,54259,54264,54269,54274,54279,54284,54288,54292],{"__ignoreMap":66},[84,54222,54223,54225,54227],{"class":86,"line":87},[84,54224,2218],{"class":154},[84,54226,52962],{"class":52449},[84,54228,52456],{"class":154},[84,54230,54231],{"class":86,"line":98},[84,54232,54233],{"class":154},"    let students = [\n",[84,54235,54236],{"class":86,"line":106},[84,54237,54238],{"class":154},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[84,54240,54241],{"class":86,"line":112},[84,54242,54243],{"class":154},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[84,54245,54246],{"class":86,"line":425},[84,54247,54248],{"class":154},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[84,54250,54251],{"class":86,"line":2395},[84,54252,54253],{"class":154},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[84,54255,54256],{"class":86,"line":2401},[84,54257,54258],{"class":154},"    ]\n",[84,54260,54261],{"class":86,"line":2492},[84,54262,54263],{"class":154},"    for (let i = 0; i \u003C students.length; i++) {\n",[84,54265,54266],{"class":86,"line":2498},[84,54267,54268],{"class":154},"      for (let k in students[i]) {\n",[84,54270,54271],{"class":86,"line":2510},[84,54272,54273],{"class":154},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[84,54275,54276],{"class":86,"line":2793},[84,54277,54278],{"class":154},"        \u002F\u002F输出每个人的名字：\n",[84,54280,54281],{"class":86,"line":2798},[84,54282,54283],{"class":154},"        \u002F\u002Fconsole.log(students[i].name)\n",[84,54285,54286],{"class":86,"line":2804},[84,54287,53547],{"class":154},[84,54289,54290],{"class":86,"line":2809},[84,54291,3365],{"class":154},[84,54293,54294,54296,54298],{"class":86,"line":2823},[84,54295,53566],{"class":154},[84,54297,52962],{"class":52449},[84,54299,52456],{"class":154},[198,54301,54303],{"id":54302},"_2106-内置对象","2.10.6 内置对象",[19,54305,54306],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,54308,54309],{},[29,54310,54311],{},"数学对象Math",[19,54313,54314],{},[2643,54315],{"alt":66,"src":54316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54318,54319],{},[208,54320,54323],{"href":54321,"rel":54322},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[212],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54325,54326],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54328,54329],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54331,54332],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54334,54335],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54337,54338],{},"null属于对象数据类型",[26,54340,54341],{"start":98},[29,54342,54343],{},"生成任意范围随机数",[19,54345,54346],{},[2643,54347],{"alt":66,"src":54348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54350,54351],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54353,54354],{},"乘以几就取不到几",[19,54356,54357],{},"取数组中的随机元素：",[19,54359,54360],{},"let arr = ['red', 'green', 'blue']",[19,54362,54363],{},"let random = Math.floor(Math.random() * arr.length)",[19,54365,54366],{},"console.log(arr[random])",[19,54368,54369],{},"这个函数得到的是全闭区间",[19,54371,54372],{},"function getRandom(N, M) {",[19,54374,54375],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54377,2254],{},[19,54379,54380],{},"console.log(getRandom(4, 8))",[198,54382,54384],{"id":54383},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54386,54387],{},[2643,54388],{"alt":66,"src":54389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54391,54392],{},[2643,54393],{"alt":66,"src":54394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54396,54397],{},[2643,54398],{"alt":66,"src":54399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54401,54402],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54404,54405],{},[2643,54406],{"alt":66,"src":54407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54409,54410],{},[2643,54411],{"alt":66,"src":54412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54414,54415],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54417,54418],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54420,54421],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1222,54423,54424],{},"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":66,"searchDepth":98,"depth":98,"links":54426},[54427,54435,54436,54437,54438,54439,54446,54450,54456,54465],{"id":51617,"depth":98,"text":51618,"children":54428},[54429,54430,54431,54432,54433,54434],{"id":51621,"depth":106,"text":51622},{"id":51638,"depth":106,"text":51639},{"id":51678,"depth":106,"text":51679},{"id":51690,"depth":106,"text":51691},{"id":51699,"depth":106,"text":51700},{"id":51747,"depth":106,"text":51748},{"id":51757,"depth":98,"text":51758},{"id":51845,"depth":98,"text":51846},{"id":51868,"depth":98,"text":51869},{"id":51880,"depth":98,"text":51881},{"id":52067,"depth":98,"text":52068,"children":54440},[54441,54442,54443,54444,54445],{"id":52071,"depth":106,"text":52072},{"id":52080,"depth":106,"text":52081},{"id":52108,"depth":106,"text":52109},{"id":52144,"depth":106,"text":52145},{"id":52169,"depth":106,"text":52170},{"id":52181,"depth":98,"text":52182,"children":54447},[54448,54449],{"id":52202,"depth":106,"text":52203},{"id":52296,"depth":106,"text":52297},{"id":52354,"depth":98,"text":52355,"children":54451},[54452,54453,54454,54455],{"id":52358,"depth":106,"text":52359},{"id":52382,"depth":106,"text":52383},{"id":52435,"depth":106,"text":52436},{"id":53246,"depth":106,"text":53247},{"id":53632,"depth":98,"text":53633,"children":54457},[54458,54459,54460,54461,54462,54463,54464],{"id":53650,"depth":106,"text":53651},{"id":53687,"depth":106,"text":53688},{"id":53718,"depth":106,"text":53719},{"id":53751,"depth":106,"text":53752},{"id":53832,"depth":106,"text":53833},{"id":53930,"depth":106,"text":53931},{"id":53988,"depth":106,"text":53989},{"id":54041,"depth":98,"text":54042,"children":54466},[54467,54468,54469,54470,54471,54472,54473],{"id":54045,"depth":106,"text":54046},{"id":54070,"depth":106,"text":54071},{"id":54122,"depth":106,"text":54123},{"id":54142,"depth":106,"text":54143},{"id":54209,"depth":106,"text":54210},{"id":54302,"depth":106,"text":54303},{"id":54383,"depth":106,"text":54384},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51609,"description":1249},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54480,"title":54481,"body":54482,"description":1249,"extension":1250,"meta":77819,"navigation":1252,"path":77820,"seo":77821,"stem":77822,"__hash__":77823},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54483,"toc":77759},[54484,54487,54490,54493,54498,54501,54504,54507,54511,54515,54521,54526,54534,54541,54544,54548,54553,54558,54563,54566,54569,54580,54583,54587,54590,54593,54598,54603,54608,54611,54614,54706,54709,54714,54717,54722,54725,54728,54733,54736,54741,54745,54748,54762,54766,54771,54774,54777,54781,54786,54789,54793,54797,54802,54806,54811,54814,54817,54820,54823,54826,54829,54834,54839,54867,54870,54873,54876,54881,54884,54887,54890,54893,54897,54926,54930,54935,54940,54943,54946,54949,54954,55069,55074,55079,55240,55245,55248,55252,55257,55262,55265,55268,55271,55274,55277,55280,55283,55286,55289,55292,55295,55298,55301,55304,55306,55309,55312,55315,55320,55324,55719,55722,55728,55732,55737,57019,57024,57027,57030,57033,57038,58234,58238,58244,58249,58252,58257,58262,58266,58270,58275,58278,58283,58286,58289,58293,59200,59203,59207,59428,59431,59434,59437,59663,59666,59890,59893,59897,59902,59905,59908,60136,60139,60172,60175,60179,60184,60188,60191,60194,60197,60200,60203,60206,60209,60214,61494,61498,61501,62594,62598,62601,62604,62607,62610,62614,62617,62620,62622,62630,64111,64115,64118,64121,64124,64333,64336,64340,64344,64349,64354,64357,64360,64365,64369,64374,64377,64486,64490,64495,64500,64503,64506,64510,64515,64520,64525,64528,64531,64542,64545,64550,64555,64558,64561,64634,64638,64643,64646,64648,64659,64663,64668,65994,65997,66000,66003,66005,66008,66011,66014,66017,66020,66023,66026,66029,66032,66035,66038,66041,66043,66045,66048,66052,67146,67149,67152,67168,67182,67185,67190,67196,67201,67205,67209,67214,67218,67223,67665,67670,67673,67677,67682,67685,67688,67692,67697,67701,67706,67711,67715,67720,67725,67728,67733,67738,67742,67747,67752,67856,67859,67863,67868,68234,68237,68240,68243,68246,68249,68252,68255,68258,69554,69558,69563,69568,69571,69574,69577,69580,69582,69587,69592,69595,69599,69604,69609,69614,69617,69620,69623,69626,69629,69634,69637,69641,69646,69651,69655,69660,69663,69668,69671,69674,69677,69680,69683,69688,69691,69694,69697,69700,69704,69709,69712,69716,69721,69724,69727,69731,69760,69763,69767,69771,69776,69780,69785,69788,69791,69794,69797,69800,69803,69806,69809,69812,69815,69818,69821,69824,69827,69831,69836,69841,69844,69848,69852,69857,69860,69864,69867,69870,69875,69880,69885,69890,69895,69898,69901,69906,69911,69915,69920,69923,69928,69931,69934,69937,69940,69945,69948,69957,69961,69966,69969,69972,69976,69979,69984,69988,69991,69997,70003,70007,70033,70036,71597,71600,72096,72099,72104,72109,72114,72118,72123,72128,72133,72137,72142,72145,72148,72151,72154,72158,72161,72166,72169,72174,72178,72183,72186,72191,72196,72201,72204,72207,72212,72217,72220,72223,72227,72230,72235,72238,72243,72246,72251,72256,72261,72264,72269,72334,72337,72348,72352,72357,72529,72533,72538,72541,72544,72547,72551,72562,72566,72569,72574,72579,72582,72585,72588,72591,72594,72596,72599,72602,72605,72610,72613,72618,72621,72625,72628,72631,72645,72649,72652,72707,72712,72715,72718,72723,72726,72730,72735,72865,72869,72874,72879,72960,72965,72969,72972,72977,72982,72988,72991,72994,72997,73001,73006,73009,73020,73024,73041,76088,76092,76095,76098,76101,76122,76126,76129,76137,76140,76145,76148,76151,76156,76161,76165,76186,76190,76195,76198,76201,76204,76207,76211,76216,76219,76223,76228,76231,76236,76239,76244,76247,76252,77455,77459,77464,77467,77472,77756],[10,54485,54481],{"id":54486},"_3web-apis",[19,54488,54489],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54491,54492],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54494,54495],{},[2643,54496],{"alt":66,"src":54497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54499,54500],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54502,54503],{},"建议数组和对象使用 const 来声明",[19,54505,54506],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54508,54510],{"id":54509},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[198,54512,54514],{"id":54513},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54516,54517,54520],{},[39,54518,54519],{},"document"," = HTML 文件解析后的对象化表示；",[19,54522,54523,54525],{},[39,54524,54519],{}," ≠ HTML 文件本身",[19,54527,54528,54533],{},[1464,54529,54530],{},[39,54531,54532],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54535,54536,54540],{},[1464,54537,54538],{},[39,54539,54519],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54542,54543],{},"document实际上为window.document的简写",[198,54545,54547],{"id":54546},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54549,54550],{},[2643,54551],{"alt":66,"src":54552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54554,54555],{},[2643,54556],{"alt":66,"src":54557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54559,54560],{},[2643,54561],{"alt":66,"src":54562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54564,54565],{},"console.dir()",[19,54567,54568],{},"dir用来打印对象",[2315,54570,54571,54574,54577],{},[29,54572,54573],{},"任何一个标签，都是一个对象",[29,54575,54576],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,54578,54579],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54581,54582],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[198,54584,54586],{"id":54585},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54588,54589],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54591,54592],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54594,54595],{},[1464,54596,54597],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,54599,54600],{},[29,54601,54602],{},"利用CSS选择器来获取标签元素",[19,54604,54605],{},[2643,54606],{"alt":66,"src":54607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54609,54610],{},"里边的选择器必须必须加引号！！！",[19,54612,54613],{},"只选择第一个元素",[60,54615,54617],{"className":54216,"code":54616,"language":54218,"meta":66,"style":66},"\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",[39,54618,54619,54627,54648,54667,54675,54680,54685,54690,54698],{"__ignoreMap":66},[84,54620,54621,54623,54625],{"class":86,"line":87},[84,54622,2218],{"class":154},[84,54624,52949],{"class":52449},[84,54626,52456],{"class":154},[84,54628,54629,54631,54633,54636,54638,54641,54644,54646],{"class":86,"line":98},[84,54630,53293],{"class":154},[84,54632,52760],{"class":52449},[84,54634,54635],{"class":90}," class",[84,54637,867],{"class":154},[84,54639,54640],{"class":158},"\"box\"",[84,54642,54643],{"class":154},">123\u003C\u002F",[84,54645,52760],{"class":52449},[84,54647,52456],{"class":154},[84,54649,54650,54652,54654,54656,54658,54660,54663,54665],{"class":86,"line":106},[84,54651,53293],{"class":154},[84,54653,52760],{"class":52449},[84,54655,54635],{"class":90},[84,54657,867],{"class":154},[84,54659,54640],{"class":158},[84,54661,54662],{"class":154},">456\u003C\u002F",[84,54664,52760],{"class":52449},[84,54666,52456],{"class":154},[84,54668,54669,54671,54673],{"class":86,"line":112},[84,54670,53293],{"class":154},[84,54672,52962],{"class":52449},[84,54674,52456],{"class":154},[84,54676,54677],{"class":86,"line":425},[84,54678,54679],{"class":154},"    \u002F\u002F 1.获取匹配的第一个元素\n",[84,54681,54682],{"class":86,"line":2395},[84,54683,54684],{"class":154},"    const box = document.querySelector('div')\n",[84,54686,54687],{"class":86,"line":2401},[84,54688,54689],{"class":154},"    console.dir(box)\n",[84,54691,54692,54694,54696],{"class":86,"line":2492},[84,54693,53566],{"class":154},[84,54695,52962],{"class":52449},[84,54697,52456],{"class":154},[84,54699,54700,54702,54704],{"class":86,"line":2498},[84,54701,52934],{"class":154},[84,54703,52949],{"class":52449},[84,54705,52456],{"class":154},[19,54707,54708],{},"只选123，不选456",[19,54710,54711],{},[2643,54712],{"alt":66,"src":54713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54715,54716],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54718,54719],{},[2643,54720],{"alt":66,"src":54721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54723,54724],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54726,54727],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,54729,54730],{"start":98},[29,54731,54732],{},"其他方法来获取标签元素",[19,54734,54735],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54737,54738],{},[2643,54739],{"alt":66,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[198,54742,54744],{"id":54743},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54746,54747],{},"设置修改DOM元素内容有两种方式：",[2315,54749,54750,54753,54756,54759],{},[29,54751,54752],{},"元素.innerText=''",[29,54754,54755],{},"元素.innerHTML=''",[29,54757,54758],{},"不写字符串输出数字也是可以的",[29,54760,54761],{},"元素.innerHtml=1",[23168,54763,54765],{"id":54764},"_3131-innertext","3.1.3.1 innerText",[19,54767,54768],{},[2643,54769],{"alt":66,"src":54770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54772,54773],{},"思路：实现了修改盒子中的内容！",[19,54775,54776],{},"它只显示纯文本，不解析标签",[23168,54778,54780],{"id":54779},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54782,54783],{},[2643,54784],{"alt":66,"src":54785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54787,54788],{},"相比于innerText，他的强大之处在于可以解析标签",[198,54790,54792],{"id":54791},"_314-操作元素属性","3.1.4 操作元素属性",[23168,54794,54796],{"id":54795},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54798,54799],{},[2643,54800],{"alt":66,"src":54801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23168,54803,54805],{"id":54804},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54807,54808],{},[2643,54809],{"alt":66,"src":54810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54812,54813],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54815,54816],{},"div.style.backgroundColor = 'hotpink'",[19,54818,54819],{},"如果按照css的写法，-表示减，就会出错",[19,54821,54822],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54824,54825],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54827,54828],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54830,54831],{},[2643,54832],{"alt":66,"src":54833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54835,54836],{},[2643,54837],{"alt":66,"src":54838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,54840,54841,54844,54847,54850,54853,54856],{},[29,54842,54843],{},"className这个方式就是修改很多样式的时候来使用的！",[29,54845,54846],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,54848,54849],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,54851,54852],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,54854,54855],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,54857,54858,54859,54864],{},"解析标签的时候就变为了",[52760,54860],{"className":54861},[54862,54863],"nav","box",[54865,54866],"br",{},[19,54868,54869],{},"例子：",[52760,54871],{"className":54872},[54862],[52962,54874,54875],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54877,54878],{},[2643,54879],{"alt":66,"src":54880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54882,54883],{},"追加和删除类名用classList",[19,54885,54886],{},"常用于类似于开关的操作",[19,54888,54889],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54891,54892],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23168,54894,54896],{"id":54895},"_3143-牢记点","3.1.4.3 牢记点",[26,54898,54899,54902,54905,54908,54911,54914,54917,54920,54923],{},[29,54900,54901],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,54903,54904],{},"使用style属性操作css时不要忘记引号",[29,54906,54907],{},"使用className或者classList时也不要忘记引号",[29,54909,54910],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,54912,54913],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,54915,54916],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,54918,54919],{},"若： let arr=['1','2',3] arr[0]=1",[29,54921,54922],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,54924,54925],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[198,54927,54929],{"id":54928},"_315-操作表单元素","3.1.5 操作表单元素",[26,54931,54932],{},[29,54933,54934],{},"天生的属性",[19,54936,54937],{},[2643,54938],{"alt":66,"src":54939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54941,54942],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54944,54945],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54947,54948],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54950,54951],{},[2643,54952],{"alt":66,"src":54953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[60,54955,54957],{"className":51782,"code":54956,"language":51784,"meta":66,"style":66},"在复选框中如果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",[39,54958,54959,54964,54996,55001,55006,55011,55016,55020,55025,55030,55047,55059,55064],{"__ignoreMap":66},[84,54960,54961],{"class":86,"line":87},[84,54962,54963],{"class":154},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[84,54965,54966,54968,54971,54974,54976,54979,54981,54983,54985,54987,54989,54991,54994],{"class":86,"line":98},[84,54967,2218],{"class":154},[84,54969,54970],{"class":52449},"input",[84,54972,54973],{"class":90}," type",[84,54975,867],{"class":154},[84,54977,54978],{"class":158},"\"checkbox\"",[84,54980,16090],{"class":90},[84,54982,867],{"class":154},[84,54984,8824],{"class":158},[84,54986,16129],{"class":90},[84,54988,867],{"class":154},[84,54990,8824],{"class":158},[84,54992,54993],{"class":90}," checked",[84,54995,52456],{"class":154},[84,54997,54998],{"class":86,"line":106},[84,54999,55000],{"class":154},"不选的话：\n",[84,55002,55003],{"class":86,"line":112},[84,55004,55005],{"class":154},"const input = document.querySelector('input')\n",[84,55007,55008],{"class":86,"line":425},[84,55009,55010],{"class":154},"input.checked=false\n",[84,55012,55013],{"class":86,"line":2395},[84,55014,55015],{"class":154},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[84,55017,55018],{"class":86,"line":2401},[84,55019,3578],{"emptyLinePlaceholder":1252},[84,55021,55022],{"class":86,"line":2492},[84,55023,55024],{"class":154},"禁用按钮：\n",[84,55026,55027],{"class":86,"line":2498},[84,55028,55029],{"class":154},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[84,55031,55032,55034,55037,55040,55043,55045],{"class":86,"line":2510},[84,55033,2218],{"class":154},[84,55035,55036],{"class":52449},"button",[84,55038,55039],{"class":90}," disabled",[84,55041,55042],{"class":154},">点击\u003C\u002F",[84,55044,55036],{"class":52449},[84,55046,52456],{"class":154},[84,55048,55049,55051,55053,55055,55057],{"class":86,"line":2793},[84,55050,2218],{"class":154},[84,55052,55036],{"class":52449},[84,55054,55042],{"class":154},[84,55056,55036],{"class":52449},[84,55058,52456],{"class":154},[84,55060,55061],{"class":86,"line":2798},[84,55062,55063],{"class":154},"const bt = document.querySelector('button')\n",[84,55065,55066],{"class":86,"line":2804},[84,55067,55068],{"class":154},"bt.disabled = false\n",[26,55070,55071],{"start":98},[29,55072,55073],{},"自定义属性",[19,55075,55076],{},[2643,55077],{"alt":66,"src":55078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[60,55080,55082],{"className":54216,"code":55081,"language":54218,"meta":66,"style":66},"\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",[39,55083,55084,55092,55120,55139,55158,55177,55196,55204,55209,55214,55219,55224,55232],{"__ignoreMap":66},[84,55085,55086,55088,55090],{"class":86,"line":87},[84,55087,2218],{"class":154},[84,55089,52949],{"class":52449},[84,55091,52456],{"class":154},[84,55093,55094,55096,55098,55101,55103,55105,55108,55110,55113,55116,55118],{"class":86,"line":98},[84,55095,53293],{"class":154},[84,55097,52760],{"class":52449},[84,55099,55100],{"class":90}," data-id",[84,55102,867],{"class":154},[84,55104,4856],{"class":158},[84,55106,55107],{"class":90}," data-spm",[84,55109,867],{"class":154},[84,55111,55112],{"class":158},"\"我不知道\"",[84,55114,55115],{"class":154},">1\u003C\u002F",[84,55117,52760],{"class":52449},[84,55119,52456],{"class":154},[84,55121,55122,55124,55126,55128,55130,55132,55135,55137],{"class":86,"line":106},[84,55123,53293],{"class":154},[84,55125,52760],{"class":52449},[84,55127,55100],{"class":90},[84,55129,867],{"class":154},[84,55131,4879],{"class":158},[84,55133,55134],{"class":154},">2\u003C\u002F",[84,55136,52760],{"class":52449},[84,55138,52456],{"class":154},[84,55140,55141,55143,55145,55147,55149,55151,55154,55156],{"class":86,"line":112},[84,55142,53293],{"class":154},[84,55144,52760],{"class":52449},[84,55146,55100],{"class":90},[84,55148,867],{"class":154},[84,55150,4892],{"class":158},[84,55152,55153],{"class":154},">3\u003C\u002F",[84,55155,52760],{"class":52449},[84,55157,52456],{"class":154},[84,55159,55160,55162,55164,55166,55168,55170,55173,55175],{"class":86,"line":425},[84,55161,53293],{"class":154},[84,55163,52760],{"class":52449},[84,55165,55100],{"class":90},[84,55167,867],{"class":154},[84,55169,4905],{"class":158},[84,55171,55172],{"class":154},">4\u003C\u002F",[84,55174,52760],{"class":52449},[84,55176,52456],{"class":154},[84,55178,55179,55181,55183,55185,55187,55189,55192,55194],{"class":86,"line":2395},[84,55180,53293],{"class":154},[84,55182,52760],{"class":52449},[84,55184,55100],{"class":90},[84,55186,867],{"class":154},[84,55188,4926],{"class":158},[84,55190,55191],{"class":154},">5\u003C\u002F",[84,55193,52760],{"class":52449},[84,55195,52456],{"class":154},[84,55197,55198,55200,55202],{"class":86,"line":2401},[84,55199,53293],{"class":154},[84,55201,52962],{"class":52449},[84,55203,52456],{"class":154},[84,55205,55206],{"class":86,"line":2492},[84,55207,55208],{"class":154},"    const one = document.querySelector('div')\n",[84,55210,55211],{"class":86,"line":2498},[84,55212,55213],{"class":154},"    console.log(one.dataset)\n",[84,55215,55216],{"class":86,"line":2510},[84,55217,55218],{"class":154},"    console.log(one.dataset.id)\n",[84,55220,55221],{"class":86,"line":2793},[84,55222,55223],{"class":154},"    console.log(one.dataset.spm)\n",[84,55225,55226,55228,55230],{"class":86,"line":2798},[84,55227,53566],{"class":154},[84,55229,52962],{"class":52449},[84,55231,52456],{"class":154},[84,55233,55234,55236,55238],{"class":86,"line":2804},[84,55235,52934],{"class":154},[84,55237,52949],{"class":52449},[84,55239,52456],{"class":154},[19,55241,55242],{},[2643,55243],{"alt":66,"src":55244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55246,55247],{},"document.querySelector选择的是第一个对象（元素）",[198,55249,55251],{"id":55250},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55253,55254],{},[2643,55255],{"alt":66,"src":55256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55258,55259],{},[2643,55260],{"alt":66,"src":55261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55263,55264],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52962,55266,55267],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55269,55270],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52962,55272,55273],{},"\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,55275,55276],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55278,55279],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55281,55282],{},"单位为毫秒！！！",[19,55284,55285],{},"可以搭配匿名函数来用！！！",[19,55287,55288],{},"setInterval(function () {",[19,55290,55291],{},"alert('两秒执行一次')",[19,55293,55294],{},"}, 2000)",[19,55296,55297],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55299,55300],{},"function fn() {",[19,55302,55303],{},"document.write(1)",[19,55305,2254],{},[19,55307,55308],{},"setInterval(fn, 1000)",[19,55310,55311],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55313,55314],{},"setInterval('fn()', 1000)",[19,55316,55317],{},[2643,55318],{"alt":66,"src":55319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23168,55321,55323],{"id":55322},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[60,55325,55327],{"className":51782,"code":55326,"language":51784,"meta":66,"style":66},"\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",[39,55328,55329,55339,55353,55357,55365,55379,55399,55411,55419,55423,55431,55467,55472,55477,55482,55490,55498,55520,55528,55533,55555,55560,55565,55575,55580,55600,55608,55623,55638,55649,55654,55664,55674,55678,55687,55691,55699,55707,55711],{"__ignoreMap":66},[84,55330,55331,55333,55335,55337],{"class":86,"line":87},[84,55332,52446],{"class":154},[84,55334,52450],{"class":52449},[84,55336,52453],{"class":90},[84,55338,52456],{"class":154},[84,55340,55341,55343,55345,55347,55349,55351],{"class":86,"line":98},[84,55342,2218],{"class":154},[84,55344,51784],{"class":52449},[84,55346,52465],{"class":90},[84,55348,867],{"class":154},[84,55350,52470],{"class":158},[84,55352,52456],{"class":154},[84,55354,55355],{"class":86,"line":106},[84,55356,3578],{"emptyLinePlaceholder":1252},[84,55358,55359,55361,55363],{"class":86,"line":112},[84,55360,2218],{"class":154},[84,55362,52483],{"class":52449},[84,55364,52456],{"class":154},[84,55366,55367,55369,55371,55373,55375,55377],{"class":86,"line":425},[84,55368,53293],{"class":154},[84,55370,52493],{"class":52449},[84,55372,52496],{"class":90},[84,55374,867],{"class":154},[84,55376,52501],{"class":158},[84,55378,52456],{"class":154},[84,55380,55381,55383,55385,55387,55389,55391,55393,55395,55397],{"class":86,"line":2395},[84,55382,53293],{"class":154},[84,55384,52493],{"class":52449},[84,55386,16090],{"class":90},[84,55388,867],{"class":154},[84,55390,52540],{"class":158},[84,55392,52520],{"class":90},[84,55394,867],{"class":154},[84,55396,52547],{"class":158},[84,55398,52456],{"class":154},[84,55400,55401,55403,55405,55407,55409],{"class":86,"line":2401},[84,55402,53293],{"class":154},[84,55404,52556],{"class":52449},[84,55406,52559],{"class":154},[84,55408,52556],{"class":52449},[84,55410,52456],{"class":154},[84,55412,55413,55415,55417],{"class":86,"line":2492},[84,55414,52934],{"class":154},[84,55416,52483],{"class":52449},[84,55418,52456],{"class":154},[84,55420,55421],{"class":86,"line":2498},[84,55422,3578],{"emptyLinePlaceholder":1252},[84,55424,55425,55427,55429],{"class":86,"line":2510},[84,55426,2218],{"class":154},[84,55428,52949],{"class":52449},[84,55430,52456],{"class":154},[84,55432,55433,55435,55438,55440,55442,55444,55446,55448,55450,55453,55455,55458,55461,55463,55465],{"class":86,"line":2793},[84,55434,53293],{"class":154},[84,55436,55437],{"class":52449},"textarea",[84,55439,16090],{"class":90},[84,55441,867],{"class":154},[84,55443,8824],{"class":158},[84,55445,16129],{"class":90},[84,55447,867],{"class":154},[84,55449,8824],{"class":158},[84,55451,55452],{"class":90}," cols",[84,55454,867],{"class":154},[84,55456,55457],{"class":158},"\"30\"",[84,55459,55460],{"class":90}," rows",[84,55462,867],{"class":154},[84,55464,919],{"class":158},[84,55466,52456],{"class":154},[84,55468,55469],{"class":86,"line":2798},[84,55470,55471],{"class":154},"        用户注册协议\n",[84,55473,55474],{"class":86,"line":2804},[84,55475,55476],{"class":154},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[84,55478,55479],{"class":86,"line":2809},[84,55480,55481],{"class":154},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[84,55483,55484,55486,55488],{"class":86,"line":2823},[84,55485,52925],{"class":154},[84,55487,55437],{"class":52449},[84,55489,52456],{"class":154},[84,55491,55492,55494,55496],{"class":86,"line":2828},[84,55493,53293],{"class":154},[84,55495,54865],{"class":52449},[84,55497,52456],{"class":154},[84,55499,55500,55502,55504,55506,55508,55511,55513,55516,55518],{"class":86,"line":2834},[84,55501,53293],{"class":154},[84,55503,55036],{"class":52449},[84,55505,54635],{"class":90},[84,55507,867],{"class":154},[84,55509,55510],{"class":158},"\"btn\"",[84,55512,55039],{"class":90},[84,55514,55515],{"class":154},">我已经阅读用户协议(5)\u003C\u002F",[84,55517,55036],{"class":52449},[84,55519,52456],{"class":154},[84,55521,55522,55524,55526],{"class":86,"line":2855},[84,55523,53293],{"class":154},[84,55525,52962],{"class":52449},[84,55527,52456],{"class":154},[84,55529,55530],{"class":86,"line":2860},[84,55531,55532],{"class":1378},"    \u002F\u002F 1. 获取元素\n",[84,55534,55535,55537,55540,55542,55545,55548,55550,55553],{"class":86,"line":2874},[84,55536,12393],{"class":129},[84,55538,55539],{"class":94}," btn",[84,55541,14735],{"class":129},[84,55543,55544],{"class":154}," document.",[84,55546,55547],{"class":90},"querySelector",[84,55549,155],{"class":154},[84,55551,55552],{"class":158},"'.btn'",[84,55554,162],{"class":154},[84,55556,55557],{"class":86,"line":2879},[84,55558,55559],{"class":1378},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[84,55561,55562],{"class":86,"line":2908},[84,55563,55564],{"class":1378},"    \u002F\u002F 2. 倒计时\n",[84,55566,55567,55569,55571,55573],{"class":86,"line":2913},[84,55568,53368],{"class":129},[84,55570,10610],{"class":154},[84,55572,867],{"class":129},[84,55574,1033],{"class":94},[84,55576,55577],{"class":86,"line":2930},[84,55578,55579],{"class":1378},"    \u002F\u002F 2.1 开启定时器\n",[84,55581,55582,55584,55587,55589,55592,55594,55597],{"class":86,"line":2935},[84,55583,53368],{"class":129},[84,55585,55586],{"class":154}," n ",[84,55588,867],{"class":129},[84,55590,55591],{"class":90}," setInterval",[84,55593,155],{"class":154},[84,55595,55596],{"class":129},"function",[84,55598,55599],{"class":154}," () {\n",[84,55601,55602,55605],{"class":86,"line":2940},[84,55603,55604],{"class":154},"      i",[84,55606,55607],{"class":129},"--\n",[84,55609,55610,55613,55615,55618,55620],{"class":86,"line":2945},[84,55611,55612],{"class":154},"      btn.innerHTML ",[84,55614,867],{"class":129},[84,55616,55617],{"class":158}," `我已经阅读用户协议(${",[84,55619,1751],{"class":154},[84,55621,55622],{"class":158},"})`\n",[84,55624,55625,55628,55631,55634,55636],{"class":86,"line":2959},[84,55626,55627],{"class":129},"      if",[84,55629,55630],{"class":154}," (i ",[84,55632,55633],{"class":129},"===",[84,55635,5271],{"class":94},[84,55637,13613],{"class":154},[84,55639,55640,55643,55646],{"class":86,"line":2964},[84,55641,55642],{"class":90},"        clearInterval",[84,55644,55645],{"class":154},"(n)  ",[84,55647,55648],{"class":1378},"\u002F\u002F 关闭定时器\n",[84,55650,55651],{"class":86,"line":3755},[84,55652,55653],{"class":1378},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[84,55655,55656,55659,55661],{"class":86,"line":3769},[84,55657,55658],{"class":154},"        btn.disabled ",[84,55660,867],{"class":129},[84,55662,55663],{"class":94}," false\n",[84,55665,55666,55669,55671],{"class":86,"line":3777},[84,55667,55668],{"class":154},"        btn.innerHTML ",[84,55670,867],{"class":129},[84,55672,55673],{"class":158}," '同意'\n",[84,55675,55676],{"class":86,"line":3782},[84,55677,53547],{"class":154},[84,55679,55680,55683,55685],{"class":86,"line":3788},[84,55681,55682],{"class":154},"    }, ",[84,55684,7583],{"class":94},[84,55686,162],{"class":154},[84,55688,55689],{"class":86,"line":3794},[84,55690,3578],{"emptyLinePlaceholder":1252},[84,55692,55693,55695,55697],{"class":86,"line":3799},[84,55694,53566],{"class":154},[84,55696,52962],{"class":52449},[84,55698,52456],{"class":154},[84,55700,55701,55703,55705],{"class":86,"line":9120},[84,55702,52934],{"class":154},[84,55704,52949],{"class":52449},[84,55706,52456],{"class":154},[84,55708,55709],{"class":86,"line":9144},[84,55710,3578],{"emptyLinePlaceholder":1252},[84,55712,55713,55715,55717],{"class":86,"line":9149},[84,55714,52934],{"class":154},[84,55716,51784],{"class":52449},[84,55718,52456],{"class":154},[19,55720,55721],{},"不要一直想着用死循环,避免死循环",[19,55723,55724,55727],{},[39,55725,55726],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23168,55729,55731],{"id":55730},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,55733,55734],{},[29,55735,55736],{},"法1",[60,55738,55740],{"className":51782,"code":55739,"language":51784,"meta":66,"style":66},"\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",[39,55741,55742,55752,55766,55770,55778,55792,55812,55824,55832,55838,55849,55860,55864,55868,55875,55887,55891,55895,55902,55914,55928,55941,55955,55959,55963,55970,55981,55992,56003,56015,56027,56039,56043,56047,56055,56065,56078,56090,56103,56107,56111,56118,56128,56140,56152,56163,56174,56184,56196,56208,56212,56216,56225,56237,56249,56277,56290,56294,56298,56305,56316,56320,56328,56336,56340,56348,56362,56377,56401,56409,56424,56437,56445,56466,56478,56490,56502,56514,56526,56538,56550,56559,56567,56575,56583,56595,56618,56637,56656,56675,56694,56713,56732,56752,56756,56776,56795,56815,56836,56847,56864,56874,56884,56894,56899,56904,56909,56914,56939,56952,56956,56979,56983,56991,56999,57007,57011],{"__ignoreMap":66},[84,55743,55744,55746,55748,55750],{"class":86,"line":87},[84,55745,52446],{"class":154},[84,55747,52450],{"class":52449},[84,55749,52453],{"class":90},[84,55751,52456],{"class":154},[84,55753,55754,55756,55758,55760,55762,55764],{"class":86,"line":98},[84,55755,2218],{"class":154},[84,55757,51784],{"class":52449},[84,55759,52465],{"class":90},[84,55761,867],{"class":154},[84,55763,52470],{"class":158},[84,55765,52456],{"class":154},[84,55767,55768],{"class":86,"line":106},[84,55769,3578],{"emptyLinePlaceholder":1252},[84,55771,55772,55774,55776],{"class":86,"line":112},[84,55773,2218],{"class":154},[84,55775,52483],{"class":52449},[84,55777,52456],{"class":154},[84,55779,55780,55782,55784,55786,55788,55790],{"class":86,"line":425},[84,55781,53293],{"class":154},[84,55783,52493],{"class":52449},[84,55785,52496],{"class":90},[84,55787,867],{"class":154},[84,55789,52501],{"class":158},[84,55791,52456],{"class":154},[84,55793,55794,55796,55798,55800,55802,55804,55806,55808,55810],{"class":86,"line":2395},[84,55795,53293],{"class":154},[84,55797,52493],{"class":52449},[84,55799,16090],{"class":90},[84,55801,867],{"class":154},[84,55803,52540],{"class":158},[84,55805,52520],{"class":90},[84,55807,867],{"class":154},[84,55809,52547],{"class":158},[84,55811,52456],{"class":154},[84,55813,55814,55816,55818,55820,55822],{"class":86,"line":2401},[84,55815,53293],{"class":154},[84,55817,52556],{"class":52449},[84,55819,52559],{"class":154},[84,55821,52556],{"class":52449},[84,55823,52456],{"class":154},[84,55825,55826,55828,55830],{"class":86,"line":2492},[84,55827,53293],{"class":154},[84,55829,1222],{"class":52449},[84,55831,52456],{"class":154},[84,55833,55834,55836],{"class":86,"line":2498},[84,55835,7576],{"class":52449},[84,55837,16742],{"class":154},[84,55839,55840,55843,55845,55847],{"class":86,"line":2510},[84,55841,55842],{"class":94},"      padding",[84,55844,52586],{"class":154},[84,55846,1504],{"class":94},[84,55848,2471],{"class":154},[84,55850,55851,55854,55856,55858],{"class":86,"line":2793},[84,55852,55853],{"class":94},"      margin",[84,55855,52586],{"class":154},[84,55857,1504],{"class":94},[84,55859,2471],{"class":154},[84,55861,55862],{"class":86,"line":2798},[84,55863,3365],{"class":154},[84,55865,55866],{"class":86,"line":2804},[84,55867,3578],{"emptyLinePlaceholder":1252},[84,55869,55870,55873],{"class":86,"line":2809},[84,55871,55872],{"class":52449},"    li",[84,55874,16742],{"class":154},[84,55876,55877,55880,55882,55885],{"class":86,"line":2823},[84,55878,55879],{"class":94},"      list-style",[84,55881,52586],{"class":154},[84,55883,55884],{"class":94},"none",[84,55886,2471],{"class":154},[84,55888,55889],{"class":86,"line":2828},[84,55890,3365],{"class":154},[84,55892,55893],{"class":86,"line":2834},[84,55894,3578],{"emptyLinePlaceholder":1252},[84,55896,55897,55900],{"class":86,"line":2855},[84,55898,55899],{"class":90},"    .box",[84,55901,16742],{"class":154},[84,55903,55904,55907,55909,55912],{"class":86,"line":2860},[84,55905,55906],{"class":94},"      position",[84,55908,52586],{"class":154},[84,55910,55911],{"class":94},"relative",[84,55913,2471],{"class":154},[84,55915,55916,55919,55921,55924,55926],{"class":86,"line":2874},[84,55917,55918],{"class":94},"      width",[84,55920,52586],{"class":154},[84,55922,55923],{"class":94},"976",[84,55925,52641],{"class":129},[84,55927,2471],{"class":154},[84,55929,55930,55933,55935,55937,55939],{"class":86,"line":2879},[84,55931,55932],{"class":94},"      height",[84,55934,52586],{"class":154},[84,55936,2720],{"class":94},[84,55938,52641],{"class":129},[84,55940,2471],{"class":154},[84,55942,55943,55945,55947,55949,55951,55953],{"class":86,"line":2908},[84,55944,55853],{"class":94},[84,55946,52586],{"class":154},[84,55948,821],{"class":94},[84,55950,52641],{"class":129},[84,55952,52705],{"class":94},[84,55954,2471],{"class":154},[84,55956,55957],{"class":86,"line":2913},[84,55958,3365],{"class":154},[84,55960,55961],{"class":86,"line":2930},[84,55962,3578],{"emptyLinePlaceholder":1252},[84,55964,55965,55968],{"class":86,"line":2935},[84,55966,55967],{"class":90},"    .slider-footer",[84,55969,16742],{"class":154},[84,55971,55972,55974,55976,55979],{"class":86,"line":2940},[84,55973,55906],{"class":94},[84,55975,52586],{"class":154},[84,55977,55978],{"class":94},"absolute",[84,55980,2471],{"class":154},[84,55982,55983,55986,55988,55990],{"class":86,"line":2945},[84,55984,55985],{"class":94},"      left",[84,55987,52586],{"class":154},[84,55989,1504],{"class":94},[84,55991,2471],{"class":154},[84,55993,55994,55997,55999,56001],{"class":86,"line":2959},[84,55995,55996],{"class":94},"      bottom",[84,55998,52586],{"class":154},[84,56000,1504],{"class":94},[84,56002,2471],{"class":154},[84,56004,56005,56007,56009,56011,56013],{"class":86,"line":2964},[84,56006,55918],{"class":94},[84,56008,52586],{"class":154},[84,56010,821],{"class":94},[84,56012,1638],{"class":129},[84,56014,2471],{"class":154},[84,56016,56017,56019,56021,56023,56025],{"class":86,"line":3755},[84,56018,55932],{"class":94},[84,56020,52586],{"class":154},[84,56022,1884],{"class":94},[84,56024,1638],{"class":129},[84,56026,2471],{"class":154},[84,56028,56029,56032,56034,56037],{"class":86,"line":3769},[84,56030,56031],{"class":94},"      background-color",[84,56033,52586],{"class":154},[84,56035,56036],{"class":94},"skyblue",[84,56038,2471],{"class":154},[84,56040,56041],{"class":86,"line":3777},[84,56042,3365],{"class":154},[84,56044,56045],{"class":86,"line":3782},[84,56046,3578],{"emptyLinePlaceholder":1252},[84,56048,56049,56051,56053],{"class":86,"line":3788},[84,56050,55967],{"class":90},[84,56052,7997],{"class":52449},[84,56054,16742],{"class":154},[84,56056,56057,56059,56061,56063],{"class":86,"line":3794},[84,56058,55906],{"class":94},[84,56060,52586],{"class":154},[84,56062,55978],{"class":94},[84,56064,2471],{"class":154},[84,56066,56067,56070,56072,56074,56076],{"class":86,"line":3799},[84,56068,56069],{"class":94},"      font-size",[84,56071,52586],{"class":154},[84,56073,2209],{"class":94},[84,56075,52641],{"class":129},[84,56077,2471],{"class":154},[84,56079,56080,56082,56084,56086,56088],{"class":86,"line":9120},[84,56081,55985],{"class":94},[84,56083,52586],{"class":154},[84,56085,2008],{"class":94},[84,56087,52641],{"class":129},[84,56089,2471],{"class":154},[84,56091,56092,56095,56097,56099,56101],{"class":86,"line":9144},[84,56093,56094],{"class":94},"      top",[84,56096,52586],{"class":154},[84,56098,1629],{"class":94},[84,56100,52641],{"class":129},[84,56102,2471],{"class":154},[84,56104,56105],{"class":86,"line":9149},[84,56106,3365],{"class":154},[84,56108,56109],{"class":86,"line":9155},[84,56110,3578],{"emptyLinePlaceholder":1252},[84,56112,56113,56116],{"class":86,"line":9182},[84,56114,56115],{"class":52449},"    ul",[84,56117,16742],{"class":154},[84,56119,56120,56122,56124,56126],{"class":86,"line":9187},[84,56121,55906],{"class":94},[84,56123,52586],{"class":154},[84,56125,55978],{"class":94},[84,56127,2471],{"class":154},[84,56129,56130,56132,56134,56136,56138],{"class":86,"line":9193},[84,56131,56094],{"class":94},[84,56133,52586],{"class":154},[84,56135,2089],{"class":94},[84,56137,52641],{"class":129},[84,56139,2471],{"class":154},[84,56141,56142,56144,56146,56148,56150],{"class":86,"line":9205},[84,56143,55985],{"class":94},[84,56145,52586],{"class":154},[84,56147,2008],{"class":94},[84,56149,52641],{"class":129},[84,56151,2471],{"class":154},[84,56153,56154,56157,56159,56161],{"class":86,"line":9217},[84,56155,56156],{"class":94},"      display",[84,56158,52586],{"class":154},[84,56160,52626],{"class":94},[84,56162,2471],{"class":154},[84,56164,56165,56168,56170,56172],{"class":86,"line":9229},[84,56166,56167],{"class":94},"      justify-content",[84,56169,52586],{"class":154},[84,56171,52817],{"class":94},[84,56173,2471],{"class":154},[84,56175,56176,56178,56180,56182],{"class":86,"line":10888},[84,56177,55906],{"class":94},[84,56179,52586],{"class":154},[84,56181,55978],{"class":94},[84,56183,2471],{"class":154},[84,56185,56186,56188,56190,56192,56194],{"class":86,"line":10913},[84,56187,55918],{"class":94},[84,56189,52586],{"class":154},[84,56191,5170],{"class":94},[84,56193,52641],{"class":129},[84,56195,2471],{"class":154},[84,56197,56198,56200,56202,56204,56206],{"class":86,"line":10936},[84,56199,55932],{"class":94},[84,56201,52586],{"class":154},[84,56203,2008],{"class":94},[84,56205,52641],{"class":129},[84,56207,2471],{"class":154},[84,56209,56210],{"class":86,"line":10960},[84,56211,3365],{"class":154},[84,56213,56214],{"class":86,"line":10965},[84,56215,3578],{"emptyLinePlaceholder":1252},[84,56217,56218,56220,56223],{"class":86,"line":10970},[84,56219,56115],{"class":52449},[84,56221,56222],{"class":52449}," li",[84,56224,16742],{"class":154},[84,56226,56227,56229,56231,56233,56235],{"class":86,"line":10975},[84,56228,55918],{"class":94},[84,56230,52586],{"class":154},[84,56232,2008],{"class":94},[84,56234,52641],{"class":129},[84,56236,2471],{"class":154},[84,56238,56239,56241,56243,56245,56247],{"class":86,"line":10984},[84,56240,55932],{"class":94},[84,56242,52586],{"class":154},[84,56244,2008],{"class":94},[84,56246,52641],{"class":129},[84,56248,2471],{"class":154},[84,56250,56251,56253,56255,56258,56260,56262,56264,56266,56268,56270,56272,56275],{"class":86,"line":10989},[84,56252,56031],{"class":94},[84,56254,52586],{"class":154},[84,56256,56257],{"class":94},"rgba",[84,56259,155],{"class":154},[84,56261,1504],{"class":94},[84,56263,846],{"class":154},[84,56265,1504],{"class":94},[84,56267,846],{"class":154},[84,56269,1504],{"class":94},[84,56271,846],{"class":154},[84,56273,56274],{"class":94},".4",[84,56276,3897],{"class":154},[84,56278,56279,56282,56284,56286,56288],{"class":86,"line":10995},[84,56280,56281],{"class":94},"      border-radius",[84,56283,52586],{"class":154},[84,56285,1756],{"class":94},[84,56287,52641],{"class":129},[84,56289,2471],{"class":154},[84,56291,56292],{"class":86,"line":11016},[84,56293,3365],{"class":154},[84,56295,56296],{"class":86,"line":11022},[84,56297,3578],{"emptyLinePlaceholder":1252},[84,56299,56300,56303],{"class":86,"line":11036},[84,56301,56302],{"class":90},"    .activate",[84,56304,16742],{"class":154},[84,56306,56307,56309,56311,56314],{"class":86,"line":11042},[84,56308,56031],{"class":94},[84,56310,52586],{"class":154},[84,56312,56313],{"class":94},"#f7f7f7",[84,56315,2471],{"class":154},[84,56317,56318],{"class":86,"line":11069},[84,56319,3365],{"class":154},[84,56321,56322,56324,56326],{"class":86,"line":11078},[84,56323,53566],{"class":154},[84,56325,1222],{"class":52449},[84,56327,52456],{"class":154},[84,56329,56330,56332,56334],{"class":86,"line":11084},[84,56331,52934],{"class":154},[84,56333,52483],{"class":52449},[84,56335,52456],{"class":154},[84,56337,56338],{"class":86,"line":11092},[84,56339,3578],{"emptyLinePlaceholder":1252},[84,56341,56342,56344,56346],{"class":86,"line":11097},[84,56343,2218],{"class":154},[84,56345,52949],{"class":52449},[84,56347,52456],{"class":154},[84,56349,56350,56352,56354,56356,56358,56360],{"class":86,"line":17774},[84,56351,53293],{"class":154},[84,56353,52760],{"class":52449},[84,56355,54635],{"class":90},[84,56357,867],{"class":154},[84,56359,54640],{"class":158},[84,56361,52456],{"class":154},[84,56363,56364,56366,56368,56370,56372,56375],{"class":86,"line":17780},[84,56365,52490],{"class":154},[84,56367,52760],{"class":52449},[84,56369,54635],{"class":90},[84,56371,867],{"class":154},[84,56373,56374],{"class":158},"\"slider-wrapper\"",[84,56376,52456],{"class":154},[84,56378,56379,56382,56384,56387,56389,56392,56395,56397,56399],{"class":86,"line":17803},[84,56380,56381],{"class":154},"      \u003C",[84,56383,2643],{"class":52449},[84,56385,56386],{"class":90}," src",[84,56388,867],{"class":154},[84,56390,56391],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[84,56393,56394],{"class":90}," alt",[84,56396,867],{"class":154},[84,56398,8824],{"class":158},[84,56400,52456],{"class":154},[84,56402,56403,56405,56407],{"class":86,"line":17809},[84,56404,52925],{"class":154},[84,56406,52760],{"class":52449},[84,56408,52456],{"class":154},[84,56410,56411,56413,56415,56417,56419,56422],{"class":86,"line":17832},[84,56412,52490],{"class":154},[84,56414,52760],{"class":52449},[84,56416,54635],{"class":90},[84,56418,867],{"class":154},[84,56420,56421],{"class":158},"\"slider-footer\"",[84,56423,52456],{"class":154},[84,56425,56426,56428,56430,56433,56435],{"class":86,"line":17846},[84,56427,56381],{"class":154},[84,56429,19],{"class":52449},[84,56431,56432],{"class":154},">对人类来说会不会太超前了?\u003C\u002F",[84,56434,19],{"class":52449},[84,56436,52456],{"class":154},[84,56438,56439,56441,56443],{"class":86,"line":17866},[84,56440,56381],{"class":154},[84,56442,2315],{"class":52449},[84,56444,52456],{"class":154},[84,56446,56447,56450,56452,56454,56456,56459,56462,56464],{"class":86,"line":17872},[84,56448,56449],{"class":154},"        \u003C",[84,56451,29],{"class":52449},[84,56453,54635],{"class":90},[84,56455,867],{"class":154},[84,56457,56458],{"class":158},"\"activate\"",[84,56460,56461],{"class":154},">\u003C\u002F",[84,56463,29],{"class":52449},[84,56465,52456],{"class":154},[84,56467,56468,56470,56472,56474,56476],{"class":86,"line":17883},[84,56469,56449],{"class":154},[84,56471,29],{"class":52449},[84,56473,56461],{"class":154},[84,56475,29],{"class":52449},[84,56477,52456],{"class":154},[84,56479,56480,56482,56484,56486,56488],{"class":86,"line":17906},[84,56481,56449],{"class":154},[84,56483,29],{"class":52449},[84,56485,56461],{"class":154},[84,56487,29],{"class":52449},[84,56489,52456],{"class":154},[84,56491,56492,56494,56496,56498,56500],{"class":86,"line":17928},[84,56493,56449],{"class":154},[84,56495,29],{"class":52449},[84,56497,56461],{"class":154},[84,56499,29],{"class":52449},[84,56501,52456],{"class":154},[84,56503,56504,56506,56508,56510,56512],{"class":86,"line":17933},[84,56505,56449],{"class":154},[84,56507,29],{"class":52449},[84,56509,56461],{"class":154},[84,56511,29],{"class":52449},[84,56513,52456],{"class":154},[84,56515,56516,56518,56520,56522,56524],{"class":86,"line":17939},[84,56517,56449],{"class":154},[84,56519,29],{"class":52449},[84,56521,56461],{"class":154},[84,56523,29],{"class":52449},[84,56525,52456],{"class":154},[84,56527,56528,56530,56532,56534,56536],{"class":86,"line":17953},[84,56529,56449],{"class":154},[84,56531,29],{"class":52449},[84,56533,56461],{"class":154},[84,56535,29],{"class":52449},[84,56537,52456],{"class":154},[84,56539,56540,56542,56544,56546,56548],{"class":86,"line":17966},[84,56541,56449],{"class":154},[84,56543,29],{"class":52449},[84,56545,56461],{"class":154},[84,56547,29],{"class":52449},[84,56549,52456],{"class":154},[84,56551,56552,56555,56557],{"class":86,"line":17971},[84,56553,56554],{"class":154},"      \u003C\u002F",[84,56556,2315],{"class":52449},[84,56558,52456],{"class":154},[84,56560,56561,56563,56565],{"class":86,"line":17985},[84,56562,52925],{"class":154},[84,56564,52760],{"class":52449},[84,56566,52456],{"class":154},[84,56568,56569,56571,56573],{"class":86,"line":17990},[84,56570,53566],{"class":154},[84,56572,52760],{"class":52449},[84,56574,52456],{"class":154},[84,56576,56577,56579,56581],{"class":86,"line":17996},[84,56578,53293],{"class":154},[84,56580,52962],{"class":52449},[84,56582,52456],{"class":154},[84,56584,56585,56587,56590,56592],{"class":86,"line":18001},[84,56586,12393],{"class":129},[84,56588,56589],{"class":94}," arrImage",[84,56591,14735],{"class":129},[84,56593,56594],{"class":154}," [\n",[84,56596,56597,56600,56603,56606,56609,56612,56615],{"class":86,"line":18015},[84,56598,56599],{"class":154},"      { url: ",[84,56601,56602],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[84,56604,56605],{"class":154},", title: ",[84,56607,56608],{"class":158},"'对人类来说会不会太超前了?'",[84,56610,56611],{"class":154},", color: ",[84,56613,56614],{"class":158},"'rgba(100,67,68)'",[84,56616,56617],{"class":154}," },\n",[84,56619,56620,56622,56625,56627,56630,56632,56635],{"class":86,"line":18020},[84,56621,56599],{"class":154},[84,56623,56624],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[84,56626,56605],{"class":154},[84,56628,56629],{"class":158},"'开启剑与雪的黑暗传说!'",[84,56631,56611],{"class":154},[84,56633,56634],{"class":158},"'rgba(43,35,26)'",[84,56636,56617],{"class":154},[84,56638,56639,56641,56644,56646,56649,56651,56654],{"class":86,"line":18025},[84,56640,56599],{"class":154},[84,56642,56643],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[84,56645,56605],{"class":154},[84,56647,56648],{"class":158},"'真正的jo厨出现了!'",[84,56650,56611],{"class":154},[84,56652,56653],{"class":158},"'rgba(36,31,33)'",[84,56655,56617],{"class":154},[84,56657,56658,56660,56663,56665,56668,56670,56673],{"class":86,"line":18039},[84,56659,56599],{"class":154},[84,56661,56662],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[84,56664,56605],{"class":154},[84,56666,56667],{"class":158},"'李玉刚:让世界通过b站看到东方大国文化'",[84,56669,56611],{"class":154},[84,56671,56672],{"class":158},"'rgba(139,98,66)'",[84,56674,56617],{"class":154},[84,56676,56677,56679,56682,56684,56687,56689,56692],{"class":86,"line":18051},[84,56678,56599],{"class":154},[84,56680,56681],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[84,56683,56605],{"class":154},[84,56685,56686],{"class":158},"'快来分享你的寒假日常吧'",[84,56688,56611],{"class":154},[84,56690,56691],{"class":158},"'rgba(67,90,92)'",[84,56693,56617],{"class":154},[84,56695,56696,56698,56701,56703,56706,56708,56711],{"class":86,"line":18056},[84,56697,56599],{"class":154},[84,56699,56700],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[84,56702,56605],{"class":154},[84,56704,56705],{"class":158},"'哔哩哔哩小年YEAR'",[84,56707,56611],{"class":154},[84,56709,56710],{"class":158},"'rgba(166,131,143)'",[84,56712,56617],{"class":154},[84,56714,56715,56717,56720,56722,56725,56727,56730],{"class":86,"line":18069},[84,56716,56599],{"class":154},[84,56718,56719],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[84,56721,56605],{"class":154},[84,56723,56724],{"class":158},"'一站式解决你的电脑配置问题'",[84,56726,56611],{"class":154},[84,56728,56729],{"class":158},"'rgba(53,29,25)'",[84,56731,56617],{"class":154},[84,56733,56734,56736,56739,56741,56744,56746,56749],{"class":86,"line":18074},[84,56735,56599],{"class":154},[84,56737,56738],{"class":158},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[84,56740,56605],{"class":154},[84,56742,56743],{"class":158},"'谁不想和小猫咪贴贴呢?'",[84,56745,56611],{"class":154},[84,56747,56748],{"class":158},"'rgba(99,72,114)'",[84,56750,56751],{"class":154}," }\n",[84,56753,56754],{"class":86,"line":18079},[84,56755,54258],{"class":154},[84,56757,56758,56760,56763,56765,56767,56769,56771,56774],{"class":86,"line":18084},[84,56759,12393],{"class":129},[84,56761,56762],{"class":94}," img",[84,56764,14735],{"class":129},[84,56766,55544],{"class":154},[84,56768,55547],{"class":90},[84,56770,155],{"class":154},[84,56772,56773],{"class":158},"'.slider-wrapper img'",[84,56775,162],{"class":154},[84,56777,56778,56780,56782,56784,56786,56788,56790,56793],{"class":86,"line":18097},[84,56779,12393],{"class":129},[84,56781,7997],{"class":94},[84,56783,14735],{"class":129},[84,56785,55544],{"class":154},[84,56787,55547],{"class":90},[84,56789,155],{"class":154},[84,56791,56792],{"class":158},"'.slider-footer p'",[84,56794,162],{"class":154},[84,56796,56797,56799,56802,56804,56806,56808,56810,56813],{"class":86,"line":18102},[84,56798,12393],{"class":129},[84,56800,56801],{"class":94}," color",[84,56803,14735],{"class":129},[84,56805,55544],{"class":154},[84,56807,55547],{"class":90},[84,56809,155],{"class":154},[84,56811,56812],{"class":158},"'.slider-footer'",[84,56814,162],{"class":154},[84,56816,56817,56819,56822,56824,56826,56829,56831,56834],{"class":86,"line":33785},[84,56818,12393],{"class":129},[84,56820,56821],{"class":94}," lis",[84,56823,14735],{"class":129},[84,56825,55544],{"class":154},[84,56827,56828],{"class":90},"querySelectorAll",[84,56830,155],{"class":154},[84,56832,56833],{"class":158},"'.slider-footer ul li'",[84,56835,162],{"class":154},[84,56837,56838,56840,56842,56844],{"class":86,"line":33791},[84,56839,53368],{"class":129},[84,56841,10610],{"class":154},[84,56843,867],{"class":129},[84,56845,56846],{"class":94}," 1\n",[84,56848,56849,56851,56854,56856,56858,56860,56862],{"class":86,"line":33797},[84,56850,53368],{"class":129},[84,56852,56853],{"class":154}," timer ",[84,56855,867],{"class":129},[84,56857,55591],{"class":90},[84,56859,155],{"class":154},[84,56861,55596],{"class":129},[84,56863,55599],{"class":154},[84,56865,56866,56869,56871],{"class":86,"line":33803},[84,56867,56868],{"class":154},"      img.src ",[84,56870,867],{"class":129},[84,56872,56873],{"class":154}," arrImage[i].url\n",[84,56875,56876,56879,56881],{"class":86,"line":33809},[84,56877,56878],{"class":154},"      p.innerHTML ",[84,56880,867],{"class":129},[84,56882,56883],{"class":154}," arrImage[i].title\n",[84,56885,56886,56889,56891],{"class":86,"line":33820},[84,56887,56888],{"class":154},"      color.style.backgroundColor ",[84,56890,867],{"class":129},[84,56892,56893],{"class":154}," arrImage[i].color\n",[84,56895,56896],{"class":86,"line":33826},[84,56897,56898],{"class":1378},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[84,56900,56901],{"class":86,"line":33846},[84,56902,56903],{"class":1378},"      \u002F\u002F li.classList.add('activate')\n",[84,56905,56906],{"class":86,"line":33852},[84,56907,56908],{"class":1378},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[84,56910,56911],{"class":86,"line":33863},[84,56912,56913],{"class":1378},"      \u002F\u002F lis[i].classList.remove('activate')\n",[84,56915,56916,56919,56921,56923,56926,56929,56932,56934,56937],{"class":86,"line":33869},[84,56917,56918],{"class":154},"      document.",[84,56920,55547],{"class":90},[84,56922,155],{"class":154},[84,56924,56925],{"class":158},"'.activate'",[84,56927,56928],{"class":154},")?.classList.",[84,56930,56931],{"class":90},"toggle",[84,56933,155],{"class":154},[84,56935,56936],{"class":158},"'activate'",[84,56938,162],{"class":154},[84,56940,56941,56944,56946,56948,56950],{"class":86,"line":33875},[84,56942,56943],{"class":154},"      lis[i].classList.",[84,56945,6508],{"class":90},[84,56947,155],{"class":154},[84,56949,56936],{"class":158},[84,56951,162],{"class":154},[84,56953,56954],{"class":86,"line":33881},[84,56955,3578],{"emptyLinePlaceholder":1252},[84,56957,56958,56961,56963,56965,56967,56969,56971,56973,56976],{"class":86,"line":33887},[84,56959,56960],{"class":154},"      i ",[84,56962,867],{"class":129},[84,56964,55630],{"class":154},[84,56966,1790],{"class":129},[84,56968,133],{"class":94},[84,56970,1154],{"class":154},[84,56972,1638],{"class":129},[84,56974,56975],{"class":154}," arrImage.",[84,56977,56978],{"class":94},"length\n",[84,56980,56981],{"class":86,"line":33893},[84,56982,3578],{"emptyLinePlaceholder":1252},[84,56984,56985,56987,56989],{"class":86,"line":33899},[84,56986,55682],{"class":154},[84,56988,7583],{"class":94},[84,56990,162],{"class":154},[84,56992,56993,56995,56997],{"class":86,"line":33905},[84,56994,53566],{"class":154},[84,56996,52962],{"class":52449},[84,56998,52456],{"class":154},[84,57000,57001,57003,57005],{"class":86,"line":33925},[84,57002,52934],{"class":154},[84,57004,52949],{"class":52449},[84,57006,52456],{"class":154},[84,57008,57009],{"class":86,"line":33931},[84,57010,3578],{"emptyLinePlaceholder":1252},[84,57012,57013,57015,57017],{"class":86,"line":33947},[84,57014,52934],{"class":154},[84,57016,51784],{"class":52449},[84,57018,52456],{"class":154},[19,57020,57021],{},[2643,57022],{"alt":66,"src":57023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57025,57026],{},"?.就是短路保护,确保输出正常进行",[19,57028,57029],{},"不要忘记取余%,有时候可以用",[19,57031,57032],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57034,57035],{"start":98},[29,57036,57037],{},"法2",[60,57039,57041],{"className":51782,"code":57040,"language":51784,"meta":66,"style":66},"\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",[39,57042,57043,57053,57067,57071,57079,57093,57113,57125,57133,57139,57149,57159,57163,57167,57173,57183,57187,57191,57197,57207,57219,57231,57245,57249,57253,57259,57269,57279,57289,57301,57313,57323,57327,57331,57339,57349,57361,57373,57385,57389,57393,57399,57409,57421,57433,57443,57453,57463,57475,57487,57491,57495,57503,57515,57527,57553,57565,57569,57573,57579,57589,57593,57601,57609,57613,57621,57635,57649,57669,57677,57691,57703,57711,57729,57741,57753,57765,57777,57789,57801,57813,57821,57829,57837,57845,57856,57872,57888,57904,57920,57936,57952,57968,57984,57988,57993,58011,58029,58039,58044,58049,58060,58066,58081,58090,58094,58099,58108,58113,58122,58127,58132,58137,58160,58190,58194,58202,58206,58214,58222,58226],{"__ignoreMap":66},[84,57044,57045,57047,57049,57051],{"class":86,"line":87},[84,57046,52446],{"class":154},[84,57048,52450],{"class":52449},[84,57050,52453],{"class":90},[84,57052,52456],{"class":154},[84,57054,57055,57057,57059,57061,57063,57065],{"class":86,"line":98},[84,57056,2218],{"class":154},[84,57058,51784],{"class":52449},[84,57060,52465],{"class":90},[84,57062,867],{"class":154},[84,57064,52470],{"class":158},[84,57066,52456],{"class":154},[84,57068,57069],{"class":86,"line":106},[84,57070,3578],{"emptyLinePlaceholder":1252},[84,57072,57073,57075,57077],{"class":86,"line":112},[84,57074,2218],{"class":154},[84,57076,52483],{"class":52449},[84,57078,52456],{"class":154},[84,57080,57081,57083,57085,57087,57089,57091],{"class":86,"line":425},[84,57082,53293],{"class":154},[84,57084,52493],{"class":52449},[84,57086,52496],{"class":90},[84,57088,867],{"class":154},[84,57090,52501],{"class":158},[84,57092,52456],{"class":154},[84,57094,57095,57097,57099,57101,57103,57105,57107,57109,57111],{"class":86,"line":2395},[84,57096,53293],{"class":154},[84,57098,52493],{"class":52449},[84,57100,16090],{"class":90},[84,57102,867],{"class":154},[84,57104,52540],{"class":158},[84,57106,52520],{"class":90},[84,57108,867],{"class":154},[84,57110,52547],{"class":158},[84,57112,52456],{"class":154},[84,57114,57115,57117,57119,57121,57123],{"class":86,"line":2401},[84,57116,53293],{"class":154},[84,57118,52556],{"class":52449},[84,57120,52559],{"class":154},[84,57122,52556],{"class":52449},[84,57124,52456],{"class":154},[84,57126,57127,57129,57131],{"class":86,"line":2492},[84,57128,53293],{"class":154},[84,57130,1222],{"class":52449},[84,57132,52456],{"class":154},[84,57134,57135,57137],{"class":86,"line":2498},[84,57136,7576],{"class":52449},[84,57138,16742],{"class":154},[84,57140,57141,57143,57145,57147],{"class":86,"line":2510},[84,57142,55842],{"class":94},[84,57144,52586],{"class":154},[84,57146,1504],{"class":94},[84,57148,2471],{"class":154},[84,57150,57151,57153,57155,57157],{"class":86,"line":2793},[84,57152,55853],{"class":94},[84,57154,52586],{"class":154},[84,57156,1504],{"class":94},[84,57158,2471],{"class":154},[84,57160,57161],{"class":86,"line":2798},[84,57162,3365],{"class":154},[84,57164,57165],{"class":86,"line":2804},[84,57166,3578],{"emptyLinePlaceholder":1252},[84,57168,57169,57171],{"class":86,"line":2809},[84,57170,55872],{"class":52449},[84,57172,16742],{"class":154},[84,57174,57175,57177,57179,57181],{"class":86,"line":2823},[84,57176,55879],{"class":94},[84,57178,52586],{"class":154},[84,57180,55884],{"class":94},[84,57182,2471],{"class":154},[84,57184,57185],{"class":86,"line":2828},[84,57186,3365],{"class":154},[84,57188,57189],{"class":86,"line":2834},[84,57190,3578],{"emptyLinePlaceholder":1252},[84,57192,57193,57195],{"class":86,"line":2855},[84,57194,55899],{"class":90},[84,57196,16742],{"class":154},[84,57198,57199,57201,57203,57205],{"class":86,"line":2860},[84,57200,55906],{"class":94},[84,57202,52586],{"class":154},[84,57204,55911],{"class":94},[84,57206,2471],{"class":154},[84,57208,57209,57211,57213,57215,57217],{"class":86,"line":2874},[84,57210,55918],{"class":94},[84,57212,52586],{"class":154},[84,57214,55923],{"class":94},[84,57216,52641],{"class":129},[84,57218,2471],{"class":154},[84,57220,57221,57223,57225,57227,57229],{"class":86,"line":2879},[84,57222,55932],{"class":94},[84,57224,52586],{"class":154},[84,57226,2720],{"class":94},[84,57228,52641],{"class":129},[84,57230,2471],{"class":154},[84,57232,57233,57235,57237,57239,57241,57243],{"class":86,"line":2908},[84,57234,55853],{"class":94},[84,57236,52586],{"class":154},[84,57238,821],{"class":94},[84,57240,52641],{"class":129},[84,57242,52705],{"class":94},[84,57244,2471],{"class":154},[84,57246,57247],{"class":86,"line":2913},[84,57248,3365],{"class":154},[84,57250,57251],{"class":86,"line":2930},[84,57252,3578],{"emptyLinePlaceholder":1252},[84,57254,57255,57257],{"class":86,"line":2935},[84,57256,55967],{"class":90},[84,57258,16742],{"class":154},[84,57260,57261,57263,57265,57267],{"class":86,"line":2940},[84,57262,55906],{"class":94},[84,57264,52586],{"class":154},[84,57266,55978],{"class":94},[84,57268,2471],{"class":154},[84,57270,57271,57273,57275,57277],{"class":86,"line":2945},[84,57272,55985],{"class":94},[84,57274,52586],{"class":154},[84,57276,1504],{"class":94},[84,57278,2471],{"class":154},[84,57280,57281,57283,57285,57287],{"class":86,"line":2959},[84,57282,55996],{"class":94},[84,57284,52586],{"class":154},[84,57286,1504],{"class":94},[84,57288,2471],{"class":154},[84,57290,57291,57293,57295,57297,57299],{"class":86,"line":2964},[84,57292,55918],{"class":94},[84,57294,52586],{"class":154},[84,57296,821],{"class":94},[84,57298,1638],{"class":129},[84,57300,2471],{"class":154},[84,57302,57303,57305,57307,57309,57311],{"class":86,"line":3755},[84,57304,55932],{"class":94},[84,57306,52586],{"class":154},[84,57308,1884],{"class":94},[84,57310,1638],{"class":129},[84,57312,2471],{"class":154},[84,57314,57315,57317,57319,57321],{"class":86,"line":3769},[84,57316,56031],{"class":94},[84,57318,52586],{"class":154},[84,57320,56036],{"class":94},[84,57322,2471],{"class":154},[84,57324,57325],{"class":86,"line":3777},[84,57326,3365],{"class":154},[84,57328,57329],{"class":86,"line":3782},[84,57330,3578],{"emptyLinePlaceholder":1252},[84,57332,57333,57335,57337],{"class":86,"line":3788},[84,57334,55967],{"class":90},[84,57336,7997],{"class":52449},[84,57338,16742],{"class":154},[84,57340,57341,57343,57345,57347],{"class":86,"line":3794},[84,57342,55906],{"class":94},[84,57344,52586],{"class":154},[84,57346,55978],{"class":94},[84,57348,2471],{"class":154},[84,57350,57351,57353,57355,57357,57359],{"class":86,"line":3799},[84,57352,56069],{"class":94},[84,57354,52586],{"class":154},[84,57356,2209],{"class":94},[84,57358,52641],{"class":129},[84,57360,2471],{"class":154},[84,57362,57363,57365,57367,57369,57371],{"class":86,"line":9120},[84,57364,55985],{"class":94},[84,57366,52586],{"class":154},[84,57368,2008],{"class":94},[84,57370,52641],{"class":129},[84,57372,2471],{"class":154},[84,57374,57375,57377,57379,57381,57383],{"class":86,"line":9144},[84,57376,56094],{"class":94},[84,57378,52586],{"class":154},[84,57380,1629],{"class":94},[84,57382,52641],{"class":129},[84,57384,2471],{"class":154},[84,57386,57387],{"class":86,"line":9149},[84,57388,3365],{"class":154},[84,57390,57391],{"class":86,"line":9155},[84,57392,3578],{"emptyLinePlaceholder":1252},[84,57394,57395,57397],{"class":86,"line":9182},[84,57396,56115],{"class":52449},[84,57398,16742],{"class":154},[84,57400,57401,57403,57405,57407],{"class":86,"line":9187},[84,57402,55906],{"class":94},[84,57404,52586],{"class":154},[84,57406,55978],{"class":94},[84,57408,2471],{"class":154},[84,57410,57411,57413,57415,57417,57419],{"class":86,"line":9193},[84,57412,56094],{"class":94},[84,57414,52586],{"class":154},[84,57416,2089],{"class":94},[84,57418,52641],{"class":129},[84,57420,2471],{"class":154},[84,57422,57423,57425,57427,57429,57431],{"class":86,"line":9205},[84,57424,55985],{"class":94},[84,57426,52586],{"class":154},[84,57428,2008],{"class":94},[84,57430,52641],{"class":129},[84,57432,2471],{"class":154},[84,57434,57435,57437,57439,57441],{"class":86,"line":9217},[84,57436,56156],{"class":94},[84,57438,52586],{"class":154},[84,57440,52626],{"class":94},[84,57442,2471],{"class":154},[84,57444,57445,57447,57449,57451],{"class":86,"line":9229},[84,57446,56167],{"class":94},[84,57448,52586],{"class":154},[84,57450,52817],{"class":94},[84,57452,2471],{"class":154},[84,57454,57455,57457,57459,57461],{"class":86,"line":10888},[84,57456,55906],{"class":94},[84,57458,52586],{"class":154},[84,57460,55978],{"class":94},[84,57462,2471],{"class":154},[84,57464,57465,57467,57469,57471,57473],{"class":86,"line":10913},[84,57466,55918],{"class":94},[84,57468,52586],{"class":154},[84,57470,5170],{"class":94},[84,57472,52641],{"class":129},[84,57474,2471],{"class":154},[84,57476,57477,57479,57481,57483,57485],{"class":86,"line":10936},[84,57478,55932],{"class":94},[84,57480,52586],{"class":154},[84,57482,2008],{"class":94},[84,57484,52641],{"class":129},[84,57486,2471],{"class":154},[84,57488,57489],{"class":86,"line":10960},[84,57490,3365],{"class":154},[84,57492,57493],{"class":86,"line":10965},[84,57494,3578],{"emptyLinePlaceholder":1252},[84,57496,57497,57499,57501],{"class":86,"line":10970},[84,57498,56115],{"class":52449},[84,57500,56222],{"class":52449},[84,57502,16742],{"class":154},[84,57504,57505,57507,57509,57511,57513],{"class":86,"line":10975},[84,57506,55918],{"class":94},[84,57508,52586],{"class":154},[84,57510,2008],{"class":94},[84,57512,52641],{"class":129},[84,57514,2471],{"class":154},[84,57516,57517,57519,57521,57523,57525],{"class":86,"line":10984},[84,57518,55932],{"class":94},[84,57520,52586],{"class":154},[84,57522,2008],{"class":94},[84,57524,52641],{"class":129},[84,57526,2471],{"class":154},[84,57528,57529,57531,57533,57535,57537,57539,57541,57543,57545,57547,57549,57551],{"class":86,"line":10989},[84,57530,56031],{"class":94},[84,57532,52586],{"class":154},[84,57534,56257],{"class":94},[84,57536,155],{"class":154},[84,57538,1504],{"class":94},[84,57540,846],{"class":154},[84,57542,1504],{"class":94},[84,57544,846],{"class":154},[84,57546,1504],{"class":94},[84,57548,846],{"class":154},[84,57550,56274],{"class":94},[84,57552,3897],{"class":154},[84,57554,57555,57557,57559,57561,57563],{"class":86,"line":10995},[84,57556,56281],{"class":94},[84,57558,52586],{"class":154},[84,57560,1756],{"class":94},[84,57562,52641],{"class":129},[84,57564,2471],{"class":154},[84,57566,57567],{"class":86,"line":11016},[84,57568,3365],{"class":154},[84,57570,57571],{"class":86,"line":11022},[84,57572,3578],{"emptyLinePlaceholder":1252},[84,57574,57575,57577],{"class":86,"line":11036},[84,57576,56302],{"class":90},[84,57578,16742],{"class":154},[84,57580,57581,57583,57585,57587],{"class":86,"line":11042},[84,57582,56031],{"class":94},[84,57584,52586],{"class":154},[84,57586,56313],{"class":94},[84,57588,2471],{"class":154},[84,57590,57591],{"class":86,"line":11069},[84,57592,3365],{"class":154},[84,57594,57595,57597,57599],{"class":86,"line":11078},[84,57596,53566],{"class":154},[84,57598,1222],{"class":52449},[84,57600,52456],{"class":154},[84,57602,57603,57605,57607],{"class":86,"line":11084},[84,57604,52934],{"class":154},[84,57606,52483],{"class":52449},[84,57608,52456],{"class":154},[84,57610,57611],{"class":86,"line":11092},[84,57612,3578],{"emptyLinePlaceholder":1252},[84,57614,57615,57617,57619],{"class":86,"line":11097},[84,57616,2218],{"class":154},[84,57618,52949],{"class":52449},[84,57620,52456],{"class":154},[84,57622,57623,57625,57627,57629,57631,57633],{"class":86,"line":17774},[84,57624,53293],{"class":154},[84,57626,52760],{"class":52449},[84,57628,54635],{"class":90},[84,57630,867],{"class":154},[84,57632,54640],{"class":158},[84,57634,52456],{"class":154},[84,57636,57637,57639,57641,57643,57645,57647],{"class":86,"line":17780},[84,57638,52490],{"class":154},[84,57640,52760],{"class":52449},[84,57642,54635],{"class":90},[84,57644,867],{"class":154},[84,57646,56374],{"class":158},[84,57648,52456],{"class":154},[84,57650,57651,57653,57655,57657,57659,57661,57663,57665,57667],{"class":86,"line":17803},[84,57652,56381],{"class":154},[84,57654,2643],{"class":52449},[84,57656,56386],{"class":90},[84,57658,867],{"class":154},[84,57660,56391],{"class":158},[84,57662,56394],{"class":90},[84,57664,867],{"class":154},[84,57666,8824],{"class":158},[84,57668,52456],{"class":154},[84,57670,57671,57673,57675],{"class":86,"line":17809},[84,57672,52925],{"class":154},[84,57674,52760],{"class":52449},[84,57676,52456],{"class":154},[84,57678,57679,57681,57683,57685,57687,57689],{"class":86,"line":17832},[84,57680,52490],{"class":154},[84,57682,52760],{"class":52449},[84,57684,54635],{"class":90},[84,57686,867],{"class":154},[84,57688,56421],{"class":158},[84,57690,52456],{"class":154},[84,57692,57693,57695,57697,57699,57701],{"class":86,"line":17846},[84,57694,56381],{"class":154},[84,57696,19],{"class":52449},[84,57698,56432],{"class":154},[84,57700,19],{"class":52449},[84,57702,52456],{"class":154},[84,57704,57705,57707,57709],{"class":86,"line":17866},[84,57706,56381],{"class":154},[84,57708,2315],{"class":52449},[84,57710,52456],{"class":154},[84,57712,57713,57715,57717,57719,57721,57723,57725,57727],{"class":86,"line":17872},[84,57714,56449],{"class":154},[84,57716,29],{"class":52449},[84,57718,54635],{"class":90},[84,57720,867],{"class":154},[84,57722,56458],{"class":158},[84,57724,56461],{"class":154},[84,57726,29],{"class":52449},[84,57728,52456],{"class":154},[84,57730,57731,57733,57735,57737,57739],{"class":86,"line":17883},[84,57732,56449],{"class":154},[84,57734,29],{"class":52449},[84,57736,56461],{"class":154},[84,57738,29],{"class":52449},[84,57740,52456],{"class":154},[84,57742,57743,57745,57747,57749,57751],{"class":86,"line":17906},[84,57744,56449],{"class":154},[84,57746,29],{"class":52449},[84,57748,56461],{"class":154},[84,57750,29],{"class":52449},[84,57752,52456],{"class":154},[84,57754,57755,57757,57759,57761,57763],{"class":86,"line":17928},[84,57756,56449],{"class":154},[84,57758,29],{"class":52449},[84,57760,56461],{"class":154},[84,57762,29],{"class":52449},[84,57764,52456],{"class":154},[84,57766,57767,57769,57771,57773,57775],{"class":86,"line":17933},[84,57768,56449],{"class":154},[84,57770,29],{"class":52449},[84,57772,56461],{"class":154},[84,57774,29],{"class":52449},[84,57776,52456],{"class":154},[84,57778,57779,57781,57783,57785,57787],{"class":86,"line":17939},[84,57780,56449],{"class":154},[84,57782,29],{"class":52449},[84,57784,56461],{"class":154},[84,57786,29],{"class":52449},[84,57788,52456],{"class":154},[84,57790,57791,57793,57795,57797,57799],{"class":86,"line":17953},[84,57792,56449],{"class":154},[84,57794,29],{"class":52449},[84,57796,56461],{"class":154},[84,57798,29],{"class":52449},[84,57800,52456],{"class":154},[84,57802,57803,57805,57807,57809,57811],{"class":86,"line":17966},[84,57804,56449],{"class":154},[84,57806,29],{"class":52449},[84,57808,56461],{"class":154},[84,57810,29],{"class":52449},[84,57812,52456],{"class":154},[84,57814,57815,57817,57819],{"class":86,"line":17971},[84,57816,56554],{"class":154},[84,57818,2315],{"class":52449},[84,57820,52456],{"class":154},[84,57822,57823,57825,57827],{"class":86,"line":17985},[84,57824,52925],{"class":154},[84,57826,52760],{"class":52449},[84,57828,52456],{"class":154},[84,57830,57831,57833,57835],{"class":86,"line":17990},[84,57832,53566],{"class":154},[84,57834,52760],{"class":52449},[84,57836,52456],{"class":154},[84,57838,57839,57841,57843],{"class":86,"line":17996},[84,57840,53293],{"class":154},[84,57842,52962],{"class":52449},[84,57844,52456],{"class":154},[84,57846,57847,57849,57852,57854],{"class":86,"line":18001},[84,57848,12393],{"class":129},[84,57850,57851],{"class":94}," sliderData",[84,57853,14735],{"class":129},[84,57855,56594],{"class":154},[84,57857,57858,57860,57862,57864,57866,57868,57870],{"class":86,"line":18015},[84,57859,56599],{"class":154},[84,57861,56602],{"class":158},[84,57863,56605],{"class":154},[84,57865,56608],{"class":158},[84,57867,56611],{"class":154},[84,57869,56614],{"class":158},[84,57871,56617],{"class":154},[84,57873,57874,57876,57878,57880,57882,57884,57886],{"class":86,"line":18020},[84,57875,56599],{"class":154},[84,57877,56624],{"class":158},[84,57879,56605],{"class":154},[84,57881,56629],{"class":158},[84,57883,56611],{"class":154},[84,57885,56634],{"class":158},[84,57887,56617],{"class":154},[84,57889,57890,57892,57894,57896,57898,57900,57902],{"class":86,"line":18025},[84,57891,56599],{"class":154},[84,57893,56643],{"class":158},[84,57895,56605],{"class":154},[84,57897,56648],{"class":158},[84,57899,56611],{"class":154},[84,57901,56653],{"class":158},[84,57903,56617],{"class":154},[84,57905,57906,57908,57910,57912,57914,57916,57918],{"class":86,"line":18039},[84,57907,56599],{"class":154},[84,57909,56662],{"class":158},[84,57911,56605],{"class":154},[84,57913,56667],{"class":158},[84,57915,56611],{"class":154},[84,57917,56672],{"class":158},[84,57919,56617],{"class":154},[84,57921,57922,57924,57926,57928,57930,57932,57934],{"class":86,"line":18051},[84,57923,56599],{"class":154},[84,57925,56681],{"class":158},[84,57927,56605],{"class":154},[84,57929,56686],{"class":158},[84,57931,56611],{"class":154},[84,57933,56691],{"class":158},[84,57935,56617],{"class":154},[84,57937,57938,57940,57942,57944,57946,57948,57950],{"class":86,"line":18056},[84,57939,56599],{"class":154},[84,57941,56700],{"class":158},[84,57943,56605],{"class":154},[84,57945,56705],{"class":158},[84,57947,56611],{"class":154},[84,57949,56710],{"class":158},[84,57951,56617],{"class":154},[84,57953,57954,57956,57958,57960,57962,57964,57966],{"class":86,"line":18069},[84,57955,56599],{"class":154},[84,57957,56719],{"class":158},[84,57959,56605],{"class":154},[84,57961,56724],{"class":158},[84,57963,56611],{"class":154},[84,57965,56729],{"class":158},[84,57967,56617],{"class":154},[84,57969,57970,57972,57974,57976,57978,57980,57982],{"class":86,"line":18074},[84,57971,56599],{"class":154},[84,57973,56738],{"class":158},[84,57975,56605],{"class":154},[84,57977,56743],{"class":158},[84,57979,56611],{"class":154},[84,57981,56748],{"class":158},[84,57983,56751],{"class":154},[84,57985,57986],{"class":86,"line":18079},[84,57987,54258],{"class":154},[84,57989,57990],{"class":86,"line":18084},[84,57991,57992],{"class":1378},"    \u002F\u002F 1.获取元素\n",[84,57994,57995,57997,57999,58001,58003,58005,58007,58009],{"class":86,"line":18097},[84,57996,12393],{"class":129},[84,57998,56762],{"class":94},[84,58000,14735],{"class":129},[84,58002,55544],{"class":154},[84,58004,55547],{"class":90},[84,58006,155],{"class":154},[84,58008,56773],{"class":158},[84,58010,162],{"class":154},[84,58012,58013,58015,58017,58019,58021,58023,58025,58027],{"class":86,"line":18102},[84,58014,12393],{"class":129},[84,58016,7997],{"class":94},[84,58018,14735],{"class":129},[84,58020,55544],{"class":154},[84,58022,55547],{"class":90},[84,58024,155],{"class":154},[84,58026,56792],{"class":158},[84,58028,162],{"class":154},[84,58030,58031,58033,58035,58037],{"class":86,"line":33785},[84,58032,53368],{"class":129},[84,58034,10610],{"class":154},[84,58036,867],{"class":129},[84,58038,48483],{"class":94},[84,58040,58041],{"class":86,"line":33791},[84,58042,58043],{"class":1378},"    \u002F\u002F 2.开启定时器\n",[84,58045,58046],{"class":86,"line":33797},[84,58047,58048],{"class":1378},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[84,58050,58051,58054,58056,58058],{"class":86,"line":33803},[84,58052,58053],{"class":90},"    setInterval",[84,58055,155],{"class":154},[84,58057,55596],{"class":129},[84,58059,55599],{"class":154},[84,58061,58062,58064],{"class":86,"line":33809},[84,58063,55604],{"class":154},[84,58065,3880],{"class":129},[84,58067,58068,58070,58072,58074,58077,58079],{"class":86,"line":33820},[84,58069,55627],{"class":129},[84,58071,55630],{"class":154},[84,58073,2891],{"class":129},[84,58075,58076],{"class":154}," sliderData.",[84,58078,53117],{"class":94},[84,58080,13613],{"class":154},[84,58082,58083,58086,58088],{"class":86,"line":33826},[84,58084,58085],{"class":154},"        i ",[84,58087,867],{"class":129},[84,58089,48483],{"class":94},[84,58091,58092],{"class":86,"line":33846},[84,58093,53547],{"class":154},[84,58095,58096],{"class":86,"line":33852},[84,58097,58098],{"class":1378},"      \u002F\u002F 更换图片路径\n",[84,58100,58101,58103,58105],{"class":86,"line":33863},[84,58102,56868],{"class":154},[84,58104,867],{"class":129},[84,58106,58107],{"class":154}," sliderData[i].url\n",[84,58109,58110],{"class":86,"line":33869},[84,58111,58112],{"class":1378},"      \u002F\u002F 把文字写到p里面\n",[84,58114,58115,58117,58119],{"class":86,"line":33875},[84,58116,56878],{"class":154},[84,58118,867],{"class":129},[84,58120,58121],{"class":154}," sliderData[i].title\n",[84,58123,58124],{"class":86,"line":33881},[84,58125,58126],{"class":1378},"      \u002F\u002F 小圆点\n",[84,58128,58129],{"class":86,"line":33887},[84,58130,58131],{"class":1378},"      \u002F\u002F 先删除以前的active\n",[84,58133,58134],{"class":86,"line":33893},[84,58135,58136],{"class":1378},"      \u002F\u002F 只让当前li添加active\n",[84,58138,58139,58141,58143,58145,58148,58151,58154,58156,58158],{"class":86,"line":33899},[84,58140,56918],{"class":154},[84,58142,55547],{"class":90},[84,58144,155],{"class":154},[84,58146,58147],{"class":158},"'.slider-footer .activate'",[84,58149,58150],{"class":154},").classList.",[84,58152,58153],{"class":90},"remove",[84,58155,155],{"class":154},[84,58157,56936],{"class":158},[84,58159,162],{"class":154},[84,58161,58162,58164,58166,58168,58171,58173,58175,58177,58180,58182,58184,58186,58188],{"class":86,"line":33905},[84,58163,56918],{"class":154},[84,58165,55547],{"class":90},[84,58167,155],{"class":154},[84,58169,58170],{"class":158},"`.slider-footer ul li:nth-child(${",[84,58172,1751],{"class":154},[84,58174,136],{"class":129},[84,58176,133],{"class":94},[84,58178,58179],{"class":158},"})`",[84,58181,58150],{"class":154},[84,58183,6508],{"class":90},[84,58185,155],{"class":154},[84,58187,56936],{"class":158},[84,58189,162],{"class":154},[84,58191,58192],{"class":86,"line":33925},[84,58193,3578],{"emptyLinePlaceholder":1252},[84,58195,58196,58198,58200],{"class":86,"line":33931},[84,58197,55682],{"class":154},[84,58199,7583],{"class":94},[84,58201,162],{"class":154},[84,58203,58204],{"class":86,"line":33947},[84,58205,3578],{"emptyLinePlaceholder":1252},[84,58207,58208,58210,58212],{"class":86,"line":33953},[84,58209,53566],{"class":154},[84,58211,52962],{"class":52449},[84,58213,52456],{"class":154},[84,58215,58216,58218,58220],{"class":86,"line":33967},[84,58217,52934],{"class":154},[84,58219,52949],{"class":52449},[84,58221,52456],{"class":154},[84,58223,58224],{"class":86,"line":33973},[84,58225,3578],{"emptyLinePlaceholder":1252},[84,58227,58228,58230,58232],{"class":86,"line":33988},[84,58229,52934],{"class":154},[84,58231,51784],{"class":52449},[84,58233,52456],{"class":154},[198,58235,58237],{"id":58236},"_317-重要知识点","3.1.7 重要知识点",[19,58239,58240,58241],{},"浏览器在渲染文本时， ",[1464,58242,58243],{},"没有空格或换行符就没有“断行点”",[19,58245,58246],{},[2643,58247],{"alt":66,"src":58248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58250,58251],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58253,58254],{},[2643,58255],{"alt":66,"src":58256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58258,58259],{},[2643,58260],{"alt":66,"src":58261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58263,58265],{"id":58264},"_32-dom事件基础","3.2 DOM事件基础",[198,58267,58269],{"id":58268},"_321-事件监听","3.2.1 事件监听",[19,58271,58272],{},[2643,58273],{"alt":66,"src":58274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58276,58277],{},"事件监听有响应的发生",[19,58279,58280],{},[2643,58281],{"alt":66,"src":58282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58284,58285],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58287,58288],{},"对于有名函数,要执行的函数名后边不要加()",[198,58290,58292],{"id":58291},"_322-随机点名案例","3.2.2 随机点名案例",[60,58294,58296],{"className":51782,"code":58295,"language":51784,"meta":66,"style":66},"\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",[39,58297,58298,58308,58322,58326,58334,58348,58368,58380,58388,58394,58404,58414,58418,58422,58429,58440,58444,58448,58454,58466,58480,58490,58502,58515,58519,58523,58530,58534,58547,58559,58571,58575,58579,58583,58590,58600,58604,58608,58617,58629,58641,58656,58660,58668,58676,58680,58688,58701,58715,58728,58748,58756,58771,58791,58811,58819,58823,58831,58836,58872,58892,58897,58916,58921,58932,58937,58948,58953,58972,58987,58992,59017,59027,59036,59041,59057,59062,59067,59072,59087,59091,59095,59100,59119,59136,59144,59149,59164,59168,59172,59180,59188,59192],{"__ignoreMap":66},[84,58299,58300,58302,58304,58306],{"class":86,"line":87},[84,58301,52446],{"class":154},[84,58303,52450],{"class":52449},[84,58305,52453],{"class":90},[84,58307,52456],{"class":154},[84,58309,58310,58312,58314,58316,58318,58320],{"class":86,"line":98},[84,58311,2218],{"class":154},[84,58313,51784],{"class":52449},[84,58315,52465],{"class":90},[84,58317,867],{"class":154},[84,58319,52470],{"class":158},[84,58321,52456],{"class":154},[84,58323,58324],{"class":86,"line":106},[84,58325,3578],{"emptyLinePlaceholder":1252},[84,58327,58328,58330,58332],{"class":86,"line":112},[84,58329,2218],{"class":154},[84,58331,52483],{"class":52449},[84,58333,52456],{"class":154},[84,58335,58336,58338,58340,58342,58344,58346],{"class":86,"line":425},[84,58337,53293],{"class":154},[84,58339,52493],{"class":52449},[84,58341,52496],{"class":90},[84,58343,867],{"class":154},[84,58345,52501],{"class":158},[84,58347,52456],{"class":154},[84,58349,58350,58352,58354,58356,58358,58360,58362,58364,58366],{"class":86,"line":2395},[84,58351,53293],{"class":154},[84,58353,52493],{"class":52449},[84,58355,16090],{"class":90},[84,58357,867],{"class":154},[84,58359,52540],{"class":158},[84,58361,52520],{"class":90},[84,58363,867],{"class":154},[84,58365,52547],{"class":158},[84,58367,52456],{"class":154},[84,58369,58370,58372,58374,58376,58378],{"class":86,"line":2401},[84,58371,53293],{"class":154},[84,58373,52556],{"class":52449},[84,58375,52559],{"class":154},[84,58377,52556],{"class":52449},[84,58379,52456],{"class":154},[84,58381,58382,58384,58386],{"class":86,"line":2492},[84,58383,53293],{"class":154},[84,58385,1222],{"class":52449},[84,58387,52456],{"class":154},[84,58389,58390,58392],{"class":86,"line":2498},[84,58391,7576],{"class":52449},[84,58393,16742],{"class":154},[84,58395,58396,58398,58400,58402],{"class":86,"line":2510},[84,58397,55853],{"class":94},[84,58399,52586],{"class":154},[84,58401,1504],{"class":94},[84,58403,2471],{"class":154},[84,58405,58406,58408,58410,58412],{"class":86,"line":2793},[84,58407,55842],{"class":94},[84,58409,52586],{"class":154},[84,58411,1504],{"class":94},[84,58413,2471],{"class":154},[84,58415,58416],{"class":86,"line":2798},[84,58417,3365],{"class":154},[84,58419,58420],{"class":86,"line":2804},[84,58421,3578],{"emptyLinePlaceholder":1252},[84,58423,58424,58427],{"class":86,"line":2809},[84,58425,58426],{"class":52449},"    h2",[84,58428,16742],{"class":154},[84,58430,58431,58434,58436,58438],{"class":86,"line":2823},[84,58432,58433],{"class":94},"      text-align",[84,58435,52586],{"class":154},[84,58437,52741],{"class":94},[84,58439,2471],{"class":154},[84,58441,58442],{"class":86,"line":2828},[84,58443,3365],{"class":154},[84,58445,58446],{"class":86,"line":2834},[84,58447,3578],{"emptyLinePlaceholder":1252},[84,58449,58450,58452],{"class":86,"line":2855},[84,58451,55899],{"class":90},[84,58453,16742],{"class":154},[84,58455,58456,58458,58460,58462,58464],{"class":86,"line":2860},[84,58457,55918],{"class":94},[84,58459,52586],{"class":154},[84,58461,2720],{"class":94},[84,58463,52641],{"class":129},[84,58465,2471],{"class":154},[84,58467,58468,58470,58472,58474,58476,58478],{"class":86,"line":2874},[84,58469,55853],{"class":94},[84,58471,52586],{"class":154},[84,58473,1964],{"class":94},[84,58475,52641],{"class":129},[84,58477,52705],{"class":94},[84,58479,2471],{"class":154},[84,58481,58482,58484,58486,58488],{"class":86,"line":2879},[84,58483,56156],{"class":94},[84,58485,52586],{"class":154},[84,58487,52626],{"class":94},[84,58489,2471],{"class":154},[84,58491,58492,58494,58496,58498,58500],{"class":86,"line":2908},[84,58493,56069],{"class":94},[84,58495,52586],{"class":154},[84,58497,2133],{"class":94},[84,58499,52641],{"class":129},[84,58501,2471],{"class":154},[84,58503,58504,58507,58509,58511,58513],{"class":86,"line":2913},[84,58505,58506],{"class":94},"      line-height",[84,58508,52586],{"class":154},[84,58510,1711],{"class":94},[84,58512,52641],{"class":129},[84,58514,2471],{"class":154},[84,58516,58517],{"class":86,"line":2930},[84,58518,3365],{"class":154},[84,58520,58521],{"class":86,"line":2935},[84,58522,3578],{"emptyLinePlaceholder":1252},[84,58524,58525,58528],{"class":86,"line":2940},[84,58526,58527],{"class":90},"    .qs",[84,58529,16742],{"class":154},[84,58531,58532],{"class":86,"line":2945},[84,58533,3578],{"emptyLinePlaceholder":1252},[84,58535,58536,58538,58540,58543,58545],{"class":86,"line":2959},[84,58537,55918],{"class":94},[84,58539,52586],{"class":154},[84,58541,58542],{"class":94},"450",[84,58544,52641],{"class":129},[84,58546,2471],{"class":154},[84,58548,58549,58551,58553,58555,58557],{"class":86,"line":2964},[84,58550,55932],{"class":94},[84,58552,52586],{"class":154},[84,58554,1711],{"class":94},[84,58556,52641],{"class":129},[84,58558,2471],{"class":154},[84,58560,58561,58564,58566,58569],{"class":86,"line":3755},[84,58562,58563],{"class":94},"      color",[84,58565,52586],{"class":154},[84,58567,58568],{"class":94},"red",[84,58570,2471],{"class":154},[84,58572,58573],{"class":86,"line":3769},[84,58574,3578],{"emptyLinePlaceholder":1252},[84,58576,58577],{"class":86,"line":3777},[84,58578,3365],{"class":154},[84,58580,58581],{"class":86,"line":3782},[84,58582,3578],{"emptyLinePlaceholder":1252},[84,58584,58585,58588],{"class":86,"line":3788},[84,58586,58587],{"class":90},"    .btns",[84,58589,16742],{"class":154},[84,58591,58592,58594,58596,58598],{"class":86,"line":3794},[84,58593,58433],{"class":94},[84,58595,52586],{"class":154},[84,58597,52741],{"class":94},[84,58599,2471],{"class":154},[84,58601,58602],{"class":86,"line":3799},[84,58603,3365],{"class":154},[84,58605,58606],{"class":86,"line":9120},[84,58607,3578],{"emptyLinePlaceholder":1252},[84,58609,58610,58612,58615],{"class":86,"line":9144},[84,58611,58587],{"class":90},[84,58613,58614],{"class":52449}," button",[84,58616,16742],{"class":154},[84,58618,58619,58621,58623,58625,58627],{"class":86,"line":9149},[84,58620,55918],{"class":94},[84,58622,52586],{"class":154},[84,58624,2125],{"class":94},[84,58626,52641],{"class":129},[84,58628,2471],{"class":154},[84,58630,58631,58633,58635,58637,58639],{"class":86,"line":9155},[84,58632,55932],{"class":94},[84,58634,52586],{"class":154},[84,58636,1584],{"class":94},[84,58638,52641],{"class":129},[84,58640,2471],{"class":154},[84,58642,58643,58645,58647,58649,58652,58654],{"class":86,"line":9182},[84,58644,55853],{"class":94},[84,58646,52586],{"class":154},[84,58648,1504],{"class":94},[84,58650,58651],{"class":94}," 50",[84,58653,52641],{"class":129},[84,58655,2471],{"class":154},[84,58657,58658],{"class":86,"line":9187},[84,58659,3365],{"class":154},[84,58661,58662,58664,58666],{"class":86,"line":9193},[84,58663,53566],{"class":154},[84,58665,1222],{"class":52449},[84,58667,52456],{"class":154},[84,58669,58670,58672,58674],{"class":86,"line":9205},[84,58671,52934],{"class":154},[84,58673,52483],{"class":52449},[84,58675,52456],{"class":154},[84,58677,58678],{"class":86,"line":9217},[84,58679,3578],{"emptyLinePlaceholder":1252},[84,58681,58682,58684,58686],{"class":86,"line":9229},[84,58683,2218],{"class":154},[84,58685,52949],{"class":52449},[84,58687,52456],{"class":154},[84,58689,58690,58692,58694,58697,58699],{"class":86,"line":10888},[84,58691,53293],{"class":154},[84,58693,14],{"class":52449},[84,58695,58696],{"class":154},">随机点名\u003C\u002F",[84,58698,14],{"class":52449},[84,58700,52456],{"class":154},[84,58702,58703,58705,58707,58709,58711,58713],{"class":86,"line":10913},[84,58704,53293],{"class":154},[84,58706,52760],{"class":52449},[84,58708,54635],{"class":90},[84,58710,867],{"class":154},[84,58712,54640],{"class":158},[84,58714,52456],{"class":154},[84,58716,58717,58719,58721,58724,58726],{"class":86,"line":10936},[84,58718,52490],{"class":154},[84,58720,84],{"class":52449},[84,58722,58723],{"class":154},">名字是：\u003C\u002F",[84,58725,84],{"class":52449},[84,58727,52456],{"class":154},[84,58729,58730,58732,58734,58736,58738,58741,58744,58746],{"class":86,"line":10960},[84,58731,52490],{"class":154},[84,58733,52760],{"class":52449},[84,58735,54635],{"class":90},[84,58737,867],{"class":154},[84,58739,58740],{"class":158},"\"qs\"",[84,58742,58743],{"class":154},">这里显示姓名\u003C\u002F",[84,58745,52760],{"class":52449},[84,58747,52456],{"class":154},[84,58749,58750,58752,58754],{"class":86,"line":10965},[84,58751,53566],{"class":154},[84,58753,52760],{"class":52449},[84,58755,52456],{"class":154},[84,58757,58758,58760,58762,58764,58766,58769],{"class":86,"line":10970},[84,58759,53293],{"class":154},[84,58761,52760],{"class":52449},[84,58763,54635],{"class":90},[84,58765,867],{"class":154},[84,58767,58768],{"class":158},"\"btns\"",[84,58770,52456],{"class":154},[84,58772,58773,58775,58777,58779,58781,58784,58787,58789],{"class":86,"line":10975},[84,58774,52490],{"class":154},[84,58776,55036],{"class":52449},[84,58778,54635],{"class":90},[84,58780,867],{"class":154},[84,58782,58783],{"class":158},"\"start\"",[84,58785,58786],{"class":154},">开始\u003C\u002F",[84,58788,55036],{"class":52449},[84,58790,52456],{"class":154},[84,58792,58793,58795,58797,58799,58801,58804,58807,58809],{"class":86,"line":10984},[84,58794,52490],{"class":154},[84,58796,55036],{"class":52449},[84,58798,54635],{"class":90},[84,58800,867],{"class":154},[84,58802,58803],{"class":158},"\"end\"",[84,58805,58806],{"class":154},">结束\u003C\u002F",[84,58808,55036],{"class":52449},[84,58810,52456],{"class":154},[84,58812,58813,58815,58817],{"class":86,"line":10989},[84,58814,53566],{"class":154},[84,58816,52760],{"class":52449},[84,58818,52456],{"class":154},[84,58820,58821],{"class":86,"line":10995},[84,58822,3578],{"emptyLinePlaceholder":1252},[84,58824,58825,58827,58829],{"class":86,"line":11016},[84,58826,53293],{"class":154},[84,58828,52962],{"class":52449},[84,58830,52456],{"class":154},[84,58832,58833],{"class":86,"line":11022},[84,58834,58835],{"class":1378},"    \u002F\u002F 数据数组\n",[84,58837,58838,58840,58843,58845,58847,58850,58852,58855,58857,58860,58862,58865,58867,58870],{"class":86,"line":11036},[84,58839,12393],{"class":129},[84,58841,58842],{"class":94}," arr",[84,58844,14735],{"class":129},[84,58846,53375],{"class":154},[84,58848,58849],{"class":158},"'马超'",[84,58851,846],{"class":154},[84,58853,58854],{"class":158},"'黄忠'",[84,58856,846],{"class":154},[84,58858,58859],{"class":158},"'赵云'",[84,58861,846],{"class":154},[84,58863,58864],{"class":158},"'关羽'",[84,58866,846],{"class":154},[84,58868,58869],{"class":158},"'张飞'",[84,58871,34398],{"class":154},[84,58873,58874,58876,58879,58881,58883,58885,58887,58890],{"class":86,"line":11042},[84,58875,12393],{"class":129},[84,58877,58878],{"class":94}," qs",[84,58880,14735],{"class":129},[84,58882,55544],{"class":154},[84,58884,55547],{"class":90},[84,58886,155],{"class":154},[84,58888,58889],{"class":158},"'.qs'",[84,58891,162],{"class":154},[84,58893,58894],{"class":86,"line":11069},[84,58895,58896],{"class":1378},"    \u002F\u002F 1.业务1.开始按钮模块\n",[84,58898,58899,58901,58903,58905,58907,58909,58911,58914],{"class":86,"line":11078},[84,58900,12393],{"class":129},[84,58902,5362],{"class":94},[84,58904,14735],{"class":129},[84,58906,55544],{"class":154},[84,58908,55547],{"class":90},[84,58910,155],{"class":154},[84,58912,58913],{"class":158},"'.start'",[84,58915,162],{"class":154},[84,58917,58918],{"class":86,"line":11084},[84,58919,58920],{"class":1378},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[84,58922,58923,58925,58928,58930],{"class":86,"line":11092},[84,58924,53368],{"class":129},[84,58926,58927],{"class":154}," timerId ",[84,58929,867],{"class":129},[84,58931,48483],{"class":94},[84,58933,58934],{"class":86,"line":11097},[84,58935,58936],{"class":1378},"    \u002F\u002F 随机号要全局变量\n",[84,58938,58939,58941,58944,58946],{"class":86,"line":17774},[84,58940,53368],{"class":129},[84,58942,58943],{"class":154}," random ",[84,58945,867],{"class":129},[84,58947,48483],{"class":94},[84,58949,58950],{"class":86,"line":17780},[84,58951,58952],{"class":1378},"    \u002F\u002F 1.1 添加点击事件\n",[84,58954,58955,58958,58961,58963,58966,58968,58970],{"class":86,"line":17803},[84,58956,58957],{"class":154},"    start.",[84,58959,58960],{"class":90},"addEventListener",[84,58962,155],{"class":154},[84,58964,58965],{"class":158},"'click'",[84,58967,846],{"class":154},[84,58969,55596],{"class":129},[84,58971,55599],{"class":154},[84,58973,58974,58977,58979,58981,58983,58985],{"class":86,"line":17809},[84,58975,58976],{"class":154},"      timerId ",[84,58978,867],{"class":129},[84,58980,55591],{"class":90},[84,58982,155],{"class":154},[84,58984,55596],{"class":129},[84,58986,55599],{"class":154},[84,58988,58989],{"class":86,"line":17832},[84,58990,58991],{"class":1378},"        \u002F\u002F 随机数\n",[84,58993,58994,58997,58999,59002,59005,59007,59009,59011,59013,59015],{"class":86,"line":17846},[84,58995,58996],{"class":154},"        random ",[84,58998,867],{"class":129},[84,59000,59001],{"class":90}," parseInt",[84,59003,59004],{"class":154},"(Math.",[84,59006,51],{"class":90},[84,59008,14221],{"class":154},[84,59010,1043],{"class":129},[84,59012,53114],{"class":154},[84,59014,53117],{"class":94},[84,59016,162],{"class":154},[84,59018,59019,59022,59024],{"class":86,"line":17866},[84,59020,59021],{"class":154},"        qs.innerHTML ",[84,59023,867],{"class":129},[84,59025,59026],{"class":154}," arr[random]\n",[84,59028,59029,59032,59034],{"class":86,"line":17872},[84,59030,59031],{"class":154},"      }, ",[84,59033,1584],{"class":94},[84,59035,162],{"class":154},[84,59037,59038],{"class":86,"line":17883},[84,59039,59040],{"class":1378},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[84,59042,59043,59045,59048,59050,59053,59055],{"class":86,"line":17906},[84,59044,55627],{"class":129},[84,59046,59047],{"class":154}," (arr.",[84,59049,53117],{"class":94},[84,59051,59052],{"class":129}," ===",[84,59054,133],{"class":94},[84,59056,13613],{"class":154},[84,59058,59059],{"class":86,"line":17928},[84,59060,59061],{"class":1378},"        \u002F\u002F start.disabled = true\n",[84,59063,59064],{"class":86,"line":17933},[84,59065,59066],{"class":1378},"        \u002F\u002F end.disabled = true\n",[84,59068,59069],{"class":86,"line":17939},[84,59070,59071],{"class":1378},"        \u002F\u002F 可以合起来写\n",[84,59073,59074,59077,59079,59082,59084],{"class":86,"line":17953},[84,59075,59076],{"class":154},"        start.disabled ",[84,59078,867],{"class":129},[84,59080,59081],{"class":154}," end.disabled ",[84,59083,867],{"class":129},[84,59085,59086],{"class":94}," true\n",[84,59088,59089],{"class":86,"line":17966},[84,59090,53547],{"class":154},[84,59092,59093],{"class":86,"line":17971},[84,59094,34613],{"class":154},[84,59096,59097],{"class":86,"line":17985},[84,59098,59099],{"class":1378},"    \u002F\u002F 1.2 关闭按钮模块\n",[84,59101,59102,59104,59106,59108,59110,59112,59114,59117],{"class":86,"line":17990},[84,59103,12393],{"class":129},[84,59105,5378],{"class":94},[84,59107,14735],{"class":129},[84,59109,55544],{"class":154},[84,59111,55547],{"class":90},[84,59113,155],{"class":154},[84,59115,59116],{"class":158},"'.end'",[84,59118,162],{"class":154},[84,59120,59121,59124,59126,59128,59130,59132,59134],{"class":86,"line":17996},[84,59122,59123],{"class":154},"    end.",[84,59125,58960],{"class":90},[84,59127,155],{"class":154},[84,59129,58965],{"class":158},[84,59131,846],{"class":154},[84,59133,55596],{"class":129},[84,59135,55599],{"class":154},[84,59137,59138,59141],{"class":86,"line":18001},[84,59139,59140],{"class":90},"      clearInterval",[84,59142,59143],{"class":154},"(timerId)\n",[84,59145,59146],{"class":86,"line":18015},[84,59147,59148],{"class":1378},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[84,59150,59151,59154,59157,59160,59162],{"class":86,"line":18020},[84,59152,59153],{"class":154},"      arr.",[84,59155,59156],{"class":90},"splice",[84,59158,59159],{"class":154},"(random, ",[84,59161,1529],{"class":94},[84,59163,162],{"class":154},[84,59165,59166],{"class":86,"line":18025},[84,59167,34613],{"class":154},[84,59169,59170],{"class":86,"line":18039},[84,59171,3578],{"emptyLinePlaceholder":1252},[84,59173,59174,59176,59178],{"class":86,"line":18051},[84,59175,53566],{"class":154},[84,59177,52962],{"class":52449},[84,59179,52456],{"class":154},[84,59181,59182,59184,59186],{"class":86,"line":18056},[84,59183,52934],{"class":154},[84,59185,52949],{"class":52449},[84,59187,52456],{"class":154},[84,59189,59190],{"class":86,"line":18069},[84,59191,3578],{"emptyLinePlaceholder":1252},[84,59193,59194,59196,59198],{"class":86,"line":18074},[84,59195,52934],{"class":154},[84,59197,51784],{"class":52449},[84,59199,52456],{"class":154},[19,59201,59202],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[198,59204,59206],{"id":59205},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[60,59208,59210],{"className":51782,"code":59209,"language":51784,"meta":66,"style":66},"\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",[39,59211,59212,59222,59236,59240,59248,59262,59282,59294,59302,59306,59314,59326,59334,59353,59370,59386,59396,59400,59408,59416,59420],{"__ignoreMap":66},[84,59213,59214,59216,59218,59220],{"class":86,"line":87},[84,59215,52446],{"class":154},[84,59217,52450],{"class":52449},[84,59219,52453],{"class":90},[84,59221,52456],{"class":154},[84,59223,59224,59226,59228,59230,59232,59234],{"class":86,"line":98},[84,59225,2218],{"class":154},[84,59227,51784],{"class":52449},[84,59229,52465],{"class":90},[84,59231,867],{"class":154},[84,59233,52470],{"class":158},[84,59235,52456],{"class":154},[84,59237,59238],{"class":86,"line":106},[84,59239,3578],{"emptyLinePlaceholder":1252},[84,59241,59242,59244,59246],{"class":86,"line":112},[84,59243,2218],{"class":154},[84,59245,52483],{"class":52449},[84,59247,52456],{"class":154},[84,59249,59250,59252,59254,59256,59258,59260],{"class":86,"line":425},[84,59251,53293],{"class":154},[84,59253,52493],{"class":52449},[84,59255,52496],{"class":90},[84,59257,867],{"class":154},[84,59259,52501],{"class":158},[84,59261,52456],{"class":154},[84,59263,59264,59266,59268,59270,59272,59274,59276,59278,59280],{"class":86,"line":2395},[84,59265,53293],{"class":154},[84,59267,52493],{"class":52449},[84,59269,16090],{"class":90},[84,59271,867],{"class":154},[84,59273,52540],{"class":158},[84,59275,52520],{"class":90},[84,59277,867],{"class":154},[84,59279,52547],{"class":158},[84,59281,52456],{"class":154},[84,59283,59284,59286,59288,59290,59292],{"class":86,"line":2401},[84,59285,53293],{"class":154},[84,59287,52556],{"class":52449},[84,59289,52559],{"class":154},[84,59291,52556],{"class":52449},[84,59293,52456],{"class":154},[84,59295,59296,59298,59300],{"class":86,"line":2492},[84,59297,52934],{"class":154},[84,59299,52483],{"class":52449},[84,59301,52456],{"class":154},[84,59303,59304],{"class":86,"line":2498},[84,59305,3578],{"emptyLinePlaceholder":1252},[84,59307,59308,59310,59312],{"class":86,"line":2510},[84,59309,2218],{"class":154},[84,59311,52949],{"class":52449},[84,59313,52456],{"class":154},[84,59315,59316,59318,59320,59322,59324],{"class":86,"line":2793},[84,59317,53293],{"class":154},[84,59319,55036],{"class":52449},[84,59321,55042],{"class":154},[84,59323,55036],{"class":52449},[84,59325,52456],{"class":154},[84,59327,59328,59330,59332],{"class":86,"line":2798},[84,59329,53293],{"class":154},[84,59331,52962],{"class":52449},[84,59333,52456],{"class":154},[84,59335,59336,59338,59340,59342,59344,59346,59348,59351],{"class":86,"line":2804},[84,59337,12393],{"class":129},[84,59339,55539],{"class":94},[84,59341,14735],{"class":129},[84,59343,55544],{"class":154},[84,59345,55547],{"class":90},[84,59347,155],{"class":154},[84,59349,59350],{"class":158},"'button'",[84,59352,162],{"class":154},[84,59354,59355,59358,59360,59362,59364,59366,59368],{"class":86,"line":2809},[84,59356,59357],{"class":154},"    btn.",[84,59359,58960],{"class":90},[84,59361,155],{"class":154},[84,59363,58965],{"class":158},[84,59365,846],{"class":154},[84,59367,55596],{"class":129},[84,59369,55599],{"class":154},[84,59371,59372,59375,59377,59379,59382,59384],{"class":86,"line":2823},[84,59373,59374],{"class":129},"      const",[84,59376,3418],{"class":94},[84,59378,14735],{"class":129},[84,59380,59381],{"class":154}," Math.",[84,59383,51],{"class":90},[84,59385,183],{"class":154},[84,59387,59388,59391,59394],{"class":86,"line":2828},[84,59389,59390],{"class":154},"      console.",[84,59392,59393],{"class":90},"log",[84,59395,1336],{"class":154},[84,59397,59398],{"class":86,"line":2834},[84,59399,34613],{"class":154},[84,59401,59402,59404,59406],{"class":86,"line":2855},[84,59403,53566],{"class":154},[84,59405,52962],{"class":52449},[84,59407,52456],{"class":154},[84,59409,59410,59412,59414],{"class":86,"line":2860},[84,59411,52934],{"class":154},[84,59413,52949],{"class":52449},[84,59415,52456],{"class":154},[84,59417,59418],{"class":86,"line":2874},[84,59419,3578],{"emptyLinePlaceholder":1252},[84,59421,59422,59424,59426],{"class":86,"line":2879},[84,59423,52934],{"class":154},[84,59425,51784],{"class":52449},[84,59427,52456],{"class":154},[19,59429,59430],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59432,59433],{},"常量不可以重新赋值",[19,59435,59436],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[60,59438,59440],{"className":51782,"code":59439,"language":51784,"meta":66,"style":66},"\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",[39,59441,59442,59452,59466,59470,59478,59492,59512,59524,59532,59536,59544,59556,59564,59575,59593,59609,59623,59631,59635,59643,59651,59655],{"__ignoreMap":66},[84,59443,59444,59446,59448,59450],{"class":86,"line":87},[84,59445,52446],{"class":154},[84,59447,52450],{"class":52449},[84,59449,52453],{"class":90},[84,59451,52456],{"class":154},[84,59453,59454,59456,59458,59460,59462,59464],{"class":86,"line":98},[84,59455,2218],{"class":154},[84,59457,51784],{"class":52449},[84,59459,52465],{"class":90},[84,59461,867],{"class":154},[84,59463,52470],{"class":158},[84,59465,52456],{"class":154},[84,59467,59468],{"class":86,"line":106},[84,59469,3578],{"emptyLinePlaceholder":1252},[84,59471,59472,59474,59476],{"class":86,"line":112},[84,59473,2218],{"class":154},[84,59475,52483],{"class":52449},[84,59477,52456],{"class":154},[84,59479,59480,59482,59484,59486,59488,59490],{"class":86,"line":425},[84,59481,53293],{"class":154},[84,59483,52493],{"class":52449},[84,59485,52496],{"class":90},[84,59487,867],{"class":154},[84,59489,52501],{"class":158},[84,59491,52456],{"class":154},[84,59493,59494,59496,59498,59500,59502,59504,59506,59508,59510],{"class":86,"line":2395},[84,59495,53293],{"class":154},[84,59497,52493],{"class":52449},[84,59499,16090],{"class":90},[84,59501,867],{"class":154},[84,59503,52540],{"class":158},[84,59505,52520],{"class":90},[84,59507,867],{"class":154},[84,59509,52547],{"class":158},[84,59511,52456],{"class":154},[84,59513,59514,59516,59518,59520,59522],{"class":86,"line":2401},[84,59515,53293],{"class":154},[84,59517,52556],{"class":52449},[84,59519,52559],{"class":154},[84,59521,52556],{"class":52449},[84,59523,52456],{"class":154},[84,59525,59526,59528,59530],{"class":86,"line":2492},[84,59527,52934],{"class":154},[84,59529,52483],{"class":52449},[84,59531,52456],{"class":154},[84,59533,59534],{"class":86,"line":2498},[84,59535,3578],{"emptyLinePlaceholder":1252},[84,59537,59538,59540,59542],{"class":86,"line":2510},[84,59539,2218],{"class":154},[84,59541,52949],{"class":52449},[84,59543,52456],{"class":154},[84,59545,59546,59548,59550,59552,59554],{"class":86,"line":2793},[84,59547,53293],{"class":154},[84,59549,55036],{"class":52449},[84,59551,55042],{"class":154},[84,59553,55036],{"class":52449},[84,59555,52456],{"class":154},[84,59557,59558,59560,59562],{"class":86,"line":2798},[84,59559,53293],{"class":154},[84,59561,52962],{"class":52449},[84,59563,52456],{"class":154},[84,59565,59566,59568,59570,59572],{"class":86,"line":2804},[84,59567,12393],{"class":129},[84,59569,3418],{"class":94},[84,59571,14735],{"class":129},[84,59573,59574],{"class":94}," 10\n",[84,59576,59577,59579,59581,59583,59585,59587,59589,59591],{"class":86,"line":2809},[84,59578,12393],{"class":129},[84,59580,55539],{"class":94},[84,59582,14735],{"class":129},[84,59584,55544],{"class":154},[84,59586,55547],{"class":90},[84,59588,155],{"class":154},[84,59590,59350],{"class":158},[84,59592,162],{"class":154},[84,59594,59595,59597,59599,59601,59603,59605,59607],{"class":86,"line":2823},[84,59596,59357],{"class":154},[84,59598,58960],{"class":90},[84,59600,155],{"class":154},[84,59602,58965],{"class":158},[84,59604,846],{"class":154},[84,59606,55596],{"class":129},[84,59608,55599],{"class":154},[84,59610,59611,59613,59615,59617,59619,59621],{"class":86,"line":2828},[84,59612,59374],{"class":129},[84,59614,3418],{"class":94},[84,59616,14735],{"class":129},[84,59618,59381],{"class":154},[84,59620,51],{"class":90},[84,59622,183],{"class":154},[84,59624,59625,59627,59629],{"class":86,"line":2834},[84,59626,59390],{"class":154},[84,59628,59393],{"class":90},[84,59630,1336],{"class":154},[84,59632,59633],{"class":86,"line":2855},[84,59634,34613],{"class":154},[84,59636,59637,59639,59641],{"class":86,"line":2860},[84,59638,53566],{"class":154},[84,59640,52962],{"class":52449},[84,59642,52456],{"class":154},[84,59644,59645,59647,59649],{"class":86,"line":2874},[84,59646,52934],{"class":154},[84,59648,52949],{"class":52449},[84,59650,52456],{"class":154},[84,59652,59653],{"class":86,"line":2879},[84,59654,3578],{"emptyLinePlaceholder":1252},[84,59656,59657,59659,59661],{"class":86,"line":2908},[84,59658,52934],{"class":154},[84,59660,51784],{"class":52449},[84,59662,52456],{"class":154},[19,59664,59665],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[60,59667,59669],{"className":51782,"code":59668,"language":51784,"meta":66,"style":66},"\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",[39,59670,59671,59681,59695,59699,59707,59721,59741,59753,59761,59765,59773,59785,59793,59803,59821,59837,59850,59858,59862,59870,59878,59882],{"__ignoreMap":66},[84,59672,59673,59675,59677,59679],{"class":86,"line":87},[84,59674,52446],{"class":154},[84,59676,52450],{"class":52449},[84,59678,52453],{"class":90},[84,59680,52456],{"class":154},[84,59682,59683,59685,59687,59689,59691,59693],{"class":86,"line":98},[84,59684,2218],{"class":154},[84,59686,51784],{"class":52449},[84,59688,52465],{"class":90},[84,59690,867],{"class":154},[84,59692,52470],{"class":158},[84,59694,52456],{"class":154},[84,59696,59697],{"class":86,"line":106},[84,59698,3578],{"emptyLinePlaceholder":1252},[84,59700,59701,59703,59705],{"class":86,"line":112},[84,59702,2218],{"class":154},[84,59704,52483],{"class":52449},[84,59706,52456],{"class":154},[84,59708,59709,59711,59713,59715,59717,59719],{"class":86,"line":425},[84,59710,53293],{"class":154},[84,59712,52493],{"class":52449},[84,59714,52496],{"class":90},[84,59716,867],{"class":154},[84,59718,52501],{"class":158},[84,59720,52456],{"class":154},[84,59722,59723,59725,59727,59729,59731,59733,59735,59737,59739],{"class":86,"line":2395},[84,59724,53293],{"class":154},[84,59726,52493],{"class":52449},[84,59728,16090],{"class":90},[84,59730,867],{"class":154},[84,59732,52540],{"class":158},[84,59734,52520],{"class":90},[84,59736,867],{"class":154},[84,59738,52547],{"class":158},[84,59740,52456],{"class":154},[84,59742,59743,59745,59747,59749,59751],{"class":86,"line":2401},[84,59744,53293],{"class":154},[84,59746,52556],{"class":52449},[84,59748,52559],{"class":154},[84,59750,52556],{"class":52449},[84,59752,52456],{"class":154},[84,59754,59755,59757,59759],{"class":86,"line":2492},[84,59756,52934],{"class":154},[84,59758,52483],{"class":52449},[84,59760,52456],{"class":154},[84,59762,59763],{"class":86,"line":2498},[84,59764,3578],{"emptyLinePlaceholder":1252},[84,59766,59767,59769,59771],{"class":86,"line":2510},[84,59768,2218],{"class":154},[84,59770,52949],{"class":52449},[84,59772,52456],{"class":154},[84,59774,59775,59777,59779,59781,59783],{"class":86,"line":2793},[84,59776,53293],{"class":154},[84,59778,55036],{"class":52449},[84,59780,55042],{"class":154},[84,59782,55036],{"class":52449},[84,59784,52456],{"class":154},[84,59786,59787,59789,59791],{"class":86,"line":2798},[84,59788,53293],{"class":154},[84,59790,52962],{"class":52449},[84,59792,52456],{"class":154},[84,59794,59795,59797,59799,59801],{"class":86,"line":2804},[84,59796,12393],{"class":129},[84,59798,3418],{"class":94},[84,59800,14735],{"class":129},[84,59802,59574],{"class":94},[84,59804,59805,59807,59809,59811,59813,59815,59817,59819],{"class":86,"line":2809},[84,59806,12393],{"class":129},[84,59808,55539],{"class":94},[84,59810,14735],{"class":129},[84,59812,55544],{"class":154},[84,59814,55547],{"class":90},[84,59816,155],{"class":154},[84,59818,59350],{"class":158},[84,59820,162],{"class":154},[84,59822,59823,59825,59827,59829,59831,59833,59835],{"class":86,"line":2823},[84,59824,59357],{"class":154},[84,59826,58960],{"class":90},[84,59828,155],{"class":154},[84,59830,58965],{"class":158},[84,59832,846],{"class":154},[84,59834,55596],{"class":129},[84,59836,55599],{"class":154},[84,59838,59839,59842,59844,59846,59848],{"class":86,"line":2828},[84,59840,59841],{"class":154},"      num ",[84,59843,867],{"class":129},[84,59845,59381],{"class":154},[84,59847,51],{"class":90},[84,59849,183],{"class":154},[84,59851,59852,59854,59856],{"class":86,"line":2834},[84,59853,59390],{"class":154},[84,59855,59393],{"class":90},[84,59857,1336],{"class":154},[84,59859,59860],{"class":86,"line":2855},[84,59861,34613],{"class":154},[84,59863,59864,59866,59868],{"class":86,"line":2860},[84,59865,53566],{"class":154},[84,59867,52962],{"class":52449},[84,59869,52456],{"class":154},[84,59871,59872,59874,59876],{"class":86,"line":2874},[84,59873,52934],{"class":154},[84,59875,52949],{"class":52449},[84,59877,52456],{"class":154},[84,59879,59880],{"class":86,"line":2879},[84,59881,3578],{"emptyLinePlaceholder":1252},[84,59883,59884,59886,59888],{"class":86,"line":2908},[84,59885,52934],{"class":154},[84,59887,51784],{"class":52449},[84,59889,52456],{"class":154},[19,59891,59892],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[198,59894,59896],{"id":59895},"_324-事件监听版本","3.2.4 事件监听版本",[19,59898,59899],{},[2643,59900],{"alt":66,"src":59901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59903,59904],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59906,59907],{},"这种方式会覆盖前边的事件监听:",[60,59909,59911],{"className":51782,"code":59910,"language":51784,"meta":66,"style":66},"\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",[39,59912,59913,59923,59937,59941,59949,59963,59983,59995,60003,60007,60015,60027,60035,60053,60067,60078,60082,60094,60104,60108,60116,60124,60128],{"__ignoreMap":66},[84,59914,59915,59917,59919,59921],{"class":86,"line":87},[84,59916,52446],{"class":154},[84,59918,52450],{"class":52449},[84,59920,52453],{"class":90},[84,59922,52456],{"class":154},[84,59924,59925,59927,59929,59931,59933,59935],{"class":86,"line":98},[84,59926,2218],{"class":154},[84,59928,51784],{"class":52449},[84,59930,52465],{"class":90},[84,59932,867],{"class":154},[84,59934,52470],{"class":158},[84,59936,52456],{"class":154},[84,59938,59939],{"class":86,"line":106},[84,59940,3578],{"emptyLinePlaceholder":1252},[84,59942,59943,59945,59947],{"class":86,"line":112},[84,59944,2218],{"class":154},[84,59946,52483],{"class":52449},[84,59948,52456],{"class":154},[84,59950,59951,59953,59955,59957,59959,59961],{"class":86,"line":425},[84,59952,53293],{"class":154},[84,59954,52493],{"class":52449},[84,59956,52496],{"class":90},[84,59958,867],{"class":154},[84,59960,52501],{"class":158},[84,59962,52456],{"class":154},[84,59964,59965,59967,59969,59971,59973,59975,59977,59979,59981],{"class":86,"line":2395},[84,59966,53293],{"class":154},[84,59968,52493],{"class":52449},[84,59970,16090],{"class":90},[84,59972,867],{"class":154},[84,59974,52540],{"class":158},[84,59976,52520],{"class":90},[84,59978,867],{"class":154},[84,59980,52547],{"class":158},[84,59982,52456],{"class":154},[84,59984,59985,59987,59989,59991,59993],{"class":86,"line":2401},[84,59986,53293],{"class":154},[84,59988,52556],{"class":52449},[84,59990,52559],{"class":154},[84,59992,52556],{"class":52449},[84,59994,52456],{"class":154},[84,59996,59997,59999,60001],{"class":86,"line":2492},[84,59998,52934],{"class":154},[84,60000,52483],{"class":52449},[84,60002,52456],{"class":154},[84,60004,60005],{"class":86,"line":2498},[84,60006,3578],{"emptyLinePlaceholder":1252},[84,60008,60009,60011,60013],{"class":86,"line":2510},[84,60010,2218],{"class":154},[84,60012,52949],{"class":52449},[84,60014,52456],{"class":154},[84,60016,60017,60019,60021,60023,60025],{"class":86,"line":2793},[84,60018,53293],{"class":154},[84,60020,55036],{"class":52449},[84,60022,55042],{"class":154},[84,60024,55036],{"class":52449},[84,60026,52456],{"class":154},[84,60028,60029,60031,60033],{"class":86,"line":2798},[84,60030,53293],{"class":154},[84,60032,52962],{"class":52449},[84,60034,52456],{"class":154},[84,60036,60037,60039,60041,60043,60045,60047,60049,60051],{"class":86,"line":2804},[84,60038,12393],{"class":129},[84,60040,55539],{"class":94},[84,60042,14735],{"class":129},[84,60044,55544],{"class":154},[84,60046,55547],{"class":90},[84,60048,155],{"class":154},[84,60050,59350],{"class":158},[84,60052,162],{"class":154},[84,60054,60055,60057,60060,60062,60065],{"class":86,"line":2809},[84,60056,59357],{"class":154},[84,60058,60059],{"class":90},"onclick",[84,60061,14735],{"class":129},[84,60063,60064],{"class":129}," function",[84,60066,55599],{"class":154},[84,60068,60069,60072,60074,60076],{"class":86,"line":2823},[84,60070,60071],{"class":90},"      alert",[84,60073,155],{"class":154},[84,60075,1781],{"class":94},[84,60077,162],{"class":154},[84,60079,60080],{"class":86,"line":2828},[84,60081,3365],{"class":154},[84,60083,60084,60086,60088,60090,60092],{"class":86,"line":2834},[84,60085,59357],{"class":154},[84,60087,60059],{"class":90},[84,60089,14735],{"class":129},[84,60091,60064],{"class":129},[84,60093,55599],{"class":154},[84,60095,60096,60098,60100,60102],{"class":86,"line":2855},[84,60097,60071],{"class":90},[84,60099,155],{"class":154},[84,60101,2058],{"class":94},[84,60103,162],{"class":154},[84,60105,60106],{"class":86,"line":2860},[84,60107,3365],{"class":154},[84,60109,60110,60112,60114],{"class":86,"line":2874},[84,60111,53566],{"class":154},[84,60113,52962],{"class":52449},[84,60115,52456],{"class":154},[84,60117,60118,60120,60122],{"class":86,"line":2879},[84,60119,52934],{"class":154},[84,60121,52949],{"class":52449},[84,60123,52456],{"class":154},[84,60125,60126],{"class":86,"line":2908},[84,60127,3578],{"emptyLinePlaceholder":1252},[84,60129,60130,60132,60134],{"class":86,"line":2913},[84,60131,52934],{"class":154},[84,60133,51784],{"class":52449},[84,60135,52456],{"class":154},[19,60137,60138],{},"只要点击就输出结果为22,前边11被覆盖了",[60,60140,60142],{"className":51782,"code":60141,"language":51784,"meta":66,"style":66},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[39,60143,60144,60149,60154,60158,60163,60168],{"__ignoreMap":66},[84,60145,60146],{"class":86,"line":87},[84,60147,60148],{"class":154},"  btn.addEventListener('click', function () {\n",[84,60150,60151],{"class":86,"line":98},[84,60152,60153],{"class":154},"      alert(11)\n",[84,60155,60156],{"class":86,"line":106},[84,60157,34613],{"class":154},[84,60159,60160],{"class":86,"line":112},[84,60161,60162],{"class":154},"    btn.addEventListener('click', function () {\n",[84,60164,60165],{"class":86,"line":425},[84,60166,60167],{"class":154},"      alert(22)\n",[84,60169,60170],{"class":86,"line":2395},[84,60171,34613],{"class":154},[19,60173,60174],{},"点击第一次输出11,第二次点击为22",[198,60176,60178],{"id":60177},"_325-事件类型","3.2.5 事件类型",[19,60180,60181],{},[2643,60182],{"alt":66,"src":60183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23168,60185,60187],{"id":60186},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60189,60190],{},"补充知识:",[19,60192,60193],{},"轮播图自动播放模块,可以使用",[19,60195,60196],{},"let timerId = setInterval(function () {",[19,60198,60199],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60201,60202],{},"用js方法模拟进行点击事件,click必须加()",[19,60204,60205],{},"next.click()",[19,60207,60208],{},"}, 1000)",[19,60210,60211],{},[2643,60212],{"alt":66,"src":60213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[60,60215,60217],{"className":54216,"code":60216,"language":54218,"meta":66,"style":66},"\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",[39,60218,60219,60223,60233,60247,60251,60259,60274,60294,60314,60327,60335,60340,60345,60349,60353,60358,60363,60368,60373,60377,60381,60386,60391,60396,60400,60404,60409,60413,60418,60423,60427,60431,60436,60441,60446,60451,60456,60460,60464,60469,60474,60479,60484,60489,60493,60497,60502,60507,60512,60517,60522,60527,60532,60537,60542,60547,60551,60555,60560,60565,60569,60573,60578,60583,60587,60592,60597,60601,60605,60610,60614,60619,60624,60628,60633,60637,60641,60646,60651,60656,60661,60666,60671,60676,60680,60684,60688,60693,60698,60703,60708,60712,60720,60728,60732,60740,60755,60769,60790,60798,60812,60825,60840,60859,60871,60883,60895,60907,60919,60931,60943,60951,60966,60990,61014,61022,61030,61038,61046,61051,61056,61061,61066,61071,61076,61081,61086,61091,61096,61100,61105,61110,61115,61120,61125,61130,61135,61140,61145,61149,61154,61159,61164,61169,61174,61179,61184,61189,61194,61199,61204,61209,61213,61217,61222,61227,61232,61236,61241,61246,61251,61256,61261,61265,61270,61274,61278,61282,61286,61290,61294,61299,61304,61309,61314,61319,61324,61329,61334,61339,61343,61347,61352,61357,61362,61367,61372,61376,61381,61386,61391,61396,61401,61406,61410,61414,61419,61423,61428,61432,61437,61442,61447,61452,61457,61462,61466,61474,61482,61486],{"__ignoreMap":66},[84,60220,60221],{"class":86,"line":87},[84,60222,3578],{"emptyLinePlaceholder":1252},[84,60224,60225,60227,60229,60231],{"class":86,"line":98},[84,60226,52446],{"class":154},[84,60228,52450],{"class":129},[84,60230,52453],{"class":94},[84,60232,52456],{"class":154},[84,60234,60235,60237,60239,60241,60243,60245],{"class":86,"line":106},[84,60236,2218],{"class":154},[84,60238,51784],{"class":52449},[84,60240,52465],{"class":90},[84,60242,867],{"class":154},[84,60244,52470],{"class":158},[84,60246,52456],{"class":154},[84,60248,60249],{"class":86,"line":112},[84,60250,3578],{"emptyLinePlaceholder":1252},[84,60252,60253,60255,60257],{"class":86,"line":425},[84,60254,2218],{"class":154},[84,60256,52483],{"class":52449},[84,60258,52456],{"class":154},[84,60260,60261,60263,60265,60267,60269,60271],{"class":86,"line":2395},[84,60262,53293],{"class":154},[84,60264,52493],{"class":52449},[84,60266,52496],{"class":90},[84,60268,867],{"class":154},[84,60270,52501],{"class":158},[84,60272,60273],{"class":154}," \u002F>\n",[84,60275,60276,60278,60280,60282,60284,60286,60288,60290,60292],{"class":86,"line":2401},[84,60277,53293],{"class":154},[84,60279,52493],{"class":52449},[84,60281,52512],{"class":90},[84,60283,867],{"class":154},[84,60285,52517],{"class":158},[84,60287,52520],{"class":90},[84,60289,867],{"class":154},[84,60291,52525],{"class":158},[84,60293,60273],{"class":154},[84,60295,60296,60298,60300,60302,60304,60306,60308,60310,60312],{"class":86,"line":2492},[84,60297,53293],{"class":154},[84,60299,52493],{"class":52449},[84,60301,16090],{"class":90},[84,60303,867],{"class":154},[84,60305,52540],{"class":158},[84,60307,52520],{"class":90},[84,60309,867],{"class":154},[84,60311,52547],{"class":158},[84,60313,60273],{"class":154},[84,60315,60316,60318,60320,60323,60325],{"class":86,"line":2498},[84,60317,53293],{"class":154},[84,60319,52556],{"class":52449},[84,60321,60322],{"class":154},">轮播图点击切换\u003C\u002F",[84,60324,52556],{"class":52449},[84,60326,52456],{"class":154},[84,60328,60329,60331,60333],{"class":86,"line":2510},[84,60330,53293],{"class":154},[84,60332,1222],{"class":52449},[84,60334,52456],{"class":154},[84,60336,60337],{"class":86,"line":2793},[84,60338,60339],{"class":154},"    * {\n",[84,60341,60342],{"class":86,"line":2798},[84,60343,60344],{"class":154},"      box-sizing: border-box;\n",[84,60346,60347],{"class":86,"line":2804},[84,60348,3365],{"class":154},[84,60350,60351],{"class":86,"line":2809},[84,60352,3578],{"emptyLinePlaceholder":1252},[84,60354,60355],{"class":86,"line":2823},[84,60356,60357],{"class":154},"    .slider {\n",[84,60359,60360],{"class":86,"line":2828},[84,60361,60362],{"class":154},"      width: 560px;\n",[84,60364,60365],{"class":86,"line":2834},[84,60366,60367],{"class":154},"      height: 400px;\n",[84,60369,60370],{"class":86,"line":2855},[84,60371,60372],{"class":154},"      overflow: hidden;\n",[84,60374,60375],{"class":86,"line":2860},[84,60376,3365],{"class":154},[84,60378,60379],{"class":86,"line":2874},[84,60380,3578],{"emptyLinePlaceholder":1252},[84,60382,60383],{"class":86,"line":2879},[84,60384,60385],{"class":154},"    .slider-wrapper {\n",[84,60387,60388],{"class":86,"line":2908},[84,60389,60390],{"class":154},"      width: 100%;\n",[84,60392,60393],{"class":86,"line":2913},[84,60394,60395],{"class":154},"      height: 320px;\n",[84,60397,60398],{"class":86,"line":2930},[84,60399,3365],{"class":154},[84,60401,60402],{"class":86,"line":2935},[84,60403,3578],{"emptyLinePlaceholder":1252},[84,60405,60406],{"class":86,"line":2940},[84,60407,60408],{"class":154},"    .slider-wrapper img {\n",[84,60410,60411],{"class":86,"line":2945},[84,60412,60390],{"class":154},[84,60414,60415],{"class":86,"line":2959},[84,60416,60417],{"class":154},"      height: 100%;\n",[84,60419,60420],{"class":86,"line":2964},[84,60421,60422],{"class":154},"      display: block;\n",[84,60424,60425],{"class":86,"line":3755},[84,60426,3365],{"class":154},[84,60428,60429],{"class":86,"line":3769},[84,60430,3578],{"emptyLinePlaceholder":1252},[84,60432,60433],{"class":86,"line":3777},[84,60434,60435],{"class":154},"    .slider-footer {\n",[84,60437,60438],{"class":86,"line":3782},[84,60439,60440],{"class":154},"      height: 80px;\n",[84,60442,60443],{"class":86,"line":3788},[84,60444,60445],{"class":154},"      background-color: rgb(100, 67, 68);\n",[84,60447,60448],{"class":86,"line":3794},[84,60449,60450],{"class":154},"      padding: 12px 12px 0 12px;\n",[84,60452,60453],{"class":86,"line":3799},[84,60454,60455],{"class":154},"      position: relative;\n",[84,60457,60458],{"class":86,"line":9120},[84,60459,3365],{"class":154},[84,60461,60462],{"class":86,"line":9144},[84,60463,3578],{"emptyLinePlaceholder":1252},[84,60465,60466],{"class":86,"line":9149},[84,60467,60468],{"class":154},"    .slider-footer .toggle {\n",[84,60470,60471],{"class":86,"line":9155},[84,60472,60473],{"class":154},"      position: absolute;\n",[84,60475,60476],{"class":86,"line":9182},[84,60477,60478],{"class":154},"      right: 0;\n",[84,60480,60481],{"class":86,"line":9187},[84,60482,60483],{"class":154},"      top: 12px;\n",[84,60485,60486],{"class":86,"line":9193},[84,60487,60488],{"class":154},"      display: flex;\n",[84,60490,60491],{"class":86,"line":9205},[84,60492,3365],{"class":154},[84,60494,60495],{"class":86,"line":9217},[84,60496,3578],{"emptyLinePlaceholder":1252},[84,60498,60499],{"class":86,"line":9229},[84,60500,60501],{"class":154},"    .slider-footer .toggle button {\n",[84,60503,60504],{"class":86,"line":10888},[84,60505,60506],{"class":154},"      margin-right: 12px;\n",[84,60508,60509],{"class":86,"line":10913},[84,60510,60511],{"class":154},"      width: 28px;\n",[84,60513,60514],{"class":86,"line":10936},[84,60515,60516],{"class":154},"      height: 28px;\n",[84,60518,60519],{"class":86,"line":10960},[84,60520,60521],{"class":154},"      appearance: none;\n",[84,60523,60524],{"class":86,"line":10965},[84,60525,60526],{"class":154},"      border: none;\n",[84,60528,60529],{"class":86,"line":10970},[84,60530,60531],{"class":154},"      background: rgba(255, 255, 255, 0.1);\n",[84,60533,60534],{"class":86,"line":10975},[84,60535,60536],{"class":154},"      color: #fff;\n",[84,60538,60539],{"class":86,"line":10984},[84,60540,60541],{"class":154},"      border-radius: 4px;\n",[84,60543,60544],{"class":86,"line":10989},[84,60545,60546],{"class":154},"      cursor: pointer;\n",[84,60548,60549],{"class":86,"line":10995},[84,60550,3365],{"class":154},[84,60552,60553],{"class":86,"line":11016},[84,60554,3578],{"emptyLinePlaceholder":1252},[84,60556,60557],{"class":86,"line":11022},[84,60558,60559],{"class":154},"    .slider-footer .toggle button:hover {\n",[84,60561,60562],{"class":86,"line":11036},[84,60563,60564],{"class":154},"      background: rgba(255, 255, 255, 0.2);\n",[84,60566,60567],{"class":86,"line":11042},[84,60568,3365],{"class":154},[84,60570,60571],{"class":86,"line":11069},[84,60572,3578],{"emptyLinePlaceholder":1252},[84,60574,60575],{"class":86,"line":11078},[84,60576,60577],{"class":154},"    .slider-footer p {\n",[84,60579,60580],{"class":86,"line":11084},[84,60581,60582],{"class":154},"      margin: 0;\n",[84,60584,60585],{"class":86,"line":11092},[84,60586,60536],{"class":154},[84,60588,60589],{"class":86,"line":11097},[84,60590,60591],{"class":154},"      font-size: 18px;\n",[84,60593,60594],{"class":86,"line":17774},[84,60595,60596],{"class":154},"      margin-bottom: 10px;\n",[84,60598,60599],{"class":86,"line":17780},[84,60600,3365],{"class":154},[84,60602,60603],{"class":86,"line":17803},[84,60604,3578],{"emptyLinePlaceholder":1252},[84,60606,60607],{"class":86,"line":17809},[84,60608,60609],{"class":154},"    .slider-indicator {\n",[84,60611,60612],{"class":86,"line":17832},[84,60613,60582],{"class":154},[84,60615,60616],{"class":86,"line":17846},[84,60617,60618],{"class":154},"      padding: 0;\n",[84,60620,60621],{"class":86,"line":17866},[84,60622,60623],{"class":154},"      list-style: none;\n",[84,60625,60626],{"class":86,"line":17872},[84,60627,60488],{"class":154},[84,60629,60630],{"class":86,"line":17883},[84,60631,60632],{"class":154},"      align-items: center;\n",[84,60634,60635],{"class":86,"line":17906},[84,60636,3365],{"class":154},[84,60638,60639],{"class":86,"line":17928},[84,60640,3578],{"emptyLinePlaceholder":1252},[84,60642,60643],{"class":86,"line":17933},[84,60644,60645],{"class":154},"    .slider-indicator li {\n",[84,60647,60648],{"class":86,"line":17939},[84,60649,60650],{"class":154},"      width: 8px;\n",[84,60652,60653],{"class":86,"line":17953},[84,60654,60655],{"class":154},"      height: 8px;\n",[84,60657,60658],{"class":86,"line":17966},[84,60659,60660],{"class":154},"      margin: 4px;\n",[84,60662,60663],{"class":86,"line":17971},[84,60664,60665],{"class":154},"      border-radius: 50%;\n",[84,60667,60668],{"class":86,"line":17985},[84,60669,60670],{"class":154},"      background: #fff;\n",[84,60672,60673],{"class":86,"line":17990},[84,60674,60675],{"class":154},"      opacity: 0.4;\n",[84,60677,60678],{"class":86,"line":17996},[84,60679,60546],{"class":154},[84,60681,60682],{"class":86,"line":18001},[84,60683,3365],{"class":154},[84,60685,60686],{"class":86,"line":18015},[84,60687,3578],{"emptyLinePlaceholder":1252},[84,60689,60690],{"class":86,"line":18020},[84,60691,60692],{"class":154},"    .slider-indicator li.active {\n",[84,60694,60695],{"class":86,"line":18025},[84,60696,60697],{"class":154},"      width: 12px;\n",[84,60699,60700],{"class":86,"line":18039},[84,60701,60702],{"class":154},"      height: 12px;\n",[84,60704,60705],{"class":86,"line":18051},[84,60706,60707],{"class":154},"      opacity: 1;\n",[84,60709,60710],{"class":86,"line":18056},[84,60711,3365],{"class":154},[84,60713,60714,60716,60718],{"class":86,"line":18069},[84,60715,53566],{"class":154},[84,60717,1222],{"class":52449},[84,60719,52456],{"class":154},[84,60721,60722,60724,60726],{"class":86,"line":18074},[84,60723,52934],{"class":154},[84,60725,52483],{"class":52449},[84,60727,52456],{"class":154},[84,60729,60730],{"class":86,"line":18079},[84,60731,3578],{"emptyLinePlaceholder":1252},[84,60733,60734,60736,60738],{"class":86,"line":18084},[84,60735,2218],{"class":154},[84,60737,52949],{"class":52449},[84,60739,52456],{"class":154},[84,60741,60742,60744,60746,60748,60750,60753],{"class":86,"line":18097},[84,60743,53293],{"class":154},[84,60745,52760],{"class":52449},[84,60747,54635],{"class":90},[84,60749,867],{"class":154},[84,60751,60752],{"class":158},"\"slider\"",[84,60754,52456],{"class":154},[84,60756,60757,60759,60761,60763,60765,60767],{"class":86,"line":18102},[84,60758,52490],{"class":154},[84,60760,52760],{"class":52449},[84,60762,54635],{"class":90},[84,60764,867],{"class":154},[84,60766,56374],{"class":158},[84,60768,52456],{"class":154},[84,60770,60771,60773,60775,60777,60779,60782,60784,60786,60788],{"class":86,"line":33785},[84,60772,56381],{"class":154},[84,60774,2643],{"class":52449},[84,60776,56386],{"class":90},[84,60778,867],{"class":154},[84,60780,60781],{"class":158},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[84,60783,56394],{"class":90},[84,60785,867],{"class":154},[84,60787,8824],{"class":158},[84,60789,60273],{"class":154},[84,60791,60792,60794,60796],{"class":86,"line":33791},[84,60793,52925],{"class":154},[84,60795,52760],{"class":52449},[84,60797,52456],{"class":154},[84,60799,60800,60802,60804,60806,60808,60810],{"class":86,"line":33797},[84,60801,52490],{"class":154},[84,60803,52760],{"class":52449},[84,60805,54635],{"class":90},[84,60807,867],{"class":154},[84,60809,56421],{"class":158},[84,60811,52456],{"class":154},[84,60813,60814,60816,60818,60821,60823],{"class":86,"line":33803},[84,60815,56381],{"class":154},[84,60817,19],{"class":52449},[84,60819,60820],{"class":154},">对人类来说会不会太超前了？\u003C\u002F",[84,60822,19],{"class":52449},[84,60824,52456],{"class":154},[84,60826,60827,60829,60831,60833,60835,60838],{"class":86,"line":33809},[84,60828,56381],{"class":154},[84,60830,2315],{"class":52449},[84,60832,54635],{"class":90},[84,60834,867],{"class":154},[84,60836,60837],{"class":158},"\"slider-indicator\"",[84,60839,52456],{"class":154},[84,60841,60842,60844,60846,60848,60850,60853,60855,60857],{"class":86,"line":33820},[84,60843,56449],{"class":154},[84,60845,29],{"class":52449},[84,60847,54635],{"class":90},[84,60849,867],{"class":154},[84,60851,60852],{"class":158},"\"active\"",[84,60854,56461],{"class":154},[84,60856,29],{"class":52449},[84,60858,52456],{"class":154},[84,60860,60861,60863,60865,60867,60869],{"class":86,"line":33826},[84,60862,56449],{"class":154},[84,60864,29],{"class":52449},[84,60866,56461],{"class":154},[84,60868,29],{"class":52449},[84,60870,52456],{"class":154},[84,60872,60873,60875,60877,60879,60881],{"class":86,"line":33846},[84,60874,56449],{"class":154},[84,60876,29],{"class":52449},[84,60878,56461],{"class":154},[84,60880,29],{"class":52449},[84,60882,52456],{"class":154},[84,60884,60885,60887,60889,60891,60893],{"class":86,"line":33852},[84,60886,56449],{"class":154},[84,60888,29],{"class":52449},[84,60890,56461],{"class":154},[84,60892,29],{"class":52449},[84,60894,52456],{"class":154},[84,60896,60897,60899,60901,60903,60905],{"class":86,"line":33863},[84,60898,56449],{"class":154},[84,60900,29],{"class":52449},[84,60902,56461],{"class":154},[84,60904,29],{"class":52449},[84,60906,52456],{"class":154},[84,60908,60909,60911,60913,60915,60917],{"class":86,"line":33869},[84,60910,56449],{"class":154},[84,60912,29],{"class":52449},[84,60914,56461],{"class":154},[84,60916,29],{"class":52449},[84,60918,52456],{"class":154},[84,60920,60921,60923,60925,60927,60929],{"class":86,"line":33875},[84,60922,56449],{"class":154},[84,60924,29],{"class":52449},[84,60926,56461],{"class":154},[84,60928,29],{"class":52449},[84,60930,52456],{"class":154},[84,60932,60933,60935,60937,60939,60941],{"class":86,"line":33881},[84,60934,56449],{"class":154},[84,60936,29],{"class":52449},[84,60938,56461],{"class":154},[84,60940,29],{"class":52449},[84,60942,52456],{"class":154},[84,60944,60945,60947,60949],{"class":86,"line":33887},[84,60946,56554],{"class":154},[84,60948,2315],{"class":52449},[84,60950,52456],{"class":154},[84,60952,60953,60955,60957,60959,60961,60964],{"class":86,"line":33893},[84,60954,56381],{"class":154},[84,60956,52760],{"class":52449},[84,60958,54635],{"class":90},[84,60960,867],{"class":154},[84,60962,60963],{"class":158},"\"toggle\"",[84,60965,52456],{"class":154},[84,60967,60968,60970,60972,60974,60976,60979,60981,60984,60986,60988],{"class":86,"line":33899},[84,60969,56449],{"class":154},[84,60971,55036],{"class":52449},[84,60973,54635],{"class":90},[84,60975,867],{"class":154},[84,60977,60978],{"class":158},"\"prev\"",[84,60980,2268],{"class":154},[84,60982,60983],{"class":94},"&lt;",[84,60985,52934],{"class":154},[84,60987,55036],{"class":52449},[84,60989,52456],{"class":154},[84,60991,60992,60994,60996,60998,61000,61003,61005,61008,61010,61012],{"class":86,"line":33905},[84,60993,56449],{"class":154},[84,60995,55036],{"class":52449},[84,60997,54635],{"class":90},[84,60999,867],{"class":154},[84,61001,61002],{"class":158},"\"next\"",[84,61004,2268],{"class":154},[84,61006,61007],{"class":94},"&gt;",[84,61009,52934],{"class":154},[84,61011,55036],{"class":52449},[84,61013,52456],{"class":154},[84,61015,61016,61018,61020],{"class":86,"line":33925},[84,61017,56554],{"class":154},[84,61019,52760],{"class":52449},[84,61021,52456],{"class":154},[84,61023,61024,61026,61028],{"class":86,"line":33931},[84,61025,52925],{"class":154},[84,61027,52760],{"class":52449},[84,61029,52456],{"class":154},[84,61031,61032,61034,61036],{"class":86,"line":33947},[84,61033,53566],{"class":154},[84,61035,52760],{"class":52449},[84,61037,52456],{"class":154},[84,61039,61040,61042,61044],{"class":86,"line":33953},[84,61041,53293],{"class":154},[84,61043,52962],{"class":52449},[84,61045,52456],{"class":154},[84,61047,61048],{"class":86,"line":33967},[84,61049,61050],{"class":154},"    \u002F\u002F 1. 初始数据\n",[84,61052,61053],{"class":86,"line":33973},[84,61054,61055],{"class":154},"    const data = [\n",[84,61057,61058],{"class":86,"line":33988},[84,61059,61060],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[84,61062,61063],{"class":86,"line":33994},[84,61064,61065],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[84,61067,61068],{"class":86,"line":34003},[84,61069,61070],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[84,61072,61073],{"class":86,"line":34009},[84,61074,61075],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[84,61077,61078],{"class":86,"line":34018},[84,61079,61080],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[84,61082,61083],{"class":86,"line":34024},[84,61084,61085],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[84,61087,61088],{"class":86,"line":34030},[84,61089,61090],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[84,61092,61093],{"class":86,"line":34039},[84,61094,61095],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[84,61097,61098],{"class":86,"line":34045},[84,61099,54258],{"class":154},[84,61101,61102],{"class":86,"line":34056},[84,61103,61104],{"class":154},"    \u002F\u002F 获取元素\n",[84,61106,61107],{"class":86,"line":34062},[84,61108,61109],{"class":154},"    const img = document.querySelector('.slider-wrapper img')\n",[84,61111,61112],{"class":86,"line":34081},[84,61113,61114],{"class":154},"    const p = document.querySelector('.slider-footer p')\n",[84,61116,61117],{"class":86,"line":34087},[84,61118,61119],{"class":154},"    const footer = document.querySelector('.slider-footer')\n",[84,61121,61122],{"class":86,"line":34098},[84,61123,61124],{"class":154},"    \u002F\u002F 1. 右按钮业务\n",[84,61126,61127],{"class":86,"line":34104},[84,61128,61129],{"class":154},"    \u002F\u002F 1.1 获取右侧按钮 \n",[84,61131,61132],{"class":86,"line":34124},[84,61133,61134],{"class":154},"    const next = document.querySelector('.next')\n",[84,61136,61137],{"class":86,"line":34140},[84,61138,61139],{"class":154},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[84,61141,61142],{"class":86,"line":34146},[84,61143,61144],{"class":154},"    \u002F\u002F 1.2 注册点击事件\n",[84,61146,61147],{"class":86,"line":34160},[84,61148,3578],{"emptyLinePlaceholder":1252},[84,61150,61151],{"class":86,"line":34166},[84,61152,61153],{"class":154},"    next.addEventListener('click', function () {\n",[84,61155,61156],{"class":86,"line":34172},[84,61157,61158],{"class":154},"      \u002F\u002F console.log(11)\n",[84,61160,61161],{"class":86,"line":34183},[84,61162,61163],{"class":154},"      i++\n",[84,61165,61166],{"class":86,"line":34189},[84,61167,61168],{"class":154},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[84,61170,61171],{"class":86,"line":34195},[84,61172,61173],{"class":154},"      \u002F\u002F if (i >= 8) {\n",[84,61175,61176],{"class":86,"line":34205},[84,61177,61178],{"class":154},"      \u002F\u002F   i = 0\n",[84,61180,61181],{"class":86,"line":34211},[84,61182,61183],{"class":154},"      \u002F\u002F }\n",[84,61185,61186],{"class":86,"line":34222},[84,61187,61188],{"class":154},"      i = i >= data.length ? 0 : i\n",[84,61190,61191],{"class":86,"line":34228},[84,61192,61193],{"class":154},"      \u002F\u002F 1.3 得到对应的对象\n",[84,61195,61196],{"class":86,"line":34238},[84,61197,61198],{"class":154},"      \u002F\u002F console.log(data[i])\n",[84,61200,61201],{"class":86,"line":34243},[84,61202,61203],{"class":154},"      \u002F\u002F 调用函数\n",[84,61205,61206],{"class":86,"line":34249},[84,61207,61208],{"class":154},"      toggle()\n",[84,61210,61211],{"class":86,"line":34298},[84,61212,34613],{"class":154},[84,61214,61215],{"class":86,"line":34345},[84,61216,3578],{"emptyLinePlaceholder":1252},[84,61218,61219],{"class":86,"line":34350},[84,61220,61221],{"class":154},"    \u002F\u002F 2. 左侧按钮业务\n",[84,61223,61224],{"class":86,"line":34356},[84,61225,61226],{"class":154},"    \u002F\u002F 2.1 获取左侧按钮 \n",[84,61228,61229],{"class":86,"line":34375},[84,61230,61231],{"class":154},"    const prev = document.querySelector('.prev')\n",[84,61233,61234],{"class":86,"line":34381},[84,61235,61144],{"class":154},[84,61237,61238],{"class":86,"line":34401},[84,61239,61240],{"class":154},"    prev.addEventListener('click', function () {\n",[84,61242,61243],{"class":86,"line":34407},[84,61244,61245],{"class":154},"      i--\n",[84,61247,61248],{"class":86,"line":34413},[84,61249,61250],{"class":154},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[84,61252,61253],{"class":86,"line":34423},[84,61254,61255],{"class":154},"      \u002F\u002F if (i \u003C 0) {\n",[84,61257,61258],{"class":86,"line":34428},[84,61259,61260],{"class":154},"      \u002F\u002F   i = 7\n",[84,61262,61263],{"class":86,"line":34434},[84,61264,61183],{"class":154},[84,61266,61267],{"class":86,"line":34450},[84,61268,61269],{"class":154},"      i = i \u003C 0 ? data.length - 1 : i\n",[84,61271,61272],{"class":86,"line":34495},[84,61273,61193],{"class":154},[84,61275,61276],{"class":86,"line":34501},[84,61277,61198],{"class":154},[84,61279,61280],{"class":86,"line":34507},[84,61281,61203],{"class":154},[84,61283,61284],{"class":86,"line":34513},[84,61285,61208],{"class":154},[84,61287,61288],{"class":86,"line":34524},[84,61289,34613],{"class":154},[84,61291,61292],{"class":86,"line":34530},[84,61293,3578],{"emptyLinePlaceholder":1252},[84,61295,61296],{"class":86,"line":34536},[84,61297,61298],{"class":154},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[84,61300,61301],{"class":86,"line":34542},[84,61302,61303],{"class":154},"    function toggle() {\n",[84,61305,61306],{"class":86,"line":34560},[84,61307,61308],{"class":154},"      \u002F\u002F 1.4 渲染对应的数据\n",[84,61310,61311],{"class":86,"line":34574},[84,61312,61313],{"class":154},"      img.src = data[i].url\n",[84,61315,61316],{"class":86,"line":34583},[84,61317,61318],{"class":154},"      p.innerHTML = data[i].title\n",[84,61320,61321],{"class":86,"line":34592},[84,61322,61323],{"class":154},"      footer.style.backgroundColor = data[i].color\n",[84,61325,61326],{"class":86,"line":34601},[84,61327,61328],{"class":154},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[84,61330,61331],{"class":86,"line":34610},[84,61332,61333],{"class":154},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[84,61335,61336],{"class":86,"line":34616},[84,61337,61338],{"class":154},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[84,61340,61341],{"class":86,"line":34622},[84,61342,3365],{"class":154},[84,61344,61345],{"class":86,"line":34630},[84,61346,3578],{"emptyLinePlaceholder":1252},[84,61348,61349],{"class":86,"line":34635},[84,61350,61351],{"class":154},"    \u002F\u002F 3. 自动播放模块\n",[84,61353,61354],{"class":86,"line":34641},[84,61355,61356],{"class":154},"    let timerId = setInterval(function () {\n",[84,61358,61359],{"class":86,"line":34652},[84,61360,61361],{"class":154},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[84,61363,61364],{"class":86,"line":34658},[84,61365,61366],{"class":154},"      next.click()\n",[84,61368,61369],{"class":86,"line":34678},[84,61370,61371],{"class":154},"    }, 1000)\n",[84,61373,61374],{"class":86,"line":34684},[84,61375,3578],{"emptyLinePlaceholder":1252},[84,61377,61378],{"class":86,"line":34690},[84,61379,61380],{"class":154},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[84,61382,61383],{"class":86,"line":34696},[84,61384,61385],{"class":154},"    const slider = document.querySelector('.slider')\n",[84,61387,61388],{"class":86,"line":34713},[84,61389,61390],{"class":154},"    \u002F\u002F 注册事件\n",[84,61392,61393],{"class":86,"line":34719},[84,61394,61395],{"class":154},"    slider.addEventListener('mouseenter', function () {\n",[84,61397,61398],{"class":86,"line":34725},[84,61399,61400],{"class":154},"      \u002F\u002F 停止定时器\n",[84,61402,61403],{"class":86,"line":34731},[84,61404,61405],{"class":154},"      clearInterval(timerId)\n",[84,61407,61408],{"class":86,"line":34737},[84,61409,34613],{"class":154},[84,61411,61412],{"class":86,"line":34743},[84,61413,3578],{"emptyLinePlaceholder":1252},[84,61415,61416],{"class":86,"line":34770},[84,61417,61418],{"class":154},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[84,61420,61421],{"class":86,"line":34794},[84,61422,61390],{"class":154},[84,61424,61425],{"class":86,"line":34800},[84,61426,61427],{"class":154},"    slider.addEventListener('mouseleave', function () {\n",[84,61429,61430],{"class":86,"line":34806},[84,61431,61400],{"class":154},[84,61433,61434],{"class":86,"line":34812},[84,61435,61436],{"class":154},"      if (timerId) clearInterval(timerId)\n",[84,61438,61439],{"class":86,"line":34823},[84,61440,61441],{"class":154},"      \u002F\u002F 开启定时器\n",[84,61443,61444],{"class":86,"line":34834},[84,61445,61446],{"class":154},"      timerId = setInterval(function () {\n",[84,61448,61449],{"class":86,"line":34840},[84,61450,61451],{"class":154},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[84,61453,61454],{"class":86,"line":34857},[84,61455,61456],{"class":154},"        next.click()\n",[84,61458,61459],{"class":86,"line":34880},[84,61460,61461],{"class":154},"      }, 1000)\n",[84,61463,61464],{"class":86,"line":34903},[84,61465,34613],{"class":154},[84,61467,61468,61470,61472],{"class":86,"line":34909},[84,61469,53566],{"class":154},[84,61471,52962],{"class":52449},[84,61473,52456],{"class":154},[84,61475,61476,61478,61480],{"class":86,"line":34914},[84,61477,52934],{"class":154},[84,61479,52949],{"class":52449},[84,61481,52456],{"class":154},[84,61483,61484],{"class":86,"line":34923},[84,61485,3578],{"emptyLinePlaceholder":1252},[84,61487,61488,61490,61492],{"class":86,"line":34933},[84,61489,52934],{"class":154},[84,61491,51784],{"class":52449},[84,61493,52456],{"class":154},[23168,61495,61497],{"id":61496},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61499,61500],{},"小米搜索框案例：",[60,61502,61504],{"className":51782,"code":61503,"language":51784,"meta":66,"style":66},"\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",[39,61505,61506,61516,61530,61534,61542,61556,61576,61596,61608,61616,61622,61632,61642,61654,61658,61662,61669,61673,61684,61688,61692,61699,61710,61723,61737,61741,61745,61754,61766,61778,61792,61805,61818,61836,61847,61851,61855,61864,61881,61885,61889,61896,61906,61916,61927,61940,61952,61968,61979,61991,61995,61999,62007,62018,62035,62047,62059,62070,62074,62078,62089,62100,62104,62112,62116,62124,62128,62136,62151,62174,62189,62220,62247,62274,62301,62328,62355,62382,62391,62399,62407,62412,62432,62452,62457,62462,62480,62485,62495,62500,62514,62519,62524,62541,62550,62562,62566,62574,62582,62586],{"__ignoreMap":66},[84,61507,61508,61510,61512,61514],{"class":86,"line":87},[84,61509,52446],{"class":154},[84,61511,52450],{"class":52449},[84,61513,52453],{"class":90},[84,61515,52456],{"class":154},[84,61517,61518,61520,61522,61524,61526,61528],{"class":86,"line":98},[84,61519,2218],{"class":154},[84,61521,51784],{"class":52449},[84,61523,52465],{"class":90},[84,61525,867],{"class":154},[84,61527,52470],{"class":158},[84,61529,52456],{"class":154},[84,61531,61532],{"class":86,"line":106},[84,61533,3578],{"emptyLinePlaceholder":1252},[84,61535,61536,61538,61540],{"class":86,"line":112},[84,61537,2218],{"class":154},[84,61539,52483],{"class":52449},[84,61541,52456],{"class":154},[84,61543,61544,61546,61548,61550,61552,61554],{"class":86,"line":425},[84,61545,52490],{"class":154},[84,61547,52493],{"class":52449},[84,61549,52496],{"class":90},[84,61551,867],{"class":154},[84,61553,52501],{"class":158},[84,61555,52456],{"class":154},[84,61557,61558,61560,61562,61564,61566,61568,61570,61572,61574],{"class":86,"line":2395},[84,61559,52490],{"class":154},[84,61561,52493],{"class":52449},[84,61563,52512],{"class":90},[84,61565,867],{"class":154},[84,61567,52517],{"class":158},[84,61569,52520],{"class":90},[84,61571,867],{"class":154},[84,61573,52525],{"class":158},[84,61575,52456],{"class":154},[84,61577,61578,61580,61582,61584,61586,61588,61590,61592,61594],{"class":86,"line":2401},[84,61579,52490],{"class":154},[84,61581,52493],{"class":52449},[84,61583,16090],{"class":90},[84,61585,867],{"class":154},[84,61587,52540],{"class":158},[84,61589,52520],{"class":90},[84,61591,867],{"class":154},[84,61593,52547],{"class":158},[84,61595,52456],{"class":154},[84,61597,61598,61600,61602,61604,61606],{"class":86,"line":2492},[84,61599,52490],{"class":154},[84,61601,52556],{"class":52449},[84,61603,52559],{"class":154},[84,61605,52556],{"class":52449},[84,61607,52456],{"class":154},[84,61609,61610,61612,61614],{"class":86,"line":2498},[84,61611,52490],{"class":154},[84,61613,1222],{"class":52449},[84,61615,52456],{"class":154},[84,61617,61618,61620],{"class":86,"line":2510},[84,61619,52576],{"class":52449},[84,61621,16742],{"class":154},[84,61623,61624,61626,61628,61630],{"class":86,"line":2793},[84,61625,52583],{"class":94},[84,61627,52586],{"class":154},[84,61629,1504],{"class":94},[84,61631,2471],{"class":154},[84,61633,61634,61636,61638,61640],{"class":86,"line":2798},[84,61635,52595],{"class":94},[84,61637,52586],{"class":154},[84,61639,1504],{"class":94},[84,61641,2471],{"class":154},[84,61643,61644,61647,61649,61652],{"class":86,"line":2804},[84,61645,61646],{"class":94},"            box-sizing",[84,61648,52586],{"class":154},[84,61650,61651],{"class":94},"border-box",[84,61653,2471],{"class":154},[84,61655,61656],{"class":86,"line":2809},[84,61657,3707],{"class":154},[84,61659,61660],{"class":86,"line":2823},[84,61661,3578],{"emptyLinePlaceholder":1252},[84,61663,61664,61667],{"class":86,"line":2828},[84,61665,61666],{"class":52449},"        ul",[84,61668,16742],{"class":154},[84,61670,61671],{"class":86,"line":2834},[84,61672,3578],{"emptyLinePlaceholder":1252},[84,61674,61675,61678,61680,61682],{"class":86,"line":2855},[84,61676,61677],{"class":94},"            list-style",[84,61679,52586],{"class":154},[84,61681,55884],{"class":94},[84,61683,2471],{"class":154},[84,61685,61686],{"class":86,"line":2860},[84,61687,3707],{"class":154},[84,61689,61690],{"class":86,"line":2874},[84,61691,3578],{"emptyLinePlaceholder":1252},[84,61693,61694,61697],{"class":86,"line":2879},[84,61695,61696],{"class":90},"        .mi",[84,61698,16742],{"class":154},[84,61700,61701,61704,61706,61708],{"class":86,"line":2908},[84,61702,61703],{"class":94},"            position",[84,61705,52586],{"class":154},[84,61707,55911],{"class":94},[84,61709,2471],{"class":154},[84,61711,61712,61714,61716,61719,61721],{"class":86,"line":2913},[84,61713,52633],{"class":94},[84,61715,52586],{"class":154},[84,61717,61718],{"class":94},"223",[84,61720,52641],{"class":129},[84,61722,2471],{"class":154},[84,61724,61725,61727,61729,61731,61733,61735],{"class":86,"line":2930},[84,61726,52583],{"class":94},[84,61728,52586],{"class":154},[84,61730,821],{"class":94},[84,61732,52641],{"class":129},[84,61734,52705],{"class":94},[84,61736,2471],{"class":154},[84,61738,61739],{"class":86,"line":2935},[84,61740,3707],{"class":154},[84,61742,61743],{"class":86,"line":2940},[84,61744,3578],{"emptyLinePlaceholder":1252},[84,61746,61747,61749,61752],{"class":86,"line":2945},[84,61748,61696],{"class":90},[84,61750,61751],{"class":52449}," input",[84,61753,16742],{"class":154},[84,61755,61756,61758,61760,61762,61764],{"class":86,"line":2959},[84,61757,52633],{"class":94},[84,61759,52586],{"class":154},[84,61761,61718],{"class":94},[84,61763,52641],{"class":129},[84,61765,2471],{"class":154},[84,61767,61768,61770,61772,61774,61776],{"class":86,"line":2964},[84,61769,52648],{"class":94},[84,61771,52586],{"class":154},[84,61773,1916],{"class":94},[84,61775,52641],{"class":129},[84,61777,2471],{"class":154},[84,61779,61780,61782,61784,61786,61788,61790],{"class":86,"line":3755},[84,61781,52595],{"class":94},[84,61783,52586],{"class":154},[84,61785,1504],{"class":94},[84,61787,994],{"class":94},[84,61789,52641],{"class":129},[84,61791,2471],{"class":154},[84,61793,61794,61797,61799,61801,61803],{"class":86,"line":3769},[84,61795,61796],{"class":94},"            font-size",[84,61798,52586],{"class":154},[84,61800,1858],{"class":94},[84,61802,52641],{"class":129},[84,61804,2471],{"class":154},[84,61806,61807,61810,61812,61814,61816],{"class":86,"line":3777},[84,61808,61809],{"class":94},"            line-height",[84,61811,52586],{"class":154},[84,61813,1916],{"class":94},[84,61815,52641],{"class":129},[84,61817,2471],{"class":154},[84,61819,61820,61823,61825,61827,61829,61831,61834],{"class":86,"line":3782},[84,61821,61822],{"class":94},"            border",[84,61824,52586],{"class":154},[84,61826,1529],{"class":94},[84,61828,52641],{"class":129},[84,61830,52670],{"class":94},[84,61832,61833],{"class":94}," #e0e0e0",[84,61835,2471],{"class":154},[84,61837,61838,61841,61843,61845],{"class":86,"line":3788},[84,61839,61840],{"class":94},"            outline",[84,61842,52586],{"class":154},[84,61844,55884],{"class":94},[84,61846,2471],{"class":154},[84,61848,61849],{"class":86,"line":3794},[84,61850,3707],{"class":154},[84,61852,61853],{"class":86,"line":3799},[84,61854,3578],{"emptyLinePlaceholder":1252},[84,61856,61857,61859,61862],{"class":86,"line":9120},[84,61858,61696],{"class":90},[84,61860,61861],{"class":90}," .search",[84,61863,16742],{"class":154},[84,61865,61866,61868,61870,61872,61874,61876,61879],{"class":86,"line":9144},[84,61867,61822],{"class":94},[84,61869,52586],{"class":154},[84,61871,1529],{"class":94},[84,61873,52641],{"class":129},[84,61875,52670],{"class":94},[84,61877,61878],{"class":94}," #ff6700",[84,61880,2471],{"class":154},[84,61882,61883],{"class":86,"line":9149},[84,61884,3707],{"class":154},[84,61886,61887],{"class":86,"line":9155},[84,61888,3578],{"emptyLinePlaceholder":1252},[84,61890,61891,61894],{"class":86,"line":9182},[84,61892,61893],{"class":90},"        .result-list",[84,61895,16742],{"class":154},[84,61897,61898,61900,61902,61904],{"class":86,"line":9187},[84,61899,52621],{"class":94},[84,61901,52586],{"class":154},[84,61903,55884],{"class":94},[84,61905,2471],{"class":154},[84,61907,61908,61910,61912,61914],{"class":86,"line":9193},[84,61909,61703],{"class":94},[84,61911,52586],{"class":154},[84,61913,55978],{"class":94},[84,61915,2471],{"class":154},[84,61917,61918,61921,61923,61925],{"class":86,"line":9205},[84,61919,61920],{"class":94},"            left",[84,61922,52586],{"class":154},[84,61924,1504],{"class":94},[84,61926,2471],{"class":154},[84,61928,61929,61932,61934,61936,61938],{"class":86,"line":9217},[84,61930,61931],{"class":94},"            top",[84,61933,52586],{"class":154},[84,61935,1916],{"class":94},[84,61937,52641],{"class":129},[84,61939,2471],{"class":154},[84,61941,61942,61944,61946,61948,61950],{"class":86,"line":9229},[84,61943,52633],{"class":94},[84,61945,52586],{"class":154},[84,61947,61718],{"class":94},[84,61949,52641],{"class":129},[84,61951,2471],{"class":154},[84,61953,61954,61956,61958,61960,61962,61964,61966],{"class":86,"line":10888},[84,61955,61822],{"class":94},[84,61957,52586],{"class":154},[84,61959,1529],{"class":94},[84,61961,52641],{"class":129},[84,61963,52670],{"class":94},[84,61965,61878],{"class":94},[84,61967,2471],{"class":154},[84,61969,61970,61973,61975,61977],{"class":86,"line":10913},[84,61971,61972],{"class":94},"            border-top",[84,61974,52586],{"class":154},[84,61976,1504],{"class":94},[84,61978,2471],{"class":154},[84,61980,61981,61984,61986,61989],{"class":86,"line":10936},[84,61982,61983],{"class":94},"            background",[84,61985,52586],{"class":154},[84,61987,61988],{"class":94},"#fff",[84,61990,2471],{"class":154},[84,61992,61993],{"class":86,"line":10960},[84,61994,3707],{"class":154},[84,61996,61997],{"class":86,"line":10965},[84,61998,3578],{"emptyLinePlaceholder":1252},[84,62000,62001,62003,62005],{"class":86,"line":10970},[84,62002,61893],{"class":90},[84,62004,2579],{"class":52449},[84,62006,16742],{"class":154},[84,62008,62009,62011,62013,62016],{"class":86,"line":10975},[84,62010,52621],{"class":94},[84,62012,52586],{"class":154},[84,62014,62015],{"class":94},"block",[84,62017,2471],{"class":154},[84,62019,62020,62022,62024,62026,62028,62031,62033],{"class":86,"line":10984},[84,62021,52595],{"class":94},[84,62023,52586],{"class":154},[84,62025,1654],{"class":94},[84,62027,52641],{"class":129},[84,62029,62030],{"class":94}," 15",[84,62032,52641],{"class":129},[84,62034,2471],{"class":154},[84,62036,62037,62039,62041,62043,62045],{"class":86,"line":10989},[84,62038,61796],{"class":94},[84,62040,52586],{"class":154},[84,62042,1807],{"class":94},[84,62044,52641],{"class":129},[84,62046,2471],{"class":154},[84,62048,62049,62052,62054,62057],{"class":86,"line":10995},[84,62050,62051],{"class":94},"            color",[84,62053,52586],{"class":154},[84,62055,62056],{"class":94},"#424242",[84,62058,2471],{"class":154},[84,62060,62061,62064,62066,62068],{"class":86,"line":11016},[84,62062,62063],{"class":94},"            text-decoration",[84,62065,52586],{"class":154},[84,62067,55884],{"class":94},[84,62069,2471],{"class":154},[84,62071,62072],{"class":86,"line":11022},[84,62073,3707],{"class":154},[84,62075,62076],{"class":86,"line":11036},[84,62077,3578],{"emptyLinePlaceholder":1252},[84,62079,62080,62082,62084,62087],{"class":86,"line":11042},[84,62081,61893],{"class":90},[84,62083,2579],{"class":52449},[84,62085,62086],{"class":90},":hover",[84,62088,16742],{"class":154},[84,62090,62091,62093,62095,62098],{"class":86,"line":11069},[84,62092,52789],{"class":94},[84,62094,52586],{"class":154},[84,62096,62097],{"class":94},"#eee",[84,62099,2471],{"class":154},[84,62101,62102],{"class":86,"line":11078},[84,62103,3707],{"class":154},[84,62105,62106,62108,62110],{"class":86,"line":11084},[84,62107,52925],{"class":154},[84,62109,1222],{"class":52449},[84,62111,52456],{"class":154},[84,62113,62114],{"class":86,"line":11092},[84,62115,3578],{"emptyLinePlaceholder":1252},[84,62117,62118,62120,62122],{"class":86,"line":11097},[84,62119,52934],{"class":154},[84,62121,52483],{"class":52449},[84,62123,52456],{"class":154},[84,62125,62126],{"class":86,"line":17774},[84,62127,3578],{"emptyLinePlaceholder":1252},[84,62129,62130,62132,62134],{"class":86,"line":17780},[84,62131,2218],{"class":154},[84,62133,52949],{"class":52449},[84,62135,52456],{"class":154},[84,62137,62138,62140,62142,62144,62146,62149],{"class":86,"line":17803},[84,62139,52490],{"class":154},[84,62141,52760],{"class":52449},[84,62143,54635],{"class":90},[84,62145,867],{"class":154},[84,62147,62148],{"class":158},"\"mi\"",[84,62150,52456],{"class":154},[84,62152,62153,62155,62157,62159,62161,62164,62167,62169,62172],{"class":86,"line":17809},[84,62154,56449],{"class":154},[84,62156,54970],{"class":52449},[84,62158,54973],{"class":90},[84,62160,867],{"class":154},[84,62162,62163],{"class":158},"\"search\"",[84,62165,62166],{"class":90}," placeholder",[84,62168,867],{"class":154},[84,62170,62171],{"class":158},"\"小米笔记本\"",[84,62173,52456],{"class":154},[84,62175,62176,62178,62180,62182,62184,62187],{"class":86,"line":17832},[84,62177,56449],{"class":154},[84,62179,2315],{"class":52449},[84,62181,54635],{"class":90},[84,62183,867],{"class":154},[84,62185,62186],{"class":158},"\"result-list\"",[84,62188,52456],{"class":154},[84,62190,62191,62194,62196,62199,62201,62204,62206,62209,62212,62214,62216,62218],{"class":86,"line":17846},[84,62192,62193],{"class":154},"            \u003C",[84,62195,29],{"class":52449},[84,62197,62198],{"class":154},">\u003C",[84,62200,208],{"class":52449},[84,62202,62203],{"class":90}," href",[84,62205,867],{"class":154},[84,62207,62208],{"class":158},"\"#\"",[84,62210,62211],{"class":154},">全部商品\u003C\u002F",[84,62213,208],{"class":52449},[84,62215,56461],{"class":154},[84,62217,29],{"class":52449},[84,62219,52456],{"class":154},[84,62221,62222,62224,62226,62228,62230,62232,62234,62236,62239,62241,62243,62245],{"class":86,"line":17866},[84,62223,62193],{"class":154},[84,62225,29],{"class":52449},[84,62227,62198],{"class":154},[84,62229,208],{"class":52449},[84,62231,62203],{"class":90},[84,62233,867],{"class":154},[84,62235,62208],{"class":158},[84,62237,62238],{"class":154},">小米11\u003C\u002F",[84,62240,208],{"class":52449},[84,62242,56461],{"class":154},[84,62244,29],{"class":52449},[84,62246,52456],{"class":154},[84,62248,62249,62251,62253,62255,62257,62259,62261,62263,62266,62268,62270,62272],{"class":86,"line":17872},[84,62250,62193],{"class":154},[84,62252,29],{"class":52449},[84,62254,62198],{"class":154},[84,62256,208],{"class":52449},[84,62258,62203],{"class":90},[84,62260,867],{"class":154},[84,62262,62208],{"class":158},[84,62264,62265],{"class":154},">小米10S\u003C\u002F",[84,62267,208],{"class":52449},[84,62269,56461],{"class":154},[84,62271,29],{"class":52449},[84,62273,52456],{"class":154},[84,62275,62276,62278,62280,62282,62284,62286,62288,62290,62293,62295,62297,62299],{"class":86,"line":17883},[84,62277,62193],{"class":154},[84,62279,29],{"class":52449},[84,62281,62198],{"class":154},[84,62283,208],{"class":52449},[84,62285,62203],{"class":90},[84,62287,867],{"class":154},[84,62289,62208],{"class":158},[84,62291,62292],{"class":154},">小米笔记本\u003C\u002F",[84,62294,208],{"class":52449},[84,62296,56461],{"class":154},[84,62298,29],{"class":52449},[84,62300,52456],{"class":154},[84,62302,62303,62305,62307,62309,62311,62313,62315,62317,62320,62322,62324,62326],{"class":86,"line":17906},[84,62304,62193],{"class":154},[84,62306,29],{"class":52449},[84,62308,62198],{"class":154},[84,62310,208],{"class":52449},[84,62312,62203],{"class":90},[84,62314,867],{"class":154},[84,62316,62208],{"class":158},[84,62318,62319],{"class":154},">小米手机\u003C\u002F",[84,62321,208],{"class":52449},[84,62323,56461],{"class":154},[84,62325,29],{"class":52449},[84,62327,52456],{"class":154},[84,62329,62330,62332,62334,62336,62338,62340,62342,62344,62347,62349,62351,62353],{"class":86,"line":17928},[84,62331,62193],{"class":154},[84,62333,29],{"class":52449},[84,62335,62198],{"class":154},[84,62337,208],{"class":52449},[84,62339,62203],{"class":90},[84,62341,867],{"class":154},[84,62343,62208],{"class":158},[84,62345,62346],{"class":154},">黑鲨4\u003C\u002F",[84,62348,208],{"class":52449},[84,62350,56461],{"class":154},[84,62352,29],{"class":52449},[84,62354,52456],{"class":154},[84,62356,62357,62359,62361,62363,62365,62367,62369,62371,62374,62376,62378,62380],{"class":86,"line":17933},[84,62358,62193],{"class":154},[84,62360,29],{"class":52449},[84,62362,62198],{"class":154},[84,62364,208],{"class":52449},[84,62366,62203],{"class":90},[84,62368,867],{"class":154},[84,62370,62208],{"class":158},[84,62372,62373],{"class":154},">空调\u003C\u002F",[84,62375,208],{"class":52449},[84,62377,56461],{"class":154},[84,62379,29],{"class":52449},[84,62381,52456],{"class":154},[84,62383,62384,62387,62389],{"class":86,"line":17939},[84,62385,62386],{"class":154},"        \u003C\u002F",[84,62388,2315],{"class":52449},[84,62390,52456],{"class":154},[84,62392,62393,62395,62397],{"class":86,"line":17953},[84,62394,52925],{"class":154},[84,62396,52760],{"class":52449},[84,62398,52456],{"class":154},[84,62400,62401,62403,62405],{"class":86,"line":17966},[84,62402,52490],{"class":154},[84,62404,52962],{"class":52449},[84,62406,52456],{"class":154},[84,62408,62409],{"class":86,"line":17971},[84,62410,62411],{"class":1378},"        \u002F\u002F 1. 获取元素\n",[84,62413,62414,62417,62419,62421,62423,62425,62427,62430],{"class":86,"line":17985},[84,62415,62416],{"class":129},"        const",[84,62418,61751],{"class":94},[84,62420,14735],{"class":129},[84,62422,55544],{"class":154},[84,62424,55547],{"class":90},[84,62426,155],{"class":154},[84,62428,62429],{"class":158},"'[type=search]'",[84,62431,162],{"class":154},[84,62433,62434,62436,62439,62441,62443,62445,62447,62450],{"class":86,"line":17990},[84,62435,62416],{"class":129},[84,62437,62438],{"class":94}," ul",[84,62440,14735],{"class":129},[84,62442,55544],{"class":154},[84,62444,55547],{"class":90},[84,62446,155],{"class":154},[84,62448,62449],{"class":158},"'.result-list'",[84,62451,162],{"class":154},[84,62453,62454],{"class":86,"line":17996},[84,62455,62456],{"class":1378},"        \u002F\u002F console.log(input)\n",[84,62458,62459],{"class":86,"line":18001},[84,62460,62461],{"class":1378},"        \u002F\u002F 2. 监听事件 获得焦点\n",[84,62463,62464,62467,62469,62471,62474,62476,62478],{"class":86,"line":18015},[84,62465,62466],{"class":154},"        input.",[84,62468,58960],{"class":90},[84,62470,155],{"class":154},[84,62472,62473],{"class":158},"'focus'",[84,62475,846],{"class":154},[84,62477,55596],{"class":129},[84,62479,55599],{"class":154},[84,62481,62482],{"class":86,"line":18020},[84,62483,62484],{"class":1378},"            \u002F\u002F ul显示\n",[84,62486,62487,62490,62492],{"class":86,"line":18025},[84,62488,62489],{"class":154},"            ul.style.display ",[84,62491,867],{"class":129},[84,62493,62494],{"class":158}," 'block'\n",[84,62496,62497],{"class":86,"line":18039},[84,62498,62499],{"class":1378},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[84,62501,62502,62505,62507,62509,62512],{"class":86,"line":18051},[84,62503,62504],{"class":154},"            input.classList.",[84,62506,6508],{"class":90},[84,62508,155],{"class":154},[84,62510,62511],{"class":158},"'search'",[84,62513,162],{"class":154},[84,62515,62516],{"class":86,"line":18056},[84,62517,62518],{"class":154},"        })\n",[84,62520,62521],{"class":86,"line":18069},[84,62522,62523],{"class":1378},"        \u002F\u002F 3. 监听事件 失去焦点\n",[84,62525,62526,62528,62530,62532,62535,62537,62539],{"class":86,"line":18074},[84,62527,62466],{"class":154},[84,62529,58960],{"class":90},[84,62531,155],{"class":154},[84,62533,62534],{"class":158},"'blur'",[84,62536,846],{"class":154},[84,62538,55596],{"class":129},[84,62540,55599],{"class":154},[84,62542,62543,62545,62547],{"class":86,"line":18079},[84,62544,62489],{"class":154},[84,62546,867],{"class":129},[84,62548,62549],{"class":158}," 'none'\n",[84,62551,62552,62554,62556,62558,62560],{"class":86,"line":18084},[84,62553,62504],{"class":154},[84,62555,58153],{"class":90},[84,62557,155],{"class":154},[84,62559,62511],{"class":158},[84,62561,162],{"class":154},[84,62563,62564],{"class":86,"line":18097},[84,62565,62518],{"class":154},[84,62567,62568,62570,62572],{"class":86,"line":18102},[84,62569,52925],{"class":154},[84,62571,52962],{"class":52449},[84,62573,52456],{"class":154},[84,62575,62576,62578,62580],{"class":86,"line":33785},[84,62577,52934],{"class":154},[84,62579,52949],{"class":52449},[84,62581,52456],{"class":154},[84,62583,62584],{"class":86,"line":33791},[84,62585,3578],{"emptyLinePlaceholder":1252},[84,62587,62588,62590,62592],{"class":86,"line":33797},[84,62589,52934],{"class":154},[84,62591,51784],{"class":52449},[84,62593,52456],{"class":154},[23168,62595,62597],{"id":62596},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62599,62600],{},"评论字数统计案例",[19,62602,62603],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62605,62606],{},"牢记focus伪类选择器",[52493,62608],{"charSet":62609},"UTF-8",[52493,62611],{"name":62612,"content":62613},"viewport","width=device-width, initial-scale=1.0",[52556,62615,62616],{},"Document",[1222,62618,62619],{},"\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",[54970,62621],{"type":65},[2315,62623,62624,62627],{},[29,62625,62626],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,62628,62629],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[60,62631,62633],{"className":51782,"code":62632,"language":51784,"meta":66,"style":66},"\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",[39,62634,62635,62645,62659,62663,62671,62685,62705,62725,62738,62746,62753,62766,62780,62790,62800,62804,62808,62815,62827,62839,62851,62863,62892,62905,62909,62913,62922,62933,62945,62956,62967,62979,62990,63002,63018,63030,63034,63038,63049,63060,63070,63082,63086,63090,63098,63109,63119,63130,63142,63155,63167,63179,63183,63187,63196,63208,63219,63232,63243,63257,63261,63265,63272,63284,63296,63306,63310,63314,63323,63335,63345,63349,63353,63364,63374,63393,63406,63410,63414,63424,63434,63438,63442,63453,63464,63476,63488,63492,63496,63507,63518,63532,63536,63540,63551,63561,63573,63577,63585,63593,63597,63605,63620,63639,63679,63692,63700,63714,63734,63742,63757,63780,63798,63813,63833,63853,63873,63881,63889,63897,63905,63925,63945,63950,63967,63976,63980,63985,64001,64009,64013,64018,64035,64040,64065,64069,64073,64078,64083,64091,64099,64103],{"__ignoreMap":66},[84,62636,62637,62639,62641,62643],{"class":86,"line":87},[84,62638,52446],{"class":154},[84,62640,52450],{"class":52449},[84,62642,52453],{"class":90},[84,62644,52456],{"class":154},[84,62646,62647,62649,62651,62653,62655,62657],{"class":86,"line":98},[84,62648,2218],{"class":154},[84,62650,51784],{"class":52449},[84,62652,52465],{"class":90},[84,62654,867],{"class":154},[84,62656,52470],{"class":158},[84,62658,52456],{"class":154},[84,62660,62661],{"class":86,"line":106},[84,62662,3578],{"emptyLinePlaceholder":1252},[84,62664,62665,62667,62669],{"class":86,"line":112},[84,62666,2218],{"class":154},[84,62668,52483],{"class":52449},[84,62670,52456],{"class":154},[84,62672,62673,62675,62677,62679,62681,62683],{"class":86,"line":425},[84,62674,53293],{"class":154},[84,62676,52493],{"class":52449},[84,62678,52496],{"class":90},[84,62680,867],{"class":154},[84,62682,52501],{"class":158},[84,62684,52456],{"class":154},[84,62686,62687,62689,62691,62693,62695,62697,62699,62701,62703],{"class":86,"line":2395},[84,62688,53293],{"class":154},[84,62690,52493],{"class":52449},[84,62692,52512],{"class":90},[84,62694,867],{"class":154},[84,62696,52517],{"class":158},[84,62698,52520],{"class":90},[84,62700,867],{"class":154},[84,62702,52525],{"class":158},[84,62704,52456],{"class":154},[84,62706,62707,62709,62711,62713,62715,62717,62719,62721,62723],{"class":86,"line":2401},[84,62708,53293],{"class":154},[84,62710,52493],{"class":52449},[84,62712,16090],{"class":90},[84,62714,867],{"class":154},[84,62716,52540],{"class":158},[84,62718,52520],{"class":90},[84,62720,867],{"class":154},[84,62722,52547],{"class":158},[84,62724,52456],{"class":154},[84,62726,62727,62729,62731,62734,62736],{"class":86,"line":2492},[84,62728,53293],{"class":154},[84,62730,52556],{"class":52449},[84,62732,62733],{"class":154},">评论回车发布\u003C\u002F",[84,62735,52556],{"class":52449},[84,62737,52456],{"class":154},[84,62739,62740,62742,62744],{"class":86,"line":2498},[84,62741,53293],{"class":154},[84,62743,1222],{"class":52449},[84,62745,52456],{"class":154},[84,62747,62748,62751],{"class":86,"line":2510},[84,62749,62750],{"class":90},"    .wrapper",[84,62752,16742],{"class":154},[84,62754,62755,62758,62760,62762,62764],{"class":86,"line":2793},[84,62756,62757],{"class":94},"      min-width",[84,62759,52586],{"class":154},[84,62761,5165],{"class":94},[84,62763,52641],{"class":129},[84,62765,2471],{"class":154},[84,62767,62768,62771,62773,62776,62778],{"class":86,"line":2798},[84,62769,62770],{"class":94},"      max-width",[84,62772,52586],{"class":154},[84,62774,62775],{"class":94},"800",[84,62777,52641],{"class":129},[84,62779,2471],{"class":154},[84,62781,62782,62784,62786,62788],{"class":86,"line":2804},[84,62783,56156],{"class":94},[84,62785,52586],{"class":154},[84,62787,52626],{"class":94},[84,62789,2471],{"class":154},[84,62791,62792,62794,62796,62798],{"class":86,"line":2809},[84,62793,56167],{"class":94},[84,62795,52586],{"class":154},[84,62797,52729],{"class":94},[84,62799,2471],{"class":154},[84,62801,62802],{"class":86,"line":2823},[84,62803,3365],{"class":154},[84,62805,62806],{"class":86,"line":2828},[84,62807,3578],{"emptyLinePlaceholder":1252},[84,62809,62810,62813],{"class":86,"line":2834},[84,62811,62812],{"class":90},"    .avatar",[84,62814,16742],{"class":154},[84,62816,62817,62819,62821,62823,62825],{"class":86,"line":2855},[84,62818,55918],{"class":94},[84,62820,52586],{"class":154},[84,62822,1916],{"class":94},[84,62824,52641],{"class":129},[84,62826,2471],{"class":154},[84,62828,62829,62831,62833,62835,62837],{"class":86,"line":2860},[84,62830,55932],{"class":94},[84,62832,52586],{"class":154},[84,62834,1916],{"class":94},[84,62836,52641],{"class":129},[84,62838,2471],{"class":154},[84,62840,62841,62843,62845,62847,62849],{"class":86,"line":2874},[84,62842,56281],{"class":94},[84,62844,52586],{"class":154},[84,62846,1964],{"class":94},[84,62848,1638],{"class":129},[84,62850,2471],{"class":154},[84,62852,62853,62856,62858,62861],{"class":86,"line":2879},[84,62854,62855],{"class":94},"      overflow",[84,62857,52586],{"class":154},[84,62859,62860],{"class":94},"hidden",[84,62862,2471],{"class":154},[84,62864,62865,62868,62870,62873,62875,62878,62880,62883,62885,62887,62890],{"class":86,"line":2908},[84,62866,62867],{"class":94},"      background",[84,62869,52586],{"class":154},[84,62871,62872],{"class":94},"url",[84,62874,155],{"class":154},[84,62876,62877],{"class":928},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[84,62879,1154],{"class":154},[84,62881,62882],{"class":94},"no-repeat",[84,62884,18314],{"class":94},[84,62886,26142],{"class":154},[84,62888,62889],{"class":94},"cover",[84,62891,2471],{"class":154},[84,62893,62894,62897,62899,62901,62903],{"class":86,"line":2913},[84,62895,62896],{"class":94},"      margin-right",[84,62898,52586],{"class":154},[84,62900,2008],{"class":94},[84,62902,52641],{"class":129},[84,62904,2471],{"class":154},[84,62906,62907],{"class":86,"line":2930},[84,62908,3365],{"class":154},[84,62910,62911],{"class":86,"line":2935},[84,62912,3578],{"emptyLinePlaceholder":1252},[84,62914,62915,62917,62920],{"class":86,"line":2940},[84,62916,62750],{"class":90},[84,62918,62919],{"class":52449}," textarea",[84,62921,16742],{"class":154},[84,62923,62924,62927,62929,62931],{"class":86,"line":2945},[84,62925,62926],{"class":94},"      outline",[84,62928,52586],{"class":154},[84,62930,55884],{"class":94},[84,62932,2471],{"class":154},[84,62934,62935,62938,62940,62943],{"class":86,"line":2959},[84,62936,62937],{"class":94},"      border-color",[84,62939,52586],{"class":154},[84,62941,62942],{"class":94},"transparent",[84,62944,2471],{"class":154},[84,62946,62947,62950,62952,62954],{"class":86,"line":2964},[84,62948,62949],{"class":94},"      resize",[84,62951,52586],{"class":154},[84,62953,55884],{"class":94},[84,62955,2471],{"class":154},[84,62957,62958,62960,62962,62965],{"class":86,"line":3755},[84,62959,62867],{"class":94},[84,62961,52586],{"class":154},[84,62963,62964],{"class":94},"#f5f5f5",[84,62966,2471],{"class":154},[84,62968,62969,62971,62973,62975,62977],{"class":86,"line":3769},[84,62970,56281],{"class":94},[84,62972,52586],{"class":154},[84,62974,1604],{"class":94},[84,62976,52641],{"class":129},[84,62978,2471],{"class":154},[84,62980,62981,62984,62986,62988],{"class":86,"line":3777},[84,62982,62983],{"class":94},"      flex",[84,62985,52586],{"class":154},[84,62987,1529],{"class":94},[84,62989,2471],{"class":154},[84,62991,62992,62994,62996,62998,63000],{"class":86,"line":3782},[84,62993,55842],{"class":94},[84,62995,52586],{"class":154},[84,62997,1756],{"class":94},[84,62999,52641],{"class":129},[84,63001,2471],{"class":154},[84,63003,63004,63007,63009,63011,63014,63016],{"class":86,"line":3788},[84,63005,63006],{"class":94},"      transition",[84,63008,52586],{"class":154},[84,63010,29279],{"class":94},[84,63012,63013],{"class":94}," 0.5",[84,63015,2003],{"class":129},[84,63017,2471],{"class":154},[84,63019,63020,63022,63024,63026,63028],{"class":86,"line":3794},[84,63021,55932],{"class":94},[84,63023,52586],{"class":154},[84,63025,2259],{"class":94},[84,63027,52641],{"class":129},[84,63029,2471],{"class":154},[84,63031,63032],{"class":86,"line":3799},[84,63033,3365],{"class":154},[84,63035,63036],{"class":86,"line":9120},[84,63037,3578],{"emptyLinePlaceholder":1252},[84,63039,63040,63042,63044,63047],{"class":86,"line":9144},[84,63041,62750],{"class":90},[84,63043,62919],{"class":52449},[84,63045,63046],{"class":90},":focus",[84,63048,16742],{"class":154},[84,63050,63051,63053,63055,63058],{"class":86,"line":9149},[84,63052,62937],{"class":94},[84,63054,52586],{"class":154},[84,63056,63057],{"class":94},"#e4e4e4",[84,63059,2471],{"class":154},[84,63061,63062,63064,63066,63068],{"class":86,"line":9155},[84,63063,62867],{"class":94},[84,63065,52586],{"class":154},[84,63067,61988],{"class":94},[84,63069,2471],{"class":154},[84,63071,63072,63074,63076,63078,63080],{"class":86,"line":9182},[84,63073,55932],{"class":94},[84,63075,52586],{"class":154},[84,63077,1964],{"class":94},[84,63079,52641],{"class":129},[84,63081,2471],{"class":154},[84,63083,63084],{"class":86,"line":9187},[84,63085,3365],{"class":154},[84,63087,63088],{"class":86,"line":9193},[84,63089,3578],{"emptyLinePlaceholder":1252},[84,63091,63092,63094,63096],{"class":86,"line":9205},[84,63093,62750],{"class":90},[84,63095,58614],{"class":52449},[84,63097,16742],{"class":154},[84,63099,63100,63102,63104,63107],{"class":86,"line":9217},[84,63101,62867],{"class":94},[84,63103,52586],{"class":154},[84,63105,63106],{"class":94},"#00aeec",[84,63108,2471],{"class":154},[84,63110,63111,63113,63115,63117],{"class":86,"line":9229},[84,63112,58563],{"class":94},[84,63114,52586],{"class":154},[84,63116,61988],{"class":94},[84,63118,2471],{"class":154},[84,63120,63121,63124,63126,63128],{"class":86,"line":10888},[84,63122,63123],{"class":94},"      border",[84,63125,52586],{"class":154},[84,63127,55884],{"class":94},[84,63129,2471],{"class":154},[84,63131,63132,63134,63136,63138,63140],{"class":86,"line":10913},[84,63133,56281],{"class":94},[84,63135,52586],{"class":154},[84,63137,1604],{"class":94},[84,63139,52641],{"class":129},[84,63141,2471],{"class":154},[84,63143,63144,63147,63149,63151,63153],{"class":86,"line":10936},[84,63145,63146],{"class":94},"      margin-left",[84,63148,52586],{"class":154},[84,63150,1756],{"class":94},[84,63152,52641],{"class":129},[84,63154,2471],{"class":154},[84,63156,63157,63159,63161,63163,63165],{"class":86,"line":10960},[84,63158,55918],{"class":94},[84,63160,52586],{"class":154},[84,63162,1666],{"class":94},[84,63164,52641],{"class":129},[84,63166,2471],{"class":154},[84,63168,63169,63172,63174,63177],{"class":86,"line":10965},[84,63170,63171],{"class":94},"      cursor",[84,63173,52586],{"class":154},[84,63175,63176],{"class":94},"pointer",[84,63178,2471],{"class":154},[84,63180,63181],{"class":86,"line":10970},[84,63182,3365],{"class":154},[84,63184,63185],{"class":86,"line":10975},[84,63186,3578],{"emptyLinePlaceholder":1252},[84,63188,63189,63191,63194],{"class":86,"line":10984},[84,63190,62750],{"class":90},[84,63192,63193],{"class":90}," .total",[84,63195,16742],{"class":154},[84,63197,63198,63200,63202,63204,63206],{"class":86,"line":10989},[84,63199,62896],{"class":94},[84,63201,52586],{"class":154},[84,63203,1921],{"class":94},[84,63205,52641],{"class":129},[84,63207,2471],{"class":154},[84,63209,63210,63212,63214,63217],{"class":86,"line":10995},[84,63211,58563],{"class":94},[84,63213,52586],{"class":154},[84,63215,63216],{"class":94},"#999",[84,63218,2471],{"class":154},[84,63220,63221,63224,63226,63228,63230],{"class":86,"line":11016},[84,63222,63223],{"class":94},"      margin-top",[84,63225,52586],{"class":154},[84,63227,1629],{"class":94},[84,63229,52641],{"class":129},[84,63231,2471],{"class":154},[84,63233,63234,63237,63239,63241],{"class":86,"line":11022},[84,63235,63236],{"class":94},"      opacity",[84,63238,52586],{"class":154},[84,63240,1504],{"class":94},[84,63242,2471],{"class":154},[84,63244,63245,63247,63249,63251,63253,63255],{"class":86,"line":11036},[84,63246,63006],{"class":94},[84,63248,52586],{"class":154},[84,63250,29279],{"class":94},[84,63252,63013],{"class":94},[84,63254,2003],{"class":129},[84,63256,2471],{"class":154},[84,63258,63259],{"class":86,"line":11042},[84,63260,3365],{"class":154},[84,63262,63263],{"class":86,"line":11069},[84,63264,3578],{"emptyLinePlaceholder":1252},[84,63266,63267,63270],{"class":86,"line":11078},[84,63268,63269],{"class":90},"    .list",[84,63271,16742],{"class":154},[84,63273,63274,63276,63278,63280,63282],{"class":86,"line":11084},[84,63275,62757],{"class":94},[84,63277,52586],{"class":154},[84,63279,5165],{"class":94},[84,63281,52641],{"class":129},[84,63283,2471],{"class":154},[84,63285,63286,63288,63290,63292,63294],{"class":86,"line":11092},[84,63287,62770],{"class":94},[84,63289,52586],{"class":154},[84,63291,62775],{"class":94},[84,63293,52641],{"class":129},[84,63295,2471],{"class":154},[84,63297,63298,63300,63302,63304],{"class":86,"line":11097},[84,63299,56156],{"class":94},[84,63301,52586],{"class":154},[84,63303,52626],{"class":94},[84,63305,2471],{"class":154},[84,63307,63308],{"class":86,"line":17774},[84,63309,3365],{"class":154},[84,63311,63312],{"class":86,"line":17780},[84,63313,3578],{"emptyLinePlaceholder":1252},[84,63315,63316,63318,63321],{"class":86,"line":17803},[84,63317,63269],{"class":90},[84,63319,63320],{"class":90}," .item",[84,63322,16742],{"class":154},[84,63324,63325,63327,63329,63331,63333],{"class":86,"line":17809},[84,63326,55918],{"class":94},[84,63328,52586],{"class":154},[84,63330,821],{"class":94},[84,63332,1638],{"class":129},[84,63334,2471],{"class":154},[84,63336,63337,63339,63341,63343],{"class":86,"line":17832},[84,63338,56156],{"class":94},[84,63340,52586],{"class":154},[84,63342,52626],{"class":94},[84,63344,2471],{"class":154},[84,63346,63347],{"class":86,"line":17846},[84,63348,3365],{"class":154},[84,63350,63351],{"class":86,"line":17866},[84,63352,3578],{"emptyLinePlaceholder":1252},[84,63354,63355,63357,63359,63362],{"class":86,"line":17872},[84,63356,63269],{"class":90},[84,63358,63320],{"class":90},[84,63360,63361],{"class":90}," .info",[84,63363,16742],{"class":154},[84,63365,63366,63368,63370,63372],{"class":86,"line":17883},[84,63367,62983],{"class":94},[84,63369,52586],{"class":154},[84,63371,1529],{"class":94},[84,63373,2471],{"class":154},[84,63375,63376,63379,63381,63383,63385,63388,63391],{"class":86,"line":17906},[84,63377,63378],{"class":94},"      border-bottom",[84,63380,52586],{"class":154},[84,63382,1529],{"class":94},[84,63384,52641],{"class":129},[84,63386,63387],{"class":94}," dashed",[84,63389,63390],{"class":94}," #e4e4e4",[84,63392,2471],{"class":154},[84,63394,63395,63398,63400,63402,63404],{"class":86,"line":17928},[84,63396,63397],{"class":94},"      padding-bottom",[84,63399,52586],{"class":154},[84,63401,1756],{"class":94},[84,63403,52641],{"class":129},[84,63405,2471],{"class":154},[84,63407,63408],{"class":86,"line":17933},[84,63409,3365],{"class":154},[84,63411,63412],{"class":86,"line":17939},[84,63413,3578],{"emptyLinePlaceholder":1252},[84,63415,63416,63418,63420,63422],{"class":86,"line":17953},[84,63417,63269],{"class":90},[84,63419,63320],{"class":90},[84,63421,7997],{"class":52449},[84,63423,16742],{"class":154},[84,63425,63426,63428,63430,63432],{"class":86,"line":17966},[84,63427,55853],{"class":94},[84,63429,52586],{"class":154},[84,63431,1504],{"class":94},[84,63433,2471],{"class":154},[84,63435,63436],{"class":86,"line":17971},[84,63437,3365],{"class":154},[84,63439,63440],{"class":86,"line":17985},[84,63441,3578],{"emptyLinePlaceholder":1252},[84,63443,63444,63446,63448,63451],{"class":86,"line":17990},[84,63445,63269],{"class":90},[84,63447,63320],{"class":90},[84,63449,63450],{"class":90}," .name",[84,63452,16742],{"class":154},[84,63454,63455,63457,63459,63462],{"class":86,"line":17996},[84,63456,58563],{"class":94},[84,63458,52586],{"class":154},[84,63460,63461],{"class":94},"#FB7299",[84,63463,2471],{"class":154},[84,63465,63466,63468,63470,63472,63474],{"class":86,"line":18001},[84,63467,56069],{"class":94},[84,63469,52586],{"class":154},[84,63471,1858],{"class":94},[84,63473,52641],{"class":129},[84,63475,2471],{"class":154},[84,63477,63478,63481,63483,63486],{"class":86,"line":18015},[84,63479,63480],{"class":94},"      font-weight",[84,63482,52586],{"class":154},[84,63484,63485],{"class":94},"bold",[84,63487,2471],{"class":154},[84,63489,63490],{"class":86,"line":18020},[84,63491,3365],{"class":154},[84,63493,63494],{"class":86,"line":18025},[84,63495,3578],{"emptyLinePlaceholder":1252},[84,63497,63498,63500,63502,63505],{"class":86,"line":18039},[84,63499,63269],{"class":90},[84,63501,63320],{"class":90},[84,63503,63504],{"class":90}," .text",[84,63506,16742],{"class":154},[84,63508,63509,63511,63513,63516],{"class":86,"line":18051},[84,63510,58563],{"class":94},[84,63512,52586],{"class":154},[84,63514,63515],{"class":94},"#333",[84,63517,2471],{"class":154},[84,63519,63520,63522,63524,63526,63528,63530],{"class":86,"line":18056},[84,63521,55842],{"class":94},[84,63523,52586],{"class":154},[84,63525,1756],{"class":94},[84,63527,52641],{"class":129},[84,63529,5271],{"class":94},[84,63531,2471],{"class":154},[84,63533,63534],{"class":86,"line":18069},[84,63535,3365],{"class":154},[84,63537,63538],{"class":86,"line":18074},[84,63539,3578],{"emptyLinePlaceholder":1252},[84,63541,63542,63544,63546,63549],{"class":86,"line":18079},[84,63543,63269],{"class":90},[84,63545,63320],{"class":90},[84,63547,63548],{"class":90}," .time",[84,63550,16742],{"class":154},[84,63552,63553,63555,63557,63559],{"class":86,"line":18084},[84,63554,58563],{"class":94},[84,63556,52586],{"class":154},[84,63558,63216],{"class":94},[84,63560,2471],{"class":154},[84,63562,63563,63565,63567,63569,63571],{"class":86,"line":18097},[84,63564,56069],{"class":94},[84,63566,52586],{"class":154},[84,63568,1807],{"class":94},[84,63570,52641],{"class":129},[84,63572,2471],{"class":154},[84,63574,63575],{"class":86,"line":18102},[84,63576,3365],{"class":154},[84,63578,63579,63581,63583],{"class":86,"line":33785},[84,63580,53566],{"class":154},[84,63582,1222],{"class":52449},[84,63584,52456],{"class":154},[84,63586,63587,63589,63591],{"class":86,"line":33791},[84,63588,52934],{"class":154},[84,63590,52483],{"class":52449},[84,63592,52456],{"class":154},[84,63594,63595],{"class":86,"line":33797},[84,63596,3578],{"emptyLinePlaceholder":1252},[84,63598,63599,63601,63603],{"class":86,"line":33803},[84,63600,2218],{"class":154},[84,63602,52949],{"class":52449},[84,63604,52456],{"class":154},[84,63606,63607,63609,63611,63613,63615,63618],{"class":86,"line":33809},[84,63608,53293],{"class":154},[84,63610,52760],{"class":52449},[84,63612,54635],{"class":90},[84,63614,867],{"class":154},[84,63616,63617],{"class":158},"\"wrapper\"",[84,63619,52456],{"class":154},[84,63621,63622,63624,63626,63628,63630,63633,63635,63637],{"class":86,"line":33820},[84,63623,52490],{"class":154},[84,63625,1751],{"class":52449},[84,63627,54635],{"class":90},[84,63629,867],{"class":154},[84,63631,63632],{"class":158},"\"avatar\"",[84,63634,56461],{"class":154},[84,63636,1751],{"class":52449},[84,63638,52456],{"class":154},[84,63640,63641,63643,63645,63647,63649,63652,63654,63656,63659,63661,63663,63665,63668,63670,63673,63675,63677],{"class":86,"line":33826},[84,63642,52490],{"class":154},[84,63644,55437],{"class":52449},[84,63646,16129],{"class":90},[84,63648,867],{"class":154},[84,63650,63651],{"class":158},"\"tx\"",[84,63653,62166],{"class":90},[84,63655,867],{"class":154},[84,63657,63658],{"class":158},"\"发一条友善的评论\"",[84,63660,55460],{"class":90},[84,63662,867],{"class":154},[84,63664,4879],{"class":158},[84,63666,63667],{"class":90}," maxlength",[84,63669,867],{"class":154},[84,63671,63672],{"class":158},"\"200\"",[84,63674,56461],{"class":154},[84,63676,55437],{"class":52449},[84,63678,52456],{"class":154},[84,63680,63681,63683,63685,63688,63690],{"class":86,"line":33846},[84,63682,52490],{"class":154},[84,63684,55036],{"class":52449},[84,63686,63687],{"class":154},">发布\u003C\u002F",[84,63689,55036],{"class":52449},[84,63691,52456],{"class":154},[84,63693,63694,63696,63698],{"class":86,"line":33852},[84,63695,53566],{"class":154},[84,63697,52760],{"class":52449},[84,63699,52456],{"class":154},[84,63701,63702,63704,63706,63708,63710,63712],{"class":86,"line":33863},[84,63703,53293],{"class":154},[84,63705,52760],{"class":52449},[84,63707,54635],{"class":90},[84,63709,867],{"class":154},[84,63711,63617],{"class":158},[84,63713,52456],{"class":154},[84,63715,63716,63718,63720,63722,63724,63727,63730,63732],{"class":86,"line":33869},[84,63717,52490],{"class":154},[84,63719,84],{"class":52449},[84,63721,54635],{"class":90},[84,63723,867],{"class":154},[84,63725,63726],{"class":158},"\"total\"",[84,63728,63729],{"class":154},">0\u002F200字\u003C\u002F",[84,63731,84],{"class":52449},[84,63733,52456],{"class":154},[84,63735,63736,63738,63740],{"class":86,"line":33875},[84,63737,53566],{"class":154},[84,63739,52760],{"class":52449},[84,63741,52456],{"class":154},[84,63743,63744,63746,63748,63750,63752,63755],{"class":86,"line":33881},[84,63745,53293],{"class":154},[84,63747,52760],{"class":52449},[84,63749,54635],{"class":90},[84,63751,867],{"class":154},[84,63753,63754],{"class":158},"\"list\"",[84,63756,52456],{"class":154},[84,63758,63759,63761,63763,63765,63767,63770,63773,63775,63778],{"class":86,"line":33887},[84,63760,52490],{"class":154},[84,63762,52760],{"class":52449},[84,63764,54635],{"class":90},[84,63766,867],{"class":154},[84,63768,63769],{"class":158},"\"item\"",[84,63771,63772],{"class":90}," style",[84,63774,867],{"class":154},[84,63776,63777],{"class":158},"\"display: none;\"",[84,63779,52456],{"class":154},[84,63781,63782,63784,63786,63788,63790,63792,63794,63796],{"class":86,"line":33893},[84,63783,56381],{"class":154},[84,63785,1751],{"class":52449},[84,63787,54635],{"class":90},[84,63789,867],{"class":154},[84,63791,63632],{"class":158},[84,63793,56461],{"class":154},[84,63795,1751],{"class":52449},[84,63797,52456],{"class":154},[84,63799,63800,63802,63804,63806,63808,63811],{"class":86,"line":33899},[84,63801,56381],{"class":154},[84,63803,52760],{"class":52449},[84,63805,54635],{"class":90},[84,63807,867],{"class":154},[84,63809,63810],{"class":158},"\"info\"",[84,63812,52456],{"class":154},[84,63814,63815,63817,63819,63821,63823,63826,63829,63831],{"class":86,"line":33905},[84,63816,56449],{"class":154},[84,63818,19],{"class":52449},[84,63820,54635],{"class":90},[84,63822,867],{"class":154},[84,63824,63825],{"class":158},"\"name\"",[84,63827,63828],{"class":154},">清风徐来\u003C\u002F",[84,63830,19],{"class":52449},[84,63832,52456],{"class":154},[84,63834,63835,63837,63839,63841,63843,63846,63849,63851],{"class":86,"line":33925},[84,63836,56449],{"class":154},[84,63838,19],{"class":52449},[84,63840,54635],{"class":90},[84,63842,867],{"class":154},[84,63844,63845],{"class":158},"\"text\"",[84,63847,63848],{"class":154},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[84,63850,19],{"class":52449},[84,63852,52456],{"class":154},[84,63854,63855,63857,63859,63861,63863,63866,63869,63871],{"class":86,"line":33931},[84,63856,56449],{"class":154},[84,63858,19],{"class":52449},[84,63860,54635],{"class":90},[84,63862,867],{"class":154},[84,63864,63865],{"class":158},"\"time\"",[84,63867,63868],{"class":154},">2022-10-10 20:29:21\u003C\u002F",[84,63870,19],{"class":52449},[84,63872,52456],{"class":154},[84,63874,63875,63877,63879],{"class":86,"line":33947},[84,63876,56554],{"class":154},[84,63878,52760],{"class":52449},[84,63880,52456],{"class":154},[84,63882,63883,63885,63887],{"class":86,"line":33953},[84,63884,52925],{"class":154},[84,63886,52760],{"class":52449},[84,63888,52456],{"class":154},[84,63890,63891,63893,63895],{"class":86,"line":33967},[84,63892,53566],{"class":154},[84,63894,52760],{"class":52449},[84,63896,52456],{"class":154},[84,63898,63899,63901,63903],{"class":86,"line":33973},[84,63900,53293],{"class":154},[84,63902,52962],{"class":52449},[84,63904,52456],{"class":154},[84,63906,63907,63909,63912,63914,63916,63918,63920,63923],{"class":86,"line":33988},[84,63908,12393],{"class":129},[84,63910,63911],{"class":94}," tx",[84,63913,14735],{"class":129},[84,63915,55544],{"class":154},[84,63917,55547],{"class":90},[84,63919,155],{"class":154},[84,63921,63922],{"class":158},"'#tx'",[84,63924,162],{"class":154},[84,63926,63927,63929,63932,63934,63936,63938,63940,63943],{"class":86,"line":33994},[84,63928,12393],{"class":129},[84,63930,63931],{"class":94}," total",[84,63933,14735],{"class":129},[84,63935,55544],{"class":154},[84,63937,55547],{"class":90},[84,63939,155],{"class":154},[84,63941,63942],{"class":158},"'.total'",[84,63944,162],{"class":154},[84,63946,63947],{"class":86,"line":34003},[84,63948,63949],{"class":1378},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[84,63951,63952,63955,63957,63959,63961,63963,63965],{"class":86,"line":34009},[84,63953,63954],{"class":154},"    tx.",[84,63956,58960],{"class":90},[84,63958,155],{"class":154},[84,63960,62473],{"class":158},[84,63962,846],{"class":154},[84,63964,55596],{"class":129},[84,63966,55599],{"class":154},[84,63968,63969,63972,63974],{"class":86,"line":34018},[84,63970,63971],{"class":154},"      total.style.opacity ",[84,63973,867],{"class":129},[84,63975,56846],{"class":94},[84,63977,63978],{"class":86,"line":34024},[84,63979,34613],{"class":154},[84,63981,63982],{"class":86,"line":34030},[84,63983,63984],{"class":1378},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[84,63986,63987,63989,63991,63993,63995,63997,63999],{"class":86,"line":34039},[84,63988,63954],{"class":154},[84,63990,58960],{"class":90},[84,63992,155],{"class":154},[84,63994,62534],{"class":158},[84,63996,846],{"class":154},[84,63998,55596],{"class":129},[84,64000,55599],{"class":154},[84,64002,64003,64005,64007],{"class":86,"line":34045},[84,64004,63971],{"class":154},[84,64006,867],{"class":129},[84,64008,48483],{"class":94},[84,64010,64011],{"class":86,"line":34056},[84,64012,34613],{"class":154},[84,64014,64015],{"class":86,"line":34062},[84,64016,64017],{"class":1378},"    \u002F\u002F 3. 检测用户输入\n",[84,64019,64020,64022,64024,64026,64029,64031,64033],{"class":86,"line":34081},[84,64021,63954],{"class":154},[84,64023,58960],{"class":90},[84,64025,155],{"class":154},[84,64027,64028],{"class":158},"'input'",[84,64030,846],{"class":154},[84,64032,55596],{"class":129},[84,64034,55599],{"class":154},[84,64036,64037],{"class":86,"line":34087},[84,64038,64039],{"class":1378},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[84,64041,64042,64045,64047,64050,64053,64055,64058,64060,64062],{"class":86,"line":34098},[84,64043,64044],{"class":154},"      total.innerHTML ",[84,64046,867],{"class":129},[84,64048,64049],{"class":158}," `${",[84,64051,64052],{"class":154},"tx",[84,64054,1867],{"class":158},[84,64056,64057],{"class":154},"value",[84,64059,1867],{"class":158},[84,64061,53117],{"class":94},[84,64063,64064],{"class":158},"}\u002F200字`\n",[84,64066,64067],{"class":86,"line":34104},[84,64068,34613],{"class":154},[84,64070,64071],{"class":86,"line":34124},[84,64072,3578],{"emptyLinePlaceholder":1252},[84,64074,64075],{"class":86,"line":34140},[84,64076,64077],{"class":1378},"    \u002F\u002F const str = 'andy'\n",[84,64079,64080],{"class":86,"line":34146},[84,64081,64082],{"class":1378},"    \u002F\u002F console.log(str.length)\n",[84,64084,64085,64087,64089],{"class":86,"line":34160},[84,64086,53566],{"class":154},[84,64088,52962],{"class":52449},[84,64090,52456],{"class":154},[84,64092,64093,64095,64097],{"class":86,"line":34166},[84,64094,52934],{"class":154},[84,64096,52949],{"class":52449},[84,64098,52456],{"class":154},[84,64100,64101],{"class":86,"line":34172},[84,64102,3578],{"emptyLinePlaceholder":1252},[84,64104,64105,64107,64109],{"class":86,"line":34183},[84,64106,52934],{"class":154},[84,64108,51784],{"class":52449},[84,64110,52456],{"class":154},[23168,64112,64114],{"id":64113},"_3254-change事件","3.2.5.4 change事件",[19,64116,64117],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64119,64120],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64122,64123],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[60,64125,64127],{"className":51782,"code":64126,"language":51784,"meta":66,"style":66},"\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",[39,64128,64129,64139,64153,64157,64165,64179,64199,64211,64219,64223,64231,64245,64253,64271,64289,64301,64305,64313,64321,64325],{"__ignoreMap":66},[84,64130,64131,64133,64135,64137],{"class":86,"line":87},[84,64132,52446],{"class":154},[84,64134,52450],{"class":52449},[84,64136,52453],{"class":90},[84,64138,52456],{"class":154},[84,64140,64141,64143,64145,64147,64149,64151],{"class":86,"line":98},[84,64142,2218],{"class":154},[84,64144,51784],{"class":52449},[84,64146,52465],{"class":90},[84,64148,867],{"class":154},[84,64150,52470],{"class":158},[84,64152,52456],{"class":154},[84,64154,64155],{"class":86,"line":106},[84,64156,3578],{"emptyLinePlaceholder":1252},[84,64158,64159,64161,64163],{"class":86,"line":112},[84,64160,2218],{"class":154},[84,64162,52483],{"class":52449},[84,64164,52456],{"class":154},[84,64166,64167,64169,64171,64173,64175,64177],{"class":86,"line":425},[84,64168,53293],{"class":154},[84,64170,52493],{"class":52449},[84,64172,52496],{"class":90},[84,64174,867],{"class":154},[84,64176,52501],{"class":158},[84,64178,52456],{"class":154},[84,64180,64181,64183,64185,64187,64189,64191,64193,64195,64197],{"class":86,"line":2395},[84,64182,53293],{"class":154},[84,64184,52493],{"class":52449},[84,64186,16090],{"class":90},[84,64188,867],{"class":154},[84,64190,52540],{"class":158},[84,64192,52520],{"class":90},[84,64194,867],{"class":154},[84,64196,52547],{"class":158},[84,64198,52456],{"class":154},[84,64200,64201,64203,64205,64207,64209],{"class":86,"line":2401},[84,64202,53293],{"class":154},[84,64204,52556],{"class":52449},[84,64206,52559],{"class":154},[84,64208,52556],{"class":52449},[84,64210,52456],{"class":154},[84,64212,64213,64215,64217],{"class":86,"line":2492},[84,64214,52934],{"class":154},[84,64216,52483],{"class":52449},[84,64218,52456],{"class":154},[84,64220,64221],{"class":86,"line":2498},[84,64222,3578],{"emptyLinePlaceholder":1252},[84,64224,64225,64227,64229],{"class":86,"line":2510},[84,64226,2218],{"class":154},[84,64228,52949],{"class":52449},[84,64230,52456],{"class":154},[84,64232,64233,64235,64237,64239,64241,64243],{"class":86,"line":2793},[84,64234,53293],{"class":154},[84,64236,54970],{"class":52449},[84,64238,54973],{"class":90},[84,64240,867],{"class":154},[84,64242,63845],{"class":158},[84,64244,52456],{"class":154},[84,64246,64247,64249,64251],{"class":86,"line":2798},[84,64248,53293],{"class":154},[84,64250,52962],{"class":52449},[84,64252,52456],{"class":154},[84,64254,64255,64257,64259,64261,64263,64265,64267,64269],{"class":86,"line":2804},[84,64256,12393],{"class":129},[84,64258,61751],{"class":94},[84,64260,14735],{"class":129},[84,64262,55544],{"class":154},[84,64264,55547],{"class":90},[84,64266,155],{"class":154},[84,64268,64028],{"class":158},[84,64270,162],{"class":154},[84,64272,64273,64276,64278,64280,64283,64285,64287],{"class":86,"line":2809},[84,64274,64275],{"class":154},"    input.",[84,64277,58960],{"class":90},[84,64279,155],{"class":154},[84,64281,64282],{"class":158},"'change'",[84,64284,846],{"class":154},[84,64286,55596],{"class":129},[84,64288,55599],{"class":154},[84,64290,64291,64293,64295,64297,64299],{"class":86,"line":2823},[84,64292,59390],{"class":154},[84,64294,59393],{"class":90},[84,64296,155],{"class":154},[84,64298,1902],{"class":94},[84,64300,162],{"class":154},[84,64302,64303],{"class":86,"line":2828},[84,64304,34613],{"class":154},[84,64306,64307,64309,64311],{"class":86,"line":2834},[84,64308,53566],{"class":154},[84,64310,52962],{"class":52449},[84,64312,52456],{"class":154},[84,64314,64315,64317,64319],{"class":86,"line":2855},[84,64316,52934],{"class":154},[84,64318,52949],{"class":52449},[84,64320,52456],{"class":154},[84,64322,64323],{"class":86,"line":2860},[84,64324,3578],{"emptyLinePlaceholder":1252},[84,64326,64327,64329,64331],{"class":86,"line":2874},[84,64328,52934],{"class":154},[84,64330,51784],{"class":52449},[84,64332,52456],{"class":154},[19,64334,64335],{},"总结：内容发生改变才回去触发",[198,64337,64339],{"id":64338},"_326-事件对象","3.2.6 事件对象",[23168,64341,64343],{"id":64342},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64345,64346],{},[2643,64347],{"alt":66,"src":64348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64350,64351],{},[2643,64352],{"alt":66,"src":64353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64355,64356],{},"点击一次，就输出了事件对象，它是个对象",[19,64358,64359],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64361,64362],{},[2643,64363],{"alt":66,"src":64364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23168,64366,64368],{"id":64367},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64370,64371],{},[2643,64372],{"alt":66,"src":64373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64375,64376],{},"实现按特殊字符才是实现打印输出效果：",[60,64378,64380],{"className":54216,"code":64379,"language":54218,"meta":66,"style":66},"\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",[39,64381,64382,64390,64395,64409,64417,64422,64427,64432,64437,64442,64447,64452,64457,64462,64466,64470,64478],{"__ignoreMap":66},[84,64383,64384,64386,64388],{"class":86,"line":87},[84,64385,2218],{"class":154},[84,64387,52949],{"class":52449},[84,64389,52456],{"class":154},[84,64391,64392],{"class":86,"line":98},[84,64393,64394],{"class":1378},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[84,64396,64397,64399,64401,64403,64405,64407],{"class":86,"line":106},[84,64398,53293],{"class":154},[84,64400,54970],{"class":52449},[84,64402,54973],{"class":90},[84,64404,867],{"class":154},[84,64406,63845],{"class":158},[84,64408,52456],{"class":154},[84,64410,64411,64413,64415],{"class":86,"line":112},[84,64412,53293],{"class":154},[84,64414,52962],{"class":52449},[84,64416,52456],{"class":154},[84,64418,64419],{"class":86,"line":425},[84,64420,64421],{"class":154},"    \u002F\u002F const btn = document.querySelector('button')\n",[84,64423,64424],{"class":86,"line":2395},[84,64425,64426],{"class":154},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[84,64428,64429],{"class":86,"line":2401},[84,64430,64431],{"class":154},"    \u002F\u002F   console.log(e);\n",[84,64433,64434],{"class":86,"line":2492},[84,64435,64436],{"class":154},"    \u002F\u002F })\n",[84,64438,64439],{"class":86,"line":2498},[84,64440,64441],{"class":154},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[84,64443,64444],{"class":86,"line":2510},[84,64445,64446],{"class":154},"    const input = document.querySelector('input')\n",[84,64448,64449],{"class":86,"line":2793},[84,64450,64451],{"class":154},"    input.addEventListener('keyup', function (e) {\n",[84,64453,64454],{"class":86,"line":2798},[84,64455,64456],{"class":154},"      if (e.key === 'Enter') {\n",[84,64458,64459],{"class":86,"line":2804},[84,64460,64461],{"class":154},"        console.log('我按下了回车键')\n",[84,64463,64464],{"class":86,"line":2809},[84,64465,53547],{"class":154},[84,64467,64468],{"class":86,"line":2823},[84,64469,34613],{"class":154},[84,64471,64472,64474,64476],{"class":86,"line":2828},[84,64473,53566],{"class":154},[84,64475,52962],{"class":52449},[84,64477,52456],{"class":154},[84,64479,64480,64482,64484],{"class":86,"line":2834},[84,64481,52934],{"class":154},[84,64483,52949],{"class":52449},[84,64485,52456],{"class":154},[23168,64487,64489],{"id":64488},"_3263-trim方法","3.2.6.3 trim方法",[19,64491,64492],{},[2643,64493],{"alt":66,"src":64494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64496,64497],{},[2643,64498],{"alt":66,"src":64499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64501,64502],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64504,64505],{},"str.trim()",[198,64507,64509],{"id":64508},"_327-环境对象","3.2.7 环境对象",[19,64511,64512],{},[2643,64513],{"alt":66,"src":64514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64516,64517],{},[2643,64518],{"alt":66,"src":64519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64521,64522],{},[2643,64523],{"alt":66,"src":64524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64526,64527],{},"实际函数调用是window.fn()",[19,64529,64530],{},"普通函数里面this指向的是window",[2315,64532,64533,64536,64539],{},[29,64534,64535],{},"在普通函数下，this指向的是window",[29,64537,64538],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,64540,64541],{},"箭头函数没有this",[19,64543,64544],{},"粗略记法就是：谁调用，this就指向谁",[19,64546,64547],{},[2643,64548],{"alt":66,"src":64549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64551,64552],{},[2643,64553],{"alt":66,"src":64554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64556,64557],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64559,64560],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[60,64562,64564],{"className":54216,"code":64563,"language":54218,"meta":66,"style":66},"\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",[39,64565,64566,64574,64586,64594,64599,64604,64609,64614,64618,64626],{"__ignoreMap":66},[84,64567,64568,64570,64572],{"class":86,"line":87},[84,64569,2218],{"class":154},[84,64571,52949],{"class":52449},[84,64573,52456],{"class":154},[84,64575,64576,64578,64580,64582,64584],{"class":86,"line":98},[84,64577,53293],{"class":154},[84,64579,55036],{"class":52449},[84,64581,55042],{"class":154},[84,64583,55036],{"class":52449},[84,64585,52456],{"class":154},[84,64587,64588,64590,64592],{"class":86,"line":106},[84,64589,53293],{"class":154},[84,64591,52962],{"class":52449},[84,64593,52456],{"class":154},[84,64595,64596],{"class":86,"line":112},[84,64597,64598],{"class":154},"    const button = document.querySelector('button')\n",[84,64600,64601],{"class":86,"line":425},[84,64602,64603],{"class":154},"    button.addEventListener('click', function () {\n",[84,64605,64606],{"class":86,"line":2395},[84,64607,64608],{"class":154},"      \u002F\u002F console.log(this);\n",[84,64610,64611],{"class":86,"line":2401},[84,64612,64613],{"class":154},"      this.style.color = 'pink'\n",[84,64615,64616],{"class":86,"line":2492},[84,64617,34613],{"class":154},[84,64619,64620,64622,64624],{"class":86,"line":2498},[84,64621,53566],{"class":154},[84,64623,52962],{"class":52449},[84,64625,52456],{"class":154},[84,64627,64628,64630,64632],{"class":86,"line":2510},[84,64629,52934],{"class":154},[84,64631,52949],{"class":52449},[84,64633,52456],{"class":154},[198,64635,64637],{"id":64636},"_328-回调函数","3.2.8 回调函数",[19,64639,64640],{},[2643,64641],{"alt":66,"src":64642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64644,64645],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64647,12504],{},[2315,64649,64650,64653,64656],{},[29,64651,64652],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,64654,64655],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,64657,64658],{},"使用匿名函数做为回调函数比较常见",[198,64660,64662],{"id":64661},"_329-tab栏切换","3.2.9 tab栏切换",[19,64664,64665],{},[2643,64666],{"alt":66,"src":64667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[60,64669,64671],{"className":51782,"code":64670,"language":51784,"meta":66,"style":66},"\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",[39,64672,64673,64683,64697,64701,64709,64723,64743,64763,64776,64784,64790,64800,64810,64814,64818,64825,64838,64851,64863,64879,64883,64887,64894,64906,64918,64930,64940,64950,64954,64958,64967,64979,64990,65002,65006,65010,65018,65028,65038,65048,65052,65056,65066,65080,65092,65096,65100,65112,65123,65140,65150,65154,65158,65173,65184,65194,65198,65202,65209,65224,65228,65232,65240,65250,65254,65258,65267,65277,65281,65289,65297,65301,65309,65324,65339,65352,65360,65394,65421,65448,65475,65502,65510,65518,65533,65570,65605,65640,65675,65710,65718,65726,65734,65739,65744,65764,65769,65798,65803,65808,65826,65831,65836,65841,65863,65868,65884,65888,65893,65898,65919,65924,65953,65957,65962,65966,65974,65982,65986],{"__ignoreMap":66},[84,64674,64675,64677,64679,64681],{"class":86,"line":87},[84,64676,52446],{"class":154},[84,64678,52450],{"class":52449},[84,64680,52453],{"class":90},[84,64682,52456],{"class":154},[84,64684,64685,64687,64689,64691,64693,64695],{"class":86,"line":98},[84,64686,2218],{"class":154},[84,64688,51784],{"class":52449},[84,64690,52465],{"class":90},[84,64692,867],{"class":154},[84,64694,52470],{"class":158},[84,64696,52456],{"class":154},[84,64698,64699],{"class":86,"line":106},[84,64700,3578],{"emptyLinePlaceholder":1252},[84,64702,64703,64705,64707],{"class":86,"line":112},[84,64704,2218],{"class":154},[84,64706,52483],{"class":52449},[84,64708,52456],{"class":154},[84,64710,64711,64713,64715,64717,64719,64721],{"class":86,"line":425},[84,64712,53293],{"class":154},[84,64714,52493],{"class":52449},[84,64716,52496],{"class":90},[84,64718,867],{"class":154},[84,64720,52501],{"class":158},[84,64722,60273],{"class":154},[84,64724,64725,64727,64729,64731,64733,64735,64737,64739,64741],{"class":86,"line":2395},[84,64726,53293],{"class":154},[84,64728,52493],{"class":52449},[84,64730,52512],{"class":90},[84,64732,867],{"class":154},[84,64734,52517],{"class":158},[84,64736,52520],{"class":90},[84,64738,867],{"class":154},[84,64740,52525],{"class":158},[84,64742,60273],{"class":154},[84,64744,64745,64747,64749,64751,64753,64755,64757,64759,64761],{"class":86,"line":2401},[84,64746,53293],{"class":154},[84,64748,52493],{"class":52449},[84,64750,16090],{"class":90},[84,64752,867],{"class":154},[84,64754,52540],{"class":158},[84,64756,52520],{"class":90},[84,64758,867],{"class":154},[84,64760,52547],{"class":158},[84,64762,60273],{"class":154},[84,64764,64765,64767,64769,64772,64774],{"class":86,"line":2492},[84,64766,53293],{"class":154},[84,64768,52556],{"class":52449},[84,64770,64771],{"class":154},">tab栏切换\u003C\u002F",[84,64773,52556],{"class":52449},[84,64775,52456],{"class":154},[84,64777,64778,64780,64782],{"class":86,"line":2498},[84,64779,53293],{"class":154},[84,64781,1222],{"class":52449},[84,64783,52456],{"class":154},[84,64785,64786,64788],{"class":86,"line":2510},[84,64787,7576],{"class":52449},[84,64789,16742],{"class":154},[84,64791,64792,64794,64796,64798],{"class":86,"line":2793},[84,64793,55853],{"class":94},[84,64795,52586],{"class":154},[84,64797,1504],{"class":94},[84,64799,2471],{"class":154},[84,64801,64802,64804,64806,64808],{"class":86,"line":2798},[84,64803,55842],{"class":94},[84,64805,52586],{"class":154},[84,64807,1504],{"class":94},[84,64809,2471],{"class":154},[84,64811,64812],{"class":86,"line":2804},[84,64813,3365],{"class":154},[84,64815,64816],{"class":86,"line":2809},[84,64817,3578],{"emptyLinePlaceholder":1252},[84,64819,64820,64823],{"class":86,"line":2823},[84,64821,64822],{"class":90},"    .tab",[84,64824,16742],{"class":154},[84,64826,64827,64829,64831,64834,64836],{"class":86,"line":2828},[84,64828,55918],{"class":94},[84,64830,52586],{"class":154},[84,64832,64833],{"class":94},"590",[84,64835,52641],{"class":129},[84,64837,2471],{"class":154},[84,64839,64840,64842,64844,64847,64849],{"class":86,"line":2834},[84,64841,55932],{"class":94},[84,64843,52586],{"class":154},[84,64845,64846],{"class":94},"340",[84,64848,52641],{"class":129},[84,64850,2471],{"class":154},[84,64852,64853,64855,64857,64859,64861],{"class":86,"line":2855},[84,64854,55853],{"class":94},[84,64856,52586],{"class":154},[84,64858,2008],{"class":94},[84,64860,52641],{"class":129},[84,64862,2471],{"class":154},[84,64864,64865,64867,64869,64871,64873,64875,64877],{"class":86,"line":2860},[84,64866,63123],{"class":94},[84,64868,52586],{"class":154},[84,64870,1529],{"class":94},[84,64872,52641],{"class":129},[84,64874,52670],{"class":94},[84,64876,63390],{"class":94},[84,64878,2471],{"class":154},[84,64880,64881],{"class":86,"line":2874},[84,64882,3365],{"class":154},[84,64884,64885],{"class":86,"line":2879},[84,64886,3578],{"emptyLinePlaceholder":1252},[84,64888,64889,64892],{"class":86,"line":2908},[84,64890,64891],{"class":90},"    .tab-nav",[84,64893,16742],{"class":154},[84,64895,64896,64898,64900,64902,64904],{"class":86,"line":2913},[84,64897,55918],{"class":94},[84,64899,52586],{"class":154},[84,64901,821],{"class":94},[84,64903,1638],{"class":129},[84,64905,2471],{"class":154},[84,64907,64908,64910,64912,64914,64916],{"class":86,"line":2930},[84,64909,55932],{"class":94},[84,64911,52586],{"class":154},[84,64913,2215],{"class":94},[84,64915,52641],{"class":129},[84,64917,2471],{"class":154},[84,64919,64920,64922,64924,64926,64928],{"class":86,"line":2935},[84,64921,58506],{"class":94},[84,64923,52586],{"class":154},[84,64925,2215],{"class":94},[84,64927,52641],{"class":129},[84,64929,2471],{"class":154},[84,64931,64932,64934,64936,64938],{"class":86,"line":2940},[84,64933,56156],{"class":94},[84,64935,52586],{"class":154},[84,64937,52626],{"class":94},[84,64939,2471],{"class":154},[84,64941,64942,64944,64946,64948],{"class":86,"line":2945},[84,64943,56167],{"class":94},[84,64945,52586],{"class":154},[84,64947,52817],{"class":94},[84,64949,2471],{"class":154},[84,64951,64952],{"class":86,"line":2959},[84,64953,3365],{"class":154},[84,64955,64956],{"class":86,"line":2964},[84,64957,3578],{"emptyLinePlaceholder":1252},[84,64959,64960,64962,64965],{"class":86,"line":3755},[84,64961,64891],{"class":90},[84,64963,64964],{"class":52449}," h3",[84,64966,16742],{"class":154},[84,64968,64969,64971,64973,64975,64977],{"class":86,"line":3769},[84,64970,56069],{"class":94},[84,64972,52586],{"class":154},[84,64974,2108],{"class":94},[84,64976,52641],{"class":129},[84,64978,2471],{"class":154},[84,64980,64981,64983,64985,64988],{"class":86,"line":3777},[84,64982,63480],{"class":94},[84,64984,52586],{"class":154},[84,64986,64987],{"class":94},"normal",[84,64989,2471],{"class":154},[84,64991,64992,64994,64996,64998,65000],{"class":86,"line":3782},[84,64993,63146],{"class":94},[84,64995,52586],{"class":154},[84,64997,2008],{"class":94},[84,64999,52641],{"class":129},[84,65001,2471],{"class":154},[84,65003,65004],{"class":86,"line":3788},[84,65005,3365],{"class":154},[84,65007,65008],{"class":86,"line":3794},[84,65009,3578],{"emptyLinePlaceholder":1252},[84,65011,65012,65014,65016],{"class":86,"line":3799},[84,65013,64891],{"class":90},[84,65015,62438],{"class":52449},[84,65017,16742],{"class":154},[84,65019,65020,65022,65024,65026],{"class":86,"line":9120},[84,65021,55879],{"class":94},[84,65023,52586],{"class":154},[84,65025,55884],{"class":94},[84,65027,2471],{"class":154},[84,65029,65030,65032,65034,65036],{"class":86,"line":9144},[84,65031,56156],{"class":94},[84,65033,52586],{"class":154},[84,65035,52626],{"class":94},[84,65037,2471],{"class":154},[84,65039,65040,65042,65044,65046],{"class":86,"line":9149},[84,65041,56167],{"class":94},[84,65043,52586],{"class":154},[84,65045,52729],{"class":94},[84,65047,2471],{"class":154},[84,65049,65050],{"class":86,"line":9155},[84,65051,3365],{"class":154},[84,65053,65054],{"class":86,"line":9182},[84,65055,3578],{"emptyLinePlaceholder":1252},[84,65057,65058,65060,65062,65064],{"class":86,"line":9187},[84,65059,64891],{"class":90},[84,65061,62438],{"class":52449},[84,65063,56222],{"class":52449},[84,65065,16742],{"class":154},[84,65067,65068,65070,65072,65074,65076,65078],{"class":86,"line":9193},[84,65069,55853],{"class":94},[84,65071,52586],{"class":154},[84,65073,1504],{"class":94},[84,65075,10122],{"class":94},[84,65077,52641],{"class":129},[84,65079,2471],{"class":154},[84,65081,65082,65084,65086,65088,65090],{"class":86,"line":9205},[84,65083,56069],{"class":94},[84,65085,52586],{"class":154},[84,65087,1858],{"class":94},[84,65089,52641],{"class":129},[84,65091,2471],{"class":154},[84,65093,65094],{"class":86,"line":9217},[84,65095,3365],{"class":154},[84,65097,65098],{"class":86,"line":9229},[84,65099,3578],{"emptyLinePlaceholder":1252},[84,65101,65102,65104,65106,65108,65110],{"class":86,"line":10888},[84,65103,64891],{"class":90},[84,65105,62438],{"class":52449},[84,65107,56222],{"class":52449},[84,65109,2579],{"class":52449},[84,65111,16742],{"class":154},[84,65113,65114,65117,65119,65121],{"class":86,"line":10913},[84,65115,65116],{"class":94},"      text-decoration",[84,65118,52586],{"class":154},[84,65120,55884],{"class":94},[84,65122,2471],{"class":154},[84,65124,65125,65127,65129,65131,65133,65135,65138],{"class":86,"line":10936},[84,65126,63378],{"class":94},[84,65128,52586],{"class":154},[84,65130,1397],{"class":94},[84,65132,52641],{"class":129},[84,65134,52670],{"class":94},[84,65136,65137],{"class":94}," transparent",[84,65139,2471],{"class":154},[84,65141,65142,65144,65146,65148],{"class":86,"line":10960},[84,65143,58563],{"class":94},[84,65145,52586],{"class":154},[84,65147,63515],{"class":94},[84,65149,2471],{"class":154},[84,65151,65152],{"class":86,"line":10965},[84,65153,3365],{"class":154},[84,65155,65156],{"class":86,"line":10970},[84,65157,3578],{"emptyLinePlaceholder":1252},[84,65159,65160,65162,65164,65166,65168,65171],{"class":86,"line":10975},[84,65161,64891],{"class":90},[84,65163,62438],{"class":52449},[84,65165,56222],{"class":52449},[84,65167,2579],{"class":52449},[84,65169,65170],{"class":90},".active",[84,65172,16742],{"class":154},[84,65174,65175,65177,65179,65182],{"class":86,"line":10984},[84,65176,62937],{"class":94},[84,65178,52586],{"class":154},[84,65180,65181],{"class":94},"#e1251b",[84,65183,2471],{"class":154},[84,65185,65186,65188,65190,65192],{"class":86,"line":10989},[84,65187,58563],{"class":94},[84,65189,52586],{"class":154},[84,65191,65181],{"class":94},[84,65193,2471],{"class":154},[84,65195,65196],{"class":86,"line":10995},[84,65197,3365],{"class":154},[84,65199,65200],{"class":86,"line":11016},[84,65201,3578],{"emptyLinePlaceholder":1252},[84,65203,65204,65207],{"class":86,"line":11022},[84,65205,65206],{"class":90},"    .tab-content",[84,65208,16742],{"class":154},[84,65210,65211,65213,65215,65217,65220,65222],{"class":86,"line":11036},[84,65212,55842],{"class":94},[84,65214,52586],{"class":154},[84,65216,1504],{"class":94},[84,65218,65219],{"class":94}," 16",[84,65221,52641],{"class":129},[84,65223,2471],{"class":154},[84,65225,65226],{"class":86,"line":11042},[84,65227,3365],{"class":154},[84,65229,65230],{"class":86,"line":11069},[84,65231,3578],{"emptyLinePlaceholder":1252},[84,65233,65234,65236,65238],{"class":86,"line":11078},[84,65235,65206],{"class":90},[84,65237,63320],{"class":90},[84,65239,16742],{"class":154},[84,65241,65242,65244,65246,65248],{"class":86,"line":11084},[84,65243,56156],{"class":94},[84,65245,52586],{"class":154},[84,65247,55884],{"class":94},[84,65249,2471],{"class":154},[84,65251,65252],{"class":86,"line":11092},[84,65253,3365],{"class":154},[84,65255,65256],{"class":86,"line":11097},[84,65257,3578],{"emptyLinePlaceholder":1252},[84,65259,65260,65262,65265],{"class":86,"line":17774},[84,65261,65206],{"class":90},[84,65263,65264],{"class":90}," .item.active",[84,65266,16742],{"class":154},[84,65268,65269,65271,65273,65275],{"class":86,"line":17780},[84,65270,56156],{"class":94},[84,65272,52586],{"class":154},[84,65274,62015],{"class":94},[84,65276,2471],{"class":154},[84,65278,65279],{"class":86,"line":17803},[84,65280,3365],{"class":154},[84,65282,65283,65285,65287],{"class":86,"line":17809},[84,65284,53566],{"class":154},[84,65286,1222],{"class":52449},[84,65288,52456],{"class":154},[84,65290,65291,65293,65295],{"class":86,"line":17832},[84,65292,52934],{"class":154},[84,65294,52483],{"class":52449},[84,65296,52456],{"class":154},[84,65298,65299],{"class":86,"line":17846},[84,65300,3578],{"emptyLinePlaceholder":1252},[84,65302,65303,65305,65307],{"class":86,"line":17866},[84,65304,2218],{"class":154},[84,65306,52949],{"class":52449},[84,65308,52456],{"class":154},[84,65310,65311,65313,65315,65317,65319,65322],{"class":86,"line":17872},[84,65312,53293],{"class":154},[84,65314,52760],{"class":52449},[84,65316,54635],{"class":90},[84,65318,867],{"class":154},[84,65320,65321],{"class":158},"\"tab\"",[84,65323,52456],{"class":154},[84,65325,65326,65328,65330,65332,65334,65337],{"class":86,"line":17883},[84,65327,52490],{"class":154},[84,65329,52760],{"class":52449},[84,65331,54635],{"class":90},[84,65333,867],{"class":154},[84,65335,65336],{"class":158},"\"tab-nav\"",[84,65338,52456],{"class":154},[84,65340,65341,65343,65345,65348,65350],{"class":86,"line":17906},[84,65342,56381],{"class":154},[84,65344,198],{"class":52449},[84,65346,65347],{"class":154},">每日特价\u003C\u002F",[84,65349,198],{"class":52449},[84,65351,52456],{"class":154},[84,65353,65354,65356,65358],{"class":86,"line":17928},[84,65355,56381],{"class":154},[84,65357,2315],{"class":52449},[84,65359,52456],{"class":154},[84,65361,65362,65364,65366,65368,65370,65372,65374,65376,65378,65380,65383,65386,65388,65390,65392],{"class":86,"line":17933},[84,65363,56449],{"class":154},[84,65365,29],{"class":52449},[84,65367,62198],{"class":154},[84,65369,208],{"class":52449},[84,65371,54635],{"class":90},[84,65373,867],{"class":154},[84,65375,60852],{"class":158},[84,65377,62203],{"class":90},[84,65379,867],{"class":154},[84,65381,65382],{"class":158},"\"javascript:;\"",[84,65384,65385],{"class":154},">精选\u003C\u002F",[84,65387,208],{"class":52449},[84,65389,56461],{"class":154},[84,65391,29],{"class":52449},[84,65393,52456],{"class":154},[84,65395,65396,65398,65400,65402,65404,65406,65408,65410,65413,65415,65417,65419],{"class":86,"line":17939},[84,65397,56449],{"class":154},[84,65399,29],{"class":52449},[84,65401,62198],{"class":154},[84,65403,208],{"class":52449},[84,65405,62203],{"class":90},[84,65407,867],{"class":154},[84,65409,65382],{"class":158},[84,65411,65412],{"class":154},">美食\u003C\u002F",[84,65414,208],{"class":52449},[84,65416,56461],{"class":154},[84,65418,29],{"class":52449},[84,65420,52456],{"class":154},[84,65422,65423,65425,65427,65429,65431,65433,65435,65437,65440,65442,65444,65446],{"class":86,"line":17953},[84,65424,56449],{"class":154},[84,65426,29],{"class":52449},[84,65428,62198],{"class":154},[84,65430,208],{"class":52449},[84,65432,62203],{"class":90},[84,65434,867],{"class":154},[84,65436,65382],{"class":158},[84,65438,65439],{"class":154},">百货\u003C\u002F",[84,65441,208],{"class":52449},[84,65443,56461],{"class":154},[84,65445,29],{"class":52449},[84,65447,52456],{"class":154},[84,65449,65450,65452,65454,65456,65458,65460,65462,65464,65467,65469,65471,65473],{"class":86,"line":17966},[84,65451,56449],{"class":154},[84,65453,29],{"class":52449},[84,65455,62198],{"class":154},[84,65457,208],{"class":52449},[84,65459,62203],{"class":90},[84,65461,867],{"class":154},[84,65463,65382],{"class":158},[84,65465,65466],{"class":154},">个护\u003C\u002F",[84,65468,208],{"class":52449},[84,65470,56461],{"class":154},[84,65472,29],{"class":52449},[84,65474,52456],{"class":154},[84,65476,65477,65479,65481,65483,65485,65487,65489,65491,65494,65496,65498,65500],{"class":86,"line":17971},[84,65478,56449],{"class":154},[84,65480,29],{"class":52449},[84,65482,62198],{"class":154},[84,65484,208],{"class":52449},[84,65486,62203],{"class":90},[84,65488,867],{"class":154},[84,65490,65382],{"class":158},[84,65492,65493],{"class":154},">预告\u003C\u002F",[84,65495,208],{"class":52449},[84,65497,56461],{"class":154},[84,65499,29],{"class":52449},[84,65501,52456],{"class":154},[84,65503,65504,65506,65508],{"class":86,"line":17985},[84,65505,56554],{"class":154},[84,65507,2315],{"class":52449},[84,65509,52456],{"class":154},[84,65511,65512,65514,65516],{"class":86,"line":17990},[84,65513,52925],{"class":154},[84,65515,52760],{"class":52449},[84,65517,52456],{"class":154},[84,65519,65520,65522,65524,65526,65528,65531],{"class":86,"line":17996},[84,65521,52490],{"class":154},[84,65523,52760],{"class":52449},[84,65525,54635],{"class":90},[84,65527,867],{"class":154},[84,65529,65530],{"class":158},"\"tab-content\"",[84,65532,52456],{"class":154},[84,65534,65535,65537,65539,65541,65543,65546,65548,65550,65552,65554,65557,65559,65561,65563,65566,65568],{"class":86,"line":18001},[84,65536,56381],{"class":154},[84,65538,52760],{"class":52449},[84,65540,54635],{"class":90},[84,65542,867],{"class":154},[84,65544,65545],{"class":158},"\"item active\"",[84,65547,62198],{"class":154},[84,65549,2643],{"class":52449},[84,65551,56386],{"class":90},[84,65553,867],{"class":154},[84,65555,65556],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[84,65558,56394],{"class":90},[84,65560,867],{"class":154},[84,65562,8824],{"class":158},[84,65564,65565],{"class":154}," \u002F>\u003C\u002F",[84,65567,52760],{"class":52449},[84,65569,52456],{"class":154},[84,65571,65572,65574,65576,65578,65580,65582,65584,65586,65588,65590,65593,65595,65597,65599,65601,65603],{"class":86,"line":18015},[84,65573,56381],{"class":154},[84,65575,52760],{"class":52449},[84,65577,54635],{"class":90},[84,65579,867],{"class":154},[84,65581,63769],{"class":158},[84,65583,62198],{"class":154},[84,65585,2643],{"class":52449},[84,65587,56386],{"class":90},[84,65589,867],{"class":154},[84,65591,65592],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[84,65594,56394],{"class":90},[84,65596,867],{"class":154},[84,65598,8824],{"class":158},[84,65600,65565],{"class":154},[84,65602,52760],{"class":52449},[84,65604,52456],{"class":154},[84,65606,65607,65609,65611,65613,65615,65617,65619,65621,65623,65625,65628,65630,65632,65634,65636,65638],{"class":86,"line":18020},[84,65608,56381],{"class":154},[84,65610,52760],{"class":52449},[84,65612,54635],{"class":90},[84,65614,867],{"class":154},[84,65616,63769],{"class":158},[84,65618,62198],{"class":154},[84,65620,2643],{"class":52449},[84,65622,56386],{"class":90},[84,65624,867],{"class":154},[84,65626,65627],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[84,65629,56394],{"class":90},[84,65631,867],{"class":154},[84,65633,8824],{"class":158},[84,65635,65565],{"class":154},[84,65637,52760],{"class":52449},[84,65639,52456],{"class":154},[84,65641,65642,65644,65646,65648,65650,65652,65654,65656,65658,65660,65663,65665,65667,65669,65671,65673],{"class":86,"line":18025},[84,65643,56381],{"class":154},[84,65645,52760],{"class":52449},[84,65647,54635],{"class":90},[84,65649,867],{"class":154},[84,65651,63769],{"class":158},[84,65653,62198],{"class":154},[84,65655,2643],{"class":52449},[84,65657,56386],{"class":90},[84,65659,867],{"class":154},[84,65661,65662],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[84,65664,56394],{"class":90},[84,65666,867],{"class":154},[84,65668,8824],{"class":158},[84,65670,65565],{"class":154},[84,65672,52760],{"class":52449},[84,65674,52456],{"class":154},[84,65676,65677,65679,65681,65683,65685,65687,65689,65691,65693,65695,65698,65700,65702,65704,65706,65708],{"class":86,"line":18039},[84,65678,56381],{"class":154},[84,65680,52760],{"class":52449},[84,65682,54635],{"class":90},[84,65684,867],{"class":154},[84,65686,63769],{"class":158},[84,65688,62198],{"class":154},[84,65690,2643],{"class":52449},[84,65692,56386],{"class":90},[84,65694,867],{"class":154},[84,65696,65697],{"class":158},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[84,65699,56394],{"class":90},[84,65701,867],{"class":154},[84,65703,8824],{"class":158},[84,65705,65565],{"class":154},[84,65707,52760],{"class":52449},[84,65709,52456],{"class":154},[84,65711,65712,65714,65716],{"class":86,"line":18051},[84,65713,52925],{"class":154},[84,65715,52760],{"class":52449},[84,65717,52456],{"class":154},[84,65719,65720,65722,65724],{"class":86,"line":18056},[84,65721,53566],{"class":154},[84,65723,52760],{"class":52449},[84,65725,52456],{"class":154},[84,65727,65728,65730,65732],{"class":86,"line":18069},[84,65729,53293],{"class":154},[84,65731,52962],{"class":52449},[84,65733,52456],{"class":154},[84,65735,65736],{"class":86,"line":18074},[84,65737,65738],{"class":1378},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[84,65740,65741],{"class":86,"line":18079},[84,65742,65743],{"class":1378},"    \u002F\u002F 1.1 获取 a 元素 \n",[84,65745,65746,65748,65751,65753,65755,65757,65759,65762],{"class":86,"line":18084},[84,65747,12393],{"class":129},[84,65749,65750],{"class":94}," as",[84,65752,14735],{"class":129},[84,65754,55544],{"class":154},[84,65756,56828],{"class":90},[84,65758,155],{"class":154},[84,65760,65761],{"class":158},"'.tab-nav a'",[84,65763,162],{"class":154},[84,65765,65766],{"class":86,"line":18097},[84,65767,65768],{"class":1378},"    \u002F\u002F console.log(as) \n",[84,65770,65771,65773,65775,65777,65779,65781,65783,65785,65787,65790,65792,65794,65796],{"class":86,"line":18102},[84,65772,4379],{"class":129},[84,65774,2839],{"class":154},[84,65776,52996],{"class":129},[84,65778,10610],{"class":154},[84,65780,867],{"class":129},[84,65782,5271],{"class":94},[84,65784,10617],{"class":154},[84,65786,2218],{"class":129},[84,65788,65789],{"class":154}," as.",[84,65791,53117],{"class":94},[84,65793,4392],{"class":154},[84,65795,3470],{"class":129},[84,65797,13613],{"class":154},[84,65799,65800],{"class":86,"line":33785},[84,65801,65802],{"class":1378},"      \u002F\u002F console.log(as[i])\n",[84,65804,65805],{"class":86,"line":33791},[84,65806,65807],{"class":1378},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[84,65809,65810,65813,65815,65817,65820,65822,65824],{"class":86,"line":33797},[84,65811,65812],{"class":154},"      as[i].",[84,65814,58960],{"class":90},[84,65816,155],{"class":154},[84,65818,65819],{"class":158},"'mouseenter'",[84,65821,846],{"class":154},[84,65823,55596],{"class":129},[84,65825,55599],{"class":154},[84,65827,65828],{"class":86,"line":33803},[84,65829,65830],{"class":1378},"        \u002F\u002F console.log('鼠标经过')\n",[84,65832,65833],{"class":86,"line":33809},[84,65834,65835],{"class":1378},"        \u002F\u002F 排他思想  \n",[84,65837,65838],{"class":86,"line":33820},[84,65839,65840],{"class":1378},"        \u002F\u002F 干掉别人 移除类active\n",[84,65842,65843,65845,65847,65849,65852,65854,65856,65858,65861],{"class":86,"line":33826},[84,65844,53074],{"class":154},[84,65846,55547],{"class":90},[84,65848,155],{"class":154},[84,65850,65851],{"class":158},"'.tab-nav .active'",[84,65853,58150],{"class":154},[84,65855,58153],{"class":90},[84,65857,155],{"class":154},[84,65859,65860],{"class":158},"'active'",[84,65862,162],{"class":154},[84,65864,65865],{"class":86,"line":33846},[84,65866,65867],{"class":1378},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[84,65869,65870,65873,65876,65878,65880,65882],{"class":86,"line":33852},[84,65871,65872],{"class":94},"        this",[84,65874,65875],{"class":154},".classList.",[84,65877,6508],{"class":90},[84,65879,155],{"class":154},[84,65881,65860],{"class":158},[84,65883,162],{"class":154},[84,65885,65886],{"class":86,"line":33863},[84,65887,3578],{"emptyLinePlaceholder":1252},[84,65889,65890],{"class":86,"line":33869},[84,65891,65892],{"class":1378},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[84,65894,65895],{"class":86,"line":33875},[84,65896,65897],{"class":1378},"        \u002F\u002F 干掉别人\n",[84,65899,65900,65902,65904,65906,65909,65911,65913,65915,65917],{"class":86,"line":33881},[84,65901,53074],{"class":154},[84,65903,55547],{"class":90},[84,65905,155],{"class":154},[84,65907,65908],{"class":158},"'.tab-content .active'",[84,65910,58150],{"class":154},[84,65912,58153],{"class":90},[84,65914,155],{"class":154},[84,65916,65860],{"class":158},[84,65918,162],{"class":154},[84,65920,65921],{"class":86,"line":33887},[84,65922,65923],{"class":1378},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[84,65925,65926,65928,65930,65932,65935,65937,65939,65941,65943,65945,65947,65949,65951],{"class":86,"line":33893},[84,65927,53074],{"class":154},[84,65929,55547],{"class":90},[84,65931,155],{"class":154},[84,65933,65934],{"class":158},"`.tab-content .item:nth-child(${",[84,65936,1751],{"class":154},[84,65938,136],{"class":129},[84,65940,133],{"class":94},[84,65942,58179],{"class":158},[84,65944,58150],{"class":154},[84,65946,6508],{"class":90},[84,65948,155],{"class":154},[84,65950,65860],{"class":158},[84,65952,162],{"class":154},[84,65954,65955],{"class":86,"line":33899},[84,65956,3578],{"emptyLinePlaceholder":1252},[84,65958,65959],{"class":86,"line":33905},[84,65960,65961],{"class":154},"      })\n",[84,65963,65964],{"class":86,"line":33925},[84,65965,3365],{"class":154},[84,65967,65968,65970,65972],{"class":86,"line":33931},[84,65969,53566],{"class":154},[84,65971,52962],{"class":52449},[84,65973,52456],{"class":154},[84,65975,65976,65978,65980],{"class":86,"line":33947},[84,65977,52934],{"class":154},[84,65979,52949],{"class":52449},[84,65981,52456],{"class":154},[84,65983,65984],{"class":86,"line":33953},[84,65985,3578],{"emptyLinePlaceholder":1252},[84,65987,65988,65990,65992],{"class":86,"line":33967},[84,65989,52934],{"class":154},[84,65991,51784],{"class":52449},[84,65993,52456],{"class":154},[19,65995,65996],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65998,65999],{},"在监听事件中，this指向的就是他的调用者",[19,66001,66002],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66004,54869],{},[19,66006,66007],{},"(function () {",[19,66009,66010],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66012,66013],{},"list.addEventListener('click', function (e) {",[19,66015,66016],{},"if (e.target.tagName === 'A') {",[19,66018,66019],{},"\u002F\u002F 排他思想",[19,66021,66022],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66024,66025],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66027,66028],{},"\u002F\u002F console.log(old);",[19,66030,66031],{},"\u002F\u002F 判断",[19,66033,66034],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66036,66037],{},"if (old) old.classList.remove('active')",[19,66039,66040],{},"e.target.classList.add('active')",[19,66042,2254],{},[19,66044,53613],{},[19,66046,66047],{},"})();",[198,66049,66051],{"id":66050},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[60,66053,66055],{"className":51782,"code":66054,"language":51784,"meta":66,"style":66},"\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",[39,66056,66057,66067,66071,66079,66083,66097,66111,66123,66131,66137,66147,66157,66161,66165,66172,66184,66195,66212,66225,66239,66249,66253,66257,66264,66275,66293,66303,66315,66319,66323,66330,66347,66358,66370,66374,66378,66385,66397,66401,66409,66417,66421,66429,66437,66445,66460,66504,66512,66525,66538,66551,66559,66567,66575,66603,66611,66623,66636,66649,66657,66665,66673,66699,66707,66720,66732,66745,66753,66761,66769,66795,66803,66816,66828,66841,66849,66857,66865,66870,66890,66895,66915,66920,66937,66942,66950,66955,66984,66997,67001,67005,67010,67014,67042,67047,67064,67069,67074,67079,67084,67110,67114,67118,67126,67134,67138],{"__ignoreMap":66},[84,66058,66059,66061,66063,66065],{"class":86,"line":87},[84,66060,52446],{"class":154},[84,66062,52450],{"class":52449},[84,66064,52453],{"class":90},[84,66066,52456],{"class":154},[84,66068,66069],{"class":86,"line":98},[84,66070,3578],{"emptyLinePlaceholder":1252},[84,66072,66073,66075,66077],{"class":86,"line":106},[84,66074,2218],{"class":154},[84,66076,51784],{"class":52449},[84,66078,52456],{"class":154},[84,66080,66081],{"class":86,"line":112},[84,66082,3578],{"emptyLinePlaceholder":1252},[84,66084,66085,66087,66089,66091,66093,66095],{"class":86,"line":425},[84,66086,2218],{"class":154},[84,66088,52483],{"class":52449},[84,66090,52465],{"class":90},[84,66092,867],{"class":154},[84,66094,52470],{"class":158},[84,66096,52456],{"class":154},[84,66098,66099,66101,66103,66105,66107,66109],{"class":86,"line":2395},[84,66100,53293],{"class":154},[84,66102,52493],{"class":52449},[84,66104,52496],{"class":90},[84,66106,867],{"class":154},[84,66108,52501],{"class":158},[84,66110,52456],{"class":154},[84,66112,66113,66115,66117,66119,66121],{"class":86,"line":2401},[84,66114,53293],{"class":154},[84,66116,52556],{"class":52449},[84,66118,56461],{"class":154},[84,66120,52556],{"class":52449},[84,66122,52456],{"class":154},[84,66124,66125,66127,66129],{"class":86,"line":2492},[84,66126,53293],{"class":154},[84,66128,1222],{"class":52449},[84,66130,52456],{"class":154},[84,66132,66133,66135],{"class":86,"line":2498},[84,66134,7576],{"class":52449},[84,66136,16742],{"class":154},[84,66138,66139,66141,66143,66145],{"class":86,"line":2510},[84,66140,55853],{"class":94},[84,66142,52586],{"class":154},[84,66144,1504],{"class":94},[84,66146,2471],{"class":154},[84,66148,66149,66151,66153,66155],{"class":86,"line":2793},[84,66150,55842],{"class":94},[84,66152,52586],{"class":154},[84,66154,1504],{"class":94},[84,66156,2471],{"class":154},[84,66158,66159],{"class":86,"line":2798},[84,66160,3365],{"class":154},[84,66162,66163],{"class":86,"line":2804},[84,66164,3578],{"emptyLinePlaceholder":1252},[84,66166,66167,66170],{"class":86,"line":2809},[84,66168,66169],{"class":52449},"    table",[84,66171,16742],{"class":154},[84,66173,66174,66177,66179,66182],{"class":86,"line":2823},[84,66175,66176],{"class":94},"      border-collapse",[84,66178,52586],{"class":154},[84,66180,66181],{"class":94},"collapse",[84,66183,2471],{"class":154},[84,66185,66186,66189,66191,66193],{"class":86,"line":2828},[84,66187,66188],{"class":94},"      border-spacing",[84,66190,52586],{"class":154},[84,66192,1504],{"class":94},[84,66194,2471],{"class":154},[84,66196,66197,66199,66201,66203,66205,66207,66210],{"class":86,"line":2834},[84,66198,63123],{"class":94},[84,66200,52586],{"class":154},[84,66202,1529],{"class":94},[84,66204,52641],{"class":129},[84,66206,52670],{"class":94},[84,66208,66209],{"class":94}," #c0c0c0",[84,66211,2471],{"class":154},[84,66213,66214,66216,66218,66221,66223],{"class":86,"line":2855},[84,66215,55918],{"class":94},[84,66217,52586],{"class":154},[84,66219,66220],{"class":94},"500",[84,66222,52641],{"class":129},[84,66224,2471],{"class":154},[84,66226,66227,66229,66231,66233,66235,66237],{"class":86,"line":2860},[84,66228,55853],{"class":94},[84,66230,52586],{"class":154},[84,66232,821],{"class":94},[84,66234,52641],{"class":129},[84,66236,52705],{"class":94},[84,66238,2471],{"class":154},[84,66240,66241,66243,66245,66247],{"class":86,"line":2874},[84,66242,58433],{"class":94},[84,66244,52586],{"class":154},[84,66246,52741],{"class":94},[84,66248,2471],{"class":154},[84,66250,66251],{"class":86,"line":2879},[84,66252,3365],{"class":154},[84,66254,66255],{"class":86,"line":2908},[84,66256,3578],{"emptyLinePlaceholder":1252},[84,66258,66259,66262],{"class":86,"line":2913},[84,66260,66261],{"class":52449},"    th",[84,66263,16742],{"class":154},[84,66265,66266,66268,66270,66273],{"class":86,"line":2930},[84,66267,56031],{"class":94},[84,66269,52586],{"class":154},[84,66271,66272],{"class":94},"#09c",[84,66274,2471],{"class":154},[84,66276,66277,66280,66282,66284,66286,66288,66291],{"class":86,"line":2935},[84,66278,66279],{"class":94},"      font",[84,66281,52586],{"class":154},[84,66283,63485],{"class":94},[84,66285,65219],{"class":94},[84,66287,52641],{"class":129},[84,66289,66290],{"class":158}," \"微软雅黑\"",[84,66292,2471],{"class":154},[84,66294,66295,66297,66299,66301],{"class":86,"line":2940},[84,66296,58563],{"class":94},[84,66298,52586],{"class":154},[84,66300,61988],{"class":94},[84,66302,2471],{"class":154},[84,66304,66305,66307,66309,66311,66313],{"class":86,"line":2945},[84,66306,55932],{"class":94},[84,66308,52586],{"class":154},[84,66310,2108],{"class":94},[84,66312,52641],{"class":129},[84,66314,2471],{"class":154},[84,66316,66317],{"class":86,"line":2959},[84,66318,3365],{"class":154},[84,66320,66321],{"class":86,"line":2964},[84,66322,3578],{"emptyLinePlaceholder":1252},[84,66324,66325,66328],{"class":86,"line":3755},[84,66326,66327],{"class":52449},"    td",[84,66329,16742],{"class":154},[84,66331,66332,66334,66336,66338,66340,66342,66345],{"class":86,"line":3769},[84,66333,63123],{"class":94},[84,66335,52586],{"class":154},[84,66337,1529],{"class":94},[84,66339,52641],{"class":129},[84,66341,52670],{"class":94},[84,66343,66344],{"class":94}," #d0d0d0",[84,66346,2471],{"class":154},[84,66348,66349,66351,66353,66356],{"class":86,"line":3777},[84,66350,58563],{"class":94},[84,66352,52586],{"class":154},[84,66354,66355],{"class":94},"#404060",[84,66357,2471],{"class":154},[84,66359,66360,66362,66364,66366,66368],{"class":86,"line":3782},[84,66361,55842],{"class":94},[84,66363,52586],{"class":154},[84,66365,1756],{"class":94},[84,66367,52641],{"class":129},[84,66369,2471],{"class":154},[84,66371,66372],{"class":86,"line":3788},[84,66373,3365],{"class":154},[84,66375,66376],{"class":86,"line":3794},[84,66377,3578],{"emptyLinePlaceholder":1252},[84,66379,66380,66383],{"class":86,"line":3799},[84,66381,66382],{"class":90},"    .allCheck",[84,66384,16742],{"class":154},[84,66386,66387,66389,66391,66393,66395],{"class":86,"line":9120},[84,66388,55918],{"class":94},[84,66390,52586],{"class":154},[84,66392,1921],{"class":94},[84,66394,52641],{"class":129},[84,66396,2471],{"class":154},[84,66398,66399],{"class":86,"line":9144},[84,66400,3365],{"class":154},[84,66402,66403,66405,66407],{"class":86,"line":9149},[84,66404,53566],{"class":154},[84,66406,1222],{"class":52449},[84,66408,52456],{"class":154},[84,66410,66411,66413,66415],{"class":86,"line":9155},[84,66412,52934],{"class":154},[84,66414,52483],{"class":52449},[84,66416,52456],{"class":154},[84,66418,66419],{"class":86,"line":9182},[84,66420,3578],{"emptyLinePlaceholder":1252},[84,66422,66423,66425,66427],{"class":86,"line":9187},[84,66424,2218],{"class":154},[84,66426,52949],{"class":52449},[84,66428,52456],{"class":154},[84,66430,66431,66433,66435],{"class":86,"line":9193},[84,66432,53293],{"class":154},[84,66434,458],{"class":52449},[84,66436,52456],{"class":154},[84,66438,66439,66441,66443],{"class":86,"line":9205},[84,66440,52490],{"class":154},[84,66442,464],{"class":52449},[84,66444,52456],{"class":154},[84,66446,66447,66449,66451,66453,66455,66458],{"class":86,"line":9217},[84,66448,56381],{"class":154},[84,66450,467],{"class":52449},[84,66452,54635],{"class":90},[84,66454,867],{"class":154},[84,66456,66457],{"class":158},"\"allCheck\"",[84,66459,52456],{"class":154},[84,66461,66462,66464,66466,66468,66470,66472,66474,66476,66478,66480,66482,66485,66488,66490,66492,66494,66497,66500,66502],{"class":86,"line":9229},[84,66463,56449],{"class":154},[84,66465,54970],{"class":52449},[84,66467,54973],{"class":90},[84,66469,867],{"class":154},[84,66471,54978],{"class":158},[84,66473,16090],{"class":90},[84,66475,867],{"class":154},[84,66477,8824],{"class":158},[84,66479,16129],{"class":90},[84,66481,867],{"class":154},[84,66483,66484],{"class":158},"\"checkAll\"",[84,66486,66487],{"class":154},"> \u003C",[84,66489,84],{"class":52449},[84,66491,54635],{"class":90},[84,66493,867],{"class":154},[84,66495,66496],{"class":158},"\"all\"",[84,66498,66499],{"class":154},">全选\u003C\u002F",[84,66501,84],{"class":52449},[84,66503,52456],{"class":154},[84,66505,66506,66508,66510],{"class":86,"line":10888},[84,66507,56554],{"class":154},[84,66509,467],{"class":52449},[84,66511,52456],{"class":154},[84,66513,66514,66516,66518,66521,66523],{"class":86,"line":10913},[84,66515,56381],{"class":154},[84,66517,467],{"class":52449},[84,66519,66520],{"class":154},">商品\u003C\u002F",[84,66522,467],{"class":52449},[84,66524,52456],{"class":154},[84,66526,66527,66529,66531,66534,66536],{"class":86,"line":10936},[84,66528,56381],{"class":154},[84,66530,467],{"class":52449},[84,66532,66533],{"class":154},">商家\u003C\u002F",[84,66535,467],{"class":52449},[84,66537,52456],{"class":154},[84,66539,66540,66542,66544,66547,66549],{"class":86,"line":10960},[84,66541,56381],{"class":154},[84,66543,467],{"class":52449},[84,66545,66546],{"class":154},">价格\u003C\u002F",[84,66548,467],{"class":52449},[84,66550,52456],{"class":154},[84,66552,66553,66555,66557],{"class":86,"line":10965},[84,66554,52925],{"class":154},[84,66556,464],{"class":52449},[84,66558,52456],{"class":154},[84,66560,66561,66563,66565],{"class":86,"line":10970},[84,66562,52490],{"class":154},[84,66564,464],{"class":52449},[84,66566,52456],{"class":154},[84,66568,66569,66571,66573],{"class":86,"line":10975},[84,66570,56381],{"class":154},[84,66572,479],{"class":52449},[84,66574,52456],{"class":154},[84,66576,66577,66579,66581,66583,66585,66587,66589,66591,66594,66596,66598,66601],{"class":86,"line":10984},[84,66578,56449],{"class":154},[84,66580,54970],{"class":52449},[84,66582,54973],{"class":90},[84,66584,867],{"class":154},[84,66586,54978],{"class":158},[84,66588,16090],{"class":90},[84,66590,867],{"class":154},[84,66592,66593],{"class":158},"\"check\"",[84,66595,54635],{"class":90},[84,66597,867],{"class":154},[84,66599,66600],{"class":158},"\"ck\"",[84,66602,52456],{"class":154},[84,66604,66605,66607,66609],{"class":86,"line":10989},[84,66606,56554],{"class":154},[84,66608,479],{"class":52449},[84,66610,52456],{"class":154},[84,66612,66613,66615,66617,66619,66621],{"class":86,"line":10995},[84,66614,56381],{"class":154},[84,66616,479],{"class":52449},[84,66618,62319],{"class":154},[84,66620,479],{"class":52449},[84,66622,52456],{"class":154},[84,66624,66625,66627,66629,66632,66634],{"class":86,"line":11016},[84,66626,56381],{"class":154},[84,66628,479],{"class":52449},[84,66630,66631],{"class":154},">小米\u003C\u002F",[84,66633,479],{"class":52449},[84,66635,52456],{"class":154},[84,66637,66638,66640,66642,66645,66647],{"class":86,"line":11022},[84,66639,56381],{"class":154},[84,66641,479],{"class":52449},[84,66643,66644],{"class":154},">￥1999\u003C\u002F",[84,66646,479],{"class":52449},[84,66648,52456],{"class":154},[84,66650,66651,66653,66655],{"class":86,"line":11036},[84,66652,52925],{"class":154},[84,66654,464],{"class":52449},[84,66656,52456],{"class":154},[84,66658,66659,66661,66663],{"class":86,"line":11042},[84,66660,52490],{"class":154},[84,66662,464],{"class":52449},[84,66664,52456],{"class":154},[84,66666,66667,66669,66671],{"class":86,"line":11069},[84,66668,56381],{"class":154},[84,66670,479],{"class":52449},[84,66672,52456],{"class":154},[84,66674,66675,66677,66679,66681,66683,66685,66687,66689,66691,66693,66695,66697],{"class":86,"line":11078},[84,66676,56449],{"class":154},[84,66678,54970],{"class":52449},[84,66680,54973],{"class":90},[84,66682,867],{"class":154},[84,66684,54978],{"class":158},[84,66686,16090],{"class":90},[84,66688,867],{"class":154},[84,66690,66593],{"class":158},[84,66692,54635],{"class":90},[84,66694,867],{"class":154},[84,66696,66600],{"class":158},[84,66698,52456],{"class":154},[84,66700,66701,66703,66705],{"class":86,"line":11084},[84,66702,56554],{"class":154},[84,66704,479],{"class":52449},[84,66706,52456],{"class":154},[84,66708,66709,66711,66713,66716,66718],{"class":86,"line":11092},[84,66710,56381],{"class":154},[84,66712,479],{"class":52449},[84,66714,66715],{"class":154},">小米净水器\u003C\u002F",[84,66717,479],{"class":52449},[84,66719,52456],{"class":154},[84,66721,66722,66724,66726,66728,66730],{"class":86,"line":11097},[84,66723,56381],{"class":154},[84,66725,479],{"class":52449},[84,66727,66631],{"class":154},[84,66729,479],{"class":52449},[84,66731,52456],{"class":154},[84,66733,66734,66736,66738,66741,66743],{"class":86,"line":17774},[84,66735,56381],{"class":154},[84,66737,479],{"class":52449},[84,66739,66740],{"class":154},">￥4999\u003C\u002F",[84,66742,479],{"class":52449},[84,66744,52456],{"class":154},[84,66746,66747,66749,66751],{"class":86,"line":17780},[84,66748,52925],{"class":154},[84,66750,464],{"class":52449},[84,66752,52456],{"class":154},[84,66754,66755,66757,66759],{"class":86,"line":17803},[84,66756,52490],{"class":154},[84,66758,464],{"class":52449},[84,66760,52456],{"class":154},[84,66762,66763,66765,66767],{"class":86,"line":17809},[84,66764,56381],{"class":154},[84,66766,479],{"class":52449},[84,66768,52456],{"class":154},[84,66770,66771,66773,66775,66777,66779,66781,66783,66785,66787,66789,66791,66793],{"class":86,"line":17832},[84,66772,56449],{"class":154},[84,66774,54970],{"class":52449},[84,66776,54973],{"class":90},[84,66778,867],{"class":154},[84,66780,54978],{"class":158},[84,66782,16090],{"class":90},[84,66784,867],{"class":154},[84,66786,66593],{"class":158},[84,66788,54635],{"class":90},[84,66790,867],{"class":154},[84,66792,66600],{"class":158},[84,66794,52456],{"class":154},[84,66796,66797,66799,66801],{"class":86,"line":17846},[84,66798,56554],{"class":154},[84,66800,479],{"class":52449},[84,66802,52456],{"class":154},[84,66804,66805,66807,66809,66812,66814],{"class":86,"line":17866},[84,66806,56381],{"class":154},[84,66808,479],{"class":52449},[84,66810,66811],{"class":154},">小米电视\u003C\u002F",[84,66813,479],{"class":52449},[84,66815,52456],{"class":154},[84,66817,66818,66820,66822,66824,66826],{"class":86,"line":17872},[84,66819,56381],{"class":154},[84,66821,479],{"class":52449},[84,66823,66631],{"class":154},[84,66825,479],{"class":52449},[84,66827,52456],{"class":154},[84,66829,66830,66832,66834,66837,66839],{"class":86,"line":17883},[84,66831,56381],{"class":154},[84,66833,479],{"class":52449},[84,66835,66836],{"class":154},">￥5999\u003C\u002F",[84,66838,479],{"class":52449},[84,66840,52456],{"class":154},[84,66842,66843,66845,66847],{"class":86,"line":17906},[84,66844,52925],{"class":154},[84,66846,464],{"class":52449},[84,66848,52456],{"class":154},[84,66850,66851,66853,66855],{"class":86,"line":17928},[84,66852,53566],{"class":154},[84,66854,458],{"class":52449},[84,66856,52456],{"class":154},[84,66858,66859,66861,66863],{"class":86,"line":17933},[84,66860,53293],{"class":154},[84,66862,52962],{"class":52449},[84,66864,52456],{"class":154},[84,66866,66867],{"class":86,"line":17939},[84,66868,66869],{"class":1378},"    \u002F\u002F 1. 获取大复选框\n",[84,66871,66872,66874,66877,66879,66881,66883,66885,66888],{"class":86,"line":17953},[84,66873,12393],{"class":129},[84,66875,66876],{"class":94}," checkAll",[84,66878,14735],{"class":129},[84,66880,55544],{"class":154},[84,66882,55547],{"class":90},[84,66884,155],{"class":154},[84,66886,66887],{"class":158},"'#checkAll'",[84,66889,162],{"class":154},[84,66891,66892],{"class":86,"line":17966},[84,66893,66894],{"class":1378},"    \u002F\u002F 2. 获取所有的小复选框\n",[84,66896,66897,66899,66902,66904,66906,66908,66910,66913],{"class":86,"line":17971},[84,66898,12393],{"class":129},[84,66900,66901],{"class":94}," cks",[84,66903,14735],{"class":129},[84,66905,55544],{"class":154},[84,66907,56828],{"class":90},[84,66909,155],{"class":154},[84,66911,66912],{"class":158},"'.ck'",[84,66914,162],{"class":154},[84,66916,66917],{"class":86,"line":17985},[84,66918,66919],{"class":1378},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[84,66921,66922,66925,66927,66929,66931,66933,66935],{"class":86,"line":17990},[84,66923,66924],{"class":154},"    checkAll.",[84,66926,58960],{"class":90},[84,66928,155],{"class":154},[84,66930,58965],{"class":158},[84,66932,846],{"class":154},[84,66934,55596],{"class":129},[84,66936,55599],{"class":154},[84,66938,66939],{"class":86,"line":17996},[84,66940,66941],{"class":1378},"      \u002F\u002F 得到当前大复选框的选中状态\n",[84,66943,66944,66947],{"class":86,"line":18001},[84,66945,66946],{"class":1378},"      \u002F\u002F console.log(checkAll.checked)",[84,66948,66949],{"class":1378},"  \u002F\u002F 得到 是 true 或者是 false\n",[84,66951,66952],{"class":86,"line":18015},[84,66953,66954],{"class":1378},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[84,66956,66957,66959,66961,66963,66965,66967,66969,66971,66973,66976,66978,66980,66982],{"class":86,"line":18020},[84,66958,53433],{"class":129},[84,66960,2839],{"class":154},[84,66962,52996],{"class":129},[84,66964,10610],{"class":154},[84,66966,867],{"class":129},[84,66968,5271],{"class":94},[84,66970,10617],{"class":154},[84,66972,2218],{"class":129},[84,66974,66975],{"class":154}," cks.",[84,66977,53117],{"class":94},[84,66979,4392],{"class":154},[84,66981,3470],{"class":129},[84,66983,13613],{"class":154},[84,66985,66986,66989,66991,66994],{"class":86,"line":18025},[84,66987,66988],{"class":154},"        cks[i].checked ",[84,66990,867],{"class":129},[84,66992,66993],{"class":94}," this",[84,66995,66996],{"class":154},".checked\n",[84,66998,66999],{"class":86,"line":18039},[84,67000,53547],{"class":154},[84,67002,67003],{"class":86,"line":18051},[84,67004,34613],{"class":154},[84,67006,67007],{"class":86,"line":18056},[84,67008,67009],{"class":1378},"    \u002F\u002F 5. 小复选框控制大复选框\n",[84,67011,67012],{"class":86,"line":18069},[84,67013,3578],{"emptyLinePlaceholder":1252},[84,67015,67016,67018,67020,67022,67024,67026,67028,67030,67032,67034,67036,67038,67040],{"class":86,"line":18074},[84,67017,4379],{"class":129},[84,67019,2839],{"class":154},[84,67021,52996],{"class":129},[84,67023,10610],{"class":154},[84,67025,867],{"class":129},[84,67027,5271],{"class":94},[84,67029,10617],{"class":154},[84,67031,2218],{"class":129},[84,67033,66975],{"class":154},[84,67035,53117],{"class":94},[84,67037,4392],{"class":154},[84,67039,3470],{"class":129},[84,67041,13613],{"class":154},[84,67043,67044],{"class":86,"line":18079},[84,67045,67046],{"class":1378},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[84,67048,67049,67052,67054,67056,67058,67060,67062],{"class":86,"line":18084},[84,67050,67051],{"class":154},"      cks[i].",[84,67053,58960],{"class":90},[84,67055,155],{"class":154},[84,67057,58965],{"class":158},[84,67059,846],{"class":154},[84,67061,55596],{"class":129},[84,67063,55599],{"class":154},[84,67065,67066],{"class":86,"line":18097},[84,67067,67068],{"class":1378},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[84,67070,67071],{"class":86,"line":18102},[84,67072,67073],{"class":1378},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[84,67075,67076],{"class":86,"line":33785},[84,67077,67078],{"class":1378},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[84,67080,67081],{"class":86,"line":33791},[84,67082,67083],{"class":1378},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[84,67085,67086,67089,67091,67093,67095,67097,67100,67102,67104,67106,67108],{"class":86,"line":33797},[84,67087,67088],{"class":154},"        checkAll.checked ",[84,67090,867],{"class":129},[84,67092,55544],{"class":154},[84,67094,56828],{"class":90},[84,67096,155],{"class":154},[84,67098,67099],{"class":158},"'.ck:checked'",[84,67101,31980],{"class":154},[84,67103,53117],{"class":94},[84,67105,59052],{"class":129},[84,67107,66975],{"class":154},[84,67109,56978],{"class":94},[84,67111,67112],{"class":86,"line":33803},[84,67113,65961],{"class":154},[84,67115,67116],{"class":86,"line":33809},[84,67117,3365],{"class":154},[84,67119,67120,67122,67124],{"class":86,"line":33820},[84,67121,53566],{"class":154},[84,67123,52962],{"class":52449},[84,67125,52456],{"class":154},[84,67127,67128,67130,67132],{"class":86,"line":33826},[84,67129,52934],{"class":154},[84,67131,52949],{"class":52449},[84,67133,52456],{"class":154},[84,67135,67136],{"class":86,"line":33846},[84,67137,3578],{"emptyLinePlaceholder":1252},[84,67139,67140,67142,67144],{"class":86,"line":33852},[84,67141,52934],{"class":154},[84,67143,51784],{"class":52449},[84,67145,52456],{"class":154},[19,67147,67148],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67150,67151],{},"用好之间比较得到的布尔值！！！",[19,67153,67154,67155,67158,67159,2839,67162,1893,67164,67167],{},"在 JS 里访问的时候，",[39,67156,67157],{},"checkbox.checked"," 是一个 ",[1464,67160,67161],{},"布尔值",[39,67163,2543],{},[39,67165,67166],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67169,67170,67171,67174,67175],{},"HTML 的 ",[39,67172,67173],{},"checked=\"checked\""," 只是 ",[1464,67176,67177,67178,67181],{},"初始值；JS 的 ",[39,67179,67180],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67183,67184],{},"：checked是一个伪类选择器",[19,67186,67187],{},[2643,67188],{"alt":66,"src":67189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67191,67192,67195],{},[67193,67194],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67197,67198],{},[2643,67199],{"alt":66,"src":67200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67202,67204],{"id":67203},"_33-dom事件进阶","3.3 DOM事件进阶",[198,67206,67208],{"id":67207},"_331-事件流","3.3.1 事件流",[19,67210,67211],{},[2643,67212],{"alt":66,"src":67213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23168,67215,67217],{"id":67216},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67219,67220],{},[2643,67221],{"alt":66,"src":67222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[60,67224,67226],{"className":51782,"code":67225,"language":51784,"meta":66,"style":66},"\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",[39,67227,67228,67238,67252,67256,67264,67278,67298,67310,67318,67325,67337,67349,67359,67363,67367,67374,67386,67398,67408,67412,67420,67428,67432,67440,67455,67474,67482,67490,67510,67530,67546,67557,67565,67582,67593,67601,67618,67629,67637,67645,67653,67657],{"__ignoreMap":66},[84,67229,67230,67232,67234,67236],{"class":86,"line":87},[84,67231,52446],{"class":154},[84,67233,52450],{"class":52449},[84,67235,52453],{"class":90},[84,67237,52456],{"class":154},[84,67239,67240,67242,67244,67246,67248,67250],{"class":86,"line":98},[84,67241,2218],{"class":154},[84,67243,51784],{"class":52449},[84,67245,52465],{"class":90},[84,67247,867],{"class":154},[84,67249,52470],{"class":158},[84,67251,52456],{"class":154},[84,67253,67254],{"class":86,"line":106},[84,67255,3578],{"emptyLinePlaceholder":1252},[84,67257,67258,67260,67262],{"class":86,"line":112},[84,67259,2218],{"class":154},[84,67261,52483],{"class":52449},[84,67263,52456],{"class":154},[84,67265,67266,67268,67270,67272,67274,67276],{"class":86,"line":425},[84,67267,53293],{"class":154},[84,67269,52493],{"class":52449},[84,67271,52496],{"class":90},[84,67273,867],{"class":154},[84,67275,52501],{"class":158},[84,67277,52456],{"class":154},[84,67279,67280,67282,67284,67286,67288,67290,67292,67294,67296],{"class":86,"line":2395},[84,67281,53293],{"class":154},[84,67283,52493],{"class":52449},[84,67285,16090],{"class":90},[84,67287,867],{"class":154},[84,67289,52540],{"class":158},[84,67291,52520],{"class":90},[84,67293,867],{"class":154},[84,67295,52547],{"class":158},[84,67297,52456],{"class":154},[84,67299,67300,67302,67304,67306,67308],{"class":86,"line":2401},[84,67301,53293],{"class":154},[84,67303,52556],{"class":52449},[84,67305,52559],{"class":154},[84,67307,52556],{"class":52449},[84,67309,52456],{"class":154},[84,67311,67312,67314,67316],{"class":86,"line":2492},[84,67313,53293],{"class":154},[84,67315,1222],{"class":52449},[84,67317,52456],{"class":154},[84,67319,67320,67323],{"class":86,"line":2498},[84,67321,67322],{"class":90},"    .father",[84,67324,16742],{"class":154},[84,67326,67327,67329,67331,67333,67335],{"class":86,"line":2510},[84,67328,55918],{"class":94},[84,67330,52586],{"class":154},[84,67332,66220],{"class":94},[84,67334,52641],{"class":129},[84,67336,2471],{"class":154},[84,67338,67339,67341,67343,67345,67347],{"class":86,"line":2793},[84,67340,55932],{"class":94},[84,67342,52586],{"class":154},[84,67344,66220],{"class":94},[84,67346,52641],{"class":129},[84,67348,2471],{"class":154},[84,67350,67351,67353,67355,67357],{"class":86,"line":2798},[84,67352,56031],{"class":94},[84,67354,52586],{"class":154},[84,67356,52794],{"class":94},[84,67358,2471],{"class":154},[84,67360,67361],{"class":86,"line":2804},[84,67362,3365],{"class":154},[84,67364,67365],{"class":86,"line":2809},[84,67366,3578],{"emptyLinePlaceholder":1252},[84,67368,67369,67372],{"class":86,"line":2823},[84,67370,67371],{"class":90},"    .son",[84,67373,16742],{"class":154},[84,67375,67376,67378,67380,67382,67384],{"class":86,"line":2828},[84,67377,55918],{"class":94},[84,67379,52586],{"class":154},[84,67381,2903],{"class":94},[84,67383,52641],{"class":129},[84,67385,2471],{"class":154},[84,67387,67388,67390,67392,67394,67396],{"class":86,"line":2834},[84,67389,55932],{"class":94},[84,67391,52586],{"class":154},[84,67393,2903],{"class":94},[84,67395,52641],{"class":129},[84,67397,2471],{"class":154},[84,67399,67400,67402,67404,67406],{"class":86,"line":2855},[84,67401,56031],{"class":94},[84,67403,52586],{"class":154},[84,67405,56036],{"class":94},[84,67407,2471],{"class":154},[84,67409,67410],{"class":86,"line":2860},[84,67411,3365],{"class":154},[84,67413,67414,67416,67418],{"class":86,"line":2874},[84,67415,53566],{"class":154},[84,67417,1222],{"class":52449},[84,67419,52456],{"class":154},[84,67421,67422,67424,67426],{"class":86,"line":2879},[84,67423,52934],{"class":154},[84,67425,52483],{"class":52449},[84,67427,52456],{"class":154},[84,67429,67430],{"class":86,"line":2908},[84,67431,3578],{"emptyLinePlaceholder":1252},[84,67433,67434,67436,67438],{"class":86,"line":2913},[84,67435,2218],{"class":154},[84,67437,52949],{"class":52449},[84,67439,52456],{"class":154},[84,67441,67442,67444,67446,67448,67450,67453],{"class":86,"line":2930},[84,67443,53293],{"class":154},[84,67445,52760],{"class":52449},[84,67447,54635],{"class":90},[84,67449,867],{"class":154},[84,67451,67452],{"class":158},"\"father\"",[84,67454,52456],{"class":154},[84,67456,67457,67459,67461,67463,67465,67468,67470,67472],{"class":86,"line":2935},[84,67458,52490],{"class":154},[84,67460,52760],{"class":52449},[84,67462,54635],{"class":90},[84,67464,867],{"class":154},[84,67466,67467],{"class":158},"\"son\"",[84,67469,56461],{"class":154},[84,67471,52760],{"class":52449},[84,67473,52456],{"class":154},[84,67475,67476,67478,67480],{"class":86,"line":2940},[84,67477,53566],{"class":154},[84,67479,52760],{"class":52449},[84,67481,52456],{"class":154},[84,67483,67484,67486,67488],{"class":86,"line":2945},[84,67485,53293],{"class":154},[84,67487,52962],{"class":52449},[84,67489,52456],{"class":154},[84,67491,67492,67494,67497,67499,67501,67503,67505,67508],{"class":86,"line":2959},[84,67493,12393],{"class":129},[84,67495,67496],{"class":94}," fa",[84,67498,14735],{"class":129},[84,67500,55544],{"class":154},[84,67502,55547],{"class":90},[84,67504,155],{"class":154},[84,67506,67507],{"class":158},"'.father'",[84,67509,162],{"class":154},[84,67511,67512,67514,67517,67519,67521,67523,67525,67528],{"class":86,"line":2964},[84,67513,12393],{"class":129},[84,67515,67516],{"class":94}," son",[84,67518,14735],{"class":129},[84,67520,55544],{"class":154},[84,67522,55547],{"class":90},[84,67524,155],{"class":154},[84,67526,67527],{"class":158},"'.son'",[84,67529,162],{"class":154},[84,67531,67532,67534,67536,67538,67540,67542,67544],{"class":86,"line":3755},[84,67533,53556],{"class":154},[84,67535,58960],{"class":90},[84,67537,155],{"class":154},[84,67539,58965],{"class":158},[84,67541,846],{"class":154},[84,67543,55596],{"class":129},[84,67545,55599],{"class":154},[84,67547,67548,67550,67552,67555],{"class":86,"line":3769},[84,67549,60071],{"class":90},[84,67551,155],{"class":154},[84,67553,67554],{"class":158},"'woshiu1'",[84,67556,162],{"class":154},[84,67558,67559,67561,67563],{"class":86,"line":3777},[84,67560,55682],{"class":154},[84,67562,2543],{"class":94},[84,67564,162],{"class":154},[84,67566,67567,67570,67572,67574,67576,67578,67580],{"class":86,"line":3782},[84,67568,67569],{"class":154},"    fa.",[84,67571,58960],{"class":90},[84,67573,155],{"class":154},[84,67575,58965],{"class":158},[84,67577,846],{"class":154},[84,67579,55596],{"class":129},[84,67581,55599],{"class":154},[84,67583,67584,67586,67588,67591],{"class":86,"line":3788},[84,67585,60071],{"class":90},[84,67587,155],{"class":154},[84,67589,67590],{"class":158},"'1'",[84,67592,162],{"class":154},[84,67594,67595,67597,67599],{"class":86,"line":3794},[84,67596,55682],{"class":154},[84,67598,2543],{"class":94},[84,67600,162],{"class":154},[84,67602,67603,67606,67608,67610,67612,67614,67616],{"class":86,"line":3799},[84,67604,67605],{"class":154},"    son.",[84,67607,58960],{"class":90},[84,67609,155],{"class":154},[84,67611,58965],{"class":158},[84,67613,846],{"class":154},[84,67615,55596],{"class":129},[84,67617,55599],{"class":154},[84,67619,67620,67622,67624,67627],{"class":86,"line":9120},[84,67621,60071],{"class":90},[84,67623,155],{"class":154},[84,67625,67626],{"class":158},"'2'",[84,67628,162],{"class":154},[84,67630,67631,67633,67635],{"class":86,"line":9144},[84,67632,55682],{"class":154},[84,67634,2543],{"class":94},[84,67636,162],{"class":154},[84,67638,67639,67641,67643],{"class":86,"line":9149},[84,67640,53566],{"class":154},[84,67642,52962],{"class":52449},[84,67644,52456],{"class":154},[84,67646,67647,67649,67651],{"class":86,"line":9155},[84,67648,52934],{"class":154},[84,67650,52949],{"class":52449},[84,67652,52456],{"class":154},[84,67654,67655],{"class":86,"line":9182},[84,67656,3578],{"emptyLinePlaceholder":1252},[84,67658,67659,67661,67663],{"class":86,"line":9187},[84,67660,52934],{"class":154},[84,67662,51784],{"class":52449},[84,67664,52456],{"class":154},[19,67666,67667],{},[2643,67668],{"alt":66,"src":67669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67671,67672],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23168,67674,67676],{"id":67675},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67678,67679],{},[2643,67680],{"alt":66,"src":67681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67683,67684],{},"反着来",[19,67686,67687],{},"注意是同名事件，比如都是‘click’",[23168,67689,67691],{"id":67690},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67693,67694],{},[2643,67695],{"alt":66,"src":67696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23168,67698,67700],{"id":67699},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67702,67703],{},[2643,67704],{"alt":66,"src":67705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67707,67708],{},[2643,67709],{"alt":66,"src":67710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23168,67712,67714],{"id":67713},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,67716,67717],{},[29,67718,67719],{},"事件类型的区别",[19,67721,67722],{},[2643,67723],{"alt":66,"src":67724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67726,67727],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,67729,67730],{"start":98},[29,67731,67732],{},"注册事件的区别",[19,67734,67735],{},[2643,67736],{"alt":66,"src":67737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23168,67739,67741],{"id":67740},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67743,67744],{},[2643,67745],{"alt":66,"src":67746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67748,67749],{},[2643,67750],{"alt":66,"src":67751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[60,67753,67755],{"className":54216,"code":67754,"language":54218,"meta":66,"style":66},"\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",[39,67756,67757,67765,67782,67805,67813,67818,67823,67828,67832,67840,67848],{"__ignoreMap":66},[84,67758,67759,67761,67763],{"class":86,"line":87},[84,67760,2218],{"class":154},[84,67762,52949],{"class":52449},[84,67764,52456],{"class":154},[84,67766,67767,67769,67772,67775,67777,67780],{"class":86,"line":98},[84,67768,53293],{"class":154},[84,67770,67771],{"class":52449},"form",[84,67773,67774],{"class":90}," action",[84,67776,867],{"class":154},[84,67778,67779],{"class":158},"\"http:\u002F\u002Fwww.itcast.cn\"",[84,67781,52456],{"class":154},[84,67783,67784,67786,67788,67790,67792,67795,67798,67800,67803],{"class":86,"line":106},[84,67785,52490],{"class":154},[84,67787,54970],{"class":52449},[84,67789,54973],{"class":90},[84,67791,867],{"class":154},[84,67793,67794],{"class":158},"\"submit\"",[84,67796,67797],{"class":90}," value",[84,67799,867],{"class":154},[84,67801,67802],{"class":158},"\"免费注册\"",[84,67804,52456],{"class":154},[84,67806,67807,67809,67811],{"class":86,"line":112},[84,67808,52490],{"class":154},[84,67810,52962],{"class":52449},[84,67812,52456],{"class":154},[84,67814,67815],{"class":86,"line":425},[84,67816,67817],{"class":154},"      const form = document.querySelector('form')\n",[84,67819,67820],{"class":86,"line":2395},[84,67821,67822],{"class":154},"      form.addEventListener('submit', function (e) {\n",[84,67824,67825],{"class":86,"line":2401},[84,67826,67827],{"class":154},"        e.preventDefault()\n",[84,67829,67830],{"class":86,"line":2492},[84,67831,65961],{"class":154},[84,67833,67834,67836,67838],{"class":86,"line":2498},[84,67835,52925],{"class":154},[84,67837,52962],{"class":52449},[84,67839,52456],{"class":154},[84,67841,67842,67844,67846],{"class":86,"line":2510},[84,67843,53566],{"class":154},[84,67845,67771],{"class":52449},[84,67847,52456],{"class":154},[84,67849,67850,67852,67854],{"class":86,"line":2793},[84,67851,52934],{"class":154},[84,67853,52949],{"class":52449},[84,67855,52456],{"class":154},[19,67857,67858],{},"点击不在跳转！！！",[198,67860,67862],{"id":67861},"_332-事件委托","3.3.2 事件委托",[19,67864,67865],{},[2643,67866],{"alt":66,"src":67867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[60,67869,67871],{"className":51782,"code":67870,"language":51784,"meta":66,"style":66},"\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",[39,67872,67873,67883,67897,67901,67909,67923,67943,67955,67963,67967,67975,67983,67995,68007,68019,68031,68043,68056,68064,68072,68077,68096,68117,68122,68127,68132,68137,68146,68150,68160,68164,68169,68174,68188,68198,68202,68206,68214,68222,68226],{"__ignoreMap":66},[84,67874,67875,67877,67879,67881],{"class":86,"line":87},[84,67876,52446],{"class":154},[84,67878,52450],{"class":52449},[84,67880,52453],{"class":90},[84,67882,52456],{"class":154},[84,67884,67885,67887,67889,67891,67893,67895],{"class":86,"line":98},[84,67886,2218],{"class":154},[84,67888,51784],{"class":52449},[84,67890,52465],{"class":90},[84,67892,867],{"class":154},[84,67894,52470],{"class":158},[84,67896,52456],{"class":154},[84,67898,67899],{"class":86,"line":106},[84,67900,3578],{"emptyLinePlaceholder":1252},[84,67902,67903,67905,67907],{"class":86,"line":112},[84,67904,2218],{"class":154},[84,67906,52483],{"class":52449},[84,67908,52456],{"class":154},[84,67910,67911,67913,67915,67917,67919,67921],{"class":86,"line":425},[84,67912,53293],{"class":154},[84,67914,52493],{"class":52449},[84,67916,52496],{"class":90},[84,67918,867],{"class":154},[84,67920,52501],{"class":158},[84,67922,52456],{"class":154},[84,67924,67925,67927,67929,67931,67933,67935,67937,67939,67941],{"class":86,"line":2395},[84,67926,53293],{"class":154},[84,67928,52493],{"class":52449},[84,67930,16090],{"class":90},[84,67932,867],{"class":154},[84,67934,52540],{"class":158},[84,67936,52520],{"class":90},[84,67938,867],{"class":154},[84,67940,52547],{"class":158},[84,67942,52456],{"class":154},[84,67944,67945,67947,67949,67951,67953],{"class":86,"line":2401},[84,67946,53293],{"class":154},[84,67948,52556],{"class":52449},[84,67950,52559],{"class":154},[84,67952,52556],{"class":52449},[84,67954,52456],{"class":154},[84,67956,67957,67959,67961],{"class":86,"line":2492},[84,67958,52934],{"class":154},[84,67960,52483],{"class":52449},[84,67962,52456],{"class":154},[84,67964,67965],{"class":86,"line":2498},[84,67966,3578],{"emptyLinePlaceholder":1252},[84,67968,67969,67971,67973],{"class":86,"line":2510},[84,67970,2218],{"class":154},[84,67972,52949],{"class":52449},[84,67974,52456],{"class":154},[84,67976,67977,67979,67981],{"class":86,"line":2793},[84,67978,53293],{"class":154},[84,67980,2315],{"class":52449},[84,67982,52456],{"class":154},[84,67984,67985,67987,67989,67991,67993],{"class":86,"line":2798},[84,67986,52490],{"class":154},[84,67988,29],{"class":52449},[84,67990,55115],{"class":154},[84,67992,29],{"class":52449},[84,67994,52456],{"class":154},[84,67996,67997,67999,68001,68003,68005],{"class":86,"line":2804},[84,67998,52490],{"class":154},[84,68000,29],{"class":52449},[84,68002,55134],{"class":154},[84,68004,29],{"class":52449},[84,68006,52456],{"class":154},[84,68008,68009,68011,68013,68015,68017],{"class":86,"line":2809},[84,68010,52490],{"class":154},[84,68012,29],{"class":52449},[84,68014,55153],{"class":154},[84,68016,29],{"class":52449},[84,68018,52456],{"class":154},[84,68020,68021,68023,68025,68027,68029],{"class":86,"line":2823},[84,68022,52490],{"class":154},[84,68024,29],{"class":52449},[84,68026,55172],{"class":154},[84,68028,29],{"class":52449},[84,68030,52456],{"class":154},[84,68032,68033,68035,68037,68039,68041],{"class":86,"line":2828},[84,68034,52490],{"class":154},[84,68036,29],{"class":52449},[84,68038,55191],{"class":154},[84,68040,29],{"class":52449},[84,68042,52456],{"class":154},[84,68044,68045,68047,68049,68052,68054],{"class":86,"line":2834},[84,68046,52490],{"class":154},[84,68048,19],{"class":52449},[84,68050,68051],{"class":154},">我不需要变色\u003C\u002F",[84,68053,19],{"class":52449},[84,68055,52456],{"class":154},[84,68057,68058,68060,68062],{"class":86,"line":2855},[84,68059,53566],{"class":154},[84,68061,2315],{"class":52449},[84,68063,52456],{"class":154},[84,68065,68066,68068,68070],{"class":86,"line":2860},[84,68067,53293],{"class":154},[84,68069,52962],{"class":52449},[84,68071,52456],{"class":154},[84,68073,68074],{"class":86,"line":2874},[84,68075,68076],{"class":1378},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[84,68078,68079,68081,68083,68085,68087,68089,68091,68094],{"class":86,"line":2879},[84,68080,12393],{"class":129},[84,68082,62438],{"class":94},[84,68084,14735],{"class":129},[84,68086,55544],{"class":154},[84,68088,55547],{"class":90},[84,68090,155],{"class":154},[84,68092,68093],{"class":158},"'ul'",[84,68095,162],{"class":154},[84,68097,68098,68101,68103,68105,68107,68109,68111,68113,68115],{"class":86,"line":2908},[84,68099,68100],{"class":154},"    ul.",[84,68102,58960],{"class":90},[84,68104,155],{"class":154},[84,68106,58965],{"class":158},[84,68108,846],{"class":154},[84,68110,55596],{"class":129},[84,68112,2839],{"class":154},[84,68114,1394],{"class":928},[84,68116,13613],{"class":154},[84,68118,68119],{"class":86,"line":2913},[84,68120,68121],{"class":1378},"      \u002F\u002F alert(1)\n",[84,68123,68124],{"class":86,"line":2930},[84,68125,68126],{"class":1378},"      \u002F\u002F e.target就是我们点击的对象\n",[84,68128,68129],{"class":86,"line":2935},[84,68130,68131],{"class":1378},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[84,68133,68134],{"class":86,"line":2940},[84,68135,68136],{"class":1378},"      \u002F\u002F e.target.style.color = 'red'\n",[84,68138,68139,68141,68143],{"class":86,"line":2945},[84,68140,59390],{"class":154},[84,68142,59393],{"class":90},[84,68144,68145],{"class":154},"(e)\n",[84,68147,68148],{"class":86,"line":2959},[84,68149,3578],{"emptyLinePlaceholder":1252},[84,68151,68152,68154,68157],{"class":86,"line":2964},[84,68153,59390],{"class":154},[84,68155,68156],{"class":90},"dir",[84,68158,68159],{"class":154},"(e.target)\n",[84,68161,68162],{"class":86,"line":3755},[84,68163,3578],{"emptyLinePlaceholder":1252},[84,68165,68166],{"class":86,"line":3769},[84,68167,68168],{"class":1378},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[84,68170,68171],{"class":86,"line":3777},[84,68172,68173],{"class":1378},"      \u002F\u002F 通过tagName来进行判断\n",[84,68175,68176,68178,68181,68183,68186],{"class":86,"line":3782},[84,68177,55627],{"class":129},[84,68179,68180],{"class":154}," (e.target.tagName ",[84,68182,55633],{"class":129},[84,68184,68185],{"class":158}," 'LI'",[84,68187,13613],{"class":154},[84,68189,68190,68193,68195],{"class":86,"line":3788},[84,68191,68192],{"class":154},"        e.target.style.color ",[84,68194,867],{"class":129},[84,68196,68197],{"class":158}," 'red'\n",[84,68199,68200],{"class":86,"line":3794},[84,68201,53547],{"class":154},[84,68203,68204],{"class":86,"line":3799},[84,68205,34613],{"class":154},[84,68207,68208,68210,68212],{"class":86,"line":9120},[84,68209,53566],{"class":154},[84,68211,52962],{"class":52449},[84,68213,52456],{"class":154},[84,68215,68216,68218,68220],{"class":86,"line":9144},[84,68217,52934],{"class":154},[84,68219,52949],{"class":52449},[84,68221,52456],{"class":154},[84,68223,68224],{"class":86,"line":9149},[84,68225,3578],{"emptyLinePlaceholder":1252},[84,68227,68228,68230,68232],{"class":86,"line":9155},[84,68229,52934],{"class":154},[84,68231,51784],{"class":52449},[84,68233,52456],{"class":154},[19,68235,68236],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68238,68239],{},"if(e.target.ragName==='P') {}",[19,68241,68242],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68244,68245],{},"通过事件委托的方式实现tab栏切换改造：",[19,68247,68248],{},"一定要记住自定义属性！！！！！！",[19,68250,68251],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68253,68254],{},"id是自定义的属性名",[19,68256,68257],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[60,68259,68261],{"className":51782,"code":68260,"language":51784,"meta":66,"style":66},"\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",[39,68262,68263,68273,68287,68291,68299,68313,68333,68353,68365,68373,68379,68389,68399,68403,68407,68413,68425,68437,68449,68465,68469,68473,68479,68491,68503,68515,68525,68535,68539,68543,68551,68563,68573,68585,68589,68593,68601,68611,68621,68631,68635,68639,68649,68663,68675,68679,68683,68695,68705,68721,68731,68735,68739,68753,68763,68773,68777,68781,68787,68801,68805,68809,68817,68827,68831,68835,68844,68854,68858,68866,68874,68878,68886,68900,68914,68926,68934,68973,69005,69037,69069,69101,69109,69117,69131,69165,69199,69233,69267,69301,69309,69317,69325,69330,69335,69354,69359,69379,69387,69392,69405,69426,69439,69443,69448,69453,69466,69486,69514,69518,69522,69526,69534,69542,69546],{"__ignoreMap":66},[84,68264,68265,68267,68269,68271],{"class":86,"line":87},[84,68266,52446],{"class":154},[84,68268,52450],{"class":52449},[84,68270,52453],{"class":90},[84,68272,52456],{"class":154},[84,68274,68275,68277,68279,68281,68283,68285],{"class":86,"line":98},[84,68276,2218],{"class":154},[84,68278,51784],{"class":52449},[84,68280,52465],{"class":90},[84,68282,867],{"class":154},[84,68284,52470],{"class":158},[84,68286,52456],{"class":154},[84,68288,68289],{"class":86,"line":106},[84,68290,3578],{"emptyLinePlaceholder":1252},[84,68292,68293,68295,68297],{"class":86,"line":112},[84,68294,2218],{"class":154},[84,68296,52483],{"class":52449},[84,68298,52456],{"class":154},[84,68300,68301,68303,68305,68307,68309,68311],{"class":86,"line":425},[84,68302,53293],{"class":154},[84,68304,52493],{"class":52449},[84,68306,52496],{"class":90},[84,68308,867],{"class":154},[84,68310,52501],{"class":158},[84,68312,60273],{"class":154},[84,68314,68315,68317,68319,68321,68323,68325,68327,68329,68331],{"class":86,"line":2395},[84,68316,53293],{"class":154},[84,68318,52493],{"class":52449},[84,68320,52512],{"class":90},[84,68322,867],{"class":154},[84,68324,52517],{"class":158},[84,68326,52520],{"class":90},[84,68328,867],{"class":154},[84,68330,52525],{"class":158},[84,68332,60273],{"class":154},[84,68334,68335,68337,68339,68341,68343,68345,68347,68349,68351],{"class":86,"line":2401},[84,68336,53293],{"class":154},[84,68338,52493],{"class":52449},[84,68340,16090],{"class":90},[84,68342,867],{"class":154},[84,68344,52540],{"class":158},[84,68346,52520],{"class":90},[84,68348,867],{"class":154},[84,68350,52547],{"class":158},[84,68352,60273],{"class":154},[84,68354,68355,68357,68359,68361,68363],{"class":86,"line":2492},[84,68356,53293],{"class":154},[84,68358,52556],{"class":52449},[84,68360,64771],{"class":154},[84,68362,52556],{"class":52449},[84,68364,52456],{"class":154},[84,68366,68367,68369,68371],{"class":86,"line":2498},[84,68368,53293],{"class":154},[84,68370,1222],{"class":52449},[84,68372,52456],{"class":154},[84,68374,68375,68377],{"class":86,"line":2510},[84,68376,7576],{"class":52449},[84,68378,16742],{"class":154},[84,68380,68381,68383,68385,68387],{"class":86,"line":2793},[84,68382,55853],{"class":94},[84,68384,52586],{"class":154},[84,68386,1504],{"class":94},[84,68388,2471],{"class":154},[84,68390,68391,68393,68395,68397],{"class":86,"line":2798},[84,68392,55842],{"class":94},[84,68394,52586],{"class":154},[84,68396,1504],{"class":94},[84,68398,2471],{"class":154},[84,68400,68401],{"class":86,"line":2804},[84,68402,3365],{"class":154},[84,68404,68405],{"class":86,"line":2809},[84,68406,3578],{"emptyLinePlaceholder":1252},[84,68408,68409,68411],{"class":86,"line":2823},[84,68410,64822],{"class":90},[84,68412,16742],{"class":154},[84,68414,68415,68417,68419,68421,68423],{"class":86,"line":2828},[84,68416,55918],{"class":94},[84,68418,52586],{"class":154},[84,68420,64833],{"class":94},[84,68422,52641],{"class":129},[84,68424,2471],{"class":154},[84,68426,68427,68429,68431,68433,68435],{"class":86,"line":2834},[84,68428,55932],{"class":94},[84,68430,52586],{"class":154},[84,68432,64846],{"class":94},[84,68434,52641],{"class":129},[84,68436,2471],{"class":154},[84,68438,68439,68441,68443,68445,68447],{"class":86,"line":2855},[84,68440,55853],{"class":94},[84,68442,52586],{"class":154},[84,68444,2008],{"class":94},[84,68446,52641],{"class":129},[84,68448,2471],{"class":154},[84,68450,68451,68453,68455,68457,68459,68461,68463],{"class":86,"line":2860},[84,68452,63123],{"class":94},[84,68454,52586],{"class":154},[84,68456,1529],{"class":94},[84,68458,52641],{"class":129},[84,68460,52670],{"class":94},[84,68462,63390],{"class":94},[84,68464,2471],{"class":154},[84,68466,68467],{"class":86,"line":2874},[84,68468,3365],{"class":154},[84,68470,68471],{"class":86,"line":2879},[84,68472,3578],{"emptyLinePlaceholder":1252},[84,68474,68475,68477],{"class":86,"line":2908},[84,68476,64891],{"class":90},[84,68478,16742],{"class":154},[84,68480,68481,68483,68485,68487,68489],{"class":86,"line":2913},[84,68482,55918],{"class":94},[84,68484,52586],{"class":154},[84,68486,821],{"class":94},[84,68488,1638],{"class":129},[84,68490,2471],{"class":154},[84,68492,68493,68495,68497,68499,68501],{"class":86,"line":2930},[84,68494,55932],{"class":94},[84,68496,52586],{"class":154},[84,68498,2215],{"class":94},[84,68500,52641],{"class":129},[84,68502,2471],{"class":154},[84,68504,68505,68507,68509,68511,68513],{"class":86,"line":2935},[84,68506,58506],{"class":94},[84,68508,52586],{"class":154},[84,68510,2215],{"class":94},[84,68512,52641],{"class":129},[84,68514,2471],{"class":154},[84,68516,68517,68519,68521,68523],{"class":86,"line":2940},[84,68518,56156],{"class":94},[84,68520,52586],{"class":154},[84,68522,52626],{"class":94},[84,68524,2471],{"class":154},[84,68526,68527,68529,68531,68533],{"class":86,"line":2945},[84,68528,56167],{"class":94},[84,68530,52586],{"class":154},[84,68532,52817],{"class":94},[84,68534,2471],{"class":154},[84,68536,68537],{"class":86,"line":2959},[84,68538,3365],{"class":154},[84,68540,68541],{"class":86,"line":2964},[84,68542,3578],{"emptyLinePlaceholder":1252},[84,68544,68545,68547,68549],{"class":86,"line":3755},[84,68546,64891],{"class":90},[84,68548,64964],{"class":52449},[84,68550,16742],{"class":154},[84,68552,68553,68555,68557,68559,68561],{"class":86,"line":3769},[84,68554,56069],{"class":94},[84,68556,52586],{"class":154},[84,68558,2108],{"class":94},[84,68560,52641],{"class":129},[84,68562,2471],{"class":154},[84,68564,68565,68567,68569,68571],{"class":86,"line":3777},[84,68566,63480],{"class":94},[84,68568,52586],{"class":154},[84,68570,64987],{"class":94},[84,68572,2471],{"class":154},[84,68574,68575,68577,68579,68581,68583],{"class":86,"line":3782},[84,68576,63146],{"class":94},[84,68578,52586],{"class":154},[84,68580,2008],{"class":94},[84,68582,52641],{"class":129},[84,68584,2471],{"class":154},[84,68586,68587],{"class":86,"line":3788},[84,68588,3365],{"class":154},[84,68590,68591],{"class":86,"line":3794},[84,68592,3578],{"emptyLinePlaceholder":1252},[84,68594,68595,68597,68599],{"class":86,"line":3799},[84,68596,64891],{"class":90},[84,68598,62438],{"class":52449},[84,68600,16742],{"class":154},[84,68602,68603,68605,68607,68609],{"class":86,"line":9120},[84,68604,55879],{"class":94},[84,68606,52586],{"class":154},[84,68608,55884],{"class":94},[84,68610,2471],{"class":154},[84,68612,68613,68615,68617,68619],{"class":86,"line":9144},[84,68614,56156],{"class":94},[84,68616,52586],{"class":154},[84,68618,52626],{"class":94},[84,68620,2471],{"class":154},[84,68622,68623,68625,68627,68629],{"class":86,"line":9149},[84,68624,56167],{"class":94},[84,68626,52586],{"class":154},[84,68628,52729],{"class":94},[84,68630,2471],{"class":154},[84,68632,68633],{"class":86,"line":9155},[84,68634,3365],{"class":154},[84,68636,68637],{"class":86,"line":9182},[84,68638,3578],{"emptyLinePlaceholder":1252},[84,68640,68641,68643,68645,68647],{"class":86,"line":9187},[84,68642,64891],{"class":90},[84,68644,62438],{"class":52449},[84,68646,56222],{"class":52449},[84,68648,16742],{"class":154},[84,68650,68651,68653,68655,68657,68659,68661],{"class":86,"line":9193},[84,68652,55853],{"class":94},[84,68654,52586],{"class":154},[84,68656,1504],{"class":94},[84,68658,10122],{"class":94},[84,68660,52641],{"class":129},[84,68662,2471],{"class":154},[84,68664,68665,68667,68669,68671,68673],{"class":86,"line":9205},[84,68666,56069],{"class":94},[84,68668,52586],{"class":154},[84,68670,1858],{"class":94},[84,68672,52641],{"class":129},[84,68674,2471],{"class":154},[84,68676,68677],{"class":86,"line":9217},[84,68678,3365],{"class":154},[84,68680,68681],{"class":86,"line":9229},[84,68682,3578],{"emptyLinePlaceholder":1252},[84,68684,68685,68687,68689,68691,68693],{"class":86,"line":10888},[84,68686,64891],{"class":90},[84,68688,62438],{"class":52449},[84,68690,56222],{"class":52449},[84,68692,2579],{"class":52449},[84,68694,16742],{"class":154},[84,68696,68697,68699,68701,68703],{"class":86,"line":10913},[84,68698,65116],{"class":94},[84,68700,52586],{"class":154},[84,68702,55884],{"class":94},[84,68704,2471],{"class":154},[84,68706,68707,68709,68711,68713,68715,68717,68719],{"class":86,"line":10936},[84,68708,63378],{"class":94},[84,68710,52586],{"class":154},[84,68712,1397],{"class":94},[84,68714,52641],{"class":129},[84,68716,52670],{"class":94},[84,68718,65137],{"class":94},[84,68720,2471],{"class":154},[84,68722,68723,68725,68727,68729],{"class":86,"line":10960},[84,68724,58563],{"class":94},[84,68726,52586],{"class":154},[84,68728,63515],{"class":94},[84,68730,2471],{"class":154},[84,68732,68733],{"class":86,"line":10965},[84,68734,3365],{"class":154},[84,68736,68737],{"class":86,"line":10970},[84,68738,3578],{"emptyLinePlaceholder":1252},[84,68740,68741,68743,68745,68747,68749,68751],{"class":86,"line":10975},[84,68742,64891],{"class":90},[84,68744,62438],{"class":52449},[84,68746,56222],{"class":52449},[84,68748,2579],{"class":52449},[84,68750,65170],{"class":90},[84,68752,16742],{"class":154},[84,68754,68755,68757,68759,68761],{"class":86,"line":10984},[84,68756,62937],{"class":94},[84,68758,52586],{"class":154},[84,68760,65181],{"class":94},[84,68762,2471],{"class":154},[84,68764,68765,68767,68769,68771],{"class":86,"line":10989},[84,68766,58563],{"class":94},[84,68768,52586],{"class":154},[84,68770,65181],{"class":94},[84,68772,2471],{"class":154},[84,68774,68775],{"class":86,"line":10995},[84,68776,3365],{"class":154},[84,68778,68779],{"class":86,"line":11016},[84,68780,3578],{"emptyLinePlaceholder":1252},[84,68782,68783,68785],{"class":86,"line":11022},[84,68784,65206],{"class":90},[84,68786,16742],{"class":154},[84,68788,68789,68791,68793,68795,68797,68799],{"class":86,"line":11036},[84,68790,55842],{"class":94},[84,68792,52586],{"class":154},[84,68794,1504],{"class":94},[84,68796,65219],{"class":94},[84,68798,52641],{"class":129},[84,68800,2471],{"class":154},[84,68802,68803],{"class":86,"line":11042},[84,68804,3365],{"class":154},[84,68806,68807],{"class":86,"line":11069},[84,68808,3578],{"emptyLinePlaceholder":1252},[84,68810,68811,68813,68815],{"class":86,"line":11078},[84,68812,65206],{"class":90},[84,68814,63320],{"class":90},[84,68816,16742],{"class":154},[84,68818,68819,68821,68823,68825],{"class":86,"line":11084},[84,68820,56156],{"class":94},[84,68822,52586],{"class":154},[84,68824,55884],{"class":94},[84,68826,2471],{"class":154},[84,68828,68829],{"class":86,"line":11092},[84,68830,3365],{"class":154},[84,68832,68833],{"class":86,"line":11097},[84,68834,3578],{"emptyLinePlaceholder":1252},[84,68836,68837,68839,68842],{"class":86,"line":17774},[84,68838,65206],{"class":90},[84,68840,68841],{"class":90}," .active",[84,68843,16742],{"class":154},[84,68845,68846,68848,68850,68852],{"class":86,"line":17780},[84,68847,56156],{"class":94},[84,68849,52586],{"class":154},[84,68851,62015],{"class":94},[84,68853,2471],{"class":154},[84,68855,68856],{"class":86,"line":17803},[84,68857,3365],{"class":154},[84,68859,68860,68862,68864],{"class":86,"line":17809},[84,68861,53566],{"class":154},[84,68863,1222],{"class":52449},[84,68865,52456],{"class":154},[84,68867,68868,68870,68872],{"class":86,"line":17832},[84,68869,52934],{"class":154},[84,68871,52483],{"class":52449},[84,68873,52456],{"class":154},[84,68875,68876],{"class":86,"line":17846},[84,68877,3578],{"emptyLinePlaceholder":1252},[84,68879,68880,68882,68884],{"class":86,"line":17866},[84,68881,2218],{"class":154},[84,68883,52949],{"class":52449},[84,68885,52456],{"class":154},[84,68887,68888,68890,68892,68894,68896,68898],{"class":86,"line":17872},[84,68889,53293],{"class":154},[84,68891,52760],{"class":52449},[84,68893,54635],{"class":90},[84,68895,867],{"class":154},[84,68897,65321],{"class":158},[84,68899,52456],{"class":154},[84,68901,68902,68904,68906,68908,68910,68912],{"class":86,"line":17883},[84,68903,52490],{"class":154},[84,68905,52760],{"class":52449},[84,68907,54635],{"class":90},[84,68909,867],{"class":154},[84,68911,65336],{"class":158},[84,68913,52456],{"class":154},[84,68915,68916,68918,68920,68922,68924],{"class":86,"line":17906},[84,68917,56381],{"class":154},[84,68919,198],{"class":52449},[84,68921,65347],{"class":154},[84,68923,198],{"class":52449},[84,68925,52456],{"class":154},[84,68927,68928,68930,68932],{"class":86,"line":17928},[84,68929,56381],{"class":154},[84,68931,2315],{"class":52449},[84,68933,52456],{"class":154},[84,68935,68936,68938,68940,68942,68944,68946,68948,68950,68952,68954,68956,68958,68960,68963,68965,68967,68969,68971],{"class":86,"line":17933},[84,68937,56449],{"class":154},[84,68939,29],{"class":52449},[84,68941,62198],{"class":154},[84,68943,208],{"class":52449},[84,68945,54635],{"class":90},[84,68947,867],{"class":154},[84,68949,60852],{"class":158},[84,68951,62203],{"class":90},[84,68953,867],{"class":154},[84,68955,65382],{"class":158},[84,68957,55100],{"class":90},[84,68959,867],{"class":154},[84,68961,68962],{"class":158},"\"0\"",[84,68964,65385],{"class":154},[84,68966,208],{"class":52449},[84,68968,56461],{"class":154},[84,68970,29],{"class":52449},[84,68972,52456],{"class":154},[84,68974,68975,68977,68979,68981,68983,68985,68987,68989,68991,68993,68995,68997,68999,69001,69003],{"class":86,"line":17939},[84,68976,56449],{"class":154},[84,68978,29],{"class":52449},[84,68980,62198],{"class":154},[84,68982,208],{"class":52449},[84,68984,62203],{"class":90},[84,68986,867],{"class":154},[84,68988,65382],{"class":158},[84,68990,55100],{"class":90},[84,68992,867],{"class":154},[84,68994,4856],{"class":158},[84,68996,65412],{"class":154},[84,68998,208],{"class":52449},[84,69000,56461],{"class":154},[84,69002,29],{"class":52449},[84,69004,52456],{"class":154},[84,69006,69007,69009,69011,69013,69015,69017,69019,69021,69023,69025,69027,69029,69031,69033,69035],{"class":86,"line":17953},[84,69008,56449],{"class":154},[84,69010,29],{"class":52449},[84,69012,62198],{"class":154},[84,69014,208],{"class":52449},[84,69016,62203],{"class":90},[84,69018,867],{"class":154},[84,69020,65382],{"class":158},[84,69022,55100],{"class":90},[84,69024,867],{"class":154},[84,69026,4879],{"class":158},[84,69028,65439],{"class":154},[84,69030,208],{"class":52449},[84,69032,56461],{"class":154},[84,69034,29],{"class":52449},[84,69036,52456],{"class":154},[84,69038,69039,69041,69043,69045,69047,69049,69051,69053,69055,69057,69059,69061,69063,69065,69067],{"class":86,"line":17966},[84,69040,56449],{"class":154},[84,69042,29],{"class":52449},[84,69044,62198],{"class":154},[84,69046,208],{"class":52449},[84,69048,62203],{"class":90},[84,69050,867],{"class":154},[84,69052,65382],{"class":158},[84,69054,55100],{"class":90},[84,69056,867],{"class":154},[84,69058,4892],{"class":158},[84,69060,65466],{"class":154},[84,69062,208],{"class":52449},[84,69064,56461],{"class":154},[84,69066,29],{"class":52449},[84,69068,52456],{"class":154},[84,69070,69071,69073,69075,69077,69079,69081,69083,69085,69087,69089,69091,69093,69095,69097,69099],{"class":86,"line":17971},[84,69072,56449],{"class":154},[84,69074,29],{"class":52449},[84,69076,62198],{"class":154},[84,69078,208],{"class":52449},[84,69080,62203],{"class":90},[84,69082,867],{"class":154},[84,69084,65382],{"class":158},[84,69086,55100],{"class":90},[84,69088,867],{"class":154},[84,69090,4905],{"class":158},[84,69092,65493],{"class":154},[84,69094,208],{"class":52449},[84,69096,56461],{"class":154},[84,69098,29],{"class":52449},[84,69100,52456],{"class":154},[84,69102,69103,69105,69107],{"class":86,"line":17985},[84,69104,56554],{"class":154},[84,69106,2315],{"class":52449},[84,69108,52456],{"class":154},[84,69110,69111,69113,69115],{"class":86,"line":17990},[84,69112,52925],{"class":154},[84,69114,52760],{"class":52449},[84,69116,52456],{"class":154},[84,69118,69119,69121,69123,69125,69127,69129],{"class":86,"line":17996},[84,69120,52490],{"class":154},[84,69122,52760],{"class":52449},[84,69124,54635],{"class":90},[84,69126,867],{"class":154},[84,69128,65530],{"class":158},[84,69130,52456],{"class":154},[84,69132,69133,69135,69137,69139,69141,69143,69145,69147,69149,69151,69153,69155,69157,69159,69161,69163],{"class":86,"line":18001},[84,69134,56381],{"class":154},[84,69136,52760],{"class":52449},[84,69138,54635],{"class":90},[84,69140,867],{"class":154},[84,69142,65545],{"class":158},[84,69144,62198],{"class":154},[84,69146,2643],{"class":52449},[84,69148,56386],{"class":90},[84,69150,867],{"class":154},[84,69152,65556],{"class":158},[84,69154,56394],{"class":90},[84,69156,867],{"class":154},[84,69158,8824],{"class":158},[84,69160,65565],{"class":154},[84,69162,52760],{"class":52449},[84,69164,52456],{"class":154},[84,69166,69167,69169,69171,69173,69175,69177,69179,69181,69183,69185,69187,69189,69191,69193,69195,69197],{"class":86,"line":18015},[84,69168,56381],{"class":154},[84,69170,52760],{"class":52449},[84,69172,54635],{"class":90},[84,69174,867],{"class":154},[84,69176,63769],{"class":158},[84,69178,62198],{"class":154},[84,69180,2643],{"class":52449},[84,69182,56386],{"class":90},[84,69184,867],{"class":154},[84,69186,65592],{"class":158},[84,69188,56394],{"class":90},[84,69190,867],{"class":154},[84,69192,8824],{"class":158},[84,69194,65565],{"class":154},[84,69196,52760],{"class":52449},[84,69198,52456],{"class":154},[84,69200,69201,69203,69205,69207,69209,69211,69213,69215,69217,69219,69221,69223,69225,69227,69229,69231],{"class":86,"line":18020},[84,69202,56381],{"class":154},[84,69204,52760],{"class":52449},[84,69206,54635],{"class":90},[84,69208,867],{"class":154},[84,69210,63769],{"class":158},[84,69212,62198],{"class":154},[84,69214,2643],{"class":52449},[84,69216,56386],{"class":90},[84,69218,867],{"class":154},[84,69220,65627],{"class":158},[84,69222,56394],{"class":90},[84,69224,867],{"class":154},[84,69226,8824],{"class":158},[84,69228,65565],{"class":154},[84,69230,52760],{"class":52449},[84,69232,52456],{"class":154},[84,69234,69235,69237,69239,69241,69243,69245,69247,69249,69251,69253,69255,69257,69259,69261,69263,69265],{"class":86,"line":18025},[84,69236,56381],{"class":154},[84,69238,52760],{"class":52449},[84,69240,54635],{"class":90},[84,69242,867],{"class":154},[84,69244,63769],{"class":158},[84,69246,62198],{"class":154},[84,69248,2643],{"class":52449},[84,69250,56386],{"class":90},[84,69252,867],{"class":154},[84,69254,65662],{"class":158},[84,69256,56394],{"class":90},[84,69258,867],{"class":154},[84,69260,8824],{"class":158},[84,69262,65565],{"class":154},[84,69264,52760],{"class":52449},[84,69266,52456],{"class":154},[84,69268,69269,69271,69273,69275,69277,69279,69281,69283,69285,69287,69289,69291,69293,69295,69297,69299],{"class":86,"line":18039},[84,69270,56381],{"class":154},[84,69272,52760],{"class":52449},[84,69274,54635],{"class":90},[84,69276,867],{"class":154},[84,69278,63769],{"class":158},[84,69280,62198],{"class":154},[84,69282,2643],{"class":52449},[84,69284,56386],{"class":90},[84,69286,867],{"class":154},[84,69288,65697],{"class":158},[84,69290,56394],{"class":90},[84,69292,867],{"class":154},[84,69294,8824],{"class":158},[84,69296,65565],{"class":154},[84,69298,52760],{"class":52449},[84,69300,52456],{"class":154},[84,69302,69303,69305,69307],{"class":86,"line":18051},[84,69304,52925],{"class":154},[84,69306,52760],{"class":52449},[84,69308,52456],{"class":154},[84,69310,69311,69313,69315],{"class":86,"line":18056},[84,69312,53566],{"class":154},[84,69314,52760],{"class":52449},[84,69316,52456],{"class":154},[84,69318,69319,69321,69323],{"class":86,"line":18069},[84,69320,53293],{"class":154},[84,69322,52962],{"class":52449},[84,69324,52456],{"class":154},[84,69326,69327],{"class":86,"line":18074},[84,69328,69329],{"class":1378},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[84,69331,69332],{"class":86,"line":18079},[84,69333,69334],{"class":1378},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[84,69336,69337,69339,69341,69343,69345,69347,69349,69352],{"class":86,"line":18084},[84,69338,12393],{"class":129},[84,69340,62438],{"class":94},[84,69342,14735],{"class":129},[84,69344,55544],{"class":154},[84,69346,55547],{"class":90},[84,69348,155],{"class":154},[84,69350,69351],{"class":158},"'.tab-nav ul'",[84,69353,162],{"class":154},[84,69355,69356],{"class":86,"line":18097},[84,69357,69358],{"class":1378},"    \u002F\u002F 2.添加事件\n",[84,69360,69361,69363,69365,69367,69369,69371,69373,69375,69377],{"class":86,"line":18102},[84,69362,68100],{"class":154},[84,69364,58960],{"class":90},[84,69366,155],{"class":154},[84,69368,58965],{"class":158},[84,69370,846],{"class":154},[84,69372,55596],{"class":129},[84,69374,2839],{"class":154},[84,69376,1394],{"class":928},[84,69378,13613],{"class":154},[84,69380,69381,69383,69385],{"class":86,"line":33785},[84,69382,59390],{"class":154},[84,69384,68156],{"class":90},[84,69386,68159],{"class":154},[84,69388,69389],{"class":86,"line":33791},[84,69390,69391],{"class":1378},"      \u002F\u002Fe.targer是我们点击的对象\n",[84,69393,69394,69396,69398,69400,69403],{"class":86,"line":33797},[84,69395,55627],{"class":129},[84,69397,68180],{"class":154},[84,69399,55633],{"class":129},[84,69401,69402],{"class":158}," 'A'",[84,69404,13613],{"class":154},[84,69406,69407,69409,69411,69413,69416,69418,69420,69422,69424],{"class":86,"line":33803},[84,69408,53074],{"class":154},[84,69410,55547],{"class":90},[84,69412,155],{"class":154},[84,69414,69415],{"class":158},"'.active'",[84,69417,58150],{"class":154},[84,69419,58153],{"class":90},[84,69421,155],{"class":154},[84,69423,65860],{"class":158},[84,69425,162],{"class":154},[84,69427,69428,69431,69433,69435,69437],{"class":86,"line":33809},[84,69429,69430],{"class":154},"        e.target.classList.",[84,69432,6508],{"class":90},[84,69434,155],{"class":154},[84,69436,65860],{"class":158},[84,69438,162],{"class":154},[84,69440,69441],{"class":86,"line":33820},[84,69442,3578],{"emptyLinePlaceholder":1252},[84,69444,69445],{"class":86,"line":33826},[84,69446,69447],{"class":1378},"        \u002F\u002F 下面大盒子模块\n",[84,69449,69450],{"class":86,"line":33846},[84,69451,69452],{"class":1378},"        \u002F\u002F console.log(e.target.dataset.id)\n",[84,69454,69455,69457,69459,69461,69463],{"class":86,"line":33852},[84,69456,62416],{"class":129},[84,69458,4210],{"class":94},[84,69460,14735],{"class":129},[84,69462,136],{"class":129},[84,69464,69465],{"class":154},"e.target.dataset.id\n",[84,69467,69468,69470,69472,69474,69476,69478,69480,69482,69484],{"class":86,"line":33863},[84,69469,53074],{"class":154},[84,69471,55547],{"class":90},[84,69473,155],{"class":154},[84,69475,65908],{"class":158},[84,69477,58150],{"class":154},[84,69479,58153],{"class":90},[84,69481,155],{"class":154},[84,69483,65860],{"class":158},[84,69485,162],{"class":154},[84,69487,69488,69490,69492,69494,69496,69498,69500,69502,69504,69506,69508,69510,69512],{"class":86,"line":33869},[84,69489,53074],{"class":154},[84,69491,55547],{"class":90},[84,69493,155],{"class":154},[84,69495,65934],{"class":158},[84,69497,1751],{"class":154},[84,69499,136],{"class":129},[84,69501,133],{"class":94},[84,69503,58179],{"class":158},[84,69505,58150],{"class":154},[84,69507,6508],{"class":90},[84,69509,155],{"class":154},[84,69511,65860],{"class":158},[84,69513,162],{"class":154},[84,69515,69516],{"class":86,"line":33875},[84,69517,3578],{"emptyLinePlaceholder":1252},[84,69519,69520],{"class":86,"line":33881},[84,69521,53547],{"class":154},[84,69523,69524],{"class":86,"line":33887},[84,69525,34613],{"class":154},[84,69527,69528,69530,69532],{"class":86,"line":33893},[84,69529,53566],{"class":154},[84,69531,52962],{"class":52449},[84,69533,52456],{"class":154},[84,69535,69536,69538,69540],{"class":86,"line":33899},[84,69537,52934],{"class":154},[84,69539,52949],{"class":52449},[84,69541,52456],{"class":154},[84,69543,69544],{"class":86,"line":33905},[84,69545,3578],{"emptyLinePlaceholder":1252},[84,69547,69548,69550,69552],{"class":86,"line":33925},[84,69549,52934],{"class":154},[84,69551,51784],{"class":52449},[84,69553,52456],{"class":154},[198,69555,69557],{"id":69556},"_333-页面加载事件","3.3.3 页面加载事件",[26,69559,69560],{},[29,69561,69562],{},"load",[19,69564,69565],{},[2643,69566],{"alt":66,"src":69567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69569,69570],{},"window代表整个窗口，比document还要大",[19,69572,69573],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69575,69576],{},"img.addEventListener('load', function () {",[19,69578,69579],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69581,53613],{},[26,69583,69584],{"start":98},[29,69585,69586],{},"DOMContentLoaded",[19,69588,69589],{},[2643,69590],{"alt":66,"src":69591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69593,69594],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[198,69596,69598],{"id":69597},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69600,69601],{},[2643,69602],{"alt":66,"src":69603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69605,69606],{},[2643,69607],{"alt":66,"src":69608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69610,69611],{},[2643,69612],{"alt":66,"src":69613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69615,69616],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69618,69619],{},"获得的是数字型数据，不带单位",[19,69621,69622],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69624,69625],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69627,69628],{},"它是通过document.documentElement来获取",[19,69630,69631],{},[2643,69632],{"alt":66,"src":69633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69635,69636],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[198,69638,69640],{"id":69639},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69642,69643],{},[2643,69644],{"alt":66,"src":69645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69647,69648],{},[2643,69649],{"alt":66,"src":69650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[198,69652,69654],{"id":69653},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69656,69657],{},[2643,69658],{"alt":66,"src":69659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69661,69662],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69664,69665],{},[2643,69666],{"alt":66,"src":69667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69669,69670],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69672,69673],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69675,69676],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69678,69679],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69681,69682],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69684,69685],{},[2643,69686],{"alt":66,"src":69687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69689,69690],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69692,69693],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69695,69696],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69698,69699],{},"e.pageX-box.getBoundingClientRect()",[198,69701,69703],{"id":69702},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69705,69706],{},[2643,69707],{"alt":66,"src":69708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69710,69711],{},"这个是相对于视口来说的，它是个方法，不是属性值",[198,69713,69715],{"id":69714},"_338-总结","3.3.8 总结",[19,69717,69718],{},[2643,69719],{"alt":66,"src":69720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69722,69723],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69725,69726],{},"修改盒子的宽高只能通过width和height来实现",[198,69728,69730],{"id":69729},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[60,69732,69734],{"className":51782,"code":69733,"language":51784,"meta":66,"style":66},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[39,69735,69736,69741,69746,69751,69756],{"__ignoreMap":66},[84,69737,69738],{"class":86,"line":87},[84,69739,69740],{"class":154},"\u002F* 页面滑动 *\u002F\n",[84,69742,69743],{"class":86,"line":98},[84,69744,69745],{"class":154},"html {\n",[84,69747,69748],{"class":86,"line":106},[84,69749,69750],{"class":154},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[84,69752,69753],{"class":86,"line":112},[84,69754,69755],{"class":154},"  scroll-behavior: smooth;\n",[84,69757,69758],{"class":86,"line":425},[84,69759,2746],{"class":154},[19,69761,69762],{},"默认是auto",[198,69764,69766],{"id":69765},"_3310-日期对象","3.3.10 日期对象",[23168,69768,69770],{"id":69769},"_33101-实例化","3.3.10.1 实例化",[19,69772,69773],{},[2643,69774],{"alt":66,"src":69775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23168,69777,69779],{"id":69778},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69781,69782],{},[2643,69783],{"alt":66,"src":69784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69786,69787],{},"月份+1",[19,69789,69790],{},"老外认为第一天为0，星期天",[19,69792,69793],{},"方法使用的时候必须要跟括号",[19,69795,69796],{},"快速获得日期",[19,69798,69799],{},"\u002F\u002F 得到年月日",[19,69801,69802],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69804,69805],{},"\u002F\u002F 得到当地日期",[19,69807,69808],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69810,69811],{},"\u002F\u002F 得到当地时间",[19,69813,69814],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69816,69817],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69819,69820],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52962,69822,69823],{},"\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,69825,69826],{},"学会去封装函数！",[23168,69828,69830],{"id":69829},"_33103-时间戳","3.3.10.3 时间戳",[19,69832,69833],{},[2643,69834],{"alt":66,"src":69835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69837,69838],{},[2643,69839],{"alt":66,"src":69840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69842,69843],{},"三种方法记住一个就可以",[198,69845,69847],{"id":69846},"_3311-节点操作","3.3.11 节点操作",[23168,69849,69851],{"id":69850},"_33111-dom节点","3.3.11.1 DOM节点",[19,69853,69854],{},[2643,69855],{"alt":66,"src":69856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69858,69859],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23168,69861,69863],{"id":69862},"_33112-查找节点","3.3.11.2 查找节点",[19,69865,69866],{},"前边的document.querySelector()是获取的元素",[19,69868,69869],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69871,69872],{},[2643,69873],{"alt":66,"src":69874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,69876,69877],{},[29,69878,69879],{},"父节点",[19,69881,69882],{},[2643,69883],{"alt":66,"src":69884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,69886,69887],{"start":98},[29,69888,69889],{},"子节点",[19,69891,69892],{},[2643,69893],{"alt":66,"src":69894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69896,69897],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69899,69900],{},"children获得的是伪数组，是亲儿子",[26,69902,69903],{"start":106},[29,69904,69905],{},"兄弟节点",[19,69907,69908],{},[2643,69909],{"alt":66,"src":69910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23168,69912,69914],{"id":69913},"_33113-增加节点","3.3.11.3 增加节点",[19,69916,69917],{},[2643,69918],{"alt":66,"src":69919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69921,69922],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69924,69925],{},[2643,69926],{"alt":66,"src":69927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69929,69930],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69932,69933],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69935,69936],{},"例：",[52962,69938,69939],{},"\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,69941,69942],{},[2643,69943],{"alt":66,"src":69944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69946,69947],{},"false只克隆标签，里边的内容不会克隆过来",[60,69949,69951],{"className":51782,"code":69950,"language":51784,"meta":66,"style":66},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[39,69952,69953],{"__ignoreMap":66},[84,69954,69955],{"class":86,"line":87},[84,69956,69950],{"class":154},[23168,69958,69960],{"id":69959},"_33114-删除节点","3.3.11.4 删除节点",[19,69962,69963],{},[2643,69964],{"alt":66,"src":69965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69967,69968],{},"父亲删儿子",[19,69970,69971],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[198,69973,69975],{"id":69974},"_3312-m端事件","3.3.12 M端事件",[19,69977,69978],{},"M端就是移动端",[19,69980,69981],{},[2643,69982],{"alt":66,"src":69983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[198,69985,69987],{"id":69986},"_3313-插件","3.3.13 插件",[19,69989,69990],{},"要熟悉官网！！！",[19,69992,69993],{},[208,69994,69995],{"href":69995,"rel":69996},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[212],[19,69998,69999],{},[208,70000,70001],{"href":70001,"rel":70002},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[212],[198,70004,70006],{"id":70005},"_3314-学生信息表","3.3.14 学生信息表",[26,70008,70009,70012,70015,70018,70021,70024,70027,70030],{},[29,70010,70011],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70013,70014],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70016,70017],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70019,70020],{},"用好表单元素自带的属性，value,name等",[29,70022,70023],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70025,70026],{},"不要忘记事件对象",[29,70028,70029],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70031,70032],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70034,70035],{},"结构：",[60,70037,70039],{"className":51782,"code":70038,"language":51784,"meta":66,"style":66},"\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",[39,70040,70041,70051,70065,70069,70077,70091,70111,70132,70145,70169,70177,70181,70189,70202,70223,70251,70279,70284,70306,70326,70345,70353,70381,70403,70423,70443,70463,70483,70503,70511,70531,70539,70543,70556,70564,70572,70580,70593,70606,70619,70632,70645,70658,70671,70679,70687,70695,70700,70705,70710,70715,70720,70725,70730,70735,70740,70745,70750,70755,70760,70768,70776,70784,70788,70808,70827,70847,70867,70887,70907,70911,70916,70936,70941,70951,70956,70961,70981,71003,71008,71018,71022,71026,71031,71036,71065,71079,71094,71098,71102,71106,71111,71122,71135,71140,71145,71150,71155,71160,71164,71169,71174,71183,71188,71193,71205,71210,71217,71221,71226,71236,71241,71251,71256,71284,71305,71315,71335,71353,71370,71387,71404,71421,71425,71435,71440,71445,71450,71461,71465,71469,71473,71478,71483,71504,71516,71521,71526,71531,71545,71550,71557,71561,71565,71573,71577,71585,71589],{"__ignoreMap":66},[84,70042,70043,70045,70047,70049],{"class":86,"line":87},[84,70044,52446],{"class":154},[84,70046,52450],{"class":52449},[84,70048,52453],{"class":90},[84,70050,52456],{"class":154},[84,70052,70053,70055,70057,70059,70061,70063],{"class":86,"line":98},[84,70054,2218],{"class":154},[84,70056,51784],{"class":52449},[84,70058,52465],{"class":90},[84,70060,867],{"class":154},[84,70062,52470],{"class":158},[84,70064,52456],{"class":154},[84,70066,70067],{"class":86,"line":106},[84,70068,3578],{"emptyLinePlaceholder":1252},[84,70070,70071,70073,70075],{"class":86,"line":112},[84,70072,2218],{"class":154},[84,70074,52483],{"class":52449},[84,70076,52456],{"class":154},[84,70078,70079,70081,70083,70085,70087,70089],{"class":86,"line":425},[84,70080,53293],{"class":154},[84,70082,52493],{"class":52449},[84,70084,52496],{"class":90},[84,70086,867],{"class":154},[84,70088,52501],{"class":158},[84,70090,60273],{"class":154},[84,70092,70093,70095,70097,70099,70101,70103,70105,70107,70109],{"class":86,"line":2395},[84,70094,53293],{"class":154},[84,70096,52493],{"class":52449},[84,70098,16090],{"class":90},[84,70100,867],{"class":154},[84,70102,52540],{"class":158},[84,70104,52520],{"class":90},[84,70106,867],{"class":154},[84,70108,52547],{"class":158},[84,70110,60273],{"class":154},[84,70112,70113,70115,70117,70119,70121,70123,70125,70127,70130],{"class":86,"line":2401},[84,70114,53293],{"class":154},[84,70116,52493],{"class":52449},[84,70118,52512],{"class":90},[84,70120,867],{"class":154},[84,70122,52517],{"class":158},[84,70124,52520],{"class":90},[84,70126,867],{"class":154},[84,70128,70129],{"class":158},"\"ie=edge\"",[84,70131,60273],{"class":154},[84,70133,70134,70136,70138,70141,70143],{"class":86,"line":2492},[84,70135,53293],{"class":154},[84,70137,52556],{"class":52449},[84,70139,70140],{"class":154},">学生信息管理\u003C\u002F",[84,70142,52556],{"class":52449},[84,70144,52456],{"class":154},[84,70146,70147,70149,70152,70155,70157,70160,70162,70164,70167],{"class":86,"line":2498},[84,70148,53293],{"class":154},[84,70150,70151],{"class":52449},"link",[84,70153,70154],{"class":90}," rel",[84,70156,867],{"class":154},[84,70158,70159],{"class":158},"\"stylesheet\"",[84,70161,62203],{"class":90},[84,70163,867],{"class":154},[84,70165,70166],{"class":158},"\"css\u002Findex.css\"",[84,70168,60273],{"class":154},[84,70170,70171,70173,70175],{"class":86,"line":2510},[84,70172,52934],{"class":154},[84,70174,52483],{"class":52449},[84,70176,52456],{"class":154},[84,70178,70179],{"class":86,"line":2793},[84,70180,3578],{"emptyLinePlaceholder":1252},[84,70182,70183,70185,70187],{"class":86,"line":2798},[84,70184,2218],{"class":154},[84,70186,52949],{"class":52449},[84,70188,52456],{"class":154},[84,70190,70191,70193,70195,70198,70200],{"class":86,"line":2804},[84,70192,53293],{"class":154},[84,70194,10],{"class":52449},[84,70196,70197],{"class":154},">新增学员\u003C\u002F",[84,70199,10],{"class":52449},[84,70201,52456],{"class":154},[84,70203,70204,70206,70208,70210,70212,70214,70217,70219,70221],{"class":86,"line":2809},[84,70205,53293],{"class":154},[84,70207,67771],{"class":52449},[84,70209,54635],{"class":90},[84,70211,867],{"class":154},[84,70213,63810],{"class":158},[84,70215,70216],{"class":90}," autocomplete",[84,70218,867],{"class":154},[84,70220,32929],{"class":158},[84,70222,52456],{"class":154},[84,70224,70225,70228,70230,70232,70234,70236,70238,70240,70243,70245,70247,70249],{"class":86,"line":2823},[84,70226,70227],{"class":154},"    姓名：\u003C",[84,70229,54970],{"class":52449},[84,70231,54973],{"class":90},[84,70233,867],{"class":154},[84,70235,63845],{"class":158},[84,70237,54635],{"class":90},[84,70239,867],{"class":154},[84,70241,70242],{"class":158},"\"uname\"",[84,70244,16090],{"class":90},[84,70246,867],{"class":154},[84,70248,70242],{"class":158},[84,70250,60273],{"class":154},[84,70252,70253,70256,70258,70260,70262,70264,70266,70268,70271,70273,70275,70277],{"class":86,"line":2828},[84,70254,70255],{"class":154},"    年龄：\u003C",[84,70257,54970],{"class":52449},[84,70259,54973],{"class":90},[84,70261,867],{"class":154},[84,70263,63845],{"class":158},[84,70265,54635],{"class":90},[84,70267,867],{"class":154},[84,70269,70270],{"class":158},"\"age\"",[84,70272,16090],{"class":90},[84,70274,867],{"class":154},[84,70276,70270],{"class":158},[84,70278,60273],{"class":154},[84,70280,70281],{"class":86,"line":2834},[84,70282,70283],{"class":154},"    性别:\n",[84,70285,70286,70288,70291,70293,70295,70298,70300,70302,70304],{"class":86,"line":2855},[84,70287,52490],{"class":154},[84,70289,70290],{"class":52449},"select",[84,70292,16090],{"class":90},[84,70294,867],{"class":154},[84,70296,70297],{"class":158},"\"gender\"",[84,70299,54635],{"class":90},[84,70301,867],{"class":154},[84,70303,70297],{"class":158},[84,70305,52456],{"class":154},[84,70307,70308,70310,70313,70315,70317,70319,70322,70324],{"class":86,"line":2860},[84,70309,56381],{"class":154},[84,70311,70312],{"class":52449},"option",[84,70314,67797],{"class":90},[84,70316,867],{"class":154},[84,70318,11133],{"class":158},[84,70320,70321],{"class":154},">男\u003C\u002F",[84,70323,70312],{"class":52449},[84,70325,52456],{"class":154},[84,70327,70328,70330,70332,70334,70336,70338,70341,70343],{"class":86,"line":2874},[84,70329,56381],{"class":154},[84,70331,70312],{"class":52449},[84,70333,67797],{"class":90},[84,70335,867],{"class":154},[84,70337,11202],{"class":158},[84,70339,70340],{"class":154},">女\u003C\u002F",[84,70342,70312],{"class":52449},[84,70344,52456],{"class":154},[84,70346,70347,70349,70351],{"class":86,"line":2879},[84,70348,52925],{"class":154},[84,70350,70290],{"class":52449},[84,70352,52456],{"class":154},[84,70354,70355,70358,70360,70362,70364,70366,70368,70370,70373,70375,70377,70379],{"class":86,"line":2908},[84,70356,70357],{"class":154},"    薪资：\u003C",[84,70359,54970],{"class":52449},[84,70361,54973],{"class":90},[84,70363,867],{"class":154},[84,70365,63845],{"class":158},[84,70367,54635],{"class":90},[84,70369,867],{"class":154},[84,70371,70372],{"class":158},"\"salary\"",[84,70374,16090],{"class":90},[84,70376,867],{"class":154},[84,70378,70372],{"class":158},[84,70380,60273],{"class":154},[84,70382,70383,70386,70388,70390,70392,70395,70397,70399,70401],{"class":86,"line":2913},[84,70384,70385],{"class":154},"    就业城市：\u003C",[84,70387,70290],{"class":52449},[84,70389,16090],{"class":90},[84,70391,867],{"class":154},[84,70393,70394],{"class":158},"\"city\"",[84,70396,54635],{"class":90},[84,70398,867],{"class":154},[84,70400,70394],{"class":158},[84,70402,52456],{"class":154},[84,70404,70405,70407,70409,70411,70413,70416,70419,70421],{"class":86,"line":2930},[84,70406,56381],{"class":154},[84,70408,70312],{"class":52449},[84,70410,67797],{"class":90},[84,70412,867],{"class":154},[84,70414,70415],{"class":158},"\"北京\"",[84,70417,70418],{"class":154},">北京\u003C\u002F",[84,70420,70312],{"class":52449},[84,70422,52456],{"class":154},[84,70424,70425,70427,70429,70431,70433,70436,70439,70441],{"class":86,"line":2935},[84,70426,56381],{"class":154},[84,70428,70312],{"class":52449},[84,70430,67797],{"class":90},[84,70432,867],{"class":154},[84,70434,70435],{"class":158},"\"上海\"",[84,70437,70438],{"class":154},">上海\u003C\u002F",[84,70440,70312],{"class":52449},[84,70442,52456],{"class":154},[84,70444,70445,70447,70449,70451,70453,70456,70459,70461],{"class":86,"line":2940},[84,70446,56381],{"class":154},[84,70448,70312],{"class":52449},[84,70450,67797],{"class":90},[84,70452,867],{"class":154},[84,70454,70455],{"class":158},"\"广州\"",[84,70457,70458],{"class":154},">广州\u003C\u002F",[84,70460,70312],{"class":52449},[84,70462,52456],{"class":154},[84,70464,70465,70467,70469,70471,70473,70476,70479,70481],{"class":86,"line":2945},[84,70466,56381],{"class":154},[84,70468,70312],{"class":52449},[84,70470,67797],{"class":90},[84,70472,867],{"class":154},[84,70474,70475],{"class":158},"\"深圳\"",[84,70477,70478],{"class":154},">深圳\u003C\u002F",[84,70480,70312],{"class":52449},[84,70482,52456],{"class":154},[84,70484,70485,70487,70489,70491,70493,70496,70499,70501],{"class":86,"line":2959},[84,70486,56381],{"class":154},[84,70488,70312],{"class":52449},[84,70490,67797],{"class":90},[84,70492,867],{"class":154},[84,70494,70495],{"class":158},"\"曹县\"",[84,70497,70498],{"class":154},">曹县\u003C\u002F",[84,70500,70312],{"class":52449},[84,70502,52456],{"class":154},[84,70504,70505,70507,70509],{"class":86,"line":2964},[84,70506,52925],{"class":154},[84,70508,70290],{"class":52449},[84,70510,52456],{"class":154},[84,70512,70513,70515,70517,70519,70521,70524,70527,70529],{"class":86,"line":3755},[84,70514,52490],{"class":154},[84,70516,55036],{"class":52449},[84,70518,54635],{"class":90},[84,70520,867],{"class":154},[84,70522,70523],{"class":158},"\"add\"",[84,70525,70526],{"class":154},">录入\u003C\u002F",[84,70528,55036],{"class":52449},[84,70530,52456],{"class":154},[84,70532,70533,70535,70537],{"class":86,"line":3769},[84,70534,53566],{"class":154},[84,70536,67771],{"class":52449},[84,70538,52456],{"class":154},[84,70540,70541],{"class":86,"line":3777},[84,70542,3578],{"emptyLinePlaceholder":1252},[84,70544,70545,70547,70549,70552,70554],{"class":86,"line":3782},[84,70546,53293],{"class":154},[84,70548,10],{"class":52449},[84,70550,70551],{"class":154},">就业榜\u003C\u002F",[84,70553,10],{"class":52449},[84,70555,52456],{"class":154},[84,70557,70558,70560,70562],{"class":86,"line":3788},[84,70559,53293],{"class":154},[84,70561,458],{"class":52449},[84,70563,52456],{"class":154},[84,70565,70566,70568,70570],{"class":86,"line":3794},[84,70567,52490],{"class":154},[84,70569,461],{"class":52449},[84,70571,52456],{"class":154},[84,70573,70574,70576,70578],{"class":86,"line":3799},[84,70575,56381],{"class":154},[84,70577,464],{"class":52449},[84,70579,52456],{"class":154},[84,70581,70582,70584,70586,70589,70591],{"class":86,"line":9120},[84,70583,56449],{"class":154},[84,70585,467],{"class":52449},[84,70587,70588],{"class":154},">序号\u003C\u002F",[84,70590,467],{"class":52449},[84,70592,52456],{"class":154},[84,70594,70595,70597,70599,70602,70604],{"class":86,"line":9144},[84,70596,56449],{"class":154},[84,70598,467],{"class":52449},[84,70600,70601],{"class":154},">姓名\u003C\u002F",[84,70603,467],{"class":52449},[84,70605,52456],{"class":154},[84,70607,70608,70610,70612,70615,70617],{"class":86,"line":9149},[84,70609,56449],{"class":154},[84,70611,467],{"class":52449},[84,70613,70614],{"class":154},">年龄\u003C\u002F",[84,70616,467],{"class":52449},[84,70618,52456],{"class":154},[84,70620,70621,70623,70625,70628,70630],{"class":86,"line":9155},[84,70622,56449],{"class":154},[84,70624,467],{"class":52449},[84,70626,70627],{"class":154},">性别\u003C\u002F",[84,70629,467],{"class":52449},[84,70631,52456],{"class":154},[84,70633,70634,70636,70638,70641,70643],{"class":86,"line":9182},[84,70635,56449],{"class":154},[84,70637,467],{"class":52449},[84,70639,70640],{"class":154},">薪资\u003C\u002F",[84,70642,467],{"class":52449},[84,70644,52456],{"class":154},[84,70646,70647,70649,70651,70654,70656],{"class":86,"line":9187},[84,70648,56449],{"class":154},[84,70650,467],{"class":52449},[84,70652,70653],{"class":154},">就业城市\u003C\u002F",[84,70655,467],{"class":52449},[84,70657,52456],{"class":154},[84,70659,70660,70662,70664,70667,70669],{"class":86,"line":9193},[84,70661,56449],{"class":154},[84,70663,467],{"class":52449},[84,70665,70666],{"class":154},">操作\u003C\u002F",[84,70668,467],{"class":52449},[84,70670,52456],{"class":154},[84,70672,70673,70675,70677],{"class":86,"line":9205},[84,70674,56554],{"class":154},[84,70676,464],{"class":52449},[84,70678,52456],{"class":154},[84,70680,70681,70683,70685],{"class":86,"line":9217},[84,70682,52925],{"class":154},[84,70684,461],{"class":52449},[84,70686,52456],{"class":154},[84,70688,70689,70691,70693],{"class":86,"line":9229},[84,70690,52490],{"class":154},[84,70692,474],{"class":52449},[84,70694,52456],{"class":154},[84,70696,70697],{"class":86,"line":10888},[84,70698,70699],{"class":1378},"      \u003C!-- \n",[84,70701,70702],{"class":86,"line":10913},[84,70703,70704],{"class":1378},"        \u003Ctr>\n",[84,70706,70707],{"class":86,"line":10936},[84,70708,70709],{"class":1378},"          \u003Ctd>1001\u003C\u002Ftd>\n",[84,70711,70712],{"class":86,"line":10960},[84,70713,70714],{"class":1378},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[84,70716,70717],{"class":86,"line":10965},[84,70718,70719],{"class":1378},"          \u003Ctd>19\u003C\u002Ftd>\n",[84,70721,70722],{"class":86,"line":10970},[84,70723,70724],{"class":1378},"          \u003Ctd>男\u003C\u002Ftd>\n",[84,70726,70727],{"class":86,"line":10975},[84,70728,70729],{"class":1378},"          \u003Ctd>15000\u003C\u002Ftd>\n",[84,70731,70732],{"class":86,"line":10984},[84,70733,70734],{"class":1378},"          \u003Ctd>上海\u003C\u002Ftd>\n",[84,70736,70737],{"class":86,"line":10989},[84,70738,70739],{"class":1378},"          \u003Ctd>\n",[84,70741,70742],{"class":86,"line":10995},[84,70743,70744],{"class":1378},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[84,70746,70747],{"class":86,"line":11016},[84,70748,70749],{"class":1378},"          \u003C\u002Ftd>\n",[84,70751,70752],{"class":86,"line":11022},[84,70753,70754],{"class":1378},"        \u003C\u002Ftr> \n",[84,70756,70757],{"class":86,"line":11036},[84,70758,70759],{"class":1378},"        -->\n",[84,70761,70762,70764,70766],{"class":86,"line":11042},[84,70763,52925],{"class":154},[84,70765,474],{"class":52449},[84,70767,52456],{"class":154},[84,70769,70770,70772,70774],{"class":86,"line":11069},[84,70771,53566],{"class":154},[84,70773,458],{"class":52449},[84,70775,52456],{"class":154},[84,70777,70778,70780,70782],{"class":86,"line":11078},[84,70779,53293],{"class":154},[84,70781,52962],{"class":52449},[84,70783,52456],{"class":154},[84,70785,70786],{"class":86,"line":11084},[84,70787,61104],{"class":1378},[84,70789,70790,70792,70795,70797,70799,70801,70803,70806],{"class":86,"line":11092},[84,70791,12393],{"class":129},[84,70793,70794],{"class":94}," uname",[84,70796,14735],{"class":129},[84,70798,55544],{"class":154},[84,70800,55547],{"class":90},[84,70802,155],{"class":154},[84,70804,70805],{"class":158},"'.uname'",[84,70807,162],{"class":154},[84,70809,70810,70812,70814,70816,70818,70820,70822,70825],{"class":86,"line":11097},[84,70811,12393],{"class":129},[84,70813,16859],{"class":94},[84,70815,14735],{"class":129},[84,70817,55544],{"class":154},[84,70819,55547],{"class":90},[84,70821,155],{"class":154},[84,70823,70824],{"class":158},"'.age'",[84,70826,162],{"class":154},[84,70828,70829,70831,70834,70836,70838,70840,70842,70845],{"class":86,"line":17774},[84,70830,12393],{"class":129},[84,70832,70833],{"class":94}," gender",[84,70835,14735],{"class":129},[84,70837,55544],{"class":154},[84,70839,55547],{"class":90},[84,70841,155],{"class":154},[84,70843,70844],{"class":158},"'.gender'",[84,70846,162],{"class":154},[84,70848,70849,70851,70854,70856,70858,70860,70862,70865],{"class":86,"line":17780},[84,70850,12393],{"class":129},[84,70852,70853],{"class":94}," salary",[84,70855,14735],{"class":129},[84,70857,55544],{"class":154},[84,70859,55547],{"class":90},[84,70861,155],{"class":154},[84,70863,70864],{"class":158},"'.salary'",[84,70866,162],{"class":154},[84,70868,70869,70871,70874,70876,70878,70880,70882,70885],{"class":86,"line":17803},[84,70870,12393],{"class":129},[84,70872,70873],{"class":94}," city",[84,70875,14735],{"class":129},[84,70877,55544],{"class":154},[84,70879,55547],{"class":90},[84,70881,155],{"class":154},[84,70883,70884],{"class":158},"'.city'",[84,70886,162],{"class":154},[84,70888,70889,70891,70894,70896,70898,70900,70902,70905],{"class":86,"line":17809},[84,70890,12393],{"class":129},[84,70892,70893],{"class":94}," tbody",[84,70895,14735],{"class":129},[84,70897,55544],{"class":154},[84,70899,55547],{"class":90},[84,70901,155],{"class":154},[84,70903,70904],{"class":158},"'tbody'",[84,70906,162],{"class":154},[84,70908,70909],{"class":86,"line":17832},[84,70910,3578],{"emptyLinePlaceholder":1252},[84,70912,70913],{"class":86,"line":17846},[84,70914,70915],{"class":1378},"    \u002F\u002F 获取所有带有name属性的元素\n",[84,70917,70918,70920,70923,70925,70927,70929,70931,70934],{"class":86,"line":17866},[84,70919,12393],{"class":129},[84,70921,70922],{"class":94}," items",[84,70924,14735],{"class":129},[84,70926,55544],{"class":154},[84,70928,56828],{"class":90},[84,70930,155],{"class":154},[84,70932,70933],{"class":158},"'[name]'",[84,70935,162],{"class":154},[84,70937,70938],{"class":86,"line":17872},[84,70939,70940],{"class":1378},"    \u002F\u002F 声明一个空的数组\n",[84,70942,70943,70945,70947,70949],{"class":86,"line":17883},[84,70944,12393],{"class":129},[84,70946,58842],{"class":94},[84,70948,14735],{"class":129},[84,70950,52987],{"class":154},[84,70952,70953],{"class":86,"line":17906},[84,70954,70955],{"class":1378},"    \u002F\u002F 1.录入模块\n",[84,70957,70958],{"class":86,"line":17928},[84,70959,70960],{"class":1378},"    \u002F\u002F 1.1这是一个表单提交事件\n",[84,70962,70963,70965,70968,70970,70972,70974,70976,70979],{"class":86,"line":17933},[84,70964,12393],{"class":129},[84,70966,70967],{"class":94}," info",[84,70969,14735],{"class":129},[84,70971,55544],{"class":154},[84,70973,55547],{"class":90},[84,70975,155],{"class":154},[84,70977,70978],{"class":158},"'.info'",[84,70980,162],{"class":154},[84,70982,70983,70986,70988,70990,70993,70995,70997,70999,71001],{"class":86,"line":17939},[84,70984,70985],{"class":154},"    info.",[84,70987,58960],{"class":90},[84,70989,155],{"class":154},[84,70991,70992],{"class":158},"'submit'",[84,70994,846],{"class":154},[84,70996,55596],{"class":129},[84,70998,2839],{"class":154},[84,71000,1394],{"class":928},[84,71002,13613],{"class":154},[84,71004,71005],{"class":86,"line":17953},[84,71006,71007],{"class":1378},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[84,71009,71010,71013,71016],{"class":86,"line":17966},[84,71011,71012],{"class":154},"      e.",[84,71014,71015],{"class":90},"preventDefault",[84,71017,183],{"class":154},[84,71019,71020],{"class":86,"line":17971},[84,71021,61158],{"class":1378},[84,71023,71024],{"class":86,"line":17985},[84,71025,3578],{"emptyLinePlaceholder":1252},[84,71027,71028],{"class":86,"line":17990},[84,71029,71030],{"class":1378},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[84,71032,71033],{"class":86,"line":17996},[84,71034,71035],{"class":1378},"      \u002F\u002F 先遍历循环\n",[84,71037,71038,71040,71042,71044,71046,71048,71050,71052,71054,71057,71059,71061,71063],{"class":86,"line":18001},[84,71039,53433],{"class":129},[84,71041,2839],{"class":154},[84,71043,52996],{"class":129},[84,71045,10610],{"class":154},[84,71047,867],{"class":129},[84,71049,5271],{"class":94},[84,71051,10617],{"class":154},[84,71053,2218],{"class":129},[84,71055,71056],{"class":154}," items.",[84,71058,53117],{"class":94},[84,71060,4392],{"class":154},[84,71062,3470],{"class":129},[84,71064,13613],{"class":154},[84,71066,71067,71069,71072,71074,71077],{"class":86,"line":18015},[84,71068,3675],{"class":129},[84,71070,71071],{"class":154}," (items[i].value ",[84,71073,55633],{"class":129},[84,71075,71076],{"class":158}," ''",[84,71078,13613],{"class":154},[84,71080,71081,71084,71087,71089,71092],{"class":86,"line":18020},[84,71082,71083],{"class":129},"          return",[84,71085,71086],{"class":90}," alert",[84,71088,155],{"class":154},[84,71090,71091],{"class":158},"'输入内容不能为空'",[84,71093,162],{"class":154},[84,71095,71096],{"class":86,"line":18025},[84,71097,3707],{"class":154},[84,71099,71100],{"class":86,"line":18039},[84,71101,53547],{"class":154},[84,71103,71104],{"class":86,"line":18051},[84,71105,3578],{"emptyLinePlaceholder":1252},[84,71107,71108],{"class":86,"line":18056},[84,71109,71110],{"class":1378},"      \u002F\u002F 创建新的对象\n",[84,71112,71113,71115,71118,71120],{"class":86,"line":18069},[84,71114,59374],{"class":129},[84,71116,71117],{"class":94}," obj",[84,71119,14735],{"class":129},[84,71121,16742],{"class":154},[84,71123,71124,71127,71129,71131,71133],{"class":86,"line":18074},[84,71125,71126],{"class":154},"        stuID: arr.",[84,71128,53117],{"class":94},[84,71130,136],{"class":129},[84,71132,133],{"class":94},[84,71134,32619],{"class":154},[84,71136,71137],{"class":86,"line":18079},[84,71138,71139],{"class":154},"        uname: uname.value,\n",[84,71141,71142],{"class":86,"line":18084},[84,71143,71144],{"class":154},"        age: age.value,\n",[84,71146,71147],{"class":86,"line":18097},[84,71148,71149],{"class":154},"        gender: gender.value,\n",[84,71151,71152],{"class":86,"line":18102},[84,71153,71154],{"class":154},"        salary: salary.value,\n",[84,71156,71157],{"class":86,"line":33785},[84,71158,71159],{"class":154},"        city: city.value\n",[84,71161,71162],{"class":86,"line":33791},[84,71163,53547],{"class":154},[84,71165,71166],{"class":86,"line":33797},[84,71167,71168],{"class":1378},"      \u002F\u002F console.log(obj);\n",[84,71170,71171],{"class":86,"line":33803},[84,71172,71173],{"class":1378},"      \u002F\u002F 追加到数组里面\n",[84,71175,71176,71178,71180],{"class":86,"line":33809},[84,71177,59153],{"class":154},[84,71179,53033],{"class":90},[84,71181,71182],{"class":154},"(obj)\n",[84,71184,71185],{"class":86,"line":33820},[84,71186,71187],{"class":1378},"      \u002F\u002F console.log(arr);\n",[84,71189,71190],{"class":86,"line":33826},[84,71191,71192],{"class":1378},"      \u002F\u002F 清空表单  reset重置表单\n",[84,71194,71195,71198,71200,71203],{"class":86,"line":33846},[84,71196,71197],{"class":94},"      this",[84,71199,1867],{"class":154},[84,71201,71202],{"class":90},"reset",[84,71204,183],{"class":154},[84,71206,71207],{"class":86,"line":33852},[84,71208,71209],{"class":1378},"      \u002F\u002F 调用渲染函数\n",[84,71211,71212,71215],{"class":86,"line":33863},[84,71213,71214],{"class":90},"      render",[84,71216,183],{"class":154},[84,71218,71219],{"class":86,"line":33869},[84,71220,34613],{"class":154},[84,71222,71223],{"class":86,"line":33875},[84,71224,71225],{"class":1378},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[84,71227,71228,71231,71234],{"class":86,"line":33881},[84,71229,71230],{"class":129},"    function",[84,71232,71233],{"class":90}," render",[84,71235,12025],{"class":154},[84,71237,71238],{"class":86,"line":33887},[84,71239,71240],{"class":1378},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[84,71242,71243,71246,71248],{"class":86,"line":33893},[84,71244,71245],{"class":154},"      tbody.innerHTML ",[84,71247,867],{"class":129},[84,71249,71250],{"class":158}," ''\n",[84,71252,71253],{"class":86,"line":33899},[84,71254,71255],{"class":1378},"      \u002F\u002F 遍历数组\n",[84,71257,71258,71260,71262,71264,71266,71268,71270,71272,71274,71276,71278,71280,71282],{"class":86,"line":33905},[84,71259,53433],{"class":129},[84,71261,2839],{"class":154},[84,71263,52996],{"class":129},[84,71265,10610],{"class":154},[84,71267,867],{"class":129},[84,71269,5271],{"class":94},[84,71271,10617],{"class":154},[84,71273,2218],{"class":129},[84,71275,53114],{"class":154},[84,71277,53117],{"class":94},[84,71279,4392],{"class":154},[84,71281,3470],{"class":129},[84,71283,13613],{"class":154},[84,71285,71286,71288,71291,71293,71295,71298,71300,71303],{"class":86,"line":33925},[84,71287,62416],{"class":129},[84,71289,71290],{"class":94}," tr",[84,71292,14735],{"class":129},[84,71294,55544],{"class":154},[84,71296,71297],{"class":90},"createElement",[84,71299,155],{"class":154},[84,71301,71302],{"class":158},"'tr'",[84,71304,162],{"class":154},[84,71306,71307,71310,71312],{"class":86,"line":33931},[84,71308,71309],{"class":154},"        tr.innerHTML ",[84,71311,867],{"class":129},[84,71313,71314],{"class":158}," `\n",[84,71316,71317,71320,71322,71324,71326,71329,71332],{"class":86,"line":33947},[84,71318,71319],{"class":158},"        \u003Ctd>${",[84,71321,5058],{"class":154},[84,71323,2198],{"class":158},[84,71325,1751],{"class":154},[84,71327,71328],{"class":158},"].",[84,71330,71331],{"class":154},"stuID",[84,71333,71334],{"class":158},"}\u003C\u002Ftd>\n",[84,71336,71337,71340,71342,71344,71346,71348,71351],{"class":86,"line":33953},[84,71338,71339],{"class":158},"          \u003Ctd>${",[84,71341,5058],{"class":154},[84,71343,2198],{"class":158},[84,71345,1751],{"class":154},[84,71347,71328],{"class":158},[84,71349,71350],{"class":154},"uname",[84,71352,71334],{"class":158},[84,71354,71355,71357,71359,71361,71363,71365,71368],{"class":86,"line":33967},[84,71356,71339],{"class":158},[84,71358,5058],{"class":154},[84,71360,2198],{"class":158},[84,71362,1751],{"class":154},[84,71364,71328],{"class":158},[84,71366,71367],{"class":154},"age",[84,71369,71334],{"class":158},[84,71371,71372,71374,71376,71378,71380,71382,71385],{"class":86,"line":33973},[84,71373,71339],{"class":158},[84,71375,5058],{"class":154},[84,71377,2198],{"class":158},[84,71379,1751],{"class":154},[84,71381,71328],{"class":158},[84,71383,71384],{"class":154},"gender",[84,71386,71334],{"class":158},[84,71388,71389,71391,71393,71395,71397,71399,71402],{"class":86,"line":33988},[84,71390,71339],{"class":158},[84,71392,5058],{"class":154},[84,71394,2198],{"class":158},[84,71396,1751],{"class":154},[84,71398,71328],{"class":158},[84,71400,71401],{"class":154},"salary",[84,71403,71334],{"class":158},[84,71405,71406,71408,71410,71412,71414,71416,71419],{"class":86,"line":33994},[84,71407,71339],{"class":158},[84,71409,5058],{"class":154},[84,71411,2198],{"class":158},[84,71413,1751],{"class":154},[84,71415,71328],{"class":158},[84,71417,71418],{"class":154},"city",[84,71420,71334],{"class":158},[84,71422,71423],{"class":86,"line":34003},[84,71424,70739],{"class":158},[84,71426,71427,71430,71432],{"class":86,"line":34009},[84,71428,71429],{"class":158},"            \u003Ca href=\"javascript:\" data-id=${",[84,71431,1751],{"class":154},[84,71433,71434],{"class":158},"}>删除\u003C\u002Fa>\n",[84,71436,71437],{"class":86,"line":34018},[84,71438,71439],{"class":158},"          \u003C\u002Ftd> \n",[84,71441,71442],{"class":86,"line":34024},[84,71443,71444],{"class":158},"          `\n",[84,71446,71447],{"class":86,"line":34030},[84,71448,71449],{"class":1378},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[84,71451,71452,71455,71458],{"class":86,"line":34039},[84,71453,71454],{"class":154},"        tbody.",[84,71456,71457],{"class":90},"appendChild",[84,71459,71460],{"class":154},"(tr)\n",[84,71462,71463],{"class":86,"line":34045},[84,71464,53547],{"class":154},[84,71466,71467],{"class":86,"line":34056},[84,71468,3365],{"class":154},[84,71470,71471],{"class":86,"line":34062},[84,71472,3578],{"emptyLinePlaceholder":1252},[84,71474,71475],{"class":86,"line":34081},[84,71476,71477],{"class":1378},"    \u002F\u002F 3.删除委托\n",[84,71479,71480],{"class":86,"line":34087},[84,71481,71482],{"class":1378},"    \u002F\u002F 3.1 事件委托 tbody\n",[84,71484,71485,71488,71490,71492,71494,71496,71498,71500,71502],{"class":86,"line":34098},[84,71486,71487],{"class":154},"    tbody.",[84,71489,58960],{"class":90},[84,71491,155],{"class":154},[84,71493,58965],{"class":158},[84,71495,846],{"class":154},[84,71497,55596],{"class":129},[84,71499,2839],{"class":154},[84,71501,1394],{"class":928},[84,71503,13613],{"class":154},[84,71505,71506,71508,71510,71512,71514],{"class":86,"line":34104},[84,71507,55627],{"class":129},[84,71509,68180],{"class":154},[84,71511,55633],{"class":129},[84,71513,69402],{"class":158},[84,71515,13613],{"class":154},[84,71517,71518],{"class":86,"line":34124},[84,71519,71520],{"class":1378},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[84,71522,71523],{"class":86,"line":34140},[84,71524,71525],{"class":1378},"        \u002F\u002F console.log(e.target.dataset.id);\n",[84,71527,71528],{"class":86,"line":34146},[84,71529,71530],{"class":1378},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[84,71532,71533,71536,71538,71541,71543],{"class":86,"line":34160},[84,71534,71535],{"class":154},"        arr.",[84,71537,59156],{"class":90},[84,71539,71540],{"class":154},"(e.target.dataset.id, ",[84,71542,1529],{"class":94},[84,71544,162],{"class":154},[84,71546,71547],{"class":86,"line":34166},[84,71548,71549],{"class":1378},"        \u002F\u002F 重新渲染一次\n",[84,71551,71552,71555],{"class":86,"line":34172},[84,71553,71554],{"class":90},"        render",[84,71556,183],{"class":154},[84,71558,71559],{"class":86,"line":34183},[84,71560,53547],{"class":154},[84,71562,71563],{"class":86,"line":34189},[84,71564,34613],{"class":154},[84,71566,71567,71569,71571],{"class":86,"line":34195},[84,71568,53566],{"class":154},[84,71570,52962],{"class":52449},[84,71572,52456],{"class":154},[84,71574,71575],{"class":86,"line":34205},[84,71576,3578],{"emptyLinePlaceholder":1252},[84,71578,71579,71581,71583],{"class":86,"line":34211},[84,71580,52934],{"class":154},[84,71582,52949],{"class":52449},[84,71584,52456],{"class":154},[84,71586,71587],{"class":86,"line":34222},[84,71588,3578],{"emptyLinePlaceholder":1252},[84,71590,71591,71593,71595],{"class":86,"line":34228},[84,71592,52934],{"class":154},[84,71594,51784],{"class":52449},[84,71596,52456],{"class":154},[19,71598,71599],{},"样式：",[60,71601,71605],{"className":71602,"code":71603,"language":71604,"meta":66,"style":66},"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",[39,71606,71607,71612,71622,71631,71635,71639,71644,71654,71659,71663,71668,71678,71683,71692,71696,71700,71705,71710,71720,71730,71735,71739,71744,71753,71763,71768,71778,71788,71792,71797,71805,71809,71814,71819,71824,71832,71841,71845,71850,71859,71863,71868,71877,71881,71886,71895,71904,71912,71916,71921,71930,71940,71949,71959,71965,71974,71984,71994,71998,72003,72012,72020,72030,72038,72047,72056,72066,72074,72078,72083,72092],{"__ignoreMap":66},[84,71608,71609],{"class":86,"line":87},[84,71610,71611],{"class":154},"* {\n",[84,71613,71614,71617,71619],{"class":86,"line":98},[84,71615,71616],{"class":52449},"  margin",[84,71618,52586],{"class":154},[84,71620,71621],{"class":158},"0;\n",[84,71623,71624,71627,71629],{"class":86,"line":106},[84,71625,71626],{"class":158},"  padding",[84,71628,52586],{"class":154},[84,71630,71621],{"class":158},[84,71632,71633],{"class":86,"line":112},[84,71634,2746],{"class":154},[84,71636,71637],{"class":86,"line":425},[84,71638,3578],{"emptyLinePlaceholder":1252},[84,71640,71641],{"class":86,"line":2395},[84,71642,71643],{"class":158},"a {\n",[84,71645,71646,71649,71651],{"class":86,"line":2401},[84,71647,71648],{"class":52449},"  text-decoration",[84,71650,52586],{"class":154},[84,71652,71653],{"class":158},"none;\n",[84,71655,71656],{"class":86,"line":2492},[84,71657,71658],{"class":158},"  color:#721c24;\n",[84,71660,71661],{"class":86,"line":2498},[84,71662,2746],{"class":154},[84,71664,71665],{"class":86,"line":2510},[84,71666,71667],{"class":158},"h1 {\n",[84,71669,71670,71673,71675],{"class":86,"line":2793},[84,71671,71672],{"class":52449},"  text-align",[84,71674,52586],{"class":154},[84,71676,71677],{"class":158},"center;\n",[84,71679,71680],{"class":86,"line":2798},[84,71681,71682],{"class":158},"  color:#333;\n",[84,71684,71685,71687,71689],{"class":86,"line":2804},[84,71686,71616],{"class":52449},[84,71688,52586],{"class":154},[84,71690,71691],{"class":158},"20px 0;\n",[84,71693,71694],{"class":86,"line":2809},[84,71695,3852],{"class":154},[84,71697,71698],{"class":86,"line":2823},[84,71699,2746],{"class":154},[84,71701,71702],{"class":86,"line":2828},[84,71703,71704],{"class":158},"table {\n",[84,71706,71707],{"class":86,"line":2834},[84,71708,71709],{"class":158},"  margin:0 auto;\n",[84,71711,71712,71715,71717],{"class":86,"line":2855},[84,71713,71714],{"class":52449},"  width",[84,71716,52586],{"class":154},[84,71718,71719],{"class":158},"800px;\n",[84,71721,71722,71725,71727],{"class":86,"line":2860},[84,71723,71724],{"class":52449},"  border-collapse",[84,71726,52586],{"class":154},[84,71728,71729],{"class":158},"collapse;\n",[84,71731,71732],{"class":86,"line":2874},[84,71733,71734],{"class":158},"  color:#004085;\n",[84,71736,71737],{"class":86,"line":2879},[84,71738,2746],{"class":154},[84,71740,71741],{"class":86,"line":2908},[84,71742,71743],{"class":158},"th {\n",[84,71745,71746,71748,71750],{"class":86,"line":2913},[84,71747,71626],{"class":52449},[84,71749,52586],{"class":154},[84,71751,71752],{"class":158},"10px;\n",[84,71754,71755,71758,71760],{"class":86,"line":2930},[84,71756,71757],{"class":52449},"  background",[84,71759,52586],{"class":154},[84,71761,71762],{"class":1378},"#cfe5ff;\n",[84,71764,71765],{"class":86,"line":2935},[84,71766,71767],{"class":154},"  \n",[84,71769,71770,71773,71775],{"class":86,"line":2940},[84,71771,71772],{"class":52449},"  font-size",[84,71774,52586],{"class":154},[84,71776,71777],{"class":158},"20px;\n",[84,71779,71780,71783,71785],{"class":86,"line":2945},[84,71781,71782],{"class":52449},"  font-weight",[84,71784,52586],{"class":154},[84,71786,71787],{"class":158},"400;\n",[84,71789,71790],{"class":86,"line":2959},[84,71791,2746],{"class":154},[84,71793,71794],{"class":86,"line":2964},[84,71795,71796],{"class":158},"td,th {\n",[84,71798,71799,71802],{"class":86,"line":3755},[84,71800,71801],{"class":158},"  border:1px solid",[84,71803,71804],{"class":1378}," #b8daff;\n",[84,71806,71807],{"class":86,"line":3769},[84,71808,2746],{"class":154},[84,71810,71811],{"class":86,"line":3777},[84,71812,71813],{"class":158},"td {\n",[84,71815,71816],{"class":86,"line":3782},[84,71817,71818],{"class":158},"  padding:10px;\n",[84,71820,71821],{"class":86,"line":3788},[84,71822,71823],{"class":158},"  color:#666;\n",[84,71825,71826,71828,71830],{"class":86,"line":3794},[84,71827,71672],{"class":52449},[84,71829,52586],{"class":154},[84,71831,71677],{"class":158},[84,71833,71834,71836,71838],{"class":86,"line":3799},[84,71835,71772],{"class":52449},[84,71837,52586],{"class":154},[84,71839,71840],{"class":158},"16px;\n",[84,71842,71843],{"class":86,"line":9120},[84,71844,2746],{"class":154},[84,71846,71847],{"class":86,"line":9144},[84,71848,71849],{"class":158},"tbody tr {\n",[84,71851,71852,71854,71856],{"class":86,"line":9149},[84,71853,71757],{"class":52449},[84,71855,52586],{"class":154},[84,71857,71858],{"class":1378},"#fff;\n",[84,71860,71861],{"class":86,"line":9155},[84,71862,2746],{"class":154},[84,71864,71865],{"class":86,"line":9182},[84,71866,71867],{"class":158},"tbody tr:hover {\n",[84,71869,71870,71872,71874],{"class":86,"line":9187},[84,71871,71757],{"class":52449},[84,71873,52586],{"class":154},[84,71875,71876],{"class":1378},"#e1ecf8;\n",[84,71878,71879],{"class":86,"line":9193},[84,71880,2746],{"class":154},[84,71882,71883],{"class":86,"line":9205},[84,71884,71885],{"class":158},".info {\n",[84,71887,71888,71890,71892],{"class":86,"line":9217},[84,71889,71714],{"class":52449},[84,71891,52586],{"class":154},[84,71893,71894],{"class":158},"900px;\n",[84,71896,71897,71899,71901],{"class":86,"line":9229},[84,71898,71616],{"class":52449},[84,71900,52586],{"class":154},[84,71902,71903],{"class":158},"50px auto;\n",[84,71905,71906,71908,71910],{"class":86,"line":10888},[84,71907,71672],{"class":52449},[84,71909,52586],{"class":154},[84,71911,71677],{"class":158},[84,71913,71914],{"class":86,"line":10913},[84,71915,2746],{"class":154},[84,71917,71918],{"class":86,"line":10936},[84,71919,71920],{"class":158},".info  input, .info select {\n",[84,71922,71923,71925,71927],{"class":86,"line":10960},[84,71924,71714],{"class":52449},[84,71926,52586],{"class":154},[84,71928,71929],{"class":158},"80px;\n",[84,71931,71932,71935,71937],{"class":86,"line":10965},[84,71933,71934],{"class":52449},"  height",[84,71936,52586],{"class":154},[84,71938,71939],{"class":158},"27px;\n",[84,71941,71942,71945,71947],{"class":86,"line":10970},[84,71943,71944],{"class":52449},"  outline",[84,71946,52586],{"class":154},[84,71948,71653],{"class":158},[84,71950,71951,71954,71956],{"class":86,"line":10975},[84,71952,71953],{"class":52449},"  border-radius",[84,71955,52586],{"class":154},[84,71957,71958],{"class":158},"5px;\n",[84,71960,71961,71963],{"class":86,"line":10984},[84,71962,71801],{"class":158},[84,71964,71804],{"class":1378},[84,71966,71967,71970,71972],{"class":86,"line":10989},[84,71968,71969],{"class":52449},"  padding-left",[84,71971,52586],{"class":154},[84,71973,71958],{"class":158},[84,71975,71976,71979,71981],{"class":86,"line":10995},[84,71977,71978],{"class":52449},"  box-sizing",[84,71980,52586],{"class":154},[84,71982,71983],{"class":158},"border-box;\n",[84,71985,71986,71989,71991],{"class":86,"line":11016},[84,71987,71988],{"class":52449},"  margin-right",[84,71990,52586],{"class":154},[84,71992,71993],{"class":158},"15px;\n",[84,71995,71996],{"class":86,"line":11022},[84,71997,2746],{"class":154},[84,71999,72000],{"class":86,"line":11036},[84,72001,72002],{"class":158},".info button {\n",[84,72004,72005,72007,72009],{"class":86,"line":11042},[84,72006,71714],{"class":52449},[84,72008,52586],{"class":154},[84,72010,72011],{"class":158},"60px;\n",[84,72013,72014,72016,72018],{"class":86,"line":11069},[84,72015,71934],{"class":52449},[84,72017,52586],{"class":154},[84,72019,71939],{"class":158},[84,72021,72022,72025,72027],{"class":86,"line":11078},[84,72023,72024],{"class":52449},"  background-color",[84,72026,52586],{"class":154},[84,72028,72029],{"class":1378},"#004085;\n",[84,72031,72032,72034,72036],{"class":86,"line":11084},[84,72033,71944],{"class":52449},[84,72035,52586],{"class":154},[84,72037,71653],{"class":158},[84,72039,72040,72043,72045],{"class":86,"line":11092},[84,72041,72042],{"class":52449},"  border",[84,72044,52586],{"class":154},[84,72046,71621],{"class":158},[84,72048,72049,72052,72054],{"class":86,"line":11097},[84,72050,72051],{"class":52449},"  color",[84,72053,52586],{"class":154},[84,72055,71858],{"class":1378},[84,72057,72058,72061,72063],{"class":86,"line":17774},[84,72059,72060],{"class":52449},"  cursor",[84,72062,52586],{"class":154},[84,72064,72065],{"class":158},"pointer;\n",[84,72067,72068,72070,72072],{"class":86,"line":17780},[84,72069,71953],{"class":52449},[84,72071,52586],{"class":154},[84,72073,71958],{"class":158},[84,72075,72076],{"class":86,"line":17803},[84,72077,2746],{"class":154},[84,72079,72080],{"class":86,"line":17809},[84,72081,72082],{"class":158},".info .age {\n",[84,72084,72085,72087,72089],{"class":86,"line":17832},[84,72086,71714],{"class":52449},[84,72088,52586],{"class":154},[84,72090,72091],{"class":158},"50px;\n",[84,72093,72094],{"class":86,"line":17846},[84,72095,2746],{"class":154},[19,72097,72098],{},"思路：",[19,72100,72101],{},[2643,72102],{"alt":66,"src":72103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72105,72106],{},[2643,72107],{"alt":66,"src":72108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72110,72111],{},[2643,72112],{"alt":66,"src":72113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[198,72115,72117],{"id":72116},"_3315-重绘回流","3.3.15 重绘回流",[19,72119,72120],{},[2643,72121],{"alt":66,"src":72122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72124,72125],{},[2643,72126],{"alt":66,"src":72127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72129,72130],{},[2643,72131],{"alt":66,"src":72132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72134,72136],{"id":72135},"_34-bom","3.4 BOM",[19,72138,72139],{},[2643,72140],{"alt":66,"src":72141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72143,72144],{},"平时写的document省略了window而已，实际上是window.document",[19,72146,72147],{},"函数也是这样，调用的时候实际为window.fn()",[19,72149,72150],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72152,72153],{},"window大部分情况下可以省略",[198,72155,72157],{"id":72156},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72159,72160],{},"只执行一次",[19,72162,72163],{},[2643,72164],{"alt":66,"src":72165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72167,72168],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72170,72171],{},[2643,72172],{"alt":66,"src":72173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[198,72175,72177],{"id":72176},"_342-js执行机制","3.4.2 JS执行机制",[19,72179,72180],{},[2643,72181],{"alt":66,"src":72182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72184,72185],{},"两个的结果都是1111 3333 2222",[19,72187,72188],{},[2643,72189],{"alt":66,"src":72190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72192,72193],{},[2643,72194],{"alt":66,"src":72195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72197,72198],{},[2643,72199],{"alt":66,"src":72200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72202,72203],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72205,72206],{},"工作流程：",[19,72208,72209],{},[2643,72210],{"alt":66,"src":72211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72213,72214],{},[2643,72215],{"alt":66,"src":72216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72218,72219],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72221,72222],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[198,72224,72226],{"id":72225},"_343-location对象","3.4.3 location对象",[19,72228,72229],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72231,72232],{},[2643,72233],{"alt":66,"src":72234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72236,72237],{},"href可以跳转页面",[26,72239,72240],{},[29,72241,72242],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72244,72245],{},"search得到提交信息之后网站后边的地址",[19,72247,72248],{},[2643,72249],{"alt":66,"src":72250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72252,72253],{},[2643,72254],{"alt":66,"src":72255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,72257,72258],{"start":98},[29,72259,72260],{},"hash:这个获取单页面应用#后边的地址",[19,72262,72263],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72265,72266],{},[2643,72267],{"alt":66,"src":72268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[60,72270,72272],{"className":54216,"code":72271,"language":54218,"meta":66,"style":66},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[39,72273,72274,72294,72314],{"__ignoreMap":66},[84,72275,72276,72278,72280,72282,72284,72287,72290,72292],{"class":86,"line":87},[84,72277,53293],{"class":154},[84,72279,208],{"class":52449},[84,72281,62203],{"class":90},[84,72283,867],{"class":154},[84,72285,72286],{"class":158},"\"#\u002Fmy\"",[84,72288,72289],{"class":154},">我的\u003C\u002F",[84,72291,208],{"class":52449},[84,72293,52456],{"class":154},[84,72295,72296,72298,72300,72302,72304,72307,72310,72312],{"class":86,"line":98},[84,72297,53293],{"class":154},[84,72299,208],{"class":52449},[84,72301,62203],{"class":90},[84,72303,867],{"class":154},[84,72305,72306],{"class":158},"\"#\u002Ffriend\"",[84,72308,72309],{"class":154},">关注\u003C\u002F",[84,72311,208],{"class":52449},[84,72313,52456],{"class":154},[84,72315,72316,72318,72320,72322,72324,72327,72330,72332],{"class":86,"line":106},[84,72317,53293],{"class":154},[84,72319,208],{"class":52449},[84,72321,62203],{"class":90},[84,72323,867],{"class":154},[84,72325,72326],{"class":158},"\"#\u002Fdownload\"",[84,72328,72329],{"class":154},">下载\u003C\u002F",[84,72331,208],{"class":52449},[84,72333,52456],{"class":154},[19,72335,72336],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,72338,72339],{"start":106},[29,72340,72341,72342,72344,72345,72347],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54865,72343],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54865,72346],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[198,72349,72351],{"id":72350},"_345-navigator对象","3.4.5 navigator对象",[19,72353,72354],{},[2643,72355],{"alt":66,"src":72356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[60,72358,72362],{"className":72359,"code":72360,"language":72361,"meta":66,"style":66},"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",[39,72363,72364,72369,72380,72392,72397,72448,72489,72494,72507,72519,72524],{"__ignoreMap":66},[84,72365,72366],{"class":86,"line":87},[84,72367,72368],{"class":1378},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[84,72370,72371,72373,72375,72377],{"class":86,"line":98},[84,72372,1538],{"class":129},[84,72374,155],{"class":154},[84,72376,55596],{"class":129},[84,72378,72379],{"class":154}," () { \n",[84,72381,72382,72384,72387,72389],{"class":86,"line":106},[84,72383,7964],{"class":129},[84,72385,72386],{"class":94}," userAgent",[84,72388,14735],{"class":129},[84,72390,72391],{"class":154}," navigator.userAgent \n",[84,72393,72394],{"class":86,"line":112},[84,72395,72396],{"class":1378},"\u002F\u002F 验证是否为Android或iPhone \n",[84,72398,72399,72401,72404,72406,72409,72412,72414,72416,72419,72421,72424,72428,72430,72432,72434,72437,72439,72441,72443,72445],{"class":86,"line":425},[84,72400,7964],{"class":129},[84,72402,72403],{"class":94}," android",[84,72405,14735],{"class":129},[84,72407,72408],{"class":154}," userAgent.",[84,72410,72411],{"class":90},"match",[84,72413,155],{"class":154},[84,72415,1893],{"class":158},[84,72417,72418],{"class":49126},"(Android);",[84,72420,2294],{"class":129},[84,72422,72423],{"class":94},"[\\s",[84,72425,72427],{"class":72426},"snhLl","\\\u002F",[84,72429,2248],{"class":94},[84,72431,1790],{"class":129},[84,72433,155],{"class":49126},[84,72435,72436],{"class":94},"[\\d.]",[84,72438,1790],{"class":129},[84,72440,1739],{"class":49126},[84,72442,2294],{"class":129},[84,72444,1893],{"class":158},[84,72446,72447],{"class":154},") \n",[84,72449,72450,72452,72455,72457,72459,72461,72463,72465,72468,72471,72474,72476,72478,72481,72483,72485,72487],{"class":86,"line":2395},[84,72451,7964],{"class":129},[84,72453,72454],{"class":94}," iphone",[84,72456,14735],{"class":129},[84,72458,72408],{"class":154},[84,72460,72411],{"class":90},[84,72462,155],{"class":154},[84,72464,1893],{"class":158},[84,72466,72467],{"class":49126},"(iPhone",[84,72469,72470],{"class":94},"\\s",[84,72472,72473],{"class":49126},"OS)",[84,72475,72470],{"class":94},[84,72477,155],{"class":49126},[84,72479,72480],{"class":94},"[\\d_]",[84,72482,1790],{"class":129},[84,72484,1739],{"class":49126},[84,72486,1893],{"class":158},[84,72488,72447],{"class":154},[84,72490,72491],{"class":86,"line":2401},[84,72492,72493],{"class":1378},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[84,72495,72496,72498,72501,72504],{"class":86,"line":2492},[84,72497,2712],{"class":129},[84,72499,72500],{"class":154}," (android ",[84,72502,72503],{"class":129},"||",[84,72505,72506],{"class":154}," iphone) { \n",[84,72508,72509,72512,72514,72517],{"class":86,"line":2498},[84,72510,72511],{"class":154},"location.href ",[84,72513,867],{"class":129},[84,72515,72516],{"class":158}," 'http:\u002F\u002Fm.itcast.cn'",[84,72518,3852],{"class":154},[84,72520,72521],{"class":86,"line":2510},[84,72522,72523],{"class":154},"} \n",[84,72525,72526],{"class":86,"line":2793},[84,72527,72528],{"class":154},"})()\n",[198,72530,72532],{"id":72531},"_346-histroy对象","3.4.6 histroy对象",[19,72534,72535],{},[2643,72536],{"alt":66,"src":72537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72539,72540],{},"浏览器地址的前进与后退!!!",[19,72542,72543],{},"history.back() 等效于 history.go(-1)",[19,72545,72546],{},"history.forward() 等效于 history.go(1)",[14,72548,72550],{"id":72549},"_35-本地存储","3.5 本地存储",[26,72552,72553,72556,72559],{},[29,72554,72555],{},"数据存储在用户浏览器中",[29,72557,72558],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,72560,72561],{},"容量较大，sessionStorage和localStorage约 5M 左右",[198,72563,72565],{"id":72564},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72567,72568],{},"只能存储字符串",[19,72570,72571],{},[2643,72572],{"alt":66,"src":72573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72575,72576],{},[2643,72577],{"alt":66,"src":72578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72580,72581],{},"键值对要加引号,不然就会当变量来看了",[19,72583,72584],{},"localStorage.setItem('uname', 'pink')",[19,72586,72587],{},"刷新之后信息不再丢失",[19,72589,72590],{},"操作key,value会跟着变",[19,72592,72593],{},"删除只删除键就可以,即名字",[19,72595,72584],{},[19,72597,72598],{},"改:",[19,72600,72601],{},"localStorage.setItem('uname','red')",[19,72603,72604],{},"有这个键就是改,没有这个键就是改",[19,72606,72607],{},[2643,72608],{"alt":66,"src":72609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72611,72612],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72614,72615],{},[2643,72616],{"alt":66,"src":72617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72619,72620],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[198,72622,72624],{"id":72623},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72626,72627],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72629,72630],{},"特性:",[26,72632,72633,72636,72639,72642],{},[29,72634,72635],{},"生命周期为关闭浏览器窗口",[29,72637,72638],{},"在同一个窗口(页面)下数据可以共享",[29,72640,72641],{},"以键值对的形式存储使用",[29,72643,72644],{},"用法跟localStorage 基本相同",[198,72646,72648],{"id":72647},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72650,72651],{},"本地只能存储字符串,无法直接存储复杂数据类型",[60,72653,72655],{"className":54216,"code":72654,"language":54218,"meta":66,"style":66},"\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",[39,72656,72657,72665,72670,72675,72680,72685,72689,72694,72699],{"__ignoreMap":66},[84,72658,72659,72661,72663],{"class":86,"line":87},[84,72660,2218],{"class":154},[84,72662,52962],{"class":52449},[84,72664,52456],{"class":154},[84,72666,72667],{"class":86,"line":98},[84,72668,72669],{"class":154},"    const obj = {\n",[84,72671,72672],{"class":86,"line":106},[84,72673,72674],{"class":154},"      uname: 'pink老师',\n",[84,72676,72677],{"class":86,"line":112},[84,72678,72679],{"class":154},"      age: 18,\n",[84,72681,72682],{"class":86,"line":425},[84,72683,72684],{"class":154},"      gender: '女'\n",[84,72686,72687],{"class":86,"line":2395},[84,72688,3365],{"class":154},[84,72690,72691],{"class":86,"line":2401},[84,72692,72693],{"class":154},"    \u002F\u002F 存储复杂数据类型\n",[84,72695,72696],{"class":86,"line":2492},[84,72697,72698],{"class":154},"    localStorage.setItem('obj', obj)\n",[84,72700,72701,72703,72705],{"class":86,"line":2498},[84,72702,53566],{"class":154},[84,72704,52962],{"class":52449},[84,72706,52456],{"class":154},[19,72708,72709],{},[2643,72710],{"alt":66,"src":72711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72713,72714],{},"如果获取一下数据:",[19,72716,72717],{},"log(localStorage.getItem('obj'))",[19,72719,72720],{},[2643,72721],{"alt":66,"src":72722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72724,72725],{},"发现直接存对象是使用不了的!!!",[23168,72727,72729],{"id":72728},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72731,72732],{},[2643,72733],{"alt":66,"src":72734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[60,72736,72738],{"className":51782,"code":72737,"language":51784,"meta":66,"style":66},"\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",[39,72739,72740,72748,72758,72768,72777,72785,72789,72793,72819,72838,72846,72850,72855,72860],{"__ignoreMap":66},[84,72741,72742,72744,72746],{"class":86,"line":87},[84,72743,2218],{"class":154},[84,72745,52962],{"class":52449},[84,72747,52456],{"class":154},[84,72749,72750,72752,72754,72756],{"class":86,"line":98},[84,72751,12393],{"class":129},[84,72753,71117],{"class":94},[84,72755,14735],{"class":129},[84,72757,16742],{"class":154},[84,72759,72760,72763,72766],{"class":86,"line":106},[84,72761,72762],{"class":154},"      uname: ",[84,72764,72765],{"class":158},"'pink老师'",[84,72767,32619],{"class":154},[84,72769,72770,72773,72775],{"class":86,"line":112},[84,72771,72772],{"class":154},"      age: ",[84,72774,849],{"class":94},[84,72776,32619],{"class":154},[84,72778,72779,72782],{"class":86,"line":425},[84,72780,72781],{"class":154},"      gender: ",[84,72783,72784],{"class":158},"'女'\n",[84,72786,72787],{"class":86,"line":2395},[84,72788,3365],{"class":154},[84,72790,72791],{"class":86,"line":2401},[84,72792,72693],{"class":1378},[84,72794,72795,72798,72801,72803,72806,72808,72811,72813,72816],{"class":86,"line":2492},[84,72796,72797],{"class":154},"  localStorage.",[84,72799,72800],{"class":90},"setItem",[84,72802,155],{"class":154},[84,72804,72805],{"class":158},"'obj'",[84,72807,846],{"class":154},[84,72809,72810],{"class":94},"JSON",[84,72812,1867],{"class":154},[84,72814,72815],{"class":90},"stringify",[84,72817,72818],{"class":154},"(obj))\n",[84,72820,72821,72824,72826,72829,72832,72834,72836],{"class":86,"line":2498},[84,72822,72823],{"class":154},"  console.",[84,72825,59393],{"class":90},[84,72827,72828],{"class":154},"(localStorage.",[84,72830,72831],{"class":90},"getItem",[84,72833,155],{"class":154},[84,72835,72805],{"class":158},[84,72837,31651],{"class":154},[84,72839,72840,72842,72844],{"class":86,"line":2510},[84,72841,53566],{"class":154},[84,72843,52962],{"class":52449},[84,72845,52456],{"class":154},[84,72847,72848],{"class":86,"line":2793},[84,72849,71767],{"class":154},[84,72851,72852],{"class":86,"line":2798},[84,72853,72854],{"class":154},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[84,72856,72857],{"class":86,"line":2804},[84,72858,72859],{"class":154},"  类型是字符串的\n",[84,72861,72862],{"class":86,"line":2809},[84,72863,72864],{"class":154},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23168,72866,72868],{"id":72867},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72870,72871],{},[2643,72872],{"alt":66,"src":72873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72875,72876],{},[2643,72877],{"alt":66,"src":72878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[60,72880,72882],{"className":54216,"code":72881,"language":54218,"meta":66,"style":66},"  \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",[39,72883,72884,72892,72896,72900,72904,72908,72912,72917,72922,72927,72932,72937,72942,72947,72952],{"__ignoreMap":66},[84,72885,72886,72888,72890],{"class":86,"line":87},[84,72887,53293],{"class":154},[84,72889,52962],{"class":52449},[84,72891,52456],{"class":154},[84,72893,72894],{"class":86,"line":98},[84,72895,72669],{"class":154},[84,72897,72898],{"class":86,"line":106},[84,72899,72674],{"class":154},[84,72901,72902],{"class":86,"line":112},[84,72903,72679],{"class":154},[84,72905,72906],{"class":86,"line":425},[84,72907,72684],{"class":154},[84,72909,72910],{"class":86,"line":2395},[84,72911,3365],{"class":154},[84,72913,72914],{"class":86,"line":2401},[84,72915,72916],{"class":154},"    \u002F\u002F 1.存储复杂数据类型\n",[84,72918,72919],{"class":86,"line":2492},[84,72920,72921],{"class":154},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[84,72923,72924],{"class":86,"line":2498},[84,72925,72926],{"class":154},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[84,72928,72929],{"class":86,"line":2510},[84,72930,72931],{"class":154},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[84,72933,72934],{"class":86,"line":2793},[84,72935,72936],{"class":154},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[84,72938,72939],{"class":86,"line":2798},[84,72940,72941],{"class":154},"    \u002F\u002F 取\n",[84,72943,72944],{"class":86,"line":2804},[84,72945,72946],{"class":154},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[84,72948,72949],{"class":86,"line":2809},[84,72950,72951],{"class":154},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[84,72953,72954,72956,72958],{"class":86,"line":2823},[84,72955,53566],{"class":154},[84,72957,52962],{"class":52449},[84,72959,52456],{"class":154},[19,72961,72962],{},[2643,72963],{"alt":66,"src":72964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[198,72966,72968],{"id":72967},"_356-数组map方法","3.5.6 数组map方法",[19,72970,72971],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72973,72974],{},[2643,72975],{"alt":66,"src":72976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72978,72979],{},[2643,72980],{"alt":66,"src":72981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72983,72984,72987],{},[1464,72985,72986],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72989,72990],{},"map有返回值，但是forEach没有返回值",[19,72992,72993],{},"map是个方法。用的时候要加 ()",[19,72995,72996],{},"map返回的是一个数组",[198,72998,73000],{"id":72999},"_357-数组中join方法","3.5.7 数组中join方法",[19,73002,73003],{},[2643,73004],{"alt":66,"src":73005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73007,73008],{},"类似于python中拼接字符串一样！",[26,73010,73011,73014,73017],{},[29,73012,73013],{},"小括号为空则逗号分开",[29,73015,73016],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73018,73019],{},"小括号用啥符号就用进行分割",[198,73021,73023],{"id":73022},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73025,73026,73029,73032,73035,73038],{},[29,73027,73028],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73030,73031],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73033,73034],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73036,73037],{},"return可以实现函数的结束",[29,73039,73040],{},"禁止跳转是 preventDefault() 不要忘记",[60,73042,73044],{"className":51782,"code":73043,"language":51784,"meta":66,"style":66},"\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",[39,73045,73046,73056,73070,73074,73082,73096,73116,73128,73136,73142,73152,73162,73166,73170,73176,73186,73198,73202,73206,73213,73225,73239,73249,73253,73257,73264,73271,73278,73290,73302,73312,73324,73328,73332,73339,73346,73358,73370,73380,73392,73422,73426,73430,73437,73449,73461,73485,73495,73505,73509,73513,73521,73532,73544,73556,73568,73585,73597,73609,73613,73617,73624,73636,73648,73660,73671,73689,73702,73714,73738,73749,73753,73757,73765,73775,73779,73783,73789,73801,73812,73822,73826,73830,73836,73858,73862,73866,73872,73878,73890,73900,73912,73942,73955,73972,73976,73980,73991,74013,74023,74027,74031,74044,74054,74066,74078,74090,74102,74112,74122,74132,74143,74156,74160,74168,74176,74180,74188,74201,74221,74254,74287,74320,74346,74364,74382,74390,74416,74434,74452,74470,74488,74506,74514,74522,74540,74548,74577,74585,74593,74601,74614,74626,74638,74650,74662,74674,74687,74699,74707,74715,74723,74728,74733,74737,74741,74745,74749,74753,74757,74762,74767,74772,74777,74785,74793,74801,74806,74811,74816,74821,74826,74831,74836,74841,74846,74851,74856,74861,74866,74871,74875,74880,74885,74895,74904,74908,74913,74922,74938,74980,75020,75059,75124,75132,75136,75141,75159,75167,75172,75177,75207,75213,75218,75231,75243,75255,75267,75279,75291,75303,75307,75317,75321,75326,75331,75335,75344,75348,75353,75358,75377,75382,75402,75406,75411,75415,75420,75438,75456,75474,75493,75512,75531,75536,75542,75563,75569,75578,75584,75590,75596,75623,75636,75641,75651,75657,75663,75669,75675,75680,75686,75692,75698,75704,75737,75742,75747,75752,75757,75763,75769,75775,75786,75791,75797,75804,75818,75824,75848,75853,75858,75864,75870,75891,75897,75910,75916,75922,75928,75934,75939,75945,75951,75957,75975,75989,75995,76003,76009,76031,76036,76041,76046,76051,76056,76065,76074,76079],{"__ignoreMap":66},[84,73047,73048,73050,73052,73054],{"class":86,"line":87},[84,73049,52446],{"class":154},[84,73051,52450],{"class":52449},[84,73053,52453],{"class":90},[84,73055,52456],{"class":154},[84,73057,73058,73060,73062,73064,73066,73068],{"class":86,"line":98},[84,73059,2218],{"class":154},[84,73061,51784],{"class":52449},[84,73063,52465],{"class":90},[84,73065,867],{"class":154},[84,73067,52470],{"class":158},[84,73069,52456],{"class":154},[84,73071,73072],{"class":86,"line":106},[84,73073,3578],{"emptyLinePlaceholder":1252},[84,73075,73076,73078,73080],{"class":86,"line":112},[84,73077,2218],{"class":154},[84,73079,52483],{"class":52449},[84,73081,52456],{"class":154},[84,73083,73084,73086,73088,73090,73092,73094],{"class":86,"line":425},[84,73085,53293],{"class":154},[84,73087,52493],{"class":52449},[84,73089,52496],{"class":90},[84,73091,867],{"class":154},[84,73093,52501],{"class":158},[84,73095,52456],{"class":154},[84,73097,73098,73100,73102,73104,73106,73108,73110,73112,73114],{"class":86,"line":2395},[84,73099,53293],{"class":154},[84,73101,52493],{"class":52449},[84,73103,16090],{"class":90},[84,73105,867],{"class":154},[84,73107,52540],{"class":158},[84,73109,52520],{"class":90},[84,73111,867],{"class":154},[84,73113,52547],{"class":158},[84,73115,52456],{"class":154},[84,73117,73118,73120,73122,73124,73126],{"class":86,"line":2401},[84,73119,53293],{"class":154},[84,73121,52556],{"class":52449},[84,73123,52559],{"class":154},[84,73125,52556],{"class":52449},[84,73127,52456],{"class":154},[84,73129,73130,73132,73134],{"class":86,"line":2492},[84,73131,53293],{"class":154},[84,73133,1222],{"class":52449},[84,73135,52456],{"class":154},[84,73137,73138,73140],{"class":86,"line":2498},[84,73139,7576],{"class":52449},[84,73141,16742],{"class":154},[84,73143,73144,73146,73148,73150],{"class":86,"line":2510},[84,73145,55842],{"class":94},[84,73147,52586],{"class":154},[84,73149,1504],{"class":94},[84,73151,2471],{"class":154},[84,73153,73154,73156,73158,73160],{"class":86,"line":2793},[84,73155,55853],{"class":94},[84,73157,52586],{"class":154},[84,73159,1504],{"class":94},[84,73161,2471],{"class":154},[84,73163,73164],{"class":86,"line":2798},[84,73165,3365],{"class":154},[84,73167,73168],{"class":86,"line":2804},[84,73169,3578],{"emptyLinePlaceholder":1252},[84,73171,73172,73174],{"class":86,"line":2809},[84,73173,58426],{"class":52449},[84,73175,16742],{"class":154},[84,73177,73178,73180,73182,73184],{"class":86,"line":2823},[84,73179,58433],{"class":94},[84,73181,52586],{"class":154},[84,73183,52741],{"class":94},[84,73185,2471],{"class":154},[84,73187,73188,73190,73192,73194,73196],{"class":86,"line":2828},[84,73189,63223],{"class":94},[84,73191,52586],{"class":154},[84,73193,2008],{"class":94},[84,73195,52641],{"class":129},[84,73197,2471],{"class":154},[84,73199,73200],{"class":86,"line":2834},[84,73201,3365],{"class":154},[84,73203,73204],{"class":86,"line":2855},[84,73205,3578],{"emptyLinePlaceholder":1252},[84,73207,73208,73211],{"class":86,"line":2860},[84,73209,73210],{"class":90},"    .info",[84,73212,16742],{"class":154},[84,73214,73215,73217,73219,73221,73223],{"class":86,"line":2874},[84,73216,55918],{"class":94},[84,73218,52586],{"class":154},[84,73220,52638],{"class":94},[84,73222,52641],{"class":129},[84,73224,2471],{"class":154},[84,73226,73227,73229,73231,73233,73235,73237],{"class":86,"line":2879},[84,73228,55853],{"class":94},[84,73230,52586],{"class":154},[84,73232,1756],{"class":94},[84,73234,52641],{"class":129},[84,73236,52705],{"class":94},[84,73238,2471],{"class":154},[84,73240,73241,73243,73245,73247],{"class":86,"line":2908},[84,73242,58433],{"class":94},[84,73244,52586],{"class":154},[84,73246,52741],{"class":94},[84,73248,2471],{"class":154},[84,73250,73251],{"class":86,"line":2913},[84,73252,3365],{"class":154},[84,73254,73255],{"class":86,"line":2930},[84,73256,3578],{"emptyLinePlaceholder":1252},[84,73258,73259,73262],{"class":86,"line":2935},[84,73260,73261],{"class":90},"    .uname",[84,73263,32619],{"class":154},[84,73265,73266,73269],{"class":86,"line":2940},[84,73267,73268],{"class":90},"    .age",[84,73270,32619],{"class":154},[84,73272,73273,73276],{"class":86,"line":2945},[84,73274,73275],{"class":90},"    .salary",[84,73277,16742],{"class":154},[84,73279,73280,73282,73284,73286,73288],{"class":86,"line":2959},[84,73281,55918],{"class":94},[84,73283,52586],{"class":154},[84,73285,821],{"class":94},[84,73287,52641],{"class":129},[84,73289,2471],{"class":154},[84,73291,73292,73294,73296,73298,73300],{"class":86,"line":2964},[84,73293,55932],{"class":94},[84,73295,52586],{"class":154},[84,73297,2008],{"class":94},[84,73299,52641],{"class":129},[84,73301,2471],{"class":154},[84,73303,73304,73306,73308,73310],{"class":86,"line":3755},[84,73305,62926],{"class":94},[84,73307,52586],{"class":154},[84,73309,55884],{"class":94},[84,73311,2471],{"class":154},[84,73313,73314,73316,73318,73320,73322],{"class":86,"line":3769},[84,73315,62896],{"class":94},[84,73317,52586],{"class":154},[84,73319,1884],{"class":94},[84,73321,52641],{"class":129},[84,73323,2471],{"class":154},[84,73325,73326],{"class":86,"line":3777},[84,73327,3365],{"class":154},[84,73329,73330],{"class":86,"line":3782},[84,73331,3578],{"emptyLinePlaceholder":1252},[84,73333,73334,73337],{"class":86,"line":3788},[84,73335,73336],{"class":90},"    .gender",[84,73338,32619],{"class":154},[84,73340,73341,73344],{"class":86,"line":3794},[84,73342,73343],{"class":90},"    .city",[84,73345,16742],{"class":154},[84,73347,73348,73350,73352,73354,73356],{"class":86,"line":3799},[84,73349,55918],{"class":94},[84,73351,52586],{"class":154},[84,73353,821],{"class":94},[84,73355,52641],{"class":129},[84,73357,2471],{"class":154},[84,73359,73360,73362,73364,73366,73368],{"class":86,"line":9120},[84,73361,55932],{"class":94},[84,73363,52586],{"class":154},[84,73365,2133],{"class":94},[84,73367,52641],{"class":129},[84,73369,2471],{"class":154},[84,73371,73372,73374,73376,73378],{"class":86,"line":9144},[84,73373,62926],{"class":94},[84,73375,52586],{"class":154},[84,73377,55884],{"class":94},[84,73379,2471],{"class":154},[84,73381,73382,73384,73386,73388,73390],{"class":86,"line":9149},[84,73383,62896],{"class":94},[84,73385,52586],{"class":154},[84,73387,1884],{"class":94},[84,73389,52641],{"class":129},[84,73391,2471],{"class":154},[84,73393,73394,73396,73398,73400,73402,73404,73407,73409,73411,73413,73416,73418,73420],{"class":86,"line":9155},[84,73395,63123],{"class":94},[84,73397,52586],{"class":154},[84,73399,1529],{"class":94},[84,73401,52641],{"class":129},[84,73403,52670],{"class":94},[84,73405,73406],{"class":94}," rgb",[84,73408,155],{"class":154},[84,73410,2903],{"class":94},[84,73412,846],{"class":154},[84,73414,73415],{"class":94},"197",[84,73417,846],{"class":154},[84,73419,73415],{"class":94},[84,73421,3897],{"class":154},[84,73423,73424],{"class":86,"line":9182},[84,73425,3365],{"class":154},[84,73427,73428],{"class":86,"line":9187},[84,73429,3578],{"emptyLinePlaceholder":1252},[84,73431,73432,73435],{"class":86,"line":9193},[84,73433,73434],{"class":52449},"    button",[84,73436,16742],{"class":154},[84,73438,73439,73441,73443,73445,73447],{"class":86,"line":9205},[84,73440,55932],{"class":94},[84,73442,52586],{"class":154},[84,73444,2133],{"class":94},[84,73446,52641],{"class":129},[84,73448,2471],{"class":154},[84,73450,73451,73453,73455,73457,73459],{"class":86,"line":9217},[84,73452,55918],{"class":94},[84,73454,52586],{"class":154},[84,73456,1793],{"class":94},[84,73458,52641],{"class":129},[84,73460,2471],{"class":154},[84,73462,73463,73465,73467,73470,73472,73474,73476,73479,73481,73483],{"class":86,"line":9229},[84,73464,56031],{"class":94},[84,73466,52586],{"class":154},[84,73468,73469],{"class":94},"rgb",[84,73471,155],{"class":154},[84,73473,2277],{"class":94},[84,73475,846],{"class":154},[84,73477,73478],{"class":94},"187",[84,73480,846],{"class":154},[84,73482,1610],{"class":94},[84,73484,3897],{"class":154},[84,73486,73487,73489,73491,73493],{"class":86,"line":10888},[84,73488,58563],{"class":94},[84,73490,52586],{"class":154},[84,73492,61988],{"class":94},[84,73494,2471],{"class":154},[84,73496,73497,73499,73501,73503],{"class":86,"line":10913},[84,73498,63123],{"class":94},[84,73500,52586],{"class":154},[84,73502,1504],{"class":94},[84,73504,2471],{"class":154},[84,73506,73507],{"class":86,"line":10936},[84,73508,3365],{"class":154},[84,73510,73511],{"class":86,"line":10960},[84,73512,3578],{"emptyLinePlaceholder":1252},[84,73514,73515,73517,73519],{"class":86,"line":10965},[84,73516,73434],{"class":52449},[84,73518,52837],{"class":52449},[84,73520,16742],{"class":154},[84,73522,73523,73525,73527,73530],{"class":86,"line":10970},[84,73524,56156],{"class":94},[84,73526,52586],{"class":154},[84,73528,73529],{"class":94},"inline-block",[84,73531,2471],{"class":154},[84,73533,73534,73536,73538,73540,73542],{"class":86,"line":10975},[84,73535,55918],{"class":94},[84,73537,52586],{"class":154},[84,73539,1756],{"class":94},[84,73541,52641],{"class":129},[84,73543,2471],{"class":154},[84,73545,73546,73548,73550,73552,73554],{"class":86,"line":10984},[84,73547,55932],{"class":94},[84,73549,52586],{"class":154},[84,73551,1756],{"class":94},[84,73553,52641],{"class":129},[84,73555,2471],{"class":154},[84,73557,73558,73560,73562,73564,73566],{"class":86,"line":10989},[84,73559,58506],{"class":94},[84,73561,52586],{"class":154},[84,73563,1781],{"class":94},[84,73565,52641],{"class":129},[84,73567,2471],{"class":154},[84,73569,73570,73572,73574,73576,73578,73580,73583],{"class":86,"line":10995},[84,73571,63123],{"class":94},[84,73573,52586],{"class":154},[84,73575,1529],{"class":94},[84,73577,52641],{"class":129},[84,73579,52670],{"class":94},[84,73581,73582],{"class":94}," #fff",[84,73584,2471],{"class":154},[84,73586,73587,73589,73591,73593,73595],{"class":86,"line":11016},[84,73588,56281],{"class":94},[84,73590,52586],{"class":154},[84,73592,1629],{"class":94},[84,73594,52641],{"class":129},[84,73596,2471],{"class":154},[84,73598,73599,73601,73603,73605,73607],{"class":86,"line":11022},[84,73600,62896],{"class":94},[84,73602,52586],{"class":154},[84,73604,1529],{"class":94},[84,73606,52641],{"class":129},[84,73608,2471],{"class":154},[84,73610,73611],{"class":86,"line":11036},[84,73612,3365],{"class":154},[84,73614,73615],{"class":86,"line":11042},[84,73616,3578],{"emptyLinePlaceholder":1252},[84,73618,73619,73622],{"class":86,"line":11069},[84,73620,73621],{"class":90},"    .total",[84,73623,16742],{"class":154},[84,73625,73626,73628,73630,73632,73634],{"class":86,"line":11078},[84,73627,55918],{"class":94},[84,73629,52586],{"class":154},[84,73631,62775],{"class":94},[84,73633,52641],{"class":129},[84,73635,2471],{"class":154},[84,73637,73638,73640,73642,73644,73646],{"class":86,"line":11084},[84,73639,55932],{"class":94},[84,73641,52586],{"class":154},[84,73643,1711],{"class":94},[84,73645,52641],{"class":129},[84,73647,2471],{"class":154},[84,73649,73650,73652,73654,73656,73658],{"class":86,"line":11092},[84,73651,58506],{"class":94},[84,73653,52586],{"class":154},[84,73655,1711],{"class":94},[84,73657,52641],{"class":129},[84,73659,2471],{"class":154},[84,73661,73662,73664,73666,73669],{"class":86,"line":11097},[84,73663,58433],{"class":94},[84,73665,52586],{"class":154},[84,73667,73668],{"class":94},"right",[84,73670,2471],{"class":154},[84,73672,73673,73675,73677,73679,73681,73683,73685,73687],{"class":86,"line":17774},[84,73674,55853],{"class":94},[84,73676,52586],{"class":154},[84,73678,1711],{"class":94},[84,73680,52641],{"class":129},[84,73682,52705],{"class":94},[84,73684,994],{"class":94},[84,73686,52641],{"class":129},[84,73688,2471],{"class":154},[84,73690,73691,73694,73696,73698,73700],{"class":86,"line":17780},[84,73692,73693],{"class":94},"      padding-right",[84,73695,52586],{"class":154},[84,73697,1756],{"class":94},[84,73699,52641],{"class":129},[84,73701,2471],{"class":154},[84,73703,73704,73706,73708,73710,73712],{"class":86,"line":17803},[84,73705,56069],{"class":94},[84,73707,52586],{"class":154},[84,73709,1832],{"class":94},[84,73711,52641],{"class":129},[84,73713,2471],{"class":154},[84,73715,73716,73718,73720,73722,73724,73727,73729,73732,73734,73736],{"class":86,"line":17809},[84,73717,56031],{"class":94},[84,73719,52586],{"class":154},[84,73721,73469],{"class":94},[84,73723,155],{"class":154},[84,73725,73726],{"class":94},"237",[84,73728,846],{"class":154},[84,73730,73731],{"class":94},"235",[84,73733,846],{"class":154},[84,73735,73731],{"class":94},[84,73737,3897],{"class":154},[84,73739,73740,73743,73745,73747],{"class":86,"line":17832},[84,73741,73742],{"class":94},"      box-sizing",[84,73744,52586],{"class":154},[84,73746,61651],{"class":94},[84,73748,2471],{"class":154},[84,73750,73751],{"class":86,"line":17846},[84,73752,3365],{"class":154},[84,73754,73755],{"class":86,"line":17866},[84,73756,3578],{"emptyLinePlaceholder":1252},[84,73758,73759,73761,73763],{"class":86,"line":17872},[84,73760,73621],{"class":90},[84,73762,52837],{"class":52449},[84,73764,16742],{"class":154},[84,73766,73767,73769,73771,73773],{"class":86,"line":17883},[84,73768,58563],{"class":94},[84,73770,52586],{"class":154},[84,73772,58568],{"class":94},[84,73774,2471],{"class":154},[84,73776,73777],{"class":86,"line":17906},[84,73778,3365],{"class":154},[84,73780,73781],{"class":86,"line":17928},[84,73782,3578],{"emptyLinePlaceholder":1252},[84,73784,73785,73787],{"class":86,"line":17933},[84,73786,66169],{"class":52449},[84,73788,16742],{"class":154},[84,73790,73791,73793,73795,73797,73799],{"class":86,"line":17939},[84,73792,55918],{"class":94},[84,73794,52586],{"class":154},[84,73796,62775],{"class":94},[84,73798,52641],{"class":129},[84,73800,2471],{"class":154},[84,73802,73803,73805,73807,73810],{"class":86,"line":17953},[84,73804,55853],{"class":94},[84,73806,52586],{"class":154},[84,73808,73809],{"class":94},"auto",[84,73811,2471],{"class":154},[84,73813,73814,73816,73818,73820],{"class":86,"line":17966},[84,73815,66176],{"class":94},[84,73817,52586],{"class":154},[84,73819,66181],{"class":94},[84,73821,2471],{"class":154},[84,73823,73824],{"class":86,"line":17971},[84,73825,3365],{"class":154},[84,73827,73828],{"class":86,"line":17985},[84,73829,3578],{"emptyLinePlaceholder":1252},[84,73831,73832,73834],{"class":86,"line":17990},[84,73833,66261],{"class":52449},[84,73835,16742],{"class":154},[84,73837,73838,73840,73842,73844,73846,73848,73850,73852,73854,73856],{"class":86,"line":17996},[84,73839,56031],{"class":94},[84,73841,52586],{"class":154},[84,73843,73469],{"class":94},[84,73845,155],{"class":154},[84,73847,73726],{"class":94},[84,73849,846],{"class":154},[84,73851,73731],{"class":94},[84,73853,846],{"class":154},[84,73855,73731],{"class":94},[84,73857,3897],{"class":154},[84,73859,73860],{"class":86,"line":18001},[84,73861,3365],{"class":154},[84,73863,73864],{"class":86,"line":18015},[84,73865,3578],{"emptyLinePlaceholder":1252},[84,73867,73868,73870],{"class":86,"line":18020},[84,73869,66261],{"class":52449},[84,73871,32619],{"class":154},[84,73873,73874,73876],{"class":86,"line":18025},[84,73875,66327],{"class":52449},[84,73877,16742],{"class":154},[84,73879,73880,73882,73884,73886,73888],{"class":86,"line":18039},[84,73881,55932],{"class":94},[84,73883,52586],{"class":154},[84,73885,1584],{"class":94},[84,73887,52641],{"class":129},[84,73889,2471],{"class":154},[84,73891,73892,73894,73896,73898],{"class":86,"line":18051},[84,73893,58433],{"class":94},[84,73895,52586],{"class":154},[84,73897,24906],{"class":94},[84,73899,2471],{"class":154},[84,73901,73902,73904,73906,73908,73910],{"class":86,"line":18056},[84,73903,56069],{"class":94},[84,73905,52586],{"class":154},[84,73907,1858],{"class":94},[84,73909,52641],{"class":129},[84,73911,2471],{"class":154},[84,73913,73914,73916,73918,73920,73922,73924,73926,73928,73931,73933,73936,73938,73940],{"class":86,"line":18069},[84,73915,63123],{"class":94},[84,73917,52586],{"class":154},[84,73919,1529],{"class":94},[84,73921,52641],{"class":129},[84,73923,52670],{"class":94},[84,73925,73406],{"class":94},[84,73927,155],{"class":154},[84,73929,73930],{"class":94},"228",[84,73932,846],{"class":154},[84,73934,73935],{"class":94},"225",[84,73937,846],{"class":154},[84,73939,73935],{"class":94},[84,73941,3897],{"class":154},[84,73943,73944,73947,73949,73951,73953],{"class":86,"line":18074},[84,73945,73946],{"class":94},"      padding-left",[84,73948,52586],{"class":154},[84,73950,1629],{"class":94},[84,73952,52641],{"class":129},[84,73954,2471],{"class":154},[84,73956,73957,73959,73961,73963,73966,73968,73970],{"class":86,"line":18079},[84,73958,63006],{"class":94},[84,73960,52586],{"class":154},[84,73962,29279],{"class":94},[84,73964,73965],{"class":94}," linear",[84,73967,63013],{"class":94},[84,73969,2003],{"class":129},[84,73971,2471],{"class":154},[84,73973,73974],{"class":86,"line":18084},[84,73975,3365],{"class":154},[84,73977,73978],{"class":86,"line":18097},[84,73979,3578],{"emptyLinePlaceholder":1252},[84,73981,73982,73985,73987,73989],{"class":86,"line":18102},[84,73983,73984],{"class":52449},"    tbody",[84,73986,71290],{"class":52449},[84,73988,62086],{"class":90},[84,73990,16742],{"class":154},[84,73992,73993,73995,73997,73999,74001,74003,74005,74007,74009,74011],{"class":86,"line":33785},[84,73994,56031],{"class":94},[84,73996,52586],{"class":154},[84,73998,73469],{"class":94},[84,74000,155],{"class":154},[84,74002,73726],{"class":94},[84,74004,846],{"class":154},[84,74006,73731],{"class":94},[84,74008,846],{"class":154},[84,74010,73731],{"class":94},[84,74012,3897],{"class":154},[84,74014,74015,74017,74019,74021],{"class":86,"line":33791},[84,74016,63171],{"class":94},[84,74018,52586],{"class":154},[84,74020,63176],{"class":94},[84,74022,2471],{"class":154},[84,74024,74025],{"class":86,"line":33797},[84,74026,3365],{"class":154},[84,74028,74029],{"class":86,"line":33803},[84,74030,3578],{"emptyLinePlaceholder":1252},[84,74032,74033,74035,74037,74040,74042],{"class":86,"line":33809},[84,74034,73984],{"class":52449},[84,74036,71290],{"class":52449},[84,74038,74039],{"class":52449}," td",[84,74041,2579],{"class":52449},[84,74043,16742],{"class":154},[84,74045,74046,74048,74050,74052],{"class":86,"line":33820},[84,74047,56156],{"class":94},[84,74049,52586],{"class":154},[84,74051,62015],{"class":94},[84,74053,2471],{"class":154},[84,74055,74056,74058,74060,74062,74064],{"class":86,"line":33826},[84,74057,55918],{"class":94},[84,74059,52586],{"class":154},[84,74061,2215],{"class":94},[84,74063,52641],{"class":129},[84,74065,2471],{"class":154},[84,74067,74068,74070,74072,74074,74076],{"class":86,"line":33846},[84,74069,55932],{"class":94},[84,74071,52586],{"class":154},[84,74073,2133],{"class":94},[84,74075,52641],{"class":129},[84,74077,2471],{"class":154},[84,74079,74080,74082,74084,74086,74088],{"class":86,"line":33852},[84,74081,58506],{"class":94},[84,74083,52586],{"class":154},[84,74085,2133],{"class":94},[84,74087,52641],{"class":129},[84,74089,2471],{"class":154},[84,74091,74092,74094,74096,74098,74100],{"class":86,"line":33863},[84,74093,63223],{"class":94},[84,74095,52586],{"class":154},[84,74097,1397],{"class":94},[84,74099,52641],{"class":129},[84,74101,2471],{"class":154},[84,74103,74104,74106,74108,74110],{"class":86,"line":33869},[84,74105,58563],{"class":94},[84,74107,52586],{"class":154},[84,74109,61988],{"class":94},[84,74111,2471],{"class":154},[84,74113,74114,74116,74118,74120],{"class":86,"line":33875},[84,74115,58433],{"class":94},[84,74117,52586],{"class":154},[84,74119,52741],{"class":94},[84,74121,2471],{"class":154},[84,74123,74124,74126,74128,74130],{"class":86,"line":33881},[84,74125,65116],{"class":94},[84,74127,52586],{"class":154},[84,74129,55884],{"class":94},[84,74131,2471],{"class":154},[84,74133,74134,74136,74138,74141],{"class":86,"line":33887},[84,74135,56031],{"class":94},[84,74137,52586],{"class":154},[84,74139,74140],{"class":94},"orange",[84,74142,2471],{"class":154},[84,74144,74145,74147,74149,74152,74154],{"class":86,"line":33893},[84,74146,56281],{"class":94},[84,74148,52586],{"class":154},[84,74150,74151],{"class":94},"12.5",[84,74153,52641],{"class":129},[84,74155,2471],{"class":154},[84,74157,74158],{"class":86,"line":33899},[84,74159,3365],{"class":154},[84,74161,74162,74164,74166],{"class":86,"line":33905},[84,74163,53566],{"class":154},[84,74165,1222],{"class":52449},[84,74167,52456],{"class":154},[84,74169,74170,74172,74174],{"class":86,"line":33925},[84,74171,52934],{"class":154},[84,74173,52483],{"class":52449},[84,74175,52456],{"class":154},[84,74177,74178],{"class":86,"line":33931},[84,74179,3578],{"emptyLinePlaceholder":1252},[84,74181,74182,74184,74186],{"class":86,"line":33947},[84,74183,2218],{"class":154},[84,74185,52949],{"class":52449},[84,74187,52456],{"class":154},[84,74189,74190,74192,74194,74197,74199],{"class":86,"line":33953},[84,74191,53293],{"class":154},[84,74193,14],{"class":52449},[84,74195,74196],{"class":154},">学生就业统计表\u003C\u002F",[84,74198,14],{"class":52449},[84,74200,52456],{"class":154},[84,74202,74203,74205,74207,74209,74211,74213,74215,74217,74219],{"class":86,"line":33967},[84,74204,53293],{"class":154},[84,74206,67771],{"class":52449},[84,74208,54635],{"class":90},[84,74210,867],{"class":154},[84,74212,63810],{"class":158},[84,74214,70216],{"class":90},[84,74216,867],{"class":154},[84,74218,32929],{"class":158},[84,74220,52456],{"class":154},[84,74222,74223,74225,74227,74229,74231,74233,74235,74237,74239,74241,74243,74246,74248,74250,74252],{"class":86,"line":33973},[84,74224,52490],{"class":154},[84,74226,54970],{"class":52449},[84,74228,54973],{"class":90},[84,74230,867],{"class":154},[84,74232,63845],{"class":158},[84,74234,16090],{"class":90},[84,74236,867],{"class":154},[84,74238,70242],{"class":158},[84,74240,62166],{"class":90},[84,74242,867],{"class":154},[84,74244,74245],{"class":158},"\"姓名\"",[84,74247,54635],{"class":90},[84,74249,867],{"class":154},[84,74251,70242],{"class":158},[84,74253,52456],{"class":154},[84,74255,74256,74258,74260,74262,74264,74266,74268,74270,74272,74274,74276,74279,74281,74283,74285],{"class":86,"line":33988},[84,74257,52490],{"class":154},[84,74259,54970],{"class":52449},[84,74261,54973],{"class":90},[84,74263,867],{"class":154},[84,74265,63845],{"class":158},[84,74267,16090],{"class":90},[84,74269,867],{"class":154},[84,74271,70270],{"class":158},[84,74273,62166],{"class":90},[84,74275,867],{"class":154},[84,74277,74278],{"class":158},"\"年龄\"",[84,74280,54635],{"class":90},[84,74282,867],{"class":154},[84,74284,70270],{"class":158},[84,74286,52456],{"class":154},[84,74288,74289,74291,74293,74295,74297,74299,74301,74303,74305,74307,74309,74312,74314,74316,74318],{"class":86,"line":33994},[84,74290,52490],{"class":154},[84,74292,54970],{"class":52449},[84,74294,54973],{"class":90},[84,74296,867],{"class":154},[84,74298,63845],{"class":158},[84,74300,16090],{"class":90},[84,74302,867],{"class":154},[84,74304,70372],{"class":158},[84,74306,62166],{"class":90},[84,74308,867],{"class":154},[84,74310,74311],{"class":158},"\"薪资\"",[84,74313,54635],{"class":90},[84,74315,867],{"class":154},[84,74317,70372],{"class":158},[84,74319,52456],{"class":154},[84,74321,74322,74324,74326,74328,74330,74332,74334,74336,74338,74340,74342,74344],{"class":86,"line":34003},[84,74323,52490],{"class":154},[84,74325,70290],{"class":52449},[84,74327,16090],{"class":90},[84,74329,867],{"class":154},[84,74331,70297],{"class":158},[84,74333,16129],{"class":90},[84,74335,867],{"class":154},[84,74337,8824],{"class":158},[84,74339,54635],{"class":90},[84,74341,867],{"class":154},[84,74343,70297],{"class":158},[84,74345,52456],{"class":154},[84,74347,74348,74350,74352,74354,74356,74358,74360,74362],{"class":86,"line":34009},[84,74349,56381],{"class":154},[84,74351,70312],{"class":52449},[84,74353,67797],{"class":90},[84,74355,867],{"class":154},[84,74357,11133],{"class":158},[84,74359,70321],{"class":154},[84,74361,70312],{"class":52449},[84,74363,52456],{"class":154},[84,74365,74366,74368,74370,74372,74374,74376,74378,74380],{"class":86,"line":34018},[84,74367,56381],{"class":154},[84,74369,70312],{"class":52449},[84,74371,67797],{"class":90},[84,74373,867],{"class":154},[84,74375,11202],{"class":158},[84,74377,70340],{"class":154},[84,74379,70312],{"class":52449},[84,74381,52456],{"class":154},[84,74383,74384,74386,74388],{"class":86,"line":34024},[84,74385,52925],{"class":154},[84,74387,70290],{"class":52449},[84,74389,52456],{"class":154},[84,74391,74392,74394,74396,74398,74400,74402,74404,74406,74408,74410,74412,74414],{"class":86,"line":34030},[84,74393,52490],{"class":154},[84,74395,70290],{"class":52449},[84,74397,16090],{"class":90},[84,74399,867],{"class":154},[84,74401,70394],{"class":158},[84,74403,16129],{"class":90},[84,74405,867],{"class":154},[84,74407,8824],{"class":158},[84,74409,54635],{"class":90},[84,74411,867],{"class":154},[84,74413,70394],{"class":158},[84,74415,52456],{"class":154},[84,74417,74418,74420,74422,74424,74426,74428,74430,74432],{"class":86,"line":34039},[84,74419,56381],{"class":154},[84,74421,70312],{"class":52449},[84,74423,67797],{"class":90},[84,74425,867],{"class":154},[84,74427,70415],{"class":158},[84,74429,70418],{"class":154},[84,74431,70312],{"class":52449},[84,74433,52456],{"class":154},[84,74435,74436,74438,74440,74442,74444,74446,74448,74450],{"class":86,"line":34045},[84,74437,56381],{"class":154},[84,74439,70312],{"class":52449},[84,74441,67797],{"class":90},[84,74443,867],{"class":154},[84,74445,70435],{"class":158},[84,74447,70438],{"class":154},[84,74449,70312],{"class":52449},[84,74451,52456],{"class":154},[84,74453,74454,74456,74458,74460,74462,74464,74466,74468],{"class":86,"line":34056},[84,74455,56381],{"class":154},[84,74457,70312],{"class":52449},[84,74459,67797],{"class":90},[84,74461,867],{"class":154},[84,74463,70455],{"class":158},[84,74465,70458],{"class":154},[84,74467,70312],{"class":52449},[84,74469,52456],{"class":154},[84,74471,74472,74474,74476,74478,74480,74482,74484,74486],{"class":86,"line":34062},[84,74473,56381],{"class":154},[84,74475,70312],{"class":52449},[84,74477,67797],{"class":90},[84,74479,867],{"class":154},[84,74481,70475],{"class":158},[84,74483,70478],{"class":154},[84,74485,70312],{"class":52449},[84,74487,52456],{"class":154},[84,74489,74490,74492,74494,74496,74498,74500,74502,74504],{"class":86,"line":34081},[84,74491,56381],{"class":154},[84,74493,70312],{"class":52449},[84,74495,67797],{"class":90},[84,74497,867],{"class":154},[84,74499,70495],{"class":158},[84,74501,70498],{"class":154},[84,74503,70312],{"class":52449},[84,74505,52456],{"class":154},[84,74507,74508,74510,74512],{"class":86,"line":34087},[84,74509,52925],{"class":154},[84,74511,70290],{"class":52449},[84,74513,52456],{"class":154},[84,74515,74516,74518,74520],{"class":86,"line":34098},[84,74517,52490],{"class":154},[84,74519,55036],{"class":52449},[84,74521,52456],{"class":154},[84,74523,74524,74526,74528,74531,74533,74536,74538],{"class":86,"line":34104},[84,74525,56381],{"class":154},[84,74527,84],{"class":52449},[84,74529,74530],{"class":154},">+\u003C\u002F",[84,74532,84],{"class":52449},[84,74534,74535],{"class":154},">添加\u003C\u002F",[84,74537,55036],{"class":52449},[84,74539,52456],{"class":154},[84,74541,74542,74544,74546],{"class":86,"line":34124},[84,74543,53566],{"class":154},[84,74545,67771],{"class":52449},[84,74547,52456],{"class":154},[84,74549,74550,74552,74554,74556,74558,74560,74563,74565,74568,74570,74573,74575],{"class":86,"line":34140},[84,74551,53293],{"class":154},[84,74553,52760],{"class":52449},[84,74555,54635],{"class":90},[84,74557,867],{"class":154},[84,74559,63726],{"class":158},[84,74561,74562],{"class":154},">共有数据 \u003C",[84,74564,84],{"class":52449},[84,74566,74567],{"class":154},">0\u003C\u002F",[84,74569,84],{"class":52449},[84,74571,74572],{"class":154},"> 条\u003C\u002F",[84,74574,52760],{"class":52449},[84,74576,52456],{"class":154},[84,74578,74579,74581,74583],{"class":86,"line":34146},[84,74580,53293],{"class":154},[84,74582,458],{"class":52449},[84,74584,52456],{"class":154},[84,74586,74587,74589,74591],{"class":86,"line":34160},[84,74588,52490],{"class":154},[84,74590,461],{"class":52449},[84,74592,52456],{"class":154},[84,74594,74595,74597,74599],{"class":86,"line":34166},[84,74596,56381],{"class":154},[84,74598,464],{"class":52449},[84,74600,52456],{"class":154},[84,74602,74603,74605,74607,74610,74612],{"class":86,"line":34172},[84,74604,56449],{"class":154},[84,74606,467],{"class":52449},[84,74608,74609],{"class":154},">ID\u003C\u002F",[84,74611,467],{"class":52449},[84,74613,52456],{"class":154},[84,74615,74616,74618,74620,74622,74624],{"class":86,"line":34183},[84,74617,56449],{"class":154},[84,74619,467],{"class":52449},[84,74621,70601],{"class":154},[84,74623,467],{"class":52449},[84,74625,52456],{"class":154},[84,74627,74628,74630,74632,74634,74636],{"class":86,"line":34189},[84,74629,56449],{"class":154},[84,74631,467],{"class":52449},[84,74633,70614],{"class":154},[84,74635,467],{"class":52449},[84,74637,52456],{"class":154},[84,74639,74640,74642,74644,74646,74648],{"class":86,"line":34195},[84,74641,56449],{"class":154},[84,74643,467],{"class":52449},[84,74645,70627],{"class":154},[84,74647,467],{"class":52449},[84,74649,52456],{"class":154},[84,74651,74652,74654,74656,74658,74660],{"class":86,"line":34205},[84,74653,56449],{"class":154},[84,74655,467],{"class":52449},[84,74657,70640],{"class":154},[84,74659,467],{"class":52449},[84,74661,52456],{"class":154},[84,74663,74664,74666,74668,74670,74672],{"class":86,"line":34211},[84,74665,56449],{"class":154},[84,74667,467],{"class":52449},[84,74669,70653],{"class":154},[84,74671,467],{"class":52449},[84,74673,52456],{"class":154},[84,74675,74676,74678,74680,74683,74685],{"class":86,"line":34222},[84,74677,56449],{"class":154},[84,74679,467],{"class":52449},[84,74681,74682],{"class":154},">录入时间\u003C\u002F",[84,74684,467],{"class":52449},[84,74686,52456],{"class":154},[84,74688,74689,74691,74693,74695,74697],{"class":86,"line":34228},[84,74690,56449],{"class":154},[84,74692,467],{"class":52449},[84,74694,70666],{"class":154},[84,74696,467],{"class":52449},[84,74698,52456],{"class":154},[84,74700,74701,74703,74705],{"class":86,"line":34238},[84,74702,56554],{"class":154},[84,74704,464],{"class":52449},[84,74706,52456],{"class":154},[84,74708,74709,74711,74713],{"class":86,"line":34243},[84,74710,52925],{"class":154},[84,74712,461],{"class":52449},[84,74714,52456],{"class":154},[84,74716,74717,74719,74721],{"class":86,"line":34249},[84,74718,52490],{"class":154},[84,74720,474],{"class":52449},[84,74722,52456],{"class":154},[84,74724,74725],{"class":86,"line":34298},[84,74726,74727],{"class":1378},"      \u003C!-- \u003Ctr>\n",[84,74729,74730],{"class":86,"line":34345},[84,74731,74732],{"class":1378},"        \u003Ctd>1\u003C\u002Ftd>\n",[84,74734,74735],{"class":86,"line":34350},[84,74736,74732],{"class":1378},[84,74738,74739],{"class":86,"line":34356},[84,74740,74732],{"class":1378},[84,74742,74743],{"class":86,"line":34375},[84,74744,74732],{"class":1378},[84,74746,74747],{"class":86,"line":34381},[84,74748,74732],{"class":1378},[84,74750,74751],{"class":86,"line":34401},[84,74752,74732],{"class":1378},[84,74754,74755],{"class":86,"line":34407},[84,74756,74732],{"class":1378},[84,74758,74759],{"class":86,"line":34413},[84,74760,74761],{"class":1378},"        \u003Ctd>\n",[84,74763,74764],{"class":86,"line":34423},[84,74765,74766],{"class":1378},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[84,74768,74769],{"class":86,"line":34428},[84,74770,74771],{"class":1378},"        \u003C\u002Ftd>\n",[84,74773,74774],{"class":86,"line":34434},[84,74775,74776],{"class":1378},"      \u003C\u002Ftr> -->\n",[84,74778,74779,74781,74783],{"class":86,"line":34450},[84,74780,52925],{"class":154},[84,74782,474],{"class":52449},[84,74784,52456],{"class":154},[84,74786,74787,74789,74791],{"class":86,"line":34495},[84,74788,53566],{"class":154},[84,74790,458],{"class":52449},[84,74792,52456],{"class":154},[84,74794,74795,74797,74799],{"class":86,"line":34501},[84,74796,53293],{"class":154},[84,74798,52962],{"class":52449},[84,74800,52456],{"class":154},[84,74802,74803],{"class":86,"line":34507},[84,74804,74805],{"class":1378},"    \u002F\u002F const initData = [{\n",[84,74807,74808],{"class":86,"line":34513},[84,74809,74810],{"class":1378},"    \u002F\u002F   unameId: 1,\n",[84,74812,74813],{"class":86,"line":34524},[84,74814,74815],{"class":1378},"    \u002F\u002F   uname: '华晨宇',\n",[84,74817,74818],{"class":86,"line":34530},[84,74819,74820],{"class":1378},"    \u002F\u002F   age: 22,\n",[84,74822,74823],{"class":86,"line":34536},[84,74824,74825],{"class":1378},"    \u002F\u002F   salary: 12000,\n",[84,74827,74828],{"class":86,"line":34542},[84,74829,74830],{"class":1378},"    \u002F\u002F   gender: '男',\n",[84,74832,74833],{"class":86,"line":34560},[84,74834,74835],{"class":1378},"    \u002F\u002F   city: '北京',\n",[84,74837,74838],{"class":86,"line":34574},[84,74839,74840],{"class":1378},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[84,74842,74843],{"class":86,"line":34583},[84,74844,74845],{"class":1378},"    \u002F\u002F }]\n",[84,74847,74848],{"class":86,"line":34592},[84,74849,74850],{"class":1378},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[84,74852,74853],{"class":86,"line":34601},[84,74854,74855],{"class":1378},"    \u002F\u002F 1.渲染业务\n",[84,74857,74858],{"class":86,"line":34610},[84,74859,74860],{"class":1378},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[84,74862,74863],{"class":86,"line":34616},[84,74864,74865],{"class":1378},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[84,74867,74868],{"class":86,"line":34622},[84,74869,74870],{"class":1378},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[84,74872,74873],{"class":86,"line":34630},[84,74874,3578],{"emptyLinePlaceholder":1252},[84,74876,74877],{"class":86,"line":34635},[84,74878,74879],{"class":1378},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[84,74881,74882],{"class":86,"line":34641},[84,74883,74884],{"class":1378},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[84,74886,74887,74889,74891,74893],{"class":86,"line":34652},[84,74888,12393],{"class":129},[84,74890,58842],{"class":94},[84,74892,14735],{"class":129},[84,74894,52987],{"class":154},[84,74896,74897,74900,74902],{"class":86,"line":34658},[84,74898,74899],{"class":154},"    console.",[84,74901,59393],{"class":90},[84,74903,53561],{"class":154},[84,74905,74906],{"class":86,"line":34678},[84,74907,3578],{"emptyLinePlaceholder":1252},[84,74909,74910],{"class":86,"line":34684},[84,74911,74912],{"class":1378},"    \u002F\u002F 时间函数\n",[84,74914,74915,74917,74920],{"class":86,"line":34690},[84,74916,71230],{"class":129},[84,74918,74919],{"class":90}," getTime",[84,74921,12025],{"class":154},[84,74923,74924,74926,74929,74931,74933,74936],{"class":86,"line":34696},[84,74925,59374],{"class":129},[84,74927,74928],{"class":94}," date",[84,74930,14735],{"class":129},[84,74932,12750],{"class":129},[84,74934,74935],{"class":90}," Date",[84,74937,183],{"class":154},[84,74939,74940,74942,74944,74946,74949,74952,74954,74956,74958,74961,74964,74966,74968,74970,74972,74974,74976,74978],{"class":86,"line":34713},[84,74941,59374],{"class":129},[84,74943,17261],{"class":94},[84,74945,14735],{"class":129},[84,74947,74948],{"class":154}," date.",[84,74950,74951],{"class":90},"getHours",[84,74953,14221],{"class":154},[84,74955,2218],{"class":129},[84,74957,994],{"class":94},[84,74959,74960],{"class":129}," ?",[84,74962,74963],{"class":158}," '0'",[84,74965,136],{"class":129},[84,74967,74948],{"class":154},[84,74969,74951],{"class":90},[84,74971,14221],{"class":154},[84,74973,2167],{"class":129},[84,74975,74948],{"class":154},[84,74977,74951],{"class":90},[84,74979,183],{"class":154},[84,74981,74982,74984,74987,74989,74991,74994,74996,74998,75000,75002,75004,75006,75008,75010,75012,75014,75016,75018],{"class":86,"line":34719},[84,74983,59374],{"class":129},[84,74985,74986],{"class":94}," m",[84,74988,14735],{"class":129},[84,74990,74948],{"class":154},[84,74992,74993],{"class":90},"getMinutes",[84,74995,14221],{"class":154},[84,74997,2218],{"class":129},[84,74999,994],{"class":94},[84,75001,74960],{"class":129},[84,75003,74963],{"class":158},[84,75005,136],{"class":129},[84,75007,74948],{"class":154},[84,75009,74993],{"class":90},[84,75011,14221],{"class":154},[84,75013,2167],{"class":129},[84,75015,74948],{"class":154},[84,75017,74993],{"class":90},[84,75019,183],{"class":154},[84,75021,75022,75024,75026,75028,75030,75033,75035,75037,75039,75041,75043,75045,75047,75049,75051,75053,75055,75057],{"class":86,"line":34725},[84,75023,59374],{"class":129},[84,75025,9600],{"class":94},[84,75027,14735],{"class":129},[84,75029,74948],{"class":154},[84,75031,75032],{"class":90},"getSeconds",[84,75034,14221],{"class":154},[84,75036,2218],{"class":129},[84,75038,994],{"class":94},[84,75040,74960],{"class":129},[84,75042,74963],{"class":158},[84,75044,136],{"class":129},[84,75046,74948],{"class":154},[84,75048,75032],{"class":90},[84,75050,14221],{"class":154},[84,75052,2167],{"class":129},[84,75054,74948],{"class":154},[84,75056,75032],{"class":90},[84,75058,183],{"class":154},[84,75060,75061,75063,75066,75068,75070,75073,75075,75078,75080,75083,75085,75087,75090,75092,75094,75096,75098,75100,75102,75105,75107,75110,75112,75115,75117,75119,75121],{"class":86,"line":34731},[84,75062,59374],{"class":129},[84,75064,75065],{"class":94}," str",[84,75067,14735],{"class":129},[84,75069,64049],{"class":158},[84,75071,75072],{"class":154},"date",[84,75074,1867],{"class":158},[84,75076,75077],{"class":90},"getFullYear",[84,75079,3605],{"class":158},[84,75081,75082],{"class":158},"}\u002F${",[84,75084,75072],{"class":154},[84,75086,1867],{"class":158},[84,75088,75089],{"class":90},"getMonth",[84,75091,14221],{"class":158},[84,75093,1790],{"class":129},[84,75095,133],{"class":94},[84,75097,75082],{"class":158},[84,75099,75072],{"class":154},[84,75101,1867],{"class":158},[84,75103,75104],{"class":90},"getDate",[84,75106,3605],{"class":158},[84,75108,75109],{"class":158},"} ${",[84,75111,1725],{"class":154},[84,75113,75114],{"class":158},"}:${",[84,75116,1853],{"class":154},[84,75118,75114],{"class":158},[84,75120,2003],{"class":154},[84,75122,75123],{"class":158},"}`\n",[84,75125,75126,75129],{"class":86,"line":34737},[84,75127,75128],{"class":129},"      return",[84,75130,75131],{"class":154}," str\n",[84,75133,75134],{"class":86,"line":34743},[84,75135,3365],{"class":154},[84,75137,75138],{"class":86,"line":34770},[84,75139,75140],{"class":1378},"    \u002F\u002F 渲染函数\n",[84,75142,75143,75145,75147,75149,75151,75153,75155,75157],{"class":86,"line":34794},[84,75144,12393],{"class":129},[84,75146,70893],{"class":94},[84,75148,14735],{"class":129},[84,75150,55544],{"class":154},[84,75152,55547],{"class":90},[84,75154,155],{"class":154},[84,75156,70904],{"class":158},[84,75158,162],{"class":154},[84,75160,75161,75163,75165],{"class":86,"line":34800},[84,75162,71230],{"class":129},[84,75164,71233],{"class":90},[84,75166,12025],{"class":154},[84,75168,75169],{"class":86,"line":34806},[84,75170,75171],{"class":1378},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[84,75173,75174],{"class":86,"line":34812},[84,75175,75176],{"class":1378},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[84,75178,75179,75181,75184,75186,75188,75191,75193,75195,75197,75200,75202,75205],{"class":86,"line":34823},[84,75180,59374],{"class":129},[84,75182,75183],{"class":94}," trArr",[84,75185,14735],{"class":129},[84,75187,53114],{"class":154},[84,75189,75190],{"class":90},"map",[84,75192,155],{"class":154},[84,75194,55596],{"class":129},[84,75196,2839],{"class":154},[84,75198,75199],{"class":928},"ele",[84,75201,846],{"class":154},[84,75203,75204],{"class":928},"index",[84,75206,13613],{"class":154},[84,75208,75209,75211],{"class":86,"line":34834},[84,75210,15922],{"class":129},[84,75212,71314],{"class":158},[84,75214,75215],{"class":86,"line":34840},[84,75216,75217],{"class":158},"      \u003Ctr>\n",[84,75219,75220,75222,75224,75226,75229],{"class":86,"line":34857},[84,75221,71319],{"class":158},[84,75223,75199],{"class":154},[84,75225,1867],{"class":158},[84,75227,75228],{"class":154},"unameId",[84,75230,71334],{"class":158},[84,75232,75233,75235,75237,75239,75241],{"class":86,"line":34880},[84,75234,71319],{"class":158},[84,75236,75199],{"class":154},[84,75238,1867],{"class":158},[84,75240,71350],{"class":154},[84,75242,71334],{"class":158},[84,75244,75245,75247,75249,75251,75253],{"class":86,"line":34903},[84,75246,71319],{"class":158},[84,75248,75199],{"class":154},[84,75250,1867],{"class":158},[84,75252,71367],{"class":154},[84,75254,71334],{"class":158},[84,75256,75257,75259,75261,75263,75265],{"class":86,"line":34909},[84,75258,71319],{"class":158},[84,75260,75199],{"class":154},[84,75262,1867],{"class":158},[84,75264,71384],{"class":154},[84,75266,71334],{"class":158},[84,75268,75269,75271,75273,75275,75277],{"class":86,"line":34914},[84,75270,71319],{"class":158},[84,75272,75199],{"class":154},[84,75274,1867],{"class":158},[84,75276,71401],{"class":154},[84,75278,71334],{"class":158},[84,75280,75281,75283,75285,75287,75289],{"class":86,"line":34923},[84,75282,71319],{"class":158},[84,75284,75199],{"class":154},[84,75286,1867],{"class":158},[84,75288,71418],{"class":154},[84,75290,71334],{"class":158},[84,75292,75293,75295,75297,75299,75301],{"class":86,"line":34933},[84,75294,71319],{"class":158},[84,75296,75199],{"class":154},[84,75298,1867],{"class":158},[84,75300,3565],{"class":154},[84,75302,71334],{"class":158},[84,75304,75305],{"class":86,"line":34939},[84,75306,74761],{"class":158},[84,75308,75309,75312,75314],{"class":86,"line":34944},[84,75310,75311],{"class":158},"          \u003Ca href=\"#\" data-id=\"${",[84,75313,75204],{"class":154},[84,75315,75316],{"class":158},"}\">删除\u003C\u002Fa>\n",[84,75318,75319],{"class":86,"line":34950},[84,75320,74771],{"class":158},[84,75322,75323],{"class":86,"line":34963},[84,75324,75325],{"class":158},"      \u003C\u002Ftr>\n",[84,75327,75328],{"class":86,"line":34969},[84,75329,75330],{"class":158},"  `\n",[84,75332,75333],{"class":86,"line":34980},[84,75334,65961],{"class":154},[84,75336,75337,75339,75341],{"class":86,"line":34991},[84,75338,59390],{"class":154},[84,75340,59393],{"class":90},[84,75342,75343],{"class":154},"(trArr)\n",[84,75345,75346],{"class":86,"line":35010},[84,75347,3578],{"emptyLinePlaceholder":1252},[84,75349,75350],{"class":86,"line":50667},[84,75351,75352],{"class":1378},"      \u002F\u002F (2) 把数组转换为字符串join\n",[84,75354,75355],{"class":86,"line":50672},[84,75356,75357],{"class":1378},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[84,75359,75360,75362,75364,75367,75370,75372,75375],{"class":86,"line":50681},[84,75361,71245],{"class":154},[84,75363,867],{"class":129},[84,75365,75366],{"class":154}," trArr.",[84,75368,75369],{"class":90},"join",[84,75371,155],{"class":154},[84,75373,75374],{"class":158},"''",[84,75376,162],{"class":154},[84,75378,75379],{"class":86,"line":50690},[84,75380,75381],{"class":1378},"      \u002F\u002F 显示共有几条\n",[84,75383,75384,75386,75388,75390,75393,75396,75398,75400],{"class":86,"line":50695},[84,75385,56918],{"class":154},[84,75387,55547],{"class":90},[84,75389,155],{"class":154},[84,75391,75392],{"class":158},"'.total span'",[84,75394,75395],{"class":154},").innerHTML ",[84,75397,867],{"class":129},[84,75399,53114],{"class":154},[84,75401,56978],{"class":94},[84,75403,75404],{"class":86,"line":50700},[84,75405,3365],{"class":154},[84,75407,75408],{"class":86,"line":50705},[84,75409,75410],{"class":1378},"    \u002F\u002F render()\n",[84,75412,75413],{"class":86,"line":50718},[84,75414,3578],{"emptyLinePlaceholder":1252},[84,75416,75417],{"class":86,"line":50723},[84,75418,75419],{"class":1378},"    \u002F\u002F 获取DOM对象\n",[84,75421,75422,75424,75426,75428,75430,75432,75434,75436],{"class":86,"line":50732},[84,75423,12393],{"class":129},[84,75425,70967],{"class":94},[84,75427,14735],{"class":129},[84,75429,55544],{"class":154},[84,75431,55547],{"class":90},[84,75433,155],{"class":154},[84,75435,70978],{"class":158},[84,75437,162],{"class":154},[84,75439,75440,75442,75444,75446,75448,75450,75452,75454],{"class":86,"line":50741},[84,75441,12393],{"class":129},[84,75443,70794],{"class":94},[84,75445,14735],{"class":129},[84,75447,55544],{"class":154},[84,75449,55547],{"class":90},[84,75451,155],{"class":154},[84,75453,70805],{"class":158},[84,75455,162],{"class":154},[84,75457,75458,75460,75462,75464,75466,75468,75470,75472],{"class":86,"line":50758},[84,75459,12393],{"class":129},[84,75461,16859],{"class":94},[84,75463,14735],{"class":129},[84,75465,55544],{"class":154},[84,75467,55547],{"class":90},[84,75469,155],{"class":154},[84,75471,70824],{"class":158},[84,75473,162],{"class":154},[84,75475,75477,75479,75481,75483,75485,75487,75489,75491],{"class":86,"line":75476},231,[84,75478,12393],{"class":129},[84,75480,70853],{"class":94},[84,75482,14735],{"class":129},[84,75484,55544],{"class":154},[84,75486,55547],{"class":90},[84,75488,155],{"class":154},[84,75490,70864],{"class":158},[84,75492,162],{"class":154},[84,75494,75496,75498,75500,75502,75504,75506,75508,75510],{"class":86,"line":75495},232,[84,75497,12393],{"class":129},[84,75499,70833],{"class":94},[84,75501,14735],{"class":129},[84,75503,55544],{"class":154},[84,75505,55547],{"class":90},[84,75507,155],{"class":154},[84,75509,70844],{"class":158},[84,75511,162],{"class":154},[84,75513,75515,75517,75519,75521,75523,75525,75527,75529],{"class":86,"line":75514},233,[84,75516,12393],{"class":129},[84,75518,70873],{"class":94},[84,75520,14735],{"class":129},[84,75522,55544],{"class":154},[84,75524,55547],{"class":90},[84,75526,155],{"class":154},[84,75528,70884],{"class":158},[84,75530,162],{"class":154},[84,75532,75534],{"class":86,"line":75533},234,[84,75535,3578],{"emptyLinePlaceholder":1252},[84,75537,75539],{"class":86,"line":75538},235,[84,75540,75541],{"class":1378},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[84,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561],{"class":86,"line":75544},236,[84,75546,70985],{"class":154},[84,75548,58960],{"class":90},[84,75550,155],{"class":154},[84,75552,70992],{"class":158},[84,75554,846],{"class":154},[84,75556,55596],{"class":129},[84,75558,2839],{"class":154},[84,75560,1394],{"class":928},[84,75562,13613],{"class":154},[84,75564,75566],{"class":86,"line":75565},237,[84,75567,75568],{"class":1378},"      \u002F\u002F 禁止浏览器跳转\n",[84,75570,75572,75574,75576],{"class":86,"line":75571},238,[84,75573,71012],{"class":154},[84,75575,71015],{"class":90},[84,75577,183],{"class":154},[84,75579,75581],{"class":86,"line":75580},239,[84,75582,75583],{"class":1378},"      \u002F\u002F 非空判断\n",[84,75585,75587],{"class":86,"line":75586},240,[84,75588,75589],{"class":1378},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[84,75591,75593],{"class":86,"line":75592},241,[84,75594,75595],{"class":1378},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[84,75597,75599,75601,75603,75605,75608,75610,75613,75616,75618,75620],{"class":86,"line":75598},242,[84,75600,55627],{"class":129},[84,75602,2839],{"class":154},[84,75604,1538],{"class":129},[84,75606,75607],{"class":154},"uname.value ",[84,75609,72503],{"class":129},[84,75611,75612],{"class":129}," !",[84,75614,75615],{"class":154},"age.value ",[84,75617,72503],{"class":129},[84,75619,75612],{"class":129},[84,75621,75622],{"class":154},"salary.value) {\n",[84,75624,75626,75628,75630,75632,75634],{"class":86,"line":75625},243,[84,75627,15922],{"class":129},[84,75629,71086],{"class":90},[84,75631,155],{"class":154},[84,75633,71091],{"class":158},[84,75635,162],{"class":154},[84,75637,75639],{"class":86,"line":75638},244,[84,75640,53547],{"class":154},[84,75642,75644,75646,75648],{"class":86,"line":75643},245,[84,75645,59153],{"class":154},[84,75647,53033],{"class":90},[84,75649,75650],{"class":154},"({\n",[84,75652,75654],{"class":86,"line":75653},246,[84,75655,75656],{"class":1378},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[84,75658,75660],{"class":86,"line":75659},247,[84,75661,75662],{"class":1378},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[84,75664,75666],{"class":86,"line":75665},248,[84,75667,75668],{"class":1378},"        \u002F\u002F 对象的序号应为数组长度+1\n",[84,75670,75672],{"class":86,"line":75671},249,[84,75673,75674],{"class":1378},"        \u002F\u002F unameId: arr.length + 1,\n",[84,75676,75678],{"class":86,"line":75677},250,[84,75679,3578],{"emptyLinePlaceholder":1252},[84,75681,75683],{"class":86,"line":75682},251,[84,75684,75685],{"class":1378},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[84,75687,75689],{"class":86,"line":75688},252,[84,75690,75691],{"class":1378},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[84,75693,75695],{"class":86,"line":75694},253,[84,75696,75697],{"class":1378},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[84,75699,75701],{"class":86,"line":75700},254,[84,75702,75703],{"class":1378},"        \u002F\u002F 0当假看\n",[84,75705,75707,75710,75712,75714,75717,75719,75721,75723,75726,75728,75730,75733,75735],{"class":86,"line":75706},255,[84,75708,75709],{"class":154},"        unameId: arr.",[84,75711,53117],{"class":94},[84,75713,74960],{"class":129},[84,75715,75716],{"class":154}," arr[arr.",[84,75718,53117],{"class":94},[84,75720,53420],{"class":129},[84,75722,133],{"class":94},[84,75724,75725],{"class":154},"].unameId ",[84,75727,1790],{"class":129},[84,75729,133],{"class":94},[84,75731,75732],{"class":129}," :",[84,75734,133],{"class":94},[84,75736,32619],{"class":154},[84,75738,75740],{"class":86,"line":75739},256,[84,75741,71139],{"class":154},[84,75743,75745],{"class":86,"line":75744},257,[84,75746,71144],{"class":154},[84,75748,75750],{"class":86,"line":75749},258,[84,75751,71154],{"class":154},[84,75753,75755],{"class":86,"line":75754},259,[84,75756,71149],{"class":154},[84,75758,75760],{"class":86,"line":75759},260,[84,75761,75762],{"class":154},"        city: city.value,\n",[84,75764,75766],{"class":86,"line":75765},261,[84,75767,75768],{"class":1378},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[84,75770,75772],{"class":86,"line":75771},262,[84,75773,75774],{"class":1378},"        \u002F\u002F time: new Date().toDateString()\n",[84,75776,75778,75781,75784],{"class":86,"line":75777},263,[84,75779,75780],{"class":154},"        time: ",[84,75782,75783],{"class":90},"getTime",[84,75785,183],{"class":154},[84,75787,75789],{"class":86,"line":75788},264,[84,75790,65961],{"class":154},[84,75792,75794],{"class":86,"line":75793},265,[84,75795,75796],{"class":1378},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[84,75798,75800,75802],{"class":86,"line":75799},266,[84,75801,71214],{"class":90},[84,75803,183],{"class":154},[84,75805,75807,75809,75811,75813,75815],{"class":86,"line":75806},267,[84,75808,71197],{"class":94},[84,75810,1867],{"class":154},[84,75812,71202],{"class":90},[84,75814,14221],{"class":154},[84,75816,75817],{"class":1378},"\u002F\u002F重置表单\n",[84,75819,75821],{"class":86,"line":75820},268,[84,75822,75823],{"class":1378},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[84,75825,75827,75830,75832,75834,75837,75839,75841,75843,75845],{"class":86,"line":75826},269,[84,75828,75829],{"class":154},"      localStorage.",[84,75831,72800],{"class":90},[84,75833,155],{"class":154},[84,75835,75836],{"class":158},"'data'",[84,75838,846],{"class":154},[84,75840,72810],{"class":94},[84,75842,1867],{"class":154},[84,75844,72815],{"class":90},[84,75846,75847],{"class":154},"(arr))\n",[84,75849,75851],{"class":86,"line":75850},270,[84,75852,34613],{"class":154},[84,75854,75856],{"class":86,"line":75855},271,[84,75857,3578],{"emptyLinePlaceholder":1252},[84,75859,75861],{"class":86,"line":75860},272,[84,75862,75863],{"class":1378},"    \u002F\u002F 3.删除业务\n",[84,75865,75867],{"class":86,"line":75866},273,[84,75868,75869],{"class":1378},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[84,75871,75873,75875,75877,75879,75881,75883,75885,75887,75889],{"class":86,"line":75872},274,[84,75874,71487],{"class":154},[84,75876,58960],{"class":90},[84,75878,155],{"class":154},[84,75880,58965],{"class":158},[84,75882,846],{"class":154},[84,75884,55596],{"class":129},[84,75886,2839],{"class":154},[84,75888,1394],{"class":928},[84,75890,13613],{"class":154},[84,75892,75894],{"class":86,"line":75893},275,[84,75895,75896],{"class":1378},"      \u002F\u002F 判断是否点击的是删除按钮\n",[84,75898,75900,75902,75904,75906,75908],{"class":86,"line":75899},276,[84,75901,55627],{"class":129},[84,75903,68180],{"class":154},[84,75905,55633],{"class":129},[84,75907,69402],{"class":158},[84,75909,13613],{"class":154},[84,75911,75913],{"class":86,"line":75912},277,[84,75914,75915],{"class":1378},"        \u002F\u002F alert(1)\n",[84,75917,75919],{"class":86,"line":75918},278,[84,75920,75921],{"class":1378},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[84,75923,75925],{"class":86,"line":75924},279,[84,75926,75927],{"class":1378},"        \u002F\u002F console.log(e.target)\n",[84,75929,75931],{"class":86,"line":75930},280,[84,75932,75933],{"class":1378},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[84,75935,75937],{"class":86,"line":75936},281,[84,75938,3578],{"emptyLinePlaceholder":1252},[84,75940,75942],{"class":86,"line":75941},282,[84,75943,75944],{"class":1378},"        \u002F\u002F 确认框，确然是否真的要删除\n",[84,75946,75948],{"class":86,"line":75947},283,[84,75949,75950],{"class":1378},"        \u002F\u002F confirm()为确认框\n",[84,75952,75954],{"class":86,"line":75953},284,[84,75955,75956],{"class":1378},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[84,75958,75960,75962,75964,75967,75969,75972],{"class":86,"line":75959},285,[84,75961,3675],{"class":129},[84,75963,2839],{"class":154},[84,75965,75966],{"class":90},"confirm",[84,75968,155],{"class":154},[84,75970,75971],{"class":158},"'您确定要删除这条数据吗？'",[84,75973,75974],{"class":154},")) {\n",[84,75976,75978,75981,75983,75985,75987],{"class":86,"line":75977},286,[84,75979,75980],{"class":154},"          arr.",[84,75982,59156],{"class":90},[84,75984,71540],{"class":154},[84,75986,1529],{"class":94},[84,75988,162],{"class":154},[84,75990,75992],{"class":86,"line":75991},287,[84,75993,75994],{"class":1378},"          \u002F\u002F 3.4 重新渲染页面\n",[84,75996,75998,76001],{"class":86,"line":75997},288,[84,75999,76000],{"class":90},"          render",[84,76002,183],{"class":154},[84,76004,76006],{"class":86,"line":76005},289,[84,76007,76008],{"class":1378},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[84,76010,76012,76015,76017,76019,76021,76023,76025,76027,76029],{"class":86,"line":76011},290,[84,76013,76014],{"class":154},"          localStorage.",[84,76016,72800],{"class":90},[84,76018,155],{"class":154},[84,76020,75836],{"class":158},[84,76022,846],{"class":154},[84,76024,72810],{"class":94},[84,76026,1867],{"class":154},[84,76028,72815],{"class":90},[84,76030,75847],{"class":154},[84,76032,76034],{"class":86,"line":76033},291,[84,76035,3707],{"class":154},[84,76037,76039],{"class":86,"line":76038},292,[84,76040,53547],{"class":154},[84,76042,76044],{"class":86,"line":76043},293,[84,76045,3578],{"emptyLinePlaceholder":1252},[84,76047,76049],{"class":86,"line":76048},294,[84,76050,34613],{"class":154},[84,76052,76054],{"class":86,"line":76053},295,[84,76055,3578],{"emptyLinePlaceholder":1252},[84,76057,76059,76061,76063],{"class":86,"line":76058},296,[84,76060,53566],{"class":154},[84,76062,52962],{"class":52449},[84,76064,52456],{"class":154},[84,76066,76068,76070,76072],{"class":86,"line":76067},297,[84,76069,52934],{"class":154},[84,76071,52949],{"class":52449},[84,76073,52456],{"class":154},[84,76075,76077],{"class":86,"line":76076},298,[84,76078,3578],{"emptyLinePlaceholder":1252},[84,76080,76082,76084,76086],{"class":86,"line":76081},299,[84,76083,52934],{"class":154},[84,76085,51784],{"class":52449},[84,76087,52456],{"class":154},[14,76089,76091],{"id":76090},"_36-正则表达式","3.6 正则表达式",[19,76093,76094],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76096,76097],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76099,76100],{},"正则表达式的作用：",[2315,76102,76103,76110,76116],{},[29,76104,76105,76106,76109],{},"表单验证（ ",[1464,76107,76108],{},"匹配"," ）",[29,76111,76112,76113,76109],{},"过滤敏感词（ ",[1464,76114,76115],{},"替换",[29,76117,76118,76119,76109],{},"字符串中提取我们想要的部分（ ",[1464,76120,76121],{},"提取",[198,76123,76125],{"id":76124},"_361-语法","3.6.1 语法",[19,76127,76128],{},"正则表达式使用步骤：",[26,76130,76131,76134],{},[29,76132,76133],{},"定义规则",[29,76135,76136],{},"查找是否匹配",[19,76138,76139],{},"正则表达式里边不需要写引号",[19,76141,76142],{},[2643,76143],{"alt":66,"src":76144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76146,76147],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76149,76150],{},"reg.test(str)",[19,76152,76153],{},[2643,76154],{"alt":66,"src":76155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76157,76158],{},[2643,76159],{"alt":66,"src":76160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[198,76162,76164],{"id":76163},"_362-元字符","3.6.2 元字符",[26,76166,76167,76170,76173,76176,76183],{},[29,76168,76169],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,76171,76172],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,76174,76175],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,76177,76178,76179],{},"正则验证工具：",[208,76180,76181],{"href":76181,"rel":76182},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[212],[29,76184,76185],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23168,76187,76189],{"id":76188},"_3621-边界符","3.6.2.1 边界符",[19,76191,76192],{},[2643,76193],{"alt":66,"src":76194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76196,76197],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76199,76200],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76202,76203],{},"只匹配一次",[19,76205,76206],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23168,76208,76210],{"id":76209},"_3622-量词","3.6.2.2 量词",[19,76212,76213],{},[2643,76214],{"alt":66,"src":76215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76217,76218],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23168,76220,76222],{"id":76221},"_3623-元字符","3.6.2.3 元字符",[19,76224,76225],{},[2643,76226],{"alt":66,"src":76227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76229,76230],{},"匹配的是a或b或c []只选一个",[19,76232,76233],{},[2643,76234],{"alt":66,"src":76235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76237,76238],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76240,76241],{},[2643,76242],{"alt":66,"src":76243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76245,76246],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76248,76249],{},[2643,76250],{"alt":66,"src":76251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[60,76253,76255],{"className":51782,"code":76254,"language":51784,"meta":66,"style":66},"\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",[39,76256,76257,76267,76281,76285,76293,76307,76327,76339,76347,76351,76359,76367,76372,76403,76430,76458,76462,76467,76495,76526,76531,76536,76567,76599,76631,76635,76640,76671,76701,76731,76735,76740,76771,76802,76832,76862,76866,76871,76904,76908,76913,76944,76975,76979,76984,77015,77045,77076,77080,77085,77117,77148,77179,77206,77237,77269,77302,77333,77364,77396,77427,77435,77443,77447],{"__ignoreMap":66},[84,76258,76259,76261,76263,76265],{"class":86,"line":87},[84,76260,52446],{"class":154},[84,76262,52450],{"class":52449},[84,76264,52453],{"class":90},[84,76266,52456],{"class":154},[84,76268,76269,76271,76273,76275,76277,76279],{"class":86,"line":98},[84,76270,2218],{"class":154},[84,76272,51784],{"class":52449},[84,76274,52465],{"class":90},[84,76276,867],{"class":154},[84,76278,52470],{"class":158},[84,76280,52456],{"class":154},[84,76282,76283],{"class":86,"line":106},[84,76284,3578],{"emptyLinePlaceholder":1252},[84,76286,76287,76289,76291],{"class":86,"line":112},[84,76288,2218],{"class":154},[84,76290,52483],{"class":52449},[84,76292,52456],{"class":154},[84,76294,76295,76297,76299,76301,76303,76305],{"class":86,"line":425},[84,76296,53293],{"class":154},[84,76298,52493],{"class":52449},[84,76300,52496],{"class":90},[84,76302,867],{"class":154},[84,76304,52501],{"class":158},[84,76306,52456],{"class":154},[84,76308,76309,76311,76313,76315,76317,76319,76321,76323,76325],{"class":86,"line":2395},[84,76310,53293],{"class":154},[84,76312,52493],{"class":52449},[84,76314,16090],{"class":90},[84,76316,867],{"class":154},[84,76318,52540],{"class":158},[84,76320,52520],{"class":90},[84,76322,867],{"class":154},[84,76324,52547],{"class":158},[84,76326,52456],{"class":154},[84,76328,76329,76331,76333,76335,76337],{"class":86,"line":2401},[84,76330,53293],{"class":154},[84,76332,52556],{"class":52449},[84,76334,52559],{"class":154},[84,76336,52556],{"class":52449},[84,76338,52456],{"class":154},[84,76340,76341,76343,76345],{"class":86,"line":2492},[84,76342,52934],{"class":154},[84,76344,52483],{"class":52449},[84,76346,52456],{"class":154},[84,76348,76349],{"class":86,"line":2498},[84,76350,3578],{"emptyLinePlaceholder":1252},[84,76352,76353,76355,76357],{"class":86,"line":2510},[84,76354,2218],{"class":154},[84,76356,52949],{"class":52449},[84,76358,52456],{"class":154},[84,76360,76361,76363,76365],{"class":86,"line":2793},[84,76362,53293],{"class":154},[84,76364,52962],{"class":52449},[84,76366,52456],{"class":154},[84,76368,76369],{"class":86,"line":2798},[84,76370,76371],{"class":1378},"    \u002F\u002F 元字符中\n",[84,76373,76374,76376,76378,76380,76382,76385,76387,76389,76392,76394,76397,76400],{"class":86,"line":2804},[84,76375,74899],{"class":154},[84,76377,59393],{"class":90},[84,76379,155],{"class":154},[84,76381,1893],{"class":158},[84,76383,76384],{"class":49126},"哈",[84,76386,1893],{"class":158},[84,76388,1867],{"class":154},[84,76390,76391],{"class":90},"test",[84,76393,155],{"class":154},[84,76395,76396],{"class":158},"'哈'",[84,76398,76399],{"class":154},"))  ",[84,76401,76402],{"class":1378},"\u002F\u002Ftrue\n",[84,76404,76405,76407,76409,76411,76413,76415,76417,76419,76421,76423,76426,76428],{"class":86,"line":2809},[84,76406,74899],{"class":154},[84,76408,59393],{"class":90},[84,76410,155],{"class":154},[84,76412,1893],{"class":158},[84,76414,76384],{"class":49126},[84,76416,1893],{"class":158},[84,76418,1867],{"class":154},[84,76420,76391],{"class":90},[84,76422,155],{"class":154},[84,76424,76425],{"class":158},"'哈哈'",[84,76427,76399],{"class":154},[84,76429,76402],{"class":1378},[84,76431,76432,76434,76436,76438,76440,76442,76444,76446,76448,76450,76453,76456],{"class":86,"line":2823},[84,76433,74899],{"class":154},[84,76435,59393],{"class":90},[84,76437,155],{"class":154},[84,76439,1893],{"class":158},[84,76441,76384],{"class":49126},[84,76443,1893],{"class":158},[84,76445,1867],{"class":154},[84,76447,76391],{"class":90},[84,76449,155],{"class":154},[84,76451,76452],{"class":158},"'二哈'",[84,76454,76455],{"class":154},"))   ",[84,76457,76402],{"class":1378},[84,76459,76460],{"class":86,"line":2828},[84,76461,3578],{"emptyLinePlaceholder":1252},[84,76463,76464],{"class":86,"line":2834},[84,76465,76466],{"class":1378},"    \u002F\u002F 1.边界符\n",[84,76468,76469,76471,76473,76475,76477,76479,76481,76483,76485,76487,76489,76491,76493],{"class":86,"line":2855},[84,76470,74899],{"class":154},[84,76472,59393],{"class":90},[84,76474,155],{"class":154},[84,76476,1893],{"class":158},[84,76478,2274],{"class":129},[84,76480,76384],{"class":49126},[84,76482,1893],{"class":158},[84,76484,1867],{"class":154},[84,76486,76391],{"class":90},[84,76488,155],{"class":154},[84,76490,76396],{"class":158},[84,76492,76399],{"class":154},[84,76494,76402],{"class":1378},[84,76496,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515,76517,76519,76521,76523],{"class":86,"line":2860},[84,76498,74899],{"class":154},[84,76500,59393],{"class":90},[84,76502,155],{"class":154},[84,76504,1893],{"class":158},[84,76506,2274],{"class":129},[84,76508,76384],{"class":49126},[84,76510,1613],{"class":129},[84,76512,1893],{"class":158},[84,76514,1867],{"class":154},[84,76516,76391],{"class":90},[84,76518,155],{"class":154},[84,76520,76425],{"class":158},[84,76522,76399],{"class":154},[84,76524,76525],{"class":1378},"\u002F\u002Ffalse\n",[84,76527,76528],{"class":86,"line":2874},[84,76529,76530],{"class":1378},"    \u002F\u002F 2.量词\n",[84,76532,76533],{"class":86,"line":2879},[84,76534,76535],{"class":1378},"    \u002F\u002F 量词 * 类似于 >= 0\n",[84,76537,76538,76540,76542,76544,76546,76548,76550,76553,76555,76557,76559,76561,76563,76565],{"class":86,"line":2908},[84,76539,74899],{"class":154},[84,76541,59393],{"class":90},[84,76543,155],{"class":154},[84,76545,1893],{"class":158},[84,76547,2274],{"class":129},[84,76549,76384],{"class":49126},[84,76551,76552],{"class":129},"*$",[84,76554,1893],{"class":158},[84,76556,1867],{"class":154},[84,76558,76391],{"class":90},[84,76560,155],{"class":154},[84,76562,76425],{"class":158},[84,76564,76399],{"class":154},[84,76566,76402],{"class":1378},[84,76568,76569,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589,76591,76594,76596],{"class":86,"line":2913},[84,76570,74899],{"class":154},[84,76572,59393],{"class":90},[84,76574,155],{"class":154},[84,76576,1893],{"class":158},[84,76578,2274],{"class":129},[84,76580,76384],{"class":49126},[84,76582,76552],{"class":129},[84,76584,1893],{"class":158},[84,76586,1867],{"class":154},[84,76588,76391],{"class":90},[84,76590,155],{"class":154},[84,76592,76593],{"class":158},"'二哈好傻'",[84,76595,76399],{"class":154},[84,76597,76598],{"class":1378},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[84,76600,76601,76603,76605,76607,76609,76611,76613,76615,76617,76619,76621,76623,76626,76628],{"class":86,"line":2930},[84,76602,74899],{"class":154},[84,76604,59393],{"class":90},[84,76606,155],{"class":154},[84,76608,1893],{"class":158},[84,76610,2274],{"class":129},[84,76612,76384],{"class":49126},[84,76614,76552],{"class":129},[84,76616,1893],{"class":158},[84,76618,1867],{"class":154},[84,76620,76391],{"class":90},[84,76622,155],{"class":154},[84,76624,76625],{"class":158},"'哈好哈'",[84,76627,76455],{"class":154},[84,76629,76630],{"class":1378},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[84,76632,76633],{"class":86,"line":2935},[84,76634,3578],{"emptyLinePlaceholder":1252},[84,76636,76637],{"class":86,"line":2940},[84,76638,76639],{"class":1378},"    \u002F\u002F +类似于>=1\n",[84,76641,76642,76644,76646,76648,76650,76652,76654,76657,76659,76661,76663,76665,76667,76669],{"class":86,"line":2945},[84,76643,74899],{"class":154},[84,76645,59393],{"class":90},[84,76647,155],{"class":154},[84,76649,1893],{"class":158},[84,76651,2274],{"class":129},[84,76653,76384],{"class":49126},[84,76655,76656],{"class":129},"+$",[84,76658,1893],{"class":158},[84,76660,1867],{"class":154},[84,76662,76391],{"class":90},[84,76664,155],{"class":154},[84,76666,76425],{"class":158},[84,76668,76399],{"class":154},[84,76670,76402],{"class":1378},[84,76672,76673,76675,76677,76679,76681,76683,76685,76687,76689,76691,76693,76695,76697,76699],{"class":86,"line":2959},[84,76674,74899],{"class":154},[84,76676,59393],{"class":90},[84,76678,155],{"class":154},[84,76680,1893],{"class":158},[84,76682,2274],{"class":129},[84,76684,76384],{"class":49126},[84,76686,76656],{"class":129},[84,76688,1893],{"class":158},[84,76690,1867],{"class":154},[84,76692,76391],{"class":90},[84,76694,155],{"class":154},[84,76696,76593],{"class":158},[84,76698,76399],{"class":154},[84,76700,76598],{"class":1378},[84,76702,76703,76705,76707,76709,76711,76713,76715,76717,76719,76721,76723,76725,76727,76729],{"class":86,"line":2964},[84,76704,74899],{"class":154},[84,76706,59393],{"class":90},[84,76708,155],{"class":154},[84,76710,1893],{"class":158},[84,76712,2274],{"class":129},[84,76714,76384],{"class":49126},[84,76716,76656],{"class":129},[84,76718,1893],{"class":158},[84,76720,1867],{"class":154},[84,76722,76391],{"class":90},[84,76724,155],{"class":154},[84,76726,76625],{"class":158},[84,76728,76455],{"class":154},[84,76730,76525],{"class":1378},[84,76732,76733],{"class":86,"line":3755},[84,76734,3578],{"emptyLinePlaceholder":1252},[84,76736,76737],{"class":86,"line":3769},[84,76738,76739],{"class":1378},"    \u002F\u002F ?类似于0次或一次\n",[84,76741,76742,76744,76746,76748,76750,76752,76755,76757,76759,76761,76763,76765,76767,76769],{"class":86,"line":3777},[84,76743,74899],{"class":154},[84,76745,59393],{"class":90},[84,76747,155],{"class":154},[84,76749,1893],{"class":158},[84,76751,2274],{"class":129},[84,76753,76754],{"class":49126},"哈？",[84,76756,1613],{"class":129},[84,76758,1893],{"class":158},[84,76760,1867],{"class":154},[84,76762,76391],{"class":90},[84,76764,155],{"class":154},[84,76766,75374],{"class":158},[84,76768,76455],{"class":154},[84,76770,76402],{"class":1378},[84,76772,76773,76775,76777,76779,76781,76783,76785,76788,76790,76792,76794,76796,76798,76800],{"class":86,"line":3782},[84,76774,74899],{"class":154},[84,76776,59393],{"class":90},[84,76778,155],{"class":154},[84,76780,1893],{"class":158},[84,76782,2274],{"class":129},[84,76784,76384],{"class":49126},[84,76786,76787],{"class":129},"?$",[84,76789,1893],{"class":158},[84,76791,1867],{"class":154},[84,76793,76391],{"class":90},[84,76795,155],{"class":154},[84,76797,76425],{"class":158},[84,76799,76399],{"class":154},[84,76801,76525],{"class":1378},[84,76803,76804,76806,76808,76810,76812,76814,76816,76818,76820,76822,76824,76826,76828,76830],{"class":86,"line":3788},[84,76805,74899],{"class":154},[84,76807,59393],{"class":90},[84,76809,155],{"class":154},[84,76811,1893],{"class":158},[84,76813,2274],{"class":129},[84,76815,76384],{"class":49126},[84,76817,76787],{"class":129},[84,76819,1893],{"class":158},[84,76821,1867],{"class":154},[84,76823,76391],{"class":90},[84,76825,155],{"class":154},[84,76827,76593],{"class":158},[84,76829,76399],{"class":154},[84,76831,76598],{"class":1378},[84,76833,76834,76836,76838,76840,76842,76844,76846,76848,76850,76852,76854,76856,76858,76860],{"class":86,"line":3794},[84,76835,74899],{"class":154},[84,76837,59393],{"class":90},[84,76839,155],{"class":154},[84,76841,1893],{"class":158},[84,76843,2274],{"class":129},[84,76845,76384],{"class":49126},[84,76847,76787],{"class":129},[84,76849,1893],{"class":158},[84,76851,1867],{"class":154},[84,76853,76391],{"class":90},[84,76855,155],{"class":154},[84,76857,76625],{"class":158},[84,76859,76399],{"class":154},[84,76861,76525],{"class":1378},[84,76863,76864],{"class":86,"line":3799},[84,76865,3578],{"emptyLinePlaceholder":1252},[84,76867,76868],{"class":86,"line":9120},[84,76869,76870],{"class":1378},"    \u002F\u002F {n}写几，就必须出现几次\n",[84,76872,76873,76875,76877,76879,76881,76883,76885,76888,76890,76892,76894,76896,76899,76902],{"class":86,"line":9144},[84,76874,74899],{"class":154},[84,76876,59393],{"class":90},[84,76878,155],{"class":154},[84,76880,1893],{"class":158},[84,76882,2274],{"class":129},[84,76884,76384],{"class":49126},[84,76886,76887],{"class":129},"{4}$",[84,76889,1893],{"class":158},[84,76891,1867],{"class":154},[84,76893,76391],{"class":90},[84,76895,155],{"class":154},[84,76897,76898],{"class":158},"'哈哈哈哈'",[84,76900,76901],{"class":154},")) ",[84,76903,76402],{"class":1378},[84,76905,76906],{"class":86,"line":9149},[84,76907,3578],{"emptyLinePlaceholder":1252},[84,76909,76910],{"class":86,"line":9155},[84,76911,76912],{"class":1378},"    \u002F\u002F {n,}大于等于n次\n",[84,76914,76915,76917,76919,76921,76923,76925,76927,76930,76932,76934,76936,76938,76940,76942],{"class":86,"line":9182},[84,76916,74899],{"class":154},[84,76918,59393],{"class":90},[84,76920,155],{"class":154},[84,76922,1893],{"class":158},[84,76924,2274],{"class":129},[84,76926,76384],{"class":49126},[84,76928,76929],{"class":129},"{4,}$",[84,76931,1893],{"class":158},[84,76933,1867],{"class":154},[84,76935,76391],{"class":90},[84,76937,155],{"class":154},[84,76939,76898],{"class":158},[84,76941,76901],{"class":154},[84,76943,76402],{"class":1378},[84,76945,76946,76948,76950,76952,76954,76956,76958,76960,76962,76964,76966,76968,76971,76973],{"class":86,"line":9187},[84,76947,74899],{"class":154},[84,76949,59393],{"class":90},[84,76951,155],{"class":154},[84,76953,1893],{"class":158},[84,76955,2274],{"class":129},[84,76957,76384],{"class":49126},[84,76959,76929],{"class":129},[84,76961,1893],{"class":158},[84,76963,1867],{"class":154},[84,76965,76391],{"class":90},[84,76967,155],{"class":154},[84,76969,76970],{"class":158},"'哈哈哈哈哈'",[84,76972,76901],{"class":154},[84,76974,76402],{"class":1378},[84,76976,76977],{"class":86,"line":9193},[84,76978,3578],{"emptyLinePlaceholder":1252},[84,76980,76981],{"class":86,"line":9205},[84,76982,76983],{"class":1378},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[84,76985,76986,76988,76990,76992,76994,76996,76998,77001,77003,77005,77007,77009,77011,77013],{"class":86,"line":9217},[84,76987,74899],{"class":154},[84,76989,59393],{"class":90},[84,76991,155],{"class":154},[84,76993,1893],{"class":158},[84,76995,2274],{"class":129},[84,76997,76384],{"class":49126},[84,76999,77000],{"class":129},"{4,6}$",[84,77002,1893],{"class":158},[84,77004,1867],{"class":154},[84,77006,76391],{"class":90},[84,77008,155],{"class":154},[84,77010,76898],{"class":158},[84,77012,76901],{"class":154},[84,77014,76402],{"class":1378},[84,77016,77017,77019,77021,77023,77025,77027,77029,77031,77033,77035,77037,77039,77041,77043],{"class":86,"line":9229},[84,77018,74899],{"class":154},[84,77020,59393],{"class":90},[84,77022,155],{"class":154},[84,77024,1893],{"class":158},[84,77026,2274],{"class":129},[84,77028,76384],{"class":49126},[84,77030,77000],{"class":129},[84,77032,1893],{"class":158},[84,77034,1867],{"class":154},[84,77036,76391],{"class":90},[84,77038,155],{"class":154},[84,77040,76970],{"class":158},[84,77042,76901],{"class":154},[84,77044,76402],{"class":1378},[84,77046,77047,77049,77051,77053,77055,77057,77059,77061,77063,77065,77067,77069,77072,77074],{"class":86,"line":10888},[84,77048,74899],{"class":154},[84,77050,59393],{"class":90},[84,77052,155],{"class":154},[84,77054,1893],{"class":158},[84,77056,2274],{"class":129},[84,77058,76384],{"class":49126},[84,77060,77000],{"class":129},[84,77062,1893],{"class":158},[84,77064,1867],{"class":154},[84,77066,76391],{"class":90},[84,77068,155],{"class":154},[84,77070,77071],{"class":158},"'哈哈哈哈哈哈哈'",[84,77073,76901],{"class":154},[84,77075,76525],{"class":1378},[84,77077,77078],{"class":86,"line":10913},[84,77079,3578],{"emptyLinePlaceholder":1252},[84,77081,77082],{"class":86,"line":10936},[84,77083,77084],{"class":1378},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[84,77086,77087,77089,77091,77093,77095,77097,77100,77102,77104,77106,77108,77110,77113,77115],{"class":86,"line":10960},[84,77088,74899],{"class":154},[84,77090,59393],{"class":90},[84,77092,155],{"class":154},[84,77094,1893],{"class":158},[84,77096,2274],{"class":129},[84,77098,77099],{"class":94},"[abc]",[84,77101,1613],{"class":129},[84,77103,1893],{"class":158},[84,77105,1867],{"class":154},[84,77107,76391],{"class":90},[84,77109,155],{"class":154},[84,77111,77112],{"class":158},"'a'",[84,77114,76399],{"class":154},[84,77116,76402],{"class":1378},[84,77118,77119,77121,77123,77125,77127,77129,77131,77133,77135,77137,77139,77141,77144,77146],{"class":86,"line":10965},[84,77120,74899],{"class":154},[84,77122,59393],{"class":90},[84,77124,155],{"class":154},[84,77126,1893],{"class":158},[84,77128,2274],{"class":129},[84,77130,77099],{"class":94},[84,77132,1613],{"class":129},[84,77134,1893],{"class":158},[84,77136,1867],{"class":154},[84,77138,76391],{"class":90},[84,77140,155],{"class":154},[84,77142,77143],{"class":158},"'b'",[84,77145,76399],{"class":154},[84,77147,76402],{"class":1378},[84,77149,77150,77152,77154,77156,77158,77160,77162,77164,77166,77168,77170,77172,77175,77177],{"class":86,"line":10970},[84,77151,74899],{"class":154},[84,77153,59393],{"class":90},[84,77155,155],{"class":154},[84,77157,1893],{"class":158},[84,77159,2274],{"class":129},[84,77161,77099],{"class":94},[84,77163,1613],{"class":129},[84,77165,1893],{"class":158},[84,77167,1867],{"class":154},[84,77169,76391],{"class":90},[84,77171,155],{"class":154},[84,77173,77174],{"class":158},"'c'",[84,77176,76399],{"class":154},[84,77178,76402],{"class":1378},[84,77180,77181,77183,77185,77187,77189,77191,77193,77195,77197,77199,77202,77204],{"class":86,"line":10975},[84,77182,74899],{"class":154},[84,77184,59393],{"class":90},[84,77186,155],{"class":154},[84,77188,1893],{"class":158},[84,77190,77099],{"class":94},[84,77192,1893],{"class":158},[84,77194,1867],{"class":154},[84,77196,76391],{"class":90},[84,77198,155],{"class":154},[84,77200,77201],{"class":158},"'ab'",[84,77203,76399],{"class":154},[84,77205,76402],{"class":1378},[84,77207,77208,77210,77212,77214,77216,77218,77220,77222,77224,77226,77228,77230,77232,77234],{"class":86,"line":10984},[84,77209,74899],{"class":154},[84,77211,59393],{"class":90},[84,77213,155],{"class":154},[84,77215,1893],{"class":158},[84,77217,2274],{"class":129},[84,77219,77099],{"class":94},[84,77221,1613],{"class":129},[84,77223,1893],{"class":158},[84,77225,1867],{"class":154},[84,77227,76391],{"class":90},[84,77229,155],{"class":154},[84,77231,77201],{"class":158},[84,77233,76399],{"class":154},[84,77235,77236],{"class":1378},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[84,77238,77239,77241,77243,77245,77247,77249,77251,77254,77256,77258,77260,77262,77264,77266],{"class":86,"line":10989},[84,77240,74899],{"class":154},[84,77242,59393],{"class":90},[84,77244,155],{"class":154},[84,77246,1893],{"class":158},[84,77248,2274],{"class":129},[84,77250,77099],{"class":94},[84,77252,77253],{"class":129},"{2}$",[84,77255,1893],{"class":158},[84,77257,1867],{"class":154},[84,77259,76391],{"class":90},[84,77261,155],{"class":154},[84,77263,77201],{"class":158},[84,77265,76399],{"class":154},[84,77267,77268],{"class":1378},"\u002F\u002Ftrue   可以选两个\n",[84,77270,77271,77273,77275,77277,77279,77281,77284,77286,77288,77290,77292,77294,77297,77299],{"class":86,"line":10995},[84,77272,74899],{"class":154},[84,77274,59393],{"class":90},[84,77276,155],{"class":154},[84,77278,1893],{"class":158},[84,77280,2274],{"class":129},[84,77282,77283],{"class":94},"[a-z]",[84,77285,1613],{"class":129},[84,77287,1893],{"class":158},[84,77289,1867],{"class":154},[84,77291,76391],{"class":90},[84,77293,155],{"class":154},[84,77295,77296],{"class":158},"'p'",[84,77298,76455],{"class":154},[84,77300,77301],{"class":1378},"\u002F\u002Ftrue   依然只能选一个\n",[84,77303,77304,77306,77308,77310,77312,77314,77317,77319,77321,77323,77325,77327,77329,77331],{"class":86,"line":11016},[84,77305,74899],{"class":154},[84,77307,59393],{"class":90},[84,77309,155],{"class":154},[84,77311,1893],{"class":158},[84,77313,2274],{"class":129},[84,77315,77316],{"class":94},"[A-Z]",[84,77318,1613],{"class":129},[84,77320,1893],{"class":158},[84,77322,1867],{"class":154},[84,77324,76391],{"class":90},[84,77326,155],{"class":154},[84,77328,77296],{"class":158},[84,77330,76455],{"class":154},[84,77332,76525],{"class":1378},[84,77334,77335,77337,77339,77341,77343,77345,77347,77349,77351,77353,77355,77357,77360,77362],{"class":86,"line":11022},[84,77336,74899],{"class":154},[84,77338,59393],{"class":90},[84,77340,155],{"class":154},[84,77342,1893],{"class":158},[84,77344,2274],{"class":129},[84,77346,77316],{"class":94},[84,77348,1613],{"class":129},[84,77350,1893],{"class":158},[84,77352,1867],{"class":154},[84,77354,76391],{"class":90},[84,77356,155],{"class":154},[84,77358,77359],{"class":158},"'P'",[84,77361,76455],{"class":154},[84,77363,76402],{"class":1378},[84,77365,77366,77368,77370,77372,77374,77376,77379,77381,77383,77385,77387,77389,77392,77394],{"class":86,"line":11036},[84,77367,74899],{"class":154},[84,77369,59393],{"class":90},[84,77371,155],{"class":154},[84,77373,1893],{"class":158},[84,77375,2274],{"class":129},[84,77377,77378],{"class":94},"[0-9]",[84,77380,1613],{"class":129},[84,77382,1893],{"class":158},[84,77384,1867],{"class":154},[84,77386,76391],{"class":90},[84,77388,155],{"class":154},[84,77390,77391],{"class":158},"'0'",[84,77393,76455],{"class":154},[84,77395,76402],{"class":1378},[84,77397,77398,77400,77402,77404,77406,77408,77411,77413,77415,77417,77419,77421,77423,77425],{"class":86,"line":11042},[84,77399,74899],{"class":154},[84,77401,59393],{"class":90},[84,77403,155],{"class":154},[84,77405,1893],{"class":158},[84,77407,2274],{"class":129},[84,77409,77410],{"class":94},"[a-zA-Z0-9]",[84,77412,1613],{"class":129},[84,77414,1893],{"class":158},[84,77416,1867],{"class":154},[84,77418,76391],{"class":90},[84,77420,155],{"class":154},[84,77422,77296],{"class":158},[84,77424,76399],{"class":154},[84,77426,76402],{"class":1378},[84,77428,77429,77431,77433],{"class":86,"line":11069},[84,77430,53566],{"class":154},[84,77432,52962],{"class":52449},[84,77434,52456],{"class":154},[84,77436,77437,77439,77441],{"class":86,"line":11078},[84,77438,52934],{"class":154},[84,77440,52949],{"class":52449},[84,77442,52456],{"class":154},[84,77444,77445],{"class":86,"line":11084},[84,77446,3578],{"emptyLinePlaceholder":1252},[84,77448,77449,77451,77453],{"class":86,"line":11092},[84,77450,52934],{"class":154},[84,77452,51784],{"class":52449},[84,77454,52456],{"class":154},[23168,77456,77458],{"id":77457},"_3624-修饰符","3.6.2.4 修饰符",[19,77460,77461],{},[2643,77462],{"alt":66,"src":77463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77465,77466],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77468,77469],{},[2643,77470],{"alt":66,"src":77471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[60,77473,77475],{"className":51782,"code":77474,"language":51784,"meta":66,"style":66},"\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",[39,77476,77477,77487,77501,77509,77523,77543,77555,77563,77571,77579,77611,77642,77647,77679,77690,77723,77732,77740,77748],{"__ignoreMap":66},[84,77478,77479,77481,77483,77485],{"class":86,"line":87},[84,77480,52446],{"class":154},[84,77482,52450],{"class":52449},[84,77484,52453],{"class":90},[84,77486,52456],{"class":154},[84,77488,77489,77491,77493,77495,77497,77499],{"class":86,"line":98},[84,77490,2218],{"class":154},[84,77492,51784],{"class":52449},[84,77494,52465],{"class":90},[84,77496,867],{"class":154},[84,77498,52470],{"class":158},[84,77500,52456],{"class":154},[84,77502,77503,77505,77507],{"class":86,"line":106},[84,77504,2218],{"class":154},[84,77506,52483],{"class":52449},[84,77508,52456],{"class":154},[84,77510,77511,77513,77515,77517,77519,77521],{"class":86,"line":112},[84,77512,53293],{"class":154},[84,77514,52493],{"class":52449},[84,77516,52496],{"class":90},[84,77518,867],{"class":154},[84,77520,52501],{"class":158},[84,77522,52456],{"class":154},[84,77524,77525,77527,77529,77531,77533,77535,77537,77539,77541],{"class":86,"line":425},[84,77526,53293],{"class":154},[84,77528,52493],{"class":52449},[84,77530,16090],{"class":90},[84,77532,867],{"class":154},[84,77534,52540],{"class":158},[84,77536,52520],{"class":90},[84,77538,867],{"class":154},[84,77540,52547],{"class":158},[84,77542,52456],{"class":154},[84,77544,77545,77547,77549,77551,77553],{"class":86,"line":2395},[84,77546,53293],{"class":154},[84,77548,52556],{"class":52449},[84,77550,52559],{"class":154},[84,77552,52556],{"class":52449},[84,77554,52456],{"class":154},[84,77556,77557,77559,77561],{"class":86,"line":2401},[84,77558,52934],{"class":154},[84,77560,52483],{"class":52449},[84,77562,52456],{"class":154},[84,77564,77565,77567,77569],{"class":86,"line":2492},[84,77566,2218],{"class":154},[84,77568,52949],{"class":52449},[84,77570,52456],{"class":154},[84,77572,77573,77575,77577],{"class":86,"line":2498},[84,77574,53293],{"class":154},[84,77576,52962],{"class":52449},[84,77578,52456],{"class":154},[84,77580,77581,77583,77585,77587,77589,77591,77594,77596,77598,77600,77602,77604,77607,77609],{"class":86,"line":2510},[84,77582,74899],{"class":154},[84,77584,59393],{"class":90},[84,77586,155],{"class":154},[84,77588,1893],{"class":158},[84,77590,2274],{"class":129},[84,77592,77593],{"class":49126},"java",[84,77595,1613],{"class":129},[84,77597,1893],{"class":158},[84,77599,1867],{"class":154},[84,77601,76391],{"class":90},[84,77603,155],{"class":154},[84,77605,77606],{"class":158},"'java'",[84,77608,76901],{"class":154},[84,77610,76402],{"class":1378},[84,77612,77613,77615,77617,77619,77621,77623,77625,77627,77629,77631,77633,77635,77638,77640],{"class":86,"line":2793},[84,77614,74899],{"class":154},[84,77616,59393],{"class":90},[84,77618,155],{"class":154},[84,77620,1893],{"class":158},[84,77622,2274],{"class":129},[84,77624,77593],{"class":49126},[84,77626,1613],{"class":129},[84,77628,1893],{"class":158},[84,77630,1867],{"class":154},[84,77632,76391],{"class":90},[84,77634,155],{"class":154},[84,77636,77637],{"class":158},"'Java'",[84,77639,76901],{"class":154},[84,77641,76525],{"class":1378},[84,77643,77644],{"class":86,"line":2798},[84,77645,77646],{"class":1378},"    \u002F\u002F 不区分大小写、\n",[84,77648,77649,77651,77653,77655,77657,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677],{"class":86,"line":2804},[84,77650,74899],{"class":154},[84,77652,59393],{"class":90},[84,77654,155],{"class":154},[84,77656,1893],{"class":158},[84,77658,2274],{"class":129},[84,77660,77593],{"class":49126},[84,77662,1613],{"class":129},[84,77664,1893],{"class":158},[84,77666,1751],{"class":129},[84,77668,1867],{"class":154},[84,77670,76391],{"class":90},[84,77672,155],{"class":154},[84,77674,77637],{"class":158},[84,77676,76901],{"class":154},[84,77678,76402],{"class":1378},[84,77680,77681,77683,77685,77687],{"class":86,"line":2809},[84,77682,12393],{"class":129},[84,77684,75065],{"class":94},[84,77686,14735],{"class":129},[84,77688,77689],{"class":158}," 'java是一门编程语言，学完java工资很高'\n",[84,77691,77692,77694,77697,77699,77702,77705,77707,77709,77711,77713,77716,77718,77721],{"class":86,"line":2823},[84,77693,12393],{"class":129},[84,77695,77696],{"class":94}," result",[84,77698,14735],{"class":129},[84,77700,77701],{"class":154}," str.",[84,77703,77704],{"class":90},"replace",[84,77706,155],{"class":154},[84,77708,1893],{"class":158},[84,77710,77593],{"class":49126},[84,77712,1893],{"class":158},[84,77714,77715],{"class":129},"ig",[84,77717,846],{"class":154},[84,77719,77720],{"class":158},"'前端'",[84,77722,162],{"class":154},[84,77724,77725,77727,77729],{"class":86,"line":2828},[84,77726,74899],{"class":154},[84,77728,59393],{"class":90},[84,77730,77731],{"class":154},"(result)\n",[84,77733,77734,77736,77738],{"class":86,"line":2834},[84,77735,53566],{"class":154},[84,77737,52962],{"class":52449},[84,77739,52456],{"class":154},[84,77741,77742,77744,77746],{"class":86,"line":2855},[84,77743,52934],{"class":154},[84,77745,52949],{"class":52449},[84,77747,52456],{"class":154},[84,77749,77750,77752,77754],{"class":86,"line":2860},[84,77751,52934],{"class":154},[84,77753,51784],{"class":52449},[84,77755,52456],{"class":154},[1222,77757,77758],{},"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":66,"searchDepth":98,"depth":98,"links":77760},[77761,77771,77783,77800,77807,77815],{"id":54509,"depth":98,"text":54510,"children":77762},[77763,77764,77765,77766,77767,77768,77769,77770],{"id":54513,"depth":106,"text":54514},{"id":54546,"depth":106,"text":54547},{"id":54585,"depth":106,"text":54586},{"id":54743,"depth":106,"text":54744},{"id":54791,"depth":106,"text":54792},{"id":54928,"depth":106,"text":54929},{"id":55250,"depth":106,"text":55251},{"id":58236,"depth":106,"text":58237},{"id":58264,"depth":98,"text":58265,"children":77772},[77773,77774,77775,77776,77777,77778,77779,77780,77781,77782],{"id":58268,"depth":106,"text":58269},{"id":58291,"depth":106,"text":58292},{"id":59205,"depth":106,"text":59206},{"id":59895,"depth":106,"text":59896},{"id":60177,"depth":106,"text":60178},{"id":64338,"depth":106,"text":64339},{"id":64508,"depth":106,"text":64509},{"id":64636,"depth":106,"text":64637},{"id":64661,"depth":106,"text":64662},{"id":66050,"depth":106,"text":66051},{"id":67203,"depth":98,"text":67204,"children":77784},[77785,77786,77787,77788,77789,77790,77791,77792,77793,77794,77795,77796,77797,77798,77799],{"id":67207,"depth":106,"text":67208},{"id":67861,"depth":106,"text":67862},{"id":69556,"depth":106,"text":69557},{"id":69597,"depth":106,"text":69598},{"id":69639,"depth":106,"text":69640},{"id":69653,"depth":106,"text":69654},{"id":69702,"depth":106,"text":69703},{"id":69714,"depth":106,"text":69715},{"id":69729,"depth":106,"text":69730},{"id":69765,"depth":106,"text":69766},{"id":69846,"depth":106,"text":69847},{"id":69974,"depth":106,"text":69975},{"id":69986,"depth":106,"text":69987},{"id":70005,"depth":106,"text":70006},{"id":72116,"depth":106,"text":72117},{"id":72135,"depth":98,"text":72136,"children":77801},[77802,77803,77804,77805,77806],{"id":72156,"depth":106,"text":72157},{"id":72176,"depth":106,"text":72177},{"id":72225,"depth":106,"text":72226},{"id":72350,"depth":106,"text":72351},{"id":72531,"depth":106,"text":72532},{"id":72549,"depth":98,"text":72550,"children":77808},[77809,77810,77811,77812,77813,77814],{"id":72564,"depth":106,"text":72565},{"id":72623,"depth":106,"text":72624},{"id":72647,"depth":106,"text":72648},{"id":72967,"depth":106,"text":72968},{"id":72999,"depth":106,"text":73000},{"id":73022,"depth":106,"text":73023},{"id":76090,"depth":98,"text":76091,"children":77816},[77817,77818],{"id":76124,"depth":106,"text":76125},{"id":76163,"depth":106,"text":76164},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54481,"description":1249},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77825,"title":77826,"body":77827,"description":1249,"extension":1250,"meta":93964,"navigation":1252,"path":93965,"seo":93966,"stem":93967,"__hash__":93968},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77828,"toc":93900},[77829,77832,77835,77839,77843,77848,77853,77864,77868,77873,77876,77880,77883,77888,77892,77896,77899,77904,77907,77911,77914,77922,77925,77929,77934,77939,77942,77946,77951,77956,77959,77963,77968,77971,77976,77979,77984,77987,77992,77997,78000,78003,78007,78012,78017,78020,78024,78028,78031,78034,78037,78041,78045,78050,78055,78058,78062,78067,78072,78075,78078,78081,78084,78087,78090,78093,78096,78099,78104,78108,78113,78118,78121,78124,78127,78130,78133,78136,78139,78142,78146,78150,78153,78156,78159,78164,78166,78169,78172,78175,78178,78181,78184,78187,78190,78193,78196,78199,78202,78205,78210,78215,78220,78223,78227,78230,78235,78239,78241,78252,78257,78358,78361,78364,78367,78370,78373,78376,78379,78382,78384,78387,78390,78393,78396,78399,78401,78404,78407,78410,78413,78416,78419,78421,78424,78426,78428,78431,78435,78439,78442,78445,78448,78451,78454,78457,78460,78463,78466,78471,78591,78594,78597,78602,78605,78608,78611,78614,78619,78622,78625,78628,78631,78636,78639,78739,78804,78878,78882,78885,78888,78892,78895,78909,78938,78941,78944,78947,78950,78953,78956,78959,78961,78964,78967,78970,78973,78977,78982,78986,78991,79066,79069,79252,79255,79258,79261,79264,79267,79269,79272,79275,79278,79281,79284,79287,79289,79293,79296,79301,79304,79307,79310,79313,79315,79320,79323,79326,79329,79332,79334,79339,79342,79345,79347,79349,79352,79356,79359,79362,79367,79370,79373,79376,79426,79431,79435,79440,79443,79512,79515,79524,79528,79533,79536,79539,79547,79550,79567,81369,81373,81377,81382,81385,81389,81395,81401,81553,81558,81563,81566,81569,81572,81575,81578,81581,81584,81587,81590,81593,81596,81599,81604,81608,81611,81622,81626,81631,81634,81637,81640,81643,81646,81648,81651,81654,81657,81660,81662,81679,81682,81686,81689,81694,81699,81702,81705,81709,81712,81715,81724,81727,81731,81734,81739,81744,81811,81815,81818,81821,81826,81831,81917,81922,81926,81929,81932,81947,81950,81955,81959,81964,82073,82076,82087,82237,82241,82246,82355,82359,82364,82369,82374,82377,82384,82404,82440,82604,82609,82612,82617,82624,82627,82630,82633,82692,82748,82804,82808,82813,83128,83131,83135,83138,83143,83252,83257,83261,83266,83270,83341,83345,83347,83350,83353,83391,83667,83671,83688,83754,83788,83792,83795,83800,83829,83836,83845,83850,83865,83870,83879,83882,84019,84023,84085,84089,84094,84339,84343,84348,84351,84354,84357,84360,84364,84369,85950,85954,85958,85964,85967,85972,85976,85979,85984,85987,85998,86002,86007,86011,86016,86021,86024,86029,86033,86037,86040,86045,86050,86053,86056,86059,86181,86186,86288,86291,86294,86298,86303,86475,86480,86484,86487,86492,86558,86563,86566,86697,86700,86705,86708,86711,86802,86807,86810,86813,86816,86819,86824,86829,86832,86837,86842,86847,86851,86854,86857,86862,86867,86872,86877,86931,86934,86937,86942,86945,86948,86953,86958,86963,86967,86972,86986,86991,86994,86999,87003,87008,87013,87018,87023,87028,87033,87038,87043,87046,87050,87055,87058,87061,87064,87069,87074,87077,87080,87084,87087,87090,87095,87100,87105,87110,87113,87118,87123,87184,87189,87192,87197,88438,88443,88447,88451,88456,88459,88464,88469,88472,88477,88479,88484,88488,88491,88494,88505,88509,88514,88519,88574,88579,88584,88589,88800,88805,88809,88814,88817,88819,88822,88825,89272,89277,89284,89290,89293,89296,89560,89565,89569,89834,89839,89843,89848,89853,89858,89863,90194,90197,90202,90207,90210,90214,90218,90223,90228,90233,90238,90243,90248,90252,90255,90260,90265,90268,90342,90347,90352,90357,90359,90362,90732,90737,90742,90747,90750,90753,90855,90860,90865,90968,90972,90977,90981,90985,90990,90995,90998,91003,91006,91009,91402,91407,91410,91413,91416,91419,91939,91943,91948,91953,91958,91961,91966,91969,91972,92354,92359,92361,92363,92366,92369,92881,92885,92946,92949,92952,92955,92959,92962,92967,92972,93897],[10,77830,77826],{"id":77831},"_4js进阶",[19,77833,77834],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77836,77838],{"id":77837},"_41-作用域","4.1 作用域",[198,77840,77842],{"id":77841},"_411-局部作用域","4.1.1 局部作用域",[19,77844,77845],{},[2643,77846],{"alt":66,"src":77847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77849,77850],{},[2643,77851],{"alt":66,"src":77852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2315,77854,77855,77858,77861],{},[29,77856,77857],{},"函数作用域在函数内部",[29,77859,77860],{},"块级作用域在{}",[29,77862,77863],{},"对象的那个{}不是作用域，不是块作用域",[198,77865,77867],{"id":77866},"_412-全局作用域","4.1.2 全局作用域",[19,77869,77870],{},[2643,77871],{"alt":66,"src":77872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77874,77875],{},"window.a=10不要这样写",[198,77877,77879],{"id":77878},"_413-作用域链","4.1.3 作用域链",[19,77881,77882],{},"变量查找机制",[19,77884,77885],{},[2643,77886],{"alt":66,"src":77887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77889,77891],{"id":77890},"_42-垃圾回收机制","4.2 垃圾回收机制",[198,77893,77895],{"id":77894},"_421-大体介绍","4.2.1 大体介绍",[19,77897,77898],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77900,77901],{},[2643,77902],{"alt":66,"src":77903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77905,77906],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[198,77908,77910],{"id":77909},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77912,77913],{},"堆栈空间分配区别：",[26,77915,77916,77919],{},[29,77917,77918],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,77920,77921],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77923,77924],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23168,77926,77928],{"id":77927},"_4221-引用计数","4.2.2.1 引用计数",[19,77930,77931],{},[2643,77932],{"alt":66,"src":77933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77935,77936],{},[2643,77937],{"alt":66,"src":77938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77940,77941],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23168,77943,77945],{"id":77944},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77947,77948],{},[2643,77949],{"alt":66,"src":77950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77952,77953],{},[2643,77954],{"alt":66,"src":77955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77957,77958],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77960,77962],{"id":77961},"_43-闭包","4.3 闭包",[19,77964,77965],{},[2643,77966],{"alt":66,"src":77967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77969,77970],{},"闭包：内层函数+外层函数的变量",[19,77972,77973],{},[2643,77974],{"alt":66,"src":77975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77977,77978],{},"closure就是闭包",[19,77980,77981],{},[2643,77982],{"alt":66,"src":77983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77985,77986],{},"内层函数必须包含外层函数的变量才是闭包",[19,77988,77989],{},[2643,77990],{"alt":66,"src":77991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77993,77994],{},[2643,77995],{"alt":66,"src":77996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77998,77999],{},"闭包可能会引起内存泄漏",[19,78001,78002],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78004,78006],{"id":78005},"_44-变量提升","4.4 变量提升",[19,78008,78009],{},[2643,78010],{"alt":66,"src":78011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78013,78014],{},[2643,78015],{"alt":66,"src":78016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78018,78019],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78021,78023],{"id":78022},"_45-函数进阶","4.5 函数进阶",[198,78025,78027],{"id":78026},"_451-函数提升","4.5.1 函数提升",[19,78029,78030],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78032,78033],{},"只提升函数声明，不提升函数调用",[52962,78035,78036],{},"\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",[198,78038,78040],{"id":78039},"_452-函数参数","4.5.2 函数参数",[23168,78042,78044],{"id":78043},"_4521-动态参数","4.5.2.1 动态参数",[19,78046,78047],{},[2643,78048],{"alt":66,"src":78049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78051,78052],{},[2643,78053],{"alt":66,"src":78054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78056,78057],{},"箭头函数里边没有arguments",[23168,78059,78061],{"id":78060},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78063,78064],{},[2643,78065],{"alt":66,"src":78066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78068,78069],{},[2643,78070],{"alt":66,"src":78071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78073,78074],{},"剩余参数使用的时候不需要写...",[19,78076,78077],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78079,78080],{},"  function getSum(a,b,...arr) {",[19,78082,78083],{},"  console.log(11)",[19,78085,78086],{},"  }",[19,78088,78089],{},"  getSum(1,2,3,4)",[19,78091,78092],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78094,78095],{},"  getSum(1,2)",[19,78097,78098],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78100,78101],{},[2643,78102],{"alt":66,"src":78103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23168,78105,78107],{"id":78106},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78109,78110],{},[2643,78111],{"alt":66,"src":78112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78114,78115],{},[2643,78116],{"alt":66,"src":78117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78119,78120],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78122,78123],{},"展开运算符可以用于数组之间的合并：",[19,78125,78126],{},"const arr1 = [1, 2, 3]",[19,78128,78129],{},"const arr2 = [3, 4, 5]",[19,78131,78132],{},"const arr = [...arr1, ...arr2]",[19,78134,78135],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78137,78138],{},"剩余参数：函数参数使用，得到真数组",[19,78140,78141],{},"展开运算符：数组中使用，数组展开",[198,78143,78145],{"id":78144},"_453-箭头函数","4.5.3 箭头函数",[23168,78147,78149],{"id":78148},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78151,78152],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78154,78155],{},"它不是万能的！！！",[19,78157,78158],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78160,78161],{},[2643,78162],{"alt":66,"src":78163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78165,1352],{},[19,78167,78168],{},"① 只有一个形参的时候，可以省略小括号：",[19,78170,78171],{},"const fn=x=>{console.log(x)}",[19,78173,78174],{},"② 只有一行代码时可以省略大括号：",[19,78176,78177],{},"const fn=x=>console.log(11)",[19,78179,78180],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78182,78183],{},"const fn=x=>x+x",[19,78185,78186],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78188,78189],{},"⑤ 阻止表单默认提交：",[19,78191,78192],{},"const form = document.querySelector('form')",[19,78194,78195],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78197,78198],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78200,78201],{},"const fn=uname=>({uname:uname})",[19,78203,78204],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78206,78207],{},[2643,78208],{"alt":66,"src":78209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78211,78212],{},[2643,78213],{"alt":66,"src":78214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78216,78217],{},[2643,78218],{"alt":66,"src":78219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78221,78222],{},"一定不要忘记用()，有()就理解为自带return",[23168,78224,78226],{"id":78225},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78228,78229],{},"箭头函数是没有动态参数的arguments",[19,78231,78232],{},[2643,78233],{"alt":66,"src":78234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23168,78236,78238],{"id":78237},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78240,12504],{},[26,78242,78243,78246,78249],{},[29,78244,78245],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,78247,78248],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,78250,78251],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78253,78254],{},[2643,78255],{"alt":66,"src":78256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[60,78258,78260],{"className":54216,"code":78259,"language":54218,"meta":66,"style":66},"  \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",[39,78261,78262,78270,78275,78280,78285,78290,78295,78299,78304,78308,78312,78317,78322,78327,78331,78335,78340,78345,78350],{"__ignoreMap":66},[84,78263,78264,78266,78268],{"class":86,"line":87},[84,78265,53293],{"class":154},[84,78267,52962],{"class":52449},[84,78269,52456],{"class":154},[84,78271,78272],{"class":86,"line":98},[84,78273,78274],{"class":154},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[84,78276,78277],{"class":86,"line":106},[84,78278,78279],{"class":154},"    console.log(this) \u002F\u002F指向window\n",[84,78281,78282],{"class":86,"line":112},[84,78283,78284],{"class":154},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[84,78286,78287],{"class":86,"line":425},[84,78288,78289],{"class":154},"    function fn() {\n",[84,78291,78292],{"class":86,"line":2395},[84,78293,78294],{"class":154},"      console.log(this)  \u002F\u002F指向window\n",[84,78296,78297],{"class":86,"line":2401},[84,78298,3365],{"class":154},[84,78300,78301],{"class":86,"line":2492},[84,78302,78303],{"class":154},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[84,78305,78306],{"class":86,"line":2498},[84,78307,3578],{"emptyLinePlaceholder":1252},[84,78309,78310],{"class":86,"line":2510},[84,78311,72669],{"class":154},[84,78313,78314],{"class":86,"line":2793},[84,78315,78316],{"class":154},"      name: 'andy',\n",[84,78318,78319],{"class":86,"line":2798},[84,78320,78321],{"class":154},"      sayHai: function () {\n",[84,78323,78324],{"class":86,"line":2804},[84,78325,78326],{"class":154},"        console.log(this)\n",[84,78328,78329],{"class":86,"line":2809},[84,78330,53547],{"class":154},[84,78332,78333],{"class":86,"line":2823},[84,78334,3365],{"class":154},[84,78336,78337],{"class":86,"line":2828},[84,78338,78339],{"class":154},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[84,78341,78342],{"class":86,"line":2834},[84,78343,78344],{"class":154},"    \u002F\u002F 2.箭头函数的this\n",[84,78346,78347],{"class":86,"line":2855},[84,78348,78349],{"class":154},"    const fn = () => console.log(this)\n",[84,78351,78352,78354,78356],{"class":86,"line":2860},[84,78353,53566],{"class":154},[84,78355,52962],{"class":52449},[84,78357,52456],{"class":154},[19,78359,78360],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78362,78363],{},"const fn = () => console.log(this)",[19,78365,78366],{},"fn() \u002F\u002F指向window",[19,78368,78369],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78371,78372],{},"①",[19,78374,78375],{},"const obj = {",[19,78377,78378],{},"uname: 'pink老师',",[19,78380,78381],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78383,2254],{},[19,78385,78386],{},"调用对象里边的函数",[19,78388,78389],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78391,78392],{},"obj.sayHai()",[19,78394,78395],{},"②",[19,78397,78398],{},"const obj1 = {",[19,78400,78378],{},[19,78402,78403],{},"sayHai: function () {",[19,78405,78406],{},"let i = 10",[19,78408,78409],{},"const count = () => {",[19,78411,78412],{},"console.log(this)",[19,78414,78415],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78417,78418],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78420,2254],{},[19,78422,78423],{},"count()",[19,78425,2254],{},[19,78427,2254],{},[19,78429,78430],{},"obj1.sayHai()",[14,78432,78434],{"id":78433},"_46-解构赋值","4.6 解构赋值",[198,78436,78438],{"id":78437},"_461-数组解构","4.6.1 数组解构",[19,78440,78441],{},"以前要是使用数组中的值的话：",[19,78443,78444],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78446,78447],{},"const arr=[100,60,80]",[19,78449,78450],{},"const max=arr[0]",[19,78452,78453],{},"const min=arr[1]",[19,78455,78456],{},"const avg=arr[2]",[19,78458,78459],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78461,78462],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78464,78465],{},"这个写法就类似于上边的那种用很多const的方法",[19,78467,78468],{},[2643,78469],{"alt":66,"src":78470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[60,78472,78474],{"className":51782,"code":78473,"language":51784,"meta":66,"style":66},"①变量之间交换值:\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",[39,78475,78476,78481,78486,78491,78496,78501,78505,78509,78514,78518,78523,78528,78532,78537,78542,78553,78563,78568,78573,78578,78582,78586],{"__ignoreMap":66},[84,78477,78478],{"class":86,"line":87},[84,78479,78480],{"class":154},"①变量之间交换值:\n",[84,78482,78483],{"class":86,"line":98},[84,78484,78485],{"class":154},"let a=1\n",[84,78487,78488],{"class":86,"line":106},[84,78489,78490],{"class":154},"let b=2;\n",[84,78492,78493],{"class":86,"line":112},[84,78494,78495],{"class":154},"必须加这行代码，不然就会报错\n",[84,78497,78498],{"class":86,"line":425},[84,78499,78500],{"class":154},"[b,a]=[a,b]\n",[84,78502,78503],{"class":86,"line":2395},[84,78504,3578],{"emptyLinePlaceholder":1252},[84,78506,78507],{"class":86,"line":2401},[84,78508,3578],{"emptyLinePlaceholder":1252},[84,78510,78511],{"class":86,"line":2492},[84,78512,78513],{"class":154},"可以写成下面的方式：\n",[84,78515,78516],{"class":86,"line":2498},[84,78517,78485],{"class":154},[84,78519,78520],{"class":86,"line":2510},[84,78521,78522],{"class":154},"let b=2\n",[84,78524,78525],{"class":86,"line":2793},[84,78526,78527],{"class":154},";[b,a]=[a,b]\n",[84,78529,78530],{"class":86,"line":2798},[84,78531,3578],{"emptyLinePlaceholder":1252},[84,78533,78534],{"class":86,"line":2804},[84,78535,78536],{"class":154},"②排序\n",[84,78538,78539],{"class":86,"line":2809},[84,78540,78541],{"class":154},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[84,78543,78544,78547,78550],{"class":86,"line":2823},[84,78545,78546],{"class":154},"for (let i = 0; i ",[84,78548,2218],{"class":78549},"s7hpK",[84,78551,78552],{"class":154}," arr1.length; i++) {\n",[84,78554,78555,78558,78560],{"class":86,"line":2828},[84,78556,78557],{"class":154},"   for (let j = 0; j ",[84,78559,2218],{"class":78549},[84,78561,78562],{"class":154}," arr1.length - 1; j++) {\n",[84,78564,78565],{"class":86,"line":2834},[84,78566,78567],{"class":154},"      if (arr1[j] > arr1[j + 1]) {\n",[84,78569,78570],{"class":86,"line":2855},[84,78571,78572],{"class":154},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[84,78574,78575],{"class":86,"line":2860},[84,78576,78577],{"class":154},"       }\n",[84,78579,78580],{"class":86,"line":2874},[84,78581,5487],{"class":154},[84,78583,78584],{"class":86,"line":2879},[84,78585,2746],{"class":154},[84,78587,78588],{"class":86,"line":2908},[84,78589,78590],{"class":154},"console.log(arr1)\n",[19,78592,78593],{},"数组解构的细节：",[19,78595,78596],{},"①变量多，单元值少",[19,78598,78599],{},[2643,78600],{"alt":66,"src":78601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78603,78604],{},"防止出现undefined的方法：",[19,78606,78607],{},"const [a=0,b=0] =[1]",[19,78609,78610],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78612,78613],{},"②变量少，单元值多",[19,78615,78616],{},[2643,78617],{"alt":66,"src":78618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78620,78621],{},"此时可以使用剩余参数来接收多余的值",[19,78623,78624],{},"const [a,b,...c]=[1,2,3,4]",[19,78626,78627],{},"console.log(c) 输出[3,4]",[19,78629,78630],{},"③可以按需导入，忽略某些返回值",[19,78632,78633],{},[2643,78634],{"alt":66,"src":78635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78637,78638],{},"④支持多维数组的结构",[60,78640,78644],{"className":78641,"code":78642,"language":78643,"meta":66,"style":66},"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",[39,78645,78646,78674,78690,78705,78720],{"__ignoreMap":66},[84,78647,78648,78650,78652,78654,78656,78658,78660,78662,78665,78667,78669,78671],{"class":86,"line":87},[84,78649,7964],{"class":129},[84,78651,52982],{"class":154},[84,78653,867],{"class":129},[84,78655,53375],{"class":154},[84,78657,1529],{"class":94},[84,78659,846],{"class":154},[84,78661,1397],{"class":94},[84,78663,78664],{"class":154},", [",[84,78666,1391],{"class":94},[84,78668,846],{"class":154},[84,78670,1604],{"class":94},[84,78672,78673],{"class":154},"]]\n",[84,78675,78676,78679,78681,78683,78685,78687],{"class":86,"line":98},[84,78677,78678],{"class":154},"console.",[84,78680,59393],{"class":90},[84,78682,5029],{"class":154},[84,78684,1504],{"class":94},[84,78686,5394],{"class":154},[84,78688,78689],{"class":1378},"  \u002F\u002F1\n",[84,78691,78692,78694,78696,78698,78700,78702],{"class":86,"line":106},[84,78693,78678],{"class":154},[84,78695,59393],{"class":90},[84,78697,5029],{"class":154},[84,78699,1529],{"class":94},[84,78701,5394],{"class":154},[84,78703,78704],{"class":1378},"  \u002F\u002F2\n",[84,78706,78707,78709,78711,78713,78715,78717],{"class":86,"line":112},[84,78708,78678],{"class":154},[84,78710,59393],{"class":90},[84,78712,5029],{"class":154},[84,78714,1397],{"class":94},[84,78716,5394],{"class":154},[84,78718,78719],{"class":1378},"  \u002F\u002F[3,4]\n",[84,78721,78722,78724,78726,78728,78730,78732,78734,78736],{"class":86,"line":425},[84,78723,78678],{"class":154},[84,78725,59393],{"class":90},[84,78727,5029],{"class":154},[84,78729,1397],{"class":94},[84,78731,6078],{"class":154},[84,78733,1504],{"class":94},[84,78735,5394],{"class":154},[84,78737,78738],{"class":1378},"  \u002F\u002F3\n",[60,78740,78742],{"className":78641,"code":78741,"language":78643,"meta":66,"style":66},"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",[39,78743,78744,78771,78782,78793],{"__ignoreMap":66},[84,78745,78746,78748,78751,78753,78755,78757,78759,78761,78763,78765,78767,78769],{"class":86,"line":87},[84,78747,7964],{"class":129},[84,78749,78750],{"class":154}," [a, b, c] ",[84,78752,867],{"class":129},[84,78754,53375],{"class":154},[84,78756,1529],{"class":94},[84,78758,846],{"class":154},[84,78760,1397],{"class":94},[84,78762,78664],{"class":154},[84,78764,1391],{"class":94},[84,78766,846],{"class":154},[84,78768,1604],{"class":94},[84,78770,78673],{"class":154},[84,78772,78773,78775,78777,78780],{"class":86,"line":98},[84,78774,78678],{"class":154},[84,78776,59393],{"class":90},[84,78778,78779],{"class":154},"(a)",[84,78781,78689],{"class":1378},[84,78783,78784,78786,78788,78791],{"class":86,"line":106},[84,78785,78678],{"class":154},[84,78787,59393],{"class":90},[84,78789,78790],{"class":154},"(b)",[84,78792,78704],{"class":1378},[84,78794,78795,78797,78799,78802],{"class":86,"line":112},[84,78796,78678],{"class":154},[84,78798,59393],{"class":90},[84,78800,78801],{"class":154},"(c)",[84,78803,78719],{"class":1378},[60,78805,78807],{"className":78641,"code":78806,"language":78643,"meta":66,"style":66},"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",[39,78808,78809,78836,78846,78856,78866],{"__ignoreMap":66},[84,78810,78811,78813,78816,78818,78820,78822,78824,78826,78828,78830,78832,78834],{"class":86,"line":87},[84,78812,7964],{"class":129},[84,78814,78815],{"class":154}," [a, b, [c, d]] ",[84,78817,867],{"class":129},[84,78819,53375],{"class":154},[84,78821,1529],{"class":94},[84,78823,846],{"class":154},[84,78825,1397],{"class":94},[84,78827,78664],{"class":154},[84,78829,1391],{"class":94},[84,78831,846],{"class":154},[84,78833,1604],{"class":94},[84,78835,78673],{"class":154},[84,78837,78838,78840,78842,78844],{"class":86,"line":98},[84,78839,78678],{"class":154},[84,78841,59393],{"class":90},[84,78843,78779],{"class":154},[84,78845,78689],{"class":1378},[84,78847,78848,78850,78852,78854],{"class":86,"line":106},[84,78849,78678],{"class":154},[84,78851,59393],{"class":90},[84,78853,78790],{"class":154},[84,78855,78704],{"class":1378},[84,78857,78858,78860,78862,78864],{"class":86,"line":112},[84,78859,78678],{"class":154},[84,78861,59393],{"class":90},[84,78863,78801],{"class":154},[84,78865,78738],{"class":1378},[84,78867,78868,78870,78872,78875],{"class":86,"line":425},[84,78869,78678],{"class":154},[84,78871,59393],{"class":90},[84,78873,78874],{"class":154},"(d)",[84,78876,78877],{"class":1378},"  \u002F\u002F4\n",[198,78879,78881],{"id":78880},"_462-对象解构","4.6.2 对象解构",[19,78883,78884],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78886,78887],{},"用的非常非常多！！！！！！",[23168,78889,78891],{"id":78890},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78893,78894],{},"基本语法：",[26,78896,78897,78900,78903,78906],{},[29,78898,78899],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,78901,78902],{},"对象属性的值将被赋值给与属性名相同的变量",[29,78904,78905],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,78907,78908],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[60,78910,78912],{"className":51782,"code":78911,"language":51784,"meta":66,"style":66},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[39,78913,78914,78919,78924,78929,78933],{"__ignoreMap":66},[84,78915,78916],{"class":86,"line":87},[84,78917,78918],{"class":154},"const obj = {\n",[84,78920,78921],{"class":86,"line":98},[84,78922,78923],{"class":154},"   uname: 'pink老师',\n",[84,78925,78926],{"class":86,"line":106},[84,78927,78928],{"class":154},"   age: 18,\n",[84,78930,78931],{"class":86,"line":112},[84,78932,2746],{"class":154},[84,78934,78935],{"class":86,"line":425},[84,78936,78937],{"class":154},"const { uname, age } = obj\n",[19,78939,78940],{},"上方代码这样写等价于：",[19,78942,78943],{},"const uname等价于obj.uname",[19,78945,78946],{},"变量名可以重新改名：",[19,78948,78949],{},"const uname='red老师'",[19,78951,78952],{},"const user={",[19,78954,78955],{},"  uname:'pink老师',",[19,78957,78958],{},"  age:18",[19,78960,2254],{},[19,78962,78963],{},"const {uname,age}=user",[19,78965,78966],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78968,78969],{},"const {旧变量名：新变量名}=对象",[19,78971,78972],{},"const {uname:username,age}=user",[23168,78974,78976],{"id":78975},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78978,78979],{},[2643,78980],{"alt":66,"src":78981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23168,78983,78985],{"id":78984},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78987,78988],{},[2643,78989],{"alt":66,"src":78990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[60,78992,78994],{"className":54216,"code":78993,"language":54218,"meta":66,"style":66},"  \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",[39,78995,78996,79004,79009,79014,79019,79024,79029,79034,79039,79044,79048,79053,79058],{"__ignoreMap":66},[84,78997,78998,79000,79002],{"class":86,"line":87},[84,78999,53293],{"class":154},[84,79001,52962],{"class":52449},[84,79003,52456],{"class":154},[84,79005,79006],{"class":86,"line":98},[84,79007,79008],{"class":154},"    const pig = {\n",[84,79010,79011],{"class":86,"line":106},[84,79012,79013],{"class":154},"      name: '佩奇',\n",[84,79015,79016],{"class":86,"line":112},[84,79017,79018],{"class":154},"      family: {\n",[84,79020,79021],{"class":86,"line":425},[84,79022,79023],{"class":154},"        mother: '猪妈妈',\n",[84,79025,79026],{"class":86,"line":2395},[84,79027,79028],{"class":154},"        father: '猪爸爸',\n",[84,79030,79031],{"class":86,"line":2401},[84,79032,79033],{"class":154},"        sister: '乔治'\n",[84,79035,79036],{"class":86,"line":2492},[84,79037,79038],{"class":154},"      },\n",[84,79040,79041],{"class":86,"line":2498},[84,79042,79043],{"class":154},"      age: 6\n",[84,79045,79046],{"class":86,"line":2510},[84,79047,3365],{"class":154},[84,79049,79050],{"class":86,"line":2793},[84,79051,79052],{"class":154},"    \u002F\u002F 多级对象解构\n",[84,79054,79055],{"class":86,"line":2798},[84,79056,79057],{"class":154},"    const { name, family: { mother, father, sister }, age } = pig\n",[84,79059,79060,79062,79064],{"class":86,"line":2804},[84,79061,53566],{"class":154},[84,79063,52962],{"class":52449},[84,79065,52456],{"class":154},[19,79067,79068],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[60,79070,79073],{"className":79071,"code":79072,"language":77593,"meta":66,"style":66},"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",[39,79074,79075,79080,79091,79103,79115,79124,79128,79139,79151,79161,79166,79170,79180,79191,79200,79204,79208,79219,79230,79239,79243,79248],{"__ignoreMap":66},[84,79076,79077],{"class":86,"line":87},[84,79078,79079],{"class":1378},"    \u002F\u002F 这是后台传递过来的数据\n",[84,79081,79082,79084,79087,79089],{"class":86,"line":98},[84,79083,12393],{"class":129},[84,79085,79086],{"class":154}," msg ",[84,79088,867],{"class":129},[84,79090,16742],{"class":154},[84,79092,79093,79096,79098,79101],{"class":86,"line":106},[84,79094,79095],{"class":158},"      \"code\"",[84,79097,2167],{"class":129},[84,79099,79100],{"class":94}," 200",[84,79102,32619],{"class":154},[84,79104,79105,79108,79110,79113],{"class":86,"line":112},[84,79106,79107],{"class":158},"      \"msg\"",[84,79109,2167],{"class":129},[84,79111,79112],{"class":158}," \"获取新闻列表成功\"",[84,79114,32619],{"class":154},[84,79116,79117,79120,79122],{"class":86,"line":425},[84,79118,79119],{"class":158},"      \"data\"",[84,79121,2167],{"class":129},[84,79123,56594],{"class":154},[84,79125,79126],{"class":86,"line":2395},[84,79127,3688],{"class":154},[84,79129,79130,79133,79135,79137],{"class":86,"line":2401},[84,79131,79132],{"class":158},"          \"id\"",[84,79134,2167],{"class":129},[84,79136,133],{"class":94},[84,79138,32619],{"class":154},[84,79140,79141,79144,79146,79149],{"class":86,"line":2492},[84,79142,79143],{"class":158},"          \"title\"",[84,79145,2167],{"class":129},[84,79147,79148],{"class":158}," \"5G商用自己，三大运用商收入下降\"",[84,79150,32619],{"class":154},[84,79152,79153,79156,79158],{"class":86,"line":2498},[84,79154,79155],{"class":158},"          \"count\"",[84,79157,2167],{"class":129},[84,79159,79160],{"class":94}," 58\n",[84,79162,79163],{"class":86,"line":2510},[84,79164,79165],{"class":154},"        },\n",[84,79167,79168],{"class":86,"line":2793},[84,79169,3688],{"class":154},[84,79171,79172,79174,79176,79178],{"class":86,"line":2798},[84,79173,79132],{"class":158},[84,79175,2167],{"class":129},[84,79177,15925],{"class":94},[84,79179,32619],{"class":154},[84,79181,79182,79184,79186,79189],{"class":86,"line":2804},[84,79183,79143],{"class":158},[84,79185,2167],{"class":129},[84,79187,79188],{"class":158}," \"国际媒体头条速览\"",[84,79190,32619],{"class":154},[84,79192,79193,79195,79197],{"class":86,"line":2809},[84,79194,79155],{"class":158},[84,79196,2167],{"class":129},[84,79198,79199],{"class":94}," 56\n",[84,79201,79202],{"class":86,"line":2823},[84,79203,79165],{"class":154},[84,79205,79206],{"class":86,"line":2828},[84,79207,3688],{"class":154},[84,79209,79210,79212,79214,79217],{"class":86,"line":2834},[84,79211,79132],{"class":158},[84,79213,2167],{"class":129},[84,79215,79216],{"class":94}," 3",[84,79218,32619],{"class":154},[84,79220,79221,79223,79225,79228],{"class":86,"line":2855},[84,79222,79143],{"class":158},[84,79224,2167],{"class":129},[84,79226,79227],{"class":158}," \"乌克兰和俄罗斯持续冲突\"",[84,79229,32619],{"class":154},[84,79231,79232,79234,79236],{"class":86,"line":2860},[84,79233,79155],{"class":158},[84,79235,2167],{"class":129},[84,79237,79238],{"class":94}," 1669\n",[84,79240,79241],{"class":86,"line":2874},[84,79242,79165],{"class":154},[84,79244,79245],{"class":86,"line":2879},[84,79246,79247],{"class":154},"      ]\n",[84,79249,79250],{"class":86,"line":2908},[84,79251,3365],{"class":154},[19,79253,79254],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79256,79257],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79259,79260],{},"\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,79262,79263],{},"function({data}) {",[19,79265,79266],{},"console.log(data)",[19,79268,2254],{},[19,79270,79271],{},"render(msg)",[19,79273,79274],{},"实参传递给形参的时候解构了",[19,79276,79277],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79279,79280],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79282,79283],{},"function render({data:mydata}) {",[19,79285,79286],{},"  console.log(data)",[19,79288,2254],{},[198,79290,79292],{"id":79291},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79294,79295],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,79297,79298],{},[29,79299,79300],{},"如果对一个数组进行遍历，有两种方式：",[19,79302,79303],{},"①法1",[19,79305,79306],{},"const arr=[1,2,3]",[19,79308,79309],{},"arr.map(function(item,index) {",[19,79311,79312],{},"  console.log(item)",[19,79314,53613],{},[19,79316,79317],{},[2643,79318],{"alt":66,"src":79319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79321,79322],{},"②法2",[19,79324,79325],{},"const str='pink'",[19,79327,79328],{},"[1,2,3].map(function(item,index) {",[19,79330,79331],{},"console.log(item)",[19,79333,53613],{},[19,79335,79336],{},[2643,79337],{"alt":66,"src":79338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79340,79341],{},"此时会报错",[19,79343,79344],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79346,79331],{},[19,79348,53613],{},[19,79350,79351],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79353,79355],{"id":79354},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79357,79358],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79360,79361],{},"可以理解为加强版的for循环",[19,79363,79364],{},[2643,79365],{"alt":66,"src":79366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79368,79369],{},"里边不写return，不返回数组，只遍历不返回",[19,79371,79372],{},"map是返回数组",[19,79374,79375],{},"forEach主要用于遍历数组对象",[60,79377,79379],{"className":54216,"code":79378,"language":54218,"meta":66,"style":66},"  \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",[39,79380,79381,79389,79394,79399,79404,79409,79413,79418],{"__ignoreMap":66},[84,79382,79383,79385,79387],{"class":86,"line":87},[84,79384,53293],{"class":154},[84,79386,52962],{"class":52449},[84,79388,52456],{"class":154},[84,79390,79391],{"class":86,"line":98},[84,79392,79393],{"class":154},"    const arr = ['red', 'green', 'pink']\n",[84,79395,79396],{"class":86,"line":106},[84,79397,79398],{"class":154},"    const result = arr.forEach(function (item, index) {\n",[84,79400,79401],{"class":86,"line":112},[84,79402,79403],{"class":154},"      console.log(item)\n",[84,79405,79406],{"class":86,"line":425},[84,79407,79408],{"class":154},"      console.log(index)\n",[84,79410,79411],{"class":86,"line":2395},[84,79412,34613],{"class":154},[84,79414,79415],{"class":86,"line":2401},[84,79416,79417],{"class":154},"    console.log(result)\n",[84,79419,79420,79422,79424],{"class":86,"line":2492},[84,79421,53566],{"class":154},[84,79423,52962],{"class":52449},[84,79425,52456],{"class":154},[19,79427,79428],{},[2643,79429],{"alt":66,"src":79430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79432,79434],{"id":79433},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79436,79437],{},[2643,79438],{"alt":66,"src":79439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79441,79442],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[60,79444,79446],{"className":54216,"code":79445,"language":54218,"meta":66,"style":66},"\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",[39,79447,79448,79456,79464,79469,79474,79478,79482,79487,79491,79496,79504],{"__ignoreMap":66},[84,79449,79450,79452,79454],{"class":86,"line":87},[84,79451,2218],{"class":154},[84,79453,52949],{"class":52449},[84,79455,52456],{"class":154},[84,79457,79458,79460,79462],{"class":86,"line":98},[84,79459,53293],{"class":154},[84,79461,52962],{"class":52449},[84,79463,52456],{"class":154},[84,79465,79466],{"class":86,"line":106},[84,79467,79468],{"class":154},"    const arr = [10, 20, 30]\n",[84,79470,79471],{"class":86,"line":112},[84,79472,79473],{"class":154},"    const newArr = arr.filter(function (item, index) {\n",[84,79475,79476],{"class":86,"line":425},[84,79477,79403],{"class":154},[84,79479,79480],{"class":86,"line":2395},[84,79481,79408],{"class":154},[84,79483,79484],{"class":86,"line":2401},[84,79485,79486],{"class":154},"      return item >= 20\n",[84,79488,79489],{"class":86,"line":2492},[84,79490,34613],{"class":154},[84,79492,79493],{"class":86,"line":2498},[84,79494,79495],{"class":154},"    console.log(newArr)\n",[84,79497,79498,79500,79502],{"class":86,"line":2510},[84,79499,53566],{"class":154},[84,79501,52962],{"class":52449},[84,79503,52456],{"class":154},[84,79505,79506,79508,79510],{"class":86,"line":2793},[84,79507,52934],{"class":154},[84,79509,52949],{"class":52449},[84,79511,52456],{"class":154},[19,79513,79514],{},"这个也可以写成箭头函数：",[60,79516,79518],{"className":51782,"code":79517,"language":51784,"meta":66,"style":66},"const newArr = arr.filter(item => item >= 20)\n",[39,79519,79520],{"__ignoreMap":66},[84,79521,79522],{"class":86,"line":87},[84,79523,79517],{"class":154},[14,79525,79527],{"id":79526},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79529,79530],{},[2643,79531],{"alt":66,"src":79532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79534,79535],{},"步骤：",[19,79537,79538],{},"①：渲染页面模块",[2315,79540,79541,79544],{},[29,79542,79543],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,79545,79546],{},"用forEach+字符串的形式",[19,79548,79549],{},"②：点击不同需求，显示不同页面内容",[2315,79551,79552,79555,79558,79561,79564],{},[29,79553,79554],{},"点击采取事件委托方式 .filter",[29,79556,79557],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,79559,79560],{},"筛选条件是根据点击的 data-index 来判断",[29,79562,79563],{},"可以使用对象解构，把事件对象解构",[29,79565,79566],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[60,79568,79570],{"className":51782,"code":79569,"language":51784,"meta":66,"style":66},"\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",[39,79571,79572,79582,79596,79600,79608,79622,79642,79654,79662,79668,79678,79688,79698,79702,79706,79712,79725,79737,79747,79759,79763,79767,79774,79787,79799,79816,79834,79847,79851,79855,79867,79877,79881,79885,79892,79933,79960,79970,79974,79978,79986,79998,80002,80006,80014,80026,80038,80049,80053,80057,80066,80078,80089,80093,80097,80106,80118,80130,80134,80138,80145,80155,80167,80179,80194,80198,80202,80210,80226,80236,80246,80256,80268,80272,80276,80286,80297,80307,80311,80319,80327,80331,80339,80354,80380,80405,80430,80449,80457,80471,80476,80481,80486,80491,80496,80504,80512,80517,80528,80533,80543,80553,80563,80573,80577,80581,80590,80599,80608,80617,80621,80625,80634,80643,80652,80661,80665,80669,80678,80687,80696,80705,80709,80713,80722,80731,80740,80749,80753,80757,80766,80775,80784,80793,80797,80801,80810,80819,80828,80837,80841,80845,80854,80863,80871,80880,80884,80888,80892,80897,80909,80914,80926,80930,80947,80975,80984,80989,80999,81009,81018,81023,81028,81032,81037,81054,81058,81063,81071,81076,81103,81108,81128,81133,81145,81150,81155,81160,81171,81185,81222,81240,81273,81290,81314,81318,81323,81329,81333,81337,81341,81349,81357,81361],{"__ignoreMap":66},[84,79573,79574,79576,79578,79580],{"class":86,"line":87},[84,79575,52446],{"class":154},[84,79577,52450],{"class":52449},[84,79579,52453],{"class":90},[84,79581,52456],{"class":154},[84,79583,79584,79586,79588,79590,79592,79594],{"class":86,"line":98},[84,79585,2218],{"class":154},[84,79587,51784],{"class":52449},[84,79589,52465],{"class":90},[84,79591,867],{"class":154},[84,79593,52470],{"class":158},[84,79595,52456],{"class":154},[84,79597,79598],{"class":86,"line":106},[84,79599,3578],{"emptyLinePlaceholder":1252},[84,79601,79602,79604,79606],{"class":86,"line":112},[84,79603,2218],{"class":154},[84,79605,52483],{"class":52449},[84,79607,52456],{"class":154},[84,79609,79610,79612,79614,79616,79618,79620],{"class":86,"line":425},[84,79611,53293],{"class":154},[84,79613,52493],{"class":52449},[84,79615,52496],{"class":90},[84,79617,867],{"class":154},[84,79619,52501],{"class":158},[84,79621,52456],{"class":154},[84,79623,79624,79626,79628,79630,79632,79634,79636,79638,79640],{"class":86,"line":2395},[84,79625,53293],{"class":154},[84,79627,52493],{"class":52449},[84,79629,16090],{"class":90},[84,79631,867],{"class":154},[84,79633,52540],{"class":158},[84,79635,52520],{"class":90},[84,79637,867],{"class":154},[84,79639,52547],{"class":158},[84,79641,52456],{"class":154},[84,79643,79644,79646,79648,79650,79652],{"class":86,"line":2401},[84,79645,53293],{"class":154},[84,79647,52556],{"class":52449},[84,79649,52559],{"class":154},[84,79651,52556],{"class":52449},[84,79653,52456],{"class":154},[84,79655,79656,79658,79660],{"class":86,"line":2492},[84,79657,53293],{"class":154},[84,79659,1222],{"class":52449},[84,79661,52456],{"class":154},[84,79663,79664,79666],{"class":86,"line":2498},[84,79665,7576],{"class":52449},[84,79667,16742],{"class":154},[84,79669,79670,79672,79674,79676],{"class":86,"line":2510},[84,79671,55842],{"class":94},[84,79673,52586],{"class":154},[84,79675,1504],{"class":94},[84,79677,2471],{"class":154},[84,79679,79680,79682,79684,79686],{"class":86,"line":2793},[84,79681,55853],{"class":94},[84,79683,52586],{"class":154},[84,79685,1504],{"class":94},[84,79687,2471],{"class":154},[84,79689,79690,79692,79694,79696],{"class":86,"line":2798},[84,79691,73742],{"class":94},[84,79693,52586],{"class":154},[84,79695,61651],{"class":94},[84,79697,2471],{"class":154},[84,79699,79700],{"class":86,"line":2804},[84,79701,3365],{"class":154},[84,79703,79704],{"class":86,"line":2809},[84,79705,3578],{"emptyLinePlaceholder":1252},[84,79707,79708,79710],{"class":86,"line":2823},[84,79709,63269],{"class":90},[84,79711,16742],{"class":154},[84,79713,79714,79716,79718,79721,79723],{"class":86,"line":2828},[84,79715,55918],{"class":94},[84,79717,52586],{"class":154},[84,79719,79720],{"class":94},"990",[84,79722,52641],{"class":129},[84,79724,2471],{"class":154},[84,79726,79727,79729,79731,79733,79735],{"class":86,"line":2834},[84,79728,55853],{"class":94},[84,79730,52586],{"class":154},[84,79732,1504],{"class":94},[84,79734,52705],{"class":94},[84,79736,2471],{"class":154},[84,79738,79739,79741,79743,79745],{"class":86,"line":2855},[84,79740,56156],{"class":94},[84,79742,52586],{"class":154},[84,79744,52626],{"class":94},[84,79746,2471],{"class":154},[84,79748,79749,79752,79754,79757],{"class":86,"line":2860},[84,79750,79751],{"class":94},"      flex-wrap",[84,79753,52586],{"class":154},[84,79755,79756],{"class":94},"wrap",[84,79758,2471],{"class":154},[84,79760,79761],{"class":86,"line":2874},[84,79762,3365],{"class":154},[84,79764,79765],{"class":86,"line":2879},[84,79766,3578],{"emptyLinePlaceholder":1252},[84,79768,79769,79772],{"class":86,"line":2908},[84,79770,79771],{"class":90},"    .item",[84,79773,16742],{"class":154},[84,79775,79776,79778,79780,79783,79785],{"class":86,"line":2913},[84,79777,55918],{"class":94},[84,79779,52586],{"class":154},[84,79781,79782],{"class":94},"240",[84,79784,52641],{"class":129},[84,79786,2471],{"class":154},[84,79788,79789,79791,79793,79795,79797],{"class":86,"line":2930},[84,79790,63146],{"class":94},[84,79792,52586],{"class":154},[84,79794,1756],{"class":94},[84,79796,52641],{"class":129},[84,79798,2471],{"class":154},[84,79800,79801,79803,79805,79807,79809,79812,79814],{"class":86,"line":2935},[84,79802,55842],{"class":94},[84,79804,52586],{"class":154},[84,79806,2008],{"class":94},[84,79808,52641],{"class":129},[84,79810,79811],{"class":94}," 30",[84,79813,52641],{"class":129},[84,79815,2471],{"class":154},[84,79817,79818,79820,79822,79824,79827,79830,79832],{"class":86,"line":2940},[84,79819,63006],{"class":94},[84,79821,52586],{"class":154},[84,79823,29279],{"class":94},[84,79825,79826],{"class":94}," ease",[84,79828,79829],{"class":94}," .5",[84,79831,2003],{"class":129},[84,79833,2471],{"class":154},[84,79835,79836,79839,79841,79843,79845],{"class":86,"line":2945},[84,79837,79838],{"class":94},"      margin-bottom",[84,79840,52586],{"class":154},[84,79842,2008],{"class":94},[84,79844,52641],{"class":129},[84,79846,2471],{"class":154},[84,79848,79849],{"class":86,"line":2959},[84,79850,3365],{"class":154},[84,79852,79853],{"class":86,"line":2964},[84,79854,3578],{"emptyLinePlaceholder":1252},[84,79856,79857,79860,79862,79865],{"class":86,"line":3755},[84,79858,79859],{"class":90},"    .item:nth-child",[84,79861,155],{"class":154},[84,79863,79864],{"class":94},"4n",[84,79866,13613],{"class":154},[84,79868,79869,79871,79873,79875],{"class":86,"line":3769},[84,79870,63146],{"class":94},[84,79872,52586],{"class":154},[84,79874,1504],{"class":94},[84,79876,2471],{"class":154},[84,79878,79879],{"class":86,"line":3777},[84,79880,3365],{"class":154},[84,79882,79883],{"class":86,"line":3782},[84,79884,3578],{"emptyLinePlaceholder":1252},[84,79886,79887,79890],{"class":86,"line":3788},[84,79888,79889],{"class":90},"    .item:hover",[84,79891,16742],{"class":154},[84,79893,79894,79897,79899,79901,79903,79905,79907,79909,79911,79914,79916,79918,79920,79922,79924,79926,79928,79931],{"class":86,"line":3794},[84,79895,79896],{"class":94},"      box-shadow",[84,79898,52586],{"class":154},[84,79900,1504],{"class":94},[84,79902,52641],{"class":129},[84,79904,5271],{"class":94},[84,79906,52641],{"class":129},[84,79908,3326],{"class":94},[84,79910,52641],{"class":129},[84,79912,79913],{"class":94}," rgba",[84,79915,155],{"class":154},[84,79917,1504],{"class":94},[84,79919,846],{"class":154},[84,79921,1504],{"class":94},[84,79923,846],{"class":154},[84,79925,1504],{"class":94},[84,79927,846],{"class":154},[84,79929,79930],{"class":94},".2",[84,79932,3897],{"class":154},[84,79934,79935,79938,79940,79943,79945,79947,79949,79952,79954,79956,79958],{"class":86,"line":3799},[84,79936,79937],{"class":94},"      transform",[84,79939,52586],{"class":154},[84,79941,79942],{"class":94},"translate3d",[84,79944,155],{"class":154},[84,79946,1504],{"class":94},[84,79948,846],{"class":154},[84,79950,79951],{"class":94},"-4",[84,79953,52641],{"class":129},[84,79955,846],{"class":154},[84,79957,1504],{"class":94},[84,79959,3897],{"class":154},[84,79961,79962,79964,79966,79968],{"class":86,"line":9120},[84,79963,63171],{"class":94},[84,79965,52586],{"class":154},[84,79967,63176],{"class":94},[84,79969,2471],{"class":154},[84,79971,79972],{"class":86,"line":9144},[84,79973,3365],{"class":154},[84,79975,79976],{"class":86,"line":9149},[84,79977,3578],{"emptyLinePlaceholder":1252},[84,79979,79980,79982,79984],{"class":86,"line":9155},[84,79981,79771],{"class":90},[84,79983,56762],{"class":52449},[84,79985,16742],{"class":154},[84,79987,79988,79990,79992,79994,79996],{"class":86,"line":9182},[84,79989,55918],{"class":94},[84,79991,52586],{"class":154},[84,79993,821],{"class":94},[84,79995,1638],{"class":129},[84,79997,2471],{"class":154},[84,79999,80000],{"class":86,"line":9187},[84,80001,3365],{"class":154},[84,80003,80004],{"class":86,"line":9193},[84,80005,3578],{"emptyLinePlaceholder":1252},[84,80007,80008,80010,80012],{"class":86,"line":9205},[84,80009,79771],{"class":90},[84,80011,63450],{"class":90},[84,80013,16742],{"class":154},[84,80015,80016,80018,80020,80022,80024],{"class":86,"line":9217},[84,80017,56069],{"class":94},[84,80019,52586],{"class":154},[84,80021,849],{"class":94},[84,80023,52641],{"class":129},[84,80025,2471],{"class":154},[84,80027,80028,80030,80032,80034,80036],{"class":86,"line":9229},[84,80029,79838],{"class":94},[84,80031,52586],{"class":154},[84,80033,1756],{"class":94},[84,80035,52641],{"class":129},[84,80037,2471],{"class":154},[84,80039,80040,80042,80044,80047],{"class":86,"line":10888},[84,80041,58563],{"class":94},[84,80043,52586],{"class":154},[84,80045,80046],{"class":94},"#666",[84,80048,2471],{"class":154},[84,80050,80051],{"class":86,"line":10913},[84,80052,3365],{"class":154},[84,80054,80055],{"class":86,"line":10936},[84,80056,3578],{"emptyLinePlaceholder":1252},[84,80058,80059,80061,80064],{"class":86,"line":10960},[84,80060,79771],{"class":90},[84,80062,80063],{"class":90}," .price",[84,80065,16742],{"class":154},[84,80067,80068,80070,80072,80074,80076],{"class":86,"line":10965},[84,80069,56069],{"class":94},[84,80071,52586],{"class":154},[84,80073,2058],{"class":94},[84,80075,52641],{"class":129},[84,80077,2471],{"class":154},[84,80079,80080,80082,80084,80087],{"class":86,"line":10970},[84,80081,58563],{"class":94},[84,80083,52586],{"class":154},[84,80085,80086],{"class":94},"firebrick",[84,80088,2471],{"class":154},[84,80090,80091],{"class":86,"line":10975},[84,80092,3365],{"class":154},[84,80094,80095],{"class":86,"line":10984},[84,80096,3578],{"emptyLinePlaceholder":1252},[84,80098,80099,80101,80104],{"class":86,"line":10989},[84,80100,79771],{"class":90},[84,80102,80103],{"class":90}," .price::before",[84,80105,16742],{"class":154},[84,80107,80108,80111,80113,80116],{"class":86,"line":10995},[84,80109,80110],{"class":94},"      content",[84,80112,52586],{"class":154},[84,80114,80115],{"class":158},"'￥'",[84,80117,2471],{"class":154},[84,80119,80120,80122,80124,80126,80128],{"class":86,"line":11016},[84,80121,56069],{"class":94},[84,80123,52586],{"class":154},[84,80125,1858],{"class":94},[84,80127,52641],{"class":129},[84,80129,2471],{"class":154},[84,80131,80132],{"class":86,"line":11022},[84,80133,3365],{"class":154},[84,80135,80136],{"class":86,"line":11036},[84,80137,3578],{"emptyLinePlaceholder":1252},[84,80139,80140,80143],{"class":86,"line":11042},[84,80141,80142],{"class":90},"    .filter",[84,80144,16742],{"class":154},[84,80146,80147,80149,80151,80153],{"class":86,"line":11069},[84,80148,56156],{"class":94},[84,80150,52586],{"class":154},[84,80152,52626],{"class":94},[84,80154,2471],{"class":154},[84,80156,80157,80159,80161,80163,80165],{"class":86,"line":11078},[84,80158,55918],{"class":94},[84,80160,52586],{"class":154},[84,80162,79720],{"class":94},[84,80164,52641],{"class":129},[84,80166,2471],{"class":154},[84,80168,80169,80171,80173,80175,80177],{"class":86,"line":11084},[84,80170,55853],{"class":94},[84,80172,52586],{"class":154},[84,80174,1504],{"class":94},[84,80176,52705],{"class":94},[84,80178,2471],{"class":154},[84,80180,80181,80183,80185,80187,80189,80191],{"class":86,"line":11092},[84,80182,55842],{"class":94},[84,80184,52586],{"class":154},[84,80186,1964],{"class":94},[84,80188,52641],{"class":129},[84,80190,79811],{"class":94},[84,80192,80193],{"class":129},"px\n",[84,80195,80196],{"class":86,"line":11097},[84,80197,3365],{"class":154},[84,80199,80200],{"class":86,"line":17774},[84,80201,3578],{"emptyLinePlaceholder":1252},[84,80203,80204,80206,80208],{"class":86,"line":17780},[84,80205,80142],{"class":90},[84,80207,2579],{"class":52449},[84,80209,16742],{"class":154},[84,80211,80212,80214,80216,80218,80220,80222,80224],{"class":86,"line":17803},[84,80213,55842],{"class":94},[84,80215,52586],{"class":154},[84,80217,1756],{"class":94},[84,80219,52641],{"class":129},[84,80221,10122],{"class":94},[84,80223,52641],{"class":129},[84,80225,2471],{"class":154},[84,80227,80228,80230,80232,80234],{"class":86,"line":17809},[84,80229,62867],{"class":94},[84,80231,52586],{"class":154},[84,80233,62964],{"class":94},[84,80235,2471],{"class":154},[84,80237,80238,80240,80242,80244],{"class":86,"line":17832},[84,80239,58563],{"class":94},[84,80241,52586],{"class":154},[84,80243,80046],{"class":94},[84,80245,2471],{"class":154},[84,80247,80248,80250,80252,80254],{"class":86,"line":17846},[84,80249,65116],{"class":94},[84,80251,52586],{"class":154},[84,80253,55884],{"class":94},[84,80255,2471],{"class":154},[84,80257,80258,80260,80262,80264,80266],{"class":86,"line":17866},[84,80259,62896],{"class":94},[84,80261,52586],{"class":154},[84,80263,2008],{"class":94},[84,80265,52641],{"class":129},[84,80267,2471],{"class":154},[84,80269,80270],{"class":86,"line":17872},[84,80271,3365],{"class":154},[84,80273,80274],{"class":86,"line":17883},[84,80275,3578],{"emptyLinePlaceholder":1252},[84,80277,80278,80280,80282,80284],{"class":86,"line":17906},[84,80279,80142],{"class":90},[84,80281,2579],{"class":52449},[84,80283,63046],{"class":90},[84,80285,16742],{"class":154},[84,80287,80288,80290,80292,80295],{"class":86,"line":17928},[84,80289,56031],{"class":94},[84,80291,52586],{"class":154},[84,80293,80294],{"class":94},"#05943c",[84,80296,2471],{"class":154},[84,80298,80299,80301,80303,80305],{"class":86,"line":17933},[84,80300,58563],{"class":94},[84,80302,52586],{"class":154},[84,80304,61988],{"class":94},[84,80306,2471],{"class":154},[84,80308,80309],{"class":86,"line":17939},[84,80310,3365],{"class":154},[84,80312,80313,80315,80317],{"class":86,"line":17953},[84,80314,53566],{"class":154},[84,80316,1222],{"class":52449},[84,80318,52456],{"class":154},[84,80320,80321,80323,80325],{"class":86,"line":17966},[84,80322,52934],{"class":154},[84,80324,52483],{"class":52449},[84,80326,52456],{"class":154},[84,80328,80329],{"class":86,"line":17971},[84,80330,3578],{"emptyLinePlaceholder":1252},[84,80332,80333,80335,80337],{"class":86,"line":17985},[84,80334,2218],{"class":154},[84,80336,52949],{"class":52449},[84,80338,52456],{"class":154},[84,80340,80341,80343,80345,80347,80349,80352],{"class":86,"line":17990},[84,80342,53293],{"class":154},[84,80344,52760],{"class":52449},[84,80346,54635],{"class":90},[84,80348,867],{"class":154},[84,80350,80351],{"class":158},"\"filter\"",[84,80353,52456],{"class":154},[84,80355,80356,80358,80360,80362,80364,80366,80369,80371,80373,80376,80378],{"class":86,"line":17996},[84,80357,52490],{"class":154},[84,80359,208],{"class":52449},[84,80361,62203],{"class":90},[84,80363,867],{"class":154},[84,80365,62208],{"class":158},[84,80367,80368],{"class":90}," data-index",[84,80370,867],{"class":154},[84,80372,4856],{"class":158},[84,80374,80375],{"class":154},">0-100元\u003C\u002F",[84,80377,208],{"class":52449},[84,80379,52456],{"class":154},[84,80381,80382,80384,80386,80388,80390,80392,80394,80396,80398,80401,80403],{"class":86,"line":18001},[84,80383,52490],{"class":154},[84,80385,208],{"class":52449},[84,80387,62203],{"class":90},[84,80389,867],{"class":154},[84,80391,62208],{"class":158},[84,80393,80368],{"class":90},[84,80395,867],{"class":154},[84,80397,4879],{"class":158},[84,80399,80400],{"class":154},">100-300元\u003C\u002F",[84,80402,208],{"class":52449},[84,80404,52456],{"class":154},[84,80406,80407,80409,80411,80413,80415,80417,80419,80421,80423,80426,80428],{"class":86,"line":18015},[84,80408,52490],{"class":154},[84,80410,208],{"class":52449},[84,80412,62203],{"class":90},[84,80414,867],{"class":154},[84,80416,62208],{"class":158},[84,80418,80368],{"class":90},[84,80420,867],{"class":154},[84,80422,4892],{"class":158},[84,80424,80425],{"class":154},">300元以上\u003C\u002F",[84,80427,208],{"class":52449},[84,80429,52456],{"class":154},[84,80431,80432,80434,80436,80438,80440,80442,80445,80447],{"class":86,"line":18020},[84,80433,52490],{"class":154},[84,80435,208],{"class":52449},[84,80437,62203],{"class":90},[84,80439,867],{"class":154},[84,80441,62208],{"class":158},[84,80443,80444],{"class":154},">全部区间\u003C\u002F",[84,80446,208],{"class":52449},[84,80448,52456],{"class":154},[84,80450,80451,80453,80455],{"class":86,"line":18025},[84,80452,53566],{"class":154},[84,80454,52760],{"class":52449},[84,80456,52456],{"class":154},[84,80458,80459,80461,80463,80465,80467,80469],{"class":86,"line":18039},[84,80460,53293],{"class":154},[84,80462,52760],{"class":52449},[84,80464,54635],{"class":90},[84,80466,867],{"class":154},[84,80468,63754],{"class":158},[84,80470,52456],{"class":154},[84,80472,80473],{"class":86,"line":18051},[84,80474,80475],{"class":1378},"    \u003C!-- \u003Cdiv class=\"item\">\n",[84,80477,80478],{"class":86,"line":18056},[84,80479,80480],{"class":1378},"      \u003Cimg src=\"\" alt=\"\">\n",[84,80482,80483],{"class":86,"line":18069},[84,80484,80485],{"class":1378},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[84,80487,80488],{"class":86,"line":18074},[84,80489,80490],{"class":1378},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[84,80492,80493],{"class":86,"line":18079},[84,80494,80495],{"class":1378},"    \u003C\u002Fdiv> -->\n",[84,80497,80498,80500,80502],{"class":86,"line":18084},[84,80499,53566],{"class":154},[84,80501,52760],{"class":52449},[84,80503,52456],{"class":154},[84,80505,80506,80508,80510],{"class":86,"line":18097},[84,80507,53293],{"class":154},[84,80509,52962],{"class":52449},[84,80511,52456],{"class":154},[84,80513,80514],{"class":86,"line":18102},[84,80515,80516],{"class":1378},"    \u002F\u002F 2. 初始化数据\n",[84,80518,80519,80521,80524,80526],{"class":86,"line":33785},[84,80520,12393],{"class":129},[84,80522,80523],{"class":94}," goodsList",[84,80525,14735],{"class":129},[84,80527,56594],{"class":154},[84,80529,80530],{"class":86,"line":33791},[84,80531,80532],{"class":154},"      {\n",[84,80534,80535,80538,80541],{"class":86,"line":33797},[84,80536,80537],{"class":154},"        id: ",[84,80539,80540],{"class":158},"'4001172'",[84,80542,32619],{"class":154},[84,80544,80545,80548,80551],{"class":86,"line":33803},[84,80546,80547],{"class":154},"        name: ",[84,80549,80550],{"class":158},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[84,80552,32619],{"class":154},[84,80554,80555,80558,80561],{"class":86,"line":33809},[84,80556,80557],{"class":154},"        price: ",[84,80559,80560],{"class":158},"'289.00'",[84,80562,32619],{"class":154},[84,80564,80565,80568,80571],{"class":86,"line":33820},[84,80566,80567],{"class":154},"        picture: ",[84,80569,80570],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[84,80572,32619],{"class":154},[84,80574,80575],{"class":86,"line":33826},[84,80576,79038],{"class":154},[84,80578,80579],{"class":86,"line":33846},[84,80580,80532],{"class":154},[84,80582,80583,80585,80588],{"class":86,"line":33852},[84,80584,80537],{"class":154},[84,80586,80587],{"class":158},"'4001594'",[84,80589,32619],{"class":154},[84,80591,80592,80594,80597],{"class":86,"line":33863},[84,80593,80547],{"class":154},[84,80595,80596],{"class":158},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[84,80598,32619],{"class":154},[84,80600,80601,80603,80606],{"class":86,"line":33869},[84,80602,80557],{"class":154},[84,80604,80605],{"class":158},"'288.00'",[84,80607,32619],{"class":154},[84,80609,80610,80612,80615],{"class":86,"line":33875},[84,80611,80567],{"class":154},[84,80613,80614],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[84,80616,32619],{"class":154},[84,80618,80619],{"class":86,"line":33881},[84,80620,79038],{"class":154},[84,80622,80623],{"class":86,"line":33887},[84,80624,80532],{"class":154},[84,80626,80627,80629,80632],{"class":86,"line":33893},[84,80628,80537],{"class":154},[84,80630,80631],{"class":158},"'4001009'",[84,80633,32619],{"class":154},[84,80635,80636,80638,80641],{"class":86,"line":33899},[84,80637,80547],{"class":154},[84,80639,80640],{"class":158},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[84,80642,32619],{"class":154},[84,80644,80645,80647,80650],{"class":86,"line":33905},[84,80646,80557],{"class":154},[84,80648,80649],{"class":158},"'109.00'",[84,80651,32619],{"class":154},[84,80653,80654,80656,80659],{"class":86,"line":33925},[84,80655,80567],{"class":154},[84,80657,80658],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[84,80660,32619],{"class":154},[84,80662,80663],{"class":86,"line":33931},[84,80664,79038],{"class":154},[84,80666,80667],{"class":86,"line":33947},[84,80668,80532],{"class":154},[84,80670,80671,80673,80676],{"class":86,"line":33953},[84,80672,80537],{"class":154},[84,80674,80675],{"class":158},"'4001874'",[84,80677,32619],{"class":154},[84,80679,80680,80682,80685],{"class":86,"line":33967},[84,80681,80547],{"class":154},[84,80683,80684],{"class":158},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[84,80686,32619],{"class":154},[84,80688,80689,80691,80694],{"class":86,"line":33973},[84,80690,80557],{"class":154},[84,80692,80693],{"class":158},"'488.00'",[84,80695,32619],{"class":154},[84,80697,80698,80700,80703],{"class":86,"line":33988},[84,80699,80567],{"class":154},[84,80701,80702],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[84,80704,32619],{"class":154},[84,80706,80707],{"class":86,"line":33994},[84,80708,79038],{"class":154},[84,80710,80711],{"class":86,"line":34003},[84,80712,80532],{"class":154},[84,80714,80715,80717,80720],{"class":86,"line":34009},[84,80716,80537],{"class":154},[84,80718,80719],{"class":158},"'4001649'",[84,80721,32619],{"class":154},[84,80723,80724,80726,80729],{"class":86,"line":34018},[84,80725,80547],{"class":154},[84,80727,80728],{"class":158},"'大师监制龙泉青瓷茶叶罐'",[84,80730,32619],{"class":154},[84,80732,80733,80735,80738],{"class":86,"line":34024},[84,80734,80557],{"class":154},[84,80736,80737],{"class":158},"'139.00'",[84,80739,32619],{"class":154},[84,80741,80742,80744,80747],{"class":86,"line":34030},[84,80743,80567],{"class":154},[84,80745,80746],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[84,80748,32619],{"class":154},[84,80750,80751],{"class":86,"line":34039},[84,80752,79038],{"class":154},[84,80754,80755],{"class":86,"line":34045},[84,80756,80532],{"class":154},[84,80758,80759,80761,80764],{"class":86,"line":34056},[84,80760,80537],{"class":154},[84,80762,80763],{"class":158},"'3997185'",[84,80765,32619],{"class":154},[84,80767,80768,80770,80773],{"class":86,"line":34062},[84,80769,80547],{"class":154},[84,80771,80772],{"class":158},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[84,80774,32619],{"class":154},[84,80776,80777,80779,80782],{"class":86,"line":34081},[84,80778,80557],{"class":154},[84,80780,80781],{"class":158},"'108.00'",[84,80783,32619],{"class":154},[84,80785,80786,80788,80791],{"class":86,"line":34087},[84,80787,80567],{"class":154},[84,80789,80790],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[84,80792,32619],{"class":154},[84,80794,80795],{"class":86,"line":34098},[84,80796,79038],{"class":154},[84,80798,80799],{"class":86,"line":34104},[84,80800,80532],{"class":154},[84,80802,80803,80805,80808],{"class":86,"line":34124},[84,80804,80537],{"class":154},[84,80806,80807],{"class":158},"'3997403'",[84,80809,32619],{"class":154},[84,80811,80812,80814,80817],{"class":86,"line":34140},[84,80813,80547],{"class":154},[84,80815,80816],{"class":158},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[84,80818,32619],{"class":154},[84,80820,80821,80823,80826],{"class":86,"line":34146},[84,80822,80557],{"class":154},[84,80824,80825],{"class":158},"'100.00'",[84,80827,32619],{"class":154},[84,80829,80830,80832,80835],{"class":86,"line":34160},[84,80831,80567],{"class":154},[84,80833,80834],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[84,80836,32619],{"class":154},[84,80838,80839],{"class":86,"line":34166},[84,80840,79038],{"class":154},[84,80842,80843],{"class":86,"line":34172},[84,80844,80532],{"class":154},[84,80846,80847,80849,80852],{"class":86,"line":34183},[84,80848,80537],{"class":154},[84,80850,80851],{"class":158},"'3998274'",[84,80853,32619],{"class":154},[84,80855,80856,80858,80861],{"class":86,"line":34189},[84,80857,80547],{"class":154},[84,80859,80860],{"class":158},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[84,80862,32619],{"class":154},[84,80864,80865,80867,80869],{"class":86,"line":34195},[84,80866,80557],{"class":154},[84,80868,80737],{"class":158},[84,80870,32619],{"class":154},[84,80872,80873,80875,80878],{"class":86,"line":34205},[84,80874,80567],{"class":154},[84,80876,80877],{"class":158},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[84,80879,32619],{"class":154},[84,80881,80882],{"class":86,"line":34211},[84,80883,79038],{"class":154},[84,80885,80886],{"class":86,"line":34222},[84,80887,54258],{"class":154},[84,80889,80890],{"class":86,"line":34228},[84,80891,3578],{"emptyLinePlaceholder":1252},[84,80893,80894],{"class":86,"line":34238},[84,80895,80896],{"class":1378},"    \u002F\u002F 1.渲染函数\n",[84,80898,80899,80901,80903,80905,80907],{"class":86,"line":34243},[84,80900,71230],{"class":129},[84,80902,71233],{"class":90},[84,80904,155],{"class":154},[84,80906,5058],{"class":928},[84,80908,13613],{"class":154},[84,80910,80911],{"class":86,"line":34249},[84,80912,80913],{"class":1378},"      \u002F\u002F 声明空字符串\n",[84,80915,80916,80919,80922,80924],{"class":86,"line":34298},[84,80917,80918],{"class":129},"      let",[84,80920,80921],{"class":154}," str ",[84,80923,867],{"class":129},[84,80925,71250],{"class":158},[84,80927,80928],{"class":86,"line":34345},[84,80929,71255],{"class":1378},[84,80931,80932,80934,80937,80939,80942,80945],{"class":86,"line":34350},[84,80933,59153],{"class":154},[84,80935,80936],{"class":90},"forEach",[84,80938,155],{"class":154},[84,80940,80941],{"class":928},"item",[84,80943,80944],{"class":129}," =>",[84,80946,16742],{"class":154},[84,80948,80949,80951,80954,80957,80959,80962,80964,80967,80970,80972],{"class":86,"line":34356},[84,80950,62416],{"class":129},[84,80952,80953],{"class":154}," { ",[84,80955,80956],{"class":94},"name",[84,80958,846],{"class":154},[84,80960,80961],{"class":94},"price",[84,80963,846],{"class":154},[84,80965,80966],{"class":94},"picture",[84,80968,80969],{"class":154}," } ",[84,80971,867],{"class":129},[84,80973,80974],{"class":154}," item\n",[84,80976,80977,80980,80982],{"class":86,"line":34375},[84,80978,80979],{"class":154},"        str ",[84,80981,10649],{"class":129},[84,80983,71314],{"class":158},[84,80985,80986],{"class":86,"line":34381},[84,80987,80988],{"class":158},"          \u003Cdiv class=\"item\">\n",[84,80990,80991,80994,80996],{"class":86,"line":34401},[84,80992,80993],{"class":158},"            \u003Cimg src=\"${",[84,80995,80966],{"class":154},[84,80997,80998],{"class":158},"}\" alt=\"\">\n",[84,81000,81001,81004,81006],{"class":86,"line":34407},[84,81002,81003],{"class":158},"            \u003Cp class=\"name\">${",[84,81005,80956],{"class":154},[84,81007,81008],{"class":158},"}\u003C\u002Fp>\n",[84,81010,81011,81014,81016],{"class":86,"line":34413},[84,81012,81013],{"class":158},"            \u003Cp class=\"price\">${",[84,81015,80961],{"class":154},[84,81017,81008],{"class":158},[84,81019,81020],{"class":86,"line":34423},[84,81021,81022],{"class":158},"          \u003C\u002Fdiv>\n",[84,81024,81025],{"class":86,"line":34428},[84,81026,81027],{"class":158},"        `\n",[84,81029,81030],{"class":86,"line":34434},[84,81031,65961],{"class":154},[84,81033,81034],{"class":86,"line":34450},[84,81035,81036],{"class":1378},"      \u002F\u002F 追加给List\n",[84,81038,81039,81041,81043,81045,81048,81050,81052],{"class":86,"line":34495},[84,81040,56918],{"class":154},[84,81042,55547],{"class":90},[84,81044,155],{"class":154},[84,81046,81047],{"class":158},"'.list'",[84,81049,75395],{"class":154},[84,81051,867],{"class":129},[84,81053,75131],{"class":154},[84,81055,81056],{"class":86,"line":34501},[84,81057,3365],{"class":154},[84,81059,81060],{"class":86,"line":34507},[84,81061,81062],{"class":1378},"    \u002F\u002F 页面一打开就需要渲染\n",[84,81064,81065,81068],{"class":86,"line":34513},[84,81066,81067],{"class":90},"    render",[84,81069,81070],{"class":154},"(goodsList)\n",[84,81072,81073],{"class":86,"line":34524},[84,81074,81075],{"class":1378},"    \u002F\u002F 2.过滤筛选\n",[84,81077,81078,81080,81082,81084,81087,81089,81091,81093,81095,81097,81099,81101],{"class":86,"line":34530},[84,81079,53556],{"class":154},[84,81081,55547],{"class":90},[84,81083,155],{"class":154},[84,81085,81086],{"class":158},"'.filter'",[84,81088,31980],{"class":154},[84,81090,58960],{"class":90},[84,81092,155],{"class":154},[84,81094,58965],{"class":158},[84,81096,846],{"class":154},[84,81098,1394],{"class":928},[84,81100,80944],{"class":129},[84,81102,16742],{"class":154},[84,81104,81105],{"class":86,"line":34536},[84,81106,81107],{"class":1378},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[84,81109,81110,81112,81114,81117,81119,81121,81123,81125],{"class":86,"line":34542},[84,81111,59374],{"class":129},[84,81113,80953],{"class":154},[84,81115,81116],{"class":94},"tagName",[84,81118,846],{"class":154},[84,81120,32690],{"class":94},[84,81122,80969],{"class":154},[84,81124,867],{"class":129},[84,81126,81127],{"class":154}," e.target\n",[84,81129,81130],{"class":86,"line":34560},[84,81131,81132],{"class":1378},"      \u002F\u002F 判断\n",[84,81134,81135,81137,81139,81141,81143],{"class":86,"line":34574},[84,81136,55627],{"class":129},[84,81138,68180],{"class":154},[84,81140,55633],{"class":129},[84,81142,69402],{"class":158},[84,81144,13613],{"class":154},[84,81146,81147],{"class":86,"line":34583},[84,81148,81149],{"class":1378},"        \u002F\u002F console.log(11)\n",[84,81151,81152],{"class":86,"line":34592},[84,81153,81154],{"class":1378},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[84,81156,81157],{"class":86,"line":34601},[84,81158,81159],{"class":1378},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[84,81161,81162,81164,81166,81168],{"class":86,"line":34610},[84,81163,52979],{"class":129},[84,81165,52982],{"class":154},[84,81167,867],{"class":129},[84,81169,81170],{"class":154}," goodsList\n",[84,81172,81173,81175,81178,81180,81183],{"class":86,"line":34616},[84,81174,3675],{"class":129},[84,81176,81177],{"class":154}," (dataset.index ",[84,81179,55633],{"class":129},[84,81181,81182],{"class":158}," '1'",[84,81184,13613],{"class":154},[84,81186,81187,81190,81192,81195,81198,81200,81202,81204,81207,81209,81211,81214,81216,81218,81220],{"class":86,"line":34622},[84,81188,81189],{"class":154},"          arr ",[84,81191,867],{"class":129},[84,81193,81194],{"class":154}," goodsList.",[84,81196,81197],{"class":90},"filter",[84,81199,155],{"class":154},[84,81201,80941],{"class":928},[84,81203,80944],{"class":129},[84,81205,81206],{"class":154}," item.price ",[84,81208,2891],{"class":129},[84,81210,5271],{"class":94},[84,81212,81213],{"class":129}," &&",[84,81215,81206],{"class":154},[84,81217,2769],{"class":129},[84,81219,6928],{"class":94},[84,81221,162],{"class":154},[84,81223,81224,81227,81229,81231,81233,81235,81238],{"class":86,"line":34630},[84,81225,81226],{"class":154},"        } ",[84,81228,2882],{"class":129},[84,81230,2885],{"class":129},[84,81232,81177],{"class":154},[84,81234,55633],{"class":129},[84,81236,81237],{"class":158}," '2'",[84,81239,13613],{"class":154},[84,81241,81242,81244,81246,81248,81250,81252,81254,81256,81258,81260,81262,81264,81266,81268,81271],{"class":86,"line":34635},[84,81243,81189],{"class":154},[84,81245,867],{"class":129},[84,81247,81194],{"class":154},[84,81249,81197],{"class":90},[84,81251,155],{"class":154},[84,81253,80941],{"class":928},[84,81255,80944],{"class":129},[84,81257,81206],{"class":154},[84,81259,2891],{"class":129},[84,81261,6928],{"class":94},[84,81263,81213],{"class":129},[84,81265,81206],{"class":154},[84,81267,2769],{"class":129},[84,81269,81270],{"class":94}," 300",[84,81272,162],{"class":154},[84,81274,81275,81277,81279,81281,81283,81285,81288],{"class":86,"line":34641},[84,81276,81226],{"class":154},[84,81278,2882],{"class":129},[84,81280,2885],{"class":129},[84,81282,81177],{"class":154},[84,81284,55633],{"class":129},[84,81286,81287],{"class":158}," '3'",[84,81289,13613],{"class":154},[84,81291,81292,81294,81296,81298,81300,81302,81304,81306,81308,81310,81312],{"class":86,"line":34652},[84,81293,81189],{"class":154},[84,81295,867],{"class":129},[84,81297,81194],{"class":154},[84,81299,81197],{"class":90},[84,81301,155],{"class":154},[84,81303,80941],{"class":928},[84,81305,80944],{"class":129},[84,81307,81206],{"class":154},[84,81309,2891],{"class":129},[84,81311,81270],{"class":94},[84,81313,162],{"class":154},[84,81315,81316],{"class":86,"line":34658},[84,81317,3707],{"class":154},[84,81319,81320],{"class":86,"line":34678},[84,81321,81322],{"class":1378},"        \u002F\u002F 渲染函数\n",[84,81324,81325,81327],{"class":86,"line":34684},[84,81326,71554],{"class":90},[84,81328,53561],{"class":154},[84,81330,81331],{"class":86,"line":34690},[84,81332,53547],{"class":154},[84,81334,81335],{"class":86,"line":34696},[84,81336,3578],{"emptyLinePlaceholder":1252},[84,81338,81339],{"class":86,"line":34713},[84,81340,34613],{"class":154},[84,81342,81343,81345,81347],{"class":86,"line":34719},[84,81344,53566],{"class":154},[84,81346,52962],{"class":52449},[84,81348,52456],{"class":154},[84,81350,81351,81353,81355],{"class":86,"line":34725},[84,81352,52934],{"class":154},[84,81354,52949],{"class":52449},[84,81356,52456],{"class":154},[84,81358,81359],{"class":86,"line":34731},[84,81360,3578],{"emptyLinePlaceholder":1252},[84,81362,81363,81365,81367],{"class":86,"line":34737},[84,81364,52934],{"class":154},[84,81366,51784],{"class":52449},[84,81368,52456],{"class":154},[14,81370,81372],{"id":81371},"_410-深入了解对象","4.10 深入了解对象",[198,81374,81376],{"id":81375},"_4101-创建对象","4.10.1 创建对象",[19,81378,81379],{},[2643,81380],{"alt":66,"src":81381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81383,81384],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[198,81386,81388],{"id":81387},"_4102-构造函数","4.10.2 构造函数",[19,81390,81391,81394],{},[1464,81392,81393],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81396,81397,81400],{},[1464,81398,81399],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[60,81402,81404],{"className":51782,"code":81403,"language":51784,"meta":66,"style":66},"\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",[39,81405,81406,81414,81419,81440,81453,81465,81477,81481,81486,81513,81518,81545],{"__ignoreMap":66},[84,81407,81408,81410,81412],{"class":86,"line":87},[84,81409,2218],{"class":154},[84,81411,52962],{"class":52449},[84,81413,52456],{"class":154},[84,81415,81416],{"class":86,"line":98},[84,81417,81418],{"class":1378},"\u002F\u002F例：\n",[84,81420,81421,81423,81426,81428,81430,81432,81434,81436,81438],{"class":86,"line":106},[84,81422,55596],{"class":129},[84,81424,81425],{"class":90}," Pig",[84,81427,155],{"class":154},[84,81429,80956],{"class":928},[84,81431,1688],{"class":154},[84,81433,71367],{"class":928},[84,81435,1688],{"class":154},[84,81437,71384],{"class":928},[84,81439,13613],{"class":154},[84,81441,81442,81445,81448,81450],{"class":86,"line":112},[84,81443,81444],{"class":94},"    this",[84,81446,81447],{"class":154},".name",[84,81449,867],{"class":129},[84,81451,81452],{"class":154},"name\n",[84,81454,81455,81457,81460,81462],{"class":86,"line":425},[84,81456,81444],{"class":94},[84,81458,81459],{"class":154},".age",[84,81461,867],{"class":129},[84,81463,81464],{"class":154},"age\n",[84,81466,81467,81469,81472,81474],{"class":86,"line":2395},[84,81468,81444],{"class":94},[84,81470,81471],{"class":154},".gender",[84,81473,867],{"class":129},[84,81475,81476],{"class":154},"gender    \n",[84,81478,81479],{"class":86,"line":2401},[84,81480,2746],{"class":154},[84,81482,81483],{"class":86,"line":2492},[84,81484,81485],{"class":1378},"\u002F\u002F创建佩奇对象\n",[84,81487,81488,81490,81493,81495,81497,81499,81502,81504,81506,81508,81511],{"class":86,"line":2498},[84,81489,7964],{"class":129},[84,81491,81492],{"class":94}," Peppa",[84,81494,12889],{"class":129},[84,81496,81425],{"class":90},[84,81498,155],{"class":154},[84,81500,81501],{"class":158},"'佩奇'",[84,81503,1688],{"class":154},[84,81505,1654],{"class":94},[84,81507,1688],{"class":154},[84,81509,81510],{"class":158},"'女'",[84,81512,162],{"class":154},[84,81514,81515],{"class":86,"line":2510},[84,81516,81517],{"class":1378},"\u002F\u002F创建乔治对象\n",[84,81519,81520,81522,81525,81527,81529,81531,81534,81536,81538,81540,81543],{"class":86,"line":2793},[84,81521,7964],{"class":129},[84,81523,81524],{"class":94}," George",[84,81526,12889],{"class":129},[84,81528,81425],{"class":90},[84,81530,155],{"class":154},[84,81532,81533],{"class":158},"'乔治'",[84,81535,1688],{"class":154},[84,81537,1391],{"class":94},[84,81539,1688],{"class":154},[84,81541,81542],{"class":158},"'男'",[84,81544,162],{"class":154},[84,81546,81547,81549,81551],{"class":86,"line":2798},[84,81548,52934],{"class":154},[84,81550,52962],{"class":52449},[84,81552,52456],{"class":154},[19,81554,81555],{},[2643,81556],{"alt":66,"src":81557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81559,81560],{},[2643,81561],{"alt":66,"src":81562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81564,81565],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81567,81568],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81570,81571],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81573,81574],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81576,81577],{},"这里用等号是因为：对象.属性=值",[19,81579,81580],{},"①利用对象字面量创建对象",[19,81582,81583],{},"const o={",[19,81585,81586],{},"name:'pink'",[19,81588,81589],{},"} ②利用new Object创建对象",[19,81591,81592],{},"const o=new Object({name:'pink'})",[19,81594,81595],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81597,81598],{},"构造函数创建对象的执行过程：",[19,81600,81601],{},[2643,81602],{"alt":66,"src":81603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[198,81605,81607],{"id":81606},"_4103-实例成员","4.10.3 实例成员",[19,81609,81610],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,81612,81613,81616,81619],{},[29,81614,81615],{},"实例对象的属性和方法即为实例成员",[29,81617,81618],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,81620,81621],{},"构造函数创建的实例对象彼此独立互不影响",[198,81623,81625],{"id":81624},"_4104-静态成员","4.10.4 静态成员",[19,81627,81628],{},[2643,81629],{"alt":66,"src":81630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81632,81633],{},"静态成员有Date.now() Math.PI Math.random()",[19,81635,81636],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81638,81639],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81641,81642],{},"function Pig(name) n {",[19,81644,81645],{},"this.name=name",[19,81647,2254],{},[19,81649,81650],{},"Pig.eyes=2",[19,81652,81653],{},"Pig.sayHai=function () { console.log(this) }",[19,81655,81656],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81658,81659],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81661,12504],{},[26,81663,81664,81667,81670,81673,81676],{},[29,81665,81666],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,81668,81669],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,81671,81672],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,81674,81675],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,81677,81678],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81680,81681],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[198,81683,81685],{"id":81684},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81687,81688],{},"内置构造函数包含：",[19,81690,81691],{},[2643,81692],{"alt":66,"src":81693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81695,81696],{},[2643,81697],{"alt":66,"src":81698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81700,81701],{},"这些基本数据类型，js对他们进行了包装",[52962,81703,81704],{},"\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",[23168,81706,81708],{"id":81707},"_41051-object","4.10.5.1 Object",[19,81710,81711],{},"Object 是内置的构造函数，用于创建普通对象",[19,81713,81714],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[60,81716,81718],{"className":51782,"code":81717,"language":51784,"meta":66,"style":66},"const user=new Object({name:'小明',age:15})\n",[39,81719,81720],{"__ignoreMap":66},[84,81721,81722],{"class":86,"line":87},[84,81723,81717],{"class":154},[19,81725,81726],{},"三个常用的静态方法：",[24080,81728,81730],{"id":81729},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81732,81733],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81735,81736],{},[2643,81737],{"alt":66,"src":81738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81740,81741],{},[2643,81742],{"alt":66,"src":81743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[60,81745,81747],{"className":54216,"code":81746,"language":54218,"meta":66,"style":66},"\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",[39,81748,81749,81757,81765,81770,81775,81780,81785,81790,81795,81803],{"__ignoreMap":66},[84,81750,81751,81753,81755],{"class":86,"line":87},[84,81752,2218],{"class":154},[84,81754,52949],{"class":52449},[84,81756,52456],{"class":154},[84,81758,81759,81761,81763],{"class":86,"line":98},[84,81760,53293],{"class":154},[84,81762,52962],{"class":52449},[84,81764,52456],{"class":154},[84,81766,81767],{"class":86,"line":106},[84,81768,81769],{"class":154},"    const o = { name: 'pink', age: 6 }\n",[84,81771,81772],{"class":86,"line":112},[84,81773,81774],{"class":154},"    \u002F\u002F 获得所有属性名\n",[84,81776,81777],{"class":86,"line":425},[84,81778,81779],{"class":154},"    const arr = Object.keys(o)\n",[84,81781,81782],{"class":86,"line":2395},[84,81783,81784],{"class":154},"    console.log(arr)\n",[84,81786,81787],{"class":86,"line":2401},[84,81788,81789],{"class":154},"    \u002F\u002F 获得所有属性值\n",[84,81791,81792],{"class":86,"line":2492},[84,81793,81794],{"class":154},"    console.log(Object.values(o))\n",[84,81796,81797,81799,81801],{"class":86,"line":2498},[84,81798,53566],{"class":154},[84,81800,52962],{"class":52449},[84,81802,52456],{"class":154},[84,81804,81805,81807,81809],{"class":86,"line":2510},[84,81806,52934],{"class":154},[84,81808,52949],{"class":52449},[84,81810,52456],{"class":154},[24080,81812,81814],{"id":81813},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81816,81817],{},"Object.assign(oo,o)",[19,81819,81820],{},"后的东西添加给前 是追加",[19,81822,81823],{},[2643,81824],{"alt":66,"src":81825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81827,81828],{},[2643,81829],{"alt":66,"src":81830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[60,81832,81834],{"className":54216,"code":81833,"language":54218,"meta":66,"style":66},"\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",[39,81835,81836,81844,81852,81856,81860,81864,81868,81872,81876,81881,81886,81891,81896,81901,81909],{"__ignoreMap":66},[84,81837,81838,81840,81842],{"class":86,"line":87},[84,81839,2218],{"class":154},[84,81841,52949],{"class":52449},[84,81843,52456],{"class":154},[84,81845,81846,81848,81850],{"class":86,"line":98},[84,81847,53293],{"class":154},[84,81849,52962],{"class":52449},[84,81851,52456],{"class":154},[84,81853,81854],{"class":86,"line":106},[84,81855,81769],{"class":154},[84,81857,81858],{"class":86,"line":112},[84,81859,81774],{"class":154},[84,81861,81862],{"class":86,"line":425},[84,81863,81779],{"class":154},[84,81865,81866],{"class":86,"line":2395},[84,81867,81784],{"class":154},[84,81869,81870],{"class":86,"line":2401},[84,81871,81789],{"class":154},[84,81873,81874],{"class":86,"line":2492},[84,81875,81794],{"class":154},[84,81877,81878],{"class":86,"line":2498},[84,81879,81880],{"class":154},"    const oo = {}\n",[84,81882,81883],{"class":86,"line":2510},[84,81884,81885],{"class":154},"    Object.assign(oo, o)\n",[84,81887,81888],{"class":86,"line":2793},[84,81889,81890],{"class":154},"    console.log(oo)\n",[84,81892,81893],{"class":86,"line":2798},[84,81894,81895],{"class":154},"    Object.assign(o, { gender: '女' })\n",[84,81897,81898],{"class":86,"line":2804},[84,81899,81900],{"class":154},"    console.log(o)\n",[84,81902,81903,81905,81907],{"class":86,"line":2809},[84,81904,53566],{"class":154},[84,81906,52962],{"class":52449},[84,81908,52456],{"class":154},[84,81910,81911,81913,81915],{"class":86,"line":2823},[84,81912,52934],{"class":154},[84,81914,52949],{"class":52449},[84,81916,52456],{"class":154},[19,81918,81919],{},[2643,81920],{"alt":66,"src":81921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23168,81923,81925],{"id":81924},"_41052-array","4.10.5.2 Array",[19,81927,81928],{},"Array 是内置的构造函数，用于创建数组",[19,81930,81931],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[60,81933,81935],{"className":51782,"code":81934,"language":51784,"meta":66,"style":66},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[39,81936,81937,81942],{"__ignoreMap":66},[84,81938,81939],{"class":86,"line":87},[84,81940,81941],{"class":154},"const arr=new Array(3,5)\n",[84,81943,81944],{"class":86,"line":98},[84,81945,81946],{"class":154},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81948,81949],{},"Array的实例方法，这个方法是实例成员",[19,81951,81952],{},[2643,81953],{"alt":66,"src":81954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24080,81956,81958],{"id":81957},"_410521-reduce","4.10.5.2.1 reduce",[19,81960,81961],{},[2643,81962],{"alt":66,"src":81963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[60,81965,81967],{"className":54216,"code":81966,"language":54218,"meta":66,"style":66},"\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",[39,81968,81969,81977,81985,81990,81995,82000,82005,82009,82014,82019,82024,82028,82033,82038,82042,82047,82052,82057,82065],{"__ignoreMap":66},[84,81970,81971,81973,81975],{"class":86,"line":87},[84,81972,2218],{"class":154},[84,81974,52949],{"class":52449},[84,81976,52456],{"class":154},[84,81978,81979,81981,81983],{"class":86,"line":98},[84,81980,53293],{"class":154},[84,81982,52962],{"class":52449},[84,81984,52456],{"class":154},[84,81986,81987],{"class":86,"line":106},[84,81988,81989],{"class":154},"    const arr = [1, 5, 8]\n",[84,81991,81992],{"class":86,"line":112},[84,81993,81994],{"class":154},"    \u002F\u002F 1.没有初始值\n",[84,81996,81997],{"class":86,"line":425},[84,81998,81999],{"class":154},"    const total = arr.reduce(function (prev, current) {\n",[84,82001,82002],{"class":86,"line":2395},[84,82003,82004],{"class":154},"      return prev + current\n",[84,82006,82007],{"class":86,"line":2401},[84,82008,34613],{"class":154},[84,82010,82011],{"class":86,"line":2492},[84,82012,82013],{"class":154},"    console.log(total)   \u002F\u002F14\n",[84,82015,82016],{"class":86,"line":2498},[84,82017,82018],{"class":154},"    \u002F\u002F 2.有初始值\n",[84,82020,82021],{"class":86,"line":2510},[84,82022,82023],{"class":154},"    const total1 = arr.reduce(function (prev, current) {\n",[84,82025,82026],{"class":86,"line":2793},[84,82027,82004],{"class":154},[84,82029,82030],{"class":86,"line":2798},[84,82031,82032],{"class":154},"    }, 10)\n",[84,82034,82035],{"class":86,"line":2804},[84,82036,82037],{"class":154},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[84,82039,82040],{"class":86,"line":2809},[84,82041,3578],{"emptyLinePlaceholder":1252},[84,82043,82044],{"class":86,"line":2823},[84,82045,82046],{"class":154},"    \u002F\u002F 3.箭头函数写法\n",[84,82048,82049],{"class":86,"line":2828},[84,82050,82051],{"class":154},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[84,82053,82054],{"class":86,"line":2834},[84,82055,82056],{"class":154},"    console.log(total2)   \u002F\u002F24\n",[84,82058,82059,82061,82063],{"class":86,"line":2855},[84,82060,53566],{"class":154},[84,82062,52962],{"class":52449},[84,82064,52456],{"class":154},[84,82066,82067,82069,82071],{"class":86,"line":2860},[84,82068,52934],{"class":154},[84,82070,52949],{"class":52449},[84,82072,52456],{"class":154},[19,82074,82075],{},"执行过程：",[26,82077,82078,82081,82084],{},[29,82079,82080],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82082,82083],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82085,82086],{},"如果有起始值，则起始值作为上一次值",[60,82088,82090],{"className":54216,"code":82089,"language":54218,"meta":66,"style":66},"\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",[39,82091,82092,82100,82108,82112,82116,82120,82124,82128,82132,82137,82142,82147,82152,82157,82161,82165,82169,82173,82177,82181,82186,82190,82195,82199,82204,82209,82213,82217,82221,82229],{"__ignoreMap":66},[84,82093,82094,82096,82098],{"class":86,"line":87},[84,82095,2218],{"class":154},[84,82097,52949],{"class":52449},[84,82099,52456],{"class":154},[84,82101,82102,82104,82106],{"class":86,"line":98},[84,82103,53293],{"class":154},[84,82105,52962],{"class":52449},[84,82107,52456],{"class":154},[84,82109,82110],{"class":86,"line":106},[84,82111,81989],{"class":154},[84,82113,82114],{"class":86,"line":112},[84,82115,81994],{"class":154},[84,82117,82118],{"class":86,"line":425},[84,82119,81999],{"class":154},[84,82121,82122],{"class":86,"line":2395},[84,82123,82004],{"class":154},[84,82125,82126],{"class":86,"line":2401},[84,82127,34613],{"class":154},[84,82129,82130],{"class":86,"line":2492},[84,82131,82013],{"class":154},[84,82133,82134],{"class":86,"line":2498},[84,82135,82136],{"class":154},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[84,82138,82139],{"class":86,"line":2510},[84,82140,82141],{"class":154},"    \u002F\u002F     1              5                    6\n",[84,82143,82144],{"class":86,"line":2793},[84,82145,82146],{"class":154},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[84,82148,82149],{"class":86,"line":2798},[84,82150,82151],{"class":154},"    \u002F\u002F     6              8                    14\n",[84,82153,82154],{"class":86,"line":2804},[84,82155,82156],{"class":154},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[84,82158,82159],{"class":86,"line":2809},[84,82160,82018],{"class":154},[84,82162,82163],{"class":86,"line":2823},[84,82164,82023],{"class":154},[84,82166,82167],{"class":86,"line":2828},[84,82168,82004],{"class":154},[84,82170,82171],{"class":86,"line":2834},[84,82172,82032],{"class":154},[84,82174,82175],{"class":86,"line":2855},[84,82176,82037],{"class":154},[84,82178,82179],{"class":86,"line":2860},[84,82180,82136],{"class":154},[84,82182,82183],{"class":86,"line":2874},[84,82184,82185],{"class":154},"    \u002F\u002F     10             1                     11\n",[84,82187,82188],{"class":86,"line":2879},[84,82189,82146],{"class":154},[84,82191,82192],{"class":86,"line":2908},[84,82193,82194],{"class":154},"    \u002F\u002F     11             5                    16\n",[84,82196,82197],{"class":86,"line":2913},[84,82198,82146],{"class":154},[84,82200,82201],{"class":86,"line":2930},[84,82202,82203],{"class":154},"    \u002F\u002F     16             8                    24\n",[84,82205,82206],{"class":86,"line":2935},[84,82207,82208],{"class":154},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[84,82210,82211],{"class":86,"line":2940},[84,82212,82046],{"class":154},[84,82214,82215],{"class":86,"line":2945},[84,82216,82051],{"class":154},[84,82218,82219],{"class":86,"line":2959},[84,82220,82056],{"class":154},[84,82222,82223,82225,82227],{"class":86,"line":2964},[84,82224,53566],{"class":154},[84,82226,52962],{"class":52449},[84,82228,52456],{"class":154},[84,82230,82231,82233,82235],{"class":86,"line":3755},[84,82232,52934],{"class":154},[84,82234,52949],{"class":52449},[84,82236,52456],{"class":154},[24080,82238,82240],{"id":82239},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82242,82243],{},[2643,82244],{"alt":66,"src":82245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[60,82247,82249],{"className":54216,"code":82248,"language":54218,"meta":66,"style":66},"\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",[39,82250,82251,82259,82267,82272,82277,82282,82287,82291,82296,82301,82306,82311,82316,82321,82325,82330,82334,82339,82347],{"__ignoreMap":66},[84,82252,82253,82255,82257],{"class":86,"line":87},[84,82254,2218],{"class":154},[84,82256,52949],{"class":52449},[84,82258,52456],{"class":154},[84,82260,82261,82263,82265],{"class":86,"line":98},[84,82262,53293],{"class":154},[84,82264,52962],{"class":52449},[84,82266,52456],{"class":154},[84,82268,82269],{"class":86,"line":106},[84,82270,82271],{"class":154},"    const arr = [\n",[84,82273,82274],{"class":86,"line":112},[84,82275,82276],{"class":154},"      { name: '张三', salary: 10000 },\n",[84,82278,82279],{"class":86,"line":425},[84,82280,82281],{"class":154},"      { name: '李四', salary: 10000 },\n",[84,82283,82284],{"class":86,"line":2395},[84,82285,82286],{"class":154},"      { name: '王五', salary: 10000 }\n",[84,82288,82289],{"class":86,"line":2401},[84,82290,54258],{"class":154},[84,82292,82293],{"class":86,"line":2492},[84,82294,82295],{"class":154},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[84,82297,82298],{"class":86,"line":2498},[84,82299,82300],{"class":154},"    \u002F\u002F prev是累计值\n",[84,82302,82303],{"class":86,"line":2510},[84,82304,82305],{"class":154},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[84,82307,82308],{"class":86,"line":2793},[84,82309,82310],{"class":154},"    console.log(total)\n",[84,82312,82313],{"class":86,"line":2798},[84,82314,82315],{"class":154},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[84,82317,82318],{"class":86,"line":2804},[84,82319,82320],{"class":154},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[84,82322,82323],{"class":86,"line":2809},[84,82324,82315],{"class":154},[84,82326,82327],{"class":86,"line":2823},[84,82328,82329],{"class":154},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[84,82331,82332],{"class":86,"line":2828},[84,82333,82315],{"class":154},[84,82335,82336],{"class":86,"line":2834},[84,82337,82338],{"class":154},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[84,82340,82341,82343,82345],{"class":86,"line":2855},[84,82342,53566],{"class":154},[84,82344,52962],{"class":52449},[84,82346,52456],{"class":154},[84,82348,82349,82351,82353],{"class":86,"line":2860},[84,82350,52934],{"class":154},[84,82352,52949],{"class":52449},[84,82354,52456],{"class":154},[24080,82356,82358],{"id":82357},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82360,82361],{},[2643,82362],{"alt":66,"src":82363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82365,82366],{},[2643,82367],{"alt":66,"src":82368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,82370,82371],{},[29,82372,82373],{},"find()",[19,82375,82376],{},"循环查找，找到第一个就ok",[19,82378,82379],{},[208,82380,82383],{"href":82381,"rel":82382},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[212],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[60,82385,82387],{"className":51782,"code":82386,"language":51784,"meta":66,"style":66},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[39,82388,82389,82394,82399],{"__ignoreMap":66},[84,82390,82391],{"class":86,"line":87},[84,82392,82393],{"class":154},"const array1 = [5, 12, 8, 130, 44]\n",[84,82395,82396],{"class":86,"line":98},[84,82397,82398],{"class":154},"const found = array1.find((element) => element > 10)\n",[84,82400,82401],{"class":86,"line":106},[84,82402,82403],{"class":154},"console.log(found)  \u002F\u002F12\n",[19,82405,82406,82408,82409,82414,82415,82418,82419,82421,82422,82427,82428,82430,82431,82433,82434,82436,82437],{},[39,82407,82373],{}," 方法是一个",[208,82410,82413],{"href":82411,"rel":82412},"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",[212],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[39,82416,82417],{},"callbackFn"," 函数，直到 ",[39,82420,82417],{}," 返回一个",[208,82423,82426],{"href":82424,"rel":82425},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[212],"真值","。然后 ",[39,82429,82373],{}," 返回该元素并停止迭代数组。如果 ",[39,82432,82417],{}," 从未返回真值，则 ",[39,82435,82373],{}," 返回 ",[39,82438,82439],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[60,82441,82443],{"className":54216,"code":82442,"language":54218,"meta":66,"style":66},"\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",[39,82444,82445,82453,82461,82466,82471,82476,82480,82485,82490,82494,82499,82504,82508,82512,82517,82522,82526,82530,82535,82540,82545,82550,82555,82559,82564,82569,82574,82579,82583,82588,82596],{"__ignoreMap":66},[84,82446,82447,82449,82451],{"class":86,"line":87},[84,82448,2218],{"class":154},[84,82450,52949],{"class":52449},[84,82452,52456],{"class":154},[84,82454,82455,82457,82459],{"class":86,"line":98},[84,82456,53293],{"class":154},[84,82458,52962],{"class":52449},[84,82460,52456],{"class":154},[84,82462,82463],{"class":86,"line":106},[84,82464,82465],{"class":154},"    const arr = ['red', 'blue', 'green']\n",[84,82467,82468],{"class":86,"line":112},[84,82469,82470],{"class":154},"    const found = arr.find(item => item === 'pink')\n",[84,82472,82473],{"class":86,"line":425},[84,82474,82475],{"class":154},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[84,82477,82478],{"class":86,"line":2395},[84,82479,3578],{"emptyLinePlaceholder":1252},[84,82481,82482],{"class":86,"line":2401},[84,82483,82484],{"class":154},"    \u002F\u002F 使用场景，用于查找数据\n",[84,82486,82487],{"class":86,"line":2492},[84,82488,82489],{"class":154},"    const arr1 = [\n",[84,82491,82492],{"class":86,"line":2498},[84,82493,80532],{"class":154},[84,82495,82496],{"class":86,"line":2510},[84,82497,82498],{"class":154},"        name: '小米',\n",[84,82500,82501],{"class":86,"line":2793},[84,82502,82503],{"class":154},"        price: 1999\n",[84,82505,82506],{"class":86,"line":2798},[84,82507,79038],{"class":154},[84,82509,82510],{"class":86,"line":2804},[84,82511,80532],{"class":154},[84,82513,82514],{"class":86,"line":2809},[84,82515,82516],{"class":154},"        name: '华为',\n",[84,82518,82519],{"class":86,"line":2823},[84,82520,82521],{"class":154},"        price: 3999\n",[84,82523,82524],{"class":86,"line":2828},[84,82525,53547],{"class":154},[84,82527,82528],{"class":86,"line":2834},[84,82529,54258],{"class":154},[84,82531,82532],{"class":86,"line":2855},[84,82533,82534],{"class":154},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[84,82536,82537],{"class":86,"line":2860},[84,82538,82539],{"class":154},"    \u002F\u002F const found1 = arr1.find(item => {\n",[84,82541,82542],{"class":86,"line":2874},[84,82543,82544],{"class":154},"    \u002F\u002F   if (item.name === '小米') {\n",[84,82546,82547],{"class":86,"line":2879},[84,82548,82549],{"class":154},"    \u002F\u002F     return item\n",[84,82551,82552],{"class":86,"line":2908},[84,82553,82554],{"class":154},"    \u002F\u002F   }\n",[84,82556,82557],{"class":86,"line":2913},[84,82558,64436],{"class":154},[84,82560,82561],{"class":86,"line":2930},[84,82562,82563],{"class":154},"    \u002F\u002F 另一种写法\n",[84,82565,82566],{"class":86,"line":2935},[84,82567,82568],{"class":154},"    const found1 = arr1.find(item => {\n",[84,82570,82571],{"class":86,"line":2940},[84,82572,82573],{"class":154},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[84,82575,82576],{"class":86,"line":2945},[84,82577,82578],{"class":154},"      return item.name = '小米'\n",[84,82580,82581],{"class":86,"line":2959},[84,82582,34613],{"class":154},[84,82584,82585],{"class":86,"line":2964},[84,82586,82587],{"class":154},"    console.log(found1)\n",[84,82589,82590,82592,82594],{"class":86,"line":3755},[84,82591,53566],{"class":154},[84,82593,52962],{"class":52449},[84,82595,52456],{"class":154},[84,82597,82598,82600,82602],{"class":86,"line":3769},[84,82599,52934],{"class":154},[84,82601,52949],{"class":52449},[84,82603,52456],{"class":154},[19,82605,82606],{},[2643,82607],{"alt":66,"src":82608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82610,82611],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,82613,82614],{"start":98},[29,82615,82616],{},"every()返回的是布尔值",[19,82618,82619],{},[208,82620,82623],{"href":82621,"rel":82622},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[212],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82625,82626],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82628,82629],{},"some是只有有一个就没问题",[19,82631,82632],{},"every是必须全是才行",[60,82634,82638],{"className":82635,"code":82636,"language":82637,"meta":66,"style":66},"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",[39,82639,82640,82656,82670,82674,82683],{"__ignoreMap":66},[84,82641,82642,82644,82647,82649,82651,82654],{"class":86,"line":87},[84,82643,55596],{"class":129},[84,82645,82646],{"class":154}," isBigEnough(element, ",[84,82648,75204],{"class":129},[84,82650,846],{"class":154},[84,82652,82653],{"class":129},"array",[84,82655,13613],{"class":154},[84,82657,82658,82661,82664,82666,82668],{"class":86,"line":98},[84,82659,82660],{"class":129},"  return",[84,82662,82663],{"class":154}," element ",[84,82665,2891],{"class":129},[84,82667,994],{"class":94},[84,82669,2471],{"class":154},[84,82671,82672],{"class":86,"line":106},[84,82673,2746],{"class":154},[84,82675,82676,82679,82681],{"class":86,"line":112},[84,82677,82678],{"class":154},"[12, 5, 8, 130, 44].every(isBigEnough); ",[84,82680,34481],{"class":129},[84,82682,55663],{"class":154},[84,82684,82685,82688,82690],{"class":86,"line":425},[84,82686,82687],{"class":154},"[12, 54, 18, 130, 44].every(isBigEnough); ",[84,82689,34481],{"class":129},[84,82691,59086],{"class":154},[60,82693,82695],{"className":54216,"code":82694,"language":54218,"meta":66,"style":66},"\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",[39,82696,82697,82705,82713,82718,82722,82727,82732,82740],{"__ignoreMap":66},[84,82698,82699,82701,82703],{"class":86,"line":87},[84,82700,2218],{"class":154},[84,82702,52949],{"class":52449},[84,82704,52456],{"class":154},[84,82706,82707,82709,82711],{"class":86,"line":98},[84,82708,53293],{"class":154},[84,82710,52962],{"class":52449},[84,82712,52456],{"class":154},[84,82714,82715],{"class":86,"line":106},[84,82716,82717],{"class":154},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[84,82719,82720],{"class":86,"line":112},[84,82721,79468],{"class":154},[84,82723,82724],{"class":86,"line":425},[84,82725,82726],{"class":154},"    const flag = arr.every(item => item >= 10)\n",[84,82728,82729],{"class":86,"line":2395},[84,82730,82731],{"class":154},"    console.log(flag)    \u002F\u002Ftrue\n",[84,82733,82734,82736,82738],{"class":86,"line":2401},[84,82735,53566],{"class":154},[84,82737,52962],{"class":52449},[84,82739,52456],{"class":154},[84,82741,82742,82744,82746],{"class":86,"line":2492},[84,82743,52934],{"class":154},[84,82745,52949],{"class":52449},[84,82747,52456],{"class":154},[60,82749,82751],{"className":54216,"code":82750,"language":54218,"meta":66,"style":66},"\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",[39,82752,82753,82761,82769,82773,82778,82783,82788,82796],{"__ignoreMap":66},[84,82754,82755,82757,82759],{"class":86,"line":87},[84,82756,2218],{"class":154},[84,82758,52949],{"class":52449},[84,82760,52456],{"class":154},[84,82762,82763,82765,82767],{"class":86,"line":98},[84,82764,53293],{"class":154},[84,82766,52962],{"class":52449},[84,82768,52456],{"class":154},[84,82770,82771],{"class":86,"line":106},[84,82772,82717],{"class":154},[84,82774,82775],{"class":86,"line":112},[84,82776,82777],{"class":154},"    const arr = [10, 0, 5]\n",[84,82779,82780],{"class":86,"line":425},[84,82781,82782],{"class":154},"    const flag = arr.some(item => item >= 10)\n",[84,82784,82785],{"class":86,"line":2395},[84,82786,82787],{"class":154},"    console.log(flag)   \u002F\u002Ftrue\n",[84,82789,82790,82792,82794],{"class":86,"line":2401},[84,82791,53566],{"class":154},[84,82793,52962],{"class":52449},[84,82795,52456],{"class":154},[84,82797,82798,82800,82802],{"class":86,"line":2492},[84,82799,52934],{"class":154},[84,82801,52949],{"class":52449},[84,82803,52456],{"class":154},[24080,82805,82807],{"id":82806},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82809,82810],{},[2643,82811],{"alt":66,"src":82812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[60,82814,82816],{"className":51782,"code":82815,"language":51784,"meta":66,"style":66},"\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",[39,82817,82818,82828,82842,82846,82854,82868,82888,82900,82908,82915,82927,82939,82951,82963,82973,82983,82987,82995,83003,83007,83015,83027,83035,83057,83062,83067,83100,83108,83116,83120],{"__ignoreMap":66},[84,82819,82820,82822,82824,82826],{"class":86,"line":87},[84,82821,52446],{"class":154},[84,82823,52450],{"class":52449},[84,82825,52453],{"class":90},[84,82827,52456],{"class":154},[84,82829,82830,82832,82834,82836,82838,82840],{"class":86,"line":98},[84,82831,2218],{"class":154},[84,82833,51784],{"class":52449},[84,82835,52465],{"class":90},[84,82837,867],{"class":154},[84,82839,52470],{"class":158},[84,82841,52456],{"class":154},[84,82843,82844],{"class":86,"line":106},[84,82845,3578],{"emptyLinePlaceholder":1252},[84,82847,82848,82850,82852],{"class":86,"line":112},[84,82849,2218],{"class":154},[84,82851,52483],{"class":52449},[84,82853,52456],{"class":154},[84,82855,82856,82858,82860,82862,82864,82866],{"class":86,"line":425},[84,82857,53293],{"class":154},[84,82859,52493],{"class":52449},[84,82861,52496],{"class":90},[84,82863,867],{"class":154},[84,82865,52501],{"class":158},[84,82867,52456],{"class":154},[84,82869,82870,82872,82874,82876,82878,82880,82882,82884,82886],{"class":86,"line":2395},[84,82871,53293],{"class":154},[84,82873,52493],{"class":52449},[84,82875,16090],{"class":90},[84,82877,867],{"class":154},[84,82879,52540],{"class":158},[84,82881,52520],{"class":90},[84,82883,867],{"class":154},[84,82885,52547],{"class":158},[84,82887,52456],{"class":154},[84,82889,82890,82892,82894,82896,82898],{"class":86,"line":2401},[84,82891,53293],{"class":154},[84,82893,52556],{"class":52449},[84,82895,52559],{"class":154},[84,82897,52556],{"class":52449},[84,82899,52456],{"class":154},[84,82901,82902,82904,82906],{"class":86,"line":2492},[84,82903,53293],{"class":154},[84,82905,1222],{"class":52449},[84,82907,52456],{"class":154},[84,82909,82910,82913],{"class":86,"line":2498},[84,82911,82912],{"class":52449},"    div",[84,82914,16742],{"class":154},[84,82916,82917,82919,82921,82923,82925],{"class":86,"line":2510},[84,82918,55918],{"class":94},[84,82920,52586],{"class":154},[84,82922,2903],{"class":94},[84,82924,52641],{"class":129},[84,82926,2471],{"class":154},[84,82928,82929,82931,82933,82935,82937],{"class":86,"line":2793},[84,82930,55932],{"class":94},[84,82932,52586],{"class":154},[84,82934,1711],{"class":94},[84,82936,52641],{"class":129},[84,82938,2471],{"class":154},[84,82940,82941,82943,82945,82947,82949],{"class":86,"line":2798},[84,82942,58506],{"class":94},[84,82944,52586],{"class":154},[84,82946,1711],{"class":94},[84,82948,52641],{"class":129},[84,82950,2471],{"class":154},[84,82952,82953,82955,82957,82959,82961],{"class":86,"line":2804},[84,82954,66279],{"class":94},[84,82956,52586],{"class":154},[84,82958,1807],{"class":94},[84,82960,52641],{"class":129},[84,82962,2471],{"class":154},[84,82964,82965,82967,82969,82971],{"class":86,"line":2809},[84,82966,58433],{"class":94},[84,82968,52586],{"class":154},[84,82970,52741],{"class":94},[84,82972,2471],{"class":154},[84,82974,82975,82977,82979,82981],{"class":86,"line":2823},[84,82976,56031],{"class":94},[84,82978,52586],{"class":154},[84,82980,52794],{"class":94},[84,82982,2471],{"class":154},[84,82984,82985],{"class":86,"line":2828},[84,82986,3365],{"class":154},[84,82988,82989,82991,82993],{"class":86,"line":2834},[84,82990,53566],{"class":154},[84,82992,1222],{"class":52449},[84,82994,52456],{"class":154},[84,82996,82997,82999,83001],{"class":86,"line":2855},[84,82998,52934],{"class":154},[84,83000,52483],{"class":52449},[84,83002,52456],{"class":154},[84,83004,83005],{"class":86,"line":2860},[84,83006,3578],{"emptyLinePlaceholder":1252},[84,83008,83009,83011,83013],{"class":86,"line":2874},[84,83010,2218],{"class":154},[84,83012,52949],{"class":52449},[84,83014,52456],{"class":154},[84,83016,83017,83019,83021,83023,83025],{"class":86,"line":2879},[84,83018,53293],{"class":154},[84,83020,52760],{"class":52449},[84,83022,56461],{"class":154},[84,83024,52760],{"class":52449},[84,83026,52456],{"class":154},[84,83028,83029,83031,83033],{"class":86,"line":2908},[84,83030,53293],{"class":154},[84,83032,52962],{"class":52449},[84,83034,52456],{"class":154},[84,83036,83037,83039,83042,83044,83047,83050,83052,83055],{"class":86,"line":2913},[84,83038,12393],{"class":129},[84,83040,83041],{"class":94}," spec",[84,83043,14735],{"class":129},[84,83045,83046],{"class":154}," { size: ",[84,83048,83049],{"class":158},"'40cm*40cm'",[84,83051,56611],{"class":154},[84,83053,83054],{"class":158},"'黑色'",[84,83056,56751],{"class":154},[84,83058,83059],{"class":86,"line":2930},[84,83060,83061],{"class":1378},"    \u002F\u002F const arr = Object.values(spec)\n",[84,83063,83064],{"class":86,"line":2935},[84,83065,83066],{"class":1378},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[84,83068,83069,83071,83073,83075,83078,83080,83082,83085,83088,83091,83093,83095,83098],{"class":86,"line":2940},[84,83070,53556],{"class":154},[84,83072,55547],{"class":90},[84,83074,155],{"class":154},[84,83076,83077],{"class":158},"'div'",[84,83079,75395],{"class":154},[84,83081,867],{"class":129},[84,83083,83084],{"class":154}," Object.",[84,83086,83087],{"class":90},"values",[84,83089,83090],{"class":154},"(spec).",[84,83092,75369],{"class":90},[84,83094,155],{"class":154},[84,83096,83097],{"class":158},"'\u002F'",[84,83099,162],{"class":154},[84,83101,83102,83104,83106],{"class":86,"line":2945},[84,83103,53566],{"class":154},[84,83105,52962],{"class":52449},[84,83107,52456],{"class":154},[84,83109,83110,83112,83114],{"class":86,"line":2959},[84,83111,52934],{"class":154},[84,83113,52949],{"class":52449},[84,83115,52456],{"class":154},[84,83117,83118],{"class":86,"line":2964},[84,83119,3578],{"emptyLinePlaceholder":1252},[84,83121,83122,83124,83126],{"class":86,"line":3755},[84,83123,52934],{"class":154},[84,83125,51784],{"class":52449},[84,83127,52456],{"class":154},[19,83129,83130],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24080,83132,83134],{"id":83133},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83136,83137],{},"静态方法，将伪数组转换为真数组",[19,83139,83140],{},[2643,83141],{"alt":66,"src":83142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[60,83144,83146],{"className":54216,"code":83145,"language":54218,"meta":66,"style":66},"\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",[39,83147,83148,83156,83164,83176,83188,83200,83208,83216,83221,83226,83231,83236,83244],{"__ignoreMap":66},[84,83149,83150,83152,83154],{"class":86,"line":87},[84,83151,2218],{"class":154},[84,83153,52949],{"class":52449},[84,83155,52456],{"class":154},[84,83157,83158,83160,83162],{"class":86,"line":98},[84,83159,53293],{"class":154},[84,83161,2315],{"class":52449},[84,83163,52456],{"class":154},[84,83165,83166,83168,83170,83172,83174],{"class":86,"line":106},[84,83167,52490],{"class":154},[84,83169,29],{"class":52449},[84,83171,56461],{"class":154},[84,83173,29],{"class":52449},[84,83175,52456],{"class":154},[84,83177,83178,83180,83182,83184,83186],{"class":86,"line":112},[84,83179,52490],{"class":154},[84,83181,29],{"class":52449},[84,83183,56461],{"class":154},[84,83185,29],{"class":52449},[84,83187,52456],{"class":154},[84,83189,83190,83192,83194,83196,83198],{"class":86,"line":425},[84,83191,52490],{"class":154},[84,83193,29],{"class":52449},[84,83195,56461],{"class":154},[84,83197,29],{"class":52449},[84,83199,52456],{"class":154},[84,83201,83202,83204,83206],{"class":86,"line":2395},[84,83203,53566],{"class":154},[84,83205,2315],{"class":52449},[84,83207,52456],{"class":154},[84,83209,83210,83212,83214],{"class":86,"line":2401},[84,83211,53293],{"class":154},[84,83213,52962],{"class":52449},[84,83215,52456],{"class":154},[84,83217,83218],{"class":86,"line":2492},[84,83219,83220],{"class":154},"    const lis = document.querySelectorAll('li')\n",[84,83222,83223],{"class":86,"line":2498},[84,83224,83225],{"class":154},"    const liss = Array.from(lis)\n",[84,83227,83228],{"class":86,"line":2510},[84,83229,83230],{"class":154},"    liss.pop()\n",[84,83232,83233],{"class":86,"line":2793},[84,83234,83235],{"class":154},"    console.log(liss)\n",[84,83237,83238,83240,83242],{"class":86,"line":2798},[84,83239,53566],{"class":154},[84,83241,52962],{"class":52449},[84,83243,52456],{"class":154},[84,83245,83246,83248,83250],{"class":86,"line":2804},[84,83247,52934],{"class":154},[84,83249,52949],{"class":52449},[84,83251,52456],{"class":154},[19,83253,83254],{},[2643,83255],{"alt":66,"src":83256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23168,83258,83260],{"id":83259},"_41053-string","4.10.5.3 String",[19,83262,83263],{},[2643,83264],{"alt":66,"src":83265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24080,83267,83269],{"id":83268},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[60,83271,83273],{"className":54216,"code":83272,"language":54218,"meta":66,"style":66},"\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",[39,83274,83275,83283,83291,83296,83301,83306,83310,83315,83320,83325,83333],{"__ignoreMap":66},[84,83276,83277,83279,83281],{"class":86,"line":87},[84,83278,2218],{"class":154},[84,83280,52949],{"class":52449},[84,83282,52456],{"class":154},[84,83284,83285,83287,83289],{"class":86,"line":98},[84,83286,53293],{"class":154},[84,83288,52962],{"class":52449},[84,83290,52456],{"class":154},[84,83292,83293],{"class":86,"line":106},[84,83294,83295],{"class":154},"    \u002F\u002F 把字符串转化为数组\n",[84,83297,83298],{"class":86,"line":112},[84,83299,83300],{"class":154},"    const str = 'pink,red'\n",[84,83302,83303],{"class":86,"line":425},[84,83304,83305],{"class":154},"    const arr = str.split(',')\n",[84,83307,83308],{"class":86,"line":2395},[84,83309,81784],{"class":154},[84,83311,83312],{"class":86,"line":2401},[84,83313,83314],{"class":154},"    const str1 = '2025-8-25'\n",[84,83316,83317],{"class":86,"line":2492},[84,83318,83319],{"class":154},"    const arr1 = str1.split('-')\n",[84,83321,83322],{"class":86,"line":2498},[84,83323,83324],{"class":154},"    console.log(arr1)\n",[84,83326,83327,83329,83331],{"class":86,"line":2510},[84,83328,53566],{"class":154},[84,83330,52962],{"class":52449},[84,83332,52456],{"class":154},[84,83334,83335,83337,83339],{"class":86,"line":2793},[84,83336,52934],{"class":154},[84,83338,52949],{"class":52449},[84,83340,52456],{"class":154},[24080,83342,83344],{"id":83343},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83346,6358],{},[19,83348,83349],{},"substring(indexStart)",[19,83351,83352],{},"substring(indexStart, indexEnd)",[2315,83354,83355,83366,83378,83388],{},[29,83356,83357,83358,83361,83362,83365],{},"如果省略了 ",[39,83359,83360],{},"indexEnd","，则 ",[39,83363,83364],{},"substring()"," 提取字符直到字符串的末尾",[29,83367,83368,83369,83372,83373,83361,83375,83377],{},"如果 ",[39,83370,83371],{},"indexStart"," 等于 ",[39,83374,83360],{},[39,83376,83364],{}," 返回一个空字符串",[29,83379,83368,83380,83382,83383,83361,83385,83387],{},[39,83381,83371],{}," 大于 ",[39,83384,83360],{},[39,83386,83364],{}," 的效果就像交换了这两个参数一样",[29,83389,83390],{},"结束的索引号不包含想要截取的部分",[60,83392,83394],{"className":82635,"code":83393,"language":82637,"meta":66,"style":66},"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",[39,83395,83396,83408,83412,83446,83476,83480,83511,83515,83542,83572,83602,83606,83637],{"__ignoreMap":66},[84,83397,83398,83401,83403,83406],{"class":86,"line":87},[84,83399,83400],{"class":154},"const anyString ",[84,83402,867],{"class":129},[84,83404,83405],{"class":158}," \"Mozilla\"",[84,83407,2471],{"class":154},[84,83409,83410],{"class":86,"line":98},[84,83411,3578],{"emptyLinePlaceholder":1252},[84,83413,83414,83417,83419,83421,83423,83426,83428,83431,83433,83435,83437,83439,83441,83443],{"class":86,"line":106},[84,83415,83416],{"class":94},"console",[84,83418,1867],{"class":154},[84,83420,59393],{"class":94},[84,83422,155],{"class":154},[84,83424,83425],{"class":94},"anyString",[84,83427,1867],{"class":154},[84,83429,83430],{"class":94},"substring",[84,83432,155],{"class":154},[84,83434,1504],{"class":94},[84,83436,846],{"class":154},[84,83438,1529],{"class":94},[84,83440,76399],{"class":154},[84,83442,34481],{"class":129},[84,83444,83445],{"class":158}," 'M'\n",[84,83447,83448,83450,83452,83454,83456,83458,83460,83462,83464,83466,83468,83470,83472,83474],{"class":86,"line":112},[84,83449,83416],{"class":94},[84,83451,1867],{"class":154},[84,83453,59393],{"class":94},[84,83455,155],{"class":154},[84,83457,83425],{"class":94},[84,83459,1867],{"class":154},[84,83461,83430],{"class":94},[84,83463,155],{"class":154},[84,83465,1529],{"class":94},[84,83467,846],{"class":154},[84,83469,1504],{"class":94},[84,83471,76399],{"class":154},[84,83473,34481],{"class":129},[84,83475,83445],{"class":158},[84,83477,83478],{"class":86,"line":425},[84,83479,3578],{"emptyLinePlaceholder":1252},[84,83481,83482,83484,83486,83488,83490,83492,83494,83496,83498,83500,83502,83504,83506,83508],{"class":86,"line":2395},[84,83483,83416],{"class":94},[84,83485,1867],{"class":154},[84,83487,59393],{"class":94},[84,83489,155],{"class":154},[84,83491,83425],{"class":94},[84,83493,1867],{"class":154},[84,83495,83430],{"class":94},[84,83497,155],{"class":154},[84,83499,1504],{"class":94},[84,83501,846],{"class":154},[84,83503,1654],{"class":94},[84,83505,76399],{"class":154},[84,83507,34481],{"class":129},[84,83509,83510],{"class":158}," 'Mozill'\n",[84,83512,83513],{"class":86,"line":2401},[84,83514,3578],{"emptyLinePlaceholder":1252},[84,83516,83517,83519,83521,83523,83525,83527,83529,83531,83533,83535,83537,83539],{"class":86,"line":2492},[84,83518,83416],{"class":94},[84,83520,1867],{"class":154},[84,83522,59393],{"class":94},[84,83524,155],{"class":154},[84,83526,83425],{"class":94},[84,83528,1867],{"class":154},[84,83530,83430],{"class":94},[84,83532,155],{"class":154},[84,83534,1604],{"class":94},[84,83536,76399],{"class":154},[84,83538,34481],{"class":129},[84,83540,83541],{"class":158}," 'lla'\n",[84,83543,83544,83546,83548,83550,83552,83554,83556,83558,83560,83562,83564,83566,83568,83570],{"class":86,"line":2498},[84,83545,83416],{"class":94},[84,83547,1867],{"class":154},[84,83549,59393],{"class":94},[84,83551,155],{"class":154},[84,83553,83425],{"class":94},[84,83555,1867],{"class":154},[84,83557,83430],{"class":94},[84,83559,155],{"class":154},[84,83561,1604],{"class":94},[84,83563,846],{"class":154},[84,83565,1679],{"class":94},[84,83567,76455],{"class":154},[84,83569,34481],{"class":129},[84,83571,83541],{"class":158},[84,83573,83574,83576,83578,83580,83582,83584,83586,83588,83590,83592,83594,83596,83598,83600],{"class":86,"line":2510},[84,83575,83416],{"class":94},[84,83577,1867],{"class":154},[84,83579,59393],{"class":94},[84,83581,155],{"class":154},[84,83583,83425],{"class":94},[84,83585,1867],{"class":154},[84,83587,83430],{"class":94},[84,83589,155],{"class":154},[84,83591,1679],{"class":94},[84,83593,846],{"class":154},[84,83595,1604],{"class":94},[84,83597,76399],{"class":154},[84,83599,34481],{"class":129},[84,83601,83541],{"class":158},[84,83603,83604],{"class":86,"line":2793},[84,83605,3578],{"emptyLinePlaceholder":1252},[84,83607,83608,83610,83612,83614,83616,83618,83620,83622,83624,83626,83628,83630,83632,83634],{"class":86,"line":2798},[84,83609,83416],{"class":94},[84,83611,1867],{"class":154},[84,83613,59393],{"class":94},[84,83615,155],{"class":154},[84,83617,83425],{"class":94},[84,83619,1867],{"class":154},[84,83621,83430],{"class":94},[84,83623,155],{"class":154},[84,83625,1504],{"class":94},[84,83627,846],{"class":154},[84,83629,1679],{"class":94},[84,83631,76399],{"class":154},[84,83633,34481],{"class":129},[84,83635,83636],{"class":158}," 'Mozilla'\n",[84,83638,83639,83641,83643,83645,83647,83649,83651,83653,83655,83657,83659,83661,83663,83665],{"class":86,"line":2804},[84,83640,83416],{"class":94},[84,83642,1867],{"class":154},[84,83644,59393],{"class":94},[84,83646,155],{"class":154},[84,83648,83425],{"class":94},[84,83650,1867],{"class":154},[84,83652,83430],{"class":94},[84,83654,155],{"class":154},[84,83656,1504],{"class":94},[84,83658,846],{"class":154},[84,83660,1756],{"class":94},[84,83662,76399],{"class":154},[84,83664,34481],{"class":129},[84,83666,83636],{"class":158},[24080,83668,83670],{"id":83669},"_410533-startswith","4.10.5.3.3 startsWith",[19,83672,83673,83676,83677,83682,83683,83685,83686],{},[39,83674,83675],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1464,83678,83679],{},[39,83680,83681],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[39,83684,2543],{}," 或 ",[39,83687,67166],{},[60,83689,83691],{"className":78641,"code":83690,"language":78643,"meta":66,"style":66},"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",[39,83692,83693,83705,83724,83729,83749],{"__ignoreMap":66},[84,83694,83695,83697,83700,83702],{"class":86,"line":87},[84,83696,7964],{"class":129},[84,83698,83699],{"class":154}," str1 ",[84,83701,867],{"class":129},[84,83703,83704],{"class":158}," \"Saturday night plans\"\n",[84,83706,83707,83709,83711,83714,83717,83719,83722],{"class":86,"line":98},[84,83708,78678],{"class":154},[84,83710,59393],{"class":90},[84,83712,83713],{"class":154},"(str1.",[84,83715,83716],{"class":90},"startsWith",[84,83718,155],{"class":154},[84,83720,83721],{"class":158},"\"Sat\"",[84,83723,31651],{"class":154},[84,83725,83726],{"class":86,"line":106},[84,83727,83728],{"class":1378},"\u002F\u002F Expected output: true\n",[84,83730,83731,83733,83735,83737,83739,83741,83743,83745,83747],{"class":86,"line":112},[84,83732,78678],{"class":154},[84,83734,59393],{"class":90},[84,83736,83713],{"class":154},[84,83738,83716],{"class":90},[84,83740,155],{"class":154},[84,83742,83721],{"class":158},[84,83744,846],{"class":154},[84,83746,1391],{"class":94},[84,83748,31651],{"class":154},[84,83750,83751],{"class":86,"line":425},[84,83752,83753],{"class":1378},"\u002F\u002F Expected output: false\n",[60,83755,83757],{"className":51782,"code":83756,"language":51784,"meta":66,"style":66},"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",[39,83758,83759,83764,83769,83773,83778,83783],{"__ignoreMap":66},[84,83760,83761],{"class":86,"line":87},[84,83762,83763],{"class":154},"startsWith(searchString)\n",[84,83765,83766],{"class":86,"line":98},[84,83767,83768],{"class":154},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[84,83770,83771],{"class":86,"line":106},[84,83772,3578],{"emptyLinePlaceholder":1252},[84,83774,83775],{"class":86,"line":112},[84,83776,83777],{"class":154},"const str3 = 'pink老师上课中'\n",[84,83779,83780],{"class":86,"line":425},[84,83781,83782],{"class":154},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[84,83784,83785],{"class":86,"line":2395},[84,83786,83787],{"class":154},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24080,83789,83791],{"id":83790},"_410534-includes","4.10.5.3.4 includes",[19,83793,83794],{},"includes(searchString) includes(searchString, position)",[26,83796,83797],{},[29,83798,83799],{},"searchString:",[19,83801,83802,83803,83805,83806,83811,83812,83817,83818,22670,83821,83824,83825,83828],{},"一个要在 ",[39,83804,2480],{}," 中查找的字符串。",[208,83807,83810],{"href":83808,"rel":83809},"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",[212],"不能是正则表达式","。所有非正则表达式的值都会被",[208,83813,83816],{"href":83814,"rel":83815},"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",[212],"强制转换为字符串","，因此如果该参数被省略或传入 ",[39,83819,83820],{},"undefined",[39,83822,83823],{},"includes()"," 方法会在字符串中搜索 ",[39,83826,83827],{},"\"undefined\"","，这通常不是你想要的",[26,83830,83831],{"start":98},[29,83832,83833,2167],{},[39,83834,83835],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83837,83838,83839,83842,83843],{},"在字符串中开始搜索 ",[39,83840,83841],{},"searchString"," 的位置。默认值为 ",[39,83844,1504],{},[26,83846,83847],{"start":106},[29,83848,83849],{},"返回值：",[19,83851,83852,83853,83855,83856,83860,83861],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[39,83854,83841],{}," 为空字符串的情况），则返回 ",[1464,83857,83858],{},[39,83859,2543],{}," ，否则返回 ",[1464,83862,83863],{},[39,83864,67166],{},[26,83866,83867],{"start":112},[29,83868,83869],{},"异常：",[19,83871,83368,83872,14965,83874,83878],{},[39,83873,83841],{},[208,83875,83877],{"href":83808,"rel":83876},[212],"是一个正则表达式","，则会抛出",[19,83880,83881],{},"只要是有就是true，不需要非得以谁开头结尾",[60,83883,83885],{"className":78641,"code":83884,"language":78643,"meta":66,"style":66},"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",[39,83886,83887,83898,83921,83940,83960,83982,84001],{"__ignoreMap":66},[84,83888,83889,83891,83893,83895],{"class":86,"line":87},[84,83890,7964],{"class":129},[84,83892,80921],{"class":154},[84,83894,867],{"class":129},[84,83896,83897],{"class":158}," \"To be, or not to be, that is the question.\"\n",[84,83899,83900,83902,83904,83907,83910,83912,83915,83918],{"class":86,"line":98},[84,83901,78678],{"class":154},[84,83903,59393],{"class":90},[84,83905,83906],{"class":154},"(str.",[84,83908,83909],{"class":90},"includes",[84,83911,155],{"class":154},[84,83913,83914],{"class":158},"\"To be\"",[84,83916,83917],{"class":154},"))",[84,83919,83920],{"class":1378},"  \u002F\u002F true\n",[84,83922,83923,83925,83927,83929,83931,83933,83936,83938],{"class":86,"line":106},[84,83924,78678],{"class":154},[84,83926,59393],{"class":90},[84,83928,83906],{"class":154},[84,83930,83909],{"class":90},[84,83932,155],{"class":154},[84,83934,83935],{"class":158},"\"question\"",[84,83937,83917],{"class":154},[84,83939,83920],{"class":1378},[84,83941,83942,83944,83946,83948,83950,83952,83955,83957],{"class":86,"line":112},[84,83943,78678],{"class":154},[84,83945,59393],{"class":90},[84,83947,83906],{"class":154},[84,83949,83909],{"class":90},[84,83951,155],{"class":154},[84,83953,83954],{"class":158},"\"nonexistent\"",[84,83956,83917],{"class":154},[84,83958,83959],{"class":1378},"  \u002F\u002F false\n",[84,83961,83962,83964,83966,83968,83970,83972,83974,83976,83978,83980],{"class":86,"line":425},[84,83963,78678],{"class":154},[84,83965,59393],{"class":90},[84,83967,83906],{"class":154},[84,83969,83909],{"class":90},[84,83971,155],{"class":154},[84,83973,83914],{"class":158},[84,83975,846],{"class":154},[84,83977,1529],{"class":94},[84,83979,83917],{"class":154},[84,83981,83959],{"class":1378},[84,83983,83984,83986,83988,83990,83992,83994,83997,83999],{"class":86,"line":2395},[84,83985,78678],{"class":154},[84,83987,59393],{"class":90},[84,83989,83906],{"class":154},[84,83991,83909],{"class":90},[84,83993,155],{"class":154},[84,83995,83996],{"class":158},"\"TO BE\"",[84,83998,83917],{"class":154},[84,84000,83959],{"class":1378},[84,84002,84003,84005,84007,84009,84011,84013,84015,84017],{"class":86,"line":2401},[84,84004,78678],{"class":154},[84,84006,59393],{"class":90},[84,84008,83906],{"class":154},[84,84010,83909],{"class":90},[84,84012,155],{"class":154},[84,84014,8824],{"class":158},[84,84016,83917],{"class":154},[84,84018,83920],{"class":1378},[24080,84020,84022],{"id":84021},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[60,84024,84026],{"className":54216,"code":84025,"language":54218,"meta":66,"style":66},"\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",[39,84027,84028,84036,84044,84049,84054,84059,84064,84069,84077],{"__ignoreMap":66},[84,84029,84030,84032,84034],{"class":86,"line":87},[84,84031,2218],{"class":154},[84,84033,52949],{"class":52449},[84,84035,52456],{"class":154},[84,84037,84038,84040,84042],{"class":86,"line":98},[84,84039,53293],{"class":154},[84,84041,52962],{"class":52449},[84,84043,52456],{"class":154},[84,84045,84046],{"class":86,"line":106},[84,84047,84048],{"class":154},"    const num = 10\n",[84,84050,84051],{"class":86,"line":112},[84,84052,84053],{"class":154},"    \u002F\u002F 强制转换\n",[84,84055,84056],{"class":86,"line":425},[84,84057,84058],{"class":154},"    console.log(String(num))\n",[84,84060,84061],{"class":86,"line":2395},[84,84062,84063],{"class":154},"    \u002F\u002F toString()方法转换\n",[84,84065,84066],{"class":86,"line":2401},[84,84067,84068],{"class":154},"    console.log(num.toString())\n",[84,84070,84071,84073,84075],{"class":86,"line":2492},[84,84072,53566],{"class":154},[84,84074,52962],{"class":52449},[84,84076,52456],{"class":154},[84,84078,84079,84081,84083],{"class":86,"line":2498},[84,84080,52934],{"class":154},[84,84082,52949],{"class":52449},[84,84084,52456],{"class":154},[24080,84086,84088],{"id":84087},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84090,84091],{},[2643,84092],{"alt":66,"src":84093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[60,84095,84097],{"className":51782,"code":84096,"language":51784,"meta":66,"style":66},"\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",[39,84098,84099,84109,84123,84127,84135,84149,84169,84181,84189,84193,84201,84213,84221,84233,84238,84243,84248,84295,84311,84319,84327,84331],{"__ignoreMap":66},[84,84100,84101,84103,84105,84107],{"class":86,"line":87},[84,84102,52446],{"class":154},[84,84104,52450],{"class":52449},[84,84106,52453],{"class":90},[84,84108,52456],{"class":154},[84,84110,84111,84113,84115,84117,84119,84121],{"class":86,"line":98},[84,84112,2218],{"class":154},[84,84114,51784],{"class":52449},[84,84116,52465],{"class":90},[84,84118,867],{"class":154},[84,84120,52470],{"class":158},[84,84122,52456],{"class":154},[84,84124,84125],{"class":86,"line":106},[84,84126,3578],{"emptyLinePlaceholder":1252},[84,84128,84129,84131,84133],{"class":86,"line":112},[84,84130,2218],{"class":154},[84,84132,52483],{"class":52449},[84,84134,52456],{"class":154},[84,84136,84137,84139,84141,84143,84145,84147],{"class":86,"line":425},[84,84138,53293],{"class":154},[84,84140,52493],{"class":52449},[84,84142,52496],{"class":90},[84,84144,867],{"class":154},[84,84146,52501],{"class":158},[84,84148,52456],{"class":154},[84,84150,84151,84153,84155,84157,84159,84161,84163,84165,84167],{"class":86,"line":2395},[84,84152,53293],{"class":154},[84,84154,52493],{"class":52449},[84,84156,16090],{"class":90},[84,84158,867],{"class":154},[84,84160,52540],{"class":158},[84,84162,52520],{"class":90},[84,84164,867],{"class":154},[84,84166,52547],{"class":158},[84,84168,52456],{"class":154},[84,84170,84171,84173,84175,84177,84179],{"class":86,"line":2401},[84,84172,53293],{"class":154},[84,84174,52556],{"class":52449},[84,84176,52559],{"class":154},[84,84178,52556],{"class":52449},[84,84180,52456],{"class":154},[84,84182,84183,84185,84187],{"class":86,"line":2492},[84,84184,52934],{"class":154},[84,84186,52483],{"class":52449},[84,84188,52456],{"class":154},[84,84190,84191],{"class":86,"line":2498},[84,84192,3578],{"emptyLinePlaceholder":1252},[84,84194,84195,84197,84199],{"class":86,"line":2510},[84,84196,2218],{"class":154},[84,84198,52949],{"class":52449},[84,84200,52456],{"class":154},[84,84202,84203,84205,84207,84209,84211],{"class":86,"line":2793},[84,84204,53293],{"class":154},[84,84206,52760],{"class":52449},[84,84208,56461],{"class":154},[84,84210,52760],{"class":52449},[84,84212,52456],{"class":154},[84,84214,84215,84217,84219],{"class":86,"line":2798},[84,84216,53293],{"class":154},[84,84218,52962],{"class":52449},[84,84220,52456],{"class":154},[84,84222,84223,84225,84228,84230],{"class":86,"line":2804},[84,84224,12393],{"class":129},[84,84226,84227],{"class":94}," gift",[84,84229,14735],{"class":129},[84,84231,84232],{"class":158}," '50g的茶叶，清洗球'\n",[84,84234,84235],{"class":86,"line":2809},[84,84236,84237],{"class":1378},"    \u002F\u002F 1.把字符串拆分为数组\n",[84,84239,84240],{"class":86,"line":2823},[84,84241,84242],{"class":1378},"    \u002F\u002F console.log(gift.split(','))\n",[84,84244,84245],{"class":86,"line":2828},[84,84246,84247],{"class":1378},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[84,84249,84250,84252,84254,84256,84259,84262,84264,84267,84269,84271,84273,84275,84277,84280,84282,84285,84287,84289,84291,84293],{"class":86,"line":2834},[84,84251,12393],{"class":129},[84,84253,75065],{"class":94},[84,84255,14735],{"class":129},[84,84257,84258],{"class":154}," gift.",[84,84260,84261],{"class":90},"split",[84,84263,155],{"class":154},[84,84265,84266],{"class":158},"'，'",[84,84268,31980],{"class":154},[84,84270,75190],{"class":90},[84,84272,155],{"class":154},[84,84274,80941],{"class":928},[84,84276,80944],{"class":129},[84,84278,84279],{"class":158}," `\u003Cspan>【赠品】${",[84,84281,80941],{"class":154},[84,84283,84284],{"class":158},"}\u003C\u002Fspan>\u003Cbr>`",[84,84286,31980],{"class":154},[84,84288,75369],{"class":90},[84,84290,155],{"class":154},[84,84292,75374],{"class":158},[84,84294,162],{"class":154},[84,84296,84297,84299,84301,84303,84305,84307,84309],{"class":86,"line":2855},[84,84298,53556],{"class":154},[84,84300,55547],{"class":90},[84,84302,155],{"class":154},[84,84304,83077],{"class":158},[84,84306,75395],{"class":154},[84,84308,867],{"class":129},[84,84310,75131],{"class":154},[84,84312,84313,84315,84317],{"class":86,"line":2860},[84,84314,53566],{"class":154},[84,84316,52962],{"class":52449},[84,84318,52456],{"class":154},[84,84320,84321,84323,84325],{"class":86,"line":2874},[84,84322,52934],{"class":154},[84,84324,52949],{"class":52449},[84,84326,52456],{"class":154},[84,84328,84329],{"class":86,"line":2879},[84,84330,3578],{"emptyLinePlaceholder":1252},[84,84332,84333,84335,84337],{"class":86,"line":2908},[84,84334,52934],{"class":154},[84,84336,51784],{"class":52449},[84,84338,52456],{"class":154},[23168,84340,84342],{"id":84341},"_41054-number","4.10.5.4 Number",[19,84344,84345],{},[2643,84346],{"alt":66,"src":84347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84349,84350],{},"整数也可以进行toFixed来保留小数",[19,84352,84353],{},"比如：",[19,84355,84356],{},"const price=10",[19,84358,84359],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23168,84361,84363],{"id":84362},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84365,84366],{},[2643,84367],{"alt":66,"src":84368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[60,84370,84372],{"className":51782,"code":84371,"language":51784,"meta":66,"style":66},"\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",[39,84373,84374,84384,84398,84402,84410,84424,84444,84456,84464,84470,84480,84490,84500,84504,84508,84514,84526,84540,84544,84548,84554,84566,84582,84592,84608,84612,84616,84622,84632,84642,84646,84650,84658,84670,84682,84694,84698,84702,84710,84722,84726,84730,84741,84751,84763,84775,84785,84789,84793,84801,84810,84822,84832,84842,84846,84850,84858,84867,84874,84884,84896,84900,84904,84913,84923,84934,84946,84958,84962,84966,84975,84985,84996,85000,85004,85010,85022,85034,85044,85054,85072,85084,85088,85092,85101,85113,85123,85133,85145,85149,85157,85165,85169,85177,85191,85199,85213,85241,85249,85257,85267,85271,85279,85287,85296,85304,85313,85323,85327,85331,85339,85347,85356,85364,85372,85385,85389,85393,85401,85409,85418,85426,85434,85449,85453,85457,85465,85473,85482,85490,85498,85512,85520,85524,85528,85533,85559,85564,85601,85606,85629,85634,85688,85693,85729,85733,85739,85744,85753,85767,85776,85795,85804,85814,85819,85824,85837,85842,85896,85922,85930,85938,85942],{"__ignoreMap":66},[84,84375,84376,84378,84380,84382],{"class":86,"line":87},[84,84377,52446],{"class":154},[84,84379,52450],{"class":52449},[84,84381,52453],{"class":90},[84,84383,52456],{"class":154},[84,84385,84386,84388,84390,84392,84394,84396],{"class":86,"line":98},[84,84387,2218],{"class":154},[84,84389,51784],{"class":52449},[84,84391,52465],{"class":90},[84,84393,867],{"class":154},[84,84395,52470],{"class":158},[84,84397,52456],{"class":154},[84,84399,84400],{"class":86,"line":106},[84,84401,3578],{"emptyLinePlaceholder":1252},[84,84403,84404,84406,84408],{"class":86,"line":112},[84,84405,2218],{"class":154},[84,84407,52483],{"class":52449},[84,84409,52456],{"class":154},[84,84411,84412,84414,84416,84418,84420,84422],{"class":86,"line":425},[84,84413,53293],{"class":154},[84,84415,52493],{"class":52449},[84,84417,52496],{"class":90},[84,84419,867],{"class":154},[84,84421,52501],{"class":158},[84,84423,52456],{"class":154},[84,84425,84426,84428,84430,84432,84434,84436,84438,84440,84442],{"class":86,"line":2395},[84,84427,53293],{"class":154},[84,84429,52493],{"class":52449},[84,84431,16090],{"class":90},[84,84433,867],{"class":154},[84,84435,52540],{"class":158},[84,84437,52520],{"class":90},[84,84439,867],{"class":154},[84,84441,52547],{"class":158},[84,84443,52456],{"class":154},[84,84445,84446,84448,84450,84452,84454],{"class":86,"line":2401},[84,84447,53293],{"class":154},[84,84449,52556],{"class":52449},[84,84451,52559],{"class":154},[84,84453,52556],{"class":52449},[84,84455,52456],{"class":154},[84,84457,84458,84460,84462],{"class":86,"line":2492},[84,84459,53293],{"class":154},[84,84461,1222],{"class":52449},[84,84463,52456],{"class":154},[84,84465,84466,84468],{"class":86,"line":2498},[84,84467,7576],{"class":52449},[84,84469,16742],{"class":154},[84,84471,84472,84474,84476,84478],{"class":86,"line":2510},[84,84473,55842],{"class":94},[84,84475,52586],{"class":154},[84,84477,1504],{"class":94},[84,84479,2471],{"class":154},[84,84481,84482,84484,84486,84488],{"class":86,"line":2793},[84,84483,55853],{"class":94},[84,84485,52586],{"class":154},[84,84487,1504],{"class":94},[84,84489,2471],{"class":154},[84,84491,84492,84494,84496,84498],{"class":86,"line":2798},[84,84493,73742],{"class":94},[84,84495,52586],{"class":154},[84,84497,61651],{"class":94},[84,84499,2471],{"class":154},[84,84501,84502],{"class":86,"line":2804},[84,84503,3365],{"class":154},[84,84505,84506],{"class":86,"line":2809},[84,84507,3578],{"emptyLinePlaceholder":1252},[84,84509,84510,84512],{"class":86,"line":2823},[84,84511,63269],{"class":90},[84,84513,16742],{"class":154},[84,84515,84516,84518,84520,84522,84524],{"class":86,"line":2828},[84,84517,55918],{"class":94},[84,84519,52586],{"class":154},[84,84521,79720],{"class":94},[84,84523,52641],{"class":129},[84,84525,2471],{"class":154},[84,84527,84528,84530,84532,84534,84536,84538],{"class":86,"line":2834},[84,84529,55853],{"class":94},[84,84531,52586],{"class":154},[84,84533,821],{"class":94},[84,84535,52641],{"class":129},[84,84537,52705],{"class":94},[84,84539,2471],{"class":154},[84,84541,84542],{"class":86,"line":2855},[84,84543,3365],{"class":154},[84,84545,84546],{"class":86,"line":2860},[84,84547,3578],{"emptyLinePlaceholder":1252},[84,84549,84550,84552],{"class":86,"line":2874},[84,84551,79771],{"class":90},[84,84553,16742],{"class":154},[84,84555,84556,84558,84560,84562,84564],{"class":86,"line":2879},[84,84557,55842],{"class":94},[84,84559,52586],{"class":154},[84,84561,1884],{"class":94},[84,84563,52641],{"class":129},[84,84565,2471],{"class":154},[84,84567,84568,84570,84572,84574,84576,84578,84580],{"class":86,"line":2908},[84,84569,63006],{"class":94},[84,84571,52586],{"class":154},[84,84573,29279],{"class":94},[84,84575,79826],{"class":94},[84,84577,79829],{"class":94},[84,84579,2003],{"class":129},[84,84581,2471],{"class":154},[84,84583,84584,84586,84588,84590],{"class":86,"line":2913},[84,84585,56156],{"class":94},[84,84587,52586],{"class":154},[84,84589,52626],{"class":94},[84,84591,2471],{"class":154},[84,84593,84594,84596,84598,84600,84602,84604,84606],{"class":86,"line":2930},[84,84595,63123],{"class":94},[84,84597,52586],{"class":154},[84,84599,1529],{"class":94},[84,84601,52641],{"class":129},[84,84603,52670],{"class":94},[84,84605,63390],{"class":94},[84,84607,2471],{"class":154},[84,84609,84610],{"class":86,"line":2935},[84,84611,3365],{"class":154},[84,84613,84614],{"class":86,"line":2940},[84,84615,3578],{"emptyLinePlaceholder":1252},[84,84617,84618,84620],{"class":86,"line":2945},[84,84619,79889],{"class":90},[84,84621,16742],{"class":154},[84,84623,84624,84626,84628,84630],{"class":86,"line":2959},[84,84625,63171],{"class":94},[84,84627,52586],{"class":154},[84,84629,63176],{"class":94},[84,84631,2471],{"class":154},[84,84633,84634,84636,84638,84640],{"class":86,"line":2964},[84,84635,56031],{"class":94},[84,84637,52586],{"class":154},[84,84639,62964],{"class":94},[84,84641,2471],{"class":154},[84,84643,84644],{"class":86,"line":3755},[84,84645,3365],{"class":154},[84,84647,84648],{"class":86,"line":3769},[84,84649,3578],{"emptyLinePlaceholder":1252},[84,84651,84652,84654,84656],{"class":86,"line":3777},[84,84653,79771],{"class":90},[84,84655,56762],{"class":52449},[84,84657,16742],{"class":154},[84,84659,84660,84662,84664,84666,84668],{"class":86,"line":3782},[84,84661,55918],{"class":94},[84,84663,52586],{"class":154},[84,84665,1921],{"class":94},[84,84667,52641],{"class":129},[84,84669,2471],{"class":154},[84,84671,84672,84674,84676,84678,84680],{"class":86,"line":3788},[84,84673,55932],{"class":94},[84,84675,52586],{"class":154},[84,84677,1921],{"class":94},[84,84679,52641],{"class":129},[84,84681,2471],{"class":154},[84,84683,84684,84686,84688,84690,84692],{"class":86,"line":3794},[84,84685,62896],{"class":94},[84,84687,52586],{"class":154},[84,84689,1629],{"class":94},[84,84691,52641],{"class":129},[84,84693,2471],{"class":154},[84,84695,84696],{"class":86,"line":3799},[84,84697,3365],{"class":154},[84,84699,84700],{"class":86,"line":9120},[84,84701,3578],{"emptyLinePlaceholder":1252},[84,84703,84704,84706,84708],{"class":86,"line":9144},[84,84705,79771],{"class":90},[84,84707,63450],{"class":90},[84,84709,16742],{"class":154},[84,84711,84712,84714,84716,84718,84720],{"class":86,"line":9149},[84,84713,55918],{"class":94},[84,84715,52586],{"class":154},[84,84717,2903],{"class":94},[84,84719,52641],{"class":129},[84,84721,2471],{"class":154},[84,84723,84724],{"class":86,"line":9155},[84,84725,3365],{"class":154},[84,84727,84728],{"class":86,"line":9182},[84,84729,3578],{"emptyLinePlaceholder":1252},[84,84731,84732,84734,84736,84739],{"class":86,"line":9187},[84,84733,79771],{"class":90},[84,84735,63450],{"class":90},[84,84737,84738],{"class":90}," .tag",[84,84740,16742],{"class":154},[84,84742,84743,84745,84747,84749],{"class":86,"line":9193},[84,84744,56156],{"class":94},[84,84746,52586],{"class":154},[84,84748,62015],{"class":94},[84,84750,2471],{"class":154},[84,84752,84753,84755,84757,84759,84761],{"class":86,"line":9205},[84,84754,55842],{"class":94},[84,84756,52586],{"class":154},[84,84758,1397],{"class":94},[84,84760,52641],{"class":129},[84,84762,2471],{"class":154},[84,84764,84765,84767,84769,84771,84773],{"class":86,"line":9217},[84,84766,56069],{"class":94},[84,84768,52586],{"class":154},[84,84770,1807],{"class":94},[84,84772,52641],{"class":129},[84,84774,2471],{"class":154},[84,84776,84777,84779,84781,84783],{"class":86,"line":9229},[84,84778,58563],{"class":94},[84,84780,52586],{"class":154},[84,84782,63216],{"class":94},[84,84784,2471],{"class":154},[84,84786,84787],{"class":86,"line":10888},[84,84788,3365],{"class":154},[84,84790,84791],{"class":86,"line":10913},[84,84792,3578],{"emptyLinePlaceholder":1252},[84,84794,84795,84797,84799],{"class":86,"line":10936},[84,84796,79771],{"class":90},[84,84798,80063],{"class":90},[84,84800,32619],{"class":154},[84,84802,84803,84805,84808],{"class":86,"line":10960},[84,84804,79771],{"class":90},[84,84806,84807],{"class":90}," .sub-total",[84,84809,16742],{"class":154},[84,84811,84812,84814,84816,84818,84820],{"class":86,"line":10965},[84,84813,56069],{"class":94},[84,84815,52586],{"class":154},[84,84817,849],{"class":94},[84,84819,52641],{"class":129},[84,84821,2471],{"class":154},[84,84823,84824,84826,84828,84830],{"class":86,"line":10970},[84,84825,58563],{"class":94},[84,84827,52586],{"class":154},[84,84829,80086],{"class":94},[84,84831,2471],{"class":154},[84,84833,84834,84836,84838,84840],{"class":86,"line":10975},[84,84835,62983],{"class":94},[84,84837,52586],{"class":154},[84,84839,1529],{"class":94},[84,84841,2471],{"class":154},[84,84843,84844],{"class":86,"line":10984},[84,84845,3365],{"class":154},[84,84847,84848],{"class":86,"line":10989},[84,84849,3578],{"emptyLinePlaceholder":1252},[84,84851,84852,84854,84856],{"class":86,"line":10995},[84,84853,79771],{"class":90},[84,84855,80103],{"class":90},[84,84857,32619],{"class":154},[84,84859,84860,84862,84865],{"class":86,"line":11016},[84,84861,79771],{"class":90},[84,84863,84864],{"class":90}," .sub-total::before",[84,84866,32619],{"class":154},[84,84868,84869,84872],{"class":86,"line":11022},[84,84870,84871],{"class":90},"    .amount::before",[84,84873,16742],{"class":154},[84,84875,84876,84878,84880,84882],{"class":86,"line":11036},[84,84877,80110],{"class":94},[84,84879,52586],{"class":154},[84,84881,80115],{"class":158},[84,84883,2471],{"class":154},[84,84885,84886,84888,84890,84892,84894],{"class":86,"line":11042},[84,84887,56069],{"class":94},[84,84889,52586],{"class":154},[84,84891,1807],{"class":94},[84,84893,52641],{"class":129},[84,84895,2471],{"class":154},[84,84897,84898],{"class":86,"line":11069},[84,84899,3365],{"class":154},[84,84901,84902],{"class":86,"line":11078},[84,84903,3578],{"emptyLinePlaceholder":1252},[84,84905,84906,84908,84911],{"class":86,"line":11084},[84,84907,79771],{"class":90},[84,84909,84910],{"class":90}," .spec",[84,84912,16742],{"class":154},[84,84914,84915,84917,84919,84921],{"class":86,"line":11092},[84,84916,62983],{"class":94},[84,84918,52586],{"class":154},[84,84920,1397],{"class":94},[84,84922,2471],{"class":154},[84,84924,84925,84927,84929,84932],{"class":86,"line":11097},[84,84926,58563],{"class":94},[84,84928,52586],{"class":154},[84,84930,84931],{"class":94},"#888",[84,84933,2471],{"class":154},[84,84935,84936,84938,84940,84942,84944],{"class":86,"line":17774},[84,84937,56069],{"class":94},[84,84939,52586],{"class":154},[84,84941,1858],{"class":94},[84,84943,52641],{"class":129},[84,84945,2471],{"class":154},[84,84947,84948,84950,84952,84954,84956],{"class":86,"line":17780},[84,84949,63146],{"class":94},[84,84951,52586],{"class":154},[84,84953,2008],{"class":94},[84,84955,52641],{"class":129},[84,84957,2471],{"class":154},[84,84959,84960],{"class":86,"line":17803},[84,84961,3365],{"class":154},[84,84963,84964],{"class":86,"line":17809},[84,84965,3578],{"emptyLinePlaceholder":1252},[84,84967,84968,84970,84973],{"class":86,"line":17832},[84,84969,79771],{"class":90},[84,84971,84972],{"class":90}," .count",[84,84974,16742],{"class":154},[84,84976,84977,84979,84981,84983],{"class":86,"line":17846},[84,84978,62983],{"class":94},[84,84980,52586],{"class":154},[84,84982,1529],{"class":94},[84,84984,2471],{"class":154},[84,84986,84987,84989,84991,84994],{"class":86,"line":17866},[84,84988,58563],{"class":94},[84,84990,52586],{"class":154},[84,84992,84993],{"class":94},"#aaa",[84,84995,2471],{"class":154},[84,84997,84998],{"class":86,"line":17872},[84,84999,3365],{"class":154},[84,85001,85002],{"class":86,"line":17883},[84,85003,3578],{"emptyLinePlaceholder":1252},[84,85005,85006,85008],{"class":86,"line":17906},[84,85007,73621],{"class":90},[84,85009,16742],{"class":154},[84,85011,85012,85014,85016,85018,85020],{"class":86,"line":17928},[84,85013,55918],{"class":94},[84,85015,52586],{"class":154},[84,85017,79720],{"class":94},[84,85019,52641],{"class":129},[84,85021,2471],{"class":154},[84,85023,85024,85026,85028,85030,85032],{"class":86,"line":17933},[84,85025,55853],{"class":94},[84,85027,52586],{"class":154},[84,85029,1504],{"class":94},[84,85031,52705],{"class":94},[84,85033,2471],{"class":154},[84,85035,85036,85038,85040,85042],{"class":86,"line":17939},[84,85037,56156],{"class":94},[84,85039,52586],{"class":154},[84,85041,52626],{"class":94},[84,85043,2471],{"class":154},[84,85045,85046,85048,85050,85052],{"class":86,"line":17953},[84,85047,56167],{"class":94},[84,85049,52586],{"class":154},[84,85051,52729],{"class":94},[84,85053,2471],{"class":154},[84,85055,85056,85059,85061,85063,85065,85067,85070],{"class":86,"line":17966},[84,85057,85058],{"class":94},"      border-top",[84,85060,52586],{"class":154},[84,85062,1529],{"class":94},[84,85064,52641],{"class":129},[84,85066,52670],{"class":94},[84,85068,85069],{"class":94}," #4e4e4e",[84,85071,2471],{"class":154},[84,85073,85074,85076,85078,85080,85082],{"class":86,"line":17971},[84,85075,55842],{"class":94},[84,85077,52586],{"class":154},[84,85079,2008],{"class":94},[84,85081,52641],{"class":129},[84,85083,2471],{"class":154},[84,85085,85086],{"class":86,"line":17985},[84,85087,3365],{"class":154},[84,85089,85090],{"class":86,"line":17990},[84,85091,3578],{"emptyLinePlaceholder":1252},[84,85093,85094,85096,85099],{"class":86,"line":17996},[84,85095,73621],{"class":90},[84,85097,85098],{"class":90}," .amount",[84,85100,16742],{"class":154},[84,85102,85103,85105,85107,85109,85111],{"class":86,"line":18001},[84,85104,56069],{"class":94},[84,85106,52586],{"class":154},[84,85108,849],{"class":94},[84,85110,52641],{"class":129},[84,85112,2471],{"class":154},[84,85114,85115,85117,85119,85121],{"class":86,"line":18015},[84,85116,58563],{"class":94},[84,85118,52586],{"class":154},[84,85120,80086],{"class":94},[84,85122,2471],{"class":154},[84,85124,85125,85127,85129,85131],{"class":86,"line":18020},[84,85126,63480],{"class":94},[84,85128,52586],{"class":154},[84,85130,52638],{"class":94},[84,85132,2471],{"class":154},[84,85134,85135,85137,85139,85141,85143],{"class":86,"line":18025},[84,85136,62896],{"class":94},[84,85138,52586],{"class":154},[84,85140,1964],{"class":94},[84,85142,52641],{"class":129},[84,85144,2471],{"class":154},[84,85146,85147],{"class":86,"line":18039},[84,85148,3365],{"class":154},[84,85150,85151,85153,85155],{"class":86,"line":18051},[84,85152,53566],{"class":154},[84,85154,1222],{"class":52449},[84,85156,52456],{"class":154},[84,85158,85159,85161,85163],{"class":86,"line":18056},[84,85160,52934],{"class":154},[84,85162,52483],{"class":52449},[84,85164,52456],{"class":154},[84,85166,85167],{"class":86,"line":18069},[84,85168,3578],{"emptyLinePlaceholder":1252},[84,85170,85171,85173,85175],{"class":86,"line":18074},[84,85172,2218],{"class":154},[84,85174,52949],{"class":52449},[84,85176,52456],{"class":154},[84,85178,85179,85181,85183,85185,85187,85189],{"class":86,"line":18079},[84,85180,53293],{"class":154},[84,85182,52760],{"class":52449},[84,85184,54635],{"class":90},[84,85186,867],{"class":154},[84,85188,63754],{"class":158},[84,85190,52456],{"class":154},[84,85192,85193,85195,85197],{"class":86,"line":18084},[84,85194,53566],{"class":154},[84,85196,52760],{"class":52449},[84,85198,52456],{"class":154},[84,85200,85201,85203,85205,85207,85209,85211],{"class":86,"line":18097},[84,85202,53293],{"class":154},[84,85204,52760],{"class":52449},[84,85206,54635],{"class":90},[84,85208,867],{"class":154},[84,85210,63726],{"class":158},[84,85212,52456],{"class":154},[84,85214,85215,85217,85219,85222,85224,85226,85228,85231,85233,85235,85237,85239],{"class":86,"line":18102},[84,85216,52490],{"class":154},[84,85218,52760],{"class":52449},[84,85220,85221],{"class":154},">合计：\u003C",[84,85223,84],{"class":52449},[84,85225,54635],{"class":90},[84,85227,867],{"class":154},[84,85229,85230],{"class":158},"\"amount\"",[84,85232,56461],{"class":154},[84,85234,84],{"class":52449},[84,85236,56461],{"class":154},[84,85238,52760],{"class":52449},[84,85240,52456],{"class":154},[84,85242,85243,85245,85247],{"class":86,"line":33785},[84,85244,53566],{"class":154},[84,85246,52760],{"class":52449},[84,85248,52456],{"class":154},[84,85250,85251,85253,85255],{"class":86,"line":33791},[84,85252,53293],{"class":154},[84,85254,52962],{"class":52449},[84,85256,52456],{"class":154},[84,85258,85259,85261,85263,85265],{"class":86,"line":33797},[84,85260,12393],{"class":129},[84,85262,80523],{"class":94},[84,85264,14735],{"class":129},[84,85266,56594],{"class":154},[84,85268,85269],{"class":86,"line":33803},[84,85270,80532],{"class":154},[84,85272,85273,85275,85277],{"class":86,"line":33809},[84,85274,80537],{"class":154},[84,85276,80540],{"class":158},[84,85278,32619],{"class":154},[84,85280,85281,85283,85285],{"class":86,"line":33820},[84,85282,80547],{"class":154},[84,85284,80550],{"class":158},[84,85286,32619],{"class":154},[84,85288,85289,85291,85294],{"class":86,"line":33826},[84,85290,80557],{"class":154},[84,85292,85293],{"class":94},"289.9",[84,85295,32619],{"class":154},[84,85297,85298,85300,85302],{"class":86,"line":33846},[84,85299,80567],{"class":154},[84,85301,80570],{"class":158},[84,85303,32619],{"class":154},[84,85305,85306,85309,85311],{"class":86,"line":33852},[84,85307,85308],{"class":154},"        count: ",[84,85310,1397],{"class":94},[84,85312,32619],{"class":154},[84,85314,85315,85318,85321],{"class":86,"line":33863},[84,85316,85317],{"class":154},"        spec: { color: ",[84,85319,85320],{"class":158},"'白色'",[84,85322,56751],{"class":154},[84,85324,85325],{"class":86,"line":33869},[84,85326,79038],{"class":154},[84,85328,85329],{"class":86,"line":33875},[84,85330,80532],{"class":154},[84,85332,85333,85335,85337],{"class":86,"line":33881},[84,85334,80537],{"class":154},[84,85336,80631],{"class":158},[84,85338,32619],{"class":154},[84,85340,85341,85343,85345],{"class":86,"line":33887},[84,85342,80547],{"class":154},[84,85344,80640],{"class":158},[84,85346,32619],{"class":154},[84,85348,85349,85351,85354],{"class":86,"line":33893},[84,85350,80557],{"class":154},[84,85352,85353],{"class":94},"109.8",[84,85355,32619],{"class":154},[84,85357,85358,85360,85362],{"class":86,"line":33899},[84,85359,80567],{"class":154},[84,85361,80658],{"class":158},[84,85363,32619],{"class":154},[84,85365,85366,85368,85370],{"class":86,"line":33905},[84,85367,85308],{"class":154},[84,85369,1391],{"class":94},[84,85371,32619],{"class":154},[84,85373,85374,85377,85379,85381,85383],{"class":86,"line":33925},[84,85375,85376],{"class":154},"        spec: { size: ",[84,85378,83049],{"class":158},[84,85380,56611],{"class":154},[84,85382,83054],{"class":158},[84,85384,56751],{"class":154},[84,85386,85387],{"class":86,"line":33931},[84,85388,79038],{"class":154},[84,85390,85391],{"class":86,"line":33947},[84,85392,80532],{"class":154},[84,85394,85395,85397,85399],{"class":86,"line":33953},[84,85396,80537],{"class":154},[84,85398,80675],{"class":158},[84,85400,32619],{"class":154},[84,85402,85403,85405,85407],{"class":86,"line":33967},[84,85404,80547],{"class":154},[84,85406,80684],{"class":158},[84,85408,32619],{"class":154},[84,85410,85411,85413,85416],{"class":86,"line":33973},[84,85412,80557],{"class":154},[84,85414,85415],{"class":94},"488",[84,85417,32619],{"class":154},[84,85419,85420,85422,85424],{"class":86,"line":33988},[84,85421,80567],{"class":154},[84,85423,80702],{"class":158},[84,85425,32619],{"class":154},[84,85427,85428,85430,85432],{"class":86,"line":33994},[84,85429,85308],{"class":154},[84,85431,1529],{"class":94},[84,85433,32619],{"class":154},[84,85435,85436,85438,85441,85444,85447],{"class":86,"line":34003},[84,85437,85317],{"class":154},[84,85439,85440],{"class":158},"'青色'",[84,85442,85443],{"class":154},", sum: ",[84,85445,85446],{"class":158},"'一大四小'",[84,85448,56751],{"class":154},[84,85450,85451],{"class":86,"line":34009},[84,85452,79038],{"class":154},[84,85454,85455],{"class":86,"line":34018},[84,85456,80532],{"class":154},[84,85458,85459,85461,85463],{"class":86,"line":34024},[84,85460,80537],{"class":154},[84,85462,80719],{"class":158},[84,85464,32619],{"class":154},[84,85466,85467,85469,85471],{"class":86,"line":34030},[84,85468,80547],{"class":154},[84,85470,80728],{"class":158},[84,85472,32619],{"class":154},[84,85474,85475,85477,85480],{"class":86,"line":34039},[84,85476,80557],{"class":154},[84,85478,85479],{"class":94},"139",[84,85481,32619],{"class":154},[84,85483,85484,85486,85488],{"class":86,"line":34045},[84,85485,80567],{"class":154},[84,85487,80746],{"class":158},[84,85489,32619],{"class":154},[84,85491,85492,85494,85496],{"class":86,"line":34056},[84,85493,85308],{"class":154},[84,85495,1529],{"class":94},[84,85497,32619],{"class":154},[84,85499,85500,85502,85505,85507,85510],{"class":86,"line":34062},[84,85501,85376],{"class":154},[84,85503,85504],{"class":158},"'小号'",[84,85506,56611],{"class":154},[84,85508,85509],{"class":158},"'紫色'",[84,85511,56617],{"class":154},[84,85513,85514,85517],{"class":86,"line":34081},[84,85515,85516],{"class":154},"        gift: ",[84,85518,85519],{"class":158},"'50g茶叶,清洗球'\n",[84,85521,85522],{"class":86,"line":34087},[84,85523,53547],{"class":154},[84,85525,85526],{"class":86,"line":34098},[84,85527,54258],{"class":154},[84,85529,85530],{"class":86,"line":34104},[84,85531,85532],{"class":1378},"    \u002F\u002F  1.根据数据渲染页面\n",[84,85534,85535,85537,85539,85541,85543,85545,85547,85549,85551,85553,85555,85557],{"class":86,"line":34124},[84,85536,53556],{"class":154},[84,85538,55547],{"class":90},[84,85540,155],{"class":154},[84,85542,81047],{"class":158},[84,85544,75395],{"class":154},[84,85546,867],{"class":129},[84,85548,81194],{"class":154},[84,85550,75190],{"class":90},[84,85552,155],{"class":154},[84,85554,80941],{"class":928},[84,85556,80944],{"class":129},[84,85558,16742],{"class":154},[84,85560,85561],{"class":86,"line":34140},[84,85562,85563],{"class":1378},"      \u002F\u002F 对象解构\n",[84,85565,85566,85568,85570,85572,85574,85576,85578,85581,85583,85585,85587,85590,85592,85595,85597,85599],{"class":86,"line":34146},[84,85567,59374],{"class":129},[84,85569,80953],{"class":154},[84,85571,80966],{"class":94},[84,85573,846],{"class":154},[84,85575,80956],{"class":94},[84,85577,846],{"class":154},[84,85579,85580],{"class":94},"count",[84,85582,846],{"class":154},[84,85584,80961],{"class":94},[84,85586,846],{"class":154},[84,85588,85589],{"class":94},"spec",[84,85591,846],{"class":154},[84,85593,85594],{"class":94},"gift",[84,85596,80969],{"class":154},[84,85598,867],{"class":129},[84,85600,80974],{"class":154},[84,85602,85603],{"class":86,"line":34160},[84,85604,85605],{"class":1378},"      \u002F\u002F 规格文字模块处理\n",[84,85607,85608,85610,85613,85615,85617,85619,85621,85623,85625,85627],{"class":86,"line":34166},[84,85609,59374],{"class":129},[84,85611,85612],{"class":94}," text",[84,85614,14735],{"class":129},[84,85616,83084],{"class":154},[84,85618,83087],{"class":90},[84,85620,83090],{"class":154},[84,85622,75369],{"class":90},[84,85624,155],{"class":154},[84,85626,83097],{"class":158},[84,85628,162],{"class":154},[84,85630,85631],{"class":86,"line":34172},[84,85632,85633],{"class":1378},"      \u002F\u002F 处理赠品模块\n",[84,85635,85636,85638,85640,85642,85645,85647,85649,85651,85653,85656,85658,85660,85662,85664,85666,85669,85671,85674,85676,85678,85680,85682,85684,85686],{"class":86,"line":34183},[84,85637,59374],{"class":129},[84,85639,75065],{"class":94},[84,85641,14735],{"class":129},[84,85643,85644],{"class":154}," gift ",[84,85646,2294],{"class":129},[84,85648,84258],{"class":154},[84,85650,84261],{"class":90},[84,85652,155],{"class":154},[84,85654,85655],{"class":158},"','",[84,85657,31980],{"class":154},[84,85659,75190],{"class":90},[84,85661,155],{"class":154},[84,85663,80941],{"class":928},[84,85665,80944],{"class":129},[84,85667,85668],{"class":158}," `\u003Cspan class=\"tag\">【赠品】${",[84,85670,80941],{"class":154},[84,85672,85673],{"class":158},"}\u003C\u002Fspan>`",[84,85675,31980],{"class":154},[84,85677,75369],{"class":90},[84,85679,155],{"class":154},[84,85681,75374],{"class":158},[84,85683,1154],{"class":154},[84,85685,2167],{"class":129},[84,85687,71250],{"class":158},[84,85689,85690],{"class":86,"line":34189},[84,85691,85692],{"class":1378},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[84,85694,85695,85697,85700,85702,85705,85707,85709,85711,85714,85716,85718,85720,85723,85725,85727],{"class":86,"line":34195},[84,85696,59374],{"class":129},[84,85698,85699],{"class":94}," subtotal",[84,85701,14735],{"class":129},[84,85703,85704],{"class":154}," ((price ",[84,85706,1043],{"class":129},[84,85708,6928],{"class":94},[84,85710,997],{"class":129},[84,85712,85713],{"class":154}," count) ",[84,85715,1893],{"class":129},[84,85717,6928],{"class":94},[84,85719,31980],{"class":154},[84,85721,85722],{"class":90},"toFixed",[84,85724,155],{"class":154},[84,85726,1397],{"class":94},[84,85728,162],{"class":154},[84,85730,85731],{"class":86,"line":34205},[84,85732,3578],{"emptyLinePlaceholder":1252},[84,85734,85735,85737],{"class":86,"line":34211},[84,85736,75128],{"class":129},[84,85738,71314],{"class":158},[84,85740,85741],{"class":86,"line":34222},[84,85742,85743],{"class":158},"        \u003Cdiv class=\"item\">\n",[84,85745,85746,85749,85751],{"class":86,"line":34228},[84,85747,85748],{"class":158},"          \u003Cimg src=\"${",[84,85750,80966],{"class":154},[84,85752,80998],{"class":158},[84,85754,85755,85758,85760,85763,85765],{"class":86,"line":34238},[84,85756,85757],{"class":158},"          \u003Cp class=\"name\">${",[84,85759,80956],{"class":154},[84,85761,85762],{"class":158},"}${",[84,85764,2480],{"class":154},[84,85766,81008],{"class":158},[84,85768,85769,85772,85774],{"class":86,"line":34243},[84,85770,85771],{"class":158},"          \u003Cp class=\"spec\">${",[84,85773,65],{"class":154},[84,85775,81008],{"class":158},[84,85777,85778,85781,85783,85785,85787,85789,85791,85793],{"class":86,"line":34249},[84,85779,85780],{"class":158},"          \u003Cp class=\"price\">${",[84,85782,80961],{"class":154},[84,85784,1867],{"class":158},[84,85786,85722],{"class":90},[84,85788,155],{"class":158},[84,85790,1397],{"class":94},[84,85792,1739],{"class":158},[84,85794,81008],{"class":158},[84,85796,85797,85800,85802],{"class":86,"line":34298},[84,85798,85799],{"class":158},"          \u003Cp class=\"count\">x${",[84,85801,85580],{"class":154},[84,85803,81008],{"class":158},[84,85805,85806,85809,85812],{"class":86,"line":34345},[84,85807,85808],{"class":158},"          \u003Cp class=\"sub-total\">${",[84,85810,85811],{"class":154},"subtotal",[84,85813,81008],{"class":158},[84,85815,85816],{"class":86,"line":34350},[84,85817,85818],{"class":158},"        \u003C\u002Fdiv> \n",[84,85820,85821],{"class":86,"line":34356},[84,85822,85823],{"class":158},"             `\n",[84,85825,85826,85829,85831,85833,85835],{"class":86,"line":34375},[84,85827,85828],{"class":154},"    }).",[84,85830,75369],{"class":90},[84,85832,155],{"class":154},[84,85834,75374],{"class":158},[84,85836,162],{"class":154},[84,85838,85839],{"class":86,"line":34381},[84,85840,85841],{"class":1378},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[84,85843,85844,85846,85848,85850,85852,85855,85857,85860,85862,85864,85866,85869,85872,85874,85877,85879,85881,85883,85886,85888,85890,85892,85894],{"class":86,"line":34401},[84,85845,12393],{"class":129},[84,85847,63931],{"class":94},[84,85849,14735],{"class":129},[84,85851,81194],{"class":154},[84,85853,85854],{"class":90},"reduce",[84,85856,3554],{"class":154},[84,85858,85859],{"class":928},"prev",[84,85861,846],{"class":154},[84,85863,80941],{"class":928},[84,85865,1154],{"class":154},[84,85867,85868],{"class":129},"=>",[84,85870,85871],{"class":154}," prev ",[84,85873,1790],{"class":129},[84,85875,85876],{"class":154}," (item.price ",[84,85878,1043],{"class":129},[84,85880,6928],{"class":94},[84,85882,997],{"class":129},[84,85884,85885],{"class":154}," item.count) ",[84,85887,1893],{"class":129},[84,85889,6928],{"class":94},[84,85891,846],{"class":154},[84,85893,1504],{"class":94},[84,85895,162],{"class":154},[84,85897,85898,85900,85902,85904,85907,85909,85911,85914,85916,85918,85920],{"class":86,"line":34407},[84,85899,53556],{"class":154},[84,85901,55547],{"class":90},[84,85903,155],{"class":154},[84,85905,85906],{"class":158},"'.amount'",[84,85908,75395],{"class":154},[84,85910,867],{"class":129},[84,85912,85913],{"class":154}," total.",[84,85915,85722],{"class":90},[84,85917,155],{"class":154},[84,85919,1397],{"class":94},[84,85921,162],{"class":154},[84,85923,85924,85926,85928],{"class":86,"line":34413},[84,85925,53566],{"class":154},[84,85927,52962],{"class":52449},[84,85929,52456],{"class":154},[84,85931,85932,85934,85936],{"class":86,"line":34423},[84,85933,52934],{"class":154},[84,85935,52949],{"class":52449},[84,85937,52456],{"class":154},[84,85939,85940],{"class":86,"line":34428},[84,85941,3578],{"emptyLinePlaceholder":1252},[84,85943,85944,85946,85948],{"class":86,"line":34434},[84,85945,52934],{"class":154},[84,85947,51784],{"class":52449},[84,85949,52456],{"class":154},[14,85951,85953],{"id":85952},"_411-编程思想","4.11 编程思想",[198,85955,85957],{"id":85956},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85959,85960,85963],{},[1464,85961,85962],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85965,85966],{},"调用就可以了",[19,85968,85969],{},[2643,85970],{"alt":66,"src":85971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[198,85973,85975],{"id":85974},"_4112-面向对象","4.11.2 面向对象",[19,85977,85978],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85980,85981],{},[2643,85982],{"alt":66,"src":85983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85985,85986],{},"面向对象的特性：",[2315,85988,85989,85992,85995],{},[29,85990,85991],{},"封装性",[29,85993,85994],{},"继承性",[29,85996,85997],{},"多态性",[198,85999,86001],{"id":86000},"_4113-两者比较","4.11.3 两者比较",[19,86003,86004],{},[2643,86005],{"alt":66,"src":86006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86008,86010],{"id":86009},"_412-构造函数回顾","4.12 构造函数回顾",[19,86012,86013],{},[2643,86014],{"alt":66,"src":86015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86017,86018],{},[2643,86019],{"alt":66,"src":86020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86022,86023],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86025,86026],{},[2643,86027],{"alt":66,"src":86028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86030,86032],{"id":86031},"_413-原型","4.13 原型",[198,86034,86036],{"id":86035},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86038,86039],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86041,86042],{},[2643,86043],{"alt":66,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86046,86047],{},[2643,86048],{"alt":66,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86051,86052],{},"原型是构造函数的属性，它也是一个对象",[19,86054,86055],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86057,86058],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[60,86060,86062],{"className":54216,"code":86061,"language":54218,"meta":66,"style":66},"\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",[39,86063,86064,86072,86077,86085,86090,86095,86100,86105,86110,86114,86118,86122,86127,86132,86136,86141,86146,86151,86156,86161,86165,86173],{"__ignoreMap":66},[84,86065,86066,86068,86070],{"class":86,"line":87},[84,86067,2218],{"class":154},[84,86069,52949],{"class":52449},[84,86071,52456],{"class":154},[84,86073,86074],{"class":86,"line":98},[84,86075,86076],{"class":1378},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[84,86078,86079,86081,86083],{"class":86,"line":106},[84,86080,53293],{"class":154},[84,86082,52962],{"class":52449},[84,86084,52456],{"class":154},[84,86086,86087],{"class":86,"line":112},[84,86088,86089],{"class":154},"    function Star(uname, age) {\n",[84,86091,86092],{"class":86,"line":425},[84,86093,86094],{"class":154},"      this.uname = uname,\n",[84,86096,86097],{"class":86,"line":2395},[84,86098,86099],{"class":154},"        this.age = age\n",[84,86101,86102],{"class":86,"line":2401},[84,86103,86104],{"class":154},"      \u002F\u002F this.sing = function () {\n",[84,86106,86107],{"class":86,"line":2492},[84,86108,86109],{"class":154},"      \u002F\u002F   console.log('唱歌')\n",[84,86111,86112],{"class":86,"line":2498},[84,86113,3578],{"emptyLinePlaceholder":1252},[84,86115,86116],{"class":86,"line":2510},[84,86117,61183],{"class":154},[84,86119,86120],{"class":86,"line":2793},[84,86121,3365],{"class":154},[84,86123,86124],{"class":86,"line":2798},[84,86125,86126],{"class":154},"    Star.prototype.sing = function () {\n",[84,86128,86129],{"class":86,"line":2804},[84,86130,86131],{"class":154},"      console.log('唱歌')\n",[84,86133,86134],{"class":86,"line":2809},[84,86135,3365],{"class":154},[84,86137,86138],{"class":86,"line":2823},[84,86139,86140],{"class":154},"    \u002F\u002F console.dir(Star.prototype)\n",[84,86142,86143],{"class":86,"line":2828},[84,86144,86145],{"class":154},"    const pink = new Star('pink', 18)\n",[84,86147,86148],{"class":86,"line":2834},[84,86149,86150],{"class":154},"    const red = new Star('red', 20)\n",[84,86152,86153],{"class":86,"line":2855},[84,86154,86155],{"class":154},"    pink.sing()\n",[84,86157,86158],{"class":86,"line":2860},[84,86159,86160],{"class":154},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[84,86162,86163],{"class":86,"line":2874},[84,86164,3578],{"emptyLinePlaceholder":1252},[84,86166,86167,86169,86171],{"class":86,"line":2879},[84,86168,53566],{"class":154},[84,86170,52962],{"class":52449},[84,86172,52456],{"class":154},[84,86174,86175,86177,86179],{"class":86,"line":2908},[84,86176,52934],{"class":154},[84,86178,52949],{"class":52449},[84,86180,52456],{"class":154},[19,86182,86183],{},[2643,86184],{"alt":66,"src":86185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[60,86187,86189],{"className":54216,"code":86188,"language":54218,"meta":66,"style":66},"\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",[39,86190,86191,86199,86207,86212,86217,86222,86227,86231,86236,86241,86246,86250,86255,86259,86263,86268,86272,86280],{"__ignoreMap":66},[84,86192,86193,86195,86197],{"class":86,"line":87},[84,86194,2218],{"class":154},[84,86196,52949],{"class":52449},[84,86198,52456],{"class":154},[84,86200,86201,86203,86205],{"class":86,"line":98},[84,86202,53293],{"class":154},[84,86204,52962],{"class":52449},[84,86206,52456],{"class":154},[84,86208,86209],{"class":86,"line":106},[84,86210,86211],{"class":154},"    let that\n",[84,86213,86214],{"class":86,"line":112},[84,86215,86216],{"class":154},"    function Star(uname) {\n",[84,86218,86219],{"class":86,"line":425},[84,86220,86221],{"class":154},"      this.uname = uname\n",[84,86223,86224],{"class":86,"line":2395},[84,86225,86226],{"class":154},"      that = this\n",[84,86228,86229],{"class":86,"line":2401},[84,86230,3365],{"class":154},[84,86232,86233],{"class":86,"line":2492},[84,86234,86235],{"class":154},"    \u002F\u002F 实例对象是 ldh\n",[84,86237,86238],{"class":86,"line":2498},[84,86239,86240],{"class":154},"    const ldh = new Star('刘德华')\n",[84,86242,86243],{"class":86,"line":2510},[84,86244,86245],{"class":154},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[84,86247,86248],{"class":86,"line":2793},[84,86249,3578],{"emptyLinePlaceholder":1252},[84,86251,86252],{"class":86,"line":2798},[84,86253,86254],{"class":154},"    Star.sing = function () {\n",[84,86256,86257],{"class":86,"line":2804},[84,86258,86131],{"class":154},[84,86260,86261],{"class":86,"line":2809},[84,86262,3365],{"class":154},[84,86264,86265],{"class":86,"line":2823},[84,86266,86267],{"class":154},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[84,86269,86270],{"class":86,"line":2828},[84,86271,3578],{"emptyLinePlaceholder":1252},[84,86273,86274,86276,86278],{"class":86,"line":2834},[84,86275,53566],{"class":154},[84,86277,52962],{"class":52449},[84,86279,52456],{"class":154},[84,86281,86282,86284,86286],{"class":86,"line":2855},[84,86283,52934],{"class":154},[84,86285,52949],{"class":52449},[84,86287,52456],{"class":154},[19,86289,86290],{},"构造函数的this指向的是实例对象；",[19,86292,86293],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[198,86295,86297],{"id":86296},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86299,86300],{},[2643,86301],{"alt":66,"src":86302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[60,86304,86306],{"className":54216,"code":86305,"language":54218,"meta":66,"style":66},"\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",[39,86307,86308,86316,86324,86329,86334,86339,86344,86349,86354,86359,86364,86369,86374,86378,86383,86388,86393,86398,86402,86407,86412,86417,86422,86426,86431,86436,86441,86446,86450,86455,86459,86467],{"__ignoreMap":66},[84,86309,86310,86312,86314],{"class":86,"line":87},[84,86311,2218],{"class":154},[84,86313,52949],{"class":52449},[84,86315,52456],{"class":154},[84,86317,86318,86320,86322],{"class":86,"line":98},[84,86319,53293],{"class":154},[84,86321,52962],{"class":52449},[84,86323,52456],{"class":154},[84,86325,86326],{"class":86,"line":106},[84,86327,86328],{"class":154},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[84,86330,86331],{"class":86,"line":112},[84,86332,86333],{"class":154},"    const arr = [1, 2, 3]\n",[84,86335,86336],{"class":86,"line":425},[84,86337,86338],{"class":154},"    \u002F\u002F 自己定义数组的扩展方法\n",[84,86340,86341],{"class":86,"line":2395},[84,86342,86343],{"class":154},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[84,86345,86346],{"class":86,"line":2401},[84,86347,86348],{"class":154},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[84,86350,86351],{"class":86,"line":2492},[84,86352,86353],{"class":154},"    \u002F\u002F ①.最大值\n",[84,86355,86356],{"class":86,"line":2498},[84,86357,86358],{"class":154},"    Array.prototype.max = function () {\n",[84,86360,86361],{"class":86,"line":2510},[84,86362,86363],{"class":154},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[84,86365,86366],{"class":86,"line":2793},[84,86367,86368],{"class":154},"      return Math.max(...this)\n",[84,86370,86371],{"class":86,"line":2798},[84,86372,86373],{"class":154},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[84,86375,86376],{"class":86,"line":2804},[84,86377,3365],{"class":154},[84,86379,86380],{"class":86,"line":2809},[84,86381,86382],{"class":154},"    console.log(arr.max())\n",[84,86384,86385],{"class":86,"line":2823},[84,86386,86387],{"class":154},"    \u002F\u002F ②最小值\n",[84,86389,86390],{"class":86,"line":2828},[84,86391,86392],{"class":154},"    Array.prototype.min = function () {\n",[84,86394,86395],{"class":86,"line":2834},[84,86396,86397],{"class":154},"      return Math.min(...this)\n",[84,86399,86400],{"class":86,"line":2855},[84,86401,3365],{"class":154},[84,86403,86404],{"class":86,"line":2860},[84,86405,86406],{"class":154},"    console.log(arr.min())\n",[84,86408,86409],{"class":86,"line":2874},[84,86410,86411],{"class":154},"    \u002F\u002F③求和\n",[84,86413,86414],{"class":86,"line":2879},[84,86415,86416],{"class":154},"    Array.prototype.sum = function () {\n",[84,86418,86419],{"class":86,"line":2908},[84,86420,86421],{"class":154},"      return this.reduce((prev, current) => prev + current, 0)\n",[84,86423,86424],{"class":86,"line":2913},[84,86425,3365],{"class":154},[84,86427,86428],{"class":86,"line":2930},[84,86429,86430],{"class":154},"    console.log(arr.sum())\n",[84,86432,86433],{"class":86,"line":2935},[84,86434,86435],{"class":154},"    \u002F\u002F ③排序\n",[84,86437,86438],{"class":86,"line":2940},[84,86439,86440],{"class":154},"    Array.prototype.rever = function () {\n",[84,86442,86443],{"class":86,"line":2945},[84,86444,86445],{"class":154},"      return this.reverse()\n",[84,86447,86448],{"class":86,"line":2959},[84,86449,3365],{"class":154},[84,86451,86452],{"class":86,"line":2964},[84,86453,86454],{"class":154},"    console.log(arr.rever())\n",[84,86456,86457],{"class":86,"line":3755},[84,86458,3578],{"emptyLinePlaceholder":1252},[84,86460,86461,86463,86465],{"class":86,"line":3769},[84,86462,53566],{"class":154},[84,86464,52962],{"class":52449},[84,86466,52456],{"class":154},[84,86468,86469,86471,86473],{"class":86,"line":3777},[84,86470,52934],{"class":154},[84,86472,52949],{"class":52449},[84,86474,52456],{"class":154},[19,86476,86477],{},[2643,86478],{"alt":66,"src":86479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[198,86481,86483],{"id":86482},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86485,86486],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86488,86489],{},[2643,86490],{"alt":66,"src":86491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[60,86493,86495],{"className":54216,"code":86494,"language":54218,"meta":66,"style":66},"\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",[39,86496,86497,86505,86513,86518,86523,86527,86532,86537,86542,86550],{"__ignoreMap":66},[84,86498,86499,86501,86503],{"class":86,"line":87},[84,86500,2218],{"class":154},[84,86502,52949],{"class":52449},[84,86504,52456],{"class":154},[84,86506,86507,86509,86511],{"class":86,"line":98},[84,86508,53293],{"class":154},[84,86510,52962],{"class":52449},[84,86512,52456],{"class":154},[84,86514,86515],{"class":86,"line":106},[84,86516,86517],{"class":154},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[84,86519,86520],{"class":86,"line":112},[84,86521,86522],{"class":154},"    function Star() {\n",[84,86524,86525],{"class":86,"line":425},[84,86526,3365],{"class":154},[84,86528,86529],{"class":86,"line":2395},[84,86530,86531],{"class":154},"    const ldh = new Star()\n",[84,86533,86534],{"class":86,"line":2401},[84,86535,86536],{"class":154},"    console.log(Star.prototype)\n",[84,86538,86539],{"class":86,"line":2492},[84,86540,86541],{"class":154},"    console.log(Star.prototype.constructor === Star)\n",[84,86543,86544,86546,86548],{"class":86,"line":2498},[84,86545,53566],{"class":154},[84,86547,52962],{"class":52449},[84,86549,52456],{"class":154},[84,86551,86552,86554,86556],{"class":86,"line":2510},[84,86553,52934],{"class":154},[84,86555,52949],{"class":52449},[84,86557,52456],{"class":154},[19,86559,86560],{},[2643,86561],{"alt":66,"src":86562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86564,86565],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[60,86567,86569],{"className":54216,"code":86568,"language":54218,"meta":66,"style":66},"  \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",[39,86570,86571,86579,86583,86587,86591,86596,86601,86606,86610,86615,86620,86625,86630,86635,86640,86644,86648,86653,86658,86663,86667,86672,86677,86681,86685,86689],{"__ignoreMap":66},[84,86572,86573,86575,86577],{"class":86,"line":87},[84,86574,53293],{"class":154},[84,86576,52962],{"class":52449},[84,86578,52456],{"class":154},[84,86580,86581],{"class":86,"line":98},[84,86582,86517],{"class":154},[84,86584,86585],{"class":86,"line":106},[84,86586,86522],{"class":154},[84,86588,86589],{"class":86,"line":112},[84,86590,3365],{"class":154},[84,86592,86593],{"class":86,"line":425},[84,86594,86595],{"class":154},"    \u002F\u002F const ldh = new Star()\n",[84,86597,86598],{"class":86,"line":2395},[84,86599,86600],{"class":154},"    \u002F\u002F console.log(Star.prototype)\n",[84,86602,86603],{"class":86,"line":2401},[84,86604,86605],{"class":154},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[84,86607,86608],{"class":86,"line":2492},[84,86609,3578],{"emptyLinePlaceholder":1252},[84,86611,86612],{"class":86,"line":2498},[84,86613,86614],{"class":154},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[84,86616,86617],{"class":86,"line":2510},[84,86618,86619],{"class":154},"    \u002F\u002F Star.prototype.sing = function () {\n",[84,86621,86622],{"class":86,"line":2793},[84,86623,86624],{"class":154},"    \u002F\u002F   console.log('唱歌')\n",[84,86626,86627],{"class":86,"line":2798},[84,86628,86629],{"class":154},"    \u002F\u002F }\n",[84,86631,86632],{"class":86,"line":2804},[84,86633,86634],{"class":154},"    \u002F\u002F Star.prototype.dance = function () {\n",[84,86636,86637],{"class":86,"line":2809},[84,86638,86639],{"class":154},"    \u002F\u002F   console.log('跳舞')\n",[84,86641,86642],{"class":86,"line":2823},[84,86643,86629],{"class":154},[84,86645,86646],{"class":86,"line":2828},[84,86647,86536],{"class":154},[84,86649,86650],{"class":86,"line":2834},[84,86651,86652],{"class":154},"    Star.prototype = {\n",[84,86654,86655],{"class":86,"line":2855},[84,86656,86657],{"class":154},"      sing: function () {\n",[84,86659,86660],{"class":86,"line":2860},[84,86661,86662],{"class":154},"        console.log('唱歌')\n",[84,86664,86665],{"class":86,"line":2874},[84,86666,79038],{"class":154},[84,86668,86669],{"class":86,"line":2879},[84,86670,86671],{"class":154},"      dance: function () {\n",[84,86673,86674],{"class":86,"line":2908},[84,86675,86676],{"class":154},"        console.log('跳舞')\n",[84,86678,86679],{"class":86,"line":2913},[84,86680,53547],{"class":154},[84,86682,86683],{"class":86,"line":2930},[84,86684,3365],{"class":154},[84,86686,86687],{"class":86,"line":2935},[84,86688,86536],{"class":154},[84,86690,86691,86693,86695],{"class":86,"line":2940},[84,86692,53566],{"class":154},[84,86694,52962],{"class":52449},[84,86696,52456],{"class":154},[19,86698,86699],{},"进行输出结果后会发现：",[19,86701,86702],{},[2643,86703],{"alt":66,"src":86704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86706,86707],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86709,86710],{},"所以，要重新指回创造这个原型对象的构造函数",[60,86712,86714],{"className":72359,"code":86713,"language":72361,"meta":66,"style":66},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[39,86715,86716,86730,86735,86740,86751,86764,86769,86780,86794,86798],{"__ignoreMap":66},[84,86717,86718,86721,86723,86726,86728],{"class":86,"line":87},[84,86719,86720],{"class":94},"Star",[84,86722,1867],{"class":154},[84,86724,86725],{"class":94},"prototype",[84,86727,14735],{"class":129},[84,86729,16742],{"class":154},[84,86731,86732],{"class":86,"line":98},[84,86733,86734],{"class":1378},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[84,86736,86737],{"class":86,"line":106},[84,86738,86739],{"class":154},"  constructor: Star,\n",[84,86741,86742,86745,86747,86749],{"class":86,"line":112},[84,86743,86744],{"class":90},"  sing",[84,86746,52586],{"class":154},[84,86748,55596],{"class":129},[84,86750,55599],{"class":154},[84,86752,86753,86755,86757,86759,86762],{"class":86,"line":425},[84,86754,74899],{"class":154},[84,86756,59393],{"class":90},[84,86758,155],{"class":154},[84,86760,86761],{"class":158},"'唱歌'",[84,86763,162],{"class":154},[84,86765,86766],{"class":86,"line":2395},[84,86767,86768],{"class":154},"   },\n",[84,86770,86771,86774,86776,86778],{"class":86,"line":2401},[84,86772,86773],{"class":90},"   dance",[84,86775,52586],{"class":154},[84,86777,55596],{"class":129},[84,86779,55599],{"class":154},[84,86781,86782,86785,86787,86789,86792],{"class":86,"line":2492},[84,86783,86784],{"class":154},"     console.",[84,86786,59393],{"class":90},[84,86788,155],{"class":154},[84,86790,86791],{"class":158},"'跳舞'",[84,86793,162],{"class":154},[84,86795,86796],{"class":86,"line":2498},[84,86797,5487],{"class":154},[84,86799,86800],{"class":86,"line":2510},[84,86801,2746],{"class":154},[19,86803,86804],{},[2643,86805],{"alt":66,"src":86806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86808,86809],{},"总结1：",[19,86811,86812],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86814,86815],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86817,86818],{},"constructor指的是他的来源",[19,86820,86821],{},[2643,86822],{"alt":66,"src":86823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86825,86826],{},[2643,86827],{"alt":66,"src":86828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86830,86831],{},"总结2：",[19,86833,86834],{},[2643,86835],{"alt":66,"src":86836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86838,86839],{},[2643,86840],{"alt":66,"src":86841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86843,86844],{},[2643,86845],{"alt":66,"src":86846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[198,86848,86850],{"id":86849},"_4134-对象原型","4.13.4 对象原型",[19,86852,86853],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86855,86856],{},"对象原型就是__proto__这个属性",[19,86858,86859],{},[2643,86860],{"alt":66,"src":86861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86863,86864],{},[2643,86865],{"alt":66,"src":86866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86868,86869],{},[2643,86870],{"alt":66,"src":86871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86873,86874],{},[2643,86875],{"alt":66,"src":86876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[60,86878,86880],{"className":54216,"code":86879,"language":54218,"meta":66,"style":66},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[39,86881,86882,86890,86898,86902,86906,86910,86915,86923],{"__ignoreMap":66},[84,86883,86884,86886,86888],{"class":86,"line":87},[84,86885,2218],{"class":154},[84,86887,52949],{"class":52449},[84,86889,52456],{"class":154},[84,86891,86892,86894,86896],{"class":86,"line":98},[84,86893,53293],{"class":154},[84,86895,52962],{"class":52449},[84,86897,52456],{"class":154},[84,86899,86900],{"class":86,"line":106},[84,86901,86522],{"class":154},[84,86903,86904],{"class":86,"line":112},[84,86905,3365],{"class":154},[84,86907,86908],{"class":86,"line":425},[84,86909,86531],{"class":154},[84,86911,86912],{"class":86,"line":2395},[84,86913,86914],{"class":154},"    console.log(ldh)\n",[84,86916,86917,86919,86921],{"class":86,"line":2401},[84,86918,53566],{"class":154},[84,86920,52962],{"class":52449},[84,86922,52456],{"class":154},[84,86924,86925,86927,86929],{"class":86,"line":2492},[84,86926,52934],{"class":154},[84,86928,52949],{"class":52449},[84,86930,52456],{"class":154},[19,86932,86933],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86935,86936],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86938,86939],{},[2643,86940],{"alt":66,"src":86941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86943,86944],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86946,86947],{},"对象原型指向原型对象",[19,86949,86950],{},[2643,86951],{"alt":66,"src":86952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86954,86955],{},[2643,86956],{"alt":66,"src":86957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86959,86960],{},[2643,86961],{"alt":66,"src":86962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[198,86964,86966],{"id":86965},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86968,86969],{},[2643,86970],{"alt":66,"src":86971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,86973,86974,86977,86980,86983],{},[29,86975,86976],{},"构造函数通过new的形式实例化得到实例对象",[29,86978,86979],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,86981,86982],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,86984,86985],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86987,86988],{},[2643,86989],{"alt":66,"src":86990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86992,86993],{},"题目梳理：",[19,86995,86996],{},[2643,86997],{"alt":66,"src":86998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[198,87000,87002],{"id":87001},"_4136-原型继承","4.13.6 原型继承",[19,87004,87005],{},[2643,87006],{"alt":66,"src":87007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87009,87010],{},[2643,87011],{"alt":66,"src":87012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87014,87015],{},[2643,87016],{"alt":66,"src":87017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87019,87020],{},[2643,87021],{"alt":66,"src":87022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87024,87025],{},[2643,87026],{"alt":66,"src":87027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87029,87030],{},[2643,87031],{"alt":66,"src":87032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87034,87035],{},[2643,87036],{"alt":66,"src":87037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87039,87040],{},[2643,87041],{"alt":66,"src":87042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87044,87045],{},"回顾：构造函数每次new得到对象都是不同的",[198,87047,87049],{"id":87048},"_4137-原型链","4.13.7 原型链",[19,87051,87052],{},[2643,87053],{"alt":66,"src":87054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87056,87057],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87059,87060],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87062,87063],{},"大哥是Object",[19,87065,87066],{},[2643,87067],{"alt":66,"src":87068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87070,87071],{},[2643,87072],{"alt":66,"src":87073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87075,87076],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87078,87079],{},"万物皆对象",[198,87081,87083],{"id":87082},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87085,87086],{},"模态框",[19,87088,87089],{},"以后遇见这个效果直接使用这个就行",[19,87091,87092],{},[2643,87093],{"alt":66,"src":87094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87096,87097],{},[2643,87098],{"alt":66,"src":87099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87101,87102],{},[2643,87103],{"alt":66,"src":87104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87106,87107],{},[2643,87108],{"alt":66,"src":87109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87111,87112],{},"补充知识点：",[26,87114,87115],{},[29,87116,87117],{},"append()",[19,87119,87120],{},[2643,87121],{"alt":66,"src":87122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[60,87124,87126],{"className":51782,"code":87125,"language":51784,"meta":66,"style":66},"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",[39,87127,87128,87133,87138,87143,87147,87151,87155,87160,87165,87170,87174],{"__ignoreMap":66},[84,87129,87130],{"class":86,"line":87},[84,87131,87132],{"class":154},"append(param1)\n",[84,87134,87135],{"class":86,"line":98},[84,87136,87137],{"class":154},"append(param1, param2)\n",[84,87139,87140],{"class":86,"line":106},[84,87141,87142],{"class":154},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[84,87144,87145],{"class":86,"line":112},[84,87146,3578],{"emptyLinePlaceholder":1252},[84,87148,87149],{"class":86,"line":425},[84,87150,3578],{"emptyLinePlaceholder":1252},[84,87152,87153],{"class":86,"line":2395},[84,87154,3578],{"emptyLinePlaceholder":1252},[84,87156,87157],{"class":86,"line":2401},[84,87158,87159],{"class":154},"let div = document.createElement(\"div\");\n",[84,87161,87162],{"class":86,"line":2492},[84,87163,87164],{"class":154},"let p = document.createElement(\"p\");\n",[84,87166,87167],{"class":86,"line":2498},[84,87168,87169],{"class":154},"div.append(p);\n",[84,87171,87172],{"class":86,"line":2510},[84,87173,3578],{"emptyLinePlaceholder":1252},[84,87175,87176,87179,87181],{"class":86,"line":2793},[84,87177,87178],{"class":154},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[84,87180,19],{"class":52449},[84,87182,87183],{"class":154},"> ]\n",[26,87185,87186],{"start":98},[29,87187,87188],{},"remove()",[19,87190,87191],{},"自己删自己",[19,87193,87194],{},[2643,87195],{"alt":66,"src":87196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[60,87198,87200],{"className":51782,"code":87199,"language":51784,"meta":66,"style":66},"\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",[39,87201,87202,87212,87226,87230,87238,87252,87272,87284,87292,87299,87311,87324,87359,87371,87382,87394,87406,87418,87445,87455,87459,87463,87472,87484,87498,87508,87520,87524,87528,87538,87549,87559,87569,87582,87595,87605,87609,87613,87622,87632,87644,87648,87652,87661,87671,87681,87693,87697,87701,87711,87727,87738,87748,87758,87770,87782,87794,87798,87802,87815,87826,87830,87838,87846,87850,87858,87878,87898,87906,87911,87937,87942,87947,87966,87971,87983,87988,87999,88009,88019,88024,88029,88033,88038,88043,88048,88068,88073,88093,88098,88112,88117,88122,88127,88143,88147,88152,88181,88186,88191,88196,88207,88211,88215,88219,88224,88249,88254,88279,88284,88293,88297,88302,88327,88331,88356,88360,88369,88373,88378,88396,88406,88410,88418,88426,88430],{"__ignoreMap":66},[84,87203,87204,87206,87208,87210],{"class":86,"line":87},[84,87205,52446],{"class":154},[84,87207,52450],{"class":52449},[84,87209,52453],{"class":90},[84,87211,52456],{"class":154},[84,87213,87214,87216,87218,87220,87222,87224],{"class":86,"line":98},[84,87215,2218],{"class":154},[84,87217,51784],{"class":52449},[84,87219,52465],{"class":90},[84,87221,867],{"class":154},[84,87223,52470],{"class":158},[84,87225,52456],{"class":154},[84,87227,87228],{"class":86,"line":106},[84,87229,3578],{"emptyLinePlaceholder":1252},[84,87231,87232,87234,87236],{"class":86,"line":112},[84,87233,2218],{"class":154},[84,87235,52483],{"class":52449},[84,87237,52456],{"class":154},[84,87239,87240,87242,87244,87246,87248,87250],{"class":86,"line":425},[84,87241,53293],{"class":154},[84,87243,52493],{"class":52449},[84,87245,52496],{"class":90},[84,87247,867],{"class":154},[84,87249,52501],{"class":158},[84,87251,52456],{"class":154},[84,87253,87254,87256,87258,87260,87262,87264,87266,87268,87270],{"class":86,"line":2395},[84,87255,53293],{"class":154},[84,87257,52493],{"class":52449},[84,87259,16090],{"class":90},[84,87261,867],{"class":154},[84,87263,52540],{"class":158},[84,87265,52520],{"class":90},[84,87267,867],{"class":154},[84,87269,52547],{"class":158},[84,87271,52456],{"class":154},[84,87273,87274,87276,87278,87280,87282],{"class":86,"line":2401},[84,87275,53293],{"class":154},[84,87277,52556],{"class":52449},[84,87279,52559],{"class":154},[84,87281,52556],{"class":52449},[84,87283,52456],{"class":154},[84,87285,87286,87288,87290],{"class":86,"line":2492},[84,87287,53293],{"class":154},[84,87289,1222],{"class":52449},[84,87291,52456],{"class":154},[84,87293,87294,87297],{"class":86,"line":2498},[84,87295,87296],{"class":90},"    .modal",[84,87298,16742],{"class":154},[84,87300,87301,87303,87305,87307,87309],{"class":86,"line":2510},[84,87302,55918],{"class":94},[84,87304,52586],{"class":154},[84,87306,5151],{"class":94},[84,87308,52641],{"class":129},[84,87310,2471],{"class":154},[84,87312,87313,87316,87318,87320,87322],{"class":86,"line":2793},[84,87314,87315],{"class":94},"      min-height",[84,87317,52586],{"class":154},[84,87319,821],{"class":94},[84,87321,52641],{"class":129},[84,87323,2471],{"class":154},[84,87325,87326,87328,87330,87332,87334,87336,87338,87340,87342,87344,87346,87348,87350,87352,87354,87357],{"class":86,"line":2798},[84,87327,79896],{"class":94},[84,87329,52586],{"class":154},[84,87331,1504],{"class":94},[84,87333,5271],{"class":94},[84,87335,994],{"class":94},[84,87337,52641],{"class":129},[84,87339,79913],{"class":94},[84,87341,155],{"class":154},[84,87343,1504],{"class":94},[84,87345,846],{"class":154},[84,87347,1504],{"class":94},[84,87349,846],{"class":154},[84,87351,1504],{"class":94},[84,87353,846],{"class":154},[84,87355,87356],{"class":94},"0.1",[84,87358,3897],{"class":154},[84,87360,87361,87363,87365,87367,87369],{"class":86,"line":2804},[84,87362,56281],{"class":94},[84,87364,52586],{"class":154},[84,87366,1604],{"class":94},[84,87368,52641],{"class":129},[84,87370,2471],{"class":154},[84,87372,87373,87375,87377,87380],{"class":86,"line":2809},[84,87374,55906],{"class":94},[84,87376,52586],{"class":154},[84,87378,87379],{"class":94},"fixed",[84,87381,2471],{"class":154},[84,87383,87384,87387,87389,87392],{"class":86,"line":2823},[84,87385,87386],{"class":94},"      z-index",[84,87388,52586],{"class":154},[84,87390,87391],{"class":94},"999",[84,87393,2471],{"class":154},[84,87395,87396,87398,87400,87402,87404],{"class":86,"line":2828},[84,87397,55985],{"class":94},[84,87399,52586],{"class":154},[84,87401,1964],{"class":94},[84,87403,1638],{"class":129},[84,87405,2471],{"class":154},[84,87407,87408,87410,87412,87414,87416],{"class":86,"line":2834},[84,87409,56094],{"class":94},[84,87411,52586],{"class":154},[84,87413,1964],{"class":94},[84,87415,1638],{"class":129},[84,87417,2471],{"class":154},[84,87419,87420,87422,87424,87426,87428,87431,87433,87435,87437,87439,87441,87443],{"class":86,"line":2855},[84,87421,79937],{"class":94},[84,87423,52586],{"class":154},[84,87425,79942],{"class":94},[84,87427,155],{"class":154},[84,87429,87430],{"class":94},"-50",[84,87432,1638],{"class":129},[84,87434,846],{"class":154},[84,87436,87430],{"class":94},[84,87438,1638],{"class":129},[84,87440,846],{"class":154},[84,87442,1504],{"class":94},[84,87444,3897],{"class":154},[84,87446,87447,87449,87451,87453],{"class":86,"line":2860},[84,87448,56031],{"class":94},[84,87450,52586],{"class":154},[84,87452,61988],{"class":94},[84,87454,2471],{"class":154},[84,87456,87457],{"class":86,"line":2874},[84,87458,3365],{"class":154},[84,87460,87461],{"class":86,"line":2879},[84,87462,3578],{"emptyLinePlaceholder":1252},[84,87464,87465,87467,87470],{"class":86,"line":2908},[84,87466,87296],{"class":90},[84,87468,87469],{"class":90}," .header",[84,87471,16742],{"class":154},[84,87473,87474,87476,87478,87480,87482],{"class":86,"line":2913},[84,87475,58506],{"class":94},[84,87477,52586],{"class":154},[84,87479,1711],{"class":94},[84,87481,52641],{"class":129},[84,87483,2471],{"class":154},[84,87485,87486,87488,87490,87492,87494,87496],{"class":86,"line":2930},[84,87487,55842],{"class":94},[84,87489,52586],{"class":154},[84,87491,1504],{"class":94},[84,87493,994],{"class":94},[84,87495,52641],{"class":129},[84,87497,2471],{"class":154},[84,87499,87500,87502,87504,87506],{"class":86,"line":2935},[84,87501,55906],{"class":94},[84,87503,52586],{"class":154},[84,87505,55911],{"class":94},[84,87507,2471],{"class":154},[84,87509,87510,87512,87514,87516,87518],{"class":86,"line":2940},[84,87511,56069],{"class":94},[84,87513,52586],{"class":154},[84,87515,2008],{"class":94},[84,87517,52641],{"class":129},[84,87519,2471],{"class":154},[84,87521,87522],{"class":86,"line":2945},[84,87523,3365],{"class":154},[84,87525,87526],{"class":86,"line":2959},[84,87527,3578],{"emptyLinePlaceholder":1252},[84,87529,87530,87532,87534,87536],{"class":86,"line":2964},[84,87531,87296],{"class":90},[84,87533,87469],{"class":90},[84,87535,4210],{"class":52449},[84,87537,16742],{"class":154},[84,87539,87540,87543,87545,87547],{"class":86,"line":3755},[84,87541,87542],{"class":94},"      font-style",[84,87544,52586],{"class":154},[84,87546,64987],{"class":94},[84,87548,2471],{"class":154},[84,87550,87551,87553,87555,87557],{"class":86,"line":3769},[84,87552,58563],{"class":94},[84,87554,52586],{"class":154},[84,87556,63216],{"class":94},[84,87558,2471],{"class":154},[84,87560,87561,87563,87565,87567],{"class":86,"line":3777},[84,87562,55906],{"class":94},[84,87564,52586],{"class":154},[84,87566,55978],{"class":94},[84,87568,2471],{"class":154},[84,87570,87571,87574,87576,87578,87580],{"class":86,"line":3782},[84,87572,87573],{"class":94},"      right",[84,87575,52586],{"class":154},[84,87577,1884],{"class":94},[84,87579,52641],{"class":129},[84,87581,2471],{"class":154},[84,87583,87584,87586,87588,87591,87593],{"class":86,"line":3788},[84,87585,56094],{"class":94},[84,87587,52586],{"class":154},[84,87589,87590],{"class":94},"-2",[84,87592,52641],{"class":129},[84,87594,2471],{"class":154},[84,87596,87597,87599,87601,87603],{"class":86,"line":3794},[84,87598,63171],{"class":94},[84,87600,52586],{"class":154},[84,87602,63176],{"class":94},[84,87604,2471],{"class":154},[84,87606,87607],{"class":86,"line":3799},[84,87608,3365],{"class":154},[84,87610,87611],{"class":86,"line":9120},[84,87612,3578],{"emptyLinePlaceholder":1252},[84,87614,87615,87617,87620],{"class":86,"line":9144},[84,87616,87296],{"class":90},[84,87618,87619],{"class":90}," .body",[84,87621,16742],{"class":154},[84,87623,87624,87626,87628,87630],{"class":86,"line":9149},[84,87625,58433],{"class":94},[84,87627,52586],{"class":154},[84,87629,52741],{"class":94},[84,87631,2471],{"class":154},[84,87633,87634,87636,87638,87640,87642],{"class":86,"line":9155},[84,87635,55842],{"class":94},[84,87637,52586],{"class":154},[84,87639,1756],{"class":94},[84,87641,52641],{"class":129},[84,87643,2471],{"class":154},[84,87645,87646],{"class":86,"line":9182},[84,87647,3365],{"class":154},[84,87649,87650],{"class":86,"line":9187},[84,87651,3578],{"emptyLinePlaceholder":1252},[84,87653,87654,87656,87659],{"class":86,"line":9193},[84,87655,87296],{"class":90},[84,87657,87658],{"class":90}," .footer",[84,87660,16742],{"class":154},[84,87662,87663,87665,87667,87669],{"class":86,"line":9205},[84,87664,56156],{"class":94},[84,87666,52586],{"class":154},[84,87668,52626],{"class":94},[84,87670,2471],{"class":154},[84,87672,87673,87675,87677,87679],{"class":86,"line":9217},[84,87674,56167],{"class":94},[84,87676,52586],{"class":154},[84,87678,52729],{"class":94},[84,87680,2471],{"class":154},[84,87682,87683,87685,87687,87689,87691],{"class":86,"line":9229},[84,87684,55842],{"class":94},[84,87686,52586],{"class":154},[84,87688,1756],{"class":94},[84,87690,52641],{"class":129},[84,87692,2471],{"class":154},[84,87694,87695],{"class":86,"line":10888},[84,87696,3365],{"class":154},[84,87698,87699],{"class":86,"line":10913},[84,87700,3578],{"emptyLinePlaceholder":1252},[84,87702,87703,87705,87707,87709],{"class":86,"line":10936},[84,87704,87296],{"class":90},[84,87706,87658],{"class":90},[84,87708,2579],{"class":52449},[84,87710,16742],{"class":154},[84,87712,87713,87715,87717,87719,87721,87723,87725],{"class":86,"line":10960},[84,87714,55842],{"class":94},[84,87716,52586],{"class":154},[84,87718,1391],{"class":94},[84,87720,52641],{"class":129},[84,87722,3261],{"class":94},[84,87724,52641],{"class":129},[84,87726,2471],{"class":154},[84,87728,87729,87731,87733,87736],{"class":86,"line":10965},[84,87730,62867],{"class":94},[84,87732,52586],{"class":154},[84,87734,87735],{"class":94},"#ccc",[84,87737,2471],{"class":154},[84,87739,87740,87742,87744,87746],{"class":86,"line":10970},[84,87741,65116],{"class":94},[84,87743,52586],{"class":154},[84,87745,55884],{"class":94},[84,87747,2471],{"class":154},[84,87749,87750,87752,87754,87756],{"class":86,"line":10975},[84,87751,58563],{"class":94},[84,87753,52586],{"class":154},[84,87755,61988],{"class":94},[84,87757,2471],{"class":154},[84,87759,87760,87762,87764,87766,87768],{"class":86,"line":10984},[84,87761,56281],{"class":94},[84,87763,52586],{"class":154},[84,87765,1397],{"class":94},[84,87767,52641],{"class":129},[84,87769,2471],{"class":154},[84,87771,87772,87774,87776,87778,87780],{"class":86,"line":10989},[84,87773,62896],{"class":94},[84,87775,52586],{"class":154},[84,87777,1756],{"class":94},[84,87779,52641],{"class":129},[84,87781,2471],{"class":154},[84,87783,87784,87786,87788,87790,87792],{"class":86,"line":10995},[84,87785,56069],{"class":94},[84,87787,52586],{"class":154},[84,87789,1858],{"class":94},[84,87791,52641],{"class":129},[84,87793,2471],{"class":154},[84,87795,87796],{"class":86,"line":11016},[84,87797,3365],{"class":154},[84,87799,87800],{"class":86,"line":11022},[84,87801,3578],{"emptyLinePlaceholder":1252},[84,87803,87804,87806,87808,87810,87813],{"class":86,"line":11036},[84,87805,87296],{"class":90},[84,87807,87658],{"class":90},[84,87809,2579],{"class":52449},[84,87811,87812],{"class":90},".submit",[84,87814,16742],{"class":154},[84,87816,87817,87819,87821,87824],{"class":86,"line":11042},[84,87818,56031],{"class":94},[84,87820,52586],{"class":154},[84,87822,87823],{"class":94},"#369",[84,87825,2471],{"class":154},[84,87827,87828],{"class":86,"line":11069},[84,87829,3365],{"class":154},[84,87831,87832,87834,87836],{"class":86,"line":11078},[84,87833,53566],{"class":154},[84,87835,1222],{"class":52449},[84,87837,52456],{"class":154},[84,87839,87840,87842,87844],{"class":86,"line":11084},[84,87841,52934],{"class":154},[84,87843,52483],{"class":52449},[84,87845,52456],{"class":154},[84,87847,87848],{"class":86,"line":11092},[84,87849,3578],{"emptyLinePlaceholder":1252},[84,87851,87852,87854,87856],{"class":86,"line":11097},[84,87853,2218],{"class":154},[84,87855,52949],{"class":52449},[84,87857,52456],{"class":154},[84,87859,87860,87862,87864,87866,87868,87871,87874,87876],{"class":86,"line":17774},[84,87861,53293],{"class":154},[84,87863,55036],{"class":52449},[84,87865,16129],{"class":90},[84,87867,867],{"class":154},[84,87869,87870],{"class":158},"\"delete\"",[84,87872,87873],{"class":154},">删除\u003C\u002F",[84,87875,55036],{"class":52449},[84,87877,52456],{"class":154},[84,87879,87880,87882,87884,87886,87888,87891,87894,87896],{"class":86,"line":17780},[84,87881,53293],{"class":154},[84,87883,55036],{"class":52449},[84,87885,16129],{"class":90},[84,87887,867],{"class":154},[84,87889,87890],{"class":158},"\"login\"",[84,87892,87893],{"class":154},">登录\u003C\u002F",[84,87895,55036],{"class":52449},[84,87897,52456],{"class":154},[84,87899,87900,87902,87904],{"class":86,"line":17803},[84,87901,53293],{"class":154},[84,87903,52962],{"class":52449},[84,87905,52456],{"class":154},[84,87907,87908],{"class":86,"line":17809},[84,87909,87910],{"class":1378},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[84,87912,87913,87915,87918,87920,87922,87924,87926,87928,87931,87933,87935],{"class":86,"line":17832},[84,87914,71230],{"class":129},[84,87916,87917],{"class":90}," Modal",[84,87919,155],{"class":154},[84,87921,52556],{"class":928},[84,87923,14735],{"class":129},[84,87925,71076],{"class":158},[84,87927,846],{"class":154},[84,87929,87930],{"class":928},"message",[84,87932,14735],{"class":129},[84,87934,71076],{"class":158},[84,87936,13613],{"class":154},[84,87938,87939],{"class":86,"line":17846},[84,87940,87941],{"class":1378},"      \u002F\u002F 创建Model 模态框盒子\n",[84,87943,87944],{"class":86,"line":17866},[84,87945,87946],{"class":1378},"      \u002F\u002F 1.1 创建div标签\n",[84,87948,87949,87951,87954,87956,87958,87960,87962,87964],{"class":86,"line":17872},[84,87950,71197],{"class":94},[84,87952,87953],{"class":154},".modalBox ",[84,87955,867],{"class":129},[84,87957,55544],{"class":154},[84,87959,71297],{"class":90},[84,87961,155],{"class":154},[84,87963,83077],{"class":158},[84,87965,162],{"class":154},[84,87967,87968],{"class":86,"line":17883},[84,87969,87970],{"class":1378},"      \u002F\u002F 1.2 给div 添加类名为model\n",[84,87972,87973,87975,87978,87980],{"class":86,"line":17906},[84,87974,71197],{"class":94},[84,87976,87977],{"class":154},".modalBox.className ",[84,87979,867],{"class":129},[84,87981,87982],{"class":158}," 'modal'\n",[84,87984,87985],{"class":86,"line":17928},[84,87986,87987],{"class":1378},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[84,87989,87990,87992,87995,87997],{"class":86,"line":17933},[84,87991,71197],{"class":94},[84,87993,87994],{"class":154},".modalBox.innerHTML ",[84,87996,867],{"class":129},[84,87998,71314],{"class":158},[84,88000,88001,88004,88006],{"class":86,"line":17939},[84,88002,88003],{"class":158},"        \u003Cdiv class=\"header\">${",[84,88005,52556],{"class":154},[84,88007,88008],{"class":158},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[84,88010,88011,88014,88016],{"class":86,"line":17953},[84,88012,88013],{"class":158},"        \u003Cdiv class=\"body\">${",[84,88015,87930],{"class":154},[84,88017,88018],{"class":158},"}\u003C\u002Fdiv>\n",[84,88020,88021],{"class":86,"line":17966},[84,88022,88023],{"class":158},"      `\n",[84,88025,88026],{"class":86,"line":17971},[84,88027,88028],{"class":1378},"      \u002F\u002F console.log(this.modalBox)\n",[84,88030,88031],{"class":86,"line":17985},[84,88032,3365],{"class":154},[84,88034,88035],{"class":86,"line":17990},[84,88036,88037],{"class":1378},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[84,88039,88040],{"class":86,"line":17996},[84,88041,88042],{"class":1378},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[84,88044,88045],{"class":86,"line":18001},[84,88046,88047],{"class":1378},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[84,88049,88050,88053,88055,88057,88059,88062,88064,88066],{"class":86,"line":18015},[84,88051,88052],{"class":94},"    Modal",[84,88054,1867],{"class":154},[84,88056,86725],{"class":94},[84,88058,1867],{"class":154},[84,88060,88061],{"class":90},"open",[84,88063,14735],{"class":129},[84,88065,60064],{"class":129},[84,88067,55599],{"class":154},[84,88069,88070],{"class":86,"line":18020},[84,88071,88072],{"class":1378},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[84,88074,88075,88077,88080,88082,88084,88086,88088,88091],{"class":86,"line":18025},[84,88076,59374],{"class":129},[84,88078,88079],{"class":94}," box",[84,88081,14735],{"class":129},[84,88083,55544],{"class":154},[84,88085,55547],{"class":90},[84,88087,155],{"class":154},[84,88089,88090],{"class":158},"'.modal'",[84,88092,162],{"class":154},[84,88094,88095],{"class":86,"line":18039},[84,88096,88097],{"class":1378},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[84,88099,88100,88103,88105,88108,88110],{"class":86,"line":18051},[84,88101,88102],{"class":154},"      box ",[84,88104,2896],{"class":129},[84,88106,88107],{"class":154}," box.",[84,88109,58153],{"class":90},[84,88111,183],{"class":154},[84,88113,88114],{"class":86,"line":18056},[84,88115,88116],{"class":1378},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[84,88118,88119],{"class":86,"line":18069},[84,88120,88121],{"class":1378},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[84,88123,88124],{"class":86,"line":18074},[84,88125,88126],{"class":1378},"      \u002F\u002F append可以增加对象\n",[84,88128,88129,88132,88135,88137,88140],{"class":86,"line":18079},[84,88130,88131],{"class":154},"      document.body.",[84,88133,88134],{"class":90},"append",[84,88136,155],{"class":154},[84,88138,88139],{"class":94},"this",[84,88141,88142],{"class":154},".modalBox)\n",[84,88144,88145],{"class":86,"line":18084},[84,88146,3578],{"emptyLinePlaceholder":1252},[84,88148,88149],{"class":86,"line":18097},[84,88150,88151],{"class":1378},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[84,88153,88154,88156,88159,88161,88163,88166,88168,88170,88172,88174,88177,88179],{"class":86,"line":18102},[84,88155,71197],{"class":94},[84,88157,88158],{"class":154},".modalBox.",[84,88160,55547],{"class":90},[84,88162,155],{"class":154},[84,88164,88165],{"class":158},"'i'",[84,88167,31980],{"class":154},[84,88169,58960],{"class":90},[84,88171,155],{"class":154},[84,88173,58965],{"class":158},[84,88175,88176],{"class":154},", () ",[84,88178,85868],{"class":129},[84,88180,16742],{"class":154},[84,88182,88183],{"class":86,"line":33785},[84,88184,88185],{"class":1378},"        \u002F\u002F 这个地方需要用到箭头函数\n",[84,88187,88188],{"class":86,"line":33791},[84,88189,88190],{"class":1378},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[84,88192,88193],{"class":86,"line":33797},[84,88194,88195],{"class":1378},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[84,88197,88198,88200,88202,88205],{"class":86,"line":33803},[84,88199,65872],{"class":94},[84,88201,1867],{"class":154},[84,88203,88204],{"class":90},"close",[84,88206,183],{"class":154},[84,88208,88209],{"class":86,"line":33809},[84,88210,65961],{"class":154},[84,88212,88213],{"class":86,"line":33820},[84,88214,3365],{"class":154},[84,88216,88217],{"class":86,"line":33826},[84,88218,3578],{"emptyLinePlaceholder":1252},[84,88220,88221],{"class":86,"line":33846},[84,88222,88223],{"class":1378},"    \u002F\u002F 测试一下 点击 删除按钮\n",[84,88225,88226,88228,88230,88232,88235,88237,88239,88241,88243,88245,88247],{"class":86,"line":33852},[84,88227,53556],{"class":154},[84,88229,55547],{"class":90},[84,88231,155],{"class":154},[84,88233,88234],{"class":158},"'#delete'",[84,88236,31980],{"class":154},[84,88238,58960],{"class":90},[84,88240,155],{"class":154},[84,88242,58965],{"class":158},[84,88244,88176],{"class":154},[84,88246,85868],{"class":129},[84,88248,16742],{"class":154},[84,88250,88251],{"class":86,"line":33863},[84,88252,88253],{"class":1378},"      \u002F\u002F 先调用Model构造函数\n",[84,88255,88256,88258,88261,88263,88265,88267,88269,88272,88274,88277],{"class":86,"line":33869},[84,88257,59374],{"class":129},[84,88259,88260],{"class":94}," del",[84,88262,14735],{"class":129},[84,88264,12750],{"class":129},[84,88266,87917],{"class":90},[84,88268,155],{"class":154},[84,88270,88271],{"class":158},"'温馨的提示'",[84,88273,846],{"class":154},[84,88275,88276],{"class":158},"'您没有删除权限操作'",[84,88278,162],{"class":154},[84,88280,88281],{"class":86,"line":33875},[84,88282,88283],{"class":1378},"      \u002F\u002F 实例对象调用open方法\n",[84,88285,88286,88289,88291],{"class":86,"line":33881},[84,88287,88288],{"class":154},"      del.",[84,88290,88061],{"class":90},[84,88292,183],{"class":154},[84,88294,88295],{"class":86,"line":33887},[84,88296,34613],{"class":154},[84,88298,88299],{"class":86,"line":33893},[84,88300,88301],{"class":1378},"    \u002F\u002F 测试一下 点击 登录按钮\n",[84,88303,88304,88306,88308,88310,88313,88315,88317,88319,88321,88323,88325],{"class":86,"line":33899},[84,88305,53556],{"class":154},[84,88307,55547],{"class":90},[84,88309,155],{"class":154},[84,88311,88312],{"class":158},"'#login'",[84,88314,31980],{"class":154},[84,88316,58960],{"class":90},[84,88318,155],{"class":154},[84,88320,58965],{"class":158},[84,88322,88176],{"class":154},[84,88324,85868],{"class":129},[84,88326,16742],{"class":154},[84,88328,88329],{"class":86,"line":33905},[84,88330,88253],{"class":1378},[84,88332,88333,88335,88338,88340,88342,88344,88346,88349,88351,88354],{"class":86,"line":33925},[84,88334,59374],{"class":129},[84,88336,88337],{"class":94}," log",[84,88339,14735],{"class":129},[84,88341,12750],{"class":129},[84,88343,87917],{"class":90},[84,88345,155],{"class":154},[84,88347,88348],{"class":158},"'友情提示'",[84,88350,846],{"class":154},[84,88352,88353],{"class":158},"'您还没有登录呢'",[84,88355,162],{"class":154},[84,88357,88358],{"class":86,"line":33931},[84,88359,88283],{"class":1378},[84,88361,88362,88365,88367],{"class":86,"line":33947},[84,88363,88364],{"class":154},"      log.",[84,88366,88061],{"class":90},[84,88368,183],{"class":154},[84,88370,88371],{"class":86,"line":33953},[84,88372,34613],{"class":154},[84,88374,88375],{"class":86,"line":33967},[84,88376,88377],{"class":1378},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[84,88379,88380,88382,88384,88386,88388,88390,88392,88394],{"class":86,"line":33973},[84,88381,88052],{"class":94},[84,88383,1867],{"class":154},[84,88385,86725],{"class":94},[84,88387,1867],{"class":154},[84,88389,88204],{"class":90},[84,88391,14735],{"class":129},[84,88393,60064],{"class":129},[84,88395,55599],{"class":154},[84,88397,88398,88400,88402,88404],{"class":86,"line":33988},[84,88399,71197],{"class":94},[84,88401,88158],{"class":154},[84,88403,58153],{"class":90},[84,88405,183],{"class":154},[84,88407,88408],{"class":86,"line":33994},[84,88409,3365],{"class":154},[84,88411,88412,88414,88416],{"class":86,"line":34003},[84,88413,53566],{"class":154},[84,88415,52962],{"class":52449},[84,88417,52456],{"class":154},[84,88419,88420,88422,88424],{"class":86,"line":34009},[84,88421,52934],{"class":154},[84,88423,52949],{"class":52449},[84,88425,52456],{"class":154},[84,88427,88428],{"class":86,"line":34018},[84,88429,3578],{"emptyLinePlaceholder":1252},[84,88431,88432,88434,88436],{"class":86,"line":34024},[84,88433,52934],{"class":154},[84,88435,51784],{"class":52449},[84,88437,52456],{"class":154},[19,88439,88440],{},[2643,88441],{"alt":66,"src":88442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88444,88446],{"id":88445},"_414-深浅拷贝","4.14 深浅拷贝",[198,88448,88450],{"id":88449},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88452,88453],{},[2643,88454],{"alt":66,"src":88455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88457,88458],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88460,88461],{},[2643,88462],{"alt":66,"src":88463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88465,88466],{},[2643,88467],{"alt":66,"src":88468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88470,88471],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88473,88474],{},[2643,88475],{"alt":66,"src":88476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88478,12504],{},[19,88480,88481],{},[2643,88482],{"alt":66,"src":88483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[198,88485,88487],{"id":88486},"_4142-深拷贝","4.14.2 深拷贝",[19,88489,88490],{},"深拷贝：拷贝的是对象，不是地址",[19,88492,88493],{},"常用的三种方法：",[26,88495,88496,88499,88502],{},[29,88497,88498],{},"通过递归实现深拷贝",[29,88500,88501],{},"lodash\u002FcloneDeep",[29,88503,88504],{},"通过JSON.stringify()实现",[23168,88506,88508],{"id":88507},"_41421-递归函数","4.14.2.1 递归函数",[19,88510,88511],{},[2643,88512],{"alt":66,"src":88513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,88515,88516],{},[29,88517,88518],{},"死递归占溢出：",[60,88520,88522],{"className":54216,"code":88521,"language":54218,"meta":66,"style":66},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[39,88523,88524,88532,88540,88544,88549,88553,88558,88566],{"__ignoreMap":66},[84,88525,88526,88528,88530],{"class":86,"line":87},[84,88527,2218],{"class":154},[84,88529,52949],{"class":52449},[84,88531,52456],{"class":154},[84,88533,88534,88536,88538],{"class":86,"line":98},[84,88535,53293],{"class":154},[84,88537,52962],{"class":52449},[84,88539,52456],{"class":154},[84,88541,88542],{"class":86,"line":106},[84,88543,78289],{"class":154},[84,88545,88546],{"class":86,"line":112},[84,88547,88548],{"class":154},"      fn()\n",[84,88550,88551],{"class":86,"line":425},[84,88552,3365],{"class":154},[84,88554,88555],{"class":86,"line":2395},[84,88556,88557],{"class":154},"    fn()\n",[84,88559,88560,88562,88564],{"class":86,"line":2401},[84,88561,53566],{"class":154},[84,88563,52962],{"class":52449},[84,88565,52456],{"class":154},[84,88567,88568,88570,88572],{"class":86,"line":2492},[84,88569,52934],{"class":154},[84,88571,52949],{"class":52449},[84,88573,52456],{"class":154},[26,88575,88576],{"start":98},[29,88577,88578],{},"递归函数要加判断条件：",[19,88580,88581],{},[2643,88582],{"alt":66,"src":88583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,88585,88586],{"start":106},[29,88587,88588],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[60,88590,88592],{"className":51782,"code":88591,"language":51784,"meta":66,"style":66},"\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",[39,88593,88594,88604,88618,88622,88630,88644,88664,88676,88684,88688,88696,88708,88716,88724,88749,88761,88765,88772,88780,88788,88792],{"__ignoreMap":66},[84,88595,88596,88598,88600,88602],{"class":86,"line":87},[84,88597,52446],{"class":154},[84,88599,52450],{"class":52449},[84,88601,52453],{"class":90},[84,88603,52456],{"class":154},[84,88605,88606,88608,88610,88612,88614,88616],{"class":86,"line":98},[84,88607,2218],{"class":154},[84,88609,51784],{"class":52449},[84,88611,52465],{"class":90},[84,88613,867],{"class":154},[84,88615,52470],{"class":158},[84,88617,52456],{"class":154},[84,88619,88620],{"class":86,"line":106},[84,88621,3578],{"emptyLinePlaceholder":1252},[84,88623,88624,88626,88628],{"class":86,"line":112},[84,88625,2218],{"class":154},[84,88627,52483],{"class":52449},[84,88629,52456],{"class":154},[84,88631,88632,88634,88636,88638,88640,88642],{"class":86,"line":425},[84,88633,53293],{"class":154},[84,88635,52493],{"class":52449},[84,88637,52496],{"class":90},[84,88639,867],{"class":154},[84,88641,52501],{"class":158},[84,88643,52456],{"class":154},[84,88645,88646,88648,88650,88652,88654,88656,88658,88660,88662],{"class":86,"line":2395},[84,88647,53293],{"class":154},[84,88649,52493],{"class":52449},[84,88651,16090],{"class":90},[84,88653,867],{"class":154},[84,88655,52540],{"class":158},[84,88657,52520],{"class":90},[84,88659,867],{"class":154},[84,88661,52547],{"class":158},[84,88663,52456],{"class":154},[84,88665,88666,88668,88670,88672,88674],{"class":86,"line":2401},[84,88667,53293],{"class":154},[84,88669,52556],{"class":52449},[84,88671,52559],{"class":154},[84,88673,52556],{"class":52449},[84,88675,52456],{"class":154},[84,88677,88678,88680,88682],{"class":86,"line":2492},[84,88679,52934],{"class":154},[84,88681,52483],{"class":52449},[84,88683,52456],{"class":154},[84,88685,88686],{"class":86,"line":2498},[84,88687,3578],{"emptyLinePlaceholder":1252},[84,88689,88690,88692,88694],{"class":86,"line":2510},[84,88691,2218],{"class":154},[84,88693,52949],{"class":52449},[84,88695,52456],{"class":154},[84,88697,88698,88700,88702,88704,88706],{"class":86,"line":2793},[84,88699,53293],{"class":154},[84,88701,52760],{"class":52449},[84,88703,56461],{"class":154},[84,88705,52760],{"class":52449},[84,88707,52456],{"class":154},[84,88709,88710,88712,88714],{"class":86,"line":2798},[84,88711,53293],{"class":154},[84,88713,52962],{"class":52449},[84,88715,52456],{"class":154},[84,88717,88718,88720,88722],{"class":86,"line":2804},[84,88719,71230],{"class":129},[84,88721,74919],{"class":90},[84,88723,12025],{"class":154},[84,88725,88726,88728,88730,88732,88734,88736,88738,88740,88742,88744,88747],{"class":86,"line":2809},[84,88727,56918],{"class":154},[84,88729,55547],{"class":90},[84,88731,155],{"class":154},[84,88733,83077],{"class":158},[84,88735,75395],{"class":154},[84,88737,867],{"class":129},[84,88739,12750],{"class":129},[84,88741,74935],{"class":90},[84,88743,18431],{"class":154},[84,88745,88746],{"class":90},"toLocaleString",[84,88748,183],{"class":154},[84,88750,88751,88754,88757,88759],{"class":86,"line":2823},[84,88752,88753],{"class":90},"      setTimeout",[84,88755,88756],{"class":154},"(getTime, ",[84,88758,7583],{"class":94},[84,88760,162],{"class":154},[84,88762,88763],{"class":86,"line":2828},[84,88764,3365],{"class":154},[84,88766,88767,88770],{"class":86,"line":2834},[84,88768,88769],{"class":90},"    getTime",[84,88771,183],{"class":154},[84,88773,88774,88776,88778],{"class":86,"line":2855},[84,88775,53566],{"class":154},[84,88777,52962],{"class":52449},[84,88779,52456],{"class":154},[84,88781,88782,88784,88786],{"class":86,"line":2860},[84,88783,52934],{"class":154},[84,88785,52949],{"class":52449},[84,88787,52456],{"class":154},[84,88789,88790],{"class":86,"line":2874},[84,88791,3578],{"emptyLinePlaceholder":1252},[84,88793,88794,88796,88798],{"class":86,"line":2879},[84,88795,52934],{"class":154},[84,88797,51784],{"class":52449},[84,88799,52456],{"class":154},[19,88801,88802],{},[2643,88803],{"alt":66,"src":88804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,88806,88807],{"start":112},[29,88808,88498],{},[19,88810,88811],{},[2643,88812],{"alt":66,"src":88813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88815,88816],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88818,40341],{},[19,88820,88821],{},"这个是简易版的递归函数深拷贝",[19,88823,88824],{},"一定要注意先数组再对象，因为万物皆可对象",[60,88826,88828],{"className":51782,"code":88827,"language":51784,"meta":66,"style":66},"\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",[39,88829,88830,88840,88854,88858,88866,88880,88900,88912,88920,88924,88932,88940,88950,88959,88967,88983,88987,88995,88999,89003,89015,89020,89039,89055,89060,89065,89070,89085,89090,89095,89104,89112,89129,89137,89143,89151,89156,89161,89170,89174,89178,89182,89193,89202,89212,89226,89236,89244,89252,89260,89264],{"__ignoreMap":66},[84,88831,88832,88834,88836,88838],{"class":86,"line":87},[84,88833,52446],{"class":154},[84,88835,52450],{"class":52449},[84,88837,52453],{"class":90},[84,88839,52456],{"class":154},[84,88841,88842,88844,88846,88848,88850,88852],{"class":86,"line":98},[84,88843,2218],{"class":154},[84,88845,51784],{"class":52449},[84,88847,52465],{"class":90},[84,88849,867],{"class":154},[84,88851,52470],{"class":158},[84,88853,52456],{"class":154},[84,88855,88856],{"class":86,"line":106},[84,88857,3578],{"emptyLinePlaceholder":1252},[84,88859,88860,88862,88864],{"class":86,"line":112},[84,88861,2218],{"class":154},[84,88863,52483],{"class":52449},[84,88865,52456],{"class":154},[84,88867,88868,88870,88872,88874,88876,88878],{"class":86,"line":425},[84,88869,53293],{"class":154},[84,88871,52493],{"class":52449},[84,88873,52496],{"class":90},[84,88875,867],{"class":154},[84,88877,52501],{"class":158},[84,88879,52456],{"class":154},[84,88881,88882,88884,88886,88888,88890,88892,88894,88896,88898],{"class":86,"line":2395},[84,88883,53293],{"class":154},[84,88885,52493],{"class":52449},[84,88887,16090],{"class":90},[84,88889,867],{"class":154},[84,88891,52540],{"class":158},[84,88893,52520],{"class":90},[84,88895,867],{"class":154},[84,88897,52547],{"class":158},[84,88899,52456],{"class":154},[84,88901,88902,88904,88906,88908,88910],{"class":86,"line":2401},[84,88903,53293],{"class":154},[84,88905,52556],{"class":52449},[84,88907,52559],{"class":154},[84,88909,52556],{"class":52449},[84,88911,52456],{"class":154},[84,88913,88914,88916,88918],{"class":86,"line":2492},[84,88915,52934],{"class":154},[84,88917,52483],{"class":52449},[84,88919,52456],{"class":154},[84,88921,88922],{"class":86,"line":2498},[84,88923,3578],{"emptyLinePlaceholder":1252},[84,88925,88926,88928,88930],{"class":86,"line":2510},[84,88927,2218],{"class":154},[84,88929,52949],{"class":52449},[84,88931,52456],{"class":154},[84,88933,88934,88936,88938],{"class":86,"line":2793},[84,88935,53293],{"class":154},[84,88937,52962],{"class":52449},[84,88939,52456],{"class":154},[84,88941,88942,88944,88946,88948],{"class":86,"line":2798},[84,88943,12393],{"class":129},[84,88945,71117],{"class":94},[84,88947,14735],{"class":129},[84,88949,16742],{"class":154},[84,88951,88952,88954,88957],{"class":86,"line":2804},[84,88953,72762],{"class":154},[84,88955,88956],{"class":158},"'pink'",[84,88958,32619],{"class":154},[84,88960,88961,88963,88965],{"class":86,"line":2809},[84,88962,72772],{"class":154},[84,88964,849],{"class":94},[84,88966,32619],{"class":154},[84,88968,88969,88972,88975,88977,88980],{"class":86,"line":2823},[84,88970,88971],{"class":154},"      hobby: [",[84,88973,88974],{"class":158},"'乒乓球'",[84,88976,846],{"class":154},[84,88978,88979],{"class":158},"'足球'",[84,88981,88982],{"class":154},"],\n",[84,88984,88985],{"class":86,"line":2828},[84,88986,79018],{"class":154},[84,88988,88989,88992],{"class":86,"line":2834},[84,88990,88991],{"class":154},"        baby: ",[84,88993,88994],{"class":158},"'小pink'\n",[84,88996,88997],{"class":86,"line":2855},[84,88998,53547],{"class":154},[84,89000,89001],{"class":86,"line":2860},[84,89002,3365],{"class":154},[84,89004,89005,89007,89010,89012],{"class":86,"line":2874},[84,89006,12393],{"class":129},[84,89008,89009],{"class":94}," o",[84,89011,14735],{"class":129},[84,89013,89014],{"class":154}," {}\n",[84,89016,89017],{"class":86,"line":2879},[84,89018,89019],{"class":1378},"    \u002F\u002F 拷贝函数\n",[84,89021,89022,89024,89027,89029,89032,89034,89037],{"class":86,"line":2908},[84,89023,71230],{"class":129},[84,89025,89026],{"class":90}," deepCopy",[84,89028,155],{"class":154},[84,89030,89031],{"class":928},"newObj",[84,89033,846],{"class":154},[84,89035,89036],{"class":928},"oldObj",[84,89038,13613],{"class":154},[84,89040,89041,89043,89045,89047,89050,89052],{"class":86,"line":2913},[84,89042,53433],{"class":129},[84,89044,2839],{"class":154},[84,89046,52996],{"class":129},[84,89048,89049],{"class":154}," k ",[84,89051,27206],{"class":129},[84,89053,89054],{"class":154}," oldObj) {\n",[84,89056,89057],{"class":86,"line":2930},[84,89058,89059],{"class":1378},"        \u002F\u002F 处理数组的问题\n",[84,89061,89062],{"class":86,"line":2935},[84,89063,89064],{"class":1378},"        \u002F\u002F 判断是否属于数组\n",[84,89066,89067],{"class":86,"line":2940},[84,89068,89069],{"class":1378},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[84,89071,89072,89074,89077,89080,89083],{"class":86,"line":2945},[84,89073,3675],{"class":129},[84,89075,89076],{"class":154}," (oldObj[k] ",[84,89078,89079],{"class":129},"instanceof",[84,89081,89082],{"class":90}," Array",[84,89084,13613],{"class":154},[84,89086,89087],{"class":86,"line":2959},[84,89088,89089],{"class":1378},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[84,89091,89092],{"class":86,"line":2964},[84,89093,89094],{"class":1378},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[84,89096,89097,89100,89102],{"class":86,"line":3755},[84,89098,89099],{"class":154},"          newObj[k] ",[84,89101,867],{"class":129},[84,89103,52987],{"class":154},[84,89105,89106,89109],{"class":86,"line":3769},[84,89107,89108],{"class":90},"          deepCopy",[84,89110,89111],{"class":154},"(newObj[k], oldObj[k])\n",[84,89113,89114,89116,89118,89120,89122,89124,89127],{"class":86,"line":3777},[84,89115,81226],{"class":154},[84,89117,2882],{"class":129},[84,89119,2885],{"class":129},[84,89121,89076],{"class":154},[84,89123,89079],{"class":129},[84,89125,89126],{"class":90}," Object",[84,89128,13613],{"class":154},[84,89130,89131,89133,89135],{"class":86,"line":3782},[84,89132,89099],{"class":154},[84,89134,867],{"class":129},[84,89136,89014],{"class":154},[84,89138,89139,89141],{"class":86,"line":3788},[84,89140,89108],{"class":90},[84,89142,89111],{"class":154},[84,89144,89145,89147,89149],{"class":86,"line":3794},[84,89146,81226],{"class":154},[84,89148,2882],{"class":129},[84,89150,16742],{"class":154},[84,89152,89153],{"class":86,"line":3799},[84,89154,89155],{"class":1378},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[84,89157,89158],{"class":86,"line":9120},[84,89159,89160],{"class":1378},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[84,89162,89163,89165,89167],{"class":86,"line":9144},[84,89164,89099],{"class":154},[84,89166,867],{"class":129},[84,89168,89169],{"class":154}," oldObj[k]\n",[84,89171,89172],{"class":86,"line":9149},[84,89173,3707],{"class":154},[84,89175,89176],{"class":86,"line":9155},[84,89177,53547],{"class":154},[84,89179,89180],{"class":86,"line":9182},[84,89181,3365],{"class":154},[84,89183,89184,89187,89190],{"class":86,"line":9187},[84,89185,89186],{"class":90},"    deepCopy",[84,89188,89189],{"class":154},"(o, obj) ",[84,89191,89192],{"class":1378},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[84,89194,89195,89197,89199],{"class":86,"line":9193},[84,89196,74899],{"class":154},[84,89198,59393],{"class":90},[84,89200,89201],{"class":154},"(o)\n",[84,89203,89204,89207,89209],{"class":86,"line":9205},[84,89205,89206],{"class":154},"    o.age ",[84,89208,867],{"class":129},[84,89210,89211],{"class":94}," 20\n",[84,89213,89214,89217,89219,89221,89223],{"class":86,"line":9217},[84,89215,89216],{"class":154},"    o.hobby[",[84,89218,1504],{"class":94},[84,89220,5620],{"class":154},[84,89222,867],{"class":129},[84,89224,89225],{"class":158}," '篮球'\n",[84,89227,89228,89231,89233],{"class":86,"line":9229},[84,89229,89230],{"class":154},"    o.family ",[84,89232,867],{"class":129},[84,89234,89235],{"class":158}," '老pink'\n",[84,89237,89238,89240,89242],{"class":86,"line":10888},[84,89239,74899],{"class":154},[84,89241,59393],{"class":90},[84,89243,71182],{"class":154},[84,89245,89246,89248,89250],{"class":86,"line":10913},[84,89247,53566],{"class":154},[84,89249,52962],{"class":52449},[84,89251,52456],{"class":154},[84,89253,89254,89256,89258],{"class":86,"line":10936},[84,89255,52934],{"class":154},[84,89257,52949],{"class":52449},[84,89259,52456],{"class":154},[84,89261,89262],{"class":86,"line":10960},[84,89263,3578],{"emptyLinePlaceholder":1252},[84,89265,89266,89268,89270],{"class":86,"line":10965},[84,89267,52934],{"class":154},[84,89269,51784],{"class":52449},[84,89271,52456],{"class":154},[19,89273,89274],{},[2643,89275],{"alt":66,"src":89276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23168,89278,89280,89281],{"id":89279},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1464,89282,89283],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89285,89286],{},[208,89287,89288],{"href":89288,"rel":89289},"https:\u002F\u002Fwww.lodashjs.com\u002F",[212],[19,89291,89292],{},"lodash里边的方法都要加上一个下划线_",[19,89294,89295],{},"_.cloneDeep()",[60,89297,89299],{"className":51782,"code":89298,"language":51784,"meta":66,"style":66},"\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",[39,89300,89301,89311,89325,89329,89337,89351,89371,89383,89391,89395,89403,89408,89427,89435,89445,89453,89461,89473,89477,89483,89487,89491,89507,89515,89524,89532,89540,89548,89552],{"__ignoreMap":66},[84,89302,89303,89305,89307,89309],{"class":86,"line":87},[84,89304,52446],{"class":154},[84,89306,52450],{"class":52449},[84,89308,52453],{"class":90},[84,89310,52456],{"class":154},[84,89312,89313,89315,89317,89319,89321,89323],{"class":86,"line":98},[84,89314,2218],{"class":154},[84,89316,51784],{"class":52449},[84,89318,52465],{"class":90},[84,89320,867],{"class":154},[84,89322,52470],{"class":158},[84,89324,52456],{"class":154},[84,89326,89327],{"class":86,"line":106},[84,89328,3578],{"emptyLinePlaceholder":1252},[84,89330,89331,89333,89335],{"class":86,"line":112},[84,89332,2218],{"class":154},[84,89334,52483],{"class":52449},[84,89336,52456],{"class":154},[84,89338,89339,89341,89343,89345,89347,89349],{"class":86,"line":425},[84,89340,53293],{"class":154},[84,89342,52493],{"class":52449},[84,89344,52496],{"class":90},[84,89346,867],{"class":154},[84,89348,52501],{"class":158},[84,89350,52456],{"class":154},[84,89352,89353,89355,89357,89359,89361,89363,89365,89367,89369],{"class":86,"line":2395},[84,89354,53293],{"class":154},[84,89356,52493],{"class":52449},[84,89358,16090],{"class":90},[84,89360,867],{"class":154},[84,89362,52540],{"class":158},[84,89364,52520],{"class":90},[84,89366,867],{"class":154},[84,89368,52547],{"class":158},[84,89370,52456],{"class":154},[84,89372,89373,89375,89377,89379,89381],{"class":86,"line":2401},[84,89374,53293],{"class":154},[84,89376,52556],{"class":52449},[84,89378,52559],{"class":154},[84,89380,52556],{"class":52449},[84,89382,52456],{"class":154},[84,89384,89385,89387,89389],{"class":86,"line":2492},[84,89386,52934],{"class":154},[84,89388,52483],{"class":52449},[84,89390,52456],{"class":154},[84,89392,89393],{"class":86,"line":2498},[84,89394,3578],{"emptyLinePlaceholder":1252},[84,89396,89397,89399,89401],{"class":86,"line":2510},[84,89398,2218],{"class":154},[84,89400,52949],{"class":52449},[84,89402,52456],{"class":154},[84,89404,89405],{"class":86,"line":2793},[84,89406,89407],{"class":1378},"  \u003C!-- 先引用这个库 -->\n",[84,89409,89410,89412,89414,89416,89418,89421,89423,89425],{"class":86,"line":2798},[84,89411,53293],{"class":154},[84,89413,52962],{"class":52449},[84,89415,56386],{"class":90},[84,89417,867],{"class":154},[84,89419,89420],{"class":158},"\"lodash.min.js\"",[84,89422,56461],{"class":154},[84,89424,52962],{"class":52449},[84,89426,52456],{"class":154},[84,89428,89429,89431,89433],{"class":86,"line":2804},[84,89430,53293],{"class":154},[84,89432,52962],{"class":52449},[84,89434,52456],{"class":154},[84,89436,89437,89439,89441,89443],{"class":86,"line":2809},[84,89438,12393],{"class":129},[84,89440,71117],{"class":94},[84,89442,14735],{"class":129},[84,89444,16742],{"class":154},[84,89446,89447,89449,89451],{"class":86,"line":2823},[84,89448,72762],{"class":154},[84,89450,88956],{"class":158},[84,89452,32619],{"class":154},[84,89454,89455,89457,89459],{"class":86,"line":2828},[84,89456,72772],{"class":154},[84,89458,849],{"class":94},[84,89460,32619],{"class":154},[84,89462,89463,89465,89467,89469,89471],{"class":86,"line":2834},[84,89464,88971],{"class":154},[84,89466,88974],{"class":158},[84,89468,846],{"class":154},[84,89470,88979],{"class":158},[84,89472,88982],{"class":154},[84,89474,89475],{"class":86,"line":2855},[84,89476,79018],{"class":154},[84,89478,89479,89481],{"class":86,"line":2860},[84,89480,88991],{"class":154},[84,89482,88994],{"class":158},[84,89484,89485],{"class":86,"line":2874},[84,89486,53547],{"class":154},[84,89488,89489],{"class":86,"line":2879},[84,89490,3365],{"class":154},[84,89492,89493,89495,89497,89499,89502,89505],{"class":86,"line":2908},[84,89494,12393],{"class":129},[84,89496,89009],{"class":94},[84,89498,14735],{"class":129},[84,89500,89501],{"class":154}," _.",[84,89503,89504],{"class":90},"cloneDeep",[84,89506,71182],{"class":154},[84,89508,89509,89511,89513],{"class":86,"line":2913},[84,89510,74899],{"class":154},[84,89512,59393],{"class":90},[84,89514,89201],{"class":154},[84,89516,89517,89520,89522],{"class":86,"line":2930},[84,89518,89519],{"class":154},"    o.family.baby ",[84,89521,867],{"class":129},[84,89523,89235],{"class":158},[84,89525,89526,89528,89530],{"class":86,"line":2935},[84,89527,74899],{"class":154},[84,89529,59393],{"class":90},[84,89531,71182],{"class":154},[84,89533,89534,89536,89538],{"class":86,"line":2940},[84,89535,53566],{"class":154},[84,89537,52962],{"class":52449},[84,89539,52456],{"class":154},[84,89541,89542,89544,89546],{"class":86,"line":2945},[84,89543,52934],{"class":154},[84,89545,52949],{"class":52449},[84,89547,52456],{"class":154},[84,89549,89550],{"class":86,"line":2959},[84,89551,3578],{"emptyLinePlaceholder":1252},[84,89553,89554,89556,89558],{"class":86,"line":2964},[84,89555,52934],{"class":154},[84,89557,51784],{"class":52449},[84,89559,52456],{"class":154},[19,89561,89562],{},[2643,89563],{"alt":66,"src":89564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23168,89566,89568],{"id":89567},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[60,89570,89572],{"className":51782,"code":89571,"language":51784,"meta":66,"style":66},"\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",[39,89573,89574,89584,89598,89602,89610,89624,89644,89656,89664,89668,89676,89684,89694,89702,89710,89722,89726,89732,89736,89740,89745,89750,89755,89781,89789,89798,89806,89814,89822,89826],{"__ignoreMap":66},[84,89575,89576,89578,89580,89582],{"class":86,"line":87},[84,89577,52446],{"class":154},[84,89579,52450],{"class":52449},[84,89581,52453],{"class":90},[84,89583,52456],{"class":154},[84,89585,89586,89588,89590,89592,89594,89596],{"class":86,"line":98},[84,89587,2218],{"class":154},[84,89589,51784],{"class":52449},[84,89591,52465],{"class":90},[84,89593,867],{"class":154},[84,89595,52470],{"class":158},[84,89597,52456],{"class":154},[84,89599,89600],{"class":86,"line":106},[84,89601,3578],{"emptyLinePlaceholder":1252},[84,89603,89604,89606,89608],{"class":86,"line":112},[84,89605,2218],{"class":154},[84,89607,52483],{"class":52449},[84,89609,52456],{"class":154},[84,89611,89612,89614,89616,89618,89620,89622],{"class":86,"line":425},[84,89613,53293],{"class":154},[84,89615,52493],{"class":52449},[84,89617,52496],{"class":90},[84,89619,867],{"class":154},[84,89621,52501],{"class":158},[84,89623,52456],{"class":154},[84,89625,89626,89628,89630,89632,89634,89636,89638,89640,89642],{"class":86,"line":2395},[84,89627,53293],{"class":154},[84,89629,52493],{"class":52449},[84,89631,16090],{"class":90},[84,89633,867],{"class":154},[84,89635,52540],{"class":158},[84,89637,52520],{"class":90},[84,89639,867],{"class":154},[84,89641,52547],{"class":158},[84,89643,52456],{"class":154},[84,89645,89646,89648,89650,89652,89654],{"class":86,"line":2401},[84,89647,53293],{"class":154},[84,89649,52556],{"class":52449},[84,89651,52559],{"class":154},[84,89653,52556],{"class":52449},[84,89655,52456],{"class":154},[84,89657,89658,89660,89662],{"class":86,"line":2492},[84,89659,52934],{"class":154},[84,89661,52483],{"class":52449},[84,89663,52456],{"class":154},[84,89665,89666],{"class":86,"line":2498},[84,89667,3578],{"emptyLinePlaceholder":1252},[84,89669,89670,89672,89674],{"class":86,"line":2510},[84,89671,2218],{"class":154},[84,89673,52949],{"class":52449},[84,89675,52456],{"class":154},[84,89677,89678,89680,89682],{"class":86,"line":2793},[84,89679,53293],{"class":154},[84,89681,52962],{"class":52449},[84,89683,52456],{"class":154},[84,89685,89686,89688,89690,89692],{"class":86,"line":2798},[84,89687,12393],{"class":129},[84,89689,71117],{"class":94},[84,89691,14735],{"class":129},[84,89693,16742],{"class":154},[84,89695,89696,89698,89700],{"class":86,"line":2804},[84,89697,72762],{"class":154},[84,89699,88956],{"class":158},[84,89701,32619],{"class":154},[84,89703,89704,89706,89708],{"class":86,"line":2809},[84,89705,72772],{"class":154},[84,89707,849],{"class":94},[84,89709,32619],{"class":154},[84,89711,89712,89714,89716,89718,89720],{"class":86,"line":2823},[84,89713,88971],{"class":154},[84,89715,88974],{"class":158},[84,89717,846],{"class":154},[84,89719,88979],{"class":158},[84,89721,88982],{"class":154},[84,89723,89724],{"class":86,"line":2828},[84,89725,79018],{"class":154},[84,89727,89728,89730],{"class":86,"line":2834},[84,89729,88991],{"class":154},[84,89731,88994],{"class":158},[84,89733,89734],{"class":86,"line":2855},[84,89735,53547],{"class":154},[84,89737,89738],{"class":86,"line":2860},[84,89739,3365],{"class":154},[84,89741,89742],{"class":86,"line":2874},[84,89743,89744],{"class":1378},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[84,89746,89747],{"class":86,"line":2879},[84,89748,89749],{"class":1378},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[84,89751,89752],{"class":86,"line":2908},[84,89753,89754],{"class":1378},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[84,89756,89757,89759,89761,89763,89766,89768,89771,89773,89775,89777,89779],{"class":86,"line":2913},[84,89758,12393],{"class":129},[84,89760,89009],{"class":94},[84,89762,14735],{"class":129},[84,89764,89765],{"class":94}," JSON",[84,89767,1867],{"class":154},[84,89769,89770],{"class":90},"parse",[84,89772,155],{"class":154},[84,89774,72810],{"class":94},[84,89776,1867],{"class":154},[84,89778,72815],{"class":90},[84,89780,72818],{"class":154},[84,89782,89783,89785,89787],{"class":86,"line":2930},[84,89784,74899],{"class":154},[84,89786,59393],{"class":90},[84,89788,89201],{"class":154},[84,89790,89791,89793,89795],{"class":86,"line":2935},[84,89792,89519],{"class":154},[84,89794,867],{"class":129},[84,89796,89797],{"class":158}," '123'\n",[84,89799,89800,89802,89804],{"class":86,"line":2940},[84,89801,74899],{"class":154},[84,89803,59393],{"class":90},[84,89805,71182],{"class":154},[84,89807,89808,89810,89812],{"class":86,"line":2945},[84,89809,53566],{"class":154},[84,89811,52962],{"class":52449},[84,89813,52456],{"class":154},[84,89815,89816,89818,89820],{"class":86,"line":2959},[84,89817,52934],{"class":154},[84,89819,52949],{"class":52449},[84,89821,52456],{"class":154},[84,89823,89824],{"class":86,"line":2964},[84,89825,3578],{"emptyLinePlaceholder":1252},[84,89827,89828,89830,89832],{"class":86,"line":3755},[84,89829,52934],{"class":154},[84,89831,51784],{"class":52449},[84,89833,52456],{"class":154},[19,89835,89836],{},[2643,89837],{"alt":66,"src":89838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89840,89842],{"id":89841},"_415-异常处理","4.15 异常处理",[26,89844,89845],{},[29,89846,89847],{},"throw抛异常",[19,89849,89850],{},[2643,89851],{"alt":66,"src":89852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,89854,89855],{"start":98},[29,89856,89857],{},"try\u002Fcatch 捕获错误信息",[19,89859,89860],{},[2643,89861],{"alt":66,"src":89862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[60,89864,89866],{"className":51782,"code":89865,"language":51784,"meta":66,"style":66},"\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",[39,89867,89868,89878,89892,89896,89904,89918,89938,89950,89958,89962,89970,89982,89990,89999,90006,90011,90030,90039,90050,90055,90065,90070,90075,90080,90097,90101,90106,90113,90125,90129,90141,90145,90149,90154,90159,90166,90174,90182,90186],{"__ignoreMap":66},[84,89869,89870,89872,89874,89876],{"class":86,"line":87},[84,89871,52446],{"class":154},[84,89873,52450],{"class":52449},[84,89875,52453],{"class":90},[84,89877,52456],{"class":154},[84,89879,89880,89882,89884,89886,89888,89890],{"class":86,"line":98},[84,89881,2218],{"class":154},[84,89883,51784],{"class":52449},[84,89885,52465],{"class":90},[84,89887,867],{"class":154},[84,89889,52470],{"class":158},[84,89891,52456],{"class":154},[84,89893,89894],{"class":86,"line":106},[84,89895,3578],{"emptyLinePlaceholder":1252},[84,89897,89898,89900,89902],{"class":86,"line":112},[84,89899,2218],{"class":154},[84,89901,52483],{"class":52449},[84,89903,52456],{"class":154},[84,89905,89906,89908,89910,89912,89914,89916],{"class":86,"line":425},[84,89907,53293],{"class":154},[84,89909,52493],{"class":52449},[84,89911,52496],{"class":90},[84,89913,867],{"class":154},[84,89915,52501],{"class":158},[84,89917,52456],{"class":154},[84,89919,89920,89922,89924,89926,89928,89930,89932,89934,89936],{"class":86,"line":2395},[84,89921,53293],{"class":154},[84,89923,52493],{"class":52449},[84,89925,16090],{"class":90},[84,89927,867],{"class":154},[84,89929,52540],{"class":158},[84,89931,52520],{"class":90},[84,89933,867],{"class":154},[84,89935,52547],{"class":158},[84,89937,52456],{"class":154},[84,89939,89940,89942,89944,89946,89948],{"class":86,"line":2401},[84,89941,53293],{"class":154},[84,89943,52556],{"class":52449},[84,89945,52559],{"class":154},[84,89947,52556],{"class":52449},[84,89949,52456],{"class":154},[84,89951,89952,89954,89956],{"class":86,"line":2492},[84,89953,52934],{"class":154},[84,89955,52483],{"class":52449},[84,89957,52456],{"class":154},[84,89959,89960],{"class":86,"line":2498},[84,89961,3578],{"emptyLinePlaceholder":1252},[84,89963,89964,89966,89968],{"class":86,"line":2510},[84,89965,2218],{"class":154},[84,89967,52949],{"class":52449},[84,89969,52456],{"class":154},[84,89971,89972,89974,89976,89978,89980],{"class":86,"line":2793},[84,89973,53293],{"class":154},[84,89975,19],{"class":52449},[84,89977,54643],{"class":154},[84,89979,19],{"class":52449},[84,89981,52456],{"class":154},[84,89983,89984,89986,89988],{"class":86,"line":2798},[84,89985,53293],{"class":154},[84,89987,52962],{"class":52449},[84,89989,52456],{"class":154},[84,89991,89992,89994,89997],{"class":86,"line":2804},[84,89993,71230],{"class":129},[84,89995,89996],{"class":90}," fn",[84,89998,12025],{"class":154},[84,90000,90001,90004],{"class":86,"line":2809},[84,90002,90003],{"class":129},"      try",[84,90005,16742],{"class":154},[84,90007,90008],{"class":86,"line":2823},[84,90009,90010],{"class":1378},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[84,90012,90013,90015,90017,90019,90021,90023,90025,90028],{"class":86,"line":2828},[84,90014,62416],{"class":129},[84,90016,7997],{"class":94},[84,90018,14735],{"class":129},[84,90020,55544],{"class":154},[84,90022,55547],{"class":90},[84,90024,155],{"class":154},[84,90026,90027],{"class":158},"'.p'",[84,90029,162],{"class":154},[84,90031,90032,90035,90037],{"class":86,"line":2834},[84,90033,90034],{"class":154},"        p.style.color ",[84,90036,867],{"class":129},[84,90038,68197],{"class":158},[84,90040,90041,90044,90047],{"class":86,"line":2855},[84,90042,90043],{"class":154},"      } ",[84,90045,90046],{"class":129},"catch",[84,90048,90049],{"class":154}," (err) {\n",[84,90051,90052],{"class":86,"line":2860},[84,90053,90054],{"class":1378},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[84,90056,90057,90060,90062],{"class":86,"line":2874},[84,90058,90059],{"class":154},"        console.",[84,90061,59393],{"class":90},[84,90063,90064],{"class":154},"(err.message)\n",[84,90066,90067],{"class":86,"line":2879},[84,90068,90069],{"class":1378},"        \u002F\u002F 想要中断程序，需要加return\n",[84,90071,90072],{"class":86,"line":2908},[84,90073,90074],{"class":1378},"        \u002F\u002F return\n",[84,90076,90077],{"class":86,"line":2913},[84,90078,90079],{"class":1378},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[84,90081,90082,90085,90087,90090,90092,90095],{"class":86,"line":2930},[84,90083,90084],{"class":129},"        throw",[84,90086,12750],{"class":129},[84,90088,90089],{"class":90}," Error",[84,90091,155],{"class":154},[84,90093,90094],{"class":158},"'你看看，选择器错误了吧'",[84,90096,162],{"class":154},[84,90098,90099],{"class":86,"line":2935},[84,90100,53547],{"class":154},[84,90102,90103],{"class":86,"line":2940},[84,90104,90105],{"class":1378},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[84,90107,90108,90111],{"class":86,"line":2945},[84,90109,90110],{"class":129},"      finally",[84,90112,16742],{"class":154},[84,90114,90115,90118,90120,90123],{"class":86,"line":2959},[84,90116,90117],{"class":90},"        alert",[84,90119,155],{"class":154},[84,90121,90122],{"class":158},"'弹出对话框'",[84,90124,162],{"class":154},[84,90126,90127],{"class":86,"line":2964},[84,90128,53547],{"class":154},[84,90130,90131,90133,90135,90137,90139],{"class":86,"line":3755},[84,90132,59390],{"class":154},[84,90134,59393],{"class":90},[84,90136,155],{"class":154},[84,90138,1781],{"class":94},[84,90140,162],{"class":154},[84,90142,90143],{"class":86,"line":3769},[84,90144,3578],{"emptyLinePlaceholder":1252},[84,90146,90147],{"class":86,"line":3777},[84,90148,3365],{"class":154},[84,90150,90151],{"class":86,"line":3782},[84,90152,90153],{"class":1378},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[84,90155,90156],{"class":86,"line":3788},[84,90157,90158],{"class":1378},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[84,90160,90161,90164],{"class":86,"line":3794},[84,90162,90163],{"class":90},"    fn",[84,90165,183],{"class":154},[84,90167,90168,90170,90172],{"class":86,"line":3799},[84,90169,53566],{"class":154},[84,90171,52962],{"class":52449},[84,90173,52456],{"class":154},[84,90175,90176,90178,90180],{"class":86,"line":9120},[84,90177,52934],{"class":154},[84,90179,52949],{"class":52449},[84,90181,52456],{"class":154},[84,90183,90184],{"class":86,"line":9144},[84,90185,3578],{"emptyLinePlaceholder":1252},[84,90187,90188,90190,90192],{"class":86,"line":9149},[84,90189,52934],{"class":154},[84,90191,51784],{"class":52449},[84,90193,52456],{"class":154},[19,90195,90196],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,90198,90199],{"start":106},[29,90200,90201],{},"debugger",[19,90203,90204],{},[2643,90205],{"alt":66,"src":90206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90208,90209],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90211,90213],{"id":90212},"_416-处理this","4.16 处理this",[198,90215,90217],{"id":90216},"_4161-this的指向","4.16.1 this的指向",[26,90219,90220],{},[29,90221,90222],{},"普通函数的this",[19,90224,90225],{},[2643,90226],{"alt":66,"src":90227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,90229,90230],{"start":98},[29,90231,90232],{},"箭头函数的this",[19,90234,90235],{},[2643,90236],{"alt":66,"src":90237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90239,90240],{},[2643,90241],{"alt":66,"src":90242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90244,90245],{},[2643,90246],{"alt":66,"src":90247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[198,90249,90251],{"id":90250},"_4162-this的改变","4.16.2 this的改变",[19,90253,90254],{},"call() apply() bind()",[26,90256,90257],{},[29,90258,90259],{},"call()",[19,90261,90262],{},[2643,90263],{"alt":66,"src":90264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90266,90267],{},"两个作用：①调用函数；②改变this指向",[60,90269,90271],{"className":54216,"code":90270,"language":54218,"meta":66,"style":66},"\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",[39,90272,90273,90281,90289,90293,90298,90302,90307,90312,90317,90321,90326,90334],{"__ignoreMap":66},[84,90274,90275,90277,90279],{"class":86,"line":87},[84,90276,2218],{"class":154},[84,90278,52949],{"class":52449},[84,90280,52456],{"class":154},[84,90282,90283,90285,90287],{"class":86,"line":98},[84,90284,53293],{"class":154},[84,90286,52962],{"class":52449},[84,90288,52456],{"class":154},[84,90290,90291],{"class":86,"line":106},[84,90292,72669],{"class":154},[84,90294,90295],{"class":86,"line":112},[84,90296,90297],{"class":154},"      uname: 'pink'\n",[84,90299,90300],{"class":86,"line":425},[84,90301,3365],{"class":154},[84,90303,90304],{"class":86,"line":2395},[84,90305,90306],{"class":154},"    function fn(x, y) {\n",[84,90308,90309],{"class":86,"line":2401},[84,90310,90311],{"class":154},"      console.log(this)  \u002F\u002Fwindow\n",[84,90313,90314],{"class":86,"line":2492},[84,90315,90316],{"class":154},"      console.log(x + y)\n",[84,90318,90319],{"class":86,"line":2498},[84,90320,3365],{"class":154},[84,90322,90323],{"class":86,"line":2510},[84,90324,90325],{"class":154},"    fn.call(obj, 1, 2)\n",[84,90327,90328,90330,90332],{"class":86,"line":2793},[84,90329,53566],{"class":154},[84,90331,52962],{"class":52449},[84,90333,52456],{"class":154},[84,90335,90336,90338,90340],{"class":86,"line":2798},[84,90337,52934],{"class":154},[84,90339,52949],{"class":52449},[84,90341,52456],{"class":154},[19,90343,90344],{},[2643,90345],{"alt":66,"src":90346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,90348,90349],{"start":98},[29,90350,90351],{},"apply()",[19,90353,90354],{},[2643,90355],{"alt":66,"src":90356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90358,90267],{},[19,90360,90361],{},"call传递的是普通参数，而apply必须传递的是数组",[60,90363,90365],{"className":51782,"code":90364,"language":51784,"meta":66,"style":66},"\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",[39,90366,90367,90377,90391,90395,90403,90417,90437,90449,90457,90461,90469,90477,90487,90494,90498,90503,90519,90531,90545,90549,90554,90573,90578,90582,90587,90592,90600,90605,90627,90632,90648,90664,90676,90680,90685,90704,90712,90720,90724],{"__ignoreMap":66},[84,90368,90369,90371,90373,90375],{"class":86,"line":87},[84,90370,52446],{"class":154},[84,90372,52450],{"class":52449},[84,90374,52453],{"class":90},[84,90376,52456],{"class":154},[84,90378,90379,90381,90383,90385,90387,90389],{"class":86,"line":98},[84,90380,2218],{"class":154},[84,90382,51784],{"class":52449},[84,90384,52465],{"class":90},[84,90386,867],{"class":154},[84,90388,52470],{"class":158},[84,90390,52456],{"class":154},[84,90392,90393],{"class":86,"line":106},[84,90394,3578],{"emptyLinePlaceholder":1252},[84,90396,90397,90399,90401],{"class":86,"line":112},[84,90398,2218],{"class":154},[84,90400,52483],{"class":52449},[84,90402,52456],{"class":154},[84,90404,90405,90407,90409,90411,90413,90415],{"class":86,"line":425},[84,90406,53293],{"class":154},[84,90408,52493],{"class":52449},[84,90410,52496],{"class":90},[84,90412,867],{"class":154},[84,90414,52501],{"class":158},[84,90416,52456],{"class":154},[84,90418,90419,90421,90423,90425,90427,90429,90431,90433,90435],{"class":86,"line":2395},[84,90420,53293],{"class":154},[84,90422,52493],{"class":52449},[84,90424,16090],{"class":90},[84,90426,867],{"class":154},[84,90428,52540],{"class":158},[84,90430,52520],{"class":90},[84,90432,867],{"class":154},[84,90434,52547],{"class":158},[84,90436,52456],{"class":154},[84,90438,90439,90441,90443,90445,90447],{"class":86,"line":2401},[84,90440,53293],{"class":154},[84,90442,52556],{"class":52449},[84,90444,52559],{"class":154},[84,90446,52556],{"class":52449},[84,90448,52456],{"class":154},[84,90450,90451,90453,90455],{"class":86,"line":2492},[84,90452,52934],{"class":154},[84,90454,52483],{"class":52449},[84,90456,52456],{"class":154},[84,90458,90459],{"class":86,"line":2498},[84,90460,3578],{"emptyLinePlaceholder":1252},[84,90462,90463,90465,90467],{"class":86,"line":2510},[84,90464,2218],{"class":154},[84,90466,52949],{"class":52449},[84,90468,52456],{"class":154},[84,90470,90471,90473,90475],{"class":86,"line":2793},[84,90472,53293],{"class":154},[84,90474,52962],{"class":52449},[84,90476,52456],{"class":154},[84,90478,90479,90481,90483,90485],{"class":86,"line":2798},[84,90480,12393],{"class":129},[84,90482,71117],{"class":94},[84,90484,14735],{"class":129},[84,90486,16742],{"class":154},[84,90488,90489,90491],{"class":86,"line":2804},[84,90490,72772],{"class":154},[84,90492,90493],{"class":94},"18\n",[84,90495,90496],{"class":86,"line":2809},[84,90497,3365],{"class":154},[84,90499,90500],{"class":86,"line":2823},[84,90501,90502],{"class":1378},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[84,90504,90505,90507,90509,90511,90513,90515,90517],{"class":86,"line":2828},[84,90506,71230],{"class":129},[84,90508,89996],{"class":90},[84,90510,155],{"class":154},[84,90512,2128],{"class":928},[84,90514,846],{"class":154},[84,90516,2153],{"class":928},[84,90518,13613],{"class":154},[84,90520,90521,90523,90525,90527,90529],{"class":86,"line":2834},[84,90522,59390],{"class":154},[84,90524,59393],{"class":90},[84,90526,155],{"class":154},[84,90528,88139],{"class":94},[84,90530,162],{"class":154},[84,90532,90533,90535,90537,90540,90542],{"class":86,"line":2855},[84,90534,59390],{"class":154},[84,90536,59393],{"class":90},[84,90538,90539],{"class":154},"(x ",[84,90541,1790],{"class":129},[84,90543,90544],{"class":154}," y)\n",[84,90546,90547],{"class":86,"line":2860},[84,90548,3365],{"class":154},[84,90550,90551],{"class":86,"line":2874},[84,90552,90553],{"class":1378},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[84,90555,90556,90559,90562,90565,90567,90569,90571],{"class":86,"line":2879},[84,90557,90558],{"class":154},"    fn.",[84,90560,90561],{"class":90},"apply",[84,90563,90564],{"class":154},"(obj, [",[84,90566,1529],{"class":94},[84,90568,846],{"class":154},[84,90570,1397],{"class":94},[84,90572,5834],{"class":154},[84,90574,90575],{"class":86,"line":2908},[84,90576,90577],{"class":1378},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[84,90579,90580],{"class":86,"line":2913},[84,90581,3578],{"emptyLinePlaceholder":1252},[84,90583,90584],{"class":86,"line":2930},[84,90585,90586],{"class":1378},"    \u002F\u002F 使用场景：求数组最大值\n",[84,90588,90589],{"class":86,"line":2935},[84,90590,90591],{"class":1378},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[84,90593,90594,90597],{"class":86,"line":2940},[84,90595,90596],{"class":1378},"    \u002F\u002F console.log(max)",[84,90598,90599],{"class":1378},"   \u002F\u002F3\n",[84,90601,90602],{"class":86,"line":2945},[84,90603,90604],{"class":1378},"    \u002F\u002F 指向空或者Math都是可以的\n",[84,90606,90607,90609,90611,90613,90615,90617,90619,90621,90623,90625],{"class":86,"line":2959},[84,90608,12393],{"class":129},[84,90610,58842],{"class":94},[84,90612,14735],{"class":129},[84,90614,53375],{"class":154},[84,90616,821],{"class":94},[84,90618,846],{"class":154},[84,90620,1813],{"class":94},[84,90622,846],{"class":154},[84,90624,1844],{"class":94},[84,90626,34398],{"class":154},[84,90628,90629],{"class":86,"line":2964},[84,90630,90631],{"class":1378},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[84,90633,90634,90636,90638,90640,90643,90645],{"class":86,"line":3755},[84,90635,12393],{"class":129},[84,90637,7124],{"class":94},[84,90639,14735],{"class":129},[84,90641,90642],{"class":154}," Math.max.",[84,90644,90561],{"class":90},[84,90646,90647],{"class":154},"(Math, arr)\n",[84,90649,90650,90652,90655,90657,90660,90662],{"class":86,"line":3769},[84,90651,12393],{"class":129},[84,90653,90654],{"class":94}," min",[84,90656,14735],{"class":129},[84,90658,90659],{"class":154}," Math.min.",[84,90661,90561],{"class":90},[84,90663,90647],{"class":154},[84,90665,90666,90668,90670,90673],{"class":86,"line":3777},[84,90667,74899],{"class":154},[84,90669,59393],{"class":90},[84,90671,90672],{"class":154},"(max, min)     ",[84,90674,90675],{"class":1378},"\u002F\u002F100,4\n",[84,90677,90678],{"class":86,"line":3782},[84,90679,3578],{"emptyLinePlaceholder":1252},[84,90681,90682],{"class":86,"line":3788},[84,90683,90684],{"class":1378},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[84,90686,90687,90689,90691,90694,90696,90698,90701],{"class":86,"line":3794},[84,90688,74899],{"class":154},[84,90690,59393],{"class":90},[84,90692,90693],{"class":154},"(Max.",[84,90695,7188],{"class":90},[84,90697,155],{"class":154},[84,90699,90700],{"class":129},"...",[84,90702,90703],{"class":154},"arr))\n",[84,90705,90706,90708,90710],{"class":86,"line":3799},[84,90707,53566],{"class":154},[84,90709,52962],{"class":52449},[84,90711,52456],{"class":154},[84,90713,90714,90716,90718],{"class":86,"line":9120},[84,90715,52934],{"class":154},[84,90717,52949],{"class":52449},[84,90719,52456],{"class":154},[84,90721,90722],{"class":86,"line":9144},[84,90723,3578],{"emptyLinePlaceholder":1252},[84,90725,90726,90728,90730],{"class":86,"line":9149},[84,90727,52934],{"class":154},[84,90729,51784],{"class":52449},[84,90731,52456],{"class":154},[19,90733,90734],{},[2643,90735],{"alt":66,"src":90736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,90738,90739],{"start":106},[29,90740,90741],{},"bind()",[19,90743,90744],{},[2643,90745],{"alt":66,"src":90746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90748,90749],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90751,90752],{},"bind的语法跟call很相似",[60,90754,90756],{"className":54216,"code":90755,"language":54218,"meta":66,"style":66},"\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",[39,90757,90758,90766,90774,90778,90783,90787,90791,90796,90800,90805,90810,90815,90820,90825,90830,90835,90839,90847],{"__ignoreMap":66},[84,90759,90760,90762,90764],{"class":86,"line":87},[84,90761,2218],{"class":154},[84,90763,52949],{"class":52449},[84,90765,52456],{"class":154},[84,90767,90768,90770,90772],{"class":86,"line":98},[84,90769,53293],{"class":154},[84,90771,52962],{"class":52449},[84,90773,52456],{"class":154},[84,90775,90776],{"class":86,"line":106},[84,90777,72669],{"class":154},[84,90779,90780],{"class":86,"line":112},[84,90781,90782],{"class":154},"      age: 18\n",[84,90784,90785],{"class":86,"line":425},[84,90786,3365],{"class":154},[84,90788,90789],{"class":86,"line":2395},[84,90790,78289],{"class":154},[84,90792,90793],{"class":86,"line":2401},[84,90794,90795],{"class":154},"      console.log(this)\n",[84,90797,90798],{"class":86,"line":2492},[84,90799,3365],{"class":154},[84,90801,90802],{"class":86,"line":2498},[84,90803,90804],{"class":154},"    \u002F\u002F 1.bind 不会调用函数\n",[84,90806,90807],{"class":86,"line":2510},[84,90808,90809],{"class":154},"    \u002F\u002F 2.bind能改变this的指向\n",[84,90811,90812],{"class":86,"line":2793},[84,90813,90814],{"class":154},"    fn.bind()\n",[84,90816,90817],{"class":86,"line":2798},[84,90818,90819],{"class":154},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[84,90821,90822],{"class":86,"line":2804},[84,90823,90824],{"class":154},"    const fun = fn.bind(obj)\n",[84,90826,90827],{"class":86,"line":2809},[84,90828,90829],{"class":154},"    \u002F\u002F console.log(fun)\n",[84,90831,90832],{"class":86,"line":2823},[84,90833,90834],{"class":154},"    \u002F\u002F 调用,查看this的指向\n",[84,90836,90837],{"class":86,"line":2828},[84,90838,53800],{"class":154},[84,90840,90841,90843,90845],{"class":86,"line":2834},[84,90842,53566],{"class":154},[84,90844,52962],{"class":52449},[84,90846,52456],{"class":154},[84,90848,90849,90851,90853],{"class":86,"line":2855},[84,90850,52934],{"class":154},[84,90852,52949],{"class":52449},[84,90854,52456],{"class":154},[19,90856,90857],{},[2643,90858],{"alt":66,"src":90859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,90861,90862],{"start":112},[29,90863,90864],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[60,90866,90868],{"className":54216,"code":90867,"language":54218,"meta":66,"style":66},"\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",[39,90869,90870,90878,90891,90899,90904,90908,90913,90918,90923,90928,90933,90938,90943,90948,90952,90960],{"__ignoreMap":66},[84,90871,90872,90874,90876],{"class":86,"line":87},[84,90873,2218],{"class":154},[84,90875,52949],{"class":52449},[84,90877,52456],{"class":154},[84,90879,90880,90882,90884,90887,90889],{"class":86,"line":98},[84,90881,53293],{"class":154},[84,90883,55036],{"class":52449},[84,90885,90886],{"class":154},">禁用\u003C\u002F",[84,90888,55036],{"class":52449},[84,90890,52456],{"class":154},[84,90892,90893,90895,90897],{"class":86,"line":106},[84,90894,53293],{"class":154},[84,90896,52962],{"class":52449},[84,90898,52456],{"class":154},[84,90900,90901],{"class":86,"line":112},[84,90902,90903],{"class":154},"    const btn = document.querySelector('button')\n",[84,90905,90906],{"class":86,"line":425},[84,90907,60162],{"class":154},[84,90909,90910],{"class":86,"line":2395},[84,90911,90912],{"class":154},"      this.disabled = true\n",[84,90914,90915],{"class":86,"line":2401},[84,90916,90917],{"class":154},"      \u002F\u002F 定时器是window进行调用的\n",[84,90919,90920],{"class":86,"line":2492},[84,90921,90922],{"class":154},"      setTimeout(function () {\n",[84,90924,90925],{"class":86,"line":2498},[84,90926,90927],{"class":154},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[84,90929,90930],{"class":86,"line":2510},[84,90931,90932],{"class":154},"        this.disabled = false\n",[84,90934,90935],{"class":86,"line":2793},[84,90936,90937],{"class":154},"      }.bind(this), 2000)\n",[84,90939,90940],{"class":86,"line":2798},[84,90941,90942],{"class":154},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[84,90944,90945],{"class":86,"line":2804},[84,90946,90947],{"class":154},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[84,90949,90950],{"class":86,"line":2809},[84,90951,34613],{"class":154},[84,90953,90954,90956,90958],{"class":86,"line":2823},[84,90955,53566],{"class":154},[84,90957,52962],{"class":52449},[84,90959,52456],{"class":154},[84,90961,90962,90964,90966],{"class":86,"line":2828},[84,90963,52934],{"class":154},[84,90965,52949],{"class":52449},[84,90967,52456],{"class":154},[26,90969,90970],{"start":425},[29,90971,23123],{},[19,90973,90974],{},[2643,90975],{"alt":66,"src":90976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90978,90980],{"id":90979},"_417-性能优化","4.17 性能优化",[198,90982,90984],{"id":90983},"_4171-防抖","4.17.1 防抖",[19,90986,90987],{},[2643,90988],{"alt":66,"src":90989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90991,90992],{},[1464,90993,90994],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90996,90997],{},"防抖实现方式：",[2315,90999,91000],{},[29,91001,91002],{},"lodash 提供了防抖处理",[19,91004,91005],{},"_.debounce(func,[wait=0],[options={}])",[19,91007,91008],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[60,91010,91012],{"className":51782,"code":91011,"language":51784,"meta":66,"style":66},"\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",[39,91013,91014,91024,91038,91042,91050,91064,91084,91096,91104,91110,91120,91132,91144,91155,91167,91177,91187,91200,91204,91212,91220,91224,91232,91250,91268,91276,91295,91305,91314,91325,91330,91334,91339,91344,91349,91374,91382,91390,91394],{"__ignoreMap":66},[84,91015,91016,91018,91020,91022],{"class":86,"line":87},[84,91017,52446],{"class":154},[84,91019,52450],{"class":52449},[84,91021,52453],{"class":90},[84,91023,52456],{"class":154},[84,91025,91026,91028,91030,91032,91034,91036],{"class":86,"line":98},[84,91027,2218],{"class":154},[84,91029,51784],{"class":52449},[84,91031,52465],{"class":90},[84,91033,867],{"class":154},[84,91035,52470],{"class":158},[84,91037,52456],{"class":154},[84,91039,91040],{"class":86,"line":106},[84,91041,3578],{"emptyLinePlaceholder":1252},[84,91043,91044,91046,91048],{"class":86,"line":112},[84,91045,2218],{"class":154},[84,91047,52483],{"class":52449},[84,91049,52456],{"class":154},[84,91051,91052,91054,91056,91058,91060,91062],{"class":86,"line":425},[84,91053,53293],{"class":154},[84,91055,52493],{"class":52449},[84,91057,52496],{"class":90},[84,91059,867],{"class":154},[84,91061,52501],{"class":158},[84,91063,52456],{"class":154},[84,91065,91066,91068,91070,91072,91074,91076,91078,91080,91082],{"class":86,"line":2395},[84,91067,53293],{"class":154},[84,91069,52493],{"class":52449},[84,91071,16090],{"class":90},[84,91073,867],{"class":154},[84,91075,52540],{"class":158},[84,91077,52520],{"class":90},[84,91079,867],{"class":154},[84,91081,52547],{"class":158},[84,91083,52456],{"class":154},[84,91085,91086,91088,91090,91092,91094],{"class":86,"line":2401},[84,91087,53293],{"class":154},[84,91089,52556],{"class":52449},[84,91091,52559],{"class":154},[84,91093,52556],{"class":52449},[84,91095,52456],{"class":154},[84,91097,91098,91100,91102],{"class":86,"line":2492},[84,91099,53293],{"class":154},[84,91101,1222],{"class":52449},[84,91103,52456],{"class":154},[84,91105,91106,91108],{"class":86,"line":2498},[84,91107,55899],{"class":90},[84,91109,16742],{"class":154},[84,91111,91112,91114,91116,91118],{"class":86,"line":2510},[84,91113,73742],{"class":94},[84,91115,52586],{"class":154},[84,91117,61651],{"class":94},[84,91119,2471],{"class":154},[84,91121,91122,91124,91126,91128,91130],{"class":86,"line":2793},[84,91123,55918],{"class":94},[84,91125,52586],{"class":154},[84,91127,2903],{"class":94},[84,91129,52641],{"class":129},[84,91131,2471],{"class":154},[84,91133,91134,91136,91138,91140,91142],{"class":86,"line":2798},[84,91135,55932],{"class":94},[84,91137,52586],{"class":154},[84,91139,2903],{"class":94},[84,91141,52641],{"class":129},[84,91143,2471],{"class":154},[84,91145,91146,91148,91150,91153],{"class":86,"line":2804},[84,91147,56031],{"class":94},[84,91149,52586],{"class":154},[84,91151,91152],{"class":94},"gray",[84,91154,2471],{"class":154},[84,91156,91157,91159,91161,91163,91165],{"class":86,"line":2809},[84,91158,56069],{"class":94},[84,91160,52586],{"class":154},[84,91162,2133],{"class":94},[84,91164,52641],{"class":129},[84,91166,2471],{"class":154},[84,91168,91169,91171,91173,91175],{"class":86,"line":2823},[84,91170,58563],{"class":94},[84,91172,52586],{"class":154},[84,91174,61988],{"class":94},[84,91176,2471],{"class":154},[84,91178,91179,91181,91183,91185],{"class":86,"line":2828},[84,91180,58433],{"class":94},[84,91182,52586],{"class":154},[84,91184,52741],{"class":94},[84,91186,2471],{"class":154},[84,91188,91189,91192,91194,91196,91198],{"class":86,"line":2834},[84,91190,91191],{"class":94},"      padding-top",[84,91193,52586],{"class":154},[84,91195,1629],{"class":94},[84,91197,52641],{"class":129},[84,91199,2471],{"class":154},[84,91201,91202],{"class":86,"line":2855},[84,91203,3365],{"class":154},[84,91205,91206,91208,91210],{"class":86,"line":2860},[84,91207,53566],{"class":154},[84,91209,1222],{"class":52449},[84,91211,52456],{"class":154},[84,91213,91214,91216,91218],{"class":86,"line":2874},[84,91215,52934],{"class":154},[84,91217,52483],{"class":52449},[84,91219,52456],{"class":154},[84,91221,91222],{"class":86,"line":2879},[84,91223,3578],{"emptyLinePlaceholder":1252},[84,91225,91226,91228,91230],{"class":86,"line":2908},[84,91227,2218],{"class":154},[84,91229,52949],{"class":52449},[84,91231,52456],{"class":154},[84,91233,91234,91236,91238,91240,91242,91244,91246,91248],{"class":86,"line":2913},[84,91235,53293],{"class":154},[84,91237,52760],{"class":52449},[84,91239,54635],{"class":90},[84,91241,867],{"class":154},[84,91243,54640],{"class":158},[84,91245,56461],{"class":154},[84,91247,52760],{"class":52449},[84,91249,52456],{"class":154},[84,91251,91252,91254,91256,91258,91260,91262,91264,91266],{"class":86,"line":2930},[84,91253,53293],{"class":154},[84,91255,52962],{"class":52449},[84,91257,56386],{"class":90},[84,91259,867],{"class":154},[84,91261,89420],{"class":158},[84,91263,56461],{"class":154},[84,91265,52962],{"class":52449},[84,91267,52456],{"class":154},[84,91269,91270,91272,91274],{"class":86,"line":2935},[84,91271,53293],{"class":154},[84,91273,52962],{"class":52449},[84,91275,52456],{"class":154},[84,91277,91278,91280,91282,91284,91286,91288,91290,91293],{"class":86,"line":2940},[84,91279,12393],{"class":129},[84,91281,88079],{"class":94},[84,91283,14735],{"class":129},[84,91285,55544],{"class":154},[84,91287,55547],{"class":90},[84,91289,155],{"class":154},[84,91291,91292],{"class":158},"'.box'",[84,91294,162],{"class":154},[84,91296,91297,91299,91301,91303],{"class":86,"line":2945},[84,91298,53368],{"class":129},[84,91300,10610],{"class":154},[84,91302,867],{"class":129},[84,91304,48483],{"class":94},[84,91306,91307,91309,91312],{"class":86,"line":2959},[84,91308,71230],{"class":129},[84,91310,91311],{"class":90}," mouseMove",[84,91313,12025],{"class":154},[84,91315,91316,91319,91321,91323],{"class":86,"line":2964},[84,91317,91318],{"class":154},"      box.innerHTML ",[84,91320,867],{"class":129},[84,91322,4210],{"class":154},[84,91324,3880],{"class":129},[84,91326,91327],{"class":86,"line":3755},[84,91328,91329],{"class":1378},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[84,91331,91332],{"class":86,"line":3769},[84,91333,3365],{"class":154},[84,91335,91336],{"class":86,"line":3777},[84,91337,91338],{"class":1378},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[84,91340,91341],{"class":86,"line":3782},[84,91342,91343],{"class":1378},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[84,91345,91346],{"class":86,"line":3788},[84,91347,91348],{"class":1378},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[84,91350,91351,91354,91356,91358,91361,91364,91367,91370,91372],{"class":86,"line":3794},[84,91352,91353],{"class":154},"    box.",[84,91355,58960],{"class":90},[84,91357,155],{"class":154},[84,91359,91360],{"class":158},"'mousemove'",[84,91362,91363],{"class":154},", _.",[84,91365,91366],{"class":90},"debounce",[84,91368,91369],{"class":154},"(mouseMove, ",[84,91371,66220],{"class":94},[84,91373,31651],{"class":154},[84,91375,91376,91378,91380],{"class":86,"line":3799},[84,91377,53566],{"class":154},[84,91379,52962],{"class":52449},[84,91381,52456],{"class":154},[84,91383,91384,91386,91388],{"class":86,"line":9120},[84,91385,52934],{"class":154},[84,91387,52949],{"class":52449},[84,91389,52456],{"class":154},[84,91391,91392],{"class":86,"line":9144},[84,91393,3578],{"emptyLinePlaceholder":1252},[84,91395,91396,91398,91400],{"class":86,"line":9149},[84,91397,52934],{"class":154},[84,91399,51784],{"class":52449},[84,91401,52456],{"class":154},[2315,91403,91404],{},[29,91405,91406],{},"手写一个防抖函数来处理",[19,91408,91409],{},"防抖的核心就是利用定时器来实现的：",[19,91411,91412],{},"①声明一个定时器变量",[19,91414,91415],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91417,91418],{},"③如果没有定时器则开启定时器，记得存到变量里面",[60,91420,91422],{"className":51782,"code":91421,"language":51784,"meta":66,"style":66},"\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",[39,91423,91424,91434,91448,91452,91460,91474,91494,91506,91514,91520,91530,91542,91554,91564,91576,91586,91596,91608,91612,91620,91628,91632,91640,91658,91676,91684,91702,91712,91720,91730,91734,91738,91742,91747,91752,91757,91762,91767,91772,91790,91797,91802,91810,91815,91828,91844,91854,91859,91863,91867,91887,91891,91896,91901,91906,91911,91919,91927,91931],{"__ignoreMap":66},[84,91425,91426,91428,91430,91432],{"class":86,"line":87},[84,91427,52446],{"class":154},[84,91429,52450],{"class":52449},[84,91431,52453],{"class":90},[84,91433,52456],{"class":154},[84,91435,91436,91438,91440,91442,91444,91446],{"class":86,"line":98},[84,91437,2218],{"class":154},[84,91439,51784],{"class":52449},[84,91441,52465],{"class":90},[84,91443,867],{"class":154},[84,91445,52470],{"class":158},[84,91447,52456],{"class":154},[84,91449,91450],{"class":86,"line":106},[84,91451,3578],{"emptyLinePlaceholder":1252},[84,91453,91454,91456,91458],{"class":86,"line":112},[84,91455,2218],{"class":154},[84,91457,52483],{"class":52449},[84,91459,52456],{"class":154},[84,91461,91462,91464,91466,91468,91470,91472],{"class":86,"line":425},[84,91463,53293],{"class":154},[84,91465,52493],{"class":52449},[84,91467,52496],{"class":90},[84,91469,867],{"class":154},[84,91471,52501],{"class":158},[84,91473,52456],{"class":154},[84,91475,91476,91478,91480,91482,91484,91486,91488,91490,91492],{"class":86,"line":2395},[84,91477,53293],{"class":154},[84,91479,52493],{"class":52449},[84,91481,16090],{"class":90},[84,91483,867],{"class":154},[84,91485,52540],{"class":158},[84,91487,52520],{"class":90},[84,91489,867],{"class":154},[84,91491,52547],{"class":158},[84,91493,52456],{"class":154},[84,91495,91496,91498,91500,91502,91504],{"class":86,"line":2401},[84,91497,53293],{"class":154},[84,91499,52556],{"class":52449},[84,91501,52559],{"class":154},[84,91503,52556],{"class":52449},[84,91505,52456],{"class":154},[84,91507,91508,91510,91512],{"class":86,"line":2492},[84,91509,53293],{"class":154},[84,91511,1222],{"class":52449},[84,91513,52456],{"class":154},[84,91515,91516,91518],{"class":86,"line":2498},[84,91517,55899],{"class":90},[84,91519,16742],{"class":154},[84,91521,91522,91524,91526,91528],{"class":86,"line":2510},[84,91523,73742],{"class":94},[84,91525,52586],{"class":154},[84,91527,61651],{"class":94},[84,91529,2471],{"class":154},[84,91531,91532,91534,91536,91538,91540],{"class":86,"line":2793},[84,91533,55918],{"class":94},[84,91535,52586],{"class":154},[84,91537,2903],{"class":94},[84,91539,52641],{"class":129},[84,91541,2471],{"class":154},[84,91543,91544,91546,91548,91550,91552],{"class":86,"line":2798},[84,91545,55932],{"class":94},[84,91547,52586],{"class":154},[84,91549,2903],{"class":94},[84,91551,52641],{"class":129},[84,91553,2471],{"class":154},[84,91555,91556,91558,91560,91562],{"class":86,"line":2804},[84,91557,56031],{"class":94},[84,91559,52586],{"class":154},[84,91561,91152],{"class":94},[84,91563,2471],{"class":154},[84,91565,91566,91568,91570,91572,91574],{"class":86,"line":2809},[84,91567,56069],{"class":94},[84,91569,52586],{"class":154},[84,91571,2133],{"class":94},[84,91573,52641],{"class":129},[84,91575,2471],{"class":154},[84,91577,91578,91580,91582,91584],{"class":86,"line":2823},[84,91579,58563],{"class":94},[84,91581,52586],{"class":154},[84,91583,61988],{"class":94},[84,91585,2471],{"class":154},[84,91587,91588,91590,91592,91594],{"class":86,"line":2828},[84,91589,58433],{"class":94},[84,91591,52586],{"class":154},[84,91593,52741],{"class":94},[84,91595,2471],{"class":154},[84,91597,91598,91600,91602,91604,91606],{"class":86,"line":2834},[84,91599,91191],{"class":94},[84,91601,52586],{"class":154},[84,91603,1629],{"class":94},[84,91605,52641],{"class":129},[84,91607,2471],{"class":154},[84,91609,91610],{"class":86,"line":2855},[84,91611,3365],{"class":154},[84,91613,91614,91616,91618],{"class":86,"line":2860},[84,91615,53566],{"class":154},[84,91617,1222],{"class":52449},[84,91619,52456],{"class":154},[84,91621,91622,91624,91626],{"class":86,"line":2874},[84,91623,52934],{"class":154},[84,91625,52483],{"class":52449},[84,91627,52456],{"class":154},[84,91629,91630],{"class":86,"line":2879},[84,91631,3578],{"emptyLinePlaceholder":1252},[84,91633,91634,91636,91638],{"class":86,"line":2908},[84,91635,2218],{"class":154},[84,91637,52949],{"class":52449},[84,91639,52456],{"class":154},[84,91641,91642,91644,91646,91648,91650,91652,91654,91656],{"class":86,"line":2913},[84,91643,53293],{"class":154},[84,91645,52760],{"class":52449},[84,91647,54635],{"class":90},[84,91649,867],{"class":154},[84,91651,54640],{"class":158},[84,91653,56461],{"class":154},[84,91655,52760],{"class":52449},[84,91657,52456],{"class":154},[84,91659,91660,91662,91664,91666,91668,91670,91672,91674],{"class":86,"line":2930},[84,91661,53293],{"class":154},[84,91663,52962],{"class":52449},[84,91665,56386],{"class":90},[84,91667,867],{"class":154},[84,91669,89420],{"class":158},[84,91671,56461],{"class":154},[84,91673,52962],{"class":52449},[84,91675,52456],{"class":154},[84,91677,91678,91680,91682],{"class":86,"line":2935},[84,91679,53293],{"class":154},[84,91681,52962],{"class":52449},[84,91683,52456],{"class":154},[84,91685,91686,91688,91690,91692,91694,91696,91698,91700],{"class":86,"line":2940},[84,91687,12393],{"class":129},[84,91689,88079],{"class":94},[84,91691,14735],{"class":129},[84,91693,55544],{"class":154},[84,91695,55547],{"class":90},[84,91697,155],{"class":154},[84,91699,91292],{"class":158},[84,91701,162],{"class":154},[84,91703,91704,91706,91708,91710],{"class":86,"line":2945},[84,91705,53368],{"class":129},[84,91707,10610],{"class":154},[84,91709,867],{"class":129},[84,91711,48483],{"class":94},[84,91713,91714,91716,91718],{"class":86,"line":2959},[84,91715,71230],{"class":129},[84,91717,91311],{"class":90},[84,91719,12025],{"class":154},[84,91721,91722,91724,91726,91728],{"class":86,"line":2964},[84,91723,91318],{"class":154},[84,91725,867],{"class":129},[84,91727,4210],{"class":154},[84,91729,3880],{"class":129},[84,91731,91732],{"class":86,"line":3755},[84,91733,91329],{"class":1378},[84,91735,91736],{"class":86,"line":3769},[84,91737,3365],{"class":154},[84,91739,91740],{"class":86,"line":3777},[84,91741,91338],{"class":1378},[84,91743,91744],{"class":86,"line":3782},[84,91745,91746],{"class":1378},"    \u002F\u002F 手写防抖函数\n",[84,91748,91749],{"class":86,"line":3788},[84,91750,91751],{"class":1378},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[84,91753,91754],{"class":86,"line":3794},[84,91755,91756],{"class":1378},"    \u002F\u002F 1.声明定时器变量\n",[84,91758,91759],{"class":86,"line":3799},[84,91760,91761],{"class":1378},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[84,91763,91764],{"class":86,"line":9120},[84,91765,91766],{"class":1378},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[84,91768,91769],{"class":86,"line":9144},[84,91770,91771],{"class":1378},"    \u002F\u002F 4.定时器里面写函数调用\n",[84,91773,91774,91776,91779,91781,91784,91786,91788],{"class":86,"line":9149},[84,91775,71230],{"class":129},[84,91777,91778],{"class":90}," debounce",[84,91780,155],{"class":154},[84,91782,91783],{"class":928},"fn",[84,91785,846],{"class":154},[84,91787,2028],{"class":928},[84,91789,13613],{"class":154},[84,91791,91792,91794],{"class":86,"line":9155},[84,91793,80918],{"class":129},[84,91795,91796],{"class":154}," timer\n",[84,91798,91799],{"class":86,"line":9182},[84,91800,91801],{"class":1378},"      \u002F\u002F return 返回一个匿名函数\n",[84,91803,91804,91806,91808],{"class":86,"line":9187},[84,91805,75128],{"class":129},[84,91807,60064],{"class":129},[84,91809,55599],{"class":154},[84,91811,91812],{"class":86,"line":9193},[84,91813,91814],{"class":1378},"        \u002F\u002F 这里边写第二三四步\n",[84,91816,91817,91819,91822,91825],{"class":86,"line":9205},[84,91818,3675],{"class":129},[84,91820,91821],{"class":154}," (timer) ",[84,91823,91824],{"class":90},"clearTimeout",[84,91826,91827],{"class":154},"(timer)\n",[84,91829,91830,91833,91835,91838,91840,91842],{"class":86,"line":9217},[84,91831,91832],{"class":154},"        timer ",[84,91834,867],{"class":129},[84,91836,91837],{"class":90}," setTimeout",[84,91839,155],{"class":154},[84,91841,55596],{"class":129},[84,91843,55599],{"class":154},[84,91845,91846,91849,91851],{"class":86,"line":9229},[84,91847,91848],{"class":90},"          fn",[84,91850,14221],{"class":154},[84,91852,91853],{"class":1378},"\u002F\u002F加小括号调用fn }, t)\n",[84,91855,91856],{"class":86,"line":10888},[84,91857,91858],{"class":154},"        }, t)\n",[84,91860,91861],{"class":86,"line":10913},[84,91862,53547],{"class":154},[84,91864,91865],{"class":86,"line":10936},[84,91866,3365],{"class":154},[84,91868,91869,91871,91873,91875,91877,91879,91881,91883,91885],{"class":86,"line":10960},[84,91870,91353],{"class":154},[84,91872,58960],{"class":90},[84,91874,155],{"class":154},[84,91876,91360],{"class":158},[84,91878,846],{"class":154},[84,91880,91366],{"class":90},[84,91882,91369],{"class":154},[84,91884,66220],{"class":94},[84,91886,31651],{"class":154},[84,91888,91889],{"class":86,"line":10965},[84,91890,3578],{"emptyLinePlaceholder":1252},[84,91892,91893],{"class":86,"line":10970},[84,91894,91895],{"class":1378},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[84,91897,91898],{"class":86,"line":10975},[84,91899,91900],{"class":1378},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[84,91902,91903],{"class":86,"line":10984},[84,91904,91905],{"class":1378},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[84,91907,91908],{"class":86,"line":10989},[84,91909,91910],{"class":1378},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[84,91912,91913,91915,91917],{"class":86,"line":10995},[84,91914,53566],{"class":154},[84,91916,52962],{"class":52449},[84,91918,52456],{"class":154},[84,91920,91921,91923,91925],{"class":86,"line":11016},[84,91922,52934],{"class":154},[84,91924,52949],{"class":52449},[84,91926,52456],{"class":154},[84,91928,91929],{"class":86,"line":11022},[84,91930,3578],{"emptyLinePlaceholder":1252},[84,91932,91933,91935,91937],{"class":86,"line":11036},[84,91934,52934],{"class":154},[84,91936,51784],{"class":52449},[84,91938,52456],{"class":154},[198,91940,91942],{"id":91941},"_4172-节流","4.17.2 节流",[19,91944,91945],{},[2643,91946],{"alt":66,"src":91947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91949,91950],{},[2643,91951],{"alt":66,"src":91952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91954,91955],{},[1464,91956,91957],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91959,91960],{},"实现方式：",[2315,91962,91963],{},[29,91964,91965],{},"lodash 提供的节流函数来处理",[19,91967,91968],{},"_.throttle(func,[wait=0],[options=])",[19,91970,91971],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[60,91973,91975],{"className":51782,"code":91974,"language":51784,"meta":66,"style":66},"\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",[39,91976,91977,91987,92001,92005,92013,92027,92047,92059,92067,92073,92083,92095,92107,92117,92129,92139,92149,92161,92165,92173,92181,92185,92193,92211,92229,92237,92255,92265,92273,92283,92287,92291,92295,92300,92305,92326,92334,92342,92346],{"__ignoreMap":66},[84,91978,91979,91981,91983,91985],{"class":86,"line":87},[84,91980,52446],{"class":154},[84,91982,52450],{"class":52449},[84,91984,52453],{"class":90},[84,91986,52456],{"class":154},[84,91988,91989,91991,91993,91995,91997,91999],{"class":86,"line":98},[84,91990,2218],{"class":154},[84,91992,51784],{"class":52449},[84,91994,52465],{"class":90},[84,91996,867],{"class":154},[84,91998,52470],{"class":158},[84,92000,52456],{"class":154},[84,92002,92003],{"class":86,"line":106},[84,92004,3578],{"emptyLinePlaceholder":1252},[84,92006,92007,92009,92011],{"class":86,"line":112},[84,92008,2218],{"class":154},[84,92010,52483],{"class":52449},[84,92012,52456],{"class":154},[84,92014,92015,92017,92019,92021,92023,92025],{"class":86,"line":425},[84,92016,53293],{"class":154},[84,92018,52493],{"class":52449},[84,92020,52496],{"class":90},[84,92022,867],{"class":154},[84,92024,52501],{"class":158},[84,92026,52456],{"class":154},[84,92028,92029,92031,92033,92035,92037,92039,92041,92043,92045],{"class":86,"line":2395},[84,92030,53293],{"class":154},[84,92032,52493],{"class":52449},[84,92034,16090],{"class":90},[84,92036,867],{"class":154},[84,92038,52540],{"class":158},[84,92040,52520],{"class":90},[84,92042,867],{"class":154},[84,92044,52547],{"class":158},[84,92046,52456],{"class":154},[84,92048,92049,92051,92053,92055,92057],{"class":86,"line":2401},[84,92050,53293],{"class":154},[84,92052,52556],{"class":52449},[84,92054,52559],{"class":154},[84,92056,52556],{"class":52449},[84,92058,52456],{"class":154},[84,92060,92061,92063,92065],{"class":86,"line":2492},[84,92062,53293],{"class":154},[84,92064,1222],{"class":52449},[84,92066,52456],{"class":154},[84,92068,92069,92071],{"class":86,"line":2498},[84,92070,55899],{"class":90},[84,92072,16742],{"class":154},[84,92074,92075,92077,92079,92081],{"class":86,"line":2510},[84,92076,73742],{"class":94},[84,92078,52586],{"class":154},[84,92080,61651],{"class":94},[84,92082,2471],{"class":154},[84,92084,92085,92087,92089,92091,92093],{"class":86,"line":2793},[84,92086,55918],{"class":94},[84,92088,52586],{"class":154},[84,92090,2903],{"class":94},[84,92092,52641],{"class":129},[84,92094,2471],{"class":154},[84,92096,92097,92099,92101,92103,92105],{"class":86,"line":2798},[84,92098,55932],{"class":94},[84,92100,52586],{"class":154},[84,92102,2903],{"class":94},[84,92104,52641],{"class":129},[84,92106,2471],{"class":154},[84,92108,92109,92111,92113,92115],{"class":86,"line":2804},[84,92110,56031],{"class":94},[84,92112,52586],{"class":154},[84,92114,91152],{"class":94},[84,92116,2471],{"class":154},[84,92118,92119,92121,92123,92125,92127],{"class":86,"line":2809},[84,92120,56069],{"class":94},[84,92122,52586],{"class":154},[84,92124,2133],{"class":94},[84,92126,52641],{"class":129},[84,92128,2471],{"class":154},[84,92130,92131,92133,92135,92137],{"class":86,"line":2823},[84,92132,58563],{"class":94},[84,92134,52586],{"class":154},[84,92136,61988],{"class":94},[84,92138,2471],{"class":154},[84,92140,92141,92143,92145,92147],{"class":86,"line":2828},[84,92142,58433],{"class":94},[84,92144,52586],{"class":154},[84,92146,52741],{"class":94},[84,92148,2471],{"class":154},[84,92150,92151,92153,92155,92157,92159],{"class":86,"line":2834},[84,92152,91191],{"class":94},[84,92154,52586],{"class":154},[84,92156,1629],{"class":94},[84,92158,52641],{"class":129},[84,92160,2471],{"class":154},[84,92162,92163],{"class":86,"line":2855},[84,92164,3365],{"class":154},[84,92166,92167,92169,92171],{"class":86,"line":2860},[84,92168,53566],{"class":154},[84,92170,1222],{"class":52449},[84,92172,52456],{"class":154},[84,92174,92175,92177,92179],{"class":86,"line":2874},[84,92176,52934],{"class":154},[84,92178,52483],{"class":52449},[84,92180,52456],{"class":154},[84,92182,92183],{"class":86,"line":2879},[84,92184,3578],{"emptyLinePlaceholder":1252},[84,92186,92187,92189,92191],{"class":86,"line":2908},[84,92188,2218],{"class":154},[84,92190,52949],{"class":52449},[84,92192,52456],{"class":154},[84,92194,92195,92197,92199,92201,92203,92205,92207,92209],{"class":86,"line":2913},[84,92196,53293],{"class":154},[84,92198,52760],{"class":52449},[84,92200,54635],{"class":90},[84,92202,867],{"class":154},[84,92204,54640],{"class":158},[84,92206,56461],{"class":154},[84,92208,52760],{"class":52449},[84,92210,52456],{"class":154},[84,92212,92213,92215,92217,92219,92221,92223,92225,92227],{"class":86,"line":2930},[84,92214,53293],{"class":154},[84,92216,52962],{"class":52449},[84,92218,56386],{"class":90},[84,92220,867],{"class":154},[84,92222,89420],{"class":158},[84,92224,56461],{"class":154},[84,92226,52962],{"class":52449},[84,92228,52456],{"class":154},[84,92230,92231,92233,92235],{"class":86,"line":2935},[84,92232,53293],{"class":154},[84,92234,52962],{"class":52449},[84,92236,52456],{"class":154},[84,92238,92239,92241,92243,92245,92247,92249,92251,92253],{"class":86,"line":2940},[84,92240,12393],{"class":129},[84,92242,88079],{"class":94},[84,92244,14735],{"class":129},[84,92246,55544],{"class":154},[84,92248,55547],{"class":90},[84,92250,155],{"class":154},[84,92252,91292],{"class":158},[84,92254,162],{"class":154},[84,92256,92257,92259,92261,92263],{"class":86,"line":2945},[84,92258,53368],{"class":129},[84,92260,10610],{"class":154},[84,92262,867],{"class":129},[84,92264,48483],{"class":94},[84,92266,92267,92269,92271],{"class":86,"line":2959},[84,92268,71230],{"class":129},[84,92270,91311],{"class":90},[84,92272,12025],{"class":154},[84,92274,92275,92277,92279,92281],{"class":86,"line":2964},[84,92276,91318],{"class":154},[84,92278,867],{"class":129},[84,92280,4210],{"class":154},[84,92282,3880],{"class":129},[84,92284,92285],{"class":86,"line":3755},[84,92286,91329],{"class":1378},[84,92288,92289],{"class":86,"line":3769},[84,92290,3365],{"class":154},[84,92292,92293],{"class":86,"line":3777},[84,92294,91338],{"class":1378},[84,92296,92297],{"class":86,"line":3782},[84,92298,92299],{"class":1378},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[84,92301,92302],{"class":86,"line":3788},[84,92303,92304],{"class":1378},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[84,92306,92307,92309,92311,92313,92315,92317,92320,92322,92324],{"class":86,"line":3794},[84,92308,91353],{"class":154},[84,92310,58960],{"class":90},[84,92312,155],{"class":154},[84,92314,91360],{"class":158},[84,92316,91363],{"class":154},[84,92318,92319],{"class":90},"throttle",[84,92321,91369],{"class":154},[84,92323,66220],{"class":94},[84,92325,31651],{"class":154},[84,92327,92328,92330,92332],{"class":86,"line":3799},[84,92329,53566],{"class":154},[84,92331,52962],{"class":52449},[84,92333,52456],{"class":154},[84,92335,92336,92338,92340],{"class":86,"line":9120},[84,92337,52934],{"class":154},[84,92339,52949],{"class":52449},[84,92341,52456],{"class":154},[84,92343,92344],{"class":86,"line":9144},[84,92345,3578],{"emptyLinePlaceholder":1252},[84,92347,92348,92350,92352],{"class":86,"line":9149},[84,92349,52934],{"class":154},[84,92351,51784],{"class":52449},[84,92353,52456],{"class":154},[2315,92355,92356],{},[29,92357,92358],{},"手写一个节流函数来处理",[19,92360,72098],{},[19,92362,91412],{},[19,92364,92365],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92367,92368],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[60,92370,92372],{"className":51782,"code":92371,"language":51784,"meta":66,"style":66},"\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",[39,92373,92374,92384,92398,92402,92410,92424,92444,92456,92464,92470,92480,92492,92504,92514,92526,92536,92546,92558,92562,92570,92578,92582,92590,92608,92626,92634,92652,92662,92670,92680,92684,92688,92692,92697,92702,92707,92712,92717,92722,92739,92745,92753,92764,92779,92786,92791,92796,92806,92811,92816,92821,92825,92829,92833,92853,92861,92869,92873],{"__ignoreMap":66},[84,92375,92376,92378,92380,92382],{"class":86,"line":87},[84,92377,52446],{"class":154},[84,92379,52450],{"class":52449},[84,92381,52453],{"class":90},[84,92383,52456],{"class":154},[84,92385,92386,92388,92390,92392,92394,92396],{"class":86,"line":98},[84,92387,2218],{"class":154},[84,92389,51784],{"class":52449},[84,92391,52465],{"class":90},[84,92393,867],{"class":154},[84,92395,52470],{"class":158},[84,92397,52456],{"class":154},[84,92399,92400],{"class":86,"line":106},[84,92401,3578],{"emptyLinePlaceholder":1252},[84,92403,92404,92406,92408],{"class":86,"line":112},[84,92405,2218],{"class":154},[84,92407,52483],{"class":52449},[84,92409,52456],{"class":154},[84,92411,92412,92414,92416,92418,92420,92422],{"class":86,"line":425},[84,92413,53293],{"class":154},[84,92415,52493],{"class":52449},[84,92417,52496],{"class":90},[84,92419,867],{"class":154},[84,92421,52501],{"class":158},[84,92423,52456],{"class":154},[84,92425,92426,92428,92430,92432,92434,92436,92438,92440,92442],{"class":86,"line":2395},[84,92427,53293],{"class":154},[84,92429,52493],{"class":52449},[84,92431,16090],{"class":90},[84,92433,867],{"class":154},[84,92435,52540],{"class":158},[84,92437,52520],{"class":90},[84,92439,867],{"class":154},[84,92441,52547],{"class":158},[84,92443,52456],{"class":154},[84,92445,92446,92448,92450,92452,92454],{"class":86,"line":2401},[84,92447,53293],{"class":154},[84,92449,52556],{"class":52449},[84,92451,52559],{"class":154},[84,92453,52556],{"class":52449},[84,92455,52456],{"class":154},[84,92457,92458,92460,92462],{"class":86,"line":2492},[84,92459,53293],{"class":154},[84,92461,1222],{"class":52449},[84,92463,52456],{"class":154},[84,92465,92466,92468],{"class":86,"line":2498},[84,92467,55899],{"class":90},[84,92469,16742],{"class":154},[84,92471,92472,92474,92476,92478],{"class":86,"line":2510},[84,92473,73742],{"class":94},[84,92475,52586],{"class":154},[84,92477,61651],{"class":94},[84,92479,2471],{"class":154},[84,92481,92482,92484,92486,92488,92490],{"class":86,"line":2793},[84,92483,55918],{"class":94},[84,92485,52586],{"class":154},[84,92487,2903],{"class":94},[84,92489,52641],{"class":129},[84,92491,2471],{"class":154},[84,92493,92494,92496,92498,92500,92502],{"class":86,"line":2798},[84,92495,55932],{"class":94},[84,92497,52586],{"class":154},[84,92499,2903],{"class":94},[84,92501,52641],{"class":129},[84,92503,2471],{"class":154},[84,92505,92506,92508,92510,92512],{"class":86,"line":2804},[84,92507,56031],{"class":94},[84,92509,52586],{"class":154},[84,92511,91152],{"class":94},[84,92513,2471],{"class":154},[84,92515,92516,92518,92520,92522,92524],{"class":86,"line":2809},[84,92517,56069],{"class":94},[84,92519,52586],{"class":154},[84,92521,2133],{"class":94},[84,92523,52641],{"class":129},[84,92525,2471],{"class":154},[84,92527,92528,92530,92532,92534],{"class":86,"line":2823},[84,92529,58563],{"class":94},[84,92531,52586],{"class":154},[84,92533,61988],{"class":94},[84,92535,2471],{"class":154},[84,92537,92538,92540,92542,92544],{"class":86,"line":2828},[84,92539,58433],{"class":94},[84,92541,52586],{"class":154},[84,92543,52741],{"class":94},[84,92545,2471],{"class":154},[84,92547,92548,92550,92552,92554,92556],{"class":86,"line":2834},[84,92549,91191],{"class":94},[84,92551,52586],{"class":154},[84,92553,1629],{"class":94},[84,92555,52641],{"class":129},[84,92557,2471],{"class":154},[84,92559,92560],{"class":86,"line":2855},[84,92561,3365],{"class":154},[84,92563,92564,92566,92568],{"class":86,"line":2860},[84,92565,53566],{"class":154},[84,92567,1222],{"class":52449},[84,92569,52456],{"class":154},[84,92571,92572,92574,92576],{"class":86,"line":2874},[84,92573,52934],{"class":154},[84,92575,52483],{"class":52449},[84,92577,52456],{"class":154},[84,92579,92580],{"class":86,"line":2879},[84,92581,3578],{"emptyLinePlaceholder":1252},[84,92583,92584,92586,92588],{"class":86,"line":2908},[84,92585,2218],{"class":154},[84,92587,52949],{"class":52449},[84,92589,52456],{"class":154},[84,92591,92592,92594,92596,92598,92600,92602,92604,92606],{"class":86,"line":2913},[84,92593,53293],{"class":154},[84,92595,52760],{"class":52449},[84,92597,54635],{"class":90},[84,92599,867],{"class":154},[84,92601,54640],{"class":158},[84,92603,56461],{"class":154},[84,92605,52760],{"class":52449},[84,92607,52456],{"class":154},[84,92609,92610,92612,92614,92616,92618,92620,92622,92624],{"class":86,"line":2930},[84,92611,53293],{"class":154},[84,92613,52962],{"class":52449},[84,92615,56386],{"class":90},[84,92617,867],{"class":154},[84,92619,89420],{"class":158},[84,92621,56461],{"class":154},[84,92623,52962],{"class":52449},[84,92625,52456],{"class":154},[84,92627,92628,92630,92632],{"class":86,"line":2935},[84,92629,53293],{"class":154},[84,92631,52962],{"class":52449},[84,92633,52456],{"class":154},[84,92635,92636,92638,92640,92642,92644,92646,92648,92650],{"class":86,"line":2940},[84,92637,12393],{"class":129},[84,92639,88079],{"class":94},[84,92641,14735],{"class":129},[84,92643,55544],{"class":154},[84,92645,55547],{"class":90},[84,92647,155],{"class":154},[84,92649,91292],{"class":158},[84,92651,162],{"class":154},[84,92653,92654,92656,92658,92660],{"class":86,"line":2945},[84,92655,53368],{"class":129},[84,92657,10610],{"class":154},[84,92659,867],{"class":129},[84,92661,48483],{"class":94},[84,92663,92664,92666,92668],{"class":86,"line":2959},[84,92665,71230],{"class":129},[84,92667,91311],{"class":90},[84,92669,12025],{"class":154},[84,92671,92672,92674,92676,92678],{"class":86,"line":2964},[84,92673,91318],{"class":154},[84,92675,867],{"class":129},[84,92677,4210],{"class":154},[84,92679,3880],{"class":129},[84,92681,92682],{"class":86,"line":3755},[84,92683,91329],{"class":1378},[84,92685,92686],{"class":86,"line":3769},[84,92687,3365],{"class":154},[84,92689,92690],{"class":86,"line":3777},[84,92691,91338],{"class":1378},[84,92693,92694],{"class":86,"line":3782},[84,92695,92696],{"class":1378},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[84,92698,92699],{"class":86,"line":3788},[84,92700,92701],{"class":1378},"    \u002F\u002F 1.声明一个定时器变量\n",[84,92703,92704],{"class":86,"line":3794},[84,92705,92706],{"class":1378},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[84,92708,92709],{"class":86,"line":3799},[84,92710,92711],{"class":1378},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[84,92713,92714],{"class":86,"line":9120},[84,92715,92716],{"class":1378},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[84,92718,92719],{"class":86,"line":9144},[84,92720,92721],{"class":1378},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[84,92723,92724,92726,92729,92731,92733,92735,92737],{"class":86,"line":9149},[84,92725,71230],{"class":129},[84,92727,92728],{"class":90}," throttle",[84,92730,155],{"class":154},[84,92732,91783],{"class":928},[84,92734,846],{"class":154},[84,92736,2028],{"class":928},[84,92738,13613],{"class":154},[84,92740,92741,92743],{"class":86,"line":9155},[84,92742,80918],{"class":129},[84,92744,91796],{"class":154},[84,92746,92747,92749,92751],{"class":86,"line":9182},[84,92748,75128],{"class":129},[84,92750,60064],{"class":129},[84,92752,55599],{"class":154},[84,92754,92755,92757,92759,92761],{"class":86,"line":9187},[84,92756,3675],{"class":129},[84,92758,2839],{"class":154},[84,92760,1538],{"class":129},[84,92762,92763],{"class":154},"timer) {\n",[84,92765,92766,92769,92771,92773,92775,92777],{"class":86,"line":9193},[84,92767,92768],{"class":154},"          timer ",[84,92770,867],{"class":129},[84,92772,91837],{"class":90},[84,92774,155],{"class":154},[84,92776,55596],{"class":129},[84,92778,55599],{"class":154},[84,92780,92781,92784],{"class":86,"line":9205},[84,92782,92783],{"class":90},"            fn",[84,92785,183],{"class":154},[84,92787,92788],{"class":86,"line":9217},[84,92789,92790],{"class":1378},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[84,92792,92793],{"class":86,"line":9229},[84,92794,92795],{"class":1378},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[84,92797,92798,92801,92803],{"class":86,"line":10888},[84,92799,92800],{"class":154},"            timer ",[84,92802,867],{"class":129},[84,92804,92805],{"class":94}," null\n",[84,92807,92808],{"class":86,"line":10913},[84,92809,92810],{"class":1378},"            \u002F\u002F 不能用clearTimeout(timer)\n",[84,92812,92813],{"class":86,"line":10936},[84,92814,92815],{"class":1378},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[84,92817,92818],{"class":86,"line":10960},[84,92819,92820],{"class":154},"          }, t)\n",[84,92822,92823],{"class":86,"line":10965},[84,92824,3707],{"class":154},[84,92826,92827],{"class":86,"line":10970},[84,92828,53547],{"class":154},[84,92830,92831],{"class":86,"line":10975},[84,92832,3365],{"class":154},[84,92834,92835,92837,92839,92841,92843,92845,92847,92849,92851],{"class":86,"line":10984},[84,92836,91353],{"class":154},[84,92838,58960],{"class":90},[84,92840,155],{"class":154},[84,92842,91360],{"class":158},[84,92844,846],{"class":154},[84,92846,92319],{"class":90},[84,92848,91369],{"class":154},[84,92850,66220],{"class":94},[84,92852,31651],{"class":154},[84,92854,92855,92857,92859],{"class":86,"line":10989},[84,92856,53566],{"class":154},[84,92858,52962],{"class":52449},[84,92860,52456],{"class":154},[84,92862,92863,92865,92867],{"class":86,"line":10995},[84,92864,52934],{"class":154},[84,92866,52949],{"class":52449},[84,92868,52456],{"class":154},[84,92870,92871],{"class":86,"line":11016},[84,92872,3578],{"emptyLinePlaceholder":1252},[84,92874,92875,92877,92879],{"class":86,"line":11022},[84,92876,52934],{"class":154},[84,92878,51784],{"class":52449},[84,92880,52456],{"class":154},[198,92882,92884],{"id":92883},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[60,92886,92888],{"className":54216,"code":92887,"language":54218,"meta":66,"style":66},"\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",[39,92889,92890,92898,92906,92911,92916,92921,92926,92930,92938],{"__ignoreMap":66},[84,92891,92892,92894,92896],{"class":86,"line":87},[84,92893,2218],{"class":154},[84,92895,52949],{"class":52449},[84,92897,52456],{"class":154},[84,92899,92900,92902,92904],{"class":86,"line":98},[84,92901,53293],{"class":154},[84,92903,52962],{"class":52449},[84,92905,52456],{"class":154},[84,92907,92908],{"class":86,"line":106},[84,92909,92910],{"class":154},"    let timer = null\n",[84,92912,92913],{"class":86,"line":112},[84,92914,92915],{"class":154},"    timer = setTimeout(() => {\n",[84,92917,92918],{"class":86,"line":425},[84,92919,92920],{"class":154},"      clearTimeout(timer)\n",[84,92922,92923],{"class":86,"line":2395},[84,92924,92925],{"class":154},"      console.log(timer)\n",[84,92927,92928],{"class":86,"line":2401},[84,92929,61371],{"class":154},[84,92931,92932,92934,92936],{"class":86,"line":2492},[84,92933,53566],{"class":154},[84,92935,52962],{"class":52449},[84,92937,52456],{"class":154},[84,92939,92940,92942,92944],{"class":86,"line":2498},[84,92941,52934],{"class":154},[84,92943,52949],{"class":52449},[84,92945,52456],{"class":154},[19,92947,92948],{},"输出为1",[19,92950,92951],{},"在开启的定时器里边写清除定时器",[19,92953,92954],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[198,92956,92958],{"id":92957},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92960,92961],{},"页面打开，可以记录上一次的视频播放位置",[19,92963,92964],{},[2643,92965],{"alt":66,"src":92966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92968,92969],{},[2643,92970],{"alt":66,"src":92971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[60,92973,92975],{"className":51782,"code":92974,"language":51784,"meta":66,"style":66},"\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",[39,92976,92977,92987,93001,93005,93013,93027,93047,93067,93089,93102,93110,93116,93126,93136,93146,93150,93154,93161,93174,93186,93190,93194,93204,93216,93230,93234,93238,93245,93255,93268,93280,93290,93300,93316,93328,93332,93336,93344,93354,93366,93376,93386,93396,93400,93404,93414,93425,93429,93437,93445,93449,93457,93472,93487,93502,93523,93531,93539,93554,93576,93584,93599,93625,93651,93677,93685,93693,93712,93720,93725,93744,93749,93767,93772,93777,93785,93790,93804,93812,93817,93834,93838,93843,93865,93869,93877,93885,93889],{"__ignoreMap":66},[84,92978,92979,92981,92983,92985],{"class":86,"line":87},[84,92980,52446],{"class":154},[84,92982,52450],{"class":52449},[84,92984,52453],{"class":90},[84,92986,52456],{"class":154},[84,92988,92989,92991,92993,92995,92997,92999],{"class":86,"line":98},[84,92990,2218],{"class":154},[84,92992,51784],{"class":52449},[84,92994,52465],{"class":90},[84,92996,867],{"class":154},[84,92998,52470],{"class":158},[84,93000,52456],{"class":154},[84,93002,93003],{"class":86,"line":106},[84,93004,3578],{"emptyLinePlaceholder":1252},[84,93006,93007,93009,93011],{"class":86,"line":112},[84,93008,2218],{"class":154},[84,93010,52483],{"class":52449},[84,93012,52456],{"class":154},[84,93014,93015,93017,93019,93021,93023,93025],{"class":86,"line":425},[84,93016,53293],{"class":154},[84,93018,52493],{"class":52449},[84,93020,52496],{"class":90},[84,93022,867],{"class":154},[84,93024,52501],{"class":158},[84,93026,60273],{"class":154},[84,93028,93029,93031,93033,93035,93037,93039,93041,93043,93045],{"class":86,"line":2395},[84,93030,53293],{"class":154},[84,93032,52493],{"class":52449},[84,93034,52512],{"class":90},[84,93036,867],{"class":154},[84,93038,52517],{"class":158},[84,93040,52520],{"class":90},[84,93042,867],{"class":154},[84,93044,52525],{"class":158},[84,93046,60273],{"class":154},[84,93048,93049,93051,93053,93055,93057,93059,93061,93063,93065],{"class":86,"line":2401},[84,93050,53293],{"class":154},[84,93052,52493],{"class":52449},[84,93054,16090],{"class":90},[84,93056,867],{"class":154},[84,93058,52540],{"class":158},[84,93060,52520],{"class":90},[84,93062,867],{"class":154},[84,93064,52547],{"class":158},[84,93066,60273],{"class":154},[84,93068,93069,93071,93073,93075,93077,93080,93082,93084,93087],{"class":86,"line":2492},[84,93070,53293],{"class":154},[84,93072,52493],{"class":52449},[84,93074,16090],{"class":90},[84,93076,867],{"class":154},[84,93078,93079],{"class":158},"\"referrer\"",[84,93081,52520],{"class":90},[84,93083,867],{"class":154},[84,93085,93086],{"class":158},"\"never\"",[84,93088,60273],{"class":154},[84,93090,93091,93093,93095,93098,93100],{"class":86,"line":2498},[84,93092,53293],{"class":154},[84,93094,52556],{"class":52449},[84,93096,93097],{"class":154},">综合案例\u003C\u002F",[84,93099,52556],{"class":52449},[84,93101,52456],{"class":154},[84,93103,93104,93106,93108],{"class":86,"line":2510},[84,93105,53293],{"class":154},[84,93107,1222],{"class":52449},[84,93109,52456],{"class":154},[84,93111,93112,93114],{"class":86,"line":2793},[84,93113,7576],{"class":52449},[84,93115,16742],{"class":154},[84,93117,93118,93120,93122,93124],{"class":86,"line":2798},[84,93119,55842],{"class":94},[84,93121,52586],{"class":154},[84,93123,1504],{"class":94},[84,93125,2471],{"class":154},[84,93127,93128,93130,93132,93134],{"class":86,"line":2804},[84,93129,55853],{"class":94},[84,93131,52586],{"class":154},[84,93133,1504],{"class":94},[84,93135,2471],{"class":154},[84,93137,93138,93140,93142,93144],{"class":86,"line":2809},[84,93139,73742],{"class":94},[84,93141,52586],{"class":154},[84,93143,61651],{"class":94},[84,93145,2471],{"class":154},[84,93147,93148],{"class":86,"line":2823},[84,93149,3365],{"class":154},[84,93151,93152],{"class":86,"line":2828},[84,93153,3578],{"emptyLinePlaceholder":1252},[84,93155,93156,93159],{"class":86,"line":2834},[84,93157,93158],{"class":90},"    .container",[84,93160,16742],{"class":154},[84,93162,93163,93165,93167,93170,93172],{"class":86,"line":2855},[84,93164,55918],{"class":94},[84,93166,52586],{"class":154},[84,93168,93169],{"class":94},"1200",[84,93171,52641],{"class":129},[84,93173,2471],{"class":154},[84,93175,93176,93178,93180,93182,93184],{"class":86,"line":2860},[84,93177,55853],{"class":94},[84,93179,52586],{"class":154},[84,93181,1504],{"class":94},[84,93183,52705],{"class":94},[84,93185,2471],{"class":154},[84,93187,93188],{"class":86,"line":2874},[84,93189,3365],{"class":154},[84,93191,93192],{"class":86,"line":2879},[84,93193,3578],{"emptyLinePlaceholder":1252},[84,93195,93196,93199,93202],{"class":86,"line":2908},[84,93197,93198],{"class":90},"    .video",[84,93200,93201],{"class":52449}," video",[84,93203,16742],{"class":154},[84,93205,93206,93208,93210,93212,93214],{"class":86,"line":2913},[84,93207,55918],{"class":94},[84,93209,52586],{"class":154},[84,93211,821],{"class":94},[84,93213,1638],{"class":129},[84,93215,2471],{"class":154},[84,93217,93218,93220,93222,93224,93226,93228],{"class":86,"line":2930},[84,93219,55842],{"class":94},[84,93221,52586],{"class":154},[84,93223,2008],{"class":94},[84,93225,52641],{"class":129},[84,93227,5271],{"class":94},[84,93229,2471],{"class":154},[84,93231,93232],{"class":86,"line":2935},[84,93233,3365],{"class":154},[84,93235,93236],{"class":86,"line":2940},[84,93237,3578],{"emptyLinePlaceholder":1252},[84,93239,93240,93243],{"class":86,"line":2945},[84,93241,93242],{"class":90},"    .elevator",[84,93244,16742],{"class":154},[84,93246,93247,93249,93251,93253],{"class":86,"line":2959},[84,93248,55906],{"class":94},[84,93250,52586],{"class":154},[84,93252,87379],{"class":94},[84,93254,2471],{"class":154},[84,93256,93257,93259,93261,93264,93266],{"class":86,"line":2964},[84,93258,56094],{"class":94},[84,93260,52586],{"class":154},[84,93262,93263],{"class":94},"280",[84,93265,52641],{"class":129},[84,93267,2471],{"class":154},[84,93269,93270,93272,93274,93276,93278],{"class":86,"line":3755},[84,93271,87573],{"class":94},[84,93273,52586],{"class":154},[84,93275,2008],{"class":94},[84,93277,52641],{"class":129},[84,93279,2471],{"class":154},[84,93281,93282,93284,93286,93288],{"class":86,"line":3769},[84,93283,87386],{"class":94},[84,93285,52586],{"class":154},[84,93287,87391],{"class":94},[84,93289,2471],{"class":154},[84,93291,93292,93294,93296,93298],{"class":86,"line":3777},[84,93293,62867],{"class":94},[84,93295,52586],{"class":154},[84,93297,61988],{"class":94},[84,93299,2471],{"class":154},[84,93301,93302,93304,93306,93308,93310,93312,93314],{"class":86,"line":3782},[84,93303,63123],{"class":94},[84,93305,52586],{"class":154},[84,93307,1529],{"class":94},[84,93309,52641],{"class":129},[84,93311,52670],{"class":94},[84,93313,63390],{"class":94},[84,93315,2471],{"class":154},[84,93317,93318,93320,93322,93324,93326],{"class":86,"line":3788},[84,93319,55918],{"class":94},[84,93321,52586],{"class":154},[84,93323,2215],{"class":94},[84,93325,52641],{"class":129},[84,93327,2471],{"class":154},[84,93329,93330],{"class":86,"line":3794},[84,93331,3365],{"class":154},[84,93333,93334],{"class":86,"line":3799},[84,93335,3578],{"emptyLinePlaceholder":1252},[84,93337,93338,93340,93342],{"class":86,"line":9120},[84,93339,93242],{"class":90},[84,93341,2579],{"class":52449},[84,93343,16742],{"class":154},[84,93345,93346,93348,93350,93352],{"class":86,"line":9144},[84,93347,56156],{"class":94},[84,93349,52586],{"class":154},[84,93351,62015],{"class":94},[84,93353,2471],{"class":154},[84,93355,93356,93358,93360,93362,93364],{"class":86,"line":9149},[84,93357,55842],{"class":94},[84,93359,52586],{"class":154},[84,93361,1756],{"class":94},[84,93363,52641],{"class":129},[84,93365,2471],{"class":154},[84,93367,93368,93370,93372,93374],{"class":86,"line":9155},[84,93369,65116],{"class":94},[84,93371,52586],{"class":154},[84,93373,55884],{"class":94},[84,93375,2471],{"class":154},[84,93377,93378,93380,93382,93384],{"class":86,"line":9182},[84,93379,58433],{"class":94},[84,93381,52586],{"class":154},[84,93383,52741],{"class":94},[84,93385,2471],{"class":154},[84,93387,93388,93390,93392,93394],{"class":86,"line":9187},[84,93389,58563],{"class":94},[84,93391,52586],{"class":154},[84,93393,63216],{"class":94},[84,93395,2471],{"class":154},[84,93397,93398],{"class":86,"line":9193},[84,93399,3365],{"class":154},[84,93401,93402],{"class":86,"line":9205},[84,93403,3578],{"emptyLinePlaceholder":1252},[84,93405,93406,93408,93410,93412],{"class":86,"line":9217},[84,93407,93242],{"class":90},[84,93409,2579],{"class":52449},[84,93411,65170],{"class":90},[84,93413,16742],{"class":154},[84,93415,93416,93418,93420,93423],{"class":86,"line":9229},[84,93417,58563],{"class":94},[84,93419,52586],{"class":154},[84,93421,93422],{"class":94},"#1286ff",[84,93424,2471],{"class":154},[84,93426,93427],{"class":86,"line":10888},[84,93428,3365],{"class":154},[84,93430,93431,93433,93435],{"class":86,"line":10913},[84,93432,53566],{"class":154},[84,93434,1222],{"class":52449},[84,93436,52456],{"class":154},[84,93438,93439,93441,93443],{"class":86,"line":10936},[84,93440,52934],{"class":154},[84,93442,52483],{"class":52449},[84,93444,52456],{"class":154},[84,93446,93447],{"class":86,"line":10960},[84,93448,3578],{"emptyLinePlaceholder":1252},[84,93450,93451,93453,93455],{"class":86,"line":10965},[84,93452,2218],{"class":154},[84,93454,52949],{"class":52449},[84,93456,52456],{"class":154},[84,93458,93459,93461,93463,93465,93467,93470],{"class":86,"line":10970},[84,93460,53293],{"class":154},[84,93462,52760],{"class":52449},[84,93464,54635],{"class":90},[84,93466,867],{"class":154},[84,93468,93469],{"class":158},"\"container\"",[84,93471,52456],{"class":154},[84,93473,93474,93476,93478,93480,93482,93485],{"class":86,"line":10975},[84,93475,52490],{"class":154},[84,93477,52760],{"class":52449},[84,93479,54635],{"class":90},[84,93481,867],{"class":154},[84,93483,93484],{"class":158},"\"header\"",[84,93486,52456],{"class":154},[84,93488,93489,93491,93493,93495,93497,93500],{"class":86,"line":10984},[84,93490,56381],{"class":154},[84,93492,208],{"class":52449},[84,93494,62203],{"class":90},[84,93496,867],{"class":154},[84,93498,93499],{"class":158},"\"http:\u002F\u002Fpip.itcast.cn\"",[84,93501,52456],{"class":154},[84,93503,93504,93506,93508,93510,93512,93515,93517,93519,93521],{"class":86,"line":10989},[84,93505,56449],{"class":154},[84,93507,2643],{"class":52449},[84,93509,56386],{"class":90},[84,93511,867],{"class":154},[84,93513,93514],{"class":158},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[84,93516,56394],{"class":90},[84,93518,867],{"class":154},[84,93520,8824],{"class":158},[84,93522,60273],{"class":154},[84,93524,93525,93527,93529],{"class":86,"line":10995},[84,93526,56554],{"class":154},[84,93528,208],{"class":52449},[84,93530,52456],{"class":154},[84,93532,93533,93535,93537],{"class":86,"line":11016},[84,93534,52925],{"class":154},[84,93536,52760],{"class":52449},[84,93538,52456],{"class":154},[84,93540,93541,93543,93545,93547,93549,93552],{"class":86,"line":11022},[84,93542,52490],{"class":154},[84,93544,52760],{"class":52449},[84,93546,54635],{"class":90},[84,93548,867],{"class":154},[84,93550,93551],{"class":158},"\"video\"",[84,93553,52456],{"class":154},[84,93555,93556,93558,93560,93562,93564,93567,93570,93572,93574],{"class":86,"line":11036},[84,93557,56381],{"class":154},[84,93559,29341],{"class":52449},[84,93561,56386],{"class":90},[84,93563,867],{"class":154},[84,93565,93566],{"class":158},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[84,93568,93569],{"class":90}," controls",[84,93571,56461],{"class":154},[84,93573,29341],{"class":52449},[84,93575,52456],{"class":154},[84,93577,93578,93580,93582],{"class":86,"line":11042},[84,93579,52925],{"class":154},[84,93581,52760],{"class":52449},[84,93583,52456],{"class":154},[84,93585,93586,93588,93590,93592,93594,93597],{"class":86,"line":11069},[84,93587,52490],{"class":154},[84,93589,52760],{"class":52449},[84,93591,54635],{"class":90},[84,93593,867],{"class":154},[84,93595,93596],{"class":158},"\"elevator\"",[84,93598,52456],{"class":154},[84,93600,93601,93603,93605,93607,93609,93611,93614,93616,93618,93621,93623],{"class":86,"line":11078},[84,93602,56381],{"class":154},[84,93604,208],{"class":52449},[84,93606,62203],{"class":90},[84,93608,867],{"class":154},[84,93610,65382],{"class":158},[84,93612,93613],{"class":90}," data-ref",[84,93615,867],{"class":154},[84,93617,93551],{"class":158},[84,93619,93620],{"class":154},">视频介绍\u003C\u002F",[84,93622,208],{"class":52449},[84,93624,52456],{"class":154},[84,93626,93627,93629,93631,93633,93635,93637,93639,93641,93644,93647,93649],{"class":86,"line":11084},[84,93628,56381],{"class":154},[84,93630,208],{"class":52449},[84,93632,62203],{"class":90},[84,93634,867],{"class":154},[84,93636,65382],{"class":158},[84,93638,93613],{"class":90},[84,93640,867],{"class":154},[84,93642,93643],{"class":158},"\"intro\"",[84,93645,93646],{"class":154},">课程简介\u003C\u002F",[84,93648,208],{"class":52449},[84,93650,52456],{"class":154},[84,93652,93653,93655,93657,93659,93661,93663,93665,93667,93670,93673,93675],{"class":86,"line":11092},[84,93654,56381],{"class":154},[84,93656,208],{"class":52449},[84,93658,62203],{"class":90},[84,93660,867],{"class":154},[84,93662,65382],{"class":158},[84,93664,93613],{"class":90},[84,93666,867],{"class":154},[84,93668,93669],{"class":158},"\"outline\"",[84,93671,93672],{"class":154},">评论列表\u003C\u002F",[84,93674,208],{"class":52449},[84,93676,52456],{"class":154},[84,93678,93679,93681,93683],{"class":86,"line":11097},[84,93680,52925],{"class":154},[84,93682,52760],{"class":52449},[84,93684,52456],{"class":154},[84,93686,93687,93689,93691],{"class":86,"line":17774},[84,93688,53566],{"class":154},[84,93690,52760],{"class":52449},[84,93692,52456],{"class":154},[84,93694,93695,93697,93699,93701,93703,93706,93708,93710],{"class":86,"line":17780},[84,93696,53293],{"class":154},[84,93698,52962],{"class":52449},[84,93700,56386],{"class":90},[84,93702,867],{"class":154},[84,93704,93705],{"class":158},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[84,93707,56461],{"class":154},[84,93709,52962],{"class":52449},[84,93711,52456],{"class":154},[84,93713,93714,93716,93718],{"class":86,"line":17803},[84,93715,53293],{"class":154},[84,93717,52962],{"class":52449},[84,93719,52456],{"class":154},[84,93721,93722],{"class":86,"line":17809},[84,93723,93724],{"class":1378},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[84,93726,93727,93729,93731,93733,93735,93737,93739,93742],{"class":86,"line":17832},[84,93728,12393],{"class":129},[84,93730,93201],{"class":94},[84,93732,14735],{"class":129},[84,93734,55544],{"class":154},[84,93736,55547],{"class":90},[84,93738,155],{"class":154},[84,93740,93741],{"class":158},"'video'",[84,93743,162],{"class":154},[84,93745,93746],{"class":86,"line":17846},[84,93747,93748],{"class":1378},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[84,93750,93751,93754,93756,93758,93760,93763,93765],{"class":86,"line":17866},[84,93752,93753],{"class":154},"    video.ontimeupdate ",[84,93755,867],{"class":129},[84,93757,89501],{"class":154},[84,93759,92319],{"class":90},[84,93761,93762],{"class":154},"(() ",[84,93764,85868],{"class":129},[84,93766,16742],{"class":154},[84,93768,93769],{"class":86,"line":17872},[84,93770,93771],{"class":1378},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[84,93773,93774],{"class":86,"line":17883},[84,93775,93776],{"class":1378},"      \u002F\u002F 控制台输出当前的时间\n",[84,93778,93779,93782],{"class":86,"line":17906},[84,93780,93781],{"class":1378},"      \u002F\u002F console.log(video.currentTime)",[84,93783,93784],{"class":1378},"  \u002F\u002F获得当前的视频时间\n",[84,93786,93787],{"class":86,"line":17928},[84,93788,93789],{"class":1378},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[84,93791,93792,93794,93796,93798,93801],{"class":86,"line":17933},[84,93793,75829],{"class":154},[84,93795,72800],{"class":90},[84,93797,155],{"class":154},[84,93799,93800],{"class":158},"'currentTime'",[84,93802,93803],{"class":154},", video.currentTime)\n",[84,93805,93806,93808,93810],{"class":86,"line":17939},[84,93807,55682],{"class":154},[84,93809,7583],{"class":94},[84,93811,162],{"class":154},[84,93813,93814],{"class":86,"line":17953},[84,93815,93816],{"class":1378},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[84,93818,93819,93822,93825,93827,93830,93832],{"class":86,"line":17966},[84,93820,93821],{"class":154},"    video.",[84,93823,93824],{"class":90},"onloadeddata",[84,93826,14735],{"class":129},[84,93828,93829],{"class":154}," () ",[84,93831,85868],{"class":129},[84,93833,16742],{"class":154},[84,93835,93836],{"class":86,"line":17971},[84,93837,61158],{"class":1378},[84,93839,93840],{"class":86,"line":17985},[84,93841,93842],{"class":1378},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[84,93844,93845,93848,93850,93853,93855,93857,93859,93861,93863],{"class":86,"line":17990},[84,93846,93847],{"class":154},"      video.currentTime ",[84,93849,867],{"class":129},[84,93851,93852],{"class":154}," localStorage.",[84,93854,72831],{"class":90},[84,93856,155],{"class":154},[84,93858,93800],{"class":158},[84,93860,1154],{"class":154},[84,93862,72503],{"class":129},[84,93864,48483],{"class":94},[84,93866,93867],{"class":86,"line":17996},[84,93868,3365],{"class":154},[84,93870,93871,93873,93875],{"class":86,"line":18001},[84,93872,53566],{"class":154},[84,93874,52962],{"class":52449},[84,93876,52456],{"class":154},[84,93878,93879,93881,93883],{"class":86,"line":18015},[84,93880,52934],{"class":154},[84,93882,52949],{"class":52449},[84,93884,52456],{"class":154},[84,93886,93887],{"class":86,"line":18020},[84,93888,3578],{"emptyLinePlaceholder":1252},[84,93890,93891,93893,93895],{"class":86,"line":18025},[84,93892,52934],{"class":154},[84,93894,51784],{"class":52449},[84,93896,52456],{"class":154},[1222,93898,93899],{},"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":66,"searchDepth":98,"depth":98,"links":93901},[93902,93907,93911,93912,93913,93918,93923,93924,93925,93926,93933,93938,93939,93949,93953,93954,93958],{"id":77837,"depth":98,"text":77838,"children":93903},[93904,93905,93906],{"id":77841,"depth":106,"text":77842},{"id":77866,"depth":106,"text":77867},{"id":77878,"depth":106,"text":77879},{"id":77890,"depth":98,"text":77891,"children":93908},[93909,93910],{"id":77894,"depth":106,"text":77895},{"id":77909,"depth":106,"text":77910},{"id":77961,"depth":98,"text":77962},{"id":78005,"depth":98,"text":78006},{"id":78022,"depth":98,"text":78023,"children":93914},[93915,93916,93917],{"id":78026,"depth":106,"text":78027},{"id":78039,"depth":106,"text":78040},{"id":78144,"depth":106,"text":78145},{"id":78433,"depth":98,"text":78434,"children":93919},[93920,93921,93922],{"id":78437,"depth":106,"text":78438},{"id":78880,"depth":106,"text":78881},{"id":79291,"depth":106,"text":79292},{"id":79354,"depth":98,"text":79355},{"id":79433,"depth":98,"text":79434},{"id":79526,"depth":98,"text":79527},{"id":81371,"depth":98,"text":81372,"children":93927},[93928,93929,93930,93931,93932],{"id":81375,"depth":106,"text":81376},{"id":81387,"depth":106,"text":81388},{"id":81606,"depth":106,"text":81607},{"id":81624,"depth":106,"text":81625},{"id":81684,"depth":106,"text":81685},{"id":85952,"depth":98,"text":85953,"children":93934},[93935,93936,93937],{"id":85956,"depth":106,"text":85957},{"id":85974,"depth":106,"text":85975},{"id":86000,"depth":106,"text":86001},{"id":86009,"depth":98,"text":86010},{"id":86031,"depth":98,"text":86032,"children":93940},[93941,93942,93943,93944,93945,93946,93947,93948],{"id":86035,"depth":106,"text":86036},{"id":86296,"depth":106,"text":86297},{"id":86482,"depth":106,"text":86483},{"id":86849,"depth":106,"text":86850},{"id":86965,"depth":106,"text":86966},{"id":87001,"depth":106,"text":87002},{"id":87048,"depth":106,"text":87049},{"id":87082,"depth":106,"text":87083},{"id":88445,"depth":98,"text":88446,"children":93950},[93951,93952],{"id":88449,"depth":106,"text":88450},{"id":88486,"depth":106,"text":88487},{"id":89841,"depth":98,"text":89842},{"id":90212,"depth":98,"text":90213,"children":93955},[93956,93957],{"id":90216,"depth":106,"text":90217},{"id":90250,"depth":106,"text":90251},{"id":90979,"depth":98,"text":90980,"children":93959},[93960,93961,93962,93963],{"id":90983,"depth":106,"text":90984},{"id":91941,"depth":106,"text":91942},{"id":92883,"depth":106,"text":92884},{"id":92957,"depth":106,"text":92958},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77826,"description":1249},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93970,"title":93971,"body":93972,"description":93983,"extension":1250,"meta":93984,"navigation":1252,"path":93986,"seo":93987,"stem":93988,"__hash__":93989},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93973,"toc":93981},[93974],[19,93975,93976,93977],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[208,93978,93979],{"href":93979,"rel":93980},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[212],{"title":66,"searchDepth":98,"depth":98,"links":93982},[],"三件套第三套学习",{"category":93985},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93971,"description":93983},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93991,"title":93992,"body":93993,"description":1249,"extension":1250,"meta":94098,"navigation":1252,"path":94099,"seo":94100,"stem":94101,"__hash__":94102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93994,"toc":94093},[93995,94002,94005,94008,94011,94015,94024,94027,94030,94034,94043,94046,94050,94053,94073,94076,94090],[19,93996,93997],{},[208,93998,94001],{"href":93999,"rel":94000},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[212],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94003,93992],{"id":94004},"_1安装",[19,94006,94007],{},"numpy是科学计算基础库,底层是C语言",[19,94009,94010],{},"三种方式：",[14,94012,94014],{"id":94013},"_11-通过pip安装","1.1 通过pip安装",[60,94016,94018],{"className":121,"code":94017,"language":91,"meta":66,"style":66},"pip install numpy\n",[39,94019,94020],{"__ignoreMap":66},[84,94021,94022],{"class":86,"line":87},[84,94023,94017],{"class":154},[19,94025,94026],{},"首选方式，自动处理依赖项",[19,94028,94029],{},"在提示系统命令符中使用cmd",[14,94031,94033],{"id":94032},"_12-通过anaconda安装","1.2 通过Anaconda安装",[60,94035,94037],{"className":121,"code":94036,"language":91,"meta":66,"style":66},"conda install numpy\n",[39,94038,94039],{"__ignoreMap":66},[84,94040,94041],{"class":86,"line":87},[84,94042,94036],{"class":154},[19,94044,94045],{},"自动解决环境依赖",[14,94047,94049],{"id":94048},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94051,94052],{},"对于Debian\u002FUbuntu",[60,94054,94056],{"className":121,"code":94055,"language":91,"meta":66,"style":66},"sudo apt-get install python3-numpy\n",[39,94057,94058],{"__ignoreMap":66},[84,94059,94060,94063,94065,94068,94070],{"class":86,"line":87},[84,94061,94062],{"class":154},"sudo apt",[84,94064,1841],{"class":129},[84,94066,94067],{"class":154},"get install python3",[84,94069,1841],{"class":129},[84,94071,94072],{"class":154},"numpy\n",[19,94074,94075],{},"对于Fedora:",[60,94077,94079],{"className":121,"code":94078,"language":91,"meta":66,"style":66},"sudo dnf install python3-numpy\n",[39,94080,94081],{"__ignoreMap":66},[84,94082,94083,94086,94088],{"class":86,"line":87},[84,94084,94085],{"class":154},"sudo dnf install python3",[84,94087,1841],{"class":129},[84,94089,94072],{"class":154},[1222,94091,94092],{},"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":66,"searchDepth":98,"depth":98,"links":94094},[94095,94096,94097],{"id":94013,"depth":98,"text":94014},{"id":94032,"depth":98,"text":94033},{"id":94048,"depth":98,"text":94049},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93992,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94104,"title":94105,"body":94106,"description":1249,"extension":1250,"meta":94219,"navigation":1252,"path":94220,"seo":94221,"stem":94222,"__hash__":94223},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94107,"toc":94217},[94108,94111,94114,94117,94120,94123,94126,94129,94132,94135,94211,94214],[10,94109,94105],{"id":94110},"_10算数函数",[19,94112,94113],{},"加减乘除运算跟python基础语法没区别",[19,94115,94116],{},"除了python那种方法外还可以使用函数",[19,94118,94119],{},"加：np.add(a,b)",[19,94121,94122],{},"减：np.subtract(a,b)",[19,94124,94125],{},"乘：np.multiply(a,b)",[19,94127,94128],{},"除：np.divide(a,b) == a\u002Fb",[19,94130,94131],{},"取余：np.mod(a,b) == a%b",[19,94133,94134],{},"必须会的用法：",[60,94136,94138],{"className":121,"code":94137,"language":91,"meta":66,"style":66},"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",[39,94139,94140,94162,94183,94193,94206],{"__ignoreMap":66},[84,94141,94142,94144,94146,94149,94151,94154,94156,94158,94160],{"class":86,"line":87},[84,94143,208],{"class":154},[84,94145,867],{"class":129},[84,94147,94148],{"class":154},"np.arange(",[84,94150,1730],{"class":94},[84,94152,94153],{"class":154},").reshape(",[84,94155,1391],{"class":94},[84,94157,1688],{"class":154},[84,94159,1391],{"class":94},[84,94161,162],{"class":154},[84,94163,94164,94166,94168,94171,94173,94175,94177,94179,94181],{"class":86,"line":98},[84,94165,1574],{"class":154},[84,94167,867],{"class":129},[84,94169,94170],{"class":154},"np.array([",[84,94172,1756],{"class":94},[84,94174,1688],{"class":154},[84,94176,1756],{"class":94},[84,94178,1688],{"class":154},[84,94180,1756],{"class":94},[84,94182,5834],{"class":154},[84,94184,94185,94188,94190],{"class":86,"line":106},[84,94186,94187],{"class":154},"result",[84,94189,867],{"class":129},[84,94191,94192],{"class":154},"np.empty_like(a)\n",[84,94194,94195,94198,94201,94203],{"class":86,"line":112},[84,94196,94197],{"class":154},"np.add(a,b,",[84,94199,94200],{"class":928},"out",[84,94202,867],{"class":129},[84,94204,94205],{"class":154},"result)\n",[84,94207,94208],{"class":86,"line":425},[84,94209,94210],{"class":154},"result\n",[19,94212,94213],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1222,94215,94216],{},"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":66,"searchDepth":98,"depth":98,"links":94218},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94105,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94225,"title":94226,"body":94227,"description":1249,"extension":1250,"meta":94989,"navigation":1252,"path":94990,"seo":94991,"stem":94992,"__hash__":94993},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94228,"toc":94976},[94229,94232,94235,94238,94242,94281,94285,94329,94389,94393,94396,94435,94438,94483,94487,94523,94527,94596,94600,94664,94668,94671,94674,94677,94680,94716,94720,94760,94764,94836,94839,94843,94906,94910,94973],[10,94230,94226],{"id":94231},"_11统计函数",[19,94233,94234],{},"sum max min mean",[19,94236,94237],{},"这些有axis参数，可以指定方向",[14,94239,94241],{"id":94240},"_111-sum求和函数","11.1 sum()求和函数",[60,94243,94245],{"className":121,"code":94244,"language":91,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[39,94246,94247,94252,94273],{"__ignoreMap":66},[84,94248,94249],{"class":86,"line":87},[84,94250,94251],{"class":1378},"#创建一维数组\n",[84,94253,94254,94256,94258,94261,94263,94265,94267,94269,94271],{"class":86,"line":98},[84,94255,208],{"class":154},[84,94257,867],{"class":129},[84,94259,94260],{"class":154},"np.random.randint(",[84,94262,1529],{"class":94},[84,94264,1688],{"class":154},[84,94266,821],{"class":94},[84,94268,1688],{"class":154},[84,94270,2008],{"class":94},[84,94272,162],{"class":154},[84,94274,94275,94278],{"class":86,"line":106},[84,94276,94277],{"class":154},"np.sum(a)",[84,94279,94280],{"class":1378},"#求和\n",[14,94282,94284],{"id":94283},"_112-max求最大值函数","11.2 max()求最大值函数",[60,94286,94288],{"className":121,"code":94287,"language":91,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[39,94289,94290,94294,94314,94319,94324],{"__ignoreMap":66},[84,94291,94292],{"class":86,"line":87},[84,94293,94251],{"class":1378},[84,94295,94296,94298,94300,94302,94304,94306,94308,94310,94312],{"class":86,"line":98},[84,94297,208],{"class":154},[84,94299,867],{"class":129},[84,94301,94260],{"class":154},[84,94303,1529],{"class":94},[84,94305,1688],{"class":154},[84,94307,821],{"class":94},[84,94309,1688],{"class":154},[84,94311,2008],{"class":94},[84,94313,162],{"class":154},[84,94315,94316],{"class":86,"line":106},[84,94317,94318],{"class":154},"np.max(a)\n",[84,94320,94321],{"class":86,"line":112},[84,94322,94323],{"class":1378},"#最大索引(求最大元素的索引)arg\n",[84,94325,94326],{"class":86,"line":425},[84,94327,94328],{"class":154},"np.argmax(a)\n",[60,94330,94332],{"className":121,"code":94331,"language":91,"meta":66,"style":66},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[39,94333,94334,94355,94375,94379],{"__ignoreMap":66},[84,94335,94336,94338,94340,94343,94345,94347,94349,94351,94353],{"class":86,"line":87},[84,94337,12091],{"class":154},[84,94339,867],{"class":129},[84,94341,94342],{"class":154}," np.array([",[84,94344,1529],{"class":94},[84,94346,846],{"class":154},[84,94348,1629],{"class":94},[84,94350,846],{"class":154},[84,94352,1391],{"class":94},[84,94354,5834],{"class":154},[84,94356,94357,94359,94361,94363,94365,94367,94369,94371,94373],{"class":86,"line":98},[84,94358,12117],{"class":154},[84,94360,867],{"class":129},[84,94362,94342],{"class":154},[84,94364,1391],{"class":94},[84,94366,846],{"class":154},[84,94368,1397],{"class":94},[84,94370,846],{"class":154},[84,94372,1604],{"class":94},[84,94374,5834],{"class":154},[84,94376,94377],{"class":86,"line":106},[84,94378,3578],{"emptyLinePlaceholder":1252},[84,94380,94381,94383,94386],{"class":86,"line":112},[84,94382,730],{"class":94},[84,94384,94385],{"class":154},"(np.maximum(a, b))   ",[84,94387,94388],{"class":1378},"# [3 5 4]，每个位置上取较大值\n",[14,94390,94392],{"id":94391},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94394,94395],{},"①一维数组：",[60,94397,94399],{"className":121,"code":94398,"language":91,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[39,94400,94401,94405,94425,94430],{"__ignoreMap":66},[84,94402,94403],{"class":86,"line":87},[84,94404,94251],{"class":1378},[84,94406,94407,94409,94411,94413,94415,94417,94419,94421,94423],{"class":86,"line":98},[84,94408,208],{"class":154},[84,94410,867],{"class":129},[84,94412,94260],{"class":154},[84,94414,1529],{"class":94},[84,94416,1688],{"class":154},[84,94418,821],{"class":94},[84,94420,1688],{"class":154},[84,94422,2008],{"class":94},[84,94424,162],{"class":154},[84,94426,94427],{"class":86,"line":106},[84,94428,94429],{"class":1378},"#求平均值\n",[84,94431,94432],{"class":86,"line":112},[84,94433,94434],{"class":154},"np.mean(a)\n",[19,94436,94437],{},"②二维数组",[60,94439,94441],{"className":121,"code":94440,"language":91,"meta":66,"style":66},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[39,94442,94443,94448,94473,94478],{"__ignoreMap":66},[84,94444,94445],{"class":86,"line":87},[84,94446,94447],{"class":1378},"#二维数组\n",[84,94449,94450,94453,94455,94457,94459,94461,94463,94465,94467,94469,94471],{"class":86,"line":98},[84,94451,94452],{"class":154},"aa",[84,94454,867],{"class":129},[84,94456,94148],{"class":154},[84,94458,1529],{"class":94},[84,94460,1688],{"class":154},[84,94462,1832],{"class":94},[84,94464,94153],{"class":154},[84,94466,1391],{"class":94},[84,94468,1688],{"class":154},[84,94470,1604],{"class":94},[84,94472,162],{"class":154},[84,94474,94475],{"class":86,"line":106},[84,94476,94477],{"class":1378},"#对数组中的所有数求平均\n",[84,94479,94480],{"class":86,"line":112},[84,94481,94482],{"class":154},"np.mean(aa)\n",[14,94484,94486],{"id":94485},"_114-median求中位数函数","11.4 median()求中位数函数",[60,94488,94490],{"className":121,"code":94489,"language":91,"meta":66,"style":66},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[39,94491,94492,94497,94513,94518],{"__ignoreMap":66},[84,94493,94494],{"class":86,"line":87},[84,94495,94496],{"class":1378},"#求中位数\n",[84,94498,94499,94501,94503,94505,94507,94509,94511],{"class":86,"line":98},[84,94500,1574],{"class":154},[84,94502,867],{"class":129},[84,94504,94148],{"class":154},[84,94506,1529],{"class":94},[84,94508,1688],{"class":154},[84,94510,1756],{"class":94},[84,94512,162],{"class":154},[84,94514,94515],{"class":86,"line":106},[84,94516,94517],{"class":154},"np.median(b)\n",[84,94519,94520],{"class":86,"line":112},[84,94521,94522],{"class":1378},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94524,94526],{"id":94525},"_115-power求幂运算函数","11.5 power()求幂运算函数",[60,94528,94530],{"className":121,"code":94529,"language":91,"meta":66,"style":66},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[39,94531,94532,94548,94553,94558,94567,94572,94581],{"__ignoreMap":66},[84,94533,94534,94536,94538,94540,94542,94544,94546],{"class":86,"line":87},[84,94535,1574],{"class":154},[84,94537,867],{"class":129},[84,94539,94148],{"class":154},[84,94541,1529],{"class":94},[84,94543,1688],{"class":154},[84,94545,1756],{"class":94},[84,94547,162],{"class":154},[84,94549,94550],{"class":86,"line":98},[84,94551,94552],{"class":1378},"#幂运算\n",[84,94554,94555],{"class":86,"line":106},[84,94556,94557],{"class":1378},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[84,94559,94560,94563,94565],{"class":86,"line":112},[84,94561,94562],{"class":154},"np.power(b,",[84,94564,1397],{"class":94},[84,94566,162],{"class":154},[84,94568,94569],{"class":86,"line":425},[84,94570,94571],{"class":1378},"#或者以下代码，将数据存储起来\n",[84,94573,94574,94576,94578],{"class":86,"line":2395},[84,94575,2153],{"class":154},[84,94577,867],{"class":129},[84,94579,94580],{"class":154},"np.empty_like(b)\n",[84,94582,94583,94585,94587,94589,94591,94593],{"class":86,"line":2401},[84,94584,94562],{"class":154},[84,94586,1397],{"class":94},[84,94588,1688],{"class":154},[84,94590,94200],{"class":928},[84,94592,867],{"class":129},[84,94594,94595],{"class":154},"y)\n",[14,94597,94599],{"id":94598},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[60,94601,94603],{"className":121,"code":94602,"language":91,"meta":66,"style":66},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[39,94604,94605,94621,94626,94631,94635,94653],{"__ignoreMap":66},[84,94606,94607,94609,94611,94613,94615,94617,94619],{"class":86,"line":87},[84,94608,1574],{"class":154},[84,94610,867],{"class":129},[84,94612,94148],{"class":154},[84,94614,1529],{"class":94},[84,94616,1688],{"class":154},[84,94618,1756],{"class":94},[84,94620,162],{"class":154},[84,94622,94623],{"class":86,"line":98},[84,94624,94625],{"class":1378},"#开方\n",[84,94627,94628],{"class":86,"line":106},[84,94629,94630],{"class":154},"np.sqrt(b)\n",[84,94632,94633],{"class":86,"line":112},[84,94634,94571],{"class":1378},[84,94636,94637,94639,94641,94644,94647,94649,94651],{"class":86,"line":425},[84,94638,2153],{"class":154},[84,94640,867],{"class":129},[84,94642,94643],{"class":154},"np.empty_like(b,",[84,94645,94646],{"class":928},"dtype",[84,94648,867],{"class":129},[84,94650,1362],{"class":94},[84,94652,162],{"class":154},[84,94654,94655,94658,94660,94662],{"class":86,"line":2395},[84,94656,94657],{"class":154},"np.sqrt(b,",[84,94659,94200],{"class":928},[84,94661,867],{"class":129},[84,94663,94595],{"class":154},[14,94665,94667],{"id":94666},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94669,94670],{},"对数组中的元素累计求和，可指定轴",[19,94672,94673],{},"#累计求和的意思是：",[19,94675,94676],{},"a = np.array([1, 2, 3, 4])",[19,94678,94679],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[60,94681,94683],{"className":121,"code":94682,"language":91,"meta":66,"style":66},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[39,94684,94685,94701,94706,94711],{"__ignoreMap":66},[84,94686,94687,94689,94691,94693,94695,94697,94699],{"class":86,"line":87},[84,94688,1574],{"class":154},[84,94690,867],{"class":129},[84,94692,94148],{"class":154},[84,94694,1529],{"class":94},[84,94696,1688],{"class":154},[84,94698,1756],{"class":94},[84,94700,162],{"class":154},[84,94702,94703],{"class":86,"line":98},[84,94704,94705],{"class":154},"np.cumsum(b)\n",[84,94707,94708],{"class":86,"line":106},[84,94709,94710],{"class":1378},"#结果：\n",[84,94712,94713],{"class":86,"line":112},[84,94714,94715],{"class":1378},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94717,94719],{"id":94718},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[60,94721,94723],{"className":121,"code":94722,"language":91,"meta":66,"style":66},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[39,94724,94725,94741,94746,94751,94755],{"__ignoreMap":66},[84,94726,94727,94729,94731,94733,94735,94737,94739],{"class":86,"line":87},[84,94728,1574],{"class":154},[84,94730,867],{"class":129},[84,94732,94148],{"class":154},[84,94734,1529],{"class":94},[84,94736,1688],{"class":154},[84,94738,1756],{"class":94},[84,94740,162],{"class":154},[84,94742,94743],{"class":86,"line":98},[84,94744,94745],{"class":1378},"#对数组中的元素累计求积，可指定轴\n",[84,94747,94748],{"class":86,"line":106},[84,94749,94750],{"class":154},"np.cumprod(b)\n",[84,94752,94753],{"class":86,"line":112},[84,94754,94710],{"class":1378},[84,94756,94757],{"class":86,"line":425},[84,94758,94759],{"class":1378},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94761,94763],{"id":94762},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[60,94765,94767],{"className":121,"code":94766,"language":91,"meta":66,"style":66},"#删除数组中的重复数据，并对数据进行排序\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",[39,94768,94769,94774,94822,94827,94831],{"__ignoreMap":66},[84,94770,94771],{"class":86,"line":87},[84,94772,94773],{"class":1378},"#删除数组中的重复数据，并对数据进行排序\n",[84,94775,94776,94778,94780,94782,94784,94786,94788,94790,94792,94794,94796,94798,94800,94802,94804,94806,94808,94810,94812,94814,94816,94818,94820],{"class":86,"line":98},[84,94777,208],{"class":154},[84,94779,867],{"class":129},[84,94781,94170],{"class":154},[84,94783,1529],{"class":94},[84,94785,1688],{"class":154},[84,94787,1397],{"class":94},[84,94789,1688],{"class":154},[84,94791,1391],{"class":94},[84,94793,1688],{"class":154},[84,94795,1807],{"class":94},[84,94797,1688],{"class":154},[84,94799,1391],{"class":94},[84,94801,1688],{"class":154},[84,94803,1756],{"class":94},[84,94805,1688],{"class":154},[84,94807,1510],{"class":94},[84,94809,1688],{"class":154},[84,94811,1504],{"class":94},[84,94813,1688],{"class":154},[84,94815,2083],{"class":94},[84,94817,1688],{"class":154},[84,94819,1604],{"class":94},[84,94821,5834],{"class":154},[84,94823,94824],{"class":86,"line":106},[84,94825,94826],{"class":154},"np.unique(a)\n",[84,94828,94829],{"class":86,"line":112},[84,94830,94710],{"class":1378},[84,94832,94833],{"class":86,"line":425},[84,94834,94835],{"class":1378},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94837,94838],{},"升序形式排序",[14,94840,94842],{"id":94841},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[60,94844,94846],{"className":121,"code":94845,"language":91,"meta":66,"style":66},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[39,94847,94848,94896,94901],{"__ignoreMap":66},[84,94849,94850,94852,94854,94856,94858,94860,94862,94864,94866,94868,94870,94872,94874,94876,94878,94880,94882,94884,94886,94888,94890,94892,94894],{"class":86,"line":87},[84,94851,208],{"class":154},[84,94853,867],{"class":129},[84,94855,94170],{"class":154},[84,94857,1529],{"class":94},[84,94859,1688],{"class":154},[84,94861,1397],{"class":94},[84,94863,1688],{"class":154},[84,94865,1391],{"class":94},[84,94867,1688],{"class":154},[84,94869,1807],{"class":94},[84,94871,1688],{"class":154},[84,94873,1391],{"class":94},[84,94875,1688],{"class":154},[84,94877,1756],{"class":94},[84,94879,1688],{"class":154},[84,94881,1510],{"class":94},[84,94883,1688],{"class":154},[84,94885,1504],{"class":94},[84,94887,1688],{"class":154},[84,94889,2083],{"class":94},[84,94891,1688],{"class":154},[84,94893,1604],{"class":94},[84,94895,5834],{"class":154},[84,94897,94898],{"class":86,"line":98},[84,94899,94900],{"class":1378},"#返回数组中非零元素的索引\n",[84,94902,94903],{"class":86,"line":106},[84,94904,94905],{"class":154},"np.nonzero(a)\n",[14,94907,94909],{"id":94908},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[60,94911,94913],{"className":121,"code":94912,"language":91,"meta":66,"style":66},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[39,94914,94915,94963,94968],{"__ignoreMap":66},[84,94916,94917,94919,94921,94923,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959,94961],{"class":86,"line":87},[84,94918,208],{"class":154},[84,94920,867],{"class":129},[84,94922,94170],{"class":154},[84,94924,1529],{"class":94},[84,94926,1688],{"class":154},[84,94928,1397],{"class":94},[84,94930,1688],{"class":154},[84,94932,1391],{"class":94},[84,94934,1688],{"class":154},[84,94936,1807],{"class":94},[84,94938,1688],{"class":154},[84,94940,1391],{"class":94},[84,94942,1688],{"class":154},[84,94944,1756],{"class":94},[84,94946,1688],{"class":154},[84,94948,1510],{"class":94},[84,94950,1688],{"class":154},[84,94952,1504],{"class":94},[84,94954,1688],{"class":154},[84,94956,2083],{"class":94},[84,94958,1688],{"class":154},[84,94960,1604],{"class":94},[84,94962,5834],{"class":154},[84,94964,94965],{"class":86,"line":98},[84,94966,94967],{"class":1378},"#计算一组数中最大值与最小值的差，可指定轴\n",[84,94969,94970],{"class":86,"line":106},[84,94971,94972],{"class":154},"np.ptp(a)\n",[1222,94974,94975],{},"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":66,"searchDepth":98,"depth":98,"links":94977},[94978,94979,94980,94981,94982,94983,94984,94985,94986,94987,94988],{"id":94240,"depth":98,"text":94241},{"id":94283,"depth":98,"text":94284},{"id":94391,"depth":98,"text":94392},{"id":94485,"depth":98,"text":94486},{"id":94525,"depth":98,"text":94526},{"id":94598,"depth":98,"text":94599},{"id":94666,"depth":98,"text":94667},{"id":94718,"depth":98,"text":94719},{"id":94762,"depth":98,"text":94763},{"id":94841,"depth":98,"text":94842},{"id":94908,"depth":98,"text":94909},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94226,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94995,"title":94996,"body":94997,"description":1249,"extension":1250,"meta":95652,"navigation":1252,"path":95653,"seo":95654,"stem":95655,"__hash__":95656},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94998,"toc":95640},[94999,95002,95006,95009,95225,95229,95232,95441,95445,95511,95516,95520,95523,95526,95564,95568,95571,95576,95580,95583,95586,95591,95595,95598,95602,95605,95608,95613,95617,95620,95623,95628,95632,95637],[10,95000,94996],{"id":95001},"_12其他常用函数",[14,95003,95005],{"id":95004},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95007,95008],{},"将数组的数据按照行列复制扩展",[60,95010,95012],{"className":121,"code":95011,"language":91,"meta":66,"style":66},"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",[39,95013,95014,95030,95039,95043,95048,95053,95066,95070,95075,95080,95085,95089,95094,95118,95130,95134,95138,95143,95148,95153,95158,95162,95175,95179,95183,95188,95193,95198,95203,95208,95212,95216,95221],{"__ignoreMap":66},[84,95015,95016,95018,95020,95022,95024,95026,95028],{"class":86,"line":87},[84,95017,208],{"class":154},[84,95019,867],{"class":129},[84,95021,94148],{"class":154},[84,95023,1529],{"class":94},[84,95025,1688],{"class":154},[84,95027,1629],{"class":94},[84,95029,162],{"class":154},[84,95031,95032,95035,95037],{"class":86,"line":98},[84,95033,95034],{"class":154},"np.tile(a,",[84,95036,1397],{"class":94},[84,95038,162],{"class":154},[84,95040,95041],{"class":86,"line":106},[84,95042,94710],{"class":1378},[84,95044,95045],{"class":86,"line":112},[84,95046,95047],{"class":1378},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[84,95049,95050],{"class":86,"line":425},[84,95051,95052],{"class":1378},"#行复制两次，列复制三次\n",[84,95054,95055,95058,95060,95062,95064],{"class":86,"line":2395},[84,95056,95057],{"class":154},"np.tile(a,(",[84,95059,1397],{"class":94},[84,95061,1688],{"class":154},[84,95063,1391],{"class":94},[84,95065,31651],{"class":154},[84,95067,95068],{"class":86,"line":2401},[84,95069,94710],{"class":1378},[84,95071,95072],{"class":86,"line":2492},[84,95073,95074],{"class":158},"'''\n",[84,95076,95077],{"class":86,"line":2498},[84,95078,95079],{"class":158},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[84,95081,95082],{"class":86,"line":2510},[84,95083,95084],{"class":158},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[84,95086,95087],{"class":86,"line":2793},[84,95088,95074],{"class":158},[84,95090,95091],{"class":86,"line":2798},[84,95092,95093],{"class":1378},"#创建二维数组\n",[84,95095,95096,95098,95100,95102,95104,95106,95108,95110,95112,95114,95116],{"class":86,"line":2804},[84,95097,94452],{"class":154},[84,95099,867],{"class":129},[84,95101,94148],{"class":154},[84,95103,1529],{"class":94},[84,95105,1688],{"class":154},[84,95107,1832],{"class":94},[84,95109,94153],{"class":154},[84,95111,1604],{"class":94},[84,95113,1688],{"class":154},[84,95115,1391],{"class":94},[84,95117,162],{"class":154},[84,95119,95120,95123,95125,95127],{"class":86,"line":2809},[84,95121,95122],{"class":154},"np.tile(aa,",[84,95124,1397],{"class":94},[84,95126,1739],{"class":154},[84,95128,95129],{"class":1378},"#一个数的时候就是行\n",[84,95131,95132],{"class":86,"line":2823},[84,95133,94710],{"class":1378},[84,95135,95136],{"class":86,"line":2828},[84,95137,95074],{"class":158},[84,95139,95140],{"class":86,"line":2834},[84,95141,95142],{"class":158},"array([[ 1,  2,  3,  1,  2,  3],\n",[84,95144,95145],{"class":86,"line":2855},[84,95146,95147],{"class":158},"       [ 4,  5,  6,  4,  5,  6],\n",[84,95149,95150],{"class":86,"line":2860},[84,95151,95152],{"class":158},"       [ 7,  8,  9,  7,  8,  9],\n",[84,95154,95155],{"class":86,"line":2874},[84,95156,95157],{"class":158},"       [10, 11, 12, 10, 11, 12]])\n",[84,95159,95160],{"class":86,"line":2879},[84,95161,95074],{"class":158},[84,95163,95164,95167,95169,95171,95173],{"class":86,"line":2908},[84,95165,95166],{"class":154},"np.tile(aa,(",[84,95168,1397],{"class":94},[84,95170,1688],{"class":154},[84,95172,1391],{"class":94},[84,95174,31651],{"class":154},[84,95176,95177],{"class":86,"line":2913},[84,95178,94710],{"class":1378},[84,95180,95181],{"class":86,"line":2930},[84,95182,95074],{"class":158},[84,95184,95185],{"class":86,"line":2935},[84,95186,95187],{"class":158},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[84,95189,95190],{"class":86,"line":2940},[84,95191,95192],{"class":158},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[84,95194,95195],{"class":86,"line":2945},[84,95196,95197],{"class":158},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[84,95199,95200],{"class":86,"line":2959},[84,95201,95202],{"class":158},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[84,95204,95205],{"class":86,"line":2964},[84,95206,95207],{"class":158},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[84,95209,95210],{"class":86,"line":3755},[84,95211,95192],{"class":158},[84,95213,95214],{"class":86,"line":3769},[84,95215,95197],{"class":158},[84,95217,95218],{"class":86,"line":3777},[84,95219,95220],{"class":158},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[84,95222,95223],{"class":86,"line":3782},[84,95224,95074],{"class":158},[14,95226,95228],{"id":95227},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95230,95231],{},"repeat()将数组中的每个元素重复若干次",[60,95233,95235],{"className":121,"code":95234,"language":91,"meta":66,"style":66},"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",[39,95236,95237,95253,95262,95266,95271,95295,95300,95309,95313,95318,95322,95327,95343,95347,95351,95356,95361,95366,95370,95375,95379,95384,95389,95393,95409,95413,95417,95422,95427,95432,95437],{"__ignoreMap":66},[84,95238,95239,95241,95243,95245,95247,95249,95251],{"class":86,"line":87},[84,95240,208],{"class":154},[84,95242,867],{"class":129},[84,95244,94148],{"class":154},[84,95246,1529],{"class":94},[84,95248,1688],{"class":154},[84,95250,1629],{"class":94},[84,95252,162],{"class":154},[84,95254,95255,95258,95260],{"class":86,"line":98},[84,95256,95257],{"class":154},"np.repeat(a,",[84,95259,1391],{"class":94},[84,95261,162],{"class":154},[84,95263,95264],{"class":86,"line":106},[84,95265,94710],{"class":1378},[84,95267,95268],{"class":86,"line":112},[84,95269,95270],{"class":1378},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[84,95272,95273,95275,95277,95279,95281,95283,95285,95287,95289,95291,95293],{"class":86,"line":425},[84,95274,94452],{"class":154},[84,95276,867],{"class":129},[84,95278,94148],{"class":154},[84,95280,1529],{"class":94},[84,95282,1688],{"class":154},[84,95284,1832],{"class":94},[84,95286,94153],{"class":154},[84,95288,1604],{"class":94},[84,95290,1688],{"class":154},[84,95292,1391],{"class":94},[84,95294,162],{"class":154},[84,95296,95297],{"class":86,"line":2395},[84,95298,95299],{"class":1378},"#这个重复之后二维变成一维\n",[84,95301,95302,95305,95307],{"class":86,"line":2401},[84,95303,95304],{"class":154},"np.repeat(aa,",[84,95306,1397],{"class":94},[84,95308,162],{"class":154},[84,95310,95311],{"class":86,"line":2492},[84,95312,95074],{"class":158},[84,95314,95315],{"class":86,"line":2498},[84,95316,95317],{"class":158},"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",[84,95319,95320],{"class":86,"line":2510},[84,95321,95074],{"class":158},[84,95323,95324],{"class":86,"line":2793},[84,95325,95326],{"class":1378},"#指定axis\n",[84,95328,95329,95331,95333,95335,95337,95339,95341],{"class":86,"line":2798},[84,95330,95304],{"class":154},[84,95332,1397],{"class":94},[84,95334,1688],{"class":154},[84,95336,48664],{"class":928},[84,95338,867],{"class":129},[84,95340,1504],{"class":94},[84,95342,162],{"class":154},[84,95344,95345],{"class":86,"line":2804},[84,95346,94710],{"class":1378},[84,95348,95349],{"class":86,"line":2809},[84,95350,95074],{"class":158},[84,95352,95353],{"class":86,"line":2823},[84,95354,95355],{"class":158},"array([[ 1,  2,  3],\n",[84,95357,95358],{"class":86,"line":2828},[84,95359,95360],{"class":158},"       [ 1,  2,  3],\n",[84,95362,95363],{"class":86,"line":2834},[84,95364,95365],{"class":158},"       [ 4,  5,  6],\n",[84,95367,95368],{"class":86,"line":2855},[84,95369,95365],{"class":158},[84,95371,95372],{"class":86,"line":2860},[84,95373,95374],{"class":158},"       [ 7,  8,  9],\n",[84,95376,95377],{"class":86,"line":2874},[84,95378,95374],{"class":158},[84,95380,95381],{"class":86,"line":2879},[84,95382,95383],{"class":158},"       [10, 11, 12],\n",[84,95385,95386],{"class":86,"line":2908},[84,95387,95388],{"class":158},"       [10, 11, 12]])\n",[84,95390,95391],{"class":86,"line":2913},[84,95392,95074],{"class":158},[84,95394,95395,95397,95399,95401,95403,95405,95407],{"class":86,"line":2930},[84,95396,95304],{"class":154},[84,95398,1397],{"class":94},[84,95400,1688],{"class":154},[84,95402,48664],{"class":928},[84,95404,867],{"class":129},[84,95406,1529],{"class":94},[84,95408,162],{"class":154},[84,95410,95411],{"class":86,"line":2935},[84,95412,94710],{"class":1378},[84,95414,95415],{"class":86,"line":2940},[84,95416,95074],{"class":158},[84,95418,95419],{"class":86,"line":2945},[84,95420,95421],{"class":158},"array([[ 1,  1,  2,  2,  3,  3],\n",[84,95423,95424],{"class":86,"line":2959},[84,95425,95426],{"class":158},"       [ 4,  4,  5,  5,  6,  6],\n",[84,95428,95429],{"class":86,"line":2964},[84,95430,95431],{"class":158},"       [ 7,  7,  8,  8,  9,  9],\n",[84,95433,95434],{"class":86,"line":3755},[84,95435,95436],{"class":158},"       [10, 10, 11, 11, 12, 12]])\n",[84,95438,95439],{"class":86,"line":3769},[84,95440,95074],{"class":158},[14,95442,95444],{"id":95443},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[60,95446,95448],{"className":121,"code":95447,"language":91,"meta":66,"style":66},"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",[39,95449,95450,95466,95471,95483,95487,95492,95502,95506],{"__ignoreMap":66},[84,95451,95452,95454,95456,95458,95460,95462,95464],{"class":86,"line":87},[84,95453,208],{"class":154},[84,95455,867],{"class":129},[84,95457,94148],{"class":154},[84,95459,1529],{"class":94},[84,95461,1688],{"class":154},[84,95463,1629],{"class":94},[84,95465,162],{"class":154},[84,95467,95468],{"class":86,"line":98},[84,95469,95470],{"class":1378},"#array([，2，3，4])\n",[84,95472,95473,95476,95478,95480],{"class":86,"line":106},[84,95474,95475],{"class":154},"np.roll(a,",[84,95477,1397],{"class":94},[84,95479,1739],{"class":154},[84,95481,95482],{"class":1378},"#传正数向后调多少位，传负数向前调多少位\n",[84,95484,95485],{"class":86,"line":112},[84,95486,94710],{"class":1378},[84,95488,95489],{"class":86,"line":425},[84,95490,95491],{"class":1378},"#array([3, 4, 1, 2])\n",[84,95493,95494,95496,95498,95500],{"class":86,"line":2395},[84,95495,95475],{"class":154},[84,95497,1841],{"class":129},[84,95499,1529],{"class":94},[84,95501,162],{"class":154},[84,95503,95504],{"class":86,"line":2401},[84,95505,94710],{"class":1378},[84,95507,95508],{"class":86,"line":2492},[84,95509,95510],{"class":1378},"#array([2, 3, 4, 1])\n",[19,95512,95513],{},[2643,95514],{"alt":66,"src":95515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95517,95519],{"id":95518},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95521,95522],{},"resize()重新调整数组的大小",[19,95524,95525],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[60,95527,95529],{"className":121,"code":95528,"language":91,"meta":66,"style":66},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[39,95530,95531,95536,95549],{"__ignoreMap":66},[84,95532,95533],{"class":86,"line":87},[84,95534,95535],{"class":1378},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[84,95537,95538,95541,95543,95545,95547],{"class":86,"line":98},[84,95539,95540],{"class":154},"np.resize(aa,(",[84,95542,1397],{"class":94},[84,95544,1688],{"class":154},[84,95546,1654],{"class":94},[84,95548,31651],{"class":154},[84,95550,95551,95553,95555,95557,95559,95561],{"class":86,"line":106},[84,95552,95540],{"class":154},[84,95554,1397],{"class":94},[84,95556,1688],{"class":154},[84,95558,1730],{"class":94},[84,95560,83917],{"class":154},[84,95562,95563],{"class":1378},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95565,95567],{"id":95566},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95569,95570],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95572,95573],{},[2643,95574],{"alt":66,"src":95575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95577,95579],{"id":95578},"_126-保存加载文件","12.6 保存加载文件",[19,95581,95582],{},"savetxt():将数据保存到txt文件中",[19,95584,95585],{},"loadtxt():从文件加载数据",[19,95587,95588],{},[2643,95589],{"alt":66,"src":95590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95592,95594],{"id":95593},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95596,95597],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95599,95601],{"id":95600},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95603,95604],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95606,95607],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95609,95610],{},[2643,95611],{"alt":66,"src":95612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95614,95616],{"id":95615},"_129-where语句","12.9 where语句",[19,95618,95619],{},"np.where(条件,x,y)",[19,95621,95622],{},"如果条件为True,对应值为x,否则对应值为y",[19,95624,95625],{},[2643,95626],{"alt":66,"src":95627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95629,95631],{"id":95630},"_1210-dot矩阵","12.10 dot()矩阵",[19,95633,95634],{},[2643,95635],{"alt":66,"src":95636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1222,95638,95639],{},"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":66,"searchDepth":98,"depth":98,"links":95641},[95642,95643,95644,95645,95646,95647,95648,95649,95650,95651],{"id":95004,"depth":98,"text":95005},{"id":95227,"depth":98,"text":95228},{"id":95443,"depth":98,"text":95444},{"id":95518,"depth":98,"text":95519},{"id":95566,"depth":98,"text":95567},{"id":95578,"depth":98,"text":95579},{"id":95593,"depth":98,"text":95594},{"id":95600,"depth":98,"text":95601},{"id":95615,"depth":98,"text":95616},{"id":95630,"depth":98,"text":95631},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94996,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95658,"title":95659,"body":95660,"description":1249,"extension":1250,"meta":96013,"navigation":1252,"path":96014,"seo":96015,"stem":96016,"__hash__":96017},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95661,"toc":96011},[95662,95665,95668,95671,95674,95677,95742,95744,96008],[10,95663,95659],{"id":95664},"_13数组排序",[19,95666,95667],{},"排序主要用到的方法是np.sort和np.argsort",[19,95669,95670],{},"其中np.sort()对数组直接排序",[19,95672,95673],{},"而np.argsort()是返回排序后的原始索引",[19,95675,95676],{},"①一维数组",[60,95678,95680],{"className":121,"code":95679,"language":91,"meta":66,"style":66},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[39,95681,95682,95686,95726,95734],{"__ignoreMap":66},[84,95683,95684],{"class":86,"line":87},[84,95685,94251],{"class":1378},[84,95687,95688,95690,95692,95694,95696,95698,95700,95702,95704,95706,95708,95710,95712,95714,95716,95718,95720,95722,95724],{"class":86,"line":98},[84,95689,208],{"class":154},[84,95691,867],{"class":129},[84,95693,94170],{"class":154},[84,95695,1391],{"class":94},[84,95697,1688],{"class":154},[84,95699,1807],{"class":94},[84,95701,1688],{"class":154},[84,95703,1705],{"class":94},[84,95705,1688],{"class":154},[84,95707,2083],{"class":94},[84,95709,1688],{"class":154},[84,95711,1590],{"class":94},[84,95713,1688],{"class":154},[84,95715,2201],{"class":94},[84,95717,1688],{"class":154},[84,95719,1654],{"class":94},[84,95721,1688],{"class":154},[84,95723,1756],{"class":94},[84,95725,5834],{"class":154},[84,95727,95728,95731],{"class":86,"line":106},[84,95729,95730],{"class":154},"np.sort(a)",[84,95732,95733],{"class":1378},"#升序排序\n",[84,95735,95736,95739],{"class":86,"line":112},[84,95737,95738],{"class":154},"np.argsort(a)",[84,95740,95741],{"class":1378},"#按照元素大小来索引排序\n",[19,95743,94437],{},[60,95745,95747],{"className":121,"code":95746,"language":91,"meta":66,"style":66},"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",[39,95748,95749,95761,95787,95792,95796,95801,95806,95811,95816,95820,95828,95832,95837,95842,95847,95852,95856,95861,95874,95878,95883,95888,95893,95898,95902,95907,95919,95923,95927,95931,95935,95939,95943,95948,95963,95968,95977,95982,95986,95990,95995,95999,96004],{"__ignoreMap":66},[84,95750,95751,95754,95756,95758],{"class":86,"line":87},[84,95752,95753],{"class":154},"np.random.seed(",[84,95755,1504],{"class":94},[84,95757,1739],{"class":154},[84,95759,95760],{"class":1378},"#保证每次值一样\n",[84,95762,95763,95765,95767,95769,95771,95773,95775,95777,95779,95781,95783,95785],{"class":86,"line":98},[84,95764,94452],{"class":154},[84,95766,867],{"class":129},[84,95768,94260],{"class":154},[84,95770,821],{"class":94},[84,95772,1688],{"class":154},[84,95774,32649],{"class":928},[84,95776,867],{"class":129},[84,95778,155],{"class":154},[84,95780,1604],{"class":94},[84,95782,1688],{"class":154},[84,95784,1654],{"class":94},[84,95786,31651],{"class":154},[84,95788,95789],{"class":86,"line":106},[84,95790,95791],{"class":1378},"#原数组：\n",[84,95793,95794],{"class":86,"line":112},[84,95795,95074],{"class":158},[84,95797,95798],{"class":86,"line":425},[84,95799,95800],{"class":158},"array([[44, 47, 64, 67, 67,  9],\n",[84,95802,95803],{"class":86,"line":2395},[84,95804,95805],{"class":158},"       [83, 21, 36, 87, 70, 88],\n",[84,95807,95808],{"class":86,"line":2401},[84,95809,95810],{"class":158},"       [88, 12, 58, 65, 39, 87],\n",[84,95812,95813],{"class":86,"line":2492},[84,95814,95815],{"class":158},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[84,95817,95818],{"class":86,"line":2498},[84,95819,95074],{"class":158},[84,95821,95822,95825],{"class":86,"line":2510},[84,95823,95824],{"class":154},"np.sort(aa)",[84,95826,95827],{"class":1378},"#每行进行了排序\n",[84,95829,95830],{"class":86,"line":2793},[84,95831,95074],{"class":158},[84,95833,95834],{"class":86,"line":2798},[84,95835,95836],{"class":158},"array([[ 9, 44, 47, 64, 67, 67],\n",[84,95838,95839],{"class":86,"line":2804},[84,95840,95841],{"class":158},"       [21, 36, 70, 83, 87, 88],\n",[84,95843,95844],{"class":86,"line":2809},[84,95845,95846],{"class":158},"       [12, 39, 58, 65, 87, 88],\n",[84,95848,95849],{"class":86,"line":2823},[84,95850,95851],{"class":158},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[84,95853,95854],{"class":86,"line":2828},[84,95855,95074],{"class":158},[84,95857,95858],{"class":86,"line":2834},[84,95859,95860],{"class":1378},"#axis=0时\n",[84,95862,95863,95866,95868,95870,95872],{"class":86,"line":2855},[84,95864,95865],{"class":154},"np.sort(aa,",[84,95867,48664],{"class":928},[84,95869,867],{"class":129},[84,95871,1504],{"class":94},[84,95873,162],{"class":154},[84,95875,95876],{"class":86,"line":2860},[84,95877,95074],{"class":158},[84,95879,95880],{"class":86,"line":2874},[84,95881,95882],{"class":158},"array([[44, 12, 36, 37, 25,  9],\n",[84,95884,95885],{"class":86,"line":2879},[84,95886,95887],{"class":158},"       [46, 21, 58, 65, 39, 77],\n",[84,95889,95890],{"class":86,"line":2908},[84,95891,95892],{"class":158},"       [83, 47, 64, 67, 67, 87],\n",[84,95894,95895],{"class":86,"line":2913},[84,95896,95897],{"class":158},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[84,95899,95900],{"class":86,"line":2930},[84,95901,95074],{"class":158},[84,95903,95904],{"class":86,"line":2935},[84,95905,95906],{"class":1378},"#axis=1时,为默认值\n",[84,95908,95909,95911,95913,95915,95917],{"class":86,"line":2940},[84,95910,95865],{"class":154},[84,95912,48664],{"class":928},[84,95914,867],{"class":129},[84,95916,1529],{"class":94},[84,95918,162],{"class":154},[84,95920,95921],{"class":86,"line":2945},[84,95922,95074],{"class":158},[84,95924,95925],{"class":86,"line":2959},[84,95926,95836],{"class":158},[84,95928,95929],{"class":86,"line":2964},[84,95930,95841],{"class":158},[84,95932,95933],{"class":86,"line":3755},[84,95934,95846],{"class":158},[84,95936,95937],{"class":86,"line":3769},[84,95938,95851],{"class":158},[84,95940,95941],{"class":86,"line":3777},[84,95942,95074],{"class":158},[84,95944,95945],{"class":86,"line":3782},[84,95946,95947],{"class":1378},"#按最后一列排序\n",[84,95949,95950,95952,95954,95957,95959,95961],{"class":86,"line":3788},[84,95951,1574],{"class":154},[84,95953,867],{"class":129},[84,95955,95956],{"class":154},"aa[:,",[84,95958,1841],{"class":129},[84,95960,1529],{"class":94},[84,95962,34398],{"class":154},[84,95964,95965],{"class":86,"line":3794},[84,95966,95967],{"class":1378},"#获取最后一列排好序的索引\n",[84,95969,95970,95972,95974],{"class":86,"line":3799},[84,95971,75204],{"class":154},[84,95973,867],{"class":129},[84,95975,95976],{"class":154},"np.argsort(b)\n",[84,95978,95979],{"class":86,"line":9120},[84,95980,95981],{"class":154},"aa[index]\n",[84,95983,95984],{"class":86,"line":9144},[84,95985,95074],{"class":158},[84,95987,95988],{"class":86,"line":9149},[84,95989,95800],{"class":158},[84,95991,95992],{"class":86,"line":9155},[84,95993,95994],{"class":158},"       [46, 88, 81, 37, 25, 77],\n",[84,95996,95997],{"class":86,"line":9182},[84,95998,95810],{"class":158},[84,96000,96001],{"class":86,"line":9187},[84,96002,96003],{"class":158},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[84,96005,96006],{"class":86,"line":9193},[84,96007,95074],{"class":158},[1222,96009,96010],{},"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":66,"searchDepth":98,"depth":98,"links":96012},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95659,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96019,"title":96020,"body":96021,"description":1249,"extension":1250,"meta":96051,"navigation":1252,"path":96052,"seo":96053,"stem":96054,"__hash__":96055},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96022,"toc":96049},[96023,96026,96029,96032,96035,96038,96041,96044],[10,96024,96020],{"id":96025},"_14广播机制",[19,96027,96028],{},"广播的规则：",[19,96030,96031],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96033,96034],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96036,96037],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96039,96040],{},"3.如果没有维度形状为1，则会引发异常",[19,96042,96043],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96045,96046],{},[2643,96047],{"alt":66,"src":96048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":66,"searchDepth":98,"depth":98,"links":96050},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96020,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96057,"title":96058,"body":96059,"description":1249,"extension":1250,"meta":96157,"navigation":1252,"path":96158,"seo":96159,"stem":96160,"__hash__":96161},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96060,"toc":96155},[96061,96064,96067,96152],[10,96062,96058],{"id":96063},"_15比较掩码",[19,96065,96066],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[60,96068,96070],{"className":121,"code":96069,"language":91,"meta":66,"style":66},"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",[39,96071,96072,96118,96129,96143,96147],{"__ignoreMap":66},[84,96073,96074,96076,96078,96081,96083,96085,96087,96089,96091,96093,96095,96097,96099,96101,96103,96105,96107,96109,96111,96113,96115],{"class":86,"line":87},[84,96075,208],{"class":154},[84,96077,867],{"class":129},[84,96079,96080],{"class":154},"np.array([[",[84,96082,1529],{"class":94},[84,96084,1688],{"class":154},[84,96086,1397],{"class":94},[84,96088,1688],{"class":154},[84,96090,1391],{"class":94},[84,96092,49179],{"class":154},[84,96094,1781],{"class":94},[84,96096,1688],{"class":154},[84,96098,1807],{"class":94},[84,96100,1688],{"class":154},[84,96102,1832],{"class":94},[84,96104,49179],{"class":154},[84,96106,2033],{"class":94},[84,96108,1688],{"class":154},[84,96110,2058],{"class":94},[84,96112,1688],{"class":154},[84,96114,2083],{"class":94},[84,96116,96117],{"class":154},"]])\n",[84,96119,96120,96122,96124,96126],{"class":86,"line":98},[84,96121,208],{"class":154},[84,96123,2218],{"class":129},[84,96125,2008],{"class":94},[84,96127,96128],{"class":1378},"#结果是一个由True,False组成的数组\n",[84,96130,96131,96134,96136,96138,96140],{"class":86,"line":106},[84,96132,96133],{"class":154},"a[a",[84,96135,2218],{"class":129},[84,96137,2008],{"class":94},[84,96139,2248],{"class":154},[84,96141,96142],{"class":1378},"#小于20的元素会存到这个数组中\n",[84,96144,96145],{"class":86,"line":112},[84,96146,94710],{"class":1378},[84,96148,96149],{"class":86,"line":425},[84,96150,96151],{"class":1378},"#array([ 1,  2,  3, 11, 12, 13])\n",[1222,96153,96154],{},"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":66,"searchDepth":98,"depth":98,"links":96156},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96058,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96163,"title":96164,"body":96165,"description":1249,"extension":1250,"meta":96257,"navigation":1252,"path":96258,"seo":96259,"stem":96260,"__hash__":96261},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96166,"toc":96255},[96167,96170,96173,96176,96179,96182,96247,96252],[10,96168,96164],{"id":96169},"_16魔法命令time",[19,96171,96172],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96174,96175],{},"%:行模式",[19,96177,96178],{},"%%:单元格模式",[19,96180,96181],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[60,96183,96185],{"className":121,"code":96184,"language":91,"meta":66,"style":66},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[39,96186,96187,96192,96199,96204,96213,96226,96230,96238],{"__ignoreMap":66},[84,96188,96189],{"class":86,"line":87},[84,96190,96191],{"class":1378},"#程序执行时间\n",[84,96193,96194,96196],{"class":86,"line":98},[84,96195,31547],{"class":129},[84,96197,96198],{"class":154}," time \n",[84,96200,96201],{"class":86,"line":106},[84,96202,96203],{"class":1378},"#获取时间\n",[84,96205,96206,96209,96211],{"class":86,"line":112},[84,96207,96208],{"class":154},"start",[84,96210,867],{"class":129},[84,96212,33571],{"class":154},[84,96214,96215,96218,96221,96223],{"class":86,"line":425},[84,96216,96217],{"class":154},"time.sleep(",[84,96219,96220],{"class":94},"0.4",[84,96222,1739],{"class":154},[84,96224,96225],{"class":1378},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[84,96227,96228],{"class":86,"line":2395},[84,96229,96203],{"class":1378},[84,96231,96232,96234,96236],{"class":86,"line":2401},[84,96233,957],{"class":154},[84,96235,867],{"class":129},[84,96237,33571],{"class":154},[84,96239,96240,96242,96244],{"class":86,"line":2492},[84,96241,957],{"class":154},[84,96243,1841],{"class":129},[84,96245,96246],{"class":154},"start\n",[19,96248,96249],{},[2643,96250],{"alt":66,"src":96251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1222,96253,96254],{},"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":66,"searchDepth":98,"depth":98,"links":96256},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96164,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96263,"title":96264,"body":96265,"description":1249,"extension":1250,"meta":96300,"navigation":1252,"path":96301,"seo":96302,"stem":96303,"__hash__":96304},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96266,"toc":96298},[96267,96270,96273,96276,96279,96282,96285,96288,96293],[10,96268,96264],{"id":96269},"_17魔法命令timeit",[19,96271,96272],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96274,96275],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96277,96278],{},"单元格模式：",[19,96280,96281],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96283,96284],{},"初始化语句执行次数由轮数来决定",[19,96286,96287],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96289,96290],{},[2643,96291],{"alt":66,"src":96292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96294,96295],{},[2643,96296],{"alt":66,"src":96297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":66,"searchDepth":98,"depth":98,"links":96299},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96264,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96306,"title":96307,"body":96308,"description":1249,"extension":1250,"meta":96326,"navigation":1252,"path":96327,"seo":96328,"stem":96329,"__hash__":96330},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96309,"toc":96324},[96310,96313,96316,96319],[10,96311,96307],{"id":96312},"_18魔法命令writefile和run",[19,96314,96315],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96317,96318],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96320,96321],{},[2643,96322],{"alt":66,"src":96323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":66,"searchDepth":98,"depth":98,"links":96325},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96307,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96332,"title":96333,"body":96334,"description":1249,"extension":1250,"meta":96387,"navigation":1252,"path":96388,"seo":96389,"stem":96390,"__hash__":96391},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96335,"toc":96385},[96336,96339,96342,96344,96347,96350,96355,96358,96361,96364,96367,96370,96373,96376,96379,96382],[10,96337,96333],{"id":96338},"_19魔法命令memit",[19,96340,96341],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96343,25764],{},[19,96345,96346],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96348,96349],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96351,96352],{},[2643,96353],{"alt":66,"src":96354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96356,96357],{},"补充：",[19,96359,96360],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96362,96363],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96365,96366],{},"解决方法：",[19,96368,96369],{},"1.cmd",[19,96371,96372],{},"2.依次输入以下代码：",[19,96374,96375],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96377,96378],{},"pip install --upgrade ipython",[19,96380,96381],{},"#升级 memory_profiler 和 setuptools",[19,96383,96384],{},"pip install --upgrade memory_profiler setuptools",{"title":66,"searchDepth":98,"depth":98,"links":96386},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96333,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96393,"title":96394,"body":96395,"description":1249,"extension":1250,"meta":98041,"navigation":1252,"path":98042,"seo":98043,"stem":98044,"__hash__":98045},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96396,"toc":98011},[96397,96400,96404,96408,96469,96472,96477,96481,96486,96491,96496,96501,96504,96509,96513,96517,96550,96553,96556,96559,96611,96614,96650,96653,96695,96699,96720,96722,96759,96761,96766,96768,96773,96777,96780,96808,96812,96816,96869,96873,96965,96969,96973,96976,96981,96985,97010,97015,97019,97022,97025,97028,97031,97034,97037,97040,97052,97056,97060,97063,97095,97098,97121,97124,97150,97153,97179,97182,97216,97219,97281,97285,97288,97292,97295,97321,97324,97327,97332,97335,97404,97406,97411,97472,97475,97486,97492,97497,97501,97504,97517,97521,97536,97538,97561,97563,97589,97592,97595,97598,97646,97648,97653,97657,97661,97688,97692,97719,97722,97727,97732,97822,97826,97884,97889,97892,97895,97937,97941,97997,98002,98005,98008],[10,96398,96394],{"id":96399},"_2创建数组",[14,96401,96403],{"id":96402},"_21-array函数创建数组","2.1 array()函数创建数组",[198,96405,96407],{"id":96406},"_221-函数语句","2.2.1 函数语句",[60,96409,96411],{"className":121,"code":96410,"language":91,"meta":66,"style":66},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[39,96412,96413],{"__ignoreMap":66},[84,96414,96415,96418,96421,96423,96425,96427,96429,96431,96434,96436,96439,96441,96444,96446,96448,96450,96453,96455,96458,96460,96463,96465,96467],{"class":86,"line":87},[84,96416,96417],{"class":154},"numpy.array(",[84,96419,96420],{"class":94},"object",[84,96422,846],{"class":154},[84,96424,94646],{"class":928},[84,96426,14735],{"class":129},[84,96428,40085],{"class":94},[84,96430,846],{"class":154},[84,96432,96433],{"class":928},"copy",[84,96435,14735],{"class":129},[84,96437,96438],{"class":94}," True",[84,96440,846],{"class":154},[84,96442,96443],{"class":928},"order",[84,96445,14735],{"class":129},[84,96447,40085],{"class":94},[84,96449,846],{"class":154},[84,96451,96452],{"class":928},"subok",[84,96454,14735],{"class":129},[84,96456,96457],{"class":94}," False",[84,96459,846],{"class":154},[84,96461,96462],{"class":928},"ndmin",[84,96464,14735],{"class":129},[84,96466,5271],{"class":94},[84,96468,162],{"class":154},[19,96470,96471],{},"参数：",[19,96473,96474],{},[2643,96475],{"alt":66,"src":96476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[198,96478,96480],{"id":96479},"_222-实例","2.2.2 实例",[19,96482,96483],{},[2643,96484],{"alt":66,"src":96485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96487,96488],{},[2643,96489],{"alt":66,"src":96490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96492,96493],{},[2643,96494],{"alt":66,"src":96495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96497,96498],{},[2643,96499],{"alt":66,"src":96500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96502,96503],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96505,96506],{},[2643,96507],{"alt":66,"src":96508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96510,96512],{"id":96511},"_22-随机数创建数组","2.2 随机数创建数组",[198,96514,96516],{"id":96515},"_221-random语句","2.2.1 random语句",[60,96518,96520],{"className":121,"code":96519,"language":91,"meta":66,"style":66},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[39,96521,96522,96527,96532,96540,96545],{"__ignoreMap":66},[84,96523,96524],{"class":86,"line":87},[84,96525,96526],{"class":1378},"#random.random()\n",[84,96528,96529],{"class":86,"line":98},[84,96530,96531],{"class":1378},"#确定随机种子,就是每次运行结果是相同的\n",[84,96533,96534,96536,96538],{"class":86,"line":106},[84,96535,95753],{"class":154},[84,96537,1504],{"class":94},[84,96539,162],{"class":154},[84,96541,96542],{"class":86,"line":112},[84,96543,96544],{"class":154},"np.random.random()\n",[84,96546,96547],{"class":86,"line":425},[84,96548,96549],{"class":1378},"#生成一个随机的数目\n",[19,96551,96552],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96554,96555],{},"可以指定数组形状 size",[19,96557,96558],{},"①生成一维数组",[60,96560,96562],{"className":121,"code":96561,"language":91,"meta":66,"style":66},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[39,96563,96564,96569,96582,96587,96603],{"__ignoreMap":66},[84,96565,96566],{"class":86,"line":87},[84,96567,96568],{"class":1378},"#random.random(size())\n",[84,96570,96571,96574,96576,96578,96580],{"class":86,"line":98},[84,96572,96573],{"class":154},"np.random.random(",[84,96575,32649],{"class":928},[84,96577,867],{"class":129},[84,96579,1629],{"class":94},[84,96581,162],{"class":154},[84,96583,96584],{"class":86,"line":106},[84,96585,96586],{"class":1378},"#生成一位的五个元素\n",[84,96588,96589,96591,96593,96595,96597,96599,96601],{"class":86,"line":112},[84,96590,208],{"class":154},[84,96592,867],{"class":129},[84,96594,96573],{"class":154},[84,96596,32649],{"class":928},[84,96598,867],{"class":129},[84,96600,1604],{"class":94},[84,96602,162],{"class":154},[84,96604,96605,96608],{"class":86,"line":425},[84,96606,96607],{"class":154},"a.shape ",[84,96609,96610],{"class":1378},"#输出数组形状\n",[19,96612,96613],{},"②生成二维数组",[60,96615,96617],{"className":121,"code":96616,"language":91,"meta":66,"style":66},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[39,96618,96619,96623,96645],{"__ignoreMap":66},[84,96620,96621],{"class":86,"line":87},[84,96622,94447],{"class":1378},[84,96624,96625,96627,96629,96631,96633,96635,96637,96639,96641,96643],{"class":86,"line":98},[84,96626,94452],{"class":154},[84,96628,867],{"class":129},[84,96630,96573],{"class":154},[84,96632,32649],{"class":928},[84,96634,867],{"class":129},[84,96636,155],{"class":154},[84,96638,1604],{"class":94},[84,96640,1688],{"class":154},[84,96642,1629],{"class":94},[84,96644,31651],{"class":154},[84,96646,96647],{"class":86,"line":106},[84,96648,96649],{"class":1378},"#生成四行五列的数组\n",[19,96651,96652],{},"③生成三维数组",[60,96654,96656],{"className":121,"code":96655,"language":91,"meta":66,"style":66},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[39,96657,96658,96663,96690],{"__ignoreMap":66},[84,96659,96660],{"class":86,"line":87},[84,96661,96662],{"class":1378},"#三维数组\n",[84,96664,96665,96668,96670,96672,96674,96676,96678,96680,96682,96684,96686,96688],{"class":86,"line":98},[84,96666,96667],{"class":154},"aaa",[84,96669,867],{"class":129},[84,96671,96573],{"class":154},[84,96673,32649],{"class":928},[84,96675,867],{"class":129},[84,96677,155],{"class":154},[84,96679,1397],{"class":94},[84,96681,1688],{"class":154},[84,96683,1391],{"class":94},[84,96685,1688],{"class":154},[84,96687,1604],{"class":94},[84,96689,31651],{"class":154},[84,96691,96692],{"class":86,"line":106},[84,96693,96694],{"class":154},"aaa.shape\n",[198,96696,96698],{"id":96697},"_222-randint语句","2.2.2 randint语句",[60,96700,96702],{"className":121,"code":96701,"language":91,"meta":66,"style":66},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[39,96703,96704,96709],{"__ignoreMap":66},[84,96705,96706],{"class":86,"line":87},[84,96707,96708],{"class":1378},"#生成随机的整数 random.randint(low,high,size)\n",[84,96710,96711,96713,96715,96717],{"class":86,"line":98},[84,96712,94260],{"class":154},[84,96714,1629],{"class":94},[84,96716,1154],{"class":154},[84,96718,96719],{"class":1378},"#0~5中的随机一个数\n",[19,96721,96558],{},[60,96723,96725],{"className":121,"code":96724,"language":91,"meta":66,"style":66},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[39,96726,96727,96732,96754],{"__ignoreMap":66},[84,96728,96729],{"class":86,"line":87},[84,96730,96731],{"class":1378},"#一维\n",[84,96733,96734,96736,96738,96740,96742,96744,96746,96748,96750,96752],{"class":86,"line":98},[84,96735,94260],{"class":154},[84,96737,1529],{"class":94},[84,96739,1688],{"class":154},[84,96741,1781],{"class":94},[84,96743,1688],{"class":154},[84,96745,32649],{"class":928},[84,96747,867],{"class":129},[84,96749,155],{"class":154},[84,96751,1756],{"class":94},[84,96753,31651],{"class":154},[84,96755,96756],{"class":86,"line":106},[84,96757,96758],{"class":1378},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96760,96613],{},[19,96762,96763],{},[2643,96764],{"alt":66,"src":96765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96767,96652],{},[19,96769,96770],{},[2643,96771],{"alt":66,"src":96772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[198,96774,96776],{"id":96775},"_222-rand语句","2.2.2 rand语句",[19,96778,96779],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[60,96781,96783],{"className":121,"code":96782,"language":91,"meta":66,"style":66},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[39,96784,96785,96798,96803],{"__ignoreMap":66},[84,96786,96787,96790,96792,96794,96796],{"class":86,"line":87},[84,96788,96789],{"class":154},"np.random.rand(",[84,96791,821],{"class":94},[84,96793,1688],{"class":154},[84,96795,1756],{"class":94},[84,96797,162],{"class":154},[84,96799,96800],{"class":86,"line":98},[84,96801,96802],{"class":1378},"#第一个参数100：行数，表示有100个样本\n",[84,96804,96805],{"class":86,"line":106},[84,96806,96807],{"class":1378},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96809,96811],{"id":96810},"_23-arange创建数组","2.3 arange()创建数组",[198,96813,96815],{"id":96814},"_231-函数语句","2.3.1 函数语句",[60,96817,96819],{"className":121,"code":96818,"language":91,"meta":66,"style":66},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[39,96820,96821,96835,96840,96845,96850,96855,96860,96865],{"__ignoreMap":66},[84,96822,96823,96826,96828,96830,96833],{"class":86,"line":87},[84,96824,96825],{"class":154},"numpy.arange([start,] stop[, step], ",[84,96827,94646],{"class":928},[84,96829,867],{"class":129},[84,96831,96832],{"class":94},"None",[84,96834,162],{"class":154},[84,96836,96837],{"class":86,"line":98},[84,96838,96839],{"class":1378},"#参数\n",[84,96841,96842],{"class":86,"line":106},[84,96843,96844],{"class":158},"\"\"\"\n",[84,96846,96847],{"class":86,"line":112},[84,96848,96849],{"class":158},"start:起始值，可选，默认从 0 开始。\n",[84,96851,96852],{"class":86,"line":425},[84,96853,96854],{"class":158},"stop:结束值（不包含该值）。\n",[84,96856,96857],{"class":86,"line":2395},[84,96858,96859],{"class":158},"step:步长，可选，默认是 1。可以为浮点数。\n",[84,96861,96862],{"class":86,"line":2401},[84,96863,96864],{"class":158},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[84,96866,96867],{"class":86,"line":2492},[84,96868,96844],{"class":158},[198,96870,96872],{"id":96871},"_232-实例","2.3.2 实例",[60,96874,96876],{"className":121,"code":96875,"language":91,"meta":66,"style":66},"#创建一维数组\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",[39,96877,96878,96882,96906,96911,96916,96920,96943,96947,96951,96956,96961],{"__ignoreMap":66},[84,96879,96880],{"class":86,"line":87},[84,96881,94251],{"class":1378},[84,96883,96884,96886,96888,96890,96892,96894,96896,96898,96900,96902,96904],{"class":86,"line":98},[84,96885,94148],{"class":154},[84,96887,1529],{"class":94},[84,96889,1688],{"class":154},[84,96891,2033],{"class":94},[84,96893,1688],{"class":154},[84,96895,1529],{"class":94},[84,96897,1688],{"class":154},[84,96899,94646],{"class":928},[84,96901,867],{"class":129},[84,96903,1327],{"class":94},[84,96905,162],{"class":154},[84,96907,96908],{"class":86,"line":106},[84,96909,96910],{"class":1378},"#输出结果：\n",[84,96912,96913],{"class":86,"line":112},[84,96914,96915],{"class":1378},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[84,96917,96918],{"class":86,"line":425},[84,96919,95093],{"class":1378},[84,96921,96922,96925,96927,96929,96931,96934,96936,96938,96940],{"class":86,"line":2395},[84,96923,96924],{"class":154},"np.array([np.arange(",[84,96926,1529],{"class":94},[84,96928,1688],{"class":154},[84,96930,1604],{"class":94},[84,96932,96933],{"class":154},"),np.arange(",[84,96935,1604],{"class":94},[84,96937,1688],{"class":154},[84,96939,1679],{"class":94},[84,96941,96942],{"class":154},")])\n",[84,96944,96945],{"class":86,"line":2401},[84,96946,94710],{"class":1378},[84,96948,96949],{"class":86,"line":2492},[84,96950,96844],{"class":158},[84,96952,96953],{"class":86,"line":2498},[84,96954,96955],{"class":158},"array([[1, 2, 3],\n",[84,96957,96958],{"class":86,"line":2510},[84,96959,96960],{"class":158},"       [4, 5, 6]])\n",[84,96962,96963],{"class":86,"line":2793},[84,96964,96844],{"class":158},[14,96966,96968],{"id":96967},"_24-生态分布","2.4 生态分布",[198,96970,96972],{"id":96971},"_241-标准正态分布","2.4.1 标准正态分布",[19,96974,96975],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96977,96978],{},[2643,96979],{"alt":66,"src":96980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[198,96982,96984],{"id":96983},"_242-常规正态分布","2.4.2 常规正态分布",[60,96986,96988],{"className":121,"code":96987,"language":91,"meta":66,"style":66},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[39,96989,96990,96995,97000,97005],{"__ignoreMap":66},[84,96991,96992],{"class":86,"line":87},[84,96993,96994],{"class":154},"random.normal(loc,scale,size)也可以生成正态分布\n",[84,96996,96997],{"class":86,"line":98},[84,96998,96999],{"class":1378},"#loc:期望\n",[84,97001,97002],{"class":86,"line":106},[84,97003,97004],{"class":1378},"#scale:方差\n",[84,97006,97007],{"class":86,"line":112},[84,97008,97009],{"class":1378},"#size:用于确定是几维的数列\n",[19,97011,97012],{},[2643,97013],{"alt":66,"src":97014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97016,97018],{"id":97017},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97020,97021],{},"ndim:秩，维度个数",[19,97023,97024],{},"size:数组元素的个数",[19,97026,97027],{},"shape:数组的形状",[19,97029,97030],{},"dtype:数组元素的类型",[19,97032,97033],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97035,97036],{},"他们都是属性，通过数组.属性的形式来确定",[19,97038,97039],{},"如果需要输出多个可以通过以下方式：",[60,97041,97043],{"className":121,"code":97042,"language":91,"meta":66,"style":66},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[39,97044,97045],{"__ignoreMap":66},[84,97046,97047,97049],{"class":86,"line":87},[84,97048,730],{"class":94},[84,97050,97051],{"class":154},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97053,97055],{"id":97054},"_26-其他方式创建数组","2.6 其他方式创建数组",[198,97057,97059],{"id":97058},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97061,97062],{},"①创建一维数组",[60,97064,97066],{"className":121,"code":97065,"language":91,"meta":66,"style":66},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[39,97067,97068,97077,97081,97086,97091],{"__ignoreMap":66},[84,97069,97070,97073,97075],{"class":86,"line":87},[84,97071,97072],{"class":154},"np.zeros(",[84,97074,1756],{"class":94},[84,97076,162],{"class":154},[84,97078,97079],{"class":86,"line":98},[84,97080,96844],{"class":158},[84,97082,97083],{"class":86,"line":106},[84,97084,97085],{"class":158},"输出结果：\n",[84,97087,97088],{"class":86,"line":112},[84,97089,97090],{"class":158},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[84,97092,97093],{"class":86,"line":425},[84,97094,96844],{"class":158},[19,97096,97097],{},"上方代码等价于：",[60,97099,97101],{"className":121,"code":97100,"language":91,"meta":66,"style":66},"np.zeros(shape=(10))#创建10个元素的0数组\n",[39,97102,97103],{"__ignoreMap":66},[84,97104,97105,97107,97110,97112,97114,97116,97118],{"class":86,"line":87},[84,97106,97072],{"class":154},[84,97108,97109],{"class":928},"shape",[84,97111,867],{"class":129},[84,97113,155],{"class":154},[84,97115,1756],{"class":94},[84,97117,83917],{"class":154},[84,97119,97120],{"class":1378},"#创建10个元素的0数组\n",[19,97122,97123],{},"也可以指定类型",[60,97125,97127],{"className":121,"code":97126,"language":91,"meta":66,"style":66},"#指定类型\nnp.zeros(5,dtype=int)\n",[39,97128,97129,97134],{"__ignoreMap":66},[84,97130,97131],{"class":86,"line":87},[84,97132,97133],{"class":1378},"#指定类型\n",[84,97135,97136,97138,97140,97142,97144,97146,97148],{"class":86,"line":98},[84,97137,97072],{"class":154},[84,97139,1629],{"class":94},[84,97141,1688],{"class":154},[84,97143,94646],{"class":928},[84,97145,867],{"class":129},[84,97147,1327],{"class":94},[84,97149,162],{"class":154},[19,97151,97152],{},"②创建二维数组",[60,97154,97156],{"className":121,"code":97155,"language":91,"meta":66,"style":66},"np.zeros((3,4),dtype=int)\n",[39,97157,97158],{"__ignoreMap":66},[84,97159,97160,97163,97165,97167,97169,97171,97173,97175,97177],{"class":86,"line":87},[84,97161,97162],{"class":154},"np.zeros((",[84,97164,1391],{"class":94},[84,97166,1688],{"class":154},[84,97168,1604],{"class":94},[84,97170,43408],{"class":154},[84,97172,94646],{"class":928},[84,97174,867],{"class":129},[84,97176,1327],{"class":94},[84,97178,162],{"class":154},[19,97180,97181],{},"③创建三维数组",[60,97183,97185],{"className":121,"code":97184,"language":91,"meta":66,"style":66},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[39,97186,97187,97192],{"__ignoreMap":66},[84,97188,97189],{"class":86,"line":87},[84,97190,97191],{"class":1378},"#创建三维数组\n",[84,97193,97194,97196,97198,97200,97202,97204,97206,97208,97210,97212,97214],{"class":86,"line":98},[84,97195,97162],{"class":154},[84,97197,1391],{"class":94},[84,97199,1688],{"class":154},[84,97201,1604],{"class":94},[84,97203,1688],{"class":154},[84,97205,1629],{"class":94},[84,97207,43408],{"class":154},[84,97209,94646],{"class":928},[84,97211,867],{"class":129},[84,97213,1327],{"class":94},[84,97215,162],{"class":154},[19,97217,97218],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[60,97220,97222],{"className":121,"code":97221,"language":91,"meta":66,"style":66},"#使用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",[39,97223,97224,97229,97244,97249,97254,97276],{"__ignoreMap":66},[84,97225,97226],{"class":86,"line":87},[84,97227,97228],{"class":1378},"#使用zeros_like将创建的一维数组变成全0的数组\n",[84,97230,97231,97233,97235,97237,97239,97241],{"class":86,"line":98},[84,97232,208],{"class":154},[84,97234,867],{"class":129},[84,97236,94148],{"class":154},[84,97238,1604],{"class":94},[84,97240,1739],{"class":154},[84,97242,97243],{"class":1378},"#这个得到的结果：一维数组0，1，2，3\n",[84,97245,97246],{"class":86,"line":106},[84,97247,97248],{"class":154},"np.zeros_like(a)\n",[84,97250,97251],{"class":86,"line":112},[84,97252,97253],{"class":1378},"#使用zeros_like将创建的二维数组变成全0的数组\n",[84,97255,97256,97258,97260,97262,97264,97266,97268,97270,97272,97274],{"class":86,"line":425},[84,97257,94452],{"class":154},[84,97259,867],{"class":129},[84,97261,96573],{"class":154},[84,97263,32649],{"class":928},[84,97265,867],{"class":129},[84,97267,155],{"class":154},[84,97269,1604],{"class":94},[84,97271,1688],{"class":154},[84,97273,1629],{"class":94},[84,97275,31651],{"class":154},[84,97277,97278],{"class":86,"line":2395},[84,97279,97280],{"class":154},"np.zeros_like(aa)\n",[198,97282,97284],{"id":97283},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97286,97287],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[198,97289,97291],{"id":97290},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97293,97294],{},"①empty()用法",[60,97296,97298],{"className":121,"code":97297,"language":91,"meta":66,"style":66},"numpy.empty(shape,dtype=float,order='c')\n",[39,97299,97300],{"__ignoreMap":66},[84,97301,97302,97305,97307,97309,97311,97313,97315,97317,97319],{"class":86,"line":87},[84,97303,97304],{"class":154},"numpy.empty(shape,",[84,97306,94646],{"class":928},[84,97308,867],{"class":129},[84,97310,1362],{"class":94},[84,97312,1688],{"class":154},[84,97314,96443],{"class":928},[84,97316,867],{"class":129},[84,97318,77174],{"class":158},[84,97320,162],{"class":154},[19,97322,97323],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97325,97326],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97328,97329],{},[2643,97330],{"alt":66,"src":97331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97333,97334],{},"②empty()用法",[60,97336,97338],{"className":121,"code":97337,"language":91,"meta":66,"style":66},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[39,97339,97340,97361,97373,97394,97399],{"__ignoreMap":66},[84,97341,97342,97344,97346,97349,97351,97353,97355,97357,97359],{"class":86,"line":87},[84,97343,2153],{"class":154},[84,97345,867],{"class":129},[84,97347,97348],{"class":154},"np.empty(",[84,97350,1756],{"class":94},[84,97352,1688],{"class":154},[84,97354,94646],{"class":928},[84,97356,867],{"class":129},[84,97358,1327],{"class":94},[84,97360,162],{"class":154},[84,97362,97363,97365,97367,97369,97371],{"class":86,"line":98},[84,97364,2128],{"class":154},[84,97366,867],{"class":129},[84,97368,94148],{"class":154},[84,97370,1629],{"class":94},[84,97372,162],{"class":154},[84,97374,97375,97378,97380,97383,97385,97387,97390,97392],{"class":86,"line":106},[84,97376,97377],{"class":154},"np.add(",[84,97379,1397],{"class":94},[84,97381,97382],{"class":154},",x,",[84,97384,94200],{"class":928},[84,97386,867],{"class":129},[84,97388,97389],{"class":154},"y[:",[84,97391,1629],{"class":94},[84,97393,5834],{"class":154},[84,97395,97396],{"class":86,"line":112},[84,97397,97398],{"class":1378},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[84,97400,97401],{"class":86,"line":425},[84,97402,97403],{"class":154},"y\n",[19,97405,12686],{},[19,97407,97408],{},[2643,97409],{"alt":66,"src":97410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[60,97412,97414],{"className":121,"code":97413,"language":91,"meta":66,"style":66},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[39,97415,97416,97432,97452,97467],{"__ignoreMap":66},[84,97417,97418,97420,97422,97424,97426,97428,97430],{"class":86,"line":87},[84,97419,2128],{"class":154},[84,97421,867],{"class":129},[84,97423,94148],{"class":154},[84,97425,1529],{"class":94},[84,97427,1688],{"class":154},[84,97429,1654],{"class":94},[84,97431,162],{"class":154},[84,97433,97434,97436,97438,97440,97442,97444,97446,97448,97450],{"class":86,"line":98},[84,97435,2153],{"class":154},[84,97437,867],{"class":129},[84,97439,97348],{"class":154},[84,97441,1629],{"class":94},[84,97443,1688],{"class":154},[84,97445,94646],{"class":928},[84,97447,867],{"class":129},[84,97449,1327],{"class":94},[84,97451,162],{"class":154},[84,97453,97454,97457,97459,97461,97463,97465],{"class":86,"line":106},[84,97455,97456],{"class":154},"np.add(x,",[84,97458,1397],{"class":94},[84,97460,1688],{"class":154},[84,97462,94200],{"class":928},[84,97464,867],{"class":129},[84,97466,94595],{"class":154},[84,97468,97469],{"class":86,"line":112},[84,97470,97471],{"class":1378},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97473,97474],{},"③empty_like()",[19,97476,97477],{},[1464,97478,97479,97480,97485],{},"创建一个",[1464,97481,97482],{},[1464,97483,97484],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97487,97488,97491],{},[39,97489,97490],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97493,97494],{},[2643,97495],{"alt":66,"src":97496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[198,97498,97500],{"id":97499},"_264-用法","2.6.4 ？？用法",[19,97502,97503],{},"当想查看一个函数的参数时，可以通过？？来实现",[60,97505,97507],{"className":121,"code":97506,"language":91,"meta":66,"style":66},"np.full??\n",[39,97508,97509],{"__ignoreMap":66},[84,97510,97511,97514],{"class":86,"line":87},[84,97512,97513],{"class":154},"np.full",[84,97515,97516],{"class":78549},"??\n",[198,97518,97520],{"id":97519},"_265-full创建数组","2.6.5 full()创建数组",[60,97522,97524],{"className":121,"code":97523,"language":91,"meta":66,"style":66},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[39,97525,97526,97531],{"__ignoreMap":66},[84,97527,97528],{"class":86,"line":87},[84,97529,97530],{"class":154},"full(shape,fill_value)\n",[84,97532,97533],{"class":86,"line":98},[84,97534,97535],{"class":154},"创建全为某个指定值的数组\n",[19,97537,95676],{},[60,97539,97541],{"className":121,"code":97540,"language":91,"meta":66,"style":66},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[39,97542,97543,97548],{"__ignoreMap":66},[84,97544,97545],{"class":86,"line":87},[84,97546,97547],{"class":1378},"#创建一个一维数组,以20进行填充\n",[84,97549,97550,97553,97555,97557,97559],{"class":86,"line":98},[84,97551,97552],{"class":154},"np.full(",[84,97554,1756],{"class":94},[84,97556,1688],{"class":154},[84,97558,2008],{"class":94},[84,97560,162],{"class":154},[19,97562,94437],{},[60,97564,97566],{"className":121,"code":97565,"language":91,"meta":66,"style":66},"#创建二维数组\nnp.full((3,5),11)\n",[39,97567,97568,97572],{"__ignoreMap":66},[84,97569,97570],{"class":86,"line":87},[84,97571,95093],{"class":1378},[84,97573,97574,97577,97579,97581,97583,97585,97587],{"class":86,"line":98},[84,97575,97576],{"class":154},"np.full((",[84,97578,1391],{"class":94},[84,97580,1688],{"class":154},[84,97582,1629],{"class":94},[84,97584,43408],{"class":154},[84,97586,1781],{"class":94},[84,97588,162],{"class":154},[19,97590,97591],{},"③full_like用法",[19,97593,97594],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97596,97597],{},"这里是指定填充而已",[60,97599,97601],{"className":121,"code":97600,"language":91,"meta":66,"style":66},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[39,97602,97603,97608,97632,97637],{"__ignoreMap":66},[84,97604,97605],{"class":86,"line":87},[84,97606,97607],{"class":1378},"#创建一个指定形状数组\n",[84,97609,97610,97612,97614,97616,97618,97620,97622,97624,97626,97628,97630],{"class":86,"line":98},[84,97611,208],{"class":154},[84,97613,867],{"class":129},[84,97615,94148],{"class":154},[84,97617,1529],{"class":94},[84,97619,1688],{"class":154},[84,97621,1635],{"class":94},[84,97623,94153],{"class":154},[84,97625,1604],{"class":94},[84,97627,1688],{"class":154},[84,97629,1730],{"class":94},[84,97631,162],{"class":154},[84,97633,97634],{"class":86,"line":106},[84,97635,97636],{"class":1378},"#进行指定填充\n",[84,97638,97639,97642,97644],{"class":86,"line":112},[84,97640,97641],{"class":154},"np.full_like(a,",[84,97643,1756],{"class":94},[84,97645,162],{"class":154},[19,97647,12686],{},[19,97649,97650],{},[2643,97651],{"alt":66,"src":97652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[198,97654,97656],{"id":97655},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23168,97658,97660],{"id":97659},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[60,97662,97664],{"className":121,"code":97663,"language":91,"meta":66,"style":66},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[39,97665,97666,97683],{"__ignoreMap":66},[84,97667,97668,97671,97673,97675,97677,97679,97681],{"class":86,"line":87},[84,97669,97670],{"class":154},"np.eye(",[84,97672,1604],{"class":94},[84,97674,1688],{"class":154},[84,97676,94646],{"class":928},[84,97678,867],{"class":129},[84,97680,1327],{"class":94},[84,97682,162],{"class":154},[84,97684,97685],{"class":86,"line":98},[84,97686,97687],{"class":1378},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23168,97689,97691],{"id":97690},"_2662-法2identity","2.6.6.2 法2：identity()",[60,97693,97695],{"className":121,"code":97694,"language":91,"meta":66,"style":66},"#identity()\nnp.identity(5,dtype=int)\n",[39,97696,97697,97702],{"__ignoreMap":66},[84,97698,97699],{"class":86,"line":87},[84,97700,97701],{"class":1378},"#identity()\n",[84,97703,97704,97707,97709,97711,97713,97715,97717],{"class":86,"line":98},[84,97705,97706],{"class":154},"np.identity(",[84,97708,1629],{"class":94},[84,97710,1688],{"class":154},[84,97712,94646],{"class":928},[84,97714,867],{"class":129},[84,97716,1327],{"class":94},[84,97718,162],{"class":154},[19,97720,97721],{},"两个函数是有区别的",[19,97723,97724],{},[2643,97725],{"alt":66,"src":97726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97728,97729],{},[2643,97730],{"alt":66,"src":97731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[60,97733,97735],{"className":121,"code":97734,"language":91,"meta":66,"style":66},"# 创建一个 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",[39,97736,97737,97742,97754,97759,97764,97769,97774,97778,97783,97803,97807,97812,97817],{"__ignoreMap":66},[84,97738,97739],{"class":86,"line":87},[84,97740,97741],{"class":1378},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[84,97743,97744,97746,97748,97750,97752],{"class":86,"line":98},[84,97745,97670],{"class":154},[84,97747,1391],{"class":94},[84,97749,846],{"class":154},[84,97751,1604],{"class":94},[84,97753,162],{"class":154},[84,97755,97756],{"class":86,"line":106},[84,97757,97758],{"class":1378},"# 输出:\n",[84,97760,97761],{"class":86,"line":112},[84,97762,97763],{"class":1378},"# [[1. 0. 0. 0.]\n",[84,97765,97766],{"class":86,"line":425},[84,97767,97768],{"class":1378},"#  [0. 1. 0. 0.]\n",[84,97770,97771],{"class":86,"line":2395},[84,97772,97773],{"class":1378},"#  [0. 0. 1. 0.]]\n",[84,97775,97776],{"class":86,"line":2401},[84,97777,3578],{"emptyLinePlaceholder":1252},[84,97779,97780],{"class":86,"line":2492},[84,97781,97782],{"class":1378},"# 对角线向上偏移1\n",[84,97784,97785,97787,97789,97791,97793,97795,97797,97799,97801],{"class":86,"line":2498},[84,97786,97670],{"class":154},[84,97788,1391],{"class":94},[84,97790,846],{"class":154},[84,97792,1604],{"class":94},[84,97794,846],{"class":154},[84,97796,1802],{"class":928},[84,97798,867],{"class":129},[84,97800,1529],{"class":94},[84,97802,162],{"class":154},[84,97804,97805],{"class":86,"line":2510},[84,97806,97758],{"class":1378},[84,97808,97809],{"class":86,"line":2793},[84,97810,97811],{"class":1378},"# [[0. 1. 0. 0.]\n",[84,97813,97814],{"class":86,"line":2798},[84,97815,97816],{"class":1378},"#  [0. 0. 1. 0.]\n",[84,97818,97819],{"class":86,"line":2804},[84,97820,97821],{"class":1378},"#  [0. 0. 0. 1.]]\n",[198,97823,97825],{"id":97824},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[60,97827,97829],{"className":121,"code":97828,"language":91,"meta":66,"style":66},"#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",[39,97830,97831,97836,97840,97845,97850,97855,97860,97865,97870,97875,97880],{"__ignoreMap":66},[84,97832,97833],{"class":86,"line":87},[84,97834,97835],{"class":1378},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[84,97837,97838],{"class":86,"line":98},[84,97839,96844],{"class":158},[84,97841,97842],{"class":86,"line":106},[84,97843,97844],{"class":158},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[84,97846,97847],{"class":86,"line":112},[84,97848,97849],{"class":158},"参数介绍：\n",[84,97851,97852],{"class":86,"line":425},[84,97853,97854],{"class":158},"start：序列的起始值\n",[84,97856,97857],{"class":86,"line":2395},[84,97858,97859],{"class":158},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[84,97861,97862],{"class":86,"line":2401},[84,97863,97864],{"class":158},"num：要生长的等步长的样本数量，默认为50\n",[84,97866,97867],{"class":86,"line":2492},[84,97868,97869],{"class":158},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[84,97871,97872],{"class":86,"line":2498},[84,97873,97874],{"class":158},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[84,97876,97877],{"class":86,"line":2510},[84,97878,97879],{"class":158},"dtype：ndarry的数据类型\n",[84,97881,97882],{"class":86,"line":2793},[84,97883,96844],{"class":158},[19,97885,97886],{},[2643,97887],{"alt":66,"src":97888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97890,97891],{},"这里num=是可以省略的",[19,97893,97894],{},"也就是下方两行代码结果是一模一样的",[60,97896,97898],{"className":121,"code":97897,"language":91,"meta":66,"style":66},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[39,97899,97900,97917],{"__ignoreMap":66},[84,97901,97902,97905,97907,97909,97911,97913,97915],{"class":86,"line":87},[84,97903,97904],{"class":154},"np.linspace(",[84,97906,1529],{"class":94},[84,97908,1688],{"class":154},[84,97910,1629],{"class":94},[84,97912,1688],{"class":154},[84,97914,1629],{"class":94},[84,97916,162],{"class":154},[84,97918,97919,97921,97923,97925,97927,97929,97931,97933,97935],{"class":86,"line":98},[84,97920,97904],{"class":154},[84,97922,1529],{"class":94},[84,97924,1688],{"class":154},[84,97926,1629],{"class":94},[84,97928,1688],{"class":154},[84,97930,2846],{"class":928},[84,97932,867],{"class":129},[84,97934,1629],{"class":94},[84,97936,162],{"class":154},[198,97938,97940],{"id":97939},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[60,97942,97944],{"className":121,"code":97943,"language":91,"meta":66,"style":66},"#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",[39,97945,97946,97951,97955,97960,97965,97970,97975,97979,97984,97989,97993],{"__ignoreMap":66},[84,97947,97948],{"class":86,"line":87},[84,97949,97950],{"class":1378},"#logspace函数用于创建一个等比数列，格式如下：\n",[84,97952,97953],{"class":86,"line":98},[84,97954,96844],{"class":158},[84,97956,97957],{"class":86,"line":106},[84,97958,97959],{"class":158},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[84,97961,97962],{"class":86,"line":112},[84,97963,97964],{"class":158},"参数为：\n",[84,97966,97967],{"class":86,"line":425},[84,97968,97969],{"class":158},"start:序列的起始位置为：base**start\n",[84,97971,97972],{"class":86,"line":2395},[84,97973,97974],{"class":158},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[84,97976,97977],{"class":86,"line":2401},[84,97978,97864],{"class":158},[84,97980,97981],{"class":86,"line":2492},[84,97982,97983],{"class":158},"endpoint：是否包含 stop 这个值，默认是 True\n",[84,97985,97986],{"class":86,"line":2498},[84,97987,97988],{"class":158},"base：对数的底数，默认是 10（常见对数）\n",[84,97990,97991],{"class":86,"line":2510},[84,97992,97879],{"class":158},[84,97994,97995],{"class":86,"line":2793},[84,97996,96844],{"class":158},[19,97998,97999],{},[2643,98000],{"alt":66,"src":98001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98003,98004],{},"logspace()函数中的num参数也是可以不写num=的",[19,98006,98007],{},"endpoint是不可以省略的",[1222,98009,98010],{},"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":66,"searchDepth":98,"depth":98,"links":98012},[98013,98017,98022,98026,98030,98031],{"id":96402,"depth":98,"text":96403,"children":98014},[98015,98016],{"id":96406,"depth":106,"text":96407},{"id":96479,"depth":106,"text":96480},{"id":96511,"depth":98,"text":96512,"children":98018},[98019,98020,98021],{"id":96515,"depth":106,"text":96516},{"id":96697,"depth":106,"text":96698},{"id":96775,"depth":106,"text":96776},{"id":96810,"depth":98,"text":96811,"children":98023},[98024,98025],{"id":96814,"depth":106,"text":96815},{"id":96871,"depth":106,"text":96872},{"id":96967,"depth":98,"text":96968,"children":98027},[98028,98029],{"id":96971,"depth":106,"text":96972},{"id":96983,"depth":106,"text":96984},{"id":97017,"depth":98,"text":97018},{"id":97054,"depth":98,"text":97055,"children":98032},[98033,98034,98035,98036,98037,98038,98039,98040],{"id":97058,"depth":106,"text":97059},{"id":97283,"depth":106,"text":97284},{"id":97290,"depth":106,"text":97291},{"id":97499,"depth":106,"text":97500},{"id":97519,"depth":106,"text":97520},{"id":97655,"depth":106,"text":97656},{"id":97824,"depth":106,"text":97825},{"id":97939,"depth":106,"text":97940},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96394,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98047,"title":98048,"body":98049,"description":1249,"extension":1250,"meta":98142,"navigation":1252,"path":98143,"seo":98144,"stem":98145,"__hash__":98146},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98050,"toc":98140},[98051,98054,98057,98060,98063,98066,98069,98072,98075,98078,98081,98084,98086,98089,98092,98097,98100,98103,98137],[10,98052,98048],{"id":98053},"_20魔法命令mprun",[19,98055,98056],{},"逐行分析数据内存的使用情况",[19,98058,98059],{},"语法格式：",[19,98061,98062],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98064,98065],{},"分析结果列如下：",[19,98067,98068],{},"Line行号",[19,98070,98071],{},"Mem usage内存使用大小",[19,98073,98074],{},"increment内存增量",[19,98076,98077],{},"Line content代码内容",[19,98079,98080],{},"补充说明：",[19,98082,98083],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98085,96349],{},[19,98087,98088],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98090,98091],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98093,98094],{},[2643,98095],{"alt":66,"src":98096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98098,98099],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98101,98102],{},"这时候需要重新加载模块",[60,98104,98106],{"className":121,"code":98105,"language":91,"meta":66,"style":66},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[39,98107,98108,98113,98120,98125],{"__ignoreMap":66},[84,98109,98110],{"class":86,"line":87},[84,98111,98112],{"class":1378},"#重新加载模块\n",[84,98114,98115,98117],{"class":86,"line":98},[84,98116,31547],{"class":129},[84,98118,98119],{"class":154}," importlib\n",[84,98121,98122],{"class":86,"line":106},[84,98123,98124],{"class":154},"importlib.reload(mprun_test)\n",[84,98126,98127,98129,98132,98134],{"class":86,"line":112},[84,98128,1638],{"class":129},[84,98130,98131],{"class":154},"mprun ",[84,98133,1841],{"class":129},[84,98135,98136],{"class":154},"f mprun_test.fun_test mprun_test.fun_test()\n",[1222,98138,98139],{},"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":66,"searchDepth":98,"depth":98,"links":98141},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98048,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98148,"title":98149,"body":98150,"description":1249,"extension":1250,"meta":98167,"navigation":1252,"path":98168,"seo":98169,"stem":98170,"__hash__":98171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98151,"toc":98165},[98152,98155,98160],[10,98153,98149],{"id":98154},"_3一维数组的索引和切片",[19,98156,98157],{},[2643,98158],{"alt":66,"src":98159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98161,98162],{},[2643,98163],{"alt":66,"src":98164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":66,"searchDepth":98,"depth":98,"links":98166},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98149,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98173,"title":98174,"body":98175,"description":1249,"extension":1250,"meta":98658,"navigation":1252,"path":98659,"seo":98660,"stem":98661,"__hash__":98662},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98176,"toc":98656},[98177,98180,98183,98188,98221,98224,98262,98265,98299,98302,98407,98410,98447,98450,98551,98554,98605,98608,98650,98653],[10,98178,98174],{"id":98179},"_4二维数组的索引与切片",[19,98181,98182],{},"①获取指定单个元素",[19,98184,98185],{},[2643,98186],{"alt":66,"src":98187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[60,98189,98191],{"className":121,"code":98190,"language":91,"meta":66,"style":66},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[39,98192,98193,98198,98203,98208],{"__ignoreMap":66},[84,98194,98195],{"class":86,"line":87},[84,98196,98197],{"class":1378},"#获取元素9\n",[84,98199,98200],{"class":86,"line":98},[84,98201,98202],{"class":1378},"#先获取所在行，再获取所在列\n",[84,98204,98205],{"class":86,"line":106},[84,98206,98207],{"class":1378},"#数组[行索引号，列索引号]\n",[84,98209,98210,98213,98215,98217,98219],{"class":86,"line":112},[84,98211,98212],{"class":154},"a[",[84,98214,1529],{"class":94},[84,98216,1688],{"class":154},[84,98218,1397],{"class":94},[84,98220,34398],{"class":154},[19,98222,98223],{},"②获取整行元素",[60,98225,98227],{"className":121,"code":98226,"language":91,"meta":66,"style":66},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[39,98228,98229,98234,98239,98247,98252],{"__ignoreMap":66},[84,98230,98231],{"class":86,"line":87},[84,98232,98233],{"class":1378},"#获取整行 数组[行索引号]\n",[84,98235,98236],{"class":86,"line":98},[84,98237,98238],{"class":1378},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[84,98240,98241,98243,98245],{"class":86,"line":106},[84,98242,98212],{"class":154},[84,98244,1397],{"class":94},[84,98246,34398],{"class":154},[84,98248,98249],{"class":86,"line":112},[84,98250,98251],{"class":1378},"#也可以负索引获取一行\n",[84,98253,98254,98256,98258,98260],{"class":86,"line":425},[84,98255,98212],{"class":154},[84,98257,1841],{"class":129},[84,98259,1529],{"class":94},[84,98261,34398],{"class":154},[19,98263,98264],{},"③获取整列元素",[60,98266,98268],{"className":121,"code":98267,"language":91,"meta":66,"style":66},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[39,98269,98270,98275,98284,98289],{"__ignoreMap":66},[84,98271,98272],{"class":86,"line":87},[84,98273,98274],{"class":1378},"#获取整列 数组名[:,列索引]\n",[84,98276,98277,98280,98282],{"class":86,"line":98},[84,98278,98279],{"class":154},"a[:,",[84,98281,1397],{"class":94},[84,98283,34398],{"class":154},[84,98285,98286],{"class":86,"line":106},[84,98287,98288],{"class":1378},"#也可以负索引获取一列\n",[84,98290,98291,98293,98295,98297],{"class":86,"line":112},[84,98292,98279],{"class":154},[84,98294,1841],{"class":129},[84,98296,1529],{"class":94},[84,98298,34398],{"class":154},[19,98300,98301],{},"④部分行部分列的元素",[60,98303,98305],{"className":121,"code":98304,"language":91,"meta":66,"style":66},"#部分行部分列 数组名[行切片，列切片]\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",[39,98306,98307,98312,98322,98326,98330,98335,98340,98344,98356,98360,98364,98369,98374,98379,98384,98388,98393],{"__ignoreMap":66},[84,98308,98309],{"class":86,"line":87},[84,98310,98311],{"class":1378},"#部分行部分列 数组名[行切片，列切片]\n",[84,98313,98314,98317,98319],{"class":86,"line":98},[84,98315,98316],{"class":154},"a[:",[84,98318,1397],{"class":94},[84,98320,98321],{"class":154},",:]\n",[84,98323,98324],{"class":86,"line":106},[84,98325,94710],{"class":1378},[84,98327,98328],{"class":86,"line":112},[84,98329,95074],{"class":158},[84,98331,98332],{"class":86,"line":425},[84,98333,98334],{"class":158},"array([[ 1,  2,  3,  4,  5,  6],\n",[84,98336,98337],{"class":86,"line":2395},[84,98338,98339],{"class":158},"       [ 7,  8,  9, 10, 11, 12]])\n",[84,98341,98342],{"class":86,"line":2401},[84,98343,95074],{"class":158},[84,98345,98346,98348,98350,98352,98354],{"class":86,"line":2492},[84,98347,98279],{"class":154},[84,98349,1529],{"class":94},[84,98351,2167],{"class":154},[84,98353,1604],{"class":94},[84,98355,34398],{"class":154},[84,98357,98358],{"class":86,"line":2498},[84,98359,94710],{"class":1378},[84,98361,98362],{"class":86,"line":2510},[84,98363,95074],{"class":158},[84,98365,98366],{"class":86,"line":2793},[84,98367,98368],{"class":158},"array([[ 2,  3,  4],\n",[84,98370,98371],{"class":86,"line":2798},[84,98372,98373],{"class":158},"       [ 8,  9, 10],\n",[84,98375,98376],{"class":86,"line":2804},[84,98377,98378],{"class":158},"       [14, 15, 16],\n",[84,98380,98381],{"class":86,"line":2809},[84,98382,98383],{"class":158},"       [20, 21, 22]])\n",[84,98385,98386],{"class":86,"line":2823},[84,98387,95074],{"class":158},[84,98389,98390],{"class":86,"line":2828},[84,98391,98392],{"class":1378},"#对列行同时进行切片，使用了step参数\n",[84,98394,98395,98398,98400,98403,98405],{"class":86,"line":2834},[84,98396,98397],{"class":154},"a[::",[84,98399,1397],{"class":94},[84,98401,98402],{"class":154},",::",[84,98404,1397],{"class":94},[84,98406,34398],{"class":154},[19,98408,98409],{},"⑤同时获取两个元素",[60,98411,98413],{"className":121,"code":98412,"language":91,"meta":66,"style":66},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[39,98414,98415,98420,98425],{"__ignoreMap":66},[84,98416,98417],{"class":86,"line":87},[84,98418,98419],{"class":1378},"#同时获取第三行第二列，第四行第一列\n",[84,98421,98422],{"class":86,"line":98},[84,98423,98424],{"class":1378},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[84,98426,98427,98430,98432,98434,98436,98438,98440,98442,98444],{"class":86,"line":106},[84,98428,98429],{"class":154},"a[(",[84,98431,1397],{"class":94},[84,98433,1688],{"class":154},[84,98435,1391],{"class":94},[84,98437,43399],{"class":154},[84,98439,1529],{"class":94},[84,98441,1688],{"class":154},[84,98443,1504],{"class":94},[84,98445,98446],{"class":154},")]\n",[19,98448,98449],{},"⑥切片，对行进行反向获取",[60,98451,98453],{"className":121,"code":98452,"language":91,"meta":66,"style":66},"#切片 对所有行进行反向获取\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",[39,98454,98455,98460,98470,98474,98478,98483,98488,98493,98498,98502,98507,98523,98527,98532,98537,98542,98547],{"__ignoreMap":66},[84,98456,98457],{"class":86,"line":87},[84,98458,98459],{"class":1378},"#切片 对所有行进行反向获取\n",[84,98461,98462,98464,98466,98468],{"class":86,"line":98},[84,98463,98397],{"class":154},[84,98465,1841],{"class":129},[84,98467,1529],{"class":94},[84,98469,34398],{"class":154},[84,98471,98472],{"class":86,"line":106},[84,98473,94710],{"class":1378},[84,98475,98476],{"class":86,"line":112},[84,98477,95074],{"class":158},[84,98479,98480],{"class":86,"line":425},[84,98481,98482],{"class":158},"array([[19, 20, 21, 22, 23, 24],\n",[84,98484,98485],{"class":86,"line":2395},[84,98486,98487],{"class":158},"       [13, 14, 15, 16, 17, 18],\n",[84,98489,98490],{"class":86,"line":2401},[84,98491,98492],{"class":158},"       [ 7,  8,  9, 10, 11, 12],\n",[84,98494,98495],{"class":86,"line":2492},[84,98496,98497],{"class":158},"       [ 1,  2,  3,  4,  5,  6]])\n",[84,98499,98500],{"class":86,"line":2498},[84,98501,95074],{"class":158},[84,98503,98504],{"class":86,"line":2510},[84,98505,98506],{"class":1378},"#对行列都进行反向切片获取\n",[84,98508,98509,98511,98513,98515,98517,98519,98521],{"class":86,"line":2793},[84,98510,98397],{"class":154},[84,98512,1841],{"class":129},[84,98514,1529],{"class":94},[84,98516,98402],{"class":154},[84,98518,1841],{"class":129},[84,98520,1529],{"class":94},[84,98522,34398],{"class":154},[84,98524,98525],{"class":86,"line":2798},[84,98526,95074],{"class":158},[84,98528,98529],{"class":86,"line":2804},[84,98530,98531],{"class":158},"array([[24, 23, 22, 21, 20, 19],\n",[84,98533,98534],{"class":86,"line":2809},[84,98535,98536],{"class":158},"       [18, 17, 16, 15, 14, 13],\n",[84,98538,98539],{"class":86,"line":2823},[84,98540,98541],{"class":158},"       [12, 11, 10,  9,  8,  7],\n",[84,98543,98544],{"class":86,"line":2828},[84,98545,98546],{"class":158},"       [ 6,  5,  4,  3,  2,  1]])\n",[84,98548,98549],{"class":86,"line":2834},[84,98550,95074],{"class":158},[19,98552,98553],{},"⑦修改元素",[60,98555,98557],{"className":121,"code":98556,"language":91,"meta":66,"style":66},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[39,98558,98559,98564,98582,98587],{"__ignoreMap":66},[84,98560,98561],{"class":86,"line":87},[84,98562,98563],{"class":1378},"#获取前两行和前两列\n",[84,98565,98566,98569,98571,98573,98575,98578,98580],{"class":86,"line":98},[84,98567,98568],{"class":154},"sub_a",[84,98570,867],{"class":129},[84,98572,98316],{"class":154},[84,98574,1397],{"class":94},[84,98576,98577],{"class":154},",:",[84,98579,1397],{"class":94},[84,98581,34398],{"class":154},[84,98583,98584],{"class":86,"line":106},[84,98585,98586],{"class":1378},"#修改sub_a第一个元素的值\n",[84,98588,98589,98592,98594,98596,98598,98600,98602],{"class":86,"line":112},[84,98590,98591],{"class":154},"sub_a[",[84,98593,1504],{"class":94},[84,98595,1688],{"class":154},[84,98597,1504],{"class":94},[84,98599,2248],{"class":154},[84,98601,867],{"class":129},[84,98603,98604],{"class":94},"100\n",[19,98606,98607],{},"⑧数组复制copy()",[60,98609,98611],{"className":121,"code":98610,"language":91,"meta":66,"style":66},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[39,98612,98613,98618,98628,98633],{"__ignoreMap":66},[84,98614,98615],{"class":86,"line":87},[84,98616,98617],{"class":1378},"#数组复制\n",[84,98619,98620,98623,98625],{"class":86,"line":98},[84,98621,98622],{"class":154},"copy_a",[84,98624,867],{"class":129},[84,98626,98627],{"class":154},"np.copy(sub_a)\n",[84,98629,98630],{"class":86,"line":106},[84,98631,98632],{"class":1378},"#修改copy_a后不影响原数组\n",[84,98634,98635,98638,98640,98642,98644,98646,98648],{"class":86,"line":112},[84,98636,98637],{"class":154},"copy_a[",[84,98639,1504],{"class":94},[84,98641,1688],{"class":154},[84,98643,1504],{"class":94},[84,98645,2248],{"class":154},[84,98647,867],{"class":129},[84,98649,98604],{"class":94},[19,98651,98652],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1222,98654,98655],{},"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":66,"searchDepth":98,"depth":98,"links":98657},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98174,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98664,"title":98665,"body":98666,"description":1249,"extension":1250,"meta":99158,"navigation":1252,"path":99159,"seo":99160,"stem":99161,"__hash__":99162},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98667,"toc":99150},[98668,98671,98675,98678,98681,98734,98737,98762,98765,98784,98804,98807,98823,98827,98873,98877,98919,98923,98926,98929,98932,98935,98938,99000,99060,99064,99067,99124,99128,99133,99142,99147],[10,98669,98665],{"id":98670},"_5改变数组的维度",[14,98672,98674],{"id":98673},"_51-使用reshape","5.1 使用reshape()",[19,98676,98677],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98679,98680],{},"①一维数组转换为二维数组",[60,98682,98684],{"className":121,"code":98683,"language":91,"meta":66,"style":66},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[39,98685,98686,98702,98707,98712,98717],{"__ignoreMap":66},[84,98687,98688,98690,98692,98694,98696,98698,98700],{"class":86,"line":87},[84,98689,208],{"class":154},[84,98691,867],{"class":129},[84,98693,94148],{"class":154},[84,98695,1529],{"class":94},[84,98697,1688],{"class":154},[84,98699,1832],{"class":94},[84,98701,162],{"class":154},[84,98703,98704],{"class":86,"line":98},[84,98705,98706],{"class":1378},"#将一维数组进行转换\n",[84,98708,98709],{"class":86,"line":106},[84,98710,98711],{"class":1378},"#注意点：元素个数不可以变\n",[84,98713,98714],{"class":86,"line":112},[84,98715,98716],{"class":1378},"#转换维度要保持一致，不一致就异常！！！\n",[84,98718,98719,98721,98723,98726,98728,98730,98732],{"class":86,"line":425},[84,98720,94452],{"class":154},[84,98722,867],{"class":129},[84,98724,98725],{"class":154},"a.reshape(",[84,98727,1397],{"class":94},[84,98729,1688],{"class":154},[84,98731,1654],{"class":94},[84,98733,162],{"class":154},[19,98735,98736],{},"②一维数组转换为三维数组",[60,98738,98740],{"className":121,"code":98739,"language":91,"meta":66,"style":66},"aaa=a.reshape(2,3,2)\n",[39,98741,98742],{"__ignoreMap":66},[84,98743,98744,98746,98748,98750,98752,98754,98756,98758,98760],{"class":86,"line":87},[84,98745,96667],{"class":154},[84,98747,867],{"class":129},[84,98749,98725],{"class":154},[84,98751,1397],{"class":94},[84,98753,1688],{"class":154},[84,98755,1391],{"class":94},[84,98757,1688],{"class":154},[84,98759,1397],{"class":94},[84,98761,162],{"class":154},[19,98763,98764],{},"③二维数组转化为一维数组",[60,98766,98768],{"className":121,"code":98767,"language":91,"meta":66,"style":66},"#知道元素个数：\naa.reshape(12)\n",[39,98769,98770,98775],{"__ignoreMap":66},[84,98771,98772],{"class":86,"line":87},[84,98773,98774],{"class":1378},"#知道元素个数：\n",[84,98776,98777,98780,98782],{"class":86,"line":98},[84,98778,98779],{"class":154},"aa.reshape(",[84,98781,1807],{"class":94},[84,98783,162],{"class":154},[60,98785,98787],{"className":121,"code":98786,"language":91,"meta":66,"style":66},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[39,98788,98789,98794],{"__ignoreMap":66},[84,98790,98791],{"class":86,"line":87},[84,98792,98793],{"class":1378},"#不知道元素个数，参数传递-1\n",[84,98795,98796,98798,98800,98802],{"class":86,"line":98},[84,98797,98779],{"class":154},[84,98799,1841],{"class":129},[84,98801,1529],{"class":94},[84,98803,162],{"class":154},[19,98805,98806],{},"④三维数组转换为一维数组",[60,98808,98810],{"className":121,"code":98809,"language":91,"meta":66,"style":66},"aaa.reshape(-1)\n",[39,98811,98812],{"__ignoreMap":66},[84,98813,98814,98817,98819,98821],{"class":86,"line":87},[84,98815,98816],{"class":154},"aaa.reshape(",[84,98818,1841],{"class":129},[84,98820,1529],{"class":94},[84,98822,162],{"class":154},[14,98824,98826],{"id":98825},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[60,98828,98830],{"className":121,"code":98829,"language":91,"meta":66,"style":66},"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",[39,98831,98832,98859,98864,98868],{"__ignoreMap":66},[84,98833,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852,98854,98856],{"class":86,"line":87},[84,98835,94452],{"class":154},[84,98837,867],{"class":129},[84,98839,94148],{"class":154},[84,98841,1529],{"class":94},[84,98843,1688],{"class":154},[84,98845,1832],{"class":94},[84,98847,94153],{"class":154},[84,98849,1397],{"class":94},[84,98851,1688],{"class":154},[84,98853,1654],{"class":94},[84,98855,1739],{"class":154},[84,98857,98858],{"class":1378},"#转换为2行6列的数组\n",[84,98860,98861],{"class":86,"line":98},[84,98862,98863],{"class":154},"aa.revel()\n",[84,98865,98866],{"class":86,"line":106},[84,98867,94710],{"class":1378},[84,98869,98870],{"class":86,"line":112},[84,98871,98872],{"class":1378},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98874,98876],{"id":98875},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[60,98878,98880],{"className":121,"code":98879,"language":91,"meta":66,"style":66},"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",[39,98881,98882,98906,98911,98915],{"__ignoreMap":66},[84,98883,98884,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904],{"class":86,"line":87},[84,98885,94452],{"class":154},[84,98887,867],{"class":129},[84,98889,94148],{"class":154},[84,98891,1529],{"class":94},[84,98893,1688],{"class":154},[84,98895,1832],{"class":94},[84,98897,94153],{"class":154},[84,98899,1397],{"class":94},[84,98901,1688],{"class":154},[84,98903,1654],{"class":94},[84,98905,162],{"class":154},[84,98907,98908],{"class":86,"line":98},[84,98909,98910],{"class":154},"aa.flatten()\n",[84,98912,98913],{"class":86,"line":106},[84,98914,94710],{"class":1378},[84,98916,98917],{"class":86,"line":112},[84,98918,98872],{"class":1378},[14,98920,98922],{"id":98921},"_54-使用resize","5.4 使用resize()",[19,98924,98925],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98927,98928],{},"通过resize方法可以改变数组的维度",[19,98930,98931],{},"#resize修改数组维度",[19,98933,98934],{},"#以元组的形式指定形状",[19,98936,98937],{},"#改变的是原数组",[60,98939,98941],{"className":121,"code":98940,"language":91,"meta":66,"style":66},"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",[39,98942,98943,98959,98979,98992,98996],{"__ignoreMap":66},[84,98944,98945,98947,98949,98951,98953,98955,98957],{"class":86,"line":87},[84,98946,208],{"class":154},[84,98948,867],{"class":129},[84,98950,94148],{"class":154},[84,98952,1529],{"class":94},[84,98954,1688],{"class":154},[84,98956,1832],{"class":94},[84,98958,162],{"class":154},[84,98960,98961,98964,98966,98968,98970,98972,98974,98976],{"class":86,"line":98},[84,98962,98963],{"class":154},"a.shape",[84,98965,867],{"class":129},[84,98967,155],{"class":154},[84,98969,1397],{"class":94},[84,98971,1688],{"class":154},[84,98973,1654],{"class":94},[84,98975,1739],{"class":154},[84,98977,98978],{"class":1378},"#改变了原数组\n",[84,98980,98981,98983,98985,98988,98990],{"class":86,"line":106},[84,98982,208],{"class":154},[84,98984,867],{"class":129},[84,98986,98987],{"class":154},"resize((",[84,98989,1807],{"class":94},[84,98991,31651],{"class":154},[84,98993,98994],{"class":86,"line":112},[84,98995,94710],{"class":1378},[84,98997,98998],{"class":86,"line":425},[84,98999,98872],{"class":1378},[60,99001,99003],{"className":121,"code":99002,"language":91,"meta":66,"style":66},"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",[39,99004,99005,99018,99022,99026,99031,99036,99041,99046,99051,99056],{"__ignoreMap":66},[84,99006,99007,99010,99012,99014,99016],{"class":86,"line":87},[84,99008,99009],{"class":154},"a.resize((",[84,99011,1654],{"class":94},[84,99013,1688],{"class":154},[84,99015,1397],{"class":94},[84,99017,31651],{"class":154},[84,99019,99020],{"class":86,"line":98},[84,99021,94710],{"class":1378},[84,99023,99024],{"class":86,"line":106},[84,99025,95074],{"class":158},[84,99027,99028],{"class":86,"line":112},[84,99029,99030],{"class":158},"array([[ 1,  2],\n",[84,99032,99033],{"class":86,"line":425},[84,99034,99035],{"class":158},"       [ 3,  4],\n",[84,99037,99038],{"class":86,"line":2395},[84,99039,99040],{"class":158},"       [ 5,  6],\n",[84,99042,99043],{"class":86,"line":2401},[84,99044,99045],{"class":158},"       [ 7,  8],\n",[84,99047,99048],{"class":86,"line":2492},[84,99049,99050],{"class":158},"       [ 9, 10],\n",[84,99052,99053],{"class":86,"line":2498},[84,99054,99055],{"class":158},"       [11, 12]])\n",[84,99057,99058],{"class":86,"line":2510},[84,99059,95074],{"class":158},[14,99061,99063],{"id":99062},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99065,99066],{},"改变了原数组",[60,99068,99070],{"className":121,"code":99069,"language":91,"meta":66,"style":66},"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",[39,99071,99072,99088,99104,99108,99112,99116,99120],{"__ignoreMap":66},[84,99073,99074,99076,99078,99080,99082,99084,99086],{"class":86,"line":87},[84,99075,208],{"class":154},[84,99077,867],{"class":129},[84,99079,94148],{"class":154},[84,99081,1529],{"class":94},[84,99083,1688],{"class":154},[84,99085,1832],{"class":94},[84,99087,162],{"class":154},[84,99089,99090,99092,99094,99096,99098,99100,99102],{"class":86,"line":98},[84,99091,98963],{"class":154},[84,99093,867],{"class":129},[84,99095,155],{"class":154},[84,99097,1397],{"class":94},[84,99099,1688],{"class":154},[84,99101,1654],{"class":94},[84,99103,162],{"class":154},[84,99105,99106],{"class":86,"line":106},[84,99107,94710],{"class":1378},[84,99109,99110],{"class":86,"line":112},[84,99111,95074],{"class":158},[84,99113,99114],{"class":86,"line":425},[84,99115,98334],{"class":158},[84,99117,99118],{"class":86,"line":2395},[84,99119,98339],{"class":158},[84,99121,99122],{"class":86,"line":2401},[84,99123,95074],{"class":158},[14,99125,99127],{"id":99126},"_56-重要比较","5.6 重要比较：",[19,99129,99130],{},[2643,99131],{"alt":66,"src":99132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99134,99135,99136,99138,99139,99141],{},"口诀：NumPy 函数要么用 ",[39,99137,97109],{},"，要么用 ",[39,99140,32649],{},"，创建结构用 shape，造数据用 size",[19,99143,99144],{},[2643,99145],{"alt":66,"src":99146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1222,99148,99149],{},"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":66,"searchDepth":98,"depth":98,"links":99151},[99152,99153,99154,99155,99156,99157],{"id":98673,"depth":98,"text":98674},{"id":98825,"depth":98,"text":98826},{"id":98875,"depth":98,"text":98876},{"id":98921,"depth":98,"text":98922},{"id":99062,"depth":98,"text":99063},{"id":99126,"depth":98,"text":99127},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98665,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99164,"title":99165,"body":99166,"description":1249,"extension":1250,"meta":100238,"navigation":1252,"path":100239,"seo":100240,"stem":100241,"__hash__":100242},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99167,"toc":100232},[99168,99171,99175,99178,99181,99184,99249,99252,99292,99295,99377,99380,99385,99407,99409,99414,99419,99422,99425,99580,99583,99785,99789,99792,99795,99863,99865,99870,99873,99876,99956,99960,99963,99965,100038,100040,100045,100047,100127,100131,100134,100137,100140,100143,100146,100149,100229],[10,99169,99165],{"id":99170},"_6数组的拼接",[14,99172,99174],{"id":99173},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99176,99177],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99179,99180],{},"函数内部传两个数列构成的数列或者元组",[19,99182,99183],{},"①一维数组的拼接",[60,99185,99187],{"className":121,"code":99186,"language":91,"meta":66,"style":66},"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",[39,99188,99189,99209,99229,99234,99239,99244],{"__ignoreMap":66},[84,99190,99191,99193,99195,99197,99199,99201,99203,99205,99207],{"class":86,"line":87},[84,99192,208],{"class":154},[84,99194,867],{"class":129},[84,99196,94170],{"class":154},[84,99198,1529],{"class":94},[84,99200,1688],{"class":154},[84,99202,1397],{"class":94},[84,99204,1688],{"class":154},[84,99206,1391],{"class":94},[84,99208,5834],{"class":154},[84,99210,99211,99213,99215,99217,99219,99221,99223,99225,99227],{"class":86,"line":98},[84,99212,1574],{"class":154},[84,99214,867],{"class":129},[84,99216,94170],{"class":154},[84,99218,1604],{"class":94},[84,99220,1688],{"class":154},[84,99222,1629],{"class":94},[84,99224,1688],{"class":154},[84,99226,1654],{"class":94},[84,99228,5834],{"class":154},[84,99230,99231],{"class":86,"line":106},[84,99232,99233],{"class":1378},"#调用concatenate进行数组拼接\n",[84,99235,99236],{"class":86,"line":112},[84,99237,99238],{"class":154},"np.concatenate((a,b))\n",[84,99240,99241],{"class":86,"line":425},[84,99242,99243],{"class":1378},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[84,99245,99246],{"class":86,"line":2395},[84,99247,99248],{"class":1378},"#np.concatenate([a,b])\n",[19,99250,99251],{},"②一维多个数组拼接",[60,99253,99255],{"className":121,"code":99254,"language":91,"meta":66,"style":66},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[39,99256,99257,99262,99282,99287],{"__ignoreMap":66},[84,99258,99259],{"class":86,"line":87},[84,99260,99261],{"class":1378},"#也可以多个数组进行拼接\n",[84,99263,99264,99266,99268,99270,99272,99274,99276,99278,99280],{"class":86,"line":98},[84,99265,1599],{"class":154},[84,99267,867],{"class":129},[84,99269,94170],{"class":154},[84,99271,1756],{"class":94},[84,99273,1688],{"class":154},[84,99275,1781],{"class":94},[84,99277,1688],{"class":154},[84,99279,1832],{"class":94},[84,99281,5834],{"class":154},[84,99283,99284],{"class":86,"line":106},[84,99285,99286],{"class":154},"c\n",[84,99288,99289],{"class":86,"line":112},[84,99290,99291],{"class":154},"np.concatenate((a,b,c))\n",[19,99293,99294],{},"③二维数组拼接",[60,99296,99298],{"className":121,"code":99297,"language":91,"meta":66,"style":66},"#二维数组使用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",[39,99299,99300,99305,99329,99354,99359,99364],{"__ignoreMap":66},[84,99301,99302],{"class":86,"line":87},[84,99303,99304],{"class":1378},"#二维数组使用concatenate进行拼接\n",[84,99306,99307,99309,99311,99313,99315,99317,99319,99321,99323,99325,99327],{"class":86,"line":98},[84,99308,94452],{"class":154},[84,99310,867],{"class":129},[84,99312,94148],{"class":154},[84,99314,1529],{"class":94},[84,99316,1688],{"class":154},[84,99318,1832],{"class":94},[84,99320,94153],{"class":154},[84,99322,1391],{"class":94},[84,99324,1688],{"class":154},[84,99326,1604],{"class":94},[84,99328,162],{"class":154},[84,99330,99331,99334,99336,99338,99340,99342,99344,99346,99348,99350,99352],{"class":86,"line":106},[84,99332,99333],{"class":154},"bb",[84,99335,867],{"class":129},[84,99337,94148],{"class":154},[84,99339,1647],{"class":94},[84,99341,1688],{"class":154},[84,99343,1951],{"class":94},[84,99345,94153],{"class":154},[84,99347,1391],{"class":94},[84,99349,1688],{"class":154},[84,99351,1604],{"class":94},[84,99353,162],{"class":154},[84,99355,99356],{"class":86,"line":112},[84,99357,99358],{"class":1378},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[84,99360,99361],{"class":86,"line":425},[84,99362,99363],{"class":1378},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[84,99365,99366,99369,99371,99373,99375],{"class":86,"line":2395},[84,99367,99368],{"class":154},"np.concatenate((aa,bb),",[84,99370,48664],{"class":928},[84,99372,867],{"class":129},[84,99374,1504],{"class":94},[84,99376,162],{"class":154},[19,99378,99379],{},"结果：",[19,99381,99382],{},[2643,99383],{"alt":66,"src":99384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[60,99386,99388],{"className":121,"code":99387,"language":91,"meta":66,"style":66},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[39,99389,99390,99395],{"__ignoreMap":66},[84,99391,99392],{"class":86,"line":87},[84,99393,99394],{"class":1378},"#指定axis为1进行拼接\n",[84,99396,99397,99399,99401,99403,99405],{"class":86,"line":98},[84,99398,99368],{"class":154},[84,99400,48664],{"class":928},[84,99402,867],{"class":129},[84,99404,1529],{"class":94},[84,99406,162],{"class":154},[19,99408,99379],{},[19,99410,99411],{},[2643,99412],{"alt":66,"src":99413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99415,99416],{},[1464,99417,99418],{},"二维数组总结：0竖着方向，1横着方向",[19,99420,99421],{},"④三维数组拼接",[19,99423,99424],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[60,99426,99428],{"className":121,"code":99427,"language":91,"meta":66,"style":66},"#两个三行六列\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",[39,99429,99430,99435,99463,99493,99498,99515,99520,99525,99530,99547,99552,99557,99562,99575],{"__ignoreMap":66},[84,99431,99432],{"class":86,"line":87},[84,99433,99434],{"class":1378},"#两个三行六列\n",[84,99436,99437,99439,99441,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461],{"class":86,"line":98},[84,99438,96667],{"class":154},[84,99440,867],{"class":129},[84,99442,94148],{"class":154},[84,99444,1529],{"class":94},[84,99446,1688],{"class":154},[84,99448,1635],{"class":94},[84,99450,94153],{"class":154},[84,99452,1397],{"class":94},[84,99454,1688],{"class":154},[84,99456,1391],{"class":94},[84,99458,1688],{"class":154},[84,99460,1654],{"class":94},[84,99462,162],{"class":154},[84,99464,99465,99468,99470,99472,99474,99476,99479,99481,99483,99485,99487,99489,99491],{"class":86,"line":106},[84,99466,99467],{"class":154},"bbb",[84,99469,867],{"class":129},[84,99471,94148],{"class":154},[84,99473,1647],{"class":94},[84,99475,1688],{"class":154},[84,99477,99478],{"class":94},"137",[84,99480,94153],{"class":154},[84,99482,1397],{"class":94},[84,99484,1688],{"class":154},[84,99486,1391],{"class":94},[84,99488,1688],{"class":154},[84,99490,1654],{"class":94},[84,99492,162],{"class":154},[84,99494,99495],{"class":86,"line":112},[84,99496,99497],{"class":1378},"#axis=0\n",[84,99499,99500,99502,99504,99507,99509,99511,99513],{"class":86,"line":425},[84,99501,2003],{"class":154},[84,99503,867],{"class":129},[84,99505,99506],{"class":154},"np.concatenate((aaa,bbb),",[84,99508,48664],{"class":928},[84,99510,867],{"class":129},[84,99512,1504],{"class":94},[84,99514,162],{"class":154},[84,99516,99517],{"class":86,"line":2395},[84,99518,99519],{"class":154},"s.shape\n",[84,99521,99522],{"class":86,"line":2401},[84,99523,99524],{"class":1378},"#输出：(4,3,6)\n",[84,99526,99527],{"class":86,"line":2492},[84,99528,99529],{"class":1378},"#axis=1\n",[84,99531,99532,99535,99537,99539,99541,99543,99545],{"class":86,"line":2498},[84,99533,99534],{"class":154},"ss",[84,99536,867],{"class":129},[84,99538,99506],{"class":154},[84,99540,48664],{"class":928},[84,99542,867],{"class":129},[84,99544,1529],{"class":94},[84,99546,162],{"class":154},[84,99548,99549],{"class":86,"line":2510},[84,99550,99551],{"class":154},"ss.shape\n",[84,99553,99554],{"class":86,"line":2793},[84,99555,99556],{"class":1378},"#输出：(2,6,6)\n",[84,99558,99559],{"class":86,"line":2798},[84,99560,99561],{"class":1378},"#axis=2\n",[84,99563,99564,99566,99568,99570,99572],{"class":86,"line":2804},[84,99565,99506],{"class":154},[84,99567,48664],{"class":928},[84,99569,867],{"class":129},[84,99571,1397],{"class":94},[84,99573,99574],{"class":154},").shape\n",[84,99576,99577],{"class":86,"line":2809},[84,99578,99579],{"class":1378},"#输出：（2，3，12）\n",[19,99581,99582],{},"⑤四维数组拼接",[60,99584,99586],{"className":121,"code":99585,"language":91,"meta":66,"style":66},"#两个三行六列\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",[39,99587,99588,99592,99620,99648,99673,99699,99703,99716,99721,99725,99737,99742,99746,99758,99763,99768,99780],{"__ignoreMap":66},[84,99589,99590],{"class":86,"line":87},[84,99591,99434],{"class":1378},[84,99593,99594,99596,99598,99600,99602,99604,99606,99608,99610,99612,99614,99616,99618],{"class":86,"line":98},[84,99595,96667],{"class":154},[84,99597,867],{"class":129},[84,99599,94148],{"class":154},[84,99601,1529],{"class":94},[84,99603,1688],{"class":154},[84,99605,1635],{"class":94},[84,99607,94153],{"class":154},[84,99609,1397],{"class":94},[84,99611,1688],{"class":154},[84,99613,1391],{"class":94},[84,99615,1688],{"class":154},[84,99617,1654],{"class":94},[84,99619,162],{"class":154},[84,99621,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642,99644,99646],{"class":86,"line":106},[84,99623,99467],{"class":154},[84,99625,867],{"class":129},[84,99627,94148],{"class":154},[84,99629,1647],{"class":94},[84,99631,1688],{"class":154},[84,99633,99478],{"class":94},[84,99635,94153],{"class":154},[84,99637,1397],{"class":94},[84,99639,1688],{"class":154},[84,99641,1391],{"class":94},[84,99643,1688],{"class":154},[84,99645,1654],{"class":94},[84,99647,162],{"class":154},[84,99649,99650,99653,99655,99657,99659,99661,99663,99665,99667,99669,99671],{"class":86,"line":112},[84,99651,99652],{"class":154},"aaaa",[84,99654,867],{"class":129},[84,99656,98816],{"class":154},[84,99658,1397],{"class":94},[84,99660,1688],{"class":154},[84,99662,1391],{"class":94},[84,99664,1688],{"class":154},[84,99666,1391],{"class":94},[84,99668,1688],{"class":154},[84,99670,1397],{"class":94},[84,99672,162],{"class":154},[84,99674,99675,99678,99680,99683,99685,99687,99689,99691,99693,99695,99697],{"class":86,"line":425},[84,99676,99677],{"class":154},"bbbb",[84,99679,867],{"class":129},[84,99681,99682],{"class":154},"bbb.reshape(",[84,99684,1397],{"class":94},[84,99686,1688],{"class":154},[84,99688,1391],{"class":94},[84,99690,1688],{"class":154},[84,99692,1391],{"class":94},[84,99694,1688],{"class":154},[84,99696,1397],{"class":94},[84,99698,162],{"class":154},[84,99700,99701],{"class":86,"line":2395},[84,99702,99497],{"class":1378},[84,99704,99705,99708,99710,99712,99714],{"class":86,"line":2401},[84,99706,99707],{"class":154},"np.concatenate((aaaa,bbbb),",[84,99709,48664],{"class":928},[84,99711,867],{"class":129},[84,99713,1504],{"class":94},[84,99715,99574],{"class":154},[84,99717,99718],{"class":86,"line":2492},[84,99719,99720],{"class":1378},"#结果：（4，3，3，2）\n",[84,99722,99723],{"class":86,"line":2498},[84,99724,99529],{"class":1378},[84,99726,99727,99729,99731,99733,99735],{"class":86,"line":2510},[84,99728,99707],{"class":154},[84,99730,48664],{"class":928},[84,99732,867],{"class":129},[84,99734,1529],{"class":94},[84,99736,99574],{"class":154},[84,99738,99739],{"class":86,"line":2793},[84,99740,99741],{"class":1378},"#结果：（2，6，3，2）\n",[84,99743,99744],{"class":86,"line":2798},[84,99745,99561],{"class":1378},[84,99747,99748,99750,99752,99754,99756],{"class":86,"line":2804},[84,99749,99707],{"class":154},[84,99751,48664],{"class":928},[84,99753,867],{"class":129},[84,99755,1397],{"class":94},[84,99757,99574],{"class":154},[84,99759,99760],{"class":86,"line":2809},[84,99761,99762],{"class":1378},"#结果：（2，3，6，2）\n",[84,99764,99765],{"class":86,"line":2823},[84,99766,99767],{"class":1378},"#axis=3\n",[84,99769,99770,99772,99774,99776,99778],{"class":86,"line":2828},[84,99771,99707],{"class":154},[84,99773,48664],{"class":928},[84,99775,867],{"class":129},[84,99777,1391],{"class":94},[84,99779,99574],{"class":154},[84,99781,99782],{"class":86,"line":2834},[84,99783,99784],{"class":1378},"#结果：（2，3，3，4）\n",[14,99786,99788],{"id":99787},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99790,99791],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99793,99794],{},"①二维数组",[60,99796,99798],{"className":121,"code":99797,"language":91,"meta":66,"style":66},"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",[39,99799,99800,99824,99848,99853,99858],{"__ignoreMap":66},[84,99801,99802,99804,99806,99808,99810,99812,99814,99816,99818,99820,99822],{"class":86,"line":87},[84,99803,94452],{"class":154},[84,99805,867],{"class":129},[84,99807,94148],{"class":154},[84,99809,1529],{"class":94},[84,99811,1688],{"class":154},[84,99813,1832],{"class":94},[84,99815,94153],{"class":154},[84,99817,1391],{"class":94},[84,99819,1688],{"class":154},[84,99821,1604],{"class":94},[84,99823,162],{"class":154},[84,99825,99826,99828,99830,99832,99834,99836,99838,99840,99842,99844,99846],{"class":86,"line":98},[84,99827,99333],{"class":154},[84,99829,867],{"class":129},[84,99831,94148],{"class":154},[84,99833,1647],{"class":94},[84,99835,1688],{"class":154},[84,99837,1951],{"class":94},[84,99839,94153],{"class":154},[84,99841,1391],{"class":94},[84,99843,1688],{"class":154},[84,99845,1604],{"class":94},[84,99847,162],{"class":154},[84,99849,99850],{"class":86,"line":106},[84,99851,99852],{"class":154},"np.hstack((aa,bb))\n",[84,99854,99855],{"class":86,"line":112},[84,99856,99857],{"class":1378},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[84,99859,99860],{"class":86,"line":425},[84,99861,99862],{"class":1378},"#np.hstack([aa,bb])\n",[19,99864,99379],{},[19,99866,99867],{},[2643,99868],{"alt":66,"src":99869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99871,99872],{},"等效于concatenate()函数中axis=1时的情况",[19,99874,99875],{},"②三维数组",[60,99877,99879],{"className":121,"code":99878,"language":91,"meta":66,"style":66},"#两个三行六列\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",[39,99880,99881,99885,99913,99941,99946,99951],{"__ignoreMap":66},[84,99882,99883],{"class":86,"line":87},[84,99884,99434],{"class":1378},[84,99886,99887,99889,99891,99893,99895,99897,99899,99901,99903,99905,99907,99909,99911],{"class":86,"line":98},[84,99888,96667],{"class":154},[84,99890,867],{"class":129},[84,99892,94148],{"class":154},[84,99894,1529],{"class":94},[84,99896,1688],{"class":154},[84,99898,1635],{"class":94},[84,99900,94153],{"class":154},[84,99902,1397],{"class":94},[84,99904,1688],{"class":154},[84,99906,1391],{"class":94},[84,99908,1688],{"class":154},[84,99910,1654],{"class":94},[84,99912,162],{"class":154},[84,99914,99915,99917,99919,99921,99923,99925,99927,99929,99931,99933,99935,99937,99939],{"class":86,"line":106},[84,99916,99467],{"class":154},[84,99918,867],{"class":129},[84,99920,94148],{"class":154},[84,99922,1647],{"class":94},[84,99924,1688],{"class":154},[84,99926,99478],{"class":94},[84,99928,94153],{"class":154},[84,99930,1397],{"class":94},[84,99932,1688],{"class":154},[84,99934,1391],{"class":94},[84,99936,1688],{"class":154},[84,99938,1654],{"class":94},[84,99940,162],{"class":154},[84,99942,99943],{"class":86,"line":112},[84,99944,99945],{"class":1378},"#使用hstack\n",[84,99947,99948],{"class":86,"line":425},[84,99949,99950],{"class":154},"np.hstack((aaa,bbb)).shape\n",[84,99952,99953],{"class":86,"line":2395},[84,99954,99955],{"class":1378},"#输出：（2，6，6）\n",[14,99957,99959],{"id":99958},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99961,99962],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99964,99794],{},[60,99966,99968],{"className":121,"code":99967,"language":91,"meta":66,"style":66},"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",[39,99969,99970,99994,100018,100023,100028,100033],{"__ignoreMap":66},[84,99971,99972,99974,99976,99978,99980,99982,99984,99986,99988,99990,99992],{"class":86,"line":87},[84,99973,94452],{"class":154},[84,99975,867],{"class":129},[84,99977,94148],{"class":154},[84,99979,1529],{"class":94},[84,99981,1688],{"class":154},[84,99983,1832],{"class":94},[84,99985,94153],{"class":154},[84,99987,1391],{"class":94},[84,99989,1688],{"class":154},[84,99991,1604],{"class":94},[84,99993,162],{"class":154},[84,99995,99996,99998,100000,100002,100004,100006,100008,100010,100012,100014,100016],{"class":86,"line":98},[84,99997,99333],{"class":154},[84,99999,867],{"class":129},[84,100001,94148],{"class":154},[84,100003,1647],{"class":94},[84,100005,1688],{"class":154},[84,100007,1951],{"class":94},[84,100009,94153],{"class":154},[84,100011,1391],{"class":94},[84,100013,1688],{"class":154},[84,100015,1604],{"class":94},[84,100017,162],{"class":154},[84,100019,100020],{"class":86,"line":106},[84,100021,100022],{"class":1378},"#vstack 垂直方向进行堆叠\n",[84,100024,100025],{"class":86,"line":112},[84,100026,100027],{"class":154},"np.vstack((aa,bb))\n",[84,100029,100030],{"class":86,"line":425},[84,100031,100032],{"class":1378},"#与hstack传的参数类似，等价于：\n",[84,100034,100035],{"class":86,"line":2395},[84,100036,100037],{"class":154},"np.vstack([aa,bb])\n",[19,100039,99379],{},[19,100041,100042],{},[2643,100043],{"alt":66,"src":100044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100046,99875],{},[60,100048,100050],{"className":121,"code":100049,"language":91,"meta":66,"style":66},"#两个三行六列\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",[39,100051,100052,100056,100084,100112,100117,100122],{"__ignoreMap":66},[84,100053,100054],{"class":86,"line":87},[84,100055,99434],{"class":1378},[84,100057,100058,100060,100062,100064,100066,100068,100070,100072,100074,100076,100078,100080,100082],{"class":86,"line":98},[84,100059,96667],{"class":154},[84,100061,867],{"class":129},[84,100063,94148],{"class":154},[84,100065,1529],{"class":94},[84,100067,1688],{"class":154},[84,100069,1635],{"class":94},[84,100071,94153],{"class":154},[84,100073,1397],{"class":94},[84,100075,1688],{"class":154},[84,100077,1391],{"class":94},[84,100079,1688],{"class":154},[84,100081,1654],{"class":94},[84,100083,162],{"class":154},[84,100085,100086,100088,100090,100092,100094,100096,100098,100100,100102,100104,100106,100108,100110],{"class":86,"line":106},[84,100087,99467],{"class":154},[84,100089,867],{"class":129},[84,100091,94148],{"class":154},[84,100093,1647],{"class":94},[84,100095,1688],{"class":154},[84,100097,99478],{"class":94},[84,100099,94153],{"class":154},[84,100101,1397],{"class":94},[84,100103,1688],{"class":154},[84,100105,1391],{"class":94},[84,100107,1688],{"class":154},[84,100109,1654],{"class":94},[84,100111,162],{"class":154},[84,100113,100114],{"class":86,"line":112},[84,100115,100116],{"class":1378},"#使用vstack\n",[84,100118,100119],{"class":86,"line":425},[84,100120,100121],{"class":154},"np.vstack((aaa,bbb)).shape\n",[84,100123,100124],{"class":86,"line":2395},[84,100125,100126],{"class":1378},"#输出：（4，3，6）\n",[14,100128,100130],{"id":100129},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100132,100133],{},"该方法是三维数组特有的方法",[19,100135,100136],{},"也就是说",[19,100138,100139],{},"一维数组拼接方法用：concatenate()",[19,100141,100142],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100144,100145],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100147,100148],{},"四维数组及多维数组只能用concatenate进行拼接",[60,100150,100152],{"className":121,"code":100151,"language":91,"meta":66,"style":66},"#两个三行六列\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",[39,100153,100154,100158,100186,100214,100219,100224],{"__ignoreMap":66},[84,100155,100156],{"class":86,"line":87},[84,100157,99434],{"class":1378},[84,100159,100160,100162,100164,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184],{"class":86,"line":98},[84,100161,96667],{"class":154},[84,100163,867],{"class":129},[84,100165,94148],{"class":154},[84,100167,1529],{"class":94},[84,100169,1688],{"class":154},[84,100171,1635],{"class":94},[84,100173,94153],{"class":154},[84,100175,1397],{"class":94},[84,100177,1688],{"class":154},[84,100179,1391],{"class":94},[84,100181,1688],{"class":154},[84,100183,1654],{"class":94},[84,100185,162],{"class":154},[84,100187,100188,100190,100192,100194,100196,100198,100200,100202,100204,100206,100208,100210,100212],{"class":86,"line":106},[84,100189,99467],{"class":154},[84,100191,867],{"class":129},[84,100193,94148],{"class":154},[84,100195,1647],{"class":94},[84,100197,1688],{"class":154},[84,100199,99478],{"class":94},[84,100201,94153],{"class":154},[84,100203,1397],{"class":94},[84,100205,1688],{"class":154},[84,100207,1391],{"class":94},[84,100209,1688],{"class":154},[84,100211,1654],{"class":94},[84,100213,162],{"class":154},[84,100215,100216],{"class":86,"line":112},[84,100217,100218],{"class":1378},"#使用dstack\n",[84,100220,100221],{"class":86,"line":425},[84,100222,100223],{"class":154},"np.dstack((aaa,bbb)).shape\n",[84,100225,100226],{"class":86,"line":2395},[84,100227,100228],{"class":1378},"#结果：（2，3，12）\n",[1222,100230,100231],{},"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":66,"searchDepth":98,"depth":98,"links":100233},[100234,100235,100236,100237],{"id":99173,"depth":98,"text":99174},{"id":99787,"depth":98,"text":99788},{"id":99958,"depth":98,"text":99959},{"id":100129,"depth":98,"text":100130},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99165,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100244,"title":100245,"body":100246,"description":1249,"extension":1250,"meta":100521,"navigation":1252,"path":100522,"seo":100523,"stem":100524,"__hash__":100525},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100247,"toc":100519},[100248,100251,100254,100348,100351,100354,100357,100360,100363,100366,100369,100372,100516],[10,100249,100245],{"id":100250},"_7数组转置",[19,100252,100253],{},"使用transpose()函数",[60,100255,100257],{"className":121,"code":100256,"language":91,"meta":66,"style":66},"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",[39,100258,100259,100269,100293,100298,100303,100308,100313,100321,100325,100329,100334,100339,100344],{"__ignoreMap":66},[84,100260,100261,100263,100265,100267],{"class":86,"line":87},[84,100262,31547],{"class":129},[84,100264,32534],{"class":154},[84,100266,1157],{"class":129},[84,100268,32539],{"class":154},[84,100270,100271,100273,100275,100277,100279,100281,100283,100285,100287,100289,100291],{"class":86,"line":98},[84,100272,208],{"class":154},[84,100274,867],{"class":129},[84,100276,32870],{"class":154},[84,100278,1529],{"class":94},[84,100280,1688],{"class":154},[84,100282,1832],{"class":94},[84,100284,94153],{"class":154},[84,100286,1604],{"class":94},[84,100288,1688],{"class":154},[84,100290,1391],{"class":94},[84,100292,162],{"class":154},[84,100294,100295],{"class":86,"line":106},[84,100296,100297],{"class":1378},"#二维数组转置\n",[84,100299,100300],{"class":86,"line":112},[84,100301,100302],{"class":1378},"#调用transpose()函数\n",[84,100304,100305],{"class":86,"line":425},[84,100306,100307],{"class":154},"a.transpose()\n",[84,100309,100310],{"class":86,"line":2395},[84,100311,100312],{"class":1378},"#对于二维数组也可以采用.T来实现\n",[84,100314,100315,100318],{"class":86,"line":2401},[84,100316,100317],{"class":154},"a.T",[84,100319,100320],{"class":1378},"#与上述代码一样\n",[84,100322,100323],{"class":86,"line":2492},[84,100324,94710],{"class":1378},[84,100326,100327],{"class":86,"line":2498},[84,100328,95074],{"class":158},[84,100330,100331],{"class":86,"line":2510},[84,100332,100333],{"class":158},"array([[ 1,  4,  7, 10],\n",[84,100335,100336],{"class":86,"line":2793},[84,100337,100338],{"class":158},"       [ 2,  5,  8, 11],\n",[84,100340,100341],{"class":86,"line":2798},[84,100342,100343],{"class":158},"       [ 3,  6,  9, 12]])\n",[84,100345,100346],{"class":86,"line":2804},[84,100347,95074],{"class":158},[19,100349,100350],{},"也可以使用np.transpose()的形式",[19,100352,100353],{},"#多维数组进行转置 np.transpose()",[19,100355,100356],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100358,100359],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100361,100362],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100364,100365],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100367,100368],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100370,100371],{},"四维及以上的数组也是一样的道理",[60,100373,100375],{"className":121,"code":100374,"language":91,"meta":66,"style":66},"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",[39,100376,100377,100405,100410,100415,100420,100438,100443,100475,100480,100485,100490,100511],{"__ignoreMap":66},[84,100378,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397,100399,100401,100403],{"class":86,"line":87},[84,100380,2128],{"class":154},[84,100382,867],{"class":129},[84,100384,94148],{"class":154},[84,100386,1529],{"class":94},[84,100388,1688],{"class":154},[84,100390,1635],{"class":94},[84,100392,94153],{"class":154},[84,100394,1391],{"class":94},[84,100396,1688],{"class":154},[84,100398,1654],{"class":94},[84,100400,1688],{"class":154},[84,100402,1397],{"class":94},[84,100404,162],{"class":154},[84,100406,100407],{"class":86,"line":98},[84,100408,100409],{"class":154},"x.shape\n",[84,100411,100412],{"class":86,"line":106},[84,100413,100414],{"class":1378},"#结果：（3,6,2）\n",[84,100416,100417],{"class":86,"line":112},[84,100418,100419],{"class":1378},"#使用np.transpose()进行转置 变为(2,6,3)\n",[84,100421,100422,100425,100427,100429,100431,100433,100435],{"class":86,"line":425},[84,100423,100424],{"class":154},"np.transpose(x,(",[84,100426,1397],{"class":94},[84,100428,1688],{"class":154},[84,100430,1529],{"class":94},[84,100432,1688],{"class":154},[84,100434,1504],{"class":94},[84,100436,100437],{"class":154},")).shape\n",[84,100439,100440],{"class":86,"line":2395},[84,100441,100442],{"class":1378},"#结果：(2,6,3)\n",[84,100444,100445,100447,100449,100451,100453,100455,100457,100459,100461,100463,100465,100467,100469,100471,100473],{"class":86,"line":2401},[84,100446,99652],{"class":154},[84,100448,867],{"class":129},[84,100450,94148],{"class":154},[84,100452,1529],{"class":94},[84,100454,1688],{"class":154},[84,100456,1635],{"class":94},[84,100458,94153],{"class":154},[84,100460,1391],{"class":94},[84,100462,1688],{"class":154},[84,100464,1397],{"class":94},[84,100466,1688],{"class":154},[84,100468,1529],{"class":94},[84,100470,1688],{"class":154},[84,100472,1654],{"class":94},[84,100474,162],{"class":154},[84,100476,100477],{"class":86,"line":2492},[84,100478,100479],{"class":154},"aaaa.shape\n",[84,100481,100482],{"class":86,"line":2498},[84,100483,100484],{"class":1378},"#结果：（3，2，1，6）\n",[84,100486,100487],{"class":86,"line":2510},[84,100488,100489],{"class":1378},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[84,100491,100492,100495,100497,100499,100501,100503,100505,100507,100509],{"class":86,"line":2793},[84,100493,100494],{"class":154},"np.transpose(aaaa,(",[84,100496,1529],{"class":94},[84,100498,1688],{"class":154},[84,100500,1397],{"class":94},[84,100502,1688],{"class":154},[84,100504,1504],{"class":94},[84,100506,1688],{"class":154},[84,100508,1391],{"class":94},[84,100510,100437],{"class":154},[84,100512,100513],{"class":86,"line":2798},[84,100514,100515],{"class":1378},"#结果：(2,1,3,6)\n",[1222,100517,100518],{},"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":66,"searchDepth":98,"depth":98,"links":100520},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100245,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100527,"title":100528,"body":100529,"description":1249,"extension":1250,"meta":101263,"navigation":1252,"path":101264,"seo":101265,"stem":101266,"__hash__":101267},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100530,"toc":101261},[100531,100534,100537,100540,100543,100546,100549,100552,100555,100664,100667,100670,101258],[10,100532,100528],{"id":100533},"_8数组分割",[19,100535,100536],{},"split分割",[19,100538,100539],{},"numpy.split(ary,indics_or_sections,axis)",[19,100541,100542],{},"解释：",[19,100544,100545],{},"ary:被分割的数组",[19,100547,100548],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100550,100551],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100553,100554],{},"①一维数组的分割",[60,100556,100558],{"className":121,"code":100557,"language":91,"meta":66,"style":66},"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",[39,100559,100560,100576,100581,100590,100594,100599,100607,100611,100616,100621,100634,100638,100643,100655,100659],{"__ignoreMap":66},[84,100561,100562,100564,100566,100568,100570,100572,100574],{"class":86,"line":87},[84,100563,208],{"class":154},[84,100565,867],{"class":129},[84,100567,94148],{"class":154},[84,100569,1529],{"class":94},[84,100571,1688],{"class":154},[84,100573,1730],{"class":94},[84,100575,162],{"class":154},[84,100577,100578],{"class":86,"line":98},[84,100579,100580],{"class":1378},"#如果传入整数，必须能够平分，否则会报错\n",[84,100582,100583,100586,100588],{"class":86,"line":106},[84,100584,100585],{"class":154},"np.split(a,",[84,100587,1397],{"class":94},[84,100589,162],{"class":154},[84,100591,100592],{"class":86,"line":112},[84,100593,94710],{"class":1378},[84,100595,100596],{"class":86,"line":425},[84,100597,100598],{"class":1378},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[84,100600,100601,100603,100605],{"class":86,"line":2395},[84,100602,100585],{"class":154},[84,100604,1604],{"class":94},[84,100606,162],{"class":154},[84,100608,100609],{"class":86,"line":2401},[84,100610,94710],{"class":1378},[84,100612,100613],{"class":86,"line":2492},[84,100614,100615],{"class":1378},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[84,100617,100618],{"class":86,"line":2498},[84,100619,100620],{"class":1378},"#传入数组\n",[84,100622,100623,100626,100628,100630,100632],{"class":86,"line":2510},[84,100624,100625],{"class":154},"np.split(a,[",[84,100627,1391],{"class":94},[84,100629,1688],{"class":154},[84,100631,1629],{"class":94},[84,100633,5834],{"class":154},[84,100635,100636],{"class":86,"line":2793},[84,100637,94710],{"class":1378},[84,100639,100640],{"class":86,"line":2798},[84,100641,100642],{"class":1378},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[84,100644,100645,100647,100649,100651,100653],{"class":86,"line":2804},[84,100646,100625],{"class":154},[84,100648,1629],{"class":94},[84,100650,1688],{"class":154},[84,100652,1679],{"class":94},[84,100654,5834],{"class":154},[84,100656,100657],{"class":86,"line":2809},[84,100658,94710],{"class":1378},[84,100660,100661],{"class":86,"line":2823},[84,100662,100663],{"class":1378},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100665,100666],{},"②二维数组的分割",[19,100668,100669],{},"使用split()",[60,100671,100673],{"className":121,"code":100672,"language":91,"meta":66,"style":66},"#二维数组分割\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",[39,100674,100675,100680,100704,100709,100718,100722,100726,100731,100736,100741,100746,100751,100756,100761,100765,100778,100782,100786,100790,100794,100798,100803,100808,100813,100817,100822,100838,100842,100846,100851,100856,100861,100866,100871,100876,100881,100886,100891,100896,100901,100906,100911,100916,100921,100926,100931,100936,100940,100944,100964,100968,100972,100977,100982,100987,100992,100997,101002,101007,101012,101017,101022,101027,101032,101037,101042,101047,101052,101057,101062,101066,101071,101080,101084,101088,101092,101096,101100,101104,101108,101112,101116,101125,101129,101133,101137,101141,101145,101149,101153,101157,101161,101165,101169,101173,101177,101181,101185,101189,101193,101197,101201,101205,101209,101222,101226,101230,101234,101238,101242,101246,101250,101254],{"__ignoreMap":66},[84,100676,100677],{"class":86,"line":87},[84,100678,100679],{"class":1378},"#二维数组分割\n",[84,100681,100682,100684,100686,100688,100690,100692,100694,100696,100698,100700,100702],{"class":86,"line":98},[84,100683,94452],{"class":154},[84,100685,867],{"class":129},[84,100687,94148],{"class":154},[84,100689,1529],{"class":94},[84,100691,1688],{"class":154},[84,100693,1635],{"class":94},[84,100695,94153],{"class":154},[84,100697,1654],{"class":94},[84,100699,1688],{"class":154},[84,100701,1654],{"class":94},[84,100703,162],{"class":154},[84,100705,100706],{"class":86,"line":106},[84,100707,100708],{"class":1378},"#默认axis=0  传入整数平均分,按行来的\n",[84,100710,100711,100714,100716],{"class":86,"line":112},[84,100712,100713],{"class":154},"np.split(aa,",[84,100715,1391],{"class":94},[84,100717,162],{"class":154},[84,100719,100720],{"class":86,"line":425},[84,100721,96910],{"class":1378},[84,100723,100724],{"class":86,"line":2395},[84,100725,95074],{"class":158},[84,100727,100728],{"class":86,"line":2401},[84,100729,100730],{"class":158},"[array([[ 1,  2,  3,  4,  5,  6],\n",[84,100732,100733],{"class":86,"line":2492},[84,100734,100735],{"class":158},"        [ 7,  8,  9, 10, 11, 12]]),\n",[84,100737,100738],{"class":86,"line":2498},[84,100739,100740],{"class":158}," array([[13, 14, 15, 16, 17, 18],\n",[84,100742,100743],{"class":86,"line":2510},[84,100744,100745],{"class":158},"        [19, 20, 21, 22, 23, 24]]),\n",[84,100747,100748],{"class":86,"line":2793},[84,100749,100750],{"class":158}," array([[25, 26, 27, 28, 29, 30],\n",[84,100752,100753],{"class":86,"line":2798},[84,100754,100755],{"class":158},"        [31, 32, 33, 34, 35, 36]])]\n",[84,100757,100758],{"class":86,"line":2804},[84,100759,100760],{"class":158}," '''\n",[84,100762,100763],{"class":86,"line":2809},[84,100764,100620],{"class":1378},[84,100766,100767,100770,100772,100774,100776],{"class":86,"line":2823},[84,100768,100769],{"class":154},"np.split(aa,[",[84,100771,1397],{"class":94},[84,100773,1688],{"class":154},[84,100775,1629],{"class":94},[84,100777,5834],{"class":154},[84,100779,100780],{"class":86,"line":2828},[84,100781,96910],{"class":1378},[84,100783,100784],{"class":86,"line":2834},[84,100785,95074],{"class":158},[84,100787,100788],{"class":86,"line":2855},[84,100789,100730],{"class":158},[84,100791,100792],{"class":86,"line":2860},[84,100793,100735],{"class":158},[84,100795,100796],{"class":86,"line":2874},[84,100797,100740],{"class":158},[84,100799,100800],{"class":86,"line":2879},[84,100801,100802],{"class":158},"        [19, 20, 21, 22, 23, 24],\n",[84,100804,100805],{"class":86,"line":2908},[84,100806,100807],{"class":158},"        [25, 26, 27, 28, 29, 30]]),\n",[84,100809,100810],{"class":86,"line":2913},[84,100811,100812],{"class":158}," array([[31, 32, 33, 34, 35, 36]])]\n",[84,100814,100815],{"class":86,"line":2930},[84,100816,95074],{"class":158},[84,100818,100819],{"class":86,"line":2935},[84,100820,100821],{"class":1378},"#axis=1 按照列来分\n",[84,100823,100824,100826,100828,100830,100832,100834,100836],{"class":86,"line":2940},[84,100825,100713],{"class":154},[84,100827,1391],{"class":94},[84,100829,1688],{"class":154},[84,100831,48664],{"class":928},[84,100833,867],{"class":129},[84,100835,1529],{"class":94},[84,100837,162],{"class":154},[84,100839,100840],{"class":86,"line":2945},[84,100841,96910],{"class":1378},[84,100843,100844],{"class":86,"line":2959},[84,100845,95074],{"class":158},[84,100847,100848],{"class":86,"line":2964},[84,100849,100850],{"class":158},"[array([[ 1,  2],\n",[84,100852,100853],{"class":86,"line":3755},[84,100854,100855],{"class":158},"        [ 7,  8],\n",[84,100857,100858],{"class":86,"line":3769},[84,100859,100860],{"class":158},"        [13, 14],\n",[84,100862,100863],{"class":86,"line":3777},[84,100864,100865],{"class":158},"        [19, 20],\n",[84,100867,100868],{"class":86,"line":3782},[84,100869,100870],{"class":158},"        [25, 26],\n",[84,100872,100873],{"class":86,"line":3788},[84,100874,100875],{"class":158},"        [31, 32]]),\n",[84,100877,100878],{"class":86,"line":3794},[84,100879,100880],{"class":158}," array([[ 3,  4],\n",[84,100882,100883],{"class":86,"line":3799},[84,100884,100885],{"class":158},"        [ 9, 10],\n",[84,100887,100888],{"class":86,"line":9120},[84,100889,100890],{"class":158},"        [15, 16],\n",[84,100892,100893],{"class":86,"line":9144},[84,100894,100895],{"class":158},"        [21, 22],\n",[84,100897,100898],{"class":86,"line":9149},[84,100899,100900],{"class":158},"        [27, 28],\n",[84,100902,100903],{"class":86,"line":9155},[84,100904,100905],{"class":158},"        [33, 34]]),\n",[84,100907,100908],{"class":86,"line":9182},[84,100909,100910],{"class":158}," array([[ 5,  6],\n",[84,100912,100913],{"class":86,"line":9187},[84,100914,100915],{"class":158},"        [11, 12],\n",[84,100917,100918],{"class":86,"line":9193},[84,100919,100920],{"class":158},"        [17, 18],\n",[84,100922,100923],{"class":86,"line":9205},[84,100924,100925],{"class":158},"        [23, 24],\n",[84,100927,100928],{"class":86,"line":9217},[84,100929,100930],{"class":158},"        [29, 30],\n",[84,100932,100933],{"class":86,"line":9229},[84,100934,100935],{"class":158},"        [35, 36]])]\n",[84,100937,100938],{"class":86,"line":10888},[84,100939,100760],{"class":158},[84,100941,100942],{"class":86,"line":10913},[84,100943,100620],{"class":1378},[84,100945,100946,100948,100950,100952,100954,100956,100958,100960,100962],{"class":86,"line":10936},[84,100947,100769],{"class":154},[84,100949,1529],{"class":94},[84,100951,1688],{"class":154},[84,100953,1397],{"class":94},[84,100955,42761],{"class":154},[84,100957,48664],{"class":928},[84,100959,867],{"class":129},[84,100961,1529],{"class":94},[84,100963,162],{"class":154},[84,100965,100966],{"class":86,"line":10960},[84,100967,94710],{"class":1378},[84,100969,100970],{"class":86,"line":10965},[84,100971,95074],{"class":158},[84,100973,100974],{"class":86,"line":10970},[84,100975,100976],{"class":158},"[array([[ 1],\n",[84,100978,100979],{"class":86,"line":10975},[84,100980,100981],{"class":158},"        [ 7],\n",[84,100983,100984],{"class":86,"line":10984},[84,100985,100986],{"class":158},"        [13],\n",[84,100988,100989],{"class":86,"line":10989},[84,100990,100991],{"class":158},"        [19],\n",[84,100993,100994],{"class":86,"line":10995},[84,100995,100996],{"class":158},"        [25],\n",[84,100998,100999],{"class":86,"line":11016},[84,101000,101001],{"class":158},"        [31]]),\n",[84,101003,101004],{"class":86,"line":11022},[84,101005,101006],{"class":158}," array([[ 2],\n",[84,101008,101009],{"class":86,"line":11036},[84,101010,101011],{"class":158},"        [ 8],\n",[84,101013,101014],{"class":86,"line":11042},[84,101015,101016],{"class":158},"        [14],\n",[84,101018,101019],{"class":86,"line":11069},[84,101020,101021],{"class":158},"        [20],\n",[84,101023,101024],{"class":86,"line":11078},[84,101025,101026],{"class":158},"        [26],\n",[84,101028,101029],{"class":86,"line":11084},[84,101030,101031],{"class":158},"        [32]]),\n",[84,101033,101034],{"class":86,"line":11092},[84,101035,101036],{"class":158}," array([[ 3,  4,  5,  6],\n",[84,101038,101039],{"class":86,"line":11097},[84,101040,101041],{"class":158},"        [ 9, 10, 11, 12],\n",[84,101043,101044],{"class":86,"line":17774},[84,101045,101046],{"class":158},"        [15, 16, 17, 18],\n",[84,101048,101049],{"class":86,"line":17780},[84,101050,101051],{"class":158},"        [21, 22, 23, 24],\n",[84,101053,101054],{"class":86,"line":17803},[84,101055,101056],{"class":158},"        [27, 28, 29, 30],\n",[84,101058,101059],{"class":86,"line":17809},[84,101060,101061],{"class":158},"        [33, 34, 35, 36]])]\n",[84,101063,101064],{"class":86,"line":17832},[84,101065,95074],{"class":158},[84,101067,101068],{"class":86,"line":17846},[84,101069,101070],{"class":1378},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[84,101072,101073,101076,101078],{"class":86,"line":17866},[84,101074,101075],{"class":154},"np.vsplit(aa,",[84,101077,1391],{"class":94},[84,101079,162],{"class":154},[84,101081,101082],{"class":86,"line":17872},[84,101083,94710],{"class":1378},[84,101085,101086],{"class":86,"line":17883},[84,101087,95074],{"class":158},[84,101089,101090],{"class":86,"line":17906},[84,101091,100730],{"class":158},[84,101093,101094],{"class":86,"line":17928},[84,101095,100735],{"class":158},[84,101097,101098],{"class":86,"line":17933},[84,101099,100740],{"class":158},[84,101101,101102],{"class":86,"line":17939},[84,101103,100745],{"class":158},[84,101105,101106],{"class":86,"line":17953},[84,101107,100750],{"class":158},[84,101109,101110],{"class":86,"line":17966},[84,101111,100755],{"class":158},[84,101113,101114],{"class":86,"line":17971},[84,101115,95074],{"class":158},[84,101117,101118,101121,101123],{"class":86,"line":17985},[84,101119,101120],{"class":154},"np.hsplit(aa,",[84,101122,1391],{"class":94},[84,101124,162],{"class":154},[84,101126,101127],{"class":86,"line":17990},[84,101128,94710],{"class":1378},[84,101130,101131],{"class":86,"line":17996},[84,101132,95074],{"class":158},[84,101134,101135],{"class":86,"line":18001},[84,101136,100850],{"class":158},[84,101138,101139],{"class":86,"line":18015},[84,101140,100855],{"class":158},[84,101142,101143],{"class":86,"line":18020},[84,101144,100860],{"class":158},[84,101146,101147],{"class":86,"line":18025},[84,101148,100865],{"class":158},[84,101150,101151],{"class":86,"line":18039},[84,101152,100870],{"class":158},[84,101154,101155],{"class":86,"line":18051},[84,101156,100875],{"class":158},[84,101158,101159],{"class":86,"line":18056},[84,101160,100880],{"class":158},[84,101162,101163],{"class":86,"line":18069},[84,101164,100885],{"class":158},[84,101166,101167],{"class":86,"line":18074},[84,101168,100890],{"class":158},[84,101170,101171],{"class":86,"line":18079},[84,101172,100895],{"class":158},[84,101174,101175],{"class":86,"line":18084},[84,101176,100900],{"class":158},[84,101178,101179],{"class":86,"line":18097},[84,101180,100905],{"class":158},[84,101182,101183],{"class":86,"line":18102},[84,101184,100910],{"class":158},[84,101186,101187],{"class":86,"line":33785},[84,101188,100915],{"class":158},[84,101190,101191],{"class":86,"line":33791},[84,101192,100920],{"class":158},[84,101194,101195],{"class":86,"line":33797},[84,101196,100925],{"class":158},[84,101198,101199],{"class":86,"line":33803},[84,101200,100930],{"class":158},[84,101202,101203],{"class":86,"line":33809},[84,101204,100935],{"class":158},[84,101206,101207],{"class":86,"line":33820},[84,101208,95074],{"class":158},[84,101210,101211,101214,101216,101218,101220],{"class":86,"line":33826},[84,101212,101213],{"class":154},"np.vsplit(aa,[",[84,101215,1397],{"class":94},[84,101217,1688],{"class":154},[84,101219,1629],{"class":94},[84,101221,5834],{"class":154},[84,101223,101224],{"class":86,"line":33846},[84,101225,94710],{"class":1378},[84,101227,101228],{"class":86,"line":33852},[84,101229,95074],{"class":158},[84,101231,101232],{"class":86,"line":33863},[84,101233,100730],{"class":158},[84,101235,101236],{"class":86,"line":33869},[84,101237,100735],{"class":158},[84,101239,101240],{"class":86,"line":33875},[84,101241,100740],{"class":158},[84,101243,101244],{"class":86,"line":33881},[84,101245,100802],{"class":158},[84,101247,101248],{"class":86,"line":33887},[84,101249,100807],{"class":158},[84,101251,101252],{"class":86,"line":33893},[84,101253,100812],{"class":158},[84,101255,101256],{"class":86,"line":33899},[84,101257,100760],{"class":158},[1222,101259,101260],{},"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":66,"searchDepth":98,"depth":98,"links":101262},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100528,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101269,"title":101270,"body":101271,"description":1249,"extension":1250,"meta":101765,"navigation":1252,"path":101766,"seo":101767,"stem":101768,"__hash__":101769},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101272,"toc":101756},[101273,101276,101279,101304,101308,101367,101419,101423,101425,101461,101515,101517,101555,101626,101630,101635,101639,101642,101675,101678,101682,101685,101688,101691,101694,101699,101703,101706,101709,101712,101715,101720,101724,101729,101732,101753],[10,101274,101270],{"id":101275},"_9数学函数",[19,101277,101278],{},"补充回顾：python的列表推导式",[60,101280,101282],{"className":121,"code":101281,"language":91,"meta":66,"style":66},"[1\u002Fi for i in a]\n",[39,101283,101284],{"__ignoreMap":66},[84,101285,101286,101288,101290,101292,101295,101297,101299,101301],{"class":86,"line":87},[84,101287,2198],{"class":154},[84,101289,1529],{"class":94},[84,101291,1893],{"class":129},[84,101293,101294],{"class":154},"i ",[84,101296,4203],{"class":129},[84,101298,10610],{"class":154},[84,101300,27206],{"class":129},[84,101302,101303],{"class":154}," a]\n",[14,101305,101307],{"id":101306},"_91-求倒数","9.1 求倒数",[60,101309,101311],{"className":121,"code":101310,"language":91,"meta":66,"style":66},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[39,101312,101313,101318,101346,101358],{"__ignoreMap":66},[84,101314,101315],{"class":86,"line":87},[84,101316,101317],{"class":1378},"#数组求倒数\n",[84,101319,101320,101322,101324,101326,101328,101330,101332,101334,101336,101338,101340,101342,101344],{"class":86,"line":98},[84,101321,208],{"class":154},[84,101323,867],{"class":129},[84,101325,2198],{"class":154},[84,101327,1529],{"class":94},[84,101329,1688],{"class":154},[84,101331,1397],{"class":94},[84,101333,1688],{"class":154},[84,101335,1391],{"class":94},[84,101337,1688],{"class":154},[84,101339,1604],{"class":94},[84,101341,1688],{"class":154},[84,101343,1629],{"class":94},[84,101345,34398],{"class":154},[84,101347,101348,101350,101352,101355],{"class":86,"line":106},[84,101349,1574],{"class":154},[84,101351,867],{"class":129},[84,101353,101354],{"class":154},"np.array(a)",[84,101356,101357],{"class":1378},"#将列表转换为数组\n",[84,101359,101360,101362,101364],{"class":86,"line":112},[84,101361,1529],{"class":94},[84,101363,1893],{"class":129},[84,101365,101366],{"class":154},"b\n",[60,101368,101370],{"className":121,"code":101369,"language":91,"meta":66,"style":66},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[39,101371,101372,101400,101409,101414],{"__ignoreMap":66},[84,101373,101374,101376,101378,101380,101382,101384,101386,101388,101390,101392,101394,101396,101398],{"class":86,"line":87},[84,101375,208],{"class":154},[84,101377,867],{"class":129},[84,101379,2198],{"class":154},[84,101381,1529],{"class":94},[84,101383,1688],{"class":154},[84,101385,1397],{"class":94},[84,101387,1688],{"class":154},[84,101389,1391],{"class":94},[84,101391,1688],{"class":154},[84,101393,1604],{"class":94},[84,101395,1688],{"class":154},[84,101397,1629],{"class":94},[84,101399,34398],{"class":154},[84,101401,101402,101404,101406],{"class":86,"line":98},[84,101403,1574],{"class":154},[84,101405,867],{"class":129},[84,101407,101408],{"class":154},"np.array(a)\n",[84,101410,101411],{"class":86,"line":106},[84,101412,101413],{"class":1378},"#调用numpy中的函数reciprocal()\n",[84,101415,101416],{"class":86,"line":112},[84,101417,101418],{"class":154},"np.reciprocal(b)\n",[14,101420,101422],{"id":101421},"_92-求平方","9.2 求平方",[19,101424,95676],{},[60,101426,101428],{"className":121,"code":101427,"language":91,"meta":66,"style":66},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[39,101429,101430,101435,101440,101456],{"__ignoreMap":66},[84,101431,101432],{"class":86,"line":87},[84,101433,101434],{"class":1378},"#square()，求平方\n",[84,101436,101437],{"class":86,"line":98},[84,101438,101439],{"class":1378},"#一维数组\n",[84,101441,101442,101444,101446,101448,101450,101452,101454],{"class":86,"line":106},[84,101443,208],{"class":154},[84,101445,867],{"class":129},[84,101447,94148],{"class":154},[84,101449,1529],{"class":94},[84,101451,1688],{"class":154},[84,101453,1756],{"class":94},[84,101455,162],{"class":154},[84,101457,101458],{"class":86,"line":112},[84,101459,101460],{"class":154},"np.square(a)\n",[60,101462,101464],{"className":121,"code":101463,"language":91,"meta":66,"style":66},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[39,101465,101466,101471,101476,101497],{"__ignoreMap":66},[84,101467,101468],{"class":86,"line":87},[84,101469,101470],{"class":1378},"#或者通过循环遍历的形式来计算\n",[84,101472,101473],{"class":86,"line":98},[84,101474,101475],{"class":1378},"#这是一个列表\n",[84,101477,101478,101481,101483,101485,101487,101489,101491,101494],{"class":86,"line":106},[84,101479,101480],{"class":154},"[i",[84,101482,1043],{"class":129},[84,101484,101294],{"class":154},[84,101486,4203],{"class":129},[84,101488,10610],{"class":154},[84,101490,27206],{"class":129},[84,101492,101493],{"class":154}," a]",[84,101495,101496],{"class":1378},"#这个求完之后在数列当中\n",[84,101498,101499,101502,101504,101506,101508,101510,101512],{"class":86,"line":112},[84,101500,101501],{"class":154},"np.array([i",[84,101503,1043],{"class":129},[84,101505,101294],{"class":154},[84,101507,4203],{"class":129},[84,101509,10610],{"class":154},[84,101511,27206],{"class":129},[84,101513,101514],{"class":154}," a])\n",[19,101516,94437],{},[60,101518,101520],{"className":121,"code":101519,"language":91,"meta":66,"style":66},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[39,101521,101522,101526,101550],{"__ignoreMap":66},[84,101523,101524],{"class":86,"line":87},[84,101525,94447],{"class":1378},[84,101527,101528,101530,101532,101534,101536,101538,101540,101542,101544,101546,101548],{"class":86,"line":98},[84,101529,94452],{"class":154},[84,101531,867],{"class":129},[84,101533,94148],{"class":154},[84,101535,1529],{"class":94},[84,101537,1688],{"class":154},[84,101539,1832],{"class":94},[84,101541,94153],{"class":154},[84,101543,1604],{"class":94},[84,101545,1688],{"class":154},[84,101547,1391],{"class":94},[84,101549,162],{"class":154},[84,101551,101552],{"class":86,"line":106},[84,101553,101554],{"class":154},"np.square(aa)\n",[60,101556,101558],{"className":121,"code":101557,"language":91,"meta":66,"style":66},"#传统的方式\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",[39,101559,101560,101565,101574,101590,101606,101621],{"__ignoreMap":66},[84,101561,101562],{"class":86,"line":87},[84,101563,101564],{"class":1378},"#传统的方式\n",[84,101566,101567,101569,101571],{"class":86,"line":98},[84,101568,99333],{"class":154},[84,101570,867],{"class":129},[84,101572,101573],{"class":154},"np.empty_like(aa)\n",[84,101575,101576,101578,101580,101582,101584,101586,101588],{"class":86,"line":106},[84,101577,4203],{"class":129},[84,101579,10610],{"class":154},[84,101581,27206],{"class":129},[84,101583,33596],{"class":94},[84,101585,155],{"class":154},[84,101587,1604],{"class":94},[84,101589,31940],{"class":154},[84,101591,101592,101594,101596,101598,101600,101602,101604],{"class":86,"line":112},[84,101593,4379],{"class":129},[84,101595,10672],{"class":154},[84,101597,27206],{"class":129},[84,101599,33596],{"class":94},[84,101601,155],{"class":154},[84,101603,1391],{"class":94},[84,101605,31940],{"class":154},[84,101607,101608,101611,101613,101616,101618],{"class":86,"line":425},[84,101609,101610],{"class":154},"        bb[i,j]",[84,101612,867],{"class":129},[84,101614,101615],{"class":154},"aa[i,j]",[84,101617,1043],{"class":129},[84,101619,101620],{"class":154},"aa[i,j]\n",[84,101622,101623],{"class":86,"line":2395},[84,101624,101625],{"class":154},"bb\n",[14,101627,101629],{"id":101628},"_93-求各元素的符号","9.3 求各元素的符号",[19,101631,101632],{},[2643,101633],{"alt":66,"src":101634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101636,101638],{"id":101637},"_94-modf函数","9.4 modf函数",[19,101640,101641],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[60,101643,101645],{"className":121,"code":101644,"language":91,"meta":66,"style":66},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[39,101646,101647,101670],{"__ignoreMap":66},[84,101648,101649,101651,101653,101655,101657,101659,101661,101663,101665,101668],{"class":86,"line":87},[84,101650,208],{"class":154},[84,101652,867],{"class":129},[84,101654,94148],{"class":154},[84,101656,1841],{"class":129},[84,101658,1756],{"class":94},[84,101660,1688],{"class":154},[84,101662,1756],{"class":94},[84,101664,1688],{"class":154},[84,101666,101667],{"class":94},"0.3",[84,101669,162],{"class":154},[84,101671,101672],{"class":86,"line":98},[84,101673,101674],{"class":154},"np.modf(a)\n",[19,101676,101677],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101679,101681],{"id":101680},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101683,101684],{},"np.cell()",[19,101686,101687],{},"np.floor()",[19,101689,101690],{},"np.rint()",[19,101692,101693],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101695,101696],{},[2643,101697],{"alt":66,"src":101698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101700,101702],{"id":101701},"_96-around函数","9.6 around()函数",[19,101704,101705],{},"around()函数也可以实现对数的小数位数进行操作",[19,101707,101708],{},"其中的参数：",[19,101710,101711],{},"1.要传的数组",[19,101713,101714],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101716,101717],{},[2643,101718],{"alt":66,"src":101719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101721,101723],{"id":101722},"_97-三角函数","9.7 三角函数",[19,101725,101726],{},[2643,101727],{"alt":66,"src":101728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101730,101731],{},"引入图像模块非常重要",[60,101733,101735],{"className":121,"code":101734,"language":91,"meta":66,"style":66},"from matplotlib import pyplot as plt\n",[39,101736,101737],{"__ignoreMap":66},[84,101738,101739,101741,101744,101746,101749,101751],{"class":86,"line":87},[84,101740,31891],{"class":129},[84,101742,101743],{"class":154}," matplotlib ",[84,101745,31547],{"class":129},[84,101747,101748],{"class":154}," pyplot ",[84,101750,1157],{"class":129},[84,101752,32590],{"class":154},[1222,101754,101755],{},"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":66,"searchDepth":98,"depth":98,"links":101757},[101758,101759,101760,101761,101762,101763,101764],{"id":101306,"depth":98,"text":101307},{"id":101421,"depth":98,"text":101422},{"id":101628,"depth":98,"text":101629},{"id":101637,"depth":98,"text":101638},{"id":101680,"depth":98,"text":101681},{"id":101701,"depth":98,"text":101702},{"id":101722,"depth":98,"text":101723},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101270,"description":1249},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101771,"title":489,"body":101772,"description":1249,"extension":1250,"meta":101776,"navigation":1252,"path":101777,"seo":101778,"stem":101779,"__hash__":101780},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md",{"type":7,"value":101773,"toc":101774},[],{"title":66,"searchDepth":98,"depth":98,"links":101775},[],{"category":51569},"\u002Fwiki\u002F2025-08-14-numpy",{"title":489,"description":1249},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101782,"title":101783,"body":101784,"description":66,"extension":1250,"meta":103785,"navigation":1252,"path":103786,"seo":103787,"stem":103788,"__hash__":103789},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101785,"toc":103761},[101786,101789,101793,101796,101799,101805,101808,101831,101834,101868,101871,101912,101916,101919,102011,102014,102052,102055,102072,102075,102089,102092,102095,102140,102143,102180,102184,102187,102193,102198,102218,102222,102225,102291,102294,102312,102316,102319,102348,102358,102364,102368,102371,102377,102388,102392,102395,102425,102428,102708,102711,102714,102725,102728,102731,102753,102760,102763,102781,102784,102787,102801,102809,102812,102838,102844,102847,102850,102860,102872,102892,102901,102921,102931,102955,102968,102982,102987,103028,103045,103070,103082,103102,103108,103153,103172,103189,103202,103218,103225,103237,103246,103281,103302,103327,103340,103364,103379,103404,103407,103428,103437,103440,103451,103455,103458,103464,103476,103483,103487,103490,103502,103505,103519,103522,103532,103542,103545,103585,103588,103592,103598,103601,103615,103619,103622,103655,103659,103662,103685,103693,103696,103702,103708,103711,103714,103742,103746,103749,103755,103758],[10,101787,101783],{"id":101788},"_1环境安装与第一个-mujoco-程序",[14,101790,101792],{"id":101791},"_1目标说明","1.目标说明",[19,101794,101795],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101797,101798],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[60,101800,101803],{"className":101801,"code":101802,"language":65,"meta":66},[63],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[39,101804,101802],{"__ignoreMap":66},[19,101806,101807],{},"需要掌握:",[26,101809,101810,101813,101816,101821,101826],{},[29,101811,101812],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,101814,101815],{},"Python 虚拟环境创建",[29,101817,101818],{},[39,101819,101820],{},"mujoco.MjModel",[29,101822,101823],{},[39,101824,101825],{},"mujoco.MjData",[29,101827,101828],{},[39,101829,101830],{},"mujoco.mj_step(model, data)",[19,101832,101833],{},"MuJoCo 中最重要的两个对象:",[458,101835,101836,101846],{},[461,101837,101838],{},[464,101839,101840,101843],{},[467,101841,101842],{"align":24906},"对象",[467,101844,101845],{"align":24906},"含义",[474,101847,101848,101858],{},[464,101849,101850,101855],{},[479,101851,101852],{"align":24906},[39,101853,101854],{},"MjModel",[479,101856,101857],{"align":24906},"模型结构，来自 XML，基本不随时间变化",[464,101859,101860,101865],{},[479,101861,101862],{"align":24906},[39,101863,101864],{},"MjData",[479,101866,101867],{"align":24906},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101869,101870],{},"可以先用一个类比理解：",[458,101872,101873,101883],{},[461,101874,101875],{},[464,101876,101877,101880],{},[467,101878,101879],{"align":24906},"类比",[467,101881,101882],{"align":24906},"MuJoCo 对象",[474,101884,101885,101894,101903],{},[464,101886,101887,101890],{},[479,101888,101889],{"align":24906},"游戏地图和角色配置",[479,101891,101892],{"align":24906},[39,101893,101854],{},[464,101895,101896,101899],{},[479,101897,101898],{"align":24906},"游戏运行到当前帧的状态",[479,101900,101901],{"align":24906},[39,101902,101864],{},[464,101904,101905,101908],{},[479,101906,101907],{"align":24906},"前进一帧",[479,101909,101910],{"align":24906},[39,101911,101830],{},[14,101913,101915],{"id":101914},"_2环境与依赖安装","2.环境与依赖安装",[19,101917,101918],{},"Fedora 44 系统依赖:",[60,101920,101922],{"className":78,"code":101921,"language":80,"meta":66,"style":66},"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",[39,101923,101924,101936,101948,101961,101971,101981,102000],{"__ignoreMap":66},[84,101925,101926,101928,101930,101932,101934],{"class":86,"line":87},[84,101927,311],{"class":90},[84,101929,361],{"class":158},[84,101931,275],{"class":158},[84,101933,27559],{"class":94},[84,101935,25842],{"class":94},[84,101937,101938,101941,101943,101946],{"class":86,"line":98},[84,101939,101940],{"class":158},"  python3",[84,101942,331],{"class":158},[84,101944,101945],{"class":158}," python3-virtualenv",[84,101947,25842],{"class":94},[84,101949,101950,101953,101956,101959],{"class":86,"line":106},[84,101951,101952],{"class":158},"  mesa-libGL",[84,101954,101955],{"class":158}," mesa-libGLU",[84,101957,101958],{"class":158}," mesa-dri-drivers",[84,101960,25842],{"class":94},[84,101962,101963,101966,101969],{"class":86,"line":112},[84,101964,101965],{"class":158},"  libglvnd-glx",[84,101967,101968],{"class":158}," libglvnd-opengl",[84,101970,25842],{"class":94},[84,101972,101973,101976,101979],{"class":86,"line":425},[84,101974,101975],{"class":158},"  glfw",[84,101977,101978],{"class":158}," glfw-devel",[84,101980,25842],{"class":94},[84,101982,101983,101986,101989,101992,101995,101998],{"class":86,"line":2395},[84,101984,101985],{"class":158},"  libX11",[84,101987,101988],{"class":158}," libXcursor",[84,101990,101991],{"class":158}," libXi",[84,101993,101994],{"class":158}," libXinerama",[84,101996,101997],{"class":158}," libXrandr",[84,101999,25842],{"class":94},[84,102001,102002,102005,102008],{"class":86,"line":2401},[84,102003,102004],{"class":158},"  gcc",[84,102006,102007],{"class":158}," gcc-c++",[84,102009,102010],{"class":158}," make\n",[19,102012,102013],{},"创建 Python 环境:",[60,102015,102017],{"className":78,"code":102016,"language":80,"meta":66,"style":66},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[39,102018,102019,102029,102035],{"__ignoreMap":66},[84,102020,102021,102023,102025,102027],{"class":86,"line":87},[84,102022,101],{"class":90},[84,102024,558],{"class":94},[84,102026,561],{"class":158},[84,102028,564],{"class":158},[84,102030,102031,102033],{"class":86,"line":98},[84,102032,589],{"class":94},[84,102034,592],{"class":158},[84,102036,102037,102039,102041,102044,102046,102049],{"class":86,"line":106},[84,102038,91],{"class":90},[84,102040,558],{"class":94},[84,102042,102043],{"class":158}," pip",[84,102045,275],{"class":158},[84,102047,102048],{"class":94}," --upgrade",[84,102050,102051],{"class":158}," pip\n",[19,102053,102054],{},"pip 安装:",[60,102056,102058],{"className":78,"code":102057,"language":80,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy\n",[39,102059,102060],{"__ignoreMap":66},[84,102061,102062,102064,102066,102069],{"class":86,"line":87},[84,102063,246],{"class":90},[84,102065,275],{"class":158},[84,102067,102068],{"class":158}," \"mujoco>=2.3\"",[84,102070,102071],{"class":158}," numpy\n",[19,102073,102074],{},"安装完成后，先做最小检查：",[60,102076,102078],{"className":78,"code":102077,"language":80,"meta":66,"style":66},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[39,102079,102080],{"__ignoreMap":66},[84,102081,102082,102084,102086],{"class":86,"line":87},[84,102083,91],{"class":90},[84,102085,31515],{"class":94},[84,102087,102088],{"class":158}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102090,102091],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102093,102094],{},"conda 安装:",[60,102096,102098],{"className":78,"code":102097,"language":80,"meta":66,"style":66},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[39,102099,102100,102120,102130],{"__ignoreMap":66},[84,102101,102102,102104,102106,102108,102111,102114,102117],{"class":86,"line":87},[84,102103,31487],{"class":90},[84,102105,30333],{"class":158},[84,102107,26279],{"class":94},[84,102109,102110],{"class":158}," mujoco-study",[84,102112,102113],{"class":158}," python=",[84,102115,102116],{"class":94},"3.10",[84,102118,102119],{"class":94}," -y\n",[84,102121,102122,102124,102127],{"class":86,"line":98},[84,102123,31487],{"class":90},[84,102125,102126],{"class":158}," activate",[84,102128,102129],{"class":158}," mujoco-study\n",[84,102131,102132,102134,102136,102138],{"class":86,"line":106},[84,102133,246],{"class":90},[84,102135,275],{"class":158},[84,102137,102068],{"class":158},[84,102139,102071],{"class":158},[19,102141,102142],{},"版本冲突说明:",[26,102144,102145,102151,102161,102170],{},[29,102146,102147,102148,55],{},"不要安装 ",[39,102149,102150],{},"mujoco-py",[29,102152,102153,102154,102156,102157,102160],{},"如果旧项目里同时安装了 ",[39,102155,102150],{}," 和 ",[39,102158,102159],{},"mujoco","，建议新建干净虚拟环境。",[29,102162,102163,102166,102167,55],{},[39,102164,102165],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[39,102168,102169],{},"~\u002F.mujoco\u002Fmujoco210",[29,102171,102172,102173,83685,102176,102179],{},"离屏渲染可能涉及 OpenGL 后端，",[39,102174,102175],{},"MUJOCO_GL=egl",[39,102177,102178],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102181,102183],{"id":102182},"_3核心概念解释","3.核心概念解释",[19,102185,102186],{},"MuJoCo 的基本执行流程:",[60,102188,102191],{"className":102189,"code":102190,"language":65,"meta":66},[63],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[39,102192,102190],{"__ignoreMap":66},[19,102194,102195,102197],{},[39,102196,101854],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102199,102200,102202,102203,42,102206,42,102209,42,102212,42,102215,55],{},[39,102201,101864],{}," 存放仿真运行时状态，例如 ",[39,102204,102205],{},"data.time",[39,102207,102208],{},"data.qpos",[39,102210,102211],{},"data.qvel",[39,102213,102214],{},"data.ctrl",[39,102216,102217],{},"data.xpos",[198,102219,102221],{"id":102220},"xml-是什么","XML 是什么",[19,102223,102224],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[60,102226,102228],{"className":54216,"code":102227,"language":54218,"meta":66,"style":66},"\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",[39,102229,102230,102252,102283],{"__ignoreMap":66},[84,102231,102232,102234,102236,102238,102240,102242,102245,102247,102250],{"class":86,"line":87},[84,102233,2218],{"class":154},[84,102235,52949],{"class":52449},[84,102237,16090],{"class":90},[84,102239,867],{"class":154},[84,102241,54640],{"class":158},[84,102243,102244],{"class":90}," pos",[84,102246,867],{"class":154},[84,102248,102249],{"class":158},"\"0 0 1\"",[84,102251,52456],{"class":154},[84,102253,102254,102256,102259,102261,102263,102266,102268,102270,102272,102275,102277,102280],{"class":86,"line":98},[84,102255,53293],{"class":154},[84,102257,102258],{"class":52449},"geom",[84,102260,16090],{"class":90},[84,102262,867],{"class":154},[84,102264,102265],{"class":158},"\"box_geom\"",[84,102267,54973],{"class":90},[84,102269,867],{"class":154},[84,102271,54640],{"class":158},[84,102273,102274],{"class":90}," size",[84,102276,867],{"class":154},[84,102278,102279],{"class":158},"\"0.1 0.1 0.1\"",[84,102281,102282],{"class":154},"\u002F>\n",[84,102284,102285,102287,102289],{"class":86,"line":106},[84,102286,52934],{"class":154},[84,102288,52949],{"class":52449},[84,102290,52456],{"class":154},[19,102292,102293],{},"这段意思是：",[26,102295,102296,102302,102309],{},[29,102297,102298,102299,102301],{},"创建一个叫 ",[39,102300,54863],{}," 的刚体。",[29,102303,102304,102305,102308],{},"它初始放在 ",[39,102306,102307],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,102310,102311],{},"它里面有一个盒子形状的几何体。",[198,102313,102315],{"id":102314},"timestep-是什么","timestep 是什么",[19,102317,102318],{},"XML 里的：",[60,102320,102322],{"className":54216,"code":102321,"language":54218,"meta":66,"style":66},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[39,102323,102324],{"__ignoreMap":66},[84,102325,102326,102328,102330,102333,102335,102338,102341,102343,102346],{"class":86,"line":87},[84,102327,2218],{"class":154},[84,102329,70312],{"class":52449},[84,102331,102332],{"class":90}," timestep",[84,102334,867],{"class":154},[84,102336,102337],{"class":158},"\"0.01\"",[84,102339,102340],{"class":90}," gravity",[84,102342,867],{"class":154},[84,102344,102345],{"class":158},"\"0 0 -9.81\"",[84,102347,102282],{"class":154},[19,102349,102350,102351,102354,102355,102357],{},"表示每调用一次 ",[39,102352,102353],{},"mj_step","，仿真时间前进 ",[39,102356,40138],{}," 秒。循环 100 次，大约就是 1 秒：",[60,102359,102362],{"className":102360,"code":102361,"language":65,"meta":66},[63],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[39,102363,102361],{"__ignoreMap":66},[198,102365,102367],{"id":102366},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102369,102370],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[60,102372,102375],{"className":102373,"code":102374,"language":65,"meta":66},[63],"x y z qw qx qy qz\n",[39,102376,102374],{"__ignoreMap":66},[19,102378,102379,102380,102383,102384,102387],{},"表示一个自由刚体的位置和姿态。其中 ",[39,102381,102382],{},"x y z"," 是位置，",[39,102385,102386],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102389,102391],{"id":102390},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102393,102394],{},"新建文件:",[60,102396,102398],{"className":78,"code":102397,"language":80,"meta":66,"style":66},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[39,102399,102400,102410,102417],{"__ignoreMap":66},[84,102401,102402,102405,102407],{"class":86,"line":87},[84,102403,102404],{"class":90},"mkdir",[84,102406,30373],{"class":94},[84,102408,102409],{"class":158}," mujoco_tutorial\n",[84,102411,102412,102415],{"class":86,"line":98},[84,102413,102414],{"class":94},"cd",[84,102416,102409],{"class":158},[84,102418,102419,102422],{"class":86,"line":106},[84,102420,102421],{"class":90},"touch",[84,102423,102424],{"class":158}," ch1_first_sim.py\n",[19,102426,102427],{},"写入:",[60,102429,102431],{"className":121,"code":102430,"language":91,"meta":66,"style":66},"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",[39,102432,102433,102440,102444,102448,102458,102463,102468,102472,102477,102482,102486,102491,102496,102501,102506,102511,102516,102520,102524,102528,102541,102555,102565,102569,102581,102593,102605,102617,102629,102633,102650,102655,102659,102670,102681,102685,102689,102703],{"__ignoreMap":66},[84,102434,102435,102437],{"class":86,"line":87},[84,102436,31547],{"class":129},[84,102438,102439],{"class":154}," mujoco\n",[84,102441,102442],{"class":86,"line":98},[84,102443,3578],{"emptyLinePlaceholder":1252},[84,102445,102446],{"class":86,"line":106},[84,102447,3578],{"emptyLinePlaceholder":1252},[84,102449,102450,102453,102455],{"class":86,"line":112},[84,102451,102452],{"class":94},"XML",[84,102454,14735],{"class":129},[84,102456,102457],{"class":158}," \"\"\"\n",[84,102459,102460],{"class":86,"line":425},[84,102461,102462],{"class":158},"\u003Cmujoco model=\"first_sim\">\n",[84,102464,102465],{"class":86,"line":2395},[84,102466,102467],{"class":158},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[84,102469,102470],{"class":86,"line":2401},[84,102471,3578],{"emptyLinePlaceholder":1252},[84,102473,102474],{"class":86,"line":2492},[84,102475,102476],{"class":158},"  \u003Cworldbody>\n",[84,102478,102479],{"class":86,"line":2498},[84,102480,102481],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,102483,102484],{"class":86,"line":2510},[84,102485,3578],{"emptyLinePlaceholder":1252},[84,102487,102488],{"class":86,"line":2793},[84,102489,102490],{"class":158},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[84,102492,102493],{"class":86,"line":2798},[84,102494,102495],{"class":158},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[84,102497,102498],{"class":86,"line":2804},[84,102499,102500],{"class":158},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,102502,102503],{"class":86,"line":2809},[84,102504,102505],{"class":158},"    \u003C\u002Fbody>\n",[84,102507,102508],{"class":86,"line":2823},[84,102509,102510],{"class":158},"  \u003C\u002Fworldbody>\n",[84,102512,102513],{"class":86,"line":2828},[84,102514,102515],{"class":158},"\u003C\u002Fmujoco>\n",[84,102517,102518],{"class":86,"line":2834},[84,102519,96844],{"class":158},[84,102521,102522],{"class":86,"line":2855},[84,102523,3578],{"emptyLinePlaceholder":1252},[84,102525,102526],{"class":86,"line":2860},[84,102527,3578],{"emptyLinePlaceholder":1252},[84,102529,102530,102532,102534,102537,102539],{"class":86,"line":2874},[84,102531,33100],{"class":129},[84,102533,3153],{"class":90},[84,102535,102536],{"class":154},"() -> ",[84,102538,96832],{"class":94},[84,102540,4917],{"class":154},[84,102542,102543,102546,102548,102551,102553],{"class":86,"line":2879},[84,102544,102545],{"class":154},"    model ",[84,102547,867],{"class":129},[84,102549,102550],{"class":154}," mujoco.MjModel.from_xml_string(",[84,102552,102452],{"class":94},[84,102554,162],{"class":154},[84,102556,102557,102560,102562],{"class":86,"line":2908},[84,102558,102559],{"class":154},"    data ",[84,102561,867],{"class":129},[84,102563,102564],{"class":154}," mujoco.MjData(model)\n",[84,102566,102567],{"class":86,"line":2913},[84,102568,3578],{"emptyLinePlaceholder":1252},[84,102570,102571,102573,102575,102578],{"class":86,"line":2930},[84,102572,32453],{"class":94},[84,102574,155],{"class":154},[84,102576,102577],{"class":158},"\"nq:\"",[84,102579,102580],{"class":154},", model.nq)\n",[84,102582,102583,102585,102587,102590],{"class":86,"line":2935},[84,102584,32453],{"class":94},[84,102586,155],{"class":154},[84,102588,102589],{"class":158},"\"nv:\"",[84,102591,102592],{"class":154},", model.nv)\n",[84,102594,102595,102597,102599,102602],{"class":86,"line":2940},[84,102596,32453],{"class":94},[84,102598,155],{"class":154},[84,102600,102601],{"class":158},"\"nu:\"",[84,102603,102604],{"class":154},", model.nu)\n",[84,102606,102607,102609,102611,102614],{"class":86,"line":2945},[84,102608,32453],{"class":94},[84,102610,155],{"class":154},[84,102612,102613],{"class":158},"\"initial time:\"",[84,102615,102616],{"class":154},", data.time)\n",[84,102618,102619,102621,102623,102626],{"class":86,"line":2959},[84,102620,32453],{"class":94},[84,102622,155],{"class":154},[84,102624,102625],{"class":158},"\"initial qpos:\"",[84,102627,102628],{"class":154},", data.qpos.copy())\n",[84,102630,102631],{"class":86,"line":2964},[84,102632,3578],{"emptyLinePlaceholder":1252},[84,102634,102635,102637,102640,102642,102644,102646,102648],{"class":86,"line":3755},[84,102636,4379],{"class":129},[84,102638,102639],{"class":154}," _ ",[84,102641,27206],{"class":129},[84,102643,33596],{"class":94},[84,102645,155],{"class":154},[84,102647,821],{"class":94},[84,102649,31940],{"class":154},[84,102651,102652],{"class":86,"line":3769},[84,102653,102654],{"class":154},"        mujoco.mj_step(model, data)\n",[84,102656,102657],{"class":86,"line":3777},[84,102658,3578],{"emptyLinePlaceholder":1252},[84,102660,102661,102663,102665,102668],{"class":86,"line":3782},[84,102662,32453],{"class":94},[84,102664,155],{"class":154},[84,102666,102667],{"class":158},"\"final time:\"",[84,102669,102616],{"class":154},[84,102671,102672,102674,102676,102679],{"class":86,"line":3788},[84,102673,32453],{"class":94},[84,102675,155],{"class":154},[84,102677,102678],{"class":158},"\"final qpos:\"",[84,102680,102628],{"class":154},[84,102682,102683],{"class":86,"line":3794},[84,102684,3578],{"emptyLinePlaceholder":1252},[84,102686,102687],{"class":86,"line":3799},[84,102688,3578],{"emptyLinePlaceholder":1252},[84,102690,102691,102693,102695,102698,102701],{"class":86,"line":9120},[84,102692,2712],{"class":129},[84,102694,32374],{"class":94},[84,102696,102697],{"class":129}," ==",[84,102699,102700],{"class":158}," \"__main__\"",[84,102702,4917],{"class":154},[84,102704,102705],{"class":86,"line":9144},[84,102706,102707],{"class":154},"    main()\n",[198,102709,102710],{"id":102710},"代码逐段解释",[19,102712,102713],{},"导入库：",[60,102715,102717],{"className":121,"code":102716,"language":91,"meta":66,"style":66},"import mujoco\n",[39,102718,102719],{"__ignoreMap":66},[84,102720,102721,102723],{"class":86,"line":87},[84,102722,31547],{"class":129},[84,102724,102439],{"class":154},[19,102726,102727],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102729,102730],{},"定义 XML：",[60,102732,102734],{"className":121,"code":102733,"language":91,"meta":66,"style":66},"XML = \"\"\"\n...\n\"\"\"\n",[39,102735,102736,102744,102749],{"__ignoreMap":66},[84,102737,102738,102740,102742],{"class":86,"line":87},[84,102739,102452],{"class":94},[84,102741,14735],{"class":129},[84,102743,102457],{"class":158},[84,102745,102746],{"class":86,"line":98},[84,102747,102748],{"class":158},"...\n",[84,102750,102751],{"class":86,"line":106},[84,102752,96844],{"class":158},[19,102754,102755,102756,102759],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[39,102757,102758],{},"freejoint"," 的方块。",[19,102761,102762],{},"编译模型：",[60,102764,102766],{"className":121,"code":102765,"language":91,"meta":66,"style":66},"model = mujoco.MjModel.from_xml_string(XML)\n",[39,102767,102768],{"__ignoreMap":66},[84,102769,102770,102773,102775,102777,102779],{"class":86,"line":87},[84,102771,102772],{"class":154},"model ",[84,102774,867],{"class":129},[84,102776,102550],{"class":154},[84,102778,102452],{"class":94},[84,102780,162],{"class":154},[19,102782,102783],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102785,102786],{},"创建数据：",[60,102788,102790],{"className":121,"code":102789,"language":91,"meta":66,"style":66},"data = mujoco.MjData(model)\n",[39,102791,102792],{"__ignoreMap":66},[84,102793,102794,102797,102799],{"class":86,"line":87},[84,102795,102796],{"class":154},"data ",[84,102798,867],{"class":129},[84,102800,102564],{"class":154},[19,102802,102803,102805,102806,102808],{},[39,102804,34553],{}," 会保存仿真当前状态。刚创建时，时间是 ",[39,102807,1504],{},"，方块还在初始位置。",[19,102810,102811],{},"推进仿真：",[60,102813,102815],{"className":121,"code":102814,"language":91,"meta":66,"style":66},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[39,102816,102817,102833],{"__ignoreMap":66},[84,102818,102819,102821,102823,102825,102827,102829,102831],{"class":86,"line":87},[84,102820,4203],{"class":129},[84,102822,102639],{"class":154},[84,102824,27206],{"class":129},[84,102826,33596],{"class":94},[84,102828,155],{"class":154},[84,102830,821],{"class":94},[84,102832,31940],{"class":154},[84,102834,102835],{"class":86,"line":98},[84,102836,102837],{"class":154},"    mujoco.mj_step(model, data)\n",[19,102839,102840,102841,102843],{},"每次 ",[39,102842,102353],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[198,102845,102846],{"id":102846},"代码逐行细讲",[19,102848,102849],{},"下面把完整代码按新手视角拆开讲。",[60,102851,102852],{"className":121,"code":102716,"language":91,"meta":66,"style":66},[39,102853,102854],{"__ignoreMap":66},[84,102855,102856,102858],{"class":86,"line":87},[84,102857,31547],{"class":129},[84,102859,102439],{"class":154},[19,102861,102862,102864,102865,42,102867,42,102869,55],{},[39,102863,31547],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[39,102866,101820],{},[39,102868,101825],{},[39,102870,102871],{},"mujoco.mj_step",[60,102873,102874],{"className":121,"code":102733,"language":91,"meta":66,"style":66},[39,102875,102876,102884,102888],{"__ignoreMap":66},[84,102877,102878,102880,102882],{"class":86,"line":87},[84,102879,102452],{"class":94},[84,102881,14735],{"class":129},[84,102883,102457],{"class":158},[84,102885,102886],{"class":86,"line":98},[84,102887,102748],{"class":158},[84,102889,102890],{"class":86,"line":106},[84,102891,96844],{"class":158},[19,102893,102894,102896,102897,102900],{},[39,102895,102452],{}," 是一个变量名。右边的三引号 ",[39,102898,102899],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[60,102902,102903],{"className":54216,"code":102462,"language":54218,"meta":66,"style":66},[39,102904,102905],{"__ignoreMap":66},[84,102906,102907,102909,102911,102914,102916,102919],{"class":86,"line":87},[84,102908,2218],{"class":154},[84,102910,102159],{"class":52449},[84,102912,102913],{"class":90}," model",[84,102915,867],{"class":154},[84,102917,102918],{"class":158},"\"first_sim\"",[84,102920,52456],{"class":154},[19,102922,102923,102924,102927,102928,55],{},"这是 XML 的根标签。",[39,102925,102926],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[39,102929,102930],{},"first_sim",[60,102932,102933],{"className":54216,"code":102321,"language":54218,"meta":66,"style":66},[39,102934,102935],{"__ignoreMap":66},[84,102936,102937,102939,102941,102943,102945,102947,102949,102951,102953],{"class":86,"line":87},[84,102938,2218],{"class":154},[84,102940,70312],{"class":52449},[84,102942,102332],{"class":90},[84,102944,867],{"class":154},[84,102946,102337],{"class":158},[84,102948,102340],{"class":90},[84,102950,867],{"class":154},[84,102952,102345],{"class":158},[84,102954,102282],{"class":154},[19,102956,102957,102959,102960,102963,102964,102967],{},[39,102958,70312],{}," 用来设置仿真参数。",[39,102961,102962],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[39,102965,102966],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[60,102969,102971],{"className":54216,"code":102970,"language":54218,"meta":66,"style":66},"\u003Cworldbody>\n",[39,102972,102973],{"__ignoreMap":66},[84,102974,102975,102977,102980],{"class":86,"line":87},[84,102976,2218],{"class":154},[84,102978,102979],{"class":52449},"worldbody",[84,102981,52456],{"class":154},[19,102983,102984,102986],{},[39,102985,102979],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[60,102988,102990],{"className":54216,"code":102989,"language":54218,"meta":66,"style":66},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,102991,102992],{"__ignoreMap":66},[84,102993,102994,102996,102998,103000,103002,103005,103007,103009,103012,103014,103016,103019,103021,103023,103026],{"class":86,"line":87},[84,102995,2218],{"class":154},[84,102997,102258],{"class":52449},[84,102999,16090],{"class":90},[84,103001,867],{"class":154},[84,103003,103004],{"class":158},"\"floor\"",[84,103006,54973],{"class":90},[84,103008,867],{"class":154},[84,103010,103011],{"class":158},"\"plane\"",[84,103013,102274],{"class":90},[84,103015,867],{"class":154},[84,103017,103018],{"class":158},"\"2 2 0.1\"",[84,103020,79913],{"class":90},[84,103022,867],{"class":154},[84,103024,103025],{"class":158},"\"0.8 0.8 0.8 1\"",[84,103027,102282],{"class":154},[19,103029,103030,103031,103033,103034,103037,103038,103041,103042,103044],{},"这行创建地面。",[39,103032,102258],{}," 是几何体。",[39,103035,103036],{},"name=\"floor\""," 是名字。",[39,103039,103040],{},"type=\"plane\""," 表示平面。",[39,103043,56257],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[60,103046,103048],{"className":54216,"code":103047,"language":54218,"meta":66,"style":66},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[39,103049,103050],{"__ignoreMap":66},[84,103051,103052,103054,103056,103058,103060,103062,103064,103066,103068],{"class":86,"line":87},[84,103053,2218],{"class":154},[84,103055,52949],{"class":52449},[84,103057,16090],{"class":90},[84,103059,867],{"class":154},[84,103061,54640],{"class":158},[84,103063,102244],{"class":90},[84,103065,867],{"class":154},[84,103067,102249],{"class":158},[84,103069,52456],{"class":154},[19,103071,103072,103073,55,103075,103078,103079,103081],{},"这行创建一个刚体，名字叫 ",[39,103074,54863],{},[39,103076,103077],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[39,103080,102307],{},"，也就是离地面 1 米高。",[60,103083,103085],{"className":54216,"code":103084,"language":54218,"meta":66,"style":66},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[39,103086,103087],{"__ignoreMap":66},[84,103088,103089,103091,103093,103095,103097,103100],{"class":86,"line":87},[84,103090,2218],{"class":154},[84,103092,102758],{"class":52449},[84,103094,16090],{"class":90},[84,103096,867],{"class":154},[84,103098,103099],{"class":158},"\"box_free\"",[84,103101,102282],{"class":154},[19,103103,103104,103105,103107],{},"这行很重要。",[39,103106,102758],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[60,103109,103111],{"className":54216,"code":103110,"language":54218,"meta":66,"style":66},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,103112,103113],{"__ignoreMap":66},[84,103114,103115,103117,103119,103121,103123,103125,103127,103129,103131,103133,103135,103137,103140,103142,103144,103146,103148,103151],{"class":86,"line":87},[84,103116,2218],{"class":154},[84,103118,102258],{"class":52449},[84,103120,16090],{"class":90},[84,103122,867],{"class":154},[84,103124,102265],{"class":158},[84,103126,54973],{"class":90},[84,103128,867],{"class":154},[84,103130,54640],{"class":158},[84,103132,102274],{"class":90},[84,103134,867],{"class":154},[84,103136,102279],{"class":158},[84,103138,103139],{"class":90}," mass",[84,103141,867],{"class":154},[84,103143,4856],{"class":158},[84,103145,79913],{"class":90},[84,103147,867],{"class":154},[84,103149,103150],{"class":158},"\"1 0 0 1\"",[84,103152,102282],{"class":154},[19,103154,103155,103156,103159,103160,103163,103164,103167,103168,103171],{},"这行给 box body 添加一个盒子形状。",[39,103157,103158],{},"type=\"box\""," 表示形状是盒子。",[39,103161,103162],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[39,103165,103166],{},"mass=\"1\""," 表示质量是 1。",[39,103169,103170],{},"rgba=\"1 0 0 1\""," 表示红色。",[60,103173,103175],{"className":121,"code":103174,"language":91,"meta":66,"style":66},"def main() -> None:\n",[39,103176,103177],{"__ignoreMap":66},[84,103178,103179,103181,103183,103185,103187],{"class":86,"line":87},[84,103180,33100],{"class":129},[84,103182,3153],{"class":90},[84,103184,102536],{"class":154},[84,103186,96832],{"class":94},[84,103188,4917],{"class":154},[19,103190,103191,103193,103194,103197,103198,103201],{},[39,103192,33100],{}," 用来定义函数。这里定义了一个叫 ",[39,103195,103196],{},"main"," 的函数。",[39,103199,103200],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[60,103203,103204],{"className":121,"code":102765,"language":91,"meta":66,"style":66},[39,103205,103206],{"__ignoreMap":66},[84,103207,103208,103210,103212,103214,103216],{"class":86,"line":87},[84,103209,102772],{"class":154},[84,103211,867],{"class":129},[84,103213,102550],{"class":154},[84,103215,102452],{"class":94},[84,103217,162],{"class":154},[19,103219,103220,103221,103224],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[39,103222,103223],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[60,103226,103227],{"className":121,"code":102789,"language":91,"meta":66,"style":66},[39,103228,103229],{"__ignoreMap":66},[84,103230,103231,103233,103235],{"class":86,"line":87},[84,103232,102796],{"class":154},[84,103234,867],{"class":129},[84,103236,102564],{"class":154},[19,103238,103239,103240,103242,103243,103245],{},"这行创建仿真数据。",[39,103241,34553],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[39,103244,34553],{}," 都会变化。",[60,103247,103249],{"className":121,"code":103248,"language":91,"meta":66,"style":66},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[39,103250,103251,103261,103271],{"__ignoreMap":66},[84,103252,103253,103255,103257,103259],{"class":86,"line":87},[84,103254,730],{"class":94},[84,103256,155],{"class":154},[84,103258,102577],{"class":158},[84,103260,102580],{"class":154},[84,103262,103263,103265,103267,103269],{"class":86,"line":98},[84,103264,730],{"class":94},[84,103266,155],{"class":154},[84,103268,102589],{"class":158},[84,103270,102592],{"class":154},[84,103272,103273,103275,103277,103279],{"class":86,"line":106},[84,103274,730],{"class":94},[84,103276,155],{"class":154},[84,103278,102601],{"class":158},[84,103280,102604],{"class":154},[19,103282,103283,103285,103286,103289,103290,103293,103294,103297,103298,103301],{},[39,103284,730],{}," 用来输出信息。",[39,103287,103288],{},"model.nq"," 是位置变量数量，",[39,103291,103292],{},"model.nv"," 是速度变量数量，",[39,103295,103296],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[39,103299,103300],{},"nu"," 是 0。",[60,103303,103305],{"className":121,"code":103304,"language":91,"meta":66,"style":66},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[39,103306,103307,103317],{"__ignoreMap":66},[84,103308,103309,103311,103313,103315],{"class":86,"line":87},[84,103310,730],{"class":94},[84,103312,155],{"class":154},[84,103314,102613],{"class":158},[84,103316,102616],{"class":154},[84,103318,103319,103321,103323,103325],{"class":86,"line":98},[84,103320,730],{"class":94},[84,103322,155],{"class":154},[84,103324,102625],{"class":158},[84,103326,102628],{"class":154},[19,103328,103329,103330,103332,103333,103335,103336,103339],{},"这里打印初始时间和初始位置。",[39,103331,102205],{}," 一开始是 0。",[39,103334,102208],{}," 是位置数组。",[39,103337,103338],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[60,103341,103342],{"className":121,"code":102814,"language":91,"meta":66,"style":66},[39,103343,103344,103360],{"__ignoreMap":66},[84,103345,103346,103348,103350,103352,103354,103356,103358],{"class":86,"line":87},[84,103347,4203],{"class":129},[84,103349,102639],{"class":154},[84,103351,27206],{"class":129},[84,103353,33596],{"class":94},[84,103355,155],{"class":154},[84,103357,821],{"class":94},[84,103359,31940],{"class":154},[84,103361,103362],{"class":86,"line":98},[84,103363,102837],{"class":154},[19,103365,103366,103368,103369,103372,103373,103375,103376,103378],{},[39,103367,4203],{}," 是循环。",[39,103370,103371],{},"range(100)"," 表示循环 100 次。",[39,103374,2300],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[39,103377,102353],{},"，仿真就前进一步。",[60,103380,103382],{"className":121,"code":103381,"language":91,"meta":66,"style":66},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[39,103383,103384,103394],{"__ignoreMap":66},[84,103385,103386,103388,103390,103392],{"class":86,"line":87},[84,103387,730],{"class":94},[84,103389,155],{"class":154},[84,103391,102667],{"class":158},[84,103393,102616],{"class":154},[84,103395,103396,103398,103400,103402],{"class":86,"line":98},[84,103397,730],{"class":94},[84,103399,155],{"class":154},[84,103401,102678],{"class":158},[84,103403,102628],{"class":154},[19,103405,103406],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[60,103408,103410],{"className":121,"code":103409,"language":91,"meta":66,"style":66},"if __name__ == \"__main__\":\n    main()\n",[39,103411,103412,103424],{"__ignoreMap":66},[84,103413,103414,103416,103418,103420,103422],{"class":86,"line":87},[84,103415,2712],{"class":129},[84,103417,32374],{"class":94},[84,103419,102697],{"class":129},[84,103421,102700],{"class":158},[84,103423,4917],{"class":154},[84,103425,103426],{"class":86,"line":98},[84,103427,102707],{"class":154},[19,103429,103430,103431,103434,103435,55],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[39,103432,103433],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[39,103436,103433],{},[19,103438,103439],{},"运行:",[60,103441,103443],{"className":78,"code":103442,"language":80,"meta":66,"style":66},"python ch1_first_sim.py\n",[39,103444,103445],{"__ignoreMap":66},[84,103446,103447,103449],{"class":86,"line":87},[84,103448,91],{"class":90},[84,103450,102424],{"class":158},[14,103452,103454],{"id":103453},"_5运行结果说明","5.运行结果说明",[19,103456,103457],{},"你应该看到类似输出:",[60,103459,103462],{"className":103460,"code":103461,"language":65,"meta":66},[63],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[39,103463,103461],{"__ignoreMap":66},[19,103465,103466,103468,103469,103472,103473,55],{},[39,103467,102758],{}," 有 7 个位置变量: ",[39,103470,103471],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[39,103474,103475],{},"vx vy vz wx wy wz",[19,103477,103478,103479,103482],{},"你还会看到 ",[39,103480,103481],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103484,103486],{"id":103485},"_6验证步骤","6.验证步骤",[19,103488,103489],{},"确认版本:",[60,103491,103492],{"className":78,"code":102077,"language":80,"meta":66,"style":66},[39,103493,103494],{"__ignoreMap":66},[84,103495,103496,103498,103500],{"class":86,"line":87},[84,103497,91],{"class":90},[84,103499,31515],{"class":94},[84,103501,102088],{"class":158},[19,103503,103504],{},"确认导入的是官方 bindings:",[60,103506,103508],{"className":78,"code":103507,"language":80,"meta":66,"style":66},"python -c \"import mujoco; print(mujoco)\"\n",[39,103509,103510],{"__ignoreMap":66},[84,103511,103512,103514,103516],{"class":86,"line":87},[84,103513,91],{"class":90},[84,103515,31515],{"class":94},[84,103517,103518],{"class":158}," \"import mujoco; print(mujoco)\"\n",[19,103520,103521],{},"运行程序:",[60,103523,103524],{"className":78,"code":103442,"language":80,"meta":66,"style":66},[39,103525,103526],{"__ignoreMap":66},[84,103527,103528,103530],{"class":86,"line":87},[84,103529,91],{"class":90},[84,103531,102424],{"class":158},[19,103533,103534,103535,103538,103539,55],{},"检查 ",[39,103536,103537],{},"final time"," 是否约等于 ",[39,103540,103541],{},"1.0",[19,103543,103544],{},"再做几个小实验：",[26,103546,103547,103557,103565,103578],{},[29,103548,103549,103550,103552,103553,103556],{},"把 ",[39,103551,103077],{}," 改成 ",[39,103554,103555],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,103558,103549,103559,103552,103561,103564],{},[39,103560,102966],{},[39,103562,103563],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,103566,103549,103567,103552,103569,103572,103573,103575,103576,55],{},[39,103568,102962],{},[39,103570,103571],{},"timestep=\"0.005\"","，观察 100 步后的 ",[39,103574,103537],{}," 是否变成约 ",[39,103577,36481],{},[29,103579,103580,103581,103584],{},"删除 ",[39,103582,103583],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103586,103587],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103589,103591],{"id":103590},"_7常见错误与解决方案","7.常见错误与解决方案",[198,103593,103595],{"id":103594},"modulenotfounderror-no-module-named-mujoco",[39,103596,103597],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103599,103600],{},"解决:",[60,103602,103604],{"className":78,"code":103603,"language":80,"meta":66,"style":66},"pip install \"mujoco>=2.3\"\n",[39,103605,103606],{"__ignoreMap":66},[84,103607,103608,103610,103612],{"class":86,"line":87},[84,103609,246],{"class":90},[84,103611,275],{"class":158},[84,103613,103614],{"class":158}," \"mujoco>=2.3\"\n",[198,103616,103618],{"id":103617},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103620,103621],{},"先安装系统依赖:",[60,103623,103625],{"className":78,"code":103624,"language":80,"meta":66,"style":66},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[39,103626,103627],{"__ignoreMap":66},[84,103628,103629,103631,103633,103635,103637,103640,103642,103645,103647,103650,103652],{"class":86,"line":87},[84,103630,311],{"class":90},[84,103632,361],{"class":158},[84,103634,275],{"class":158},[84,103636,27559],{"class":94},[84,103638,103639],{"class":158}," mesa-libGL",[84,103641,101958],{"class":158},[84,103643,103644],{"class":158}," glfw",[84,103646,101978],{"class":158},[84,103648,103649],{"class":158}," libX11",[84,103651,101991],{"class":158},[84,103653,103654],{"class":158}," libXrandr\n",[198,103656,103658],{"id":103657},"xml-解析失败","XML 解析失败",[19,103660,103661],{},"检查:",[26,103663,103664,103667,103670,103676],{},[29,103665,103666],{},"标签是否闭合",[29,103668,103669],{},"属性是否带引号",[29,103671,103672,103673],{},"根节点是否是 ",[39,103674,103675],{},"\u003Cmujoco>",[29,103677,103678,103680,103681,103684],{},[39,103679,52949],{}," 是否放在 ",[39,103682,103683],{},"\u003Cworldbody>"," 内部",[198,103686,103688,103690,103691],{"id":103687},"final-time-不是严格等于-10",[39,103689,103537],{}," 不是严格等于 ",[39,103692,103541],{},[19,103694,103695],{},"这通常不是错误。浮点数计算可能得到：",[60,103697,103700],{"className":103698,"code":103699,"language":65,"meta":66},[63],"1.0000000000000007\n",[39,103701,103699],{"__ignoreMap":66},[19,103703,103704,103705,103707],{},"只要接近 ",[39,103706,103541],{}," 就正常。",[198,103709,103710],{"id":103710},"方块没有掉下来",[19,103712,103713],{},"检查：",[26,103715,103716,103722,103728,103733],{},[29,103717,103718,103719],{},"方块 body 里是否有 ",[39,103720,103721],{},"\u003Cfreejoint\u002F>",[29,103723,103724,103725],{},"重力是否是 ",[39,103726,103727],{},"0 0 -9.81",[29,103729,103730,103731],{},"是否真的调用了 ",[39,103732,101830],{},[29,103734,103735,103736,103738,103739],{},"你看的是否是 ",[39,103737,103481],{},"，不是 ",[39,103740,103741],{},"initial qpos",[14,103743,103745],{"id":103744},"_8本章小结","8.本章小结",[19,103747,103748],{},"本章你已经完成了 MuJoCo 的最小闭环：",[60,103750,103753],{"className":103751,"code":103752,"language":65,"meta":66},[63],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[39,103754,103752],{"__ignoreMap":66},[19,103756,103757],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1222,103759,103760],{},"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":66,"searchDepth":98,"depth":98,"links":103762},[103763,103764,103765,103770,103774,103775,103776,103784],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":103766},[103767,103768,103769],{"id":102220,"depth":106,"text":102221},{"id":102314,"depth":106,"text":102315},{"id":102366,"depth":106,"text":102367},{"id":102390,"depth":98,"text":102391,"children":103771},[103772,103773],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":103777},[103778,103779,103780,103781,103783],{"id":103594,"depth":106,"text":103597},{"id":103617,"depth":106,"text":103618},{"id":103657,"depth":106,"text":103658},{"id":103687,"depth":106,"text":103782},"final time 不是严格等于 1.0",{"id":103710,"depth":106,"text":103710},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101783,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103791,"title":103792,"body":103793,"description":66,"extension":1250,"meta":105448,"navigation":1252,"path":105449,"seo":105450,"stem":105451,"__hash__":105452},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103794,"toc":105424},[103795,103798,103800,103803,103806,103823,103917,103920,103926,103928,103930,103954,103957,103971,103974,104015,104017,104030,104032,104035,104083,104095,104098,104101,104107,104120,104187,104190,104209,104212,104215,104221,104223,104232,104235,104239,104248,104330,104339,104343,104349,104363,104373,104375,104705,104708,104720,104722,104733,104735,104738,104756,104759,104762,104780,104791,104794,104809,104819,104821,104842,104859,104879,104885,104925,104941,104957,104963,104966,104990,105006,105011,105041,105058,105083,105086,105101,105110,105125,105134,105149,105156,105158,105168,105181,105188,105191,105230,105237,105239,105291,105293,105299,105302,105309,105316,105319,105321,105339,105342,105345,105379,105391,105393,105396,105418,105421],[10,103796,103792],{"id":103797},"_2xml-与-mjcf-物理建模基础",[14,103799,101792],{"id":101791},[19,103801,103802],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103804,103805],{},"本章结束后，你应该能看懂一个简单模型里：",[26,103807,103808,103811,103814,103817,103820],{},[29,103809,103810],{},"地面在哪里。",[29,103812,103813],{},"物体初始位置在哪里。",[29,103815,103816],{},"几何体是什么形状。",[29,103818,103819],{},"哪些 body 可以自由运动。",[29,103821,103822],{},"如何用名字在 Python 里找到 XML 中的对象。",[458,103824,103825,103834],{},[461,103826,103827],{},[464,103828,103829,103832],{},[467,103830,103831],{"align":24906},"标签",[467,103833,472],{"align":24906},[474,103835,103836,103845,103855,103864,103874,103884,103897,103907],{},[464,103837,103838,103842],{},[479,103839,103840],{"align":24906},[39,103841,103675],{},[479,103843,103844],{"align":24906},"根节点",[464,103846,103847,103852],{},[479,103848,103849],{"align":24906},[39,103850,103851],{},"\u003Coption>",[479,103853,103854],{"align":24906},"仿真参数",[464,103856,103857,103861],{},[479,103858,103859],{"align":24906},[39,103860,103683],{},[479,103862,103863],{"align":24906},"世界中的物体",[464,103865,103866,103871],{},[479,103867,103868],{"align":24906},[39,103869,103870],{},"\u003Cbody>",[479,103872,103873],{"align":24906},"刚体",[464,103875,103876,103881],{},[479,103877,103878],{"align":24906},[39,103879,103880],{},"\u003Cgeom>",[479,103882,103883],{"align":24906},"几何体、碰撞体、可视体",[464,103885,103886,103894],{},[479,103887,103888,26142,103891],{"align":24906},[39,103889,103890],{},"\u003Cjoint>",[39,103892,103893],{},"\u003Cfreejoint>",[479,103895,103896],{"align":24906},"关节",[464,103898,103899,103904],{},[479,103900,103901],{"align":24906},[39,103902,103903],{},"\u003Csite>",[479,103905,103906],{"align":24906},"标记点",[464,103908,103909,103914],{},[479,103910,103911],{"align":24906},[39,103912,103913],{},"\u003Cactuator>",[479,103915,103916],{"align":24906},"控制器",[19,103918,103919],{},"初学时可以先记住：",[60,103921,103924],{"className":103922,"code":103923,"language":65,"meta":66},[63],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[39,103925,103923],{"__ignoreMap":66},[14,103927,101915],{"id":101914},[19,103929,101918],{},[60,103931,103933],{"className":78,"code":103932,"language":80,"meta":66,"style":66},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[39,103934,103935],{"__ignoreMap":66},[84,103936,103937,103939,103941,103943,103945,103947,103949,103951],{"class":86,"line":87},[84,103938,311],{"class":90},[84,103940,361],{"class":158},[84,103942,275],{"class":158},[84,103944,27559],{"class":94},[84,103946,103639],{"class":158},[84,103948,101958],{"class":158},[84,103950,103644],{"class":158},[84,103952,103953],{"class":158}," glfw-devel\n",[19,103955,103956],{},"pip:",[60,103958,103959],{"className":78,"code":102057,"language":80,"meta":66,"style":66},[39,103960,103961],{"__ignoreMap":66},[84,103962,103963,103965,103967,103969],{"class":86,"line":87},[84,103964,246],{"class":90},[84,103966,275],{"class":158},[84,103968,102068],{"class":158},[84,103970,102071],{"class":158},[19,103972,103973],{},"conda:",[60,103975,103977],{"className":78,"code":103976,"language":80,"meta":66,"style":66},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[39,103978,103979,103996,104005],{"__ignoreMap":66},[84,103980,103981,103983,103985,103987,103990,103992,103994],{"class":86,"line":87},[84,103982,31487],{"class":90},[84,103984,30333],{"class":158},[84,103986,26279],{"class":94},[84,103988,103989],{"class":158}," mujoco-xml",[84,103991,102113],{"class":158},[84,103993,102116],{"class":94},[84,103995,102119],{"class":94},[84,103997,103998,104000,104002],{"class":86,"line":98},[84,103999,31487],{"class":90},[84,104001,102126],{"class":158},[84,104003,104004],{"class":158}," mujoco-xml\n",[84,104006,104007,104009,104011,104013],{"class":86,"line":106},[84,104008,246],{"class":90},[84,104010,275],{"class":158},[84,104012,102068],{"class":158},[84,104014,102071],{"class":158},[19,104016,102142],{},[26,104018,104019,104022,104027],{},[29,104020,104021],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104023,104024,104025,55],{},"本章使用基础标签，适用于 ",[39,104026,102165],{},[29,104028,104029],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104031,102183],{"id":102182},[19,104033,104034],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[60,104036,104038],{"className":54216,"code":104037,"language":54218,"meta":66,"style":66},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[39,104039,104040,104054,104062,104067,104075],{"__ignoreMap":66},[84,104041,104042,104044,104046,104048,104050,104052],{"class":86,"line":87},[84,104043,2218],{"class":154},[84,104045,102159],{"class":52449},[84,104047,102913],{"class":90},[84,104049,867],{"class":154},[84,104051,63825],{"class":158},[84,104053,52456],{"class":154},[84,104055,104056,104058,104060],{"class":86,"line":98},[84,104057,53293],{"class":154},[84,104059,102979],{"class":52449},[84,104061,52456],{"class":154},[84,104063,104064],{"class":86,"line":106},[84,104065,104066],{"class":154},"    ...\n",[84,104068,104069,104071,104073],{"class":86,"line":112},[84,104070,53566],{"class":154},[84,104072,102979],{"class":52449},[84,104074,52456],{"class":154},[84,104076,104077,104079,104081],{"class":86,"line":425},[84,104078,52934],{"class":154},[84,104080,102159],{"class":52449},[84,104082,52456],{"class":154},[19,104084,104085,104087,104088,104090,104091,104094],{},[39,104086,52949],{}," 表示刚体。",[39,104089,102258],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[39,104092,104093],{},"joint"," 表示刚体相对父刚体如何运动。",[198,104096,104097],{"id":104097},"层级结构非常重要",[19,104099,104100],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[60,104102,104105],{"className":104103,"code":104104,"language":65,"meta":66},[63],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[39,104106,104104],{"__ignoreMap":66},[19,104108,104109,102156,104112,104115,104116,104119],{},[39,104110,104111],{},"red_box_geom",[39,104113,104114],{},"box_center"," 都属于 ",[39,104117,104118],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[60,104121,104123],{"className":54216,"code":104122,"language":54218,"meta":66,"style":66},"\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",[39,104124,104125,104145,104159,104179],{"__ignoreMap":66},[84,104126,104127,104129,104131,104133,104135,104137,104139,104141,104143],{"class":86,"line":87},[84,104128,2218],{"class":154},[84,104130,52949],{"class":52449},[84,104132,16090],{"class":90},[84,104134,867],{"class":154},[84,104136,54640],{"class":158},[84,104138,102244],{"class":90},[84,104140,867],{"class":154},[84,104142,102249],{"class":158},[84,104144,52456],{"class":154},[84,104146,104147,104149,104151,104153,104155,104157],{"class":86,"line":98},[84,104148,53293],{"class":154},[84,104150,102758],{"class":52449},[84,104152,16090],{"class":90},[84,104154,867],{"class":154},[84,104156,103099],{"class":158},[84,104158,102282],{"class":154},[84,104160,104161,104163,104165,104167,104169,104171,104173,104175,104177],{"class":86,"line":106},[84,104162,53293],{"class":154},[84,104164,102258],{"class":52449},[84,104166,54973],{"class":90},[84,104168,867],{"class":154},[84,104170,54640],{"class":158},[84,104172,102274],{"class":90},[84,104174,867],{"class":154},[84,104176,102279],{"class":158},[84,104178,102282],{"class":154},[84,104180,104181,104183,104185],{"class":86,"line":112},[84,104182,52934],{"class":154},[84,104184,52949],{"class":52449},[84,104186,52456],{"class":154},[19,104188,104189],{},"含义:",[26,104191,104192,104198,104203,104206],{},[29,104193,104194,104195,104197],{},"创建名为 ",[39,104196,54863],{}," 的刚体",[29,104199,104200,104201],{},"初始位置在世界坐标 ",[39,104202,102307],{},[29,104204,104205],{},"它有一个自由关节",[29,104207,104208],{},"它有一个盒子几何体",[198,104210,104211],{"id":104211},"坐标怎么理解",[19,104213,104214],{},"MuJoCo 默认使用三维坐标：",[60,104216,104219],{"className":104217,"code":104218,"language":65,"meta":66},[63],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[39,104220,104218],{"__ignoreMap":66},[19,104222,15803],{},[60,104224,104226],{"className":54216,"code":104225,"language":54218,"meta":66,"style":66},"pos=\"0 0 1\"\n",[39,104227,104228],{"__ignoreMap":66},[84,104229,104230],{"class":86,"line":87},[84,104231,104225],{"class":154},[19,104233,104234],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[198,104236,104238],{"id":104237},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104240,104241,104242,83676,104245,104247],{},"不同 ",[39,104243,104244],{},"type",[39,104246,32649],{}," 含义不同：",[458,104249,104250,104265],{},[461,104251,104252],{},[464,104253,104254,104258,104263],{},[467,104255,104256],{"align":24906},[39,104257,104244],{},[467,104259,104260,104262],{"align":24906},[39,104261,32649],{}," 示例",[467,104264,101845],{"align":24906},[474,104266,104267,104281,104296,104315],{},[464,104268,104269,104273,104278],{},[479,104270,104271],{"align":24906},[39,104272,54863],{},[479,104274,104275],{"align":24906},[39,104276,104277],{},"size=\"0.1 0.2 0.3\"",[479,104279,104280],{"align":24906},"x\u002Fy\u002Fz 半边长，不是完整长度",[464,104282,104283,104288,104293],{},[479,104284,104285],{"align":24906},[39,104286,104287],{},"sphere",[479,104289,104290],{"align":24906},[39,104291,104292],{},"size=\"0.1\"",[479,104294,104295],{"align":24906},"球半径",[464,104297,104298,104303,104308],{},[479,104299,104300],{"align":24906},[39,104301,104302],{},"capsule",[479,104304,104305],{"align":24906},[39,104306,104307],{},"size=\"0.03\"",[479,104309,104310,104311,104314],{"align":24906},"胶囊半径，长度常用 ",[39,104312,104313],{},"fromto"," 指定",[464,104316,104317,104322,104327],{},[479,104318,104319],{"align":24906},[39,104320,104321],{},"plane",[479,104323,104324],{"align":24906},[39,104325,104326],{},"size=\"3 3 0.1\"",[479,104328,104329],{"align":24906},"可视平面大小，通常当地面",[19,104331,104332,104333,104335,104336,104338],{},"最容易踩坑的是 box：",[39,104334,103162],{}," 表示边长大约是 ",[39,104337,33190],{},"，因为 MuJoCo 用的是半边长。",[198,104340,104342],{"id":104341},"site-是什么","site 是什么",[19,104344,104345,104348],{},[39,104346,104347],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,104350,104351,104354,104357,104360],{},[29,104352,104353],{},"标记机械臂末端。",[29,104355,104356],{},"标记目标位置。",[29,104358,104359],{},"放传感器或相机参考点。",[29,104361,104362],{},"在 Python 中读取某个关键点的世界坐标。",[19,104364,104365,104366,102156,104369,104372],{},"在后面的 Reacher 任务中，",[39,104367,104368],{},"tip",[39,104370,104371],{},"target"," 就会用 site 表示。",[14,104374,102391],{"id":102390},[60,104376,104378],{"className":121,"code":104377,"language":91,"meta":66,"style":66},"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",[39,104379,104380,104386,104396,104400,104404,104412,104417,104421,104425,104429,104434,104438,104443,104448,104453,104458,104462,104466,104470,104474,104478,104482,104494,104506,104514,104518,104533,104548,104552,104565,104580,104593,104606,104610,104626,104630,104634,104645,104657,104669,104681,104685,104689,104701],{"__ignoreMap":66},[84,104381,104382,104384],{"class":86,"line":87},[84,104383,31547],{"class":129},[84,104385,102439],{"class":154},[84,104387,104388,104390,104392,104394],{"class":86,"line":98},[84,104389,31547],{"class":129},[84,104391,32534],{"class":154},[84,104393,1157],{"class":129},[84,104395,32539],{"class":154},[84,104397,104398],{"class":86,"line":106},[84,104399,3578],{"emptyLinePlaceholder":1252},[84,104401,104402],{"class":86,"line":112},[84,104403,3578],{"emptyLinePlaceholder":1252},[84,104405,104406,104408,104410],{"class":86,"line":425},[84,104407,102452],{"class":94},[84,104409,14735],{"class":129},[84,104411,102457],{"class":158},[84,104413,104414],{"class":86,"line":2395},[84,104415,104416],{"class":158},"\u003Cmujoco model=\"xml_basic\">\n",[84,104418,104419],{"class":86,"line":2401},[84,104420,102467],{"class":158},[84,104422,104423],{"class":86,"line":2492},[84,104424,3578],{"emptyLinePlaceholder":1252},[84,104426,104427],{"class":86,"line":2498},[84,104428,102476],{"class":158},[84,104430,104431],{"class":86,"line":2510},[84,104432,104433],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[84,104435,104436],{"class":86,"line":2793},[84,104437,3578],{"emptyLinePlaceholder":1252},[84,104439,104440],{"class":86,"line":2798},[84,104441,104442],{"class":158},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[84,104444,104445],{"class":86,"line":2804},[84,104446,104447],{"class":158},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[84,104449,104450],{"class":86,"line":2809},[84,104451,104452],{"class":158},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,104454,104455],{"class":86,"line":2823},[84,104456,104457],{"class":158},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[84,104459,104460],{"class":86,"line":2828},[84,104461,102505],{"class":158},[84,104463,104464],{"class":86,"line":2834},[84,104465,102510],{"class":158},[84,104467,104468],{"class":86,"line":2855},[84,104469,102515],{"class":158},[84,104471,104472],{"class":86,"line":2860},[84,104473,96844],{"class":158},[84,104475,104476],{"class":86,"line":2874},[84,104477,3578],{"emptyLinePlaceholder":1252},[84,104479,104480],{"class":86,"line":2879},[84,104481,3578],{"emptyLinePlaceholder":1252},[84,104483,104484,104486,104488,104490,104492],{"class":86,"line":2908},[84,104485,33100],{"class":129},[84,104487,3153],{"class":90},[84,104489,102536],{"class":154},[84,104491,96832],{"class":94},[84,104493,4917],{"class":154},[84,104495,104496,104498,104500,104502,104504],{"class":86,"line":2913},[84,104497,102545],{"class":154},[84,104499,867],{"class":129},[84,104501,102550],{"class":154},[84,104503,102452],{"class":94},[84,104505,162],{"class":154},[84,104507,104508,104510,104512],{"class":86,"line":2930},[84,104509,102559],{"class":154},[84,104511,867],{"class":129},[84,104513,102564],{"class":154},[84,104515,104516],{"class":86,"line":2935},[84,104517,3578],{"emptyLinePlaceholder":1252},[84,104519,104520,104523,104525,104528,104531],{"class":86,"line":2940},[84,104521,104522],{"class":154},"    box_body_id ",[84,104524,867],{"class":129},[84,104526,104527],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[84,104529,104530],{"class":158},"\"red_box\"",[84,104532,162],{"class":154},[84,104534,104535,104538,104540,104543,104546],{"class":86,"line":2945},[84,104536,104537],{"class":154},"    site_id ",[84,104539,867],{"class":129},[84,104541,104542],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[84,104544,104545],{"class":158},"\"box_center\"",[84,104547,162],{"class":154},[84,104549,104550],{"class":86,"line":2959},[84,104551,3578],{"emptyLinePlaceholder":1252},[84,104553,104554,104556,104559,104561,104563],{"class":86,"line":2964},[84,104555,4279],{"class":129},[84,104557,104558],{"class":154}," box_body_id ",[84,104560,2218],{"class":129},[84,104562,5271],{"class":94},[84,104564,4917],{"class":154},[84,104566,104567,104570,104573,104575,104578],{"class":86,"line":3755},[84,104568,104569],{"class":129},"        raise",[84,104571,104572],{"class":94}," RuntimeError",[84,104574,155],{"class":154},[84,104576,104577],{"class":158},"\"body red_box not found\"",[84,104579,162],{"class":154},[84,104581,104582,104584,104587,104589,104591],{"class":86,"line":3769},[84,104583,4279],{"class":129},[84,104585,104586],{"class":154}," site_id ",[84,104588,2218],{"class":129},[84,104590,5271],{"class":94},[84,104592,4917],{"class":154},[84,104594,104595,104597,104599,104601,104604],{"class":86,"line":3777},[84,104596,104569],{"class":129},[84,104598,104572],{"class":94},[84,104600,155],{"class":154},[84,104602,104603],{"class":158},"\"site box_center not found\"",[84,104605,162],{"class":154},[84,104607,104608],{"class":86,"line":3782},[84,104609,3578],{"emptyLinePlaceholder":1252},[84,104611,104612,104614,104616,104618,104620,104622,104624],{"class":86,"line":3788},[84,104613,4379],{"class":129},[84,104615,102639],{"class":154},[84,104617,27206],{"class":129},[84,104619,33596],{"class":94},[84,104621,155],{"class":154},[84,104623,2903],{"class":94},[84,104625,31940],{"class":154},[84,104627,104628],{"class":86,"line":3794},[84,104629,102654],{"class":154},[84,104631,104632],{"class":86,"line":3799},[84,104633,3578],{"emptyLinePlaceholder":1252},[84,104635,104636,104638,104640,104643],{"class":86,"line":9120},[84,104637,32453],{"class":94},[84,104639,155],{"class":154},[84,104641,104642],{"class":158},"\"simulation time:\"",[84,104644,102616],{"class":154},[84,104646,104647,104649,104651,104654],{"class":86,"line":9144},[84,104648,32453],{"class":94},[84,104650,155],{"class":154},[84,104652,104653],{"class":158},"\"box body position:\"",[84,104655,104656],{"class":154},", data.xpos[box_body_id].copy())\n",[84,104658,104659,104661,104663,104666],{"class":86,"line":9149},[84,104660,32453],{"class":94},[84,104662,155],{"class":154},[84,104664,104665],{"class":158},"\"site position:\"",[84,104667,104668],{"class":154},", data.site_xpos[site_id].copy())\n",[84,104670,104671,104673,104675,104678],{"class":86,"line":9155},[84,104672,32453],{"class":94},[84,104674,155],{"class":154},[84,104676,104677],{"class":158},"\"box qpos:\"",[84,104679,104680],{"class":154},", np.array(data.qpos))\n",[84,104682,104683],{"class":86,"line":9182},[84,104684,3578],{"emptyLinePlaceholder":1252},[84,104686,104687],{"class":86,"line":9187},[84,104688,3578],{"emptyLinePlaceholder":1252},[84,104690,104691,104693,104695,104697,104699],{"class":86,"line":9193},[84,104692,2712],{"class":129},[84,104694,32374],{"class":94},[84,104696,102697],{"class":129},[84,104698,102700],{"class":158},[84,104700,4917],{"class":154},[84,104702,104703],{"class":86,"line":9205},[84,104704,102707],{"class":154},[19,104706,104707],{},"保存为：",[60,104709,104711],{"className":78,"code":104710,"language":80,"meta":66,"style":66},"touch ch2_xml_basic.py\n",[39,104712,104713],{"__ignoreMap":66},[84,104714,104715,104717],{"class":86,"line":87},[84,104716,102421],{"class":90},[84,104718,104719],{"class":158}," ch2_xml_basic.py\n",[19,104721,103439],{},[60,104723,104725],{"className":78,"code":104724,"language":80,"meta":66,"style":66},"python ch2_xml_basic.py\n",[39,104726,104727],{"__ignoreMap":66},[84,104728,104729,104731],{"class":86,"line":87},[84,104730,91],{"class":90},[84,104732,104719],{"class":158},[198,104734,102710],{"id":102710},[19,104736,104737],{},"用名字查找 body：",[60,104739,104741],{"className":121,"code":104740,"language":91,"meta":66,"style":66},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[39,104742,104743],{"__ignoreMap":66},[84,104744,104745,104748,104750,104752,104754],{"class":86,"line":87},[84,104746,104747],{"class":154},"box_body_id ",[84,104749,867],{"class":129},[84,104751,104527],{"class":154},[84,104753,104530],{"class":158},[84,104755,162],{"class":154},[19,104757,104758],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104760,104761],{},"用名字查找 site：",[60,104763,104765],{"className":121,"code":104764,"language":91,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[39,104766,104767],{"__ignoreMap":66},[84,104768,104769,104772,104774,104776,104778],{"class":86,"line":87},[84,104770,104771],{"class":154},"site_id ",[84,104773,867],{"class":129},[84,104775,104542],{"class":154},[84,104777,104545],{"class":158},[84,104779,162],{"class":154},[19,104781,104782,104783,104786,104787,104790],{},"注意第二个参数是对象类型。查 body 就用 ",[39,104784,104785],{},"mjOBJ_BODY","，查 site 就用 ",[39,104788,104789],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104792,104793],{},"读取世界坐标：",[60,104795,104797],{"className":121,"code":104796,"language":91,"meta":66,"style":66},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[39,104798,104799,104804],{"__ignoreMap":66},[84,104800,104801],{"class":86,"line":87},[84,104802,104803],{"class":154},"data.xpos[box_body_id]\n",[84,104805,104806],{"class":86,"line":98},[84,104807,104808],{"class":154},"data.site_xpos[site_id]\n",[19,104810,104811,104814,104815,104818],{},[39,104812,104813],{},"xpos"," 是 body 的世界坐标，",[39,104816,104817],{},"site_xpos"," 是 site 的世界坐标。",[198,104820,102846],{"id":102846},[60,104822,104824],{"className":121,"code":104823,"language":91,"meta":66,"style":66},"import mujoco\nimport numpy as np\n",[39,104825,104826,104832],{"__ignoreMap":66},[84,104827,104828,104830],{"class":86,"line":87},[84,104829,31547],{"class":129},[84,104831,102439],{"class":154},[84,104833,104834,104836,104838,104840],{"class":86,"line":98},[84,104835,31547],{"class":129},[84,104837,32534],{"class":154},[84,104839,1157],{"class":129},[84,104841,32539],{"class":154},[19,104843,104844,104845,104848,104849,104852,104853,42,104856,55],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[39,104846,104847],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[39,104850,104851],{},"as np"," 是习惯写法，后面就可以写 ",[39,104854,104855],{},"np.array(...)",[39,104857,104858],{},"np.round(...)",[60,104860,104861],{"className":121,"code":102733,"language":91,"meta":66,"style":66},[39,104862,104863,104871,104875],{"__ignoreMap":66},[84,104864,104865,104867,104869],{"class":86,"line":87},[84,104866,102452],{"class":94},[84,104868,14735],{"class":129},[84,104870,102457],{"class":158},[84,104872,104873],{"class":86,"line":98},[84,104874,102748],{"class":158},[84,104876,104877],{"class":86,"line":106},[84,104878,96844],{"class":158},[19,104880,104881,104882,55],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[39,104883,104884],{},"mujoco.MjModel.from_xml_string(XML)",[60,104886,104888],{"className":54216,"code":104887,"language":54218,"meta":66,"style":66},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[39,104889,104890],{"__ignoreMap":66},[84,104891,104892,104894,104896,104898,104900,104902,104904,104906,104909,104911,104913,104916,104918,104920,104923],{"class":86,"line":87},[84,104893,2218],{"class":154},[84,104895,104347],{"class":52449},[84,104897,16090],{"class":90},[84,104899,867],{"class":154},[84,104901,104545],{"class":158},[84,104903,102244],{"class":90},[84,104905,867],{"class":154},[84,104907,104908],{"class":158},"\"0 0 0\"",[84,104910,102274],{"class":90},[84,104912,867],{"class":154},[84,104914,104915],{"class":158},"\"0.03\"",[84,104917,79913],{"class":90},[84,104919,867],{"class":154},[84,104921,104922],{"class":158},"\"0 1 0 1\"",[84,104924,102282],{"class":154},[19,104926,104927,104929,104930,104933,104934,104936,104937,104940],{},[39,104928,104347],{}," 是标记点。",[39,104931,104932],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[39,104935,104307],{}," 表示显示出来的小球大小。",[39,104938,104939],{},"rgba=\"0 1 0 1\""," 表示绿色。",[60,104942,104943],{"className":121,"code":104740,"language":91,"meta":66,"style":66},[39,104944,104945],{"__ignoreMap":66},[84,104946,104947,104949,104951,104953,104955],{"class":86,"line":87},[84,104948,104747],{"class":154},[84,104950,867],{"class":129},[84,104952,104527],{"class":154},[84,104954,104530],{"class":158},[84,104956,162],{"class":154},[19,104958,104959,104960,104962],{},"这行的作用是：根据名字 ",[39,104961,104530],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104964,104965],{},"拆开看：",[26,104967,104968,104974,104979,104985],{},[29,104969,104970,104973],{},[39,104971,104972],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,104975,104976,104978],{},[39,104977,103223],{}," 是被查询的模型。",[29,104980,104981,104984],{},[39,104982,104983],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,104986,104987,104989],{},[39,104988,104530],{}," 是 XML 里写的名字。",[60,104991,104992],{"className":121,"code":104764,"language":91,"meta":66,"style":66},[39,104993,104994],{"__ignoreMap":66},[84,104995,104996,104998,105000,105002,105004],{"class":86,"line":87},[84,104997,104771],{"class":154},[84,104999,867],{"class":129},[84,105001,104542],{"class":154},[84,105003,104545],{"class":158},[84,105005,162],{"class":154},[19,105007,105008,105009,55],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[39,105010,104545],{},[60,105012,105014],{"className":121,"code":105013,"language":91,"meta":66,"style":66},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[39,105015,105016,105028],{"__ignoreMap":66},[84,105017,105018,105020,105022,105024,105026],{"class":86,"line":87},[84,105019,2712],{"class":129},[84,105021,104558],{"class":154},[84,105023,2218],{"class":129},[84,105025,5271],{"class":94},[84,105027,4917],{"class":154},[84,105029,105030,105033,105035,105037,105039],{"class":86,"line":98},[84,105031,105032],{"class":129},"    raise",[84,105034,104572],{"class":94},[84,105036,155],{"class":154},[84,105038,104577],{"class":158},[84,105040,162],{"class":154},[19,105042,105043,105045,105046,105049,105050,105053,105054,105057],{},[39,105044,2712],{}," 是条件判断。",[39,105047,105048],{},"mj_name2id"," 找不到对象时会返回 ",[39,105051,105052],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[39,105055,105056],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[60,105059,105061],{"className":121,"code":105060,"language":91,"meta":66,"style":66},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[39,105062,105063,105079],{"__ignoreMap":66},[84,105064,105065,105067,105069,105071,105073,105075,105077],{"class":86,"line":87},[84,105066,4203],{"class":129},[84,105068,102639],{"class":154},[84,105070,27206],{"class":129},[84,105072,33596],{"class":94},[84,105074,155],{"class":154},[84,105076,2903],{"class":94},[84,105078,31940],{"class":154},[84,105080,105081],{"class":86,"line":98},[84,105082,102837],{"class":154},[19,105084,105085],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[60,105087,105089],{"className":121,"code":105088,"language":91,"meta":66,"style":66},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[39,105090,105091],{"__ignoreMap":66},[84,105092,105093,105095,105097,105099],{"class":86,"line":87},[84,105094,730],{"class":94},[84,105096,155],{"class":154},[84,105098,104653],{"class":158},[84,105100,104656],{"class":154},[19,105102,105103,105105,105106,105109],{},[39,105104,102217],{}," 保存所有 body 的世界坐标。",[39,105107,105108],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[60,105111,105113],{"className":121,"code":105112,"language":91,"meta":66,"style":66},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[39,105114,105115],{"__ignoreMap":66},[84,105116,105117,105119,105121,105123],{"class":86,"line":87},[84,105118,730],{"class":94},[84,105120,155],{"class":154},[84,105122,104665],{"class":158},[84,105124,104668],{"class":154},[19,105126,105127,105130,105131,105133],{},[39,105128,105129],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[39,105132,104114],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[60,105135,105137],{"className":121,"code":105136,"language":91,"meta":66,"style":66},"print(\"box qpos:\", np.array(data.qpos))\n",[39,105138,105139],{"__ignoreMap":66},[84,105140,105141,105143,105145,105147],{"class":86,"line":87},[84,105142,730],{"class":94},[84,105144,155],{"class":154},[84,105146,104677],{"class":158},[84,105148,104680],{"class":154},[19,105150,105151,105152,105155],{},"这里打印广义位置数组。",[39,105153,105154],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105157,103454],{"id":103453},[19,105159,105160,105161,105164,105165,55],{},"程序会输出 ",[39,105162,105163],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[39,105166,105167],{},"qpos",[19,105169,105170,105172,105173,105176,105177,105180],{},[39,105171,105108],{}," 是 body 的世界坐标位置。",[39,105174,105175],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[39,105178,105179],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105182,83368,105183,83676,105185,105187],{},[39,105184,104114],{},[39,105186,104932],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105189,105190],{},"如果你把 site 改成：",[60,105192,105194],{"className":54216,"code":105193,"language":54218,"meta":66,"style":66},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[39,105195,105196],{"__ignoreMap":66},[84,105197,105198,105200,105202,105204,105206,105209,105211,105213,105216,105218,105220,105222,105224,105226,105228],{"class":86,"line":87},[84,105199,2218],{"class":154},[84,105201,104347],{"class":52449},[84,105203,16090],{"class":90},[84,105205,867],{"class":154},[84,105207,105208],{"class":158},"\"box_top\"",[84,105210,102244],{"class":90},[84,105212,867],{"class":154},[84,105214,105215],{"class":158},"\"0 0 0.15\"",[84,105217,102274],{"class":90},[84,105219,867],{"class":154},[84,105221,104915],{"class":158},[84,105223,79913],{"class":90},[84,105225,867],{"class":154},[84,105227,104922],{"class":158},[84,105229,102282],{"class":154},[19,105231,105232,105233,105236],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[39,105234,105235],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105238,103486],{"id":103485},[26,105240,105241,105250,105253,105260,105266,105277],{},[29,105242,103549,105243,105245,105246,103552,105248,55],{},[39,105244,104118],{}," 的初始高度从 ",[39,105247,1529],{},[39,105249,1397],{},[29,105251,105252],{},"重新运行程序。",[29,105254,105255,105256,105259],{},"观察 ",[39,105257,105258],{},"box qpos"," 和最终位置是否变化。",[29,105261,105262,105263,105265],{},"故意把 ",[39,105264,104347],{}," 名称改错，确认程序能报错。",[29,105267,103549,105268,105270,105271,103552,105273,105276],{},[39,105269,102258],{}," 的颜色 ",[39,105272,103170],{},[39,105274,105275],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,105278,103549,105279,83676,105281,103552,105284,105287,105288,105290],{},[39,105280,104114],{},[39,105282,105283],{},"pos",[39,105285,105286],{},"0 0 0.2","，观察 ",[39,105289,105235],{}," 如何变化。",[14,105292,103591],{"id":103590},[198,105294,105296],{"id":105295},"xml-error-schema-violation",[39,105297,105298],{},"XML Error: Schema violation",[19,105300,105301],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[198,105303,105305,82436,105307],{"id":105304},"mj_name2id-返回-1",[39,105306,105048],{},[39,105308,105052],{},[19,105310,105311,105312,105315],{},"说明名字没有找到。检查 XML 中 ",[39,105313,105314],{},"name=\"...\"","，并确认对象类型正确。",[198,105317,105318],{"id":105318},"物体不下落",[19,105320,103661],{},[26,105322,105323,105328,105333],{},[29,105324,105325,105326],{},"body 是否有 ",[39,105327,102758],{},[29,105329,105330,105331],{},"gravity 是否为 ",[39,105332,103727],{},[29,105334,105335,105336,105338],{},"body 是否被固定在 ",[39,105337,102979],{}," 中",[198,105340,105341],{"id":105341},"坐标看起来不符合预期",[19,105343,105344],{},"先区分两种坐标：",[458,105346,105347,105356],{},[461,105348,105349],{},[464,105350,105351,105354],{},[467,105352,105353],{"align":24906},"坐标",[467,105355,101845],{"align":24906},[474,105357,105358,105368],{},[464,105359,105360,105365],{},[479,105361,105362,105363],{"align":24906},"XML 里的 ",[39,105364,105283],{},[479,105366,105367],{"align":24906},"相对父 body 的局部坐标",[464,105369,105370,105376],{},[479,105371,105372,26142,105374],{"align":24906},[39,105373,102217],{},[39,105375,105129],{},[479,105377,105378],{"align":24906},"仿真更新后的世界坐标",[19,105380,105381,105382,105384,105385,83685,105388,105390],{},"如果你修改了 ",[39,105383,102208],{},"，但还没调用 ",[39,105386,105387],{},"mj_forward",[39,105389,102353],{},"，世界坐标可能还没有更新。",[14,105392,103745],{"id":103744},[19,105394,105395],{},"MJCF 建模先掌握四件事：",[26,105397,105398,105403,105408,105413],{},[29,105399,105400,105402],{},[39,105401,52949],{}," 表示刚体层级。",[29,105404,105405,105407],{},[39,105406,102258],{}," 表示形状、碰撞和质量。",[29,105409,105410,105412],{},[39,105411,104093],{}," 决定 body 能不能动、怎么动。",[29,105414,105415,105417],{},[39,105416,104347],{}," 用来标记关键点，方便 Python 读取位置。",[19,105419,105420],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1222,105422,105423],{},"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":66,"searchDepth":98,"depth":98,"links":105425},[105426,105427,105428,105434,105438,105439,105440,105447],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":105429},[105430,105431,105432,105433],{"id":104097,"depth":106,"text":104097},{"id":104211,"depth":106,"text":104211},{"id":104237,"depth":106,"text":104238},{"id":104341,"depth":106,"text":104342},{"id":102390,"depth":98,"text":102391,"children":105435},[105436,105437],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":105441},[105442,105443,105445,105446],{"id":105295,"depth":106,"text":105298},{"id":105304,"depth":106,"text":105444},"mj_name2id 返回 -1",{"id":105318,"depth":106,"text":105318},{"id":105341,"depth":106,"text":105341},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103792,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105454,"title":105455,"body":105456,"description":66,"extension":1250,"meta":106949,"navigation":1252,"path":106950,"seo":106951,"stem":106952,"__hash__":106953},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105457,"toc":106921},[105458,105461,105463,105466,105469,105506,105509,105515,105518,105520,105522,105548,105550,105564,105566,105607,105609,105633,105635,105638,105647,105656,105659,105668,105676,105685,105688,105698,105701,105753,105760,105766,105774,105822,105825,105844,105847,105855,105859,105868,105901,105903,106251,106253,106265,106267,106278,106280,106283,106304,106310,106313,106338,106348,106351,106359,106362,106365,106386,106397,106399,106419,106422,106443,106452,106471,106477,106502,106505,106519,106526,106550,106553,106561,106570,106586,106598,106606,106615,106617,106620,106644,106649,106652,106674,106676,106715,106717,106724,106726,106734,106737,106740,106752,106793,106800,106811,106818,106821,106870,106873,106876,106882,106884,106889,106915,106918],[10,105459,105455],{"id":105460},"_3python-控制接口读取状态与推进仿真",[14,105462,101792],{"id":101791},[19,105464,105465],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105467,105468],{},"你将学习:",[26,105470,105471,105476,105481,105485,105490,105501],{},[29,105472,105473],{},[39,105474,105475],{},"MjModel.from_xml_string",[29,105477,105478],{},[39,105479,105480],{},"MjData(model)",[29,105482,105483],{},[39,105484,102353],{},[29,105486,105487],{},[39,105488,105489],{},"mj_resetData",[29,105491,105492,105493,42,105495,42,105498],{},"读取 ",[39,105494,105167],{},[39,105496,105497],{},"qvel",[39,105499,105500],{},"ctrl",[29,105502,1188,105503],{},[39,105504,105505],{},"model.opt.timestep",[19,105507,105508],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[60,105510,105513],{"className":105511,"code":105512,"language":65,"meta":66},[63],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[39,105514,105512],{"__ignoreMap":66},[19,105516,105517],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105519,101915],{"id":101914},[19,105521,101918],{},[60,105523,105525],{"className":78,"code":105524,"language":80,"meta":66,"style":66},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[39,105526,105527],{"__ignoreMap":66},[84,105528,105529,105531,105533,105535,105537,105539,105541,105543,105545],{"class":86,"line":87},[84,105530,311],{"class":90},[84,105532,361],{"class":158},[84,105534,275],{"class":158},[84,105536,27559],{"class":94},[84,105538,328],{"class":158},[84,105540,331],{"class":158},[84,105542,103639],{"class":158},[84,105544,101958],{"class":158},[84,105546,105547],{"class":158}," glfw\n",[19,105549,103956],{},[60,105551,105552],{"className":78,"code":102057,"language":80,"meta":66,"style":66},[39,105553,105554],{"__ignoreMap":66},[84,105555,105556,105558,105560,105562],{"class":86,"line":87},[84,105557,246],{"class":90},[84,105559,275],{"class":158},[84,105561,102068],{"class":158},[84,105563,102071],{"class":158},[19,105565,103973],{},[60,105567,105569],{"className":78,"code":105568,"language":80,"meta":66,"style":66},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[39,105570,105571,105588,105597],{"__ignoreMap":66},[84,105572,105573,105575,105577,105579,105582,105584,105586],{"class":86,"line":87},[84,105574,31487],{"class":90},[84,105576,30333],{"class":158},[84,105578,26279],{"class":94},[84,105580,105581],{"class":158}," mujoco-python-api",[84,105583,102113],{"class":158},[84,105585,102116],{"class":94},[84,105587,102119],{"class":94},[84,105589,105590,105592,105594],{"class":86,"line":98},[84,105591,31487],{"class":90},[84,105593,102126],{"class":158},[84,105595,105596],{"class":158}," mujoco-python-api\n",[84,105598,105599,105601,105603,105605],{"class":86,"line":106},[84,105600,246],{"class":90},[84,105602,275],{"class":158},[84,105604,102068],{"class":158},[84,105606,102071],{"class":158},[19,105608,102142],{},[26,105610,105611,105618,105627],{},[29,105612,105613,102156,105615,105617],{},[39,105614,101820],{},[39,105616,101825],{}," 是官方 Python bindings 的类名。",[29,105619,105620,105621,105624,105625,55],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[39,105622,105623],{},"mjModel"," 在 Python 中是 ",[39,105626,101854],{},[29,105628,105629,105630,55],{},"不要使用 ",[39,105631,105632],{},"sim = mujoco_py.MjSim(...)",[14,105634,102183],{"id":102182},[19,105636,105637],{},"仿真推进核心代码:",[60,105639,105641],{"className":121,"code":105640,"language":91,"meta":66,"style":66},"mujoco.mj_step(model, data)\n",[39,105642,105643],{"__ignoreMap":66},[84,105644,105645],{"class":86,"line":87},[84,105646,105640],{"class":154},[19,105648,105649,105650,42,105652,42,105654,55],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[39,105651,102208],{},[39,105653,102211],{},[39,105655,102205],{},[19,105657,105658],{},"重置仿真:",[60,105660,105662],{"className":121,"code":105661,"language":91,"meta":66,"style":66},"mujoco.mj_resetData(model, data)\n",[39,105663,105664],{"__ignoreMap":66},[84,105665,105666],{"class":86,"line":87},[84,105667,105661],{"class":154},[19,105669,105670,105671,83685,105673,105675],{},"如果手动修改了 ",[39,105672,102208],{},[39,105674,102211],{},"，通常应调用:",[60,105677,105679],{"className":121,"code":105678,"language":91,"meta":66,"style":66},"mujoco.mj_forward(model, data)\n",[39,105680,105681],{"__ignoreMap":66},[84,105682,105683],{"class":86,"line":87},[84,105684,105678],{"class":154},[19,105686,105687],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[198,105689,105691,42,105693,42,105695,105697],{"id":105690},"qposqvelctrl-是什么",[39,105692,105167],{},[39,105694,105497],{},[39,105696,105500],{}," 是什么",[19,105699,105700],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[458,105702,105703,105715],{},[461,105704,105705],{},[464,105706,105707,105710,105712],{},[467,105708,105709],{"align":24906},"字段",[467,105711,101845],{"align":24906},[467,105713,105714],{"align":24906},"谁来修改",[474,105716,105717,105729,105741],{},[464,105718,105719,105723,105726],{},[479,105720,105721],{"align":24906},[39,105722,102208],{},[479,105724,105725],{"align":24906},"广义位置，例如小车位置、关节角、自由物体位置姿态",[479,105727,105728],{"align":24906},"MuJoCo 更新，也可以手动设置初始状态",[464,105730,105731,105735,105738],{},[479,105732,105733],{"align":24906},[39,105734,102211],{},[479,105736,105737],{"align":24906},"广义速度，例如小车速度、关节角速度",[479,105739,105740],{"align":24906},"MuJoCo 更新，也可以手动清零",[464,105742,105743,105747,105750],{},[479,105744,105745],{"align":24906},[39,105746,102214],{},[479,105748,105749],{"align":24906},"actuator 的控制输入",[479,105751,105752],{"align":24906},"主要由你的控制代码写入",[19,105754,10197,105755,102156,105757,105759],{},[39,105756,105167],{},[39,105758,105497],{}," 不一定同维。自由刚体就是典型例子：",[60,105761,105764],{"className":105762,"code":105763,"language":65,"meta":66},[63],"freejoint: qpos 7 维，qvel 6 维\n",[39,105765,105763],{"__ignoreMap":66},[198,105767,105769,102156,105771,105773],{"id":105768},"mj_step-和-mj_forward-的区别",[39,105770,102353],{},[39,105772,105387],{}," 的区别",[458,105775,105776,105789],{},[461,105777,105778],{},[464,105779,105780,105783,105786],{},[467,105781,105782],{"align":24906},"函数",[467,105784,105785],{"align":24906},"是否推进时间",[467,105787,105788],{"align":24906},"什么时候用",[474,105790,105791,105804],{},[464,105792,105793,105798,105801],{},[479,105794,105795],{"align":24906},[39,105796,105797],{},"mj_step(model, data)",[479,105799,105800],{"align":24906},"是",[479,105802,105803],{"align":24906},"正常仿真循环，每调用一次前进一步",[464,105805,105806,105811,105814],{},[479,105807,105808],{"align":24906},[39,105809,105810],{},"mj_forward(model, data)",[479,105812,105813],{"align":24906},"否",[479,105815,105816,105817,42,105819,105821],{"align":24906},"手动改了 ",[39,105818,105167],{},[39,105820,105497],{}," 后，刷新派生量",[19,105823,105824],{},"例如你写：",[60,105826,105828],{"className":121,"code":105827,"language":91,"meta":66,"style":66},"data.qpos[2] = 2.0\n",[39,105829,105830],{"__ignoreMap":66},[84,105831,105832,105835,105837,105839,105841],{"class":86,"line":87},[84,105833,105834],{"class":154},"data.qpos[",[84,105836,1397],{"class":94},[84,105838,5620],{"class":154},[84,105840,867],{"class":129},[84,105842,105843],{"class":94}," 2.0\n",[19,105845,105846],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[60,105848,105849],{"className":121,"code":105678,"language":91,"meta":66,"style":66},[39,105850,105851],{"__ignoreMap":66},[84,105852,105853],{"class":86,"line":87},[84,105854,105678],{"class":154},[198,105856,105858],{"id":105857},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105860,105861,105864,105865,105867],{},[39,105862,105863],{},"mujoco.mj_resetData(model, data)"," 会把 ",[39,105866,34553],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[60,105869,105871],{"className":121,"code":105870,"language":91,"meta":66,"style":66},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[39,105872,105873,105877,105887,105897],{"__ignoreMap":66},[84,105874,105875],{"class":86,"line":87},[84,105876,105661],{"class":154},[84,105878,105879,105882,105884],{"class":86,"line":98},[84,105880,105881],{"class":154},"data.qpos[:] ",[84,105883,867],{"class":129},[84,105885,105886],{"class":154}," random_qpos\n",[84,105888,105889,105892,105894],{"class":86,"line":106},[84,105890,105891],{"class":154},"data.qvel[:] ",[84,105893,867],{"class":129},[84,105895,105896],{"class":94}," 0.0\n",[84,105898,105899],{"class":86,"line":112},[84,105900,105678],{"class":154},[14,105902,102391],{"id":102390},[60,105904,105906],{"className":121,"code":105905,"language":91,"meta":66,"style":66},"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",[39,105907,105908,105914,105924,105928,105932,105940,105945,105949,105953,105957,105962,105966,105971,105976,105981,105985,105989,105993,105997,106001,106005,106024,106031,106043,106054,106070,106086,106090,106094,106106,106118,106126,106130,106141,106145,106161,106165,106169,106178,106182,106187,106196,106200,106213,106218,106227,106231,106235,106247],{"__ignoreMap":66},[84,105909,105910,105912],{"class":86,"line":87},[84,105911,31547],{"class":129},[84,105913,102439],{"class":154},[84,105915,105916,105918,105920,105922],{"class":86,"line":98},[84,105917,31547],{"class":129},[84,105919,32534],{"class":154},[84,105921,1157],{"class":129},[84,105923,32539],{"class":154},[84,105925,105926],{"class":86,"line":106},[84,105927,3578],{"emptyLinePlaceholder":1252},[84,105929,105930],{"class":86,"line":112},[84,105931,3578],{"emptyLinePlaceholder":1252},[84,105933,105934,105936,105938],{"class":86,"line":425},[84,105935,102452],{"class":94},[84,105937,14735],{"class":129},[84,105939,102457],{"class":158},[84,105941,105942],{"class":86,"line":2395},[84,105943,105944],{"class":158},"\u003Cmujoco model=\"state_api\">\n",[84,105946,105947],{"class":86,"line":2401},[84,105948,102467],{"class":158},[84,105950,105951],{"class":86,"line":2492},[84,105952,3578],{"emptyLinePlaceholder":1252},[84,105954,105955],{"class":86,"line":2498},[84,105956,102476],{"class":158},[84,105958,105959],{"class":86,"line":2510},[84,105960,105961],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[84,105963,105964],{"class":86,"line":2793},[84,105965,3578],{"emptyLinePlaceholder":1252},[84,105967,105968],{"class":86,"line":2798},[84,105969,105970],{"class":158},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[84,105972,105973],{"class":86,"line":2804},[84,105974,105975],{"class":158},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[84,105977,105978],{"class":86,"line":2809},[84,105979,105980],{"class":158},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[84,105982,105983],{"class":86,"line":2823},[84,105984,102505],{"class":158},[84,105986,105987],{"class":86,"line":2828},[84,105988,102510],{"class":158},[84,105990,105991],{"class":86,"line":2834},[84,105992,102515],{"class":158},[84,105994,105995],{"class":86,"line":2855},[84,105996,96844],{"class":158},[84,105998,105999],{"class":86,"line":2860},[84,106000,3578],{"emptyLinePlaceholder":1252},[84,106002,106003],{"class":86,"line":2874},[84,106004,3578],{"emptyLinePlaceholder":1252},[84,106006,106007,106009,106012,106015,106017,106020,106022],{"class":86,"line":2879},[84,106008,33100],{"class":129},[84,106010,106011],{"class":90}," print_state",[84,106013,106014],{"class":154},"(prefix: ",[84,106016,2480],{"class":94},[84,106018,106019],{"class":154},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[84,106021,96832],{"class":94},[84,106023,4917],{"class":154},[84,106025,106026,106028],{"class":86,"line":2908},[84,106027,32453],{"class":94},[84,106029,106030],{"class":154},"(prefix)\n",[84,106032,106033,106035,106037,106040],{"class":86,"line":2913},[84,106034,32453],{"class":94},[84,106036,155],{"class":154},[84,106038,106039],{"class":158},"\"  timestep:\"",[84,106041,106042],{"class":154},", model.opt.timestep)\n",[84,106044,106045,106047,106049,106052],{"class":86,"line":2930},[84,106046,32453],{"class":94},[84,106048,155],{"class":154},[84,106050,106051],{"class":158},"\"  time:\"",[84,106053,102616],{"class":154},[84,106055,106056,106058,106060,106063,106066,106068],{"class":86,"line":2935},[84,106057,32453],{"class":94},[84,106059,155],{"class":154},[84,106061,106062],{"class":158},"\"  qpos:\"",[84,106064,106065],{"class":154},", np.round(data.qpos.copy(), ",[84,106067,1604],{"class":94},[84,106069,31651],{"class":154},[84,106071,106072,106074,106076,106079,106082,106084],{"class":86,"line":2940},[84,106073,32453],{"class":94},[84,106075,155],{"class":154},[84,106077,106078],{"class":158},"\"  qvel:\"",[84,106080,106081],{"class":154},", np.round(data.qvel.copy(), ",[84,106083,1604],{"class":94},[84,106085,31651],{"class":154},[84,106087,106088],{"class":86,"line":2945},[84,106089,3578],{"emptyLinePlaceholder":1252},[84,106091,106092],{"class":86,"line":2959},[84,106093,3578],{"emptyLinePlaceholder":1252},[84,106095,106096,106098,106100,106102,106104],{"class":86,"line":2964},[84,106097,33100],{"class":129},[84,106099,3153],{"class":90},[84,106101,102536],{"class":154},[84,106103,96832],{"class":94},[84,106105,4917],{"class":154},[84,106107,106108,106110,106112,106114,106116],{"class":86,"line":3755},[84,106109,102545],{"class":154},[84,106111,867],{"class":129},[84,106113,102550],{"class":154},[84,106115,102452],{"class":94},[84,106117,162],{"class":154},[84,106119,106120,106122,106124],{"class":86,"line":3769},[84,106121,102559],{"class":154},[84,106123,867],{"class":129},[84,106125,102564],{"class":154},[84,106127,106128],{"class":86,"line":3777},[84,106129,3578],{"emptyLinePlaceholder":1252},[84,106131,106132,106135,106138],{"class":86,"line":3782},[84,106133,106134],{"class":154},"    print_state(",[84,106136,106137],{"class":158},"\"initial\"",[84,106139,106140],{"class":154},", model, data)\n",[84,106142,106143],{"class":86,"line":3788},[84,106144,3578],{"emptyLinePlaceholder":1252},[84,106146,106147,106149,106151,106153,106155,106157,106159],{"class":86,"line":3794},[84,106148,4379],{"class":129},[84,106150,102639],{"class":154},[84,106152,27206],{"class":129},[84,106154,33596],{"class":94},[84,106156,155],{"class":154},[84,106158,1964],{"class":94},[84,106160,31940],{"class":154},[84,106162,106163],{"class":86,"line":3799},[84,106164,102654],{"class":154},[84,106166,106167],{"class":86,"line":9120},[84,106168,3578],{"emptyLinePlaceholder":1252},[84,106170,106171,106173,106176],{"class":86,"line":9144},[84,106172,106134],{"class":154},[84,106174,106175],{"class":158},"\"after 50 steps\"",[84,106177,106140],{"class":154},[84,106179,106180],{"class":86,"line":9149},[84,106181,3578],{"emptyLinePlaceholder":1252},[84,106183,106184],{"class":86,"line":9155},[84,106185,106186],{"class":154},"    mujoco.mj_resetData(model, data)\n",[84,106188,106189,106191,106194],{"class":86,"line":9182},[84,106190,106134],{"class":154},[84,106192,106193],{"class":158},"\"after reset\"",[84,106195,106140],{"class":154},[84,106197,106198],{"class":86,"line":9187},[84,106199,3578],{"emptyLinePlaceholder":1252},[84,106201,106202,106205,106207,106209,106211],{"class":86,"line":9193},[84,106203,106204],{"class":154},"    data.qpos[",[84,106206,1397],{"class":94},[84,106208,5620],{"class":154},[84,106210,867],{"class":129},[84,106212,105843],{"class":94},[84,106214,106215],{"class":86,"line":9205},[84,106216,106217],{"class":154},"    mujoco.mj_forward(model, data)\n",[84,106219,106220,106222,106225],{"class":86,"line":9217},[84,106221,106134],{"class":154},[84,106223,106224],{"class":158},"\"after manual qpos edit\"",[84,106226,106140],{"class":154},[84,106228,106229],{"class":86,"line":9229},[84,106230,3578],{"emptyLinePlaceholder":1252},[84,106232,106233],{"class":86,"line":10888},[84,106234,3578],{"emptyLinePlaceholder":1252},[84,106236,106237,106239,106241,106243,106245],{"class":86,"line":10913},[84,106238,2712],{"class":129},[84,106240,32374],{"class":94},[84,106242,102697],{"class":129},[84,106244,102700],{"class":158},[84,106246,4917],{"class":154},[84,106248,106249],{"class":86,"line":10936},[84,106250,102707],{"class":154},[19,106252,104707],{},[60,106254,106256],{"className":78,"code":106255,"language":80,"meta":66,"style":66},"touch ch3_python_state.py\n",[39,106257,106258],{"__ignoreMap":66},[84,106259,106260,106262],{"class":86,"line":87},[84,106261,102421],{"class":90},[84,106263,106264],{"class":158}," ch3_python_state.py\n",[19,106266,103439],{},[60,106268,106270],{"className":78,"code":106269,"language":80,"meta":66,"style":66},"python ch3_python_state.py\n",[39,106271,106272],{"__ignoreMap":66},[84,106273,106274,106276],{"class":86,"line":87},[84,106275,91],{"class":90},[84,106277,106264],{"class":158},[198,106279,102710],{"id":102710},[19,106281,106282],{},"打印状态的函数：",[60,106284,106286],{"className":121,"code":106285,"language":91,"meta":66,"style":66},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[39,106287,106288],{"__ignoreMap":66},[84,106289,106290,106292,106294,106296,106298,106300,106302],{"class":86,"line":87},[84,106291,33100],{"class":129},[84,106293,106011],{"class":90},[84,106295,106014],{"class":154},[84,106297,2480],{"class":94},[84,106299,106019],{"class":154},[84,106301,96832],{"class":94},[84,106303,4917],{"class":154},[19,106305,106306,106307,106309],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[39,106308,34553],{}," 里发生了什么。",[19,106311,106312],{},"推进 50 步：",[60,106314,106316],{"className":121,"code":106315,"language":91,"meta":66,"style":66},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[39,106317,106318,106334],{"__ignoreMap":66},[84,106319,106320,106322,106324,106326,106328,106330,106332],{"class":86,"line":87},[84,106321,4203],{"class":129},[84,106323,102639],{"class":154},[84,106325,27206],{"class":129},[84,106327,33596],{"class":94},[84,106329,155],{"class":154},[84,106331,1964],{"class":94},[84,106333,31940],{"class":154},[84,106335,106336],{"class":86,"line":98},[84,106337,102837],{"class":154},[19,106339,106340,106341,106344,106345,106347],{},"由于 ",[39,106342,106343],{},"timestep=0.01","，所以 50 步后时间约为 ",[39,106346,36481],{}," 秒。",[19,106349,106350],{},"重置：",[60,106352,106353],{"className":121,"code":105661,"language":91,"meta":66,"style":66},[39,106354,106355],{"__ignoreMap":66},[84,106356,106357],{"class":86,"line":87},[84,106358,105661],{"class":154},[19,106360,106361],{},"这会把时间、位置、速度恢复到初始状态。",[19,106363,106364],{},"手动改高度：",[60,106366,106368],{"className":121,"code":106367,"language":91,"meta":66,"style":66},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[39,106369,106370,106382],{"__ignoreMap":66},[84,106371,106372,106374,106376,106378,106380],{"class":86,"line":87},[84,106373,105834],{"class":154},[84,106375,1397],{"class":94},[84,106377,5620],{"class":154},[84,106379,867],{"class":129},[84,106381,105843],{"class":94},[84,106383,106384],{"class":86,"line":98},[84,106385,105678],{"class":154},[19,106387,106388,106389,106392,106393,106396],{},"这个例子里 ",[39,106390,106391],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[39,106394,106395],{},"2.0"," 表示把小球放到更高的位置。",[198,106398,102846],{"id":102846},[60,106400,106401],{"className":121,"code":106285,"language":91,"meta":66,"style":66},[39,106402,106403],{"__ignoreMap":66},[84,106404,106405,106407,106409,106411,106413,106415,106417],{"class":86,"line":87},[84,106406,33100],{"class":129},[84,106408,106011],{"class":90},[84,106410,106014],{"class":154},[84,106412,2480],{"class":94},[84,106414,106019],{"class":154},[84,106416,96832],{"class":94},[84,106418,4917],{"class":154},[19,106420,106421],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,106423,106424,106433,106438],{},[29,106425,106426,106429,106430,106432],{},[39,106427,106428],{},"prefix","：一段文字，比如 ",[39,106431,106137],{},"，用来说明现在打印的是哪个阶段。",[29,106434,106435,106437],{},[39,106436,103223],{},"：MuJoCo 模型。",[29,106439,106440,106442],{},[39,106441,34553],{},"：MuJoCo 当前状态。",[19,106444,106445,42,106448,106451],{},[39,106446,106447],{},"prefix: str",[39,106449,106450],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[60,106453,106455],{"className":121,"code":106454,"language":91,"meta":66,"style":66},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[39,106456,106457],{"__ignoreMap":66},[84,106458,106459,106461,106463,106465,106467,106469],{"class":86,"line":87},[84,106460,730],{"class":94},[84,106462,155],{"class":154},[84,106464,106062],{"class":158},[84,106466,106065],{"class":154},[84,106468,1604],{"class":94},[84,106470,31651],{"class":154},[19,106472,106473,106476],{},[39,106474,106475],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[60,106478,106480],{"className":121,"code":106479,"language":91,"meta":66,"style":66},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[39,106481,106482,106494],{"__ignoreMap":66},[84,106483,106484,106486,106488,106490,106492],{"class":86,"line":87},[84,106485,102772],{"class":154},[84,106487,867],{"class":129},[84,106489,102550],{"class":154},[84,106491,102452],{"class":94},[84,106493,162],{"class":154},[84,106495,106496,106498,106500],{"class":86,"line":98},[84,106497,102796],{"class":154},[84,106499,867],{"class":129},[84,106501,102564],{"class":154},[19,106503,106504],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[60,106506,106508],{"className":121,"code":106507,"language":91,"meta":66,"style":66},"print_state(\"initial\", model, data)\n",[39,106509,106510],{"__ignoreMap":66},[84,106511,106512,106515,106517],{"class":86,"line":87},[84,106513,106514],{"class":154},"print_state(",[84,106516,106137],{"class":158},[84,106518,106140],{"class":154},[19,106520,106521,106522,106525],{},"调用刚才定义的 ",[39,106523,106524],{},"print_state"," 函数，打印初始状态。",[60,106527,106528],{"className":121,"code":106315,"language":91,"meta":66,"style":66},[39,106529,106530,106546],{"__ignoreMap":66},[84,106531,106532,106534,106536,106538,106540,106542,106544],{"class":86,"line":87},[84,106533,4203],{"class":129},[84,106535,102639],{"class":154},[84,106537,27206],{"class":129},[84,106539,33596],{"class":94},[84,106541,155],{"class":154},[84,106543,1964],{"class":94},[84,106545,31940],{"class":154},[84,106547,106548],{"class":86,"line":98},[84,106549,102837],{"class":154},[19,106551,106552],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[60,106554,106555],{"className":121,"code":105661,"language":91,"meta":66,"style":66},[39,106556,106557],{"__ignoreMap":66},[84,106558,106559],{"class":86,"line":87},[84,106560,105661],{"class":154},[19,106562,106563,106564,106566,106567,106569],{},"重置 ",[39,106565,34553],{},"。注意它不会重新创建 ",[39,106568,103223],{},"，因为模型结构没有变，只是状态回到初始值。",[60,106571,106572],{"className":121,"code":105827,"language":91,"meta":66,"style":66},[39,106573,106574],{"__ignoreMap":66},[84,106575,106576,106578,106580,106582,106584],{"class":86,"line":87},[84,106577,105834],{"class":154},[84,106579,1397],{"class":94},[84,106581,5620],{"class":154},[84,106583,867],{"class":129},[84,106585,105843],{"class":94},[19,106587,106588,106589,42,106592,42,106595,106597],{},"这行是“手动改状态”。在 freejoint 中，",[39,106590,106591],{},"qpos[0]",[39,106593,106594],{},"qpos[1]",[39,106596,106391],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[60,106599,106600],{"className":121,"code":105678,"language":91,"meta":66,"style":66},[39,106601,106602],{"__ignoreMap":66},[84,106603,106604],{"class":86,"line":87},[84,106605,105678],{"class":154},[19,106607,106608,106609,106611,106612,106614],{},"手动改完 ",[39,106610,105167],{}," 后，调用 ",[39,106613,105387],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106616,103454],{"id":103453},[19,106618,106619],{},"你会看到:",[26,106621,106622,106627,106632,106635],{},[29,106623,106624,106625],{},"初始时间为 ",[39,106626,1504],{},[29,106628,106629,106630],{},"50 步后时间约为 ",[39,106631,36481],{},[29,106633,106634],{},"reset 后状态恢复",[29,106636,106637,106638,106641,106642],{},"手动修改 ",[39,106639,106640],{},"data.qpos[2]"," 后，小球高度变为 ",[39,106643,106395],{},[19,106645,106646,106648],{},[39,106647,106391],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106650,106651],{},"输出里可以重点看三件事：",[26,106653,106654,106662,106667],{},[29,106655,106656,106658,106659,106661],{},[39,106657,3565],{}," 是否随着 ",[39,106660,102353],{}," 增加。",[29,106663,106664,106666],{},[39,106665,105167],{}," 的 z 坐标是否因为下落而变化。",[29,106668,106669,106671,106672,55],{},[39,106670,105489],{}," 后时间是否回到 ",[39,106673,1504],{},[14,106675,103486],{"id":103485},[26,106677,106678,106684,106690,106696,106699,106708],{},[29,106679,106680,106681,55],{},"修改 timestep 为 ",[39,106682,106683],{},"0.005",[29,106685,106686,106687,55],{},"重新运行，检查 50 步后时间是否约为 ",[39,106688,106689],{},"0.25",[29,106691,106692,106693,55],{},"修改重力为 ",[39,106694,106695],{},"0 0 -1.0",[29,106697,106698],{},"观察小球下降速度是否变慢。",[29,106700,103549,106701,103552,106704,106707],{},[39,106702,106703],{},"data.qpos[2] = 2.0",[39,106705,106706],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,106709,106710,106711,106714],{},"注释掉 ",[39,106712,106713],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106716,103591],{"id":103590},[198,106718,106720,106721,106723],{"id":106719},"修改-dataqpos-后位置没有更新","修改 ",[39,106722,102208],{}," 后位置没有更新",[19,106725,103600],{},[60,106727,106728],{"className":121,"code":105678,"language":91,"meta":66,"style":66},[39,106729,106730],{"__ignoreMap":66},[84,106731,106732],{"class":86,"line":87},[84,106733,105678],{"class":154},[198,106735,106736],{"id":106736},"数组维度看不懂",[19,106738,106739],{},"打印模型维度:",[60,106741,106743],{"className":121,"code":106742,"language":91,"meta":66,"style":66},"print(model.nq, model.nv, model.nu)\n",[39,106744,106745],{"__ignoreMap":66},[84,106746,106747,106749],{"class":86,"line":87},[84,106748,730],{"class":94},[84,106750,106751],{"class":154},"(model.nq, model.nv, model.nu)\n",[458,106753,106754,106762],{},[461,106755,106756],{},[464,106757,106758,106760],{},[467,106759,105709],{"align":24906},[467,106761,101845],{"align":24906},[474,106763,106764,106774,106784],{},[464,106765,106766,106771],{},[479,106767,106768],{"align":24906},[39,106769,106770],{},"nq",[479,106772,106773],{"align":24906},"位置变量数量",[464,106775,106776,106781],{},[479,106777,106778],{"align":24906},[39,106779,106780],{},"nv",[479,106782,106783],{"align":24906},"速度变量数量",[464,106785,106786,106790],{},[479,106787,106788],{"align":24906},[39,106789,103300],{},[479,106791,106792],{"align":24906},"控制输入数量",[198,106794,106796,106797,106799],{"id":106795},"误以为-qpos-一定等于关节数","误以为 ",[39,106798,105167],{}," 一定等于关节数",[19,106801,106802,106803,83676,106805,106807,106808,106810],{},"不是。例如 ",[39,106804,102758],{},[39,106806,105167],{}," 是 7 维，但 ",[39,106809,105497],{}," 是 6 维。",[198,106812,106814,106815,106817],{"id":106813},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[39,106816,105167],{}," 的第几位",[19,106819,106820],{},"初学时可以先打印：",[60,106822,106824],{"className":121,"code":106823,"language":91,"meta":66,"style":66},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[39,106825,106826,106836,106846,106858],{"__ignoreMap":66},[84,106827,106828,106830,106832,106834],{"class":86,"line":87},[84,106829,730],{"class":94},[84,106831,155],{"class":154},[84,106833,102577],{"class":158},[84,106835,102580],{"class":154},[84,106837,106838,106840,106842,106844],{"class":86,"line":98},[84,106839,730],{"class":94},[84,106841,155],{"class":154},[84,106843,102589],{"class":158},[84,106845,102592],{"class":154},[84,106847,106848,106850,106852,106855],{"class":86,"line":106},[84,106849,730],{"class":94},[84,106851,155],{"class":154},[84,106853,106854],{"class":158},"\"qpos:\"",[84,106856,106857],{"class":154},", data.qpos)\n",[84,106859,106860,106862,106864,106867],{"class":86,"line":112},[84,106861,730],{"class":94},[84,106863,155],{"class":154},[84,106865,106866],{"class":158},"\"qvel:\"",[84,106868,106869],{"class":154},", data.qvel)\n",[19,106871,106872],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[198,106874,106875],{"id":106875},"仿真结果每次都一样",[19,106877,106878,106879,106881],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[39,106880,105167],{},"、目标点或控制输入。",[14,106883,103745],{"id":103744},[19,106885,106886,106887,720],{},"Python 控制 MuJoCo 的核心就是读写 ",[39,106888,34553],{},[26,106890,106891,106899,106904,106909],{},[29,106892,106893,106894,102156,106896,106898],{},"用 ",[39,106895,102208],{},[39,106897,102211],{}," 读取状态。",[29,106900,106893,106901,106903],{},[39,106902,102214],{}," 写入控制。",[29,106905,106893,106906,106908],{},[39,106907,102353],{}," 推进时间。",[29,106910,106911,106912,106914],{},"手动改状态后用 ",[39,106913,105387],{}," 刷新派生量。",[19,106916,106917],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1222,106919,106920],{},"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":66,"searchDepth":98,"depth":98,"links":106922},[106923,106924,106925,106932,106936,106937,106938,106948],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":106926},[106927,106929,106931],{"id":105690,"depth":106,"text":106928},"qpos、qvel、ctrl 是什么",{"id":105768,"depth":106,"text":106930},"mj_step 和 mj_forward 的区别",{"id":105857,"depth":106,"text":105858},{"id":102390,"depth":98,"text":102391,"children":106933},[106934,106935],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":106939},[106940,106942,106943,106945,106947],{"id":106719,"depth":106,"text":106941},"修改 data.qpos 后位置没有更新",{"id":106736,"depth":106,"text":106736},{"id":106795,"depth":106,"text":106944},"误以为 qpos 一定等于关节数",{"id":106813,"depth":106,"text":106946},"不知道某个元素在 qpos 的第几位",{"id":106875,"depth":106,"text":106875},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105455,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106955,"title":106956,"body":106957,"description":66,"extension":1250,"meta":108647,"navigation":1252,"path":108648,"seo":108649,"stem":108650,"__hash__":108651},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106958,"toc":108623},[106959,106962,106964,106967,106969,106994,106997,107016,107019,107021,107023,107047,107049,107063,107065,107106,107108,107132,107134,107137,107171,107173,107186,107189,107257,107266,107270,107273,107307,107313,107316,107320,107359,107362,107382,107386,107429,107431,107460,107463,107469,107472,107474,107868,107870,107882,107884,107895,107897,107900,107929,107937,107940,107975,107978,107980,107988,107991,107993,108004,108014,108034,108037,108073,108085,108133,108152,108194,108207,108235,108240,108261,108271,108289,108292,108326,108329,108349,108352,108371,108377,108379,108382,108388,108394,108404,108407,108413,108422,108424,108470,108472,108478,108484,108487,108490,108510,108513,108519,108525,108527,108550,108553,108556,108565,108568,108606,108608,108611,108617,108620],[10,106960,106956],{"id":106961},"_4关节actuator-与力控制",[14,106963,101792],{"id":101791},[19,106965,106966],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106968,105468],{},[26,106970,106971,106977,106982,106986,106991],{},[29,106972,106973,106976],{},[39,106974,106975],{},"hinge"," 关节",[29,106978,106979],{},[39,106980,106981],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,106983,106984],{},[39,106985,102214],{},[29,106987,106988],{},[39,106989,106990],{},"ctrlrange",[29,106992,106993],{},"读取关节角和角速度",[19,106995,106996],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[60,106998,107000],{"className":121,"code":106999,"language":91,"meta":66,"style":66},"data.ctrl[0] = ...\n",[39,107001,107002],{"__ignoreMap":66},[84,107003,107004,107007,107009,107011,107013],{"class":86,"line":87},[84,107005,107006],{"class":154},"data.ctrl[",[84,107008,1504],{"class":94},[84,107010,5620],{"class":154},[84,107012,867],{"class":129},[84,107014,107015],{"class":94}," ...\n",[19,107017,107018],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107020,101915],{"id":101914},[19,107022,101918],{},[60,107024,107025],{"className":78,"code":105524,"language":80,"meta":66,"style":66},[39,107026,107027],{"__ignoreMap":66},[84,107028,107029,107031,107033,107035,107037,107039,107041,107043,107045],{"class":86,"line":87},[84,107030,311],{"class":90},[84,107032,361],{"class":158},[84,107034,275],{"class":158},[84,107036,27559],{"class":94},[84,107038,328],{"class":158},[84,107040,331],{"class":158},[84,107042,103639],{"class":158},[84,107044,101958],{"class":158},[84,107046,105547],{"class":158},[19,107048,103956],{},[60,107050,107051],{"className":78,"code":102057,"language":80,"meta":66,"style":66},[39,107052,107053],{"__ignoreMap":66},[84,107054,107055,107057,107059,107061],{"class":86,"line":87},[84,107056,246],{"class":90},[84,107058,275],{"class":158},[84,107060,102068],{"class":158},[84,107062,102071],{"class":158},[19,107064,103973],{},[60,107066,107068],{"className":78,"code":107067,"language":80,"meta":66,"style":66},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[39,107069,107070,107087,107096],{"__ignoreMap":66},[84,107071,107072,107074,107076,107078,107081,107083,107085],{"class":86,"line":87},[84,107073,31487],{"class":90},[84,107075,30333],{"class":158},[84,107077,26279],{"class":94},[84,107079,107080],{"class":158}," mujoco-control",[84,107082,102113],{"class":158},[84,107084,102116],{"class":94},[84,107086,102119],{"class":94},[84,107088,107089,107091,107093],{"class":86,"line":98},[84,107090,31487],{"class":90},[84,107092,102126],{"class":158},[84,107094,107095],{"class":158}," mujoco-control\n",[84,107097,107098,107100,107102,107104],{"class":86,"line":106},[84,107099,246],{"class":90},[84,107101,275],{"class":158},[84,107103,102068],{"class":158},[84,107105,102071],{"class":158},[19,107107,102142],{},[26,107109,107110,107116,107123,107129],{},[29,107111,107112,107115],{},[39,107113,107114],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,107117,107118,107120,107121,55],{},[39,107119,102214],{}," 长度等于 ",[39,107122,103296],{},[29,107124,83368,107125,107128],{},[39,107126,107127],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,107130,107131],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107133,102183],{"id":102182},[19,107135,107136],{},"关节决定 body 如何运动:",[60,107138,107140],{"className":54216,"code":107139,"language":54218,"meta":66,"style":66},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[39,107141,107142],{"__ignoreMap":66},[84,107143,107144,107146,107148,107150,107152,107155,107157,107159,107161,107164,107166,107169],{"class":86,"line":87},[84,107145,2218],{"class":154},[84,107147,104093],{"class":52449},[84,107149,16090],{"class":90},[84,107151,867],{"class":154},[84,107153,107154],{"class":158},"\"hinge\"",[84,107156,54973],{"class":90},[84,107158,867],{"class":154},[84,107160,107154],{"class":158},[84,107162,107163],{"class":90}," axis",[84,107165,867],{"class":154},[84,107167,107168],{"class":158},"\"0 1 0\"",[84,107170,102282],{"class":154},[19,107172,104189],{},[26,107174,107175,107180,107183],{},[29,107176,107177,107178],{},"名字是 ",[39,107179,106975],{},[29,107181,107182],{},"类型是旋转关节",[29,107184,107185],{},"绕 y 轴旋转",[19,107187,107188],{},"actuator 决定如何施加控制:",[60,107190,107192],{"className":54216,"code":107191,"language":54218,"meta":66,"style":66},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[39,107193,107194,107203,107249],{"__ignoreMap":66},[84,107195,107196,107198,107201],{"class":86,"line":87},[84,107197,2218],{"class":154},[84,107199,107200],{"class":52449},"actuator",[84,107202,52456],{"class":154},[84,107204,107205,107207,107210,107212,107214,107217,107220,107222,107224,107227,107229,107231,107234,107236,107239,107242,107244,107247],{"class":86,"line":98},[84,107206,53293],{"class":154},[84,107208,107209],{"class":52449},"motor",[84,107211,16090],{"class":90},[84,107213,867],{"class":154},[84,107215,107216],{"class":158},"\"hinge_motor\"",[84,107218,107219],{"class":90}," joint",[84,107221,867],{"class":154},[84,107223,107154],{"class":158},[84,107225,107226],{"class":90}," gear",[84,107228,867],{"class":154},[84,107230,4856],{"class":158},[84,107232,107233],{"class":90}," ctrlrange",[84,107235,867],{"class":154},[84,107237,107238],{"class":158},"\"-2 2\"",[84,107240,107241],{"class":90}," ctrllimited",[84,107243,867],{"class":154},[84,107245,107246],{"class":158},"\"true\"",[84,107248,102282],{"class":154},[84,107250,107251,107253,107255],{"class":86,"line":106},[84,107252,52934],{"class":154},[84,107254,107200],{"class":52449},[84,107256,52456],{"class":154},[19,107258,107259,107262,107263,55],{},[39,107260,107261],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[39,107264,107265],{},"[-2, 2]",[198,107267,107269],{"id":107268},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107271,107272],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[458,107274,107275,107285],{},[461,107276,107277],{},[464,107278,107279,107281,107283],{},[467,107280,26916],{"align":24906},[467,107282,472],{"align":24906},[467,107284,101879],{"align":24906},[474,107286,107287,107297],{},[464,107288,107289,107291,107294],{},[479,107290,104093],{"align":24906},[479,107292,107293],{"align":24906},"定义能怎么动",[479,107295,107296],{"align":24906},"门轴允许门旋转",[464,107298,107299,107301,107304],{},[479,107300,107200],{"align":24906},[479,107302,107303],{"align":24906},"定义怎么施力或控制",[479,107305,107306],{"align":24906},"人推门、马达带动门",[19,107308,107309,107310,107312],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[39,107311,102214],{}," 主动控制它。",[19,107314,107315],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[198,107317,107319],{"id":107318},"hinge-joint","hinge joint",[60,107321,107323],{"className":54216,"code":107322,"language":54218,"meta":66,"style":66},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,107324,107325],{"__ignoreMap":66},[84,107326,107327,107329,107331,107333,107335,107337,107339,107341,107343,107345,107347,107349,107352,107354,107357],{"class":86,"line":87},[84,107328,2218],{"class":154},[84,107330,104093],{"class":52449},[84,107332,16090],{"class":90},[84,107334,867],{"class":154},[84,107336,107154],{"class":158},[84,107338,54973],{"class":90},[84,107340,867],{"class":154},[84,107342,107154],{"class":158},[84,107344,107163],{"class":90},[84,107346,867],{"class":154},[84,107348,107168],{"class":158},[84,107350,107351],{"class":90}," damping",[84,107353,867],{"class":154},[84,107355,107356],{"class":158},"\"0.1\"",[84,107358,102282],{"class":154},[19,107360,107361],{},"含义：",[26,107363,107364,107370,107376],{},[29,107365,107366,107369],{},[39,107367,107368],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,107371,107372,107375],{},[39,107373,107374],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,107377,107378,107381],{},[39,107379,107380],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[198,107383,107385],{"id":107384},"motor-actuator","motor actuator",[60,107387,107389],{"className":54216,"code":107388,"language":54218,"meta":66,"style":66},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[39,107390,107391],{"__ignoreMap":66},[84,107392,107393,107395,107397,107399,107401,107403,107405,107407,107409,107411,107413,107415,107417,107419,107421,107423,107425,107427],{"class":86,"line":87},[84,107394,2218],{"class":154},[84,107396,107209],{"class":52449},[84,107398,16090],{"class":90},[84,107400,867],{"class":154},[84,107402,107216],{"class":158},[84,107404,107219],{"class":90},[84,107406,867],{"class":154},[84,107408,107154],{"class":158},[84,107410,107226],{"class":90},[84,107412,867],{"class":154},[84,107414,4856],{"class":158},[84,107416,107233],{"class":90},[84,107418,867],{"class":154},[84,107420,107238],{"class":158},[84,107422,107241],{"class":90},[84,107424,867],{"class":154},[84,107426,107246],{"class":158},[84,107428,102282],{"class":154},[19,107430,107361],{},[26,107432,107433,107442,107448,107454],{},[29,107434,107435,107438,107439,107441],{},[39,107436,107437],{},"joint=\"hinge\"","：这个电机作用在名为 ",[39,107440,106975],{}," 的关节上。",[29,107443,107444,107447],{},[39,107445,107446],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,107449,107450,107453],{},[39,107451,107452],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,107455,107456,107459],{},[39,107457,107458],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107461,107462],{},"简单理解：",[60,107464,107467],{"className":107465,"code":107466,"language":65,"meta":66},[63],"实际施加效果 ≈ data.ctrl[0] * gear\n",[39,107468,107466],{"__ignoreMap":66},[19,107470,107471],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107473,102391],{"id":102390},[60,107475,107477],{"className":121,"code":107476,"language":91,"meta":66,"style":66},"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",[39,107478,107479,107486,107490,107496,107506,107510,107514,107522,107527,107532,107536,107540,107545,107550,107554,107559,107564,107569,107574,107578,107582,107586,107591,107596,107601,107605,107609,107613,107617,107629,107641,107649,107653,107663,107673,107683,107687,107700,107713,107717,107734,107748,107783,107787,107791,107802,107817,107832,107844,107848,107852,107864],{"__ignoreMap":66},[84,107480,107481,107483],{"class":86,"line":87},[84,107482,31547],{"class":129},[84,107484,107485],{"class":154}," math\n",[84,107487,107488],{"class":86,"line":98},[84,107489,3578],{"emptyLinePlaceholder":1252},[84,107491,107492,107494],{"class":86,"line":106},[84,107493,31547],{"class":129},[84,107495,102439],{"class":154},[84,107497,107498,107500,107502,107504],{"class":86,"line":112},[84,107499,31547],{"class":129},[84,107501,32534],{"class":154},[84,107503,1157],{"class":129},[84,107505,32539],{"class":154},[84,107507,107508],{"class":86,"line":425},[84,107509,3578],{"emptyLinePlaceholder":1252},[84,107511,107512],{"class":86,"line":2395},[84,107513,3578],{"emptyLinePlaceholder":1252},[84,107515,107516,107518,107520],{"class":86,"line":2401},[84,107517,102452],{"class":94},[84,107519,14735],{"class":129},[84,107521,102457],{"class":158},[84,107523,107524],{"class":86,"line":2492},[84,107525,107526],{"class":158},"\u003Cmujoco model=\"one_link_motor\">\n",[84,107528,107529],{"class":86,"line":2498},[84,107530,107531],{"class":158},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[84,107533,107534],{"class":86,"line":2510},[84,107535,3578],{"emptyLinePlaceholder":1252},[84,107537,107538],{"class":86,"line":2793},[84,107539,102476],{"class":158},[84,107541,107542],{"class":86,"line":2798},[84,107543,107544],{"class":158},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[84,107546,107547],{"class":86,"line":2804},[84,107548,107549],{"class":158},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[84,107551,107552],{"class":86,"line":2809},[84,107553,3578],{"emptyLinePlaceholder":1252},[84,107555,107556],{"class":86,"line":2823},[84,107557,107558],{"class":158},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[84,107560,107561],{"class":86,"line":2828},[84,107562,107563],{"class":158},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,107565,107566],{"class":86,"line":2834},[84,107567,107568],{"class":158},"        \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",[84,107570,107571],{"class":86,"line":2855},[84,107572,107573],{"class":158},"      \u003C\u002Fbody>\n",[84,107575,107576],{"class":86,"line":2860},[84,107577,102505],{"class":158},[84,107579,107580],{"class":86,"line":2874},[84,107581,102510],{"class":158},[84,107583,107584],{"class":86,"line":2879},[84,107585,3578],{"emptyLinePlaceholder":1252},[84,107587,107588],{"class":86,"line":2908},[84,107589,107590],{"class":158},"  \u003Cactuator>\n",[84,107592,107593],{"class":86,"line":2913},[84,107594,107595],{"class":158},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[84,107597,107598],{"class":86,"line":2930},[84,107599,107600],{"class":158},"  \u003C\u002Factuator>\n",[84,107602,107603],{"class":86,"line":2935},[84,107604,102515],{"class":158},[84,107606,107607],{"class":86,"line":2940},[84,107608,96844],{"class":158},[84,107610,107611],{"class":86,"line":2945},[84,107612,3578],{"emptyLinePlaceholder":1252},[84,107614,107615],{"class":86,"line":2959},[84,107616,3578],{"emptyLinePlaceholder":1252},[84,107618,107619,107621,107623,107625,107627],{"class":86,"line":2964},[84,107620,33100],{"class":129},[84,107622,3153],{"class":90},[84,107624,102536],{"class":154},[84,107626,96832],{"class":94},[84,107628,4917],{"class":154},[84,107630,107631,107633,107635,107637,107639],{"class":86,"line":3755},[84,107632,102545],{"class":154},[84,107634,867],{"class":129},[84,107636,102550],{"class":154},[84,107638,102452],{"class":94},[84,107640,162],{"class":154},[84,107642,107643,107645,107647],{"class":86,"line":3769},[84,107644,102559],{"class":154},[84,107646,867],{"class":129},[84,107648,102564],{"class":154},[84,107650,107651],{"class":86,"line":3777},[84,107652,3578],{"emptyLinePlaceholder":1252},[84,107654,107655,107657,107659,107661],{"class":86,"line":3782},[84,107656,32453],{"class":94},[84,107658,155],{"class":154},[84,107660,102577],{"class":158},[84,107662,102580],{"class":154},[84,107664,107665,107667,107669,107671],{"class":86,"line":3788},[84,107666,32453],{"class":94},[84,107668,155],{"class":154},[84,107670,102589],{"class":158},[84,107672,102592],{"class":154},[84,107674,107675,107677,107679,107681],{"class":86,"line":3794},[84,107676,32453],{"class":94},[84,107678,155],{"class":154},[84,107680,102601],{"class":158},[84,107682,102604],{"class":154},[84,107684,107685],{"class":86,"line":3799},[84,107686,3578],{"emptyLinePlaceholder":1252},[84,107688,107689,107691,107694,107696,107698],{"class":86,"line":9120},[84,107690,4279],{"class":129},[84,107692,107693],{"class":154}," model.nu ",[84,107695,22118],{"class":129},[84,107697,133],{"class":94},[84,107699,4917],{"class":154},[84,107701,107702,107704,107706,107708,107711],{"class":86,"line":9144},[84,107703,104569],{"class":129},[84,107705,104572],{"class":94},[84,107707,155],{"class":154},[84,107709,107710],{"class":158},"\"expected exactly one actuator\"",[84,107712,162],{"class":154},[84,107714,107715],{"class":86,"line":9149},[84,107716,3578],{"emptyLinePlaceholder":1252},[84,107718,107719,107721,107723,107725,107727,107729,107732],{"class":86,"line":9155},[84,107720,4379],{"class":129},[84,107722,32769],{"class":154},[84,107724,27206],{"class":129},[84,107726,33596],{"class":94},[84,107728,155],{"class":154},[84,107730,107731],{"class":94},"2000",[84,107733,31940],{"class":154},[84,107735,107736,107739,107741,107743,107745],{"class":86,"line":9182},[84,107737,107738],{"class":154},"        t ",[84,107740,867],{"class":129},[84,107742,32769],{"class":154},[84,107744,1043],{"class":129},[84,107746,107747],{"class":154}," model.opt.timestep\n",[84,107749,107750,107753,107755,107757,107759,107762,107764,107767,107769,107771,107774,107776,107778,107780],{"class":86,"line":9187},[84,107751,107752],{"class":154},"        data.ctrl[",[84,107754,1504],{"class":94},[84,107756,5620],{"class":154},[84,107758,867],{"class":129},[84,107760,107761],{"class":94}," 1.5",[84,107763,997],{"class":129},[84,107765,107766],{"class":154}," math.sin(",[84,107768,106395],{"class":94},[84,107770,997],{"class":129},[84,107772,107773],{"class":154}," math.pi ",[84,107775,1043],{"class":129},[84,107777,63013],{"class":94},[84,107779,997],{"class":129},[84,107781,107782],{"class":154}," t)\n",[84,107784,107785],{"class":86,"line":9193},[84,107786,102654],{"class":154},[84,107788,107789],{"class":86,"line":9205},[84,107790,3578],{"emptyLinePlaceholder":1252},[84,107792,107793,107795,107797,107800],{"class":86,"line":9217},[84,107794,32453],{"class":94},[84,107796,155],{"class":154},[84,107798,107799],{"class":158},"\"time:\"",[84,107801,102616],{"class":154},[84,107803,107804,107806,107808,107811,107813,107815],{"class":86,"line":9229},[84,107805,32453],{"class":94},[84,107807,155],{"class":154},[84,107809,107810],{"class":158},"\"joint qpos:\"",[84,107812,106065],{"class":154},[84,107814,1604],{"class":94},[84,107816,31651],{"class":154},[84,107818,107819,107821,107823,107826,107828,107830],{"class":86,"line":10888},[84,107820,32453],{"class":94},[84,107822,155],{"class":154},[84,107824,107825],{"class":158},"\"joint qvel:\"",[84,107827,106081],{"class":154},[84,107829,1604],{"class":94},[84,107831,31651],{"class":154},[84,107833,107834,107836,107838,107841],{"class":86,"line":10913},[84,107835,32453],{"class":94},[84,107837,155],{"class":154},[84,107839,107840],{"class":158},"\"last ctrl:\"",[84,107842,107843],{"class":154},", data.ctrl.copy())\n",[84,107845,107846],{"class":86,"line":10936},[84,107847,3578],{"emptyLinePlaceholder":1252},[84,107849,107850],{"class":86,"line":10960},[84,107851,3578],{"emptyLinePlaceholder":1252},[84,107853,107854,107856,107858,107860,107862],{"class":86,"line":10965},[84,107855,2712],{"class":129},[84,107857,32374],{"class":94},[84,107859,102697],{"class":129},[84,107861,102700],{"class":158},[84,107863,4917],{"class":154},[84,107865,107866],{"class":86,"line":10970},[84,107867,102707],{"class":154},[19,107869,104707],{},[60,107871,107873],{"className":78,"code":107872,"language":80,"meta":66,"style":66},"touch ch4_joint_motor.py\n",[39,107874,107875],{"__ignoreMap":66},[84,107876,107877,107879],{"class":86,"line":87},[84,107878,102421],{"class":90},[84,107880,107881],{"class":158}," ch4_joint_motor.py\n",[19,107883,103439],{},[60,107885,107887],{"className":78,"code":107886,"language":80,"meta":66,"style":66},"python ch4_joint_motor.py\n",[39,107888,107889],{"__ignoreMap":66},[84,107890,107891,107893],{"class":86,"line":87},[84,107892,91],{"class":90},[84,107894,107881],{"class":158},[198,107896,102710],{"id":102710},[19,107898,107899],{},"检查 actuator 数量：",[60,107901,107903],{"className":121,"code":107902,"language":91,"meta":66,"style":66},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[39,107904,107905,107917],{"__ignoreMap":66},[84,107906,107907,107909,107911,107913,107915],{"class":86,"line":87},[84,107908,2712],{"class":129},[84,107910,107693],{"class":154},[84,107912,22118],{"class":129},[84,107914,133],{"class":94},[84,107916,4917],{"class":154},[84,107918,107919,107921,107923,107925,107927],{"class":86,"line":98},[84,107920,105032],{"class":129},[84,107922,104572],{"class":94},[84,107924,155],{"class":154},[84,107926,107710],{"class":158},[84,107928,162],{"class":154},[19,107930,107931,107933,107934,107936],{},[39,107932,103296],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[39,107935,102214],{}," 长度应该是 1。",[19,107938,107939],{},"产生正弦控制信号：",[60,107941,107943],{"className":121,"code":107942,"language":91,"meta":66,"style":66},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[39,107944,107945],{"__ignoreMap":66},[84,107946,107947,107949,107951,107953,107955,107957,107959,107961,107963,107965,107967,107969,107971,107973],{"class":86,"line":87},[84,107948,107006],{"class":154},[84,107950,1504],{"class":94},[84,107952,5620],{"class":154},[84,107954,867],{"class":129},[84,107956,107761],{"class":94},[84,107958,997],{"class":129},[84,107960,107766],{"class":154},[84,107962,106395],{"class":94},[84,107964,997],{"class":129},[84,107966,107773],{"class":154},[84,107968,1043],{"class":129},[84,107970,63013],{"class":94},[84,107972,997],{"class":129},[84,107974,107782],{"class":154},[19,107976,107977],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107979,102811],{},[60,107981,107982],{"className":121,"code":105640,"language":91,"meta":66,"style":66},[39,107983,107984],{"__ignoreMap":66},[84,107985,107986],{"class":86,"line":87},[84,107987,105640],{"class":154},[19,107989,107990],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[198,107992,102846],{"id":102846},[60,107994,107996],{"className":121,"code":107995,"language":91,"meta":66,"style":66},"import math\n",[39,107997,107998],{"__ignoreMap":66},[84,107999,108000,108002],{"class":86,"line":87},[84,108001,31547],{"class":129},[84,108003,107485],{"class":154},[19,108005,108006,108007,102156,108010,108013],{},"导入 Python 标准库里的数学模块。后面要用 ",[39,108008,108009],{},"math.sin",[39,108011,108012],{},"math.pi"," 生成周期变化的控制信号。",[60,108015,108016],{"className":121,"code":104823,"language":91,"meta":66,"style":66},[39,108017,108018,108024],{"__ignoreMap":66},[84,108019,108020,108022],{"class":86,"line":87},[84,108021,31547],{"class":129},[84,108023,102439],{"class":154},[84,108025,108026,108028,108030,108032],{"class":86,"line":98},[84,108027,31547],{"class":129},[84,108029,32534],{"class":154},[84,108031,1157],{"class":129},[84,108033,32539],{"class":154},[19,108035,108036],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[60,108038,108039],{"className":54216,"code":107322,"language":54218,"meta":66,"style":66},[39,108040,108041],{"__ignoreMap":66},[84,108042,108043,108045,108047,108049,108051,108053,108055,108057,108059,108061,108063,108065,108067,108069,108071],{"class":86,"line":87},[84,108044,2218],{"class":154},[84,108046,104093],{"class":52449},[84,108048,16090],{"class":90},[84,108050,867],{"class":154},[84,108052,107154],{"class":158},[84,108054,54973],{"class":90},[84,108056,867],{"class":154},[84,108058,107154],{"class":158},[84,108060,107163],{"class":90},[84,108062,867],{"class":154},[84,108064,107168],{"class":158},[84,108066,107351],{"class":90},[84,108068,867],{"class":154},[84,108070,107356],{"class":158},[84,108072,102282],{"class":154},[19,108074,108075,108076,108078,108079,108081,108082,108084],{},"这行定义关节。",[39,108077,106975],{}," 表示旋转关节。",[39,108080,107374],{}," 表示绕 y 轴旋转。",[39,108083,107380],{}," 表示有一点阻尼，运动不会完全无损耗。",[60,108086,108088],{"className":54216,"code":108087,"language":54218,"meta":66,"style":66},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[39,108089,108090],{"__ignoreMap":66},[84,108091,108092,108094,108096,108098,108100,108103,108105,108107,108110,108113,108115,108118,108120,108122,108124,108126,108128,108131],{"class":86,"line":87},[84,108093,2218],{"class":154},[84,108095,102258],{"class":52449},[84,108097,16090],{"class":90},[84,108099,867],{"class":154},[84,108101,108102],{"class":158},"\"link_geom\"",[84,108104,54973],{"class":90},[84,108106,867],{"class":154},[84,108108,108109],{"class":158},"\"capsule\"",[84,108111,108112],{"class":90}," fromto",[84,108114,867],{"class":154},[84,108116,108117],{"class":158},"\"0 0 0 0 0 0.5\"",[84,108119,102274],{"class":90},[84,108121,867],{"class":154},[84,108123,104915],{"class":158},[84,108125,103139],{"class":90},[84,108127,867],{"class":154},[84,108129,108130],{"class":158},"\"0.5\"",[84,108132,102282],{"class":154},[19,108134,108135,108136,108138,108139,108141,108142,108145,108146,55,108149,108151],{},"这行定义摆杆的形状。",[39,108137,104302],{}," 是胶囊体，适合表示杆子。",[39,108140,104313],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[39,108143,108144],{},"(0,0,0)"," 延伸到 ",[39,108147,108148],{},"(0,0,0.5)",[39,108150,104307],{}," 是半径。",[60,108153,108154],{"className":54216,"code":107388,"language":54218,"meta":66,"style":66},[39,108155,108156],{"__ignoreMap":66},[84,108157,108158,108160,108162,108164,108166,108168,108170,108172,108174,108176,108178,108180,108182,108184,108186,108188,108190,108192],{"class":86,"line":87},[84,108159,2218],{"class":154},[84,108161,107209],{"class":52449},[84,108163,16090],{"class":90},[84,108165,867],{"class":154},[84,108167,107216],{"class":158},[84,108169,107219],{"class":90},[84,108171,867],{"class":154},[84,108173,107154],{"class":158},[84,108175,107226],{"class":90},[84,108177,867],{"class":154},[84,108179,4856],{"class":158},[84,108181,107233],{"class":90},[84,108183,867],{"class":154},[84,108185,107238],{"class":158},[84,108187,107241],{"class":90},[84,108189,867],{"class":154},[84,108191,107246],{"class":158},[84,108193,102282],{"class":154},[19,108195,108196,108197,108199,108200,108203,108204,108206],{},"这行定义电机。它作用在 ",[39,108198,106975],{}," 关节上。",[39,108201,108202],{},"gear"," 可以理解成放大倍数。",[39,108205,106990],{}," 限制控制输入范围。",[60,108208,108209],{"className":121,"code":107902,"language":91,"meta":66,"style":66},[39,108210,108211,108223],{"__ignoreMap":66},[84,108212,108213,108215,108217,108219,108221],{"class":86,"line":87},[84,108214,2712],{"class":129},[84,108216,107693],{"class":154},[84,108218,22118],{"class":129},[84,108220,133],{"class":94},[84,108222,4917],{"class":154},[84,108224,108225,108227,108229,108231,108233],{"class":86,"line":98},[84,108226,105032],{"class":129},[84,108228,104572],{"class":94},[84,108230,155],{"class":154},[84,108232,107710],{"class":158},[84,108234,162],{"class":154},[19,108236,108237,108239],{},[39,108238,103296],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[60,108241,108243],{"className":121,"code":108242,"language":91,"meta":66,"style":66},"for step in range(2000):\n",[39,108244,108245],{"__ignoreMap":66},[84,108246,108247,108249,108251,108253,108255,108257,108259],{"class":86,"line":87},[84,108248,4203],{"class":129},[84,108250,32769],{"class":154},[84,108252,27206],{"class":129},[84,108254,33596],{"class":94},[84,108256,155],{"class":154},[84,108258,107731],{"class":94},[84,108260,31940],{"class":154},[19,108262,108263,108264,108266,108267,108270],{},"循环 2000 步。这里没有用 ",[39,108265,2300],{},"，而是用 ",[39,108268,108269],{},"step","，因为后面要用当前步数计算时间。",[60,108272,108274],{"className":121,"code":108273,"language":91,"meta":66,"style":66},"t = step * model.opt.timestep\n",[39,108275,108276],{"__ignoreMap":66},[84,108277,108278,108281,108283,108285,108287],{"class":86,"line":87},[84,108279,108280],{"class":154},"t ",[84,108282,867],{"class":129},[84,108284,32769],{"class":154},[84,108286,1043],{"class":129},[84,108288,107747],{"class":154},[19,108290,108291],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[60,108293,108294],{"className":121,"code":107942,"language":91,"meta":66,"style":66},[39,108295,108296],{"__ignoreMap":66},[84,108297,108298,108300,108302,108304,108306,108308,108310,108312,108314,108316,108318,108320,108322,108324],{"class":86,"line":87},[84,108299,107006],{"class":154},[84,108301,1504],{"class":94},[84,108303,5620],{"class":154},[84,108305,867],{"class":129},[84,108307,107761],{"class":94},[84,108309,997],{"class":129},[84,108311,107766],{"class":154},[84,108313,106395],{"class":94},[84,108315,997],{"class":129},[84,108317,107773],{"class":154},[84,108319,1043],{"class":129},[84,108321,63013],{"class":94},[84,108323,997],{"class":129},[84,108325,107782],{"class":154},[19,108327,108328],{},"这行给电机输入一个正弦波。拆开看：",[26,108330,108331,108337,108343],{},[29,108332,108333,108336],{},[39,108334,108335],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,108338,108339,108342],{},[39,108340,108341],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,108344,108345,108348],{},[39,108346,108347],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108350,108351],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[60,108353,108355],{"className":121,"code":108354,"language":91,"meta":66,"style":66},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[39,108356,108357],{"__ignoreMap":66},[84,108358,108359,108361,108363,108365,108367,108369],{"class":86,"line":87},[84,108360,730],{"class":94},[84,108362,155],{"class":154},[84,108364,107810],{"class":158},[84,108366,106065],{"class":154},[84,108368,1604],{"class":94},[84,108370,31651],{"class":154},[19,108372,108373,108374,108376],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[39,108375,102208],{}," 只有一个数。",[14,108378,103454],{"id":103453},[19,108380,108381],{},"输出类似:",[60,108383,108386],{"className":108384,"code":108385,"language":65,"meta":66},[63],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[39,108387,108385],{"__ignoreMap":66},[19,108389,108390,108391,108393],{},"这里 ",[39,108392,107261],{}," 是电机输入。",[19,108395,108396,108399,108400,108403],{},[39,108397,108398],{},"joint qpos"," 是关节角度，单位通常是弧度。",[39,108401,108402],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108405,108406],{},"角度单位提示：",[60,108408,108411],{"className":108409,"code":108410,"language":65,"meta":66},[63],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[39,108412,108410],{"__ignoreMap":66},[19,108414,108415,108416,108418,108419,108421],{},"如果你看到 ",[39,108417,105167],{}," 是 ",[39,108420,36481],{},"，大约就是 28.6 度。",[14,108423,103486],{"id":103485},[26,108425,108426,108433,108436,108443,108446,108454,108462],{},[29,108427,103549,108428,103552,108430,55],{},[39,108429,107446],{},[39,108431,108432],{},"gear=\"5\"",[29,108434,108435],{},"重新运行，观察关节运动是否更剧烈。",[29,108437,103549,108438,103552,108440,55],{},[39,108439,106990],{},[39,108441,108442],{},"-0.2 0.2",[29,108444,108445],{},"重新运行，观察控制能力是否变弱。",[29,108447,108448,108449,108451,108452,55],{},"去掉 actuator，确认 ",[39,108450,103296],{}," 变成 ",[39,108453,1504],{},[29,108455,103549,108456,103552,108458,108461],{},[39,108457,107380],{},[39,108459,108460],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,108463,103549,108464,103552,108466,108469],{},[39,108465,107374],{},[39,108467,108468],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108471,103591],{"id":103590},[198,108473,108475],{"id":108474},"indexerror-index-0-is-out-of-bounds",[39,108476,108477],{},"IndexError: index 0 is out of bounds",[19,108479,108480,108481,108483],{},"原因是 ",[39,108482,107127],{},"，没有 actuator。",[198,108485,108486],{"id":108486},"关节几乎不动",[19,108488,108489],{},"可能原因:",[26,108491,108492,108497,108501,108507],{},[29,108493,108494,108496],{},[39,108495,108202],{}," 太小",[29,108498,108499,108496],{},[39,108500,106990],{},[29,108502,108503,108506],{},[39,108504,108505],{},"damping"," 太大",[29,108508,108509],{},"重力方向导致运动不明显",[198,108511,108512],{"id":108512},"模型编译失败",[19,108514,108515,108516,108518],{},"检查 actuator 引用的 ",[39,108517,107437],{}," 是否存在，joint 名称是否拼写一致。",[198,108520,108522,108524],{"id":108521},"datactrl0-写了但没有效果",[39,108523,107261],{}," 写了但没有效果",[19,108526,103713],{},[26,108528,108529,108534,108537,108542,108547],{},[29,108530,108531,108533],{},[39,108532,103296],{}," 是否大于 0。",[29,108535,108536],{},"motor 是否引用了正确 joint。",[29,108538,108539,108541],{},[39,108540,108202],{}," 是否太小。",[29,108543,108544,108546],{},[39,108545,106990],{}," 是否把输入限制得太小。",[29,108548,108549],{},"body 是否真的有可动 joint。",[198,108551,108552],{"id":108552},"控制输入超过范围会怎样",[19,108554,108555],{},"如果设置了：",[60,108557,108559],{"className":54216,"code":108558,"language":54218,"meta":66,"style":66},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[39,108560,108561],{"__ignoreMap":66},[84,108562,108563],{"class":86,"line":87},[84,108564,108558],{"class":154},[19,108566,108567],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[60,108569,108571],{"className":121,"code":108570,"language":91,"meta":66,"style":66},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[39,108572,108573,108593],{"__ignoreMap":66},[84,108574,108575,108578,108580,108583,108585,108587,108589,108591],{"class":86,"line":87},[84,108576,108577],{"class":154},"action ",[84,108579,867],{"class":129},[84,108581,108582],{"class":154}," np.clip(action, ",[84,108584,1841],{"class":129},[84,108586,106395],{"class":94},[84,108588,846],{"class":154},[84,108590,106395],{"class":94},[84,108592,162],{"class":154},[84,108594,108595,108597,108599,108601,108603],{"class":86,"line":98},[84,108596,107006],{"class":154},[84,108598,1504],{"class":94},[84,108600,5620],{"class":154},[84,108602,867],{"class":129},[84,108604,108605],{"class":154}," action\n",[14,108607,103745],{"id":103744},[19,108609,108610],{},"这一章建立了控制任务的基本形式：",[60,108612,108615],{"className":108613,"code":108614,"language":65,"meta":66},[63],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[39,108616,108614],{"__ignoreMap":66},[19,108618,108619],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1222,108621,108622],{},"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":66,"searchDepth":98,"depth":98,"links":108624},[108625,108626,108627,108632,108636,108637,108638,108646],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":108628},[108629,108630,108631],{"id":107268,"depth":106,"text":107269},{"id":107318,"depth":106,"text":107319},{"id":107384,"depth":106,"text":107385},{"id":102390,"depth":98,"text":102391,"children":108633},[108634,108635],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":108639},[108640,108641,108642,108643,108645],{"id":108474,"depth":106,"text":108477},{"id":108486,"depth":106,"text":108486},{"id":108512,"depth":106,"text":108512},{"id":108521,"depth":106,"text":108644},"data.ctrl[0] 写了但没有效果",{"id":108552,"depth":106,"text":108552},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106956,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108653,"title":108654,"body":108655,"description":66,"extension":1250,"meta":110563,"navigation":1252,"path":110564,"seo":110565,"stem":110566,"__hash__":110567},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108656,"toc":110539},[108657,108660,108662,108665,108673,108676,108693,108696,108721,108724,108770,108772,108774,108829,108831,108850,108852,108895,108898,108915,108918,108934,108944,108951,108953,108956,108959,108992,108995,109043,109047,109050,109064,109073,109077,109080,109105,109108,109112,109125,109128,109134,109137,109152,109154,109157,109417,109419,109431,109434,109746,109748,109760,109762,109765,109780,109785,109788,109810,109813,109816,109850,109853,109857,109868,109871,109888,109891,109905,109912,109932,109939,109953,109956,109968,109983,110003,110006,110028,110031,110035,110050,110061,110076,110079,110109,110125,110154,110162,110186,110189,110207,110217,110229,110236,110245,110251,110260,110263,110265,110274,110277,110292,110294,110297,110308,110311,110322,110325,110343,110345,110362,110365,110393,110395,110399,110402,110432,110438,110441,110445,110453,110456,110458,110479,110482,110485,110501,110504,110520,110522,110525,110536],[10,108658,108654],{"id":108659},"_5viewer-可视化与-renderer-离屏渲染",[14,108661,101792],{"id":101791},[19,108663,108664],{},"本章掌握两类可视化方式:",[26,108666,108667,108670],{},[29,108668,108669],{},"交互式 viewer: 适合人工观察仿真",[29,108671,108672],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108674,108675],{},"使用官方接口:",[60,108677,108679],{"className":121,"code":108678,"language":91,"meta":66,"style":66},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[39,108680,108681,108688],{"__ignoreMap":66},[84,108682,108683,108685],{"class":86,"line":87},[84,108684,31547],{"class":129},[84,108686,108687],{"class":154}," mujoco.viewer\n",[84,108689,108690],{"class":86,"line":98},[84,108691,108692],{"class":154},"mujoco.viewer.launch_passive(model, data)\n",[19,108694,108695],{},"以及:",[60,108697,108699],{"className":121,"code":108698,"language":91,"meta":66,"style":66},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[39,108700,108701,108711],{"__ignoreMap":66},[84,108702,108703,108706,108708],{"class":86,"line":87},[84,108704,108705],{"class":154},"renderer ",[84,108707,867],{"class":129},[84,108709,108710],{"class":154}," mujoco.Renderer(model)\n",[84,108712,108713,108716,108718],{"class":86,"line":98},[84,108714,108715],{"class":154},"image ",[84,108717,867],{"class":129},[84,108719,108720],{"class":154}," renderer.render()\n",[19,108722,108723],{},"新手建议先理解二者区别：",[458,108725,108726,108742],{},[461,108727,108728],{},[464,108729,108730,108733,108736,108739],{},[467,108731,108732],{"align":24906},"工具",[467,108734,108735],{"align":24906},"用途",[467,108737,108738],{"align":24906},"是否打开窗口",[467,108740,108741],{"align":24906},"常见场景",[474,108743,108744,108757],{},[464,108745,108746,108749,108752,108754],{},[479,108747,108748],{"align":24906},"Viewer",[479,108750,108751],{"align":24906},"人眼实时观察仿真",[479,108753,105800],{"align":24906},[479,108755,108756],{"align":24906},"调试模型、看控制效果",[464,108758,108759,108762,108765,108767],{},[479,108760,108761],{"align":24906},"Renderer",[479,108763,108764],{"align":24906},"生成图像数组",[479,108766,105813],{"align":24906},[479,108768,108769],{"align":24906},"保存图片、训练视觉策略、服务器批量采集",[14,108771,101915],{"id":101914},[19,108773,101918],{},[60,108775,108777],{"className":78,"code":108776,"language":80,"meta":66,"style":66},"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",[39,108778,108779,108791,108801,108809,108817],{"__ignoreMap":66},[84,108780,108781,108783,108785,108787,108789],{"class":86,"line":87},[84,108782,311],{"class":90},[84,108784,361],{"class":158},[84,108786,275],{"class":158},[84,108788,27559],{"class":94},[84,108790,25842],{"class":94},[84,108792,108793,108795,108797,108799],{"class":86,"line":98},[84,108794,101952],{"class":158},[84,108796,101955],{"class":158},[84,108798,101958],{"class":158},[84,108800,25842],{"class":94},[84,108802,108803,108805,108807],{"class":86,"line":106},[84,108804,101965],{"class":158},[84,108806,101968],{"class":158},[84,108808,25842],{"class":94},[84,108810,108811,108813,108815],{"class":86,"line":112},[84,108812,101975],{"class":158},[84,108814,101978],{"class":158},[84,108816,25842],{"class":94},[84,108818,108819,108821,108823,108825,108827],{"class":86,"line":425},[84,108820,101985],{"class":158},[84,108822,101988],{"class":158},[84,108824,101991],{"class":158},[84,108826,101994],{"class":158},[84,108828,103654],{"class":158},[19,108830,103956],{},[60,108832,108834],{"className":78,"code":108833,"language":80,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy pillow\n",[39,108835,108836],{"__ignoreMap":66},[84,108837,108838,108840,108842,108844,108847],{"class":86,"line":87},[84,108839,246],{"class":90},[84,108841,275],{"class":158},[84,108843,102068],{"class":158},[84,108845,108846],{"class":158}," numpy",[84,108848,108849],{"class":158}," pillow\n",[19,108851,103973],{},[60,108853,108855],{"className":78,"code":108854,"language":80,"meta":66,"style":66},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[39,108856,108857,108874,108883],{"__ignoreMap":66},[84,108858,108859,108861,108863,108865,108868,108870,108872],{"class":86,"line":87},[84,108860,31487],{"class":90},[84,108862,30333],{"class":158},[84,108864,26279],{"class":94},[84,108866,108867],{"class":158}," mujoco-render",[84,108869,102113],{"class":158},[84,108871,102116],{"class":94},[84,108873,102119],{"class":94},[84,108875,108876,108878,108880],{"class":86,"line":98},[84,108877,31487],{"class":90},[84,108879,102126],{"class":158},[84,108881,108882],{"class":158}," mujoco-render\n",[84,108884,108885,108887,108889,108891,108893],{"class":86,"line":106},[84,108886,246],{"class":90},[84,108888,275],{"class":158},[84,108890,102068],{"class":158},[84,108892,108846],{"class":158},[84,108894,108849],{"class":158},[19,108896,108897],{},"离屏渲染后端:",[60,108899,108901],{"className":78,"code":108900,"language":80,"meta":66,"style":66},"export MUJOCO_GL=egl\n",[39,108902,108903],{"__ignoreMap":66},[84,108904,108905,108907,108910,108912],{"class":86,"line":87},[84,108906,26206],{"class":129},[84,108908,108909],{"class":154}," MUJOCO_GL",[84,108911,867],{"class":129},[84,108913,108914],{"class":154},"egl\n",[19,108916,108917],{},"或:",[60,108919,108921],{"className":78,"code":108920,"language":80,"meta":66,"style":66},"export MUJOCO_GL=osmesa\n",[39,108922,108923],{"__ignoreMap":66},[84,108924,108925,108927,108929,108931],{"class":86,"line":87},[84,108926,26206],{"class":129},[84,108928,108909],{"class":154},[84,108930,867],{"class":129},[84,108932,108933],{"class":154},"osmesa\n",[19,108935,108936,108937,108940,108941,55],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[39,108938,108939],{},"egl"," 失败，再尝试 ",[39,108942,108943],{},"osmesa",[19,108945,108946,108947,108950],{},"如果你在本机桌面环境运行，通常先不要设置 ",[39,108948,108949],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108952,102183],{"id":102182},[19,108954,108955],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108957,108958],{},"典型 viewer 流程:",[60,108960,108962],{"className":121,"code":108961,"language":91,"meta":66,"style":66},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[39,108963,108964,108976,108983,108987],{"__ignoreMap":66},[84,108965,108966,108968,108971,108973],{"class":86,"line":87},[84,108967,1128],{"class":129},[84,108969,108970],{"class":154}," mujoco.viewer.launch_passive(model, data) ",[84,108972,1157],{"class":129},[84,108974,108975],{"class":154}," viewer:\n",[84,108977,108978,108980],{"class":86,"line":98},[84,108979,3429],{"class":129},[84,108981,108982],{"class":154}," viewer.is_running():\n",[84,108984,108985],{"class":86,"line":106},[84,108986,102654],{"class":154},[84,108988,108989],{"class":86,"line":112},[84,108990,108991],{"class":154},"        viewer.sync()\n",[19,108993,108994],{},"典型 renderer 流程:",[60,108996,108998],{"className":121,"code":108997,"language":91,"meta":66,"style":66},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[39,108999,109000,109026,109030,109035],{"__ignoreMap":66},[84,109001,109002,109004,109006,109009,109011,109013,109015,109017,109019,109021,109024],{"class":86,"line":87},[84,109003,108705],{"class":154},[84,109005,867],{"class":129},[84,109007,109008],{"class":154}," mujoco.Renderer(model, ",[84,109010,26145],{"class":928},[84,109012,867],{"class":129},[84,109014,43494],{"class":94},[84,109016,846],{"class":154},[84,109018,26141],{"class":928},[84,109020,867],{"class":129},[84,109022,109023],{"class":94},"640",[84,109025,162],{"class":154},[84,109027,109028],{"class":86,"line":98},[84,109029,105640],{"class":154},[84,109031,109032],{"class":86,"line":106},[84,109033,109034],{"class":154},"renderer.update_scene(data)\n",[84,109036,109037,109039,109041],{"class":86,"line":112},[84,109038,108715],{"class":154},[84,109040,867],{"class":129},[84,109042,108720],{"class":154},[198,109044,109046],{"id":109045},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109048,109049],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[60,109051,109053],{"className":121,"code":109052,"language":91,"meta":66,"style":66},"mujoco.mj_step(model, data)\nviewer.sync()\n",[39,109054,109055,109059],{"__ignoreMap":66},[84,109056,109057],{"class":86,"line":87},[84,109058,105640],{"class":154},[84,109060,109061],{"class":86,"line":98},[84,109062,109063],{"class":154},"viewer.sync()\n",[19,109065,109066,109068,109069,109072],{},[39,109067,102353],{}," 负责算物理，",[39,109070,109071],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[198,109074,109076],{"id":109075},"为什么要-sleep","为什么要 sleep",[19,109078,109079],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[60,109081,109083],{"className":121,"code":109082,"language":91,"meta":66,"style":66},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[39,109084,109085],{"__ignoreMap":66},[84,109086,109087,109090,109092,109095,109097,109100,109102],{"class":86,"line":87},[84,109088,109089],{"class":154},"sleep_time ",[84,109091,867],{"class":129},[84,109093,109094],{"class":154}," model.opt.timestep ",[84,109096,1841],{"class":129},[84,109098,109099],{"class":154}," (time.time() ",[84,109101,1841],{"class":129},[84,109103,109104],{"class":154}," step_start)\n",[19,109106,109107],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[198,109109,109111],{"id":109110},"renderer-输出是什么","renderer 输出是什么",[60,109113,109115],{"className":121,"code":109114,"language":91,"meta":66,"style":66},"image = renderer.render()\n",[39,109116,109117],{"__ignoreMap":66},[84,109118,109119,109121,109123],{"class":86,"line":87},[84,109120,108715],{"class":154},[84,109122,867],{"class":129},[84,109124,108720],{"class":154},[19,109126,109127],{},"得到的是 NumPy 数组，形状通常是：",[60,109129,109132],{"className":109130,"code":109131,"language":65,"meta":66},[63],"(height, width, 3)\n",[39,109133,109131],{"__ignoreMap":66},[19,109135,109136],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[60,109138,109140],{"className":121,"code":109139,"language":91,"meta":66,"style":66},"Image.fromarray(image).save(\"render_output.png\")\n",[39,109141,109142],{"__ignoreMap":66},[84,109143,109144,109147,109150],{"class":86,"line":87},[84,109145,109146],{"class":154},"Image.fromarray(image).save(",[84,109148,109149],{"class":158},"\"render_output.png\"",[84,109151,162],{"class":154},[14,109153,102391],{"id":102390},[19,109155,109156],{},"交互式 Viewer:",[60,109158,109160],{"className":121,"code":109159,"language":91,"meta":66,"style":66},"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",[39,109161,109162,109168,109172,109178,109184,109188,109192,109200,109205,109209,109213,109217,109222,109227,109231,109235,109239,109244,109248,109252,109256,109260,109264,109268,109280,109292,109300,109304,109314,109334,109344,109349,109354,109358,109375,109388,109393,109397,109401,109413],{"__ignoreMap":66},[84,109163,109164,109166],{"class":86,"line":87},[84,109165,31547],{"class":129},[84,109167,32982],{"class":154},[84,109169,109170],{"class":86,"line":98},[84,109171,3578],{"emptyLinePlaceholder":1252},[84,109173,109174,109176],{"class":86,"line":106},[84,109175,31547],{"class":129},[84,109177,102439],{"class":154},[84,109179,109180,109182],{"class":86,"line":112},[84,109181,31547],{"class":129},[84,109183,108687],{"class":154},[84,109185,109186],{"class":86,"line":425},[84,109187,3578],{"emptyLinePlaceholder":1252},[84,109189,109190],{"class":86,"line":2395},[84,109191,3578],{"emptyLinePlaceholder":1252},[84,109193,109194,109196,109198],{"class":86,"line":2401},[84,109195,102452],{"class":94},[84,109197,14735],{"class":129},[84,109199,102457],{"class":158},[84,109201,109202],{"class":86,"line":2492},[84,109203,109204],{"class":158},"\u003Cmujoco model=\"viewer_demo\">\n",[84,109206,109207],{"class":86,"line":2498},[84,109208,102467],{"class":158},[84,109210,109211],{"class":86,"line":2510},[84,109212,3578],{"emptyLinePlaceholder":1252},[84,109214,109215],{"class":86,"line":2793},[84,109216,102476],{"class":158},[84,109218,109219],{"class":86,"line":2798},[84,109220,109221],{"class":158},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[84,109223,109224],{"class":86,"line":2804},[84,109225,109226],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,109228,109229],{"class":86,"line":2809},[84,109230,3578],{"emptyLinePlaceholder":1252},[84,109232,109233],{"class":86,"line":2823},[84,109234,102490],{"class":158},[84,109236,109237],{"class":86,"line":2828},[84,109238,102495],{"class":158},[84,109240,109241],{"class":86,"line":2834},[84,109242,109243],{"class":158},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,109245,109246],{"class":86,"line":2855},[84,109247,102505],{"class":158},[84,109249,109250],{"class":86,"line":2860},[84,109251,102510],{"class":158},[84,109253,109254],{"class":86,"line":2874},[84,109255,102515],{"class":158},[84,109257,109258],{"class":86,"line":2879},[84,109259,96844],{"class":158},[84,109261,109262],{"class":86,"line":2908},[84,109263,3578],{"emptyLinePlaceholder":1252},[84,109265,109266],{"class":86,"line":2913},[84,109267,3578],{"emptyLinePlaceholder":1252},[84,109269,109270,109272,109274,109276,109278],{"class":86,"line":2930},[84,109271,33100],{"class":129},[84,109273,3153],{"class":90},[84,109275,102536],{"class":154},[84,109277,96832],{"class":94},[84,109279,4917],{"class":154},[84,109281,109282,109284,109286,109288,109290],{"class":86,"line":2935},[84,109283,102545],{"class":154},[84,109285,867],{"class":129},[84,109287,102550],{"class":154},[84,109289,102452],{"class":94},[84,109291,162],{"class":154},[84,109293,109294,109296,109298],{"class":86,"line":2940},[84,109295,102559],{"class":154},[84,109297,867],{"class":129},[84,109299,102564],{"class":154},[84,109301,109302],{"class":86,"line":2945},[84,109303,3578],{"emptyLinePlaceholder":1252},[84,109305,109306,109308,109310,109312],{"class":86,"line":2959},[84,109307,35330],{"class":129},[84,109309,108970],{"class":154},[84,109311,1157],{"class":129},[84,109313,108975],{"class":154},[84,109315,109316,109319,109322,109324,109327,109329,109332],{"class":86,"line":2964},[84,109317,109318],{"class":129},"        while",[84,109320,109321],{"class":154}," viewer.is_running() ",[84,109323,31616],{"class":129},[84,109325,109326],{"class":154}," data.time ",[84,109328,2218],{"class":129},[84,109330,109331],{"class":94}," 5.0",[84,109333,4917],{"class":154},[84,109335,109336,109339,109341],{"class":86,"line":3755},[84,109337,109338],{"class":154},"            step_start ",[84,109340,867],{"class":129},[84,109342,109343],{"class":154}," time.time()\n",[84,109345,109346],{"class":86,"line":3769},[84,109347,109348],{"class":154},"            mujoco.mj_step(model, data)\n",[84,109350,109351],{"class":86,"line":3777},[84,109352,109353],{"class":154},"            viewer.sync()\n",[84,109355,109356],{"class":86,"line":3782},[84,109357,3578],{"emptyLinePlaceholder":1252},[84,109359,109360,109363,109365,109367,109369,109371,109373],{"class":86,"line":3788},[84,109361,109362],{"class":154},"            sleep_time ",[84,109364,867],{"class":129},[84,109366,109094],{"class":154},[84,109368,1841],{"class":129},[84,109370,109099],{"class":154},[84,109372,1841],{"class":129},[84,109374,109104],{"class":154},[84,109376,109377,109379,109382,109384,109386],{"class":86,"line":3794},[84,109378,5819],{"class":129},[84,109380,109381],{"class":154}," sleep_time ",[84,109383,2268],{"class":129},[84,109385,5271],{"class":94},[84,109387,4917],{"class":154},[84,109389,109390],{"class":86,"line":3799},[84,109391,109392],{"class":154},"                time.sleep(sleep_time)\n",[84,109394,109395],{"class":86,"line":9120},[84,109396,3578],{"emptyLinePlaceholder":1252},[84,109398,109399],{"class":86,"line":9144},[84,109400,3578],{"emptyLinePlaceholder":1252},[84,109402,109403,109405,109407,109409,109411],{"class":86,"line":9149},[84,109404,2712],{"class":129},[84,109406,32374],{"class":94},[84,109408,102697],{"class":129},[84,109410,102700],{"class":158},[84,109412,4917],{"class":154},[84,109414,109415],{"class":86,"line":9155},[84,109416,102707],{"class":154},[19,109418,104707],{},[60,109420,109422],{"className":78,"code":109421,"language":80,"meta":66,"style":66},"touch ch5_viewer.py\n",[39,109423,109424],{"__ignoreMap":66},[84,109425,109426,109428],{"class":86,"line":87},[84,109427,102421],{"class":90},[84,109429,109430],{"class":158}," ch5_viewer.py\n",[19,109432,109433],{},"离屏 Renderer 保存图片:",[60,109435,109437],{"className":121,"code":109436,"language":91,"meta":66,"style":66},"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",[39,109438,109439,109451,109455,109461,109471,109475,109479,109487,109492,109496,109500,109504,109508,109513,109517,109521,109525,109529,109533,109537,109541,109545,109549,109553,109557,109569,109581,109589,109614,109618,109634,109638,109642,109657,109666,109670,109684,109689,109694,109698,109710,109722,109726,109730,109742],{"__ignoreMap":66},[84,109440,109441,109443,109446,109448],{"class":86,"line":87},[84,109442,31891],{"class":129},[84,109444,109445],{"class":154}," pathlib ",[84,109447,31547],{"class":129},[84,109449,109450],{"class":154}," Path\n",[84,109452,109453],{"class":86,"line":98},[84,109454,3578],{"emptyLinePlaceholder":1252},[84,109456,109457,109459],{"class":86,"line":106},[84,109458,31547],{"class":129},[84,109460,102439],{"class":154},[84,109462,109463,109465,109467,109469],{"class":86,"line":112},[84,109464,31891],{"class":129},[84,109466,48413],{"class":94},[84,109468,48416],{"class":129},[84,109470,48419],{"class":154},[84,109472,109473],{"class":86,"line":425},[84,109474,3578],{"emptyLinePlaceholder":1252},[84,109476,109477],{"class":86,"line":2395},[84,109478,3578],{"emptyLinePlaceholder":1252},[84,109480,109481,109483,109485],{"class":86,"line":2401},[84,109482,102452],{"class":94},[84,109484,14735],{"class":129},[84,109486,102457],{"class":158},[84,109488,109489],{"class":86,"line":2492},[84,109490,109491],{"class":158},"\u003Cmujoco model=\"renderer_demo\">\n",[84,109493,109494],{"class":86,"line":2498},[84,109495,102467],{"class":158},[84,109497,109498],{"class":86,"line":2510},[84,109499,3578],{"emptyLinePlaceholder":1252},[84,109501,109502],{"class":86,"line":2793},[84,109503,102476],{"class":158},[84,109505,109506],{"class":86,"line":2798},[84,109507,109221],{"class":158},[84,109509,109510],{"class":86,"line":2804},[84,109511,109512],{"class":158},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[84,109514,109515],{"class":86,"line":2809},[84,109516,109226],{"class":158},[84,109518,109519],{"class":86,"line":2823},[84,109520,3578],{"emptyLinePlaceholder":1252},[84,109522,109523],{"class":86,"line":2828},[84,109524,102490],{"class":158},[84,109526,109527],{"class":86,"line":2834},[84,109528,102495],{"class":158},[84,109530,109531],{"class":86,"line":2855},[84,109532,109243],{"class":158},[84,109534,109535],{"class":86,"line":2860},[84,109536,102505],{"class":158},[84,109538,109539],{"class":86,"line":2874},[84,109540,102510],{"class":158},[84,109542,109543],{"class":86,"line":2879},[84,109544,102515],{"class":158},[84,109546,109547],{"class":86,"line":2908},[84,109548,96844],{"class":158},[84,109550,109551],{"class":86,"line":2913},[84,109552,3578],{"emptyLinePlaceholder":1252},[84,109554,109555],{"class":86,"line":2930},[84,109556,3578],{"emptyLinePlaceholder":1252},[84,109558,109559,109561,109563,109565,109567],{"class":86,"line":2935},[84,109560,33100],{"class":129},[84,109562,3153],{"class":90},[84,109564,102536],{"class":154},[84,109566,96832],{"class":94},[84,109568,4917],{"class":154},[84,109570,109571,109573,109575,109577,109579],{"class":86,"line":2940},[84,109572,102545],{"class":154},[84,109574,867],{"class":129},[84,109576,102550],{"class":154},[84,109578,102452],{"class":94},[84,109580,162],{"class":154},[84,109582,109583,109585,109587],{"class":86,"line":2945},[84,109584,102559],{"class":154},[84,109586,867],{"class":129},[84,109588,102564],{"class":154},[84,109590,109591,109594,109596,109598,109600,109602,109604,109606,109608,109610,109612],{"class":86,"line":2959},[84,109592,109593],{"class":154},"    renderer ",[84,109595,867],{"class":129},[84,109597,109008],{"class":154},[84,109599,26145],{"class":928},[84,109601,867],{"class":129},[84,109603,43494],{"class":94},[84,109605,846],{"class":154},[84,109607,26141],{"class":928},[84,109609,867],{"class":129},[84,109611,109023],{"class":94},[84,109613,162],{"class":154},[84,109615,109616],{"class":86,"line":2964},[84,109617,3578],{"emptyLinePlaceholder":1252},[84,109619,109620,109622,109624,109626,109628,109630,109632],{"class":86,"line":3755},[84,109621,4379],{"class":129},[84,109623,102639],{"class":154},[84,109625,27206],{"class":129},[84,109627,33596],{"class":94},[84,109629,155],{"class":154},[84,109631,821],{"class":94},[84,109633,31940],{"class":154},[84,109635,109636],{"class":86,"line":3769},[84,109637,102654],{"class":154},[84,109639,109640],{"class":86,"line":3777},[84,109641,3578],{"emptyLinePlaceholder":1252},[84,109643,109644,109647,109650,109652,109655],{"class":86,"line":3782},[84,109645,109646],{"class":154},"    renderer.update_scene(data, ",[84,109648,109649],{"class":928},"camera",[84,109651,867],{"class":129},[84,109653,109654],{"class":158},"\"fixed_camera\"",[84,109656,162],{"class":154},[84,109658,109659,109662,109664],{"class":86,"line":3788},[84,109660,109661],{"class":154},"    image ",[84,109663,867],{"class":129},[84,109665,108720],{"class":154},[84,109667,109668],{"class":86,"line":3794},[84,109669,3578],{"emptyLinePlaceholder":1252},[84,109671,109672,109675,109677,109680,109682],{"class":86,"line":3799},[84,109673,109674],{"class":154},"    output_path ",[84,109676,867],{"class":129},[84,109678,109679],{"class":154}," Path(",[84,109681,109149],{"class":158},[84,109683,162],{"class":154},[84,109685,109686],{"class":86,"line":9120},[84,109687,109688],{"class":154},"    Image.fromarray(image).save(output_path)\n",[84,109690,109691],{"class":86,"line":9144},[84,109692,109693],{"class":154},"    renderer.close()\n",[84,109695,109696],{"class":86,"line":9149},[84,109697,3578],{"emptyLinePlaceholder":1252},[84,109699,109700,109702,109704,109707],{"class":86,"line":9155},[84,109701,32453],{"class":94},[84,109703,155],{"class":154},[84,109705,109706],{"class":158},"\"saved:\"",[84,109708,109709],{"class":154},", output_path.resolve())\n",[84,109711,109712,109714,109716,109719],{"class":86,"line":9182},[84,109713,32453],{"class":94},[84,109715,155],{"class":154},[84,109717,109718],{"class":158},"\"image shape:\"",[84,109720,109721],{"class":154},", image.shape)\n",[84,109723,109724],{"class":86,"line":9187},[84,109725,3578],{"emptyLinePlaceholder":1252},[84,109727,109728],{"class":86,"line":9193},[84,109729,3578],{"emptyLinePlaceholder":1252},[84,109731,109732,109734,109736,109738,109740],{"class":86,"line":9205},[84,109733,2712],{"class":129},[84,109735,32374],{"class":94},[84,109737,102697],{"class":129},[84,109739,102700],{"class":158},[84,109741,4917],{"class":154},[84,109743,109744],{"class":86,"line":9217},[84,109745,102707],{"class":154},[19,109747,104707],{},[60,109749,109751],{"className":78,"code":109750,"language":80,"meta":66,"style":66},"touch ch5_renderer.py\n",[39,109752,109753],{"__ignoreMap":66},[84,109754,109755,109757],{"class":86,"line":87},[84,109756,102421],{"class":90},[84,109758,109759],{"class":158}," ch5_renderer.py\n",[198,109761,102710],{"id":102710},[19,109763,109764],{},"viewer 上下文：",[60,109766,109768],{"className":121,"code":109767,"language":91,"meta":66,"style":66},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[39,109769,109770],{"__ignoreMap":66},[84,109771,109772,109774,109776,109778],{"class":86,"line":87},[84,109773,1128],{"class":129},[84,109775,108970],{"class":154},[84,109777,1157],{"class":129},[84,109779,108975],{"class":154},[19,109781,109782,109784],{},[39,109783,1128],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109786,109787],{},"窗口循环：",[60,109789,109791],{"className":121,"code":109790,"language":91,"meta":66,"style":66},"while viewer.is_running() and data.time \u003C 5.0:\n",[39,109792,109793],{"__ignoreMap":66},[84,109794,109795,109798,109800,109802,109804,109806,109808],{"class":86,"line":87},[84,109796,109797],{"class":129},"while",[84,109799,109321],{"class":154},[84,109801,31616],{"class":129},[84,109803,109326],{"class":154},[84,109805,2218],{"class":129},[84,109807,109331],{"class":94},[84,109809,4917],{"class":154},[19,109811,109812],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109814,109815],{},"固定相机：",[60,109817,109819],{"className":54216,"code":109818,"language":54218,"meta":66,"style":66},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[39,109820,109821],{"__ignoreMap":66},[84,109822,109823,109825,109827,109829,109831,109833,109835,109837,109840,109843,109845,109848],{"class":86,"line":87},[84,109824,2218],{"class":154},[84,109826,109649],{"class":52449},[84,109828,16090],{"class":90},[84,109830,867],{"class":154},[84,109832,109654],{"class":158},[84,109834,102244],{"class":90},[84,109836,867],{"class":154},[84,109838,109839],{"class":158},"\"1.5 -2.0 1.2\"",[84,109841,109842],{"class":90}," xyaxes",[84,109844,867],{"class":154},[84,109846,109847],{"class":158},"\"1 0.75 0 0 0 1\"",[84,109849,102282],{"class":154},[19,109851,109852],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[198,109854,109856],{"id":109855},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[60,109858,109860],{"className":121,"code":109859,"language":91,"meta":66,"style":66},"import time\n",[39,109861,109862],{"__ignoreMap":66},[84,109863,109864,109866],{"class":86,"line":87},[84,109865,31547],{"class":129},[84,109867,32982],{"class":154},[19,109869,109870],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[60,109872,109874],{"className":121,"code":109873,"language":91,"meta":66,"style":66},"import mujoco\nimport mujoco.viewer\n",[39,109875,109876,109882],{"__ignoreMap":66},[84,109877,109878,109880],{"class":86,"line":87},[84,109879,31547],{"class":129},[84,109881,102439],{"class":154},[84,109883,109884,109886],{"class":86,"line":98},[84,109885,31547],{"class":129},[84,109887,108687],{"class":154},[19,109889,109890],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[60,109892,109893],{"className":121,"code":109767,"language":91,"meta":66,"style":66},[39,109894,109895],{"__ignoreMap":66},[84,109896,109897,109899,109901,109903],{"class":86,"line":87},[84,109898,1128],{"class":129},[84,109900,108970],{"class":154},[84,109902,1157],{"class":129},[84,109904,108975],{"class":154},[19,109906,109907,109908,109911],{},"打开一个 viewer 窗口。",[39,109909,109910],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[60,109913,109914],{"className":121,"code":109790,"language":91,"meta":66,"style":66},[39,109915,109916],{"__ignoreMap":66},[84,109917,109918,109920,109922,109924,109926,109928,109930],{"class":86,"line":87},[84,109919,109797],{"class":129},[84,109921,109321],{"class":154},[84,109923,31616],{"class":129},[84,109925,109326],{"class":154},[84,109927,2218],{"class":129},[84,109929,109331],{"class":94},[84,109931,4917],{"class":154},[19,109933,109934,109935,109938],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[39,109936,109937],{},"viewer.is_running()"," 会变成 false，循环结束。",[60,109940,109942],{"className":121,"code":109941,"language":91,"meta":66,"style":66},"step_start = time.time()\n",[39,109943,109944],{"__ignoreMap":66},[84,109945,109946,109949,109951],{"class":86,"line":87},[84,109947,109948],{"class":154},"step_start ",[84,109950,867],{"class":129},[84,109952,109343],{"class":154},[19,109954,109955],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[60,109957,109958],{"className":121,"code":109052,"language":91,"meta":66,"style":66},[39,109959,109960,109964],{"__ignoreMap":66},[84,109961,109962],{"class":86,"line":87},[84,109963,105640],{"class":154},[84,109965,109966],{"class":86,"line":98},[84,109967,109063],{"class":154},[19,109969,109970,109972,109973,109975,109976,109978,109979,109982],{},[39,109971,102353],{}," 推进物理仿真。",[39,109974,109071],{}," 把最新的 ",[39,109977,34553],{}," 同步到窗口里显示。没有 ",[39,109980,109981],{},"sync()","，窗口可能看不到最新状态。",[60,109984,109985],{"className":121,"code":109082,"language":91,"meta":66,"style":66},[39,109986,109987],{"__ignoreMap":66},[84,109988,109989,109991,109993,109995,109997,109999,110001],{"class":86,"line":87},[84,109990,109089],{"class":154},[84,109992,867],{"class":129},[84,109994,109094],{"class":154},[84,109996,1841],{"class":129},[84,109998,109099],{"class":154},[84,110000,1841],{"class":129},[84,110002,109104],{"class":154},[19,110004,110005],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[60,110007,110009],{"className":121,"code":110008,"language":91,"meta":66,"style":66},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[39,110010,110011,110023],{"__ignoreMap":66},[84,110012,110013,110015,110017,110019,110021],{"class":86,"line":87},[84,110014,2712],{"class":129},[84,110016,109381],{"class":154},[84,110018,2268],{"class":129},[84,110020,5271],{"class":94},[84,110022,4917],{"class":154},[84,110024,110025],{"class":86,"line":98},[84,110026,110027],{"class":154},"    time.sleep(sleep_time)\n",[19,110029,110030],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[198,110032,110034],{"id":110033},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[60,110036,110038],{"className":121,"code":110037,"language":91,"meta":66,"style":66},"from pathlib import Path\n",[39,110039,110040],{"__ignoreMap":66},[84,110041,110042,110044,110046,110048],{"class":86,"line":87},[84,110043,31891],{"class":129},[84,110045,109445],{"class":154},[84,110047,31547],{"class":129},[84,110049,109450],{"class":154},[19,110051,110052,110053,110056,110057,110060],{},"导入 ",[39,110054,110055],{},"Path","，用来处理文件路径。相比直接写字符串，",[39,110058,110059],{},"Path(\"render_output.png\")"," 更清晰。",[60,110062,110064],{"className":121,"code":110063,"language":91,"meta":66,"style":66},"from PIL import Image\n",[39,110065,110066],{"__ignoreMap":66},[84,110067,110068,110070,110072,110074],{"class":86,"line":87},[84,110069,31891],{"class":129},[84,110071,48413],{"class":94},[84,110073,48416],{"class":129},[84,110075,48419],{"class":154},[19,110077,110078],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[60,110080,110081],{"className":54216,"code":109818,"language":54218,"meta":66,"style":66},[39,110082,110083],{"__ignoreMap":66},[84,110084,110085,110087,110089,110091,110093,110095,110097,110099,110101,110103,110105,110107],{"class":86,"line":87},[84,110086,2218],{"class":154},[84,110088,109649],{"class":52449},[84,110090,16090],{"class":90},[84,110092,867],{"class":154},[84,110094,109654],{"class":158},[84,110096,102244],{"class":90},[84,110098,867],{"class":154},[84,110100,109839],{"class":158},[84,110102,109842],{"class":90},[84,110104,867],{"class":154},[84,110106,109847],{"class":158},[84,110108,102282],{"class":154},[19,110110,110111,110112,110114,110115,110117,110118,110121,110122,110124],{},"定义一个相机。",[39,110113,80956],{}," 是相机名字。",[39,110116,105283],{}," 是相机在世界里的位置。",[39,110119,110120],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[39,110123,105283],{}," 来调视角。",[60,110126,110128],{"className":121,"code":110127,"language":91,"meta":66,"style":66},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[39,110129,110130],{"__ignoreMap":66},[84,110131,110132,110134,110136,110138,110140,110142,110144,110146,110148,110150,110152],{"class":86,"line":87},[84,110133,108705],{"class":154},[84,110135,867],{"class":129},[84,110137,109008],{"class":154},[84,110139,26145],{"class":928},[84,110141,867],{"class":129},[84,110143,43494],{"class":94},[84,110145,846],{"class":154},[84,110147,26141],{"class":928},[84,110149,867],{"class":129},[84,110151,109023],{"class":94},[84,110153,162],{"class":154},[19,110155,110156,110157,102156,110159,110161],{},"创建离屏渲染器。",[39,110158,26145],{},[39,110160,26141],{}," 决定输出图片大小。",[60,110163,110164],{"className":121,"code":102814,"language":91,"meta":66,"style":66},[39,110165,110166,110182],{"__ignoreMap":66},[84,110167,110168,110170,110172,110174,110176,110178,110180],{"class":86,"line":87},[84,110169,4203],{"class":129},[84,110171,102639],{"class":154},[84,110173,27206],{"class":129},[84,110175,33596],{"class":94},[84,110177,155],{"class":154},[84,110179,821],{"class":94},[84,110181,31940],{"class":154},[84,110183,110184],{"class":86,"line":98},[84,110185,102837],{"class":154},[19,110187,110188],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[60,110190,110192],{"className":121,"code":110191,"language":91,"meta":66,"style":66},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[39,110193,110194],{"__ignoreMap":66},[84,110195,110196,110199,110201,110203,110205],{"class":86,"line":87},[84,110197,110198],{"class":154},"renderer.update_scene(data, ",[84,110200,109649],{"class":928},[84,110202,867],{"class":129},[84,110204,109654],{"class":158},[84,110206,162],{"class":154},[19,110208,110209,110210,110212,110213,110216],{},"告诉 renderer：用当前 ",[39,110211,34553],{}," 的状态更新画面，并使用名为 ",[39,110214,110215],{},"fixed_camera"," 的相机视角。",[60,110218,110219],{"className":121,"code":109114,"language":91,"meta":66,"style":66},[39,110220,110221],{"__ignoreMap":66},[84,110222,110223,110225,110227],{"class":86,"line":87},[84,110224,108715],{"class":154},[84,110226,867],{"class":129},[84,110228,108720],{"class":154},[19,110230,110231,110232,110235],{},"真正渲染出图像。",[39,110233,110234],{},"image"," 是一个 NumPy 数组，不是文件。",[60,110237,110239],{"className":121,"code":110238,"language":91,"meta":66,"style":66},"Image.fromarray(image).save(output_path)\n",[39,110240,110241],{"__ignoreMap":66},[84,110242,110243],{"class":86,"line":87},[84,110244,110238],{"class":154},[19,110246,110247,110248,55],{},"把数组转换成图片，并保存到 ",[39,110249,110250],{},"render_output.png",[60,110252,110254],{"className":121,"code":110253,"language":91,"meta":66,"style":66},"renderer.close()\n",[39,110255,110256],{"__ignoreMap":66},[84,110257,110258],{"class":86,"line":87},[84,110259,110253],{"class":154},[19,110261,110262],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110264,103454],{"id":103453},[19,110266,110267,110268,110270,110271,55],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[39,110269,110250],{},"，并输出图像数组形状，例如 ",[39,110272,110273],{},"(480, 640, 3)",[19,110275,110276],{},"如果图片里看不到方块，先检查：",[26,110278,110279,110282,110285],{},[29,110280,110281],{},"方块是否掉到相机视野外。",[29,110283,110284],{},"camera 位置是否合理。",[29,110286,110287,110288,110291],{},"是否在 ",[39,110289,110290],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110293,103486],{"id":103485},[19,110295,110296],{},"运行 viewer:",[60,110298,110300],{"className":78,"code":110299,"language":80,"meta":66,"style":66},"python ch5_viewer.py\n",[39,110301,110302],{"__ignoreMap":66},[84,110303,110304,110306],{"class":86,"line":87},[84,110305,91],{"class":90},[84,110307,109430],{"class":158},[19,110309,110310],{},"运行 renderer:",[60,110312,110314],{"className":78,"code":110313,"language":80,"meta":66,"style":66},"python ch5_renderer.py\n",[39,110315,110316],{"__ignoreMap":66},[84,110317,110318,110320],{"class":86,"line":87},[84,110319,91],{"class":90},[84,110321,109759],{"class":158},[19,110323,110324],{},"如果在服务器上运行:",[60,110326,110328],{"className":78,"code":110327,"language":80,"meta":66,"style":66},"MUJOCO_GL=egl python ch5_renderer.py\n",[39,110329,110330],{"__ignoreMap":66},[84,110331,110332,110334,110336,110338,110341],{"class":86,"line":87},[84,110333,108949],{"class":154},[84,110335,867],{"class":129},[84,110337,108939],{"class":158},[84,110339,110340],{"class":90}," python",[84,110342,109759],{"class":158},[19,110344,108917],{},[60,110346,110348],{"className":78,"code":110347,"language":80,"meta":66,"style":66},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[39,110349,110350],{"__ignoreMap":66},[84,110351,110352,110354,110356,110358,110360],{"class":86,"line":87},[84,110353,108949],{"class":154},[84,110355,867],{"class":129},[84,110357,108943],{"class":158},[84,110359,110340],{"class":90},[84,110361,109759],{"class":158},[19,110363,110364],{},"再做几个练习：",[26,110366,110367,110374,110377,110383],{},[29,110368,110369,110370,110373],{},"把 renderer 分辨率改成 ",[39,110371,110372],{},"height=240, width=320","，观察输出 shape。",[29,110375,110376],{},"把方块颜色改成蓝色，重新保存图片。",[29,110378,110379,110380,110382],{},"把相机 ",[39,110381,105283],{}," 改远一点，观察画面中物体是否变小。",[29,110384,110385,110386,103552,110389,110392],{},"把 viewer 示例中的 ",[39,110387,110388],{},"data.time \u003C 5.0",[39,110390,110391],{},"data.time \u003C 20.0","，观察更长时间。",[14,110394,103591],{"id":103590},[198,110396,110398],{"id":110397},"viewer-窗口打不开","viewer 窗口打不开",[19,110400,110401],{},"安装:",[60,110403,110405],{"className":78,"code":110404,"language":80,"meta":66,"style":66},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[39,110406,110407],{"__ignoreMap":66},[84,110408,110409,110411,110413,110415,110417,110419,110421,110423,110425,110427,110429],{"class":86,"line":87},[84,110410,311],{"class":90},[84,110412,361],{"class":158},[84,110414,275],{"class":158},[84,110416,27559],{"class":94},[84,110418,103644],{"class":158},[84,110420,101978],{"class":158},[84,110422,103649],{"class":158},[84,110424,101991],{"class":158},[84,110426,101997],{"class":158},[84,110428,101988],{"class":158},[84,110430,110431],{"class":158}," libXinerama\n",[198,110433,110435],{"id":110434},"glfwerror",[39,110436,110437],{},"GLFWError",[19,110439,110440],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[198,110442,110444],{"id":110443},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110446,110447,110448,83685,110450,110452],{},"尝试 ",[39,110449,102175],{},[39,110451,102178],{},"。可能存在版本差异。",[198,110454,110455],{"id":110455},"保存图片是黑的",[19,110457,103713],{},[26,110459,110460,110463,110466,110476],{},[29,110461,110462],{},"XML 里是否有 light。",[29,110464,110465],{},"相机是否对着模型。",[29,110467,110468,110469,110472,110473,55],{},"是否先 ",[39,110470,110471],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[39,110474,110475],{},"renderer.render()",[29,110477,110478],{},"物体是否已经掉出视野。",[198,110480,110481],{"id":110481},"远程服务器没有显示器",[19,110483,110484],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[60,110486,110487],{"className":78,"code":110327,"language":80,"meta":66,"style":66},[39,110488,110489],{"__ignoreMap":66},[84,110490,110491,110493,110495,110497,110499],{"class":86,"line":87},[84,110492,108949],{"class":154},[84,110494,867],{"class":129},[84,110496,108939],{"class":158},[84,110498,110340],{"class":90},[84,110500,109759],{"class":158},[19,110502,110503],{},"如果 EGL 不可用，再尝试：",[60,110505,110506],{"className":78,"code":110347,"language":80,"meta":66,"style":66},[39,110507,110508],{"__ignoreMap":66},[84,110509,110510,110512,110514,110516,110518],{"class":86,"line":87},[84,110511,108949],{"class":154},[84,110513,867],{"class":129},[84,110515,108943],{"class":158},[84,110517,110340],{"class":90},[84,110519,109759],{"class":158},[14,110521,103745],{"id":103744},[19,110523,110524],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,110526,110527,110530,110533],{},[29,110528,110529],{},"先用 viewer 看模型和控制是否正常。",[29,110531,110532],{},"再用 renderer 保存图片或构造视觉观测。",[29,110534,110535],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1222,110537,110538],{},"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":66,"searchDepth":98,"depth":98,"links":110540},[110541,110542,110543,110548,110553,110554,110555,110562],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":110544},[110545,110546,110547],{"id":109045,"depth":106,"text":109046},{"id":109075,"depth":106,"text":109076},{"id":109110,"depth":106,"text":109111},{"id":102390,"depth":98,"text":102391,"children":110549},[110550,110551,110552],{"id":102710,"depth":106,"text":102710},{"id":109855,"depth":106,"text":109856},{"id":110033,"depth":106,"text":110034},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":110556},[110557,110558,110559,110560,110561],{"id":110397,"depth":106,"text":110398},{"id":110434,"depth":106,"text":110437},{"id":110443,"depth":106,"text":110444},{"id":110455,"depth":106,"text":110455},{"id":110481,"depth":106,"text":110481},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108654,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110569,"title":110570,"body":110571,"description":66,"extension":1250,"meta":112482,"navigation":1252,"path":112483,"seo":112484,"stem":112485,"__hash__":112486},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110572,"toc":112458},[110573,110576,110578,110581,110583,110602,110605,110611,110614,110616,110618,110642,110644,110658,110660,110701,110703,110714,110716,110719,110725,110728,110762,110765,110797,110800,110832,110836,110839,110879,110882,110888,110891,110897,110901,110904,110910,110913,110917,110920,110960,110962,110975,110978,110980,111562,111564,111576,111579,111590,111592,111595,111614,111626,111629,111650,111653,111656,111699,111702,111705,111725,111732,111734,111752,111767,111770,111776,111779,111785,111802,111809,111840,111851,111885,111896,111913,111922,111930,111935,111949,111952,111973,111979,111993,111998,112028,112038,112063,112071,112094,112097,112113,112116,112124,112130,112152,112165,112186,112195,112234,112245,112247,112250,112256,112259,112262,112268,112271,112291,112294,112296,112335,112337,112340,112348,112351,112354,112381,112384,112394,112400,112403,112409,112411,112417,112421,112424,112426,112429,112453,112456],[10,110574,110570],{"id":110575},"_6控制任务cartpole",[14,110577,101792],{"id":101791},[19,110579,110580],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110582,105468],{},[26,110584,110585,110588,110590,110593,110596,110599],{},[29,110586,110587],{},"slide joint",[29,110589,107319],{},[29,110591,110592],{},"cart force actuator",[29,110594,110595],{},"状态观测",[29,110597,110598],{},"简单控制循环",[29,110600,110601],{},"reward 设计雏形",[19,110603,110604],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[60,110606,110609],{"className":110607,"code":110608,"language":65,"meta":66},[63],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[39,110610,110608],{"__ignoreMap":66},[19,110612,110613],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110615,101915],{"id":101914},[19,110617,101918],{},[60,110619,110620],{"className":78,"code":105524,"language":80,"meta":66,"style":66},[39,110621,110622],{"__ignoreMap":66},[84,110623,110624,110626,110628,110630,110632,110634,110636,110638,110640],{"class":86,"line":87},[84,110625,311],{"class":90},[84,110627,361],{"class":158},[84,110629,275],{"class":158},[84,110631,27559],{"class":94},[84,110633,328],{"class":158},[84,110635,331],{"class":158},[84,110637,103639],{"class":158},[84,110639,101958],{"class":158},[84,110641,105547],{"class":158},[19,110643,103956],{},[60,110645,110646],{"className":78,"code":102057,"language":80,"meta":66,"style":66},[39,110647,110648],{"__ignoreMap":66},[84,110649,110650,110652,110654,110656],{"class":86,"line":87},[84,110651,246],{"class":90},[84,110653,275],{"class":158},[84,110655,102068],{"class":158},[84,110657,102071],{"class":158},[19,110659,103973],{},[60,110661,110663],{"className":78,"code":110662,"language":80,"meta":66,"style":66},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[39,110664,110665,110682,110691],{"__ignoreMap":66},[84,110666,110667,110669,110671,110673,110676,110678,110680],{"class":86,"line":87},[84,110668,31487],{"class":90},[84,110670,30333],{"class":158},[84,110672,26279],{"class":94},[84,110674,110675],{"class":158}," mujoco-cartpole",[84,110677,102113],{"class":158},[84,110679,102116],{"class":94},[84,110681,102119],{"class":94},[84,110683,110684,110686,110688],{"class":86,"line":98},[84,110685,31487],{"class":90},[84,110687,102126],{"class":158},[84,110689,110690],{"class":158}," mujoco-cartpole\n",[84,110692,110693,110695,110697,110699],{"class":86,"line":106},[84,110694,246],{"class":90},[84,110696,275],{"class":158},[84,110698,102068],{"class":158},[84,110700,102071],{"class":158},[19,110702,102142],{},[26,110704,110705,110708,110711],{},[29,110706,110707],{},"本章不依赖 Gymnasium。",[29,110709,110710],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,110712,110713],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110715,102183],{"id":102182},[19,110717,110718],{},"Cartpole 的模型结构:",[60,110720,110723],{"className":110721,"code":110722,"language":65,"meta":66},[63],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[39,110724,110722],{"__ignoreMap":66},[19,110726,110727],{},"小车通过 slide joint 左右移动:",[60,110729,110731],{"className":54216,"code":110730,"language":54218,"meta":66,"style":66},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[39,110732,110733],{"__ignoreMap":66},[84,110734,110735,110737,110739,110741,110743,110746,110748,110750,110753,110755,110757,110760],{"class":86,"line":87},[84,110736,2218],{"class":154},[84,110738,104093],{"class":52449},[84,110740,16090],{"class":90},[84,110742,867],{"class":154},[84,110744,110745],{"class":158},"\"cart_x\"",[84,110747,54973],{"class":90},[84,110749,867],{"class":154},[84,110751,110752],{"class":158},"\"slide\"",[84,110754,107163],{"class":90},[84,110756,867],{"class":154},[84,110758,110759],{"class":158},"\"1 0 0\"",[84,110761,102282],{"class":154},[19,110763,110764],{},"杆子通过 hinge joint 旋转:",[60,110766,110768],{"className":54216,"code":110767,"language":54218,"meta":66,"style":66},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[39,110769,110770],{"__ignoreMap":66},[84,110771,110772,110774,110776,110778,110780,110783,110785,110787,110789,110791,110793,110795],{"class":86,"line":87},[84,110773,2218],{"class":154},[84,110775,104093],{"class":52449},[84,110777,16090],{"class":90},[84,110779,867],{"class":154},[84,110781,110782],{"class":158},"\"pole_hinge\"",[84,110784,54973],{"class":90},[84,110786,867],{"class":154},[84,110788,107154],{"class":158},[84,110790,107163],{"class":90},[84,110792,867],{"class":154},[84,110794,107168],{"class":158},[84,110796,102282],{"class":154},[19,110798,110799],{},"控制力作用在小车 slide joint 上:",[60,110801,110803],{"className":54216,"code":110802,"language":54218,"meta":66,"style":66},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[39,110804,110805],{"__ignoreMap":66},[84,110806,110807,110809,110811,110813,110815,110818,110820,110822,110824,110826,110828,110830],{"class":86,"line":87},[84,110808,2218],{"class":154},[84,110810,107209],{"class":52449},[84,110812,16090],{"class":90},[84,110814,867],{"class":154},[84,110816,110817],{"class":158},"\"cart_motor\"",[84,110819,107219],{"class":90},[84,110821,867],{"class":154},[84,110823,110745],{"class":158},[84,110825,107226],{"class":90},[84,110827,867],{"class":154},[84,110829,919],{"class":158},[84,110831,102282],{"class":154},[198,110833,110835],{"id":110834},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110837,110838],{},"这个简化模型有两个关节：",[458,110840,110841,110852],{},[461,110842,110843],{},[464,110844,110845,110847,110849],{},[467,110846,103896],{"align":24906},[467,110848,24907],{"align":24906},[467,110850,110851],{"align":24906},"对应状态",[474,110853,110854,110867],{},[464,110855,110856,110861,110864],{},[479,110857,110858],{"align":24906},[39,110859,110860],{},"cart_x",[479,110862,110863],{"align":24906},"slide",[479,110865,110866],{"align":24906},"小车 x 位置",[464,110868,110869,110874,110876],{},[479,110870,110871],{"align":24906},[39,110872,110873],{},"pole_hinge",[479,110875,106975],{"align":24906},[479,110877,110878],{"align":24906},"杆子角度",[19,110880,110881],{},"所以：",[60,110883,110886],{"className":110884,"code":110885,"language":65,"meta":66},[63],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[39,110887,110885],{"__ignoreMap":66},[19,110889,110890],{},"把它们拼起来就是观测：",[60,110892,110895],{"className":110893,"code":110894,"language":65,"meta":66},[63],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[39,110896,110894],{"__ignoreMap":66},[198,110898,110900],{"id":110899},"action-是什么","action 是什么",[19,110902,110903],{},"本章只有一个 actuator：",[60,110905,110908],{"className":110906,"code":110907,"language":65,"meta":66},[63],"data.ctrl[0] = action\n",[39,110909,110907],{"__ignoreMap":66},[19,110911,110912],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[198,110914,110916],{"id":110915},"reward-是什么","reward 是什么",[19,110918,110919],{},"奖励函数：",[60,110921,110923],{"className":121,"code":110922,"language":91,"meta":66,"style":66},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[39,110924,110925],{"__ignoreMap":66},[84,110926,110927,110929,110932,110934,110936,110938,110941,110943,110946,110948,110950,110952,110955,110957],{"class":86,"line":87},[84,110928,18216],{"class":129},[84,110930,110931],{"class":94}," float",[84,110933,155],{"class":154},[84,110935,103541],{"class":94},[84,110937,53420],{"class":129},[84,110939,110940],{"class":94}," 0.1",[84,110942,997],{"class":129},[84,110944,110945],{"class":154}," cart_x ",[84,110947,1043],{"class":129},[84,110949,110945],{"class":154},[84,110951,1841],{"class":129},[84,110953,110954],{"class":154}," pole_angle ",[84,110956,1043],{"class":129},[84,110958,110959],{"class":154}," pole_angle)\n",[19,110961,107361],{},[26,110963,110964,110969,110972],{},[29,110965,110966,110967,55],{},"基础奖励是 ",[39,110968,103541],{},[29,110970,110971],{},"小车离中心越远，扣分越多。",[29,110973,110974],{},"杆子角度越大，扣分越多。",[19,110976,110977],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110979,102391],{"id":102390},[60,110981,110983],{"className":121,"code":110982,"language":91,"meta":66,"style":66},"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",[39,110984,110985,110991,111001,111005,111009,111017,111022,111026,111030,111034,111039,111043,111048,111053,111058,111062,111067,111072,111077,111081,111085,111089,111093,111097,111102,111106,111110,111114,111118,111122,111132,111139,111143,111147,111161,111175,111188,111218,111222,111226,111238,111250,111258,111262,111275,111279,111283,111292,111296,111312,111322,111335,111348,111352,111375,111393,111397,111409,111413,111417,111427,111437,111441,111457,111498,111502,111522,111538,111542,111546,111558],{"__ignoreMap":66},[84,110986,110987,110989],{"class":86,"line":87},[84,110988,31547],{"class":129},[84,110990,102439],{"class":154},[84,110992,110993,110995,110997,110999],{"class":86,"line":98},[84,110994,31547],{"class":129},[84,110996,32534],{"class":154},[84,110998,1157],{"class":129},[84,111000,32539],{"class":154},[84,111002,111003],{"class":86,"line":106},[84,111004,3578],{"emptyLinePlaceholder":1252},[84,111006,111007],{"class":86,"line":112},[84,111008,3578],{"emptyLinePlaceholder":1252},[84,111010,111011,111013,111015],{"class":86,"line":425},[84,111012,102452],{"class":94},[84,111014,14735],{"class":129},[84,111016,102457],{"class":158},[84,111018,111019],{"class":86,"line":2395},[84,111020,111021],{"class":158},"\u003Cmujoco model=\"cartpole\">\n",[84,111023,111024],{"class":86,"line":2401},[84,111025,102467],{"class":158},[84,111027,111028],{"class":86,"line":2492},[84,111029,3578],{"emptyLinePlaceholder":1252},[84,111031,111032],{"class":86,"line":2498},[84,111033,102476],{"class":158},[84,111035,111036],{"class":86,"line":2510},[84,111037,111038],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,111040,111041],{"class":86,"line":2793},[84,111042,3578],{"emptyLinePlaceholder":1252},[84,111044,111045],{"class":86,"line":2798},[84,111046,111047],{"class":158},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[84,111049,111050],{"class":86,"line":2804},[84,111051,111052],{"class":158},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[84,111054,111055],{"class":86,"line":2809},[84,111056,111057],{"class":158},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[84,111059,111060],{"class":86,"line":2823},[84,111061,3578],{"emptyLinePlaceholder":1252},[84,111063,111064],{"class":86,"line":2828},[84,111065,111066],{"class":158},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[84,111068,111069],{"class":86,"line":2834},[84,111070,111071],{"class":158},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[84,111073,111074],{"class":86,"line":2855},[84,111075,111076],{"class":158},"        \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",[84,111078,111079],{"class":86,"line":2860},[84,111080,107573],{"class":158},[84,111082,111083],{"class":86,"line":2874},[84,111084,102505],{"class":158},[84,111086,111087],{"class":86,"line":2879},[84,111088,102510],{"class":158},[84,111090,111091],{"class":86,"line":2908},[84,111092,3578],{"emptyLinePlaceholder":1252},[84,111094,111095],{"class":86,"line":2913},[84,111096,107590],{"class":158},[84,111098,111099],{"class":86,"line":2930},[84,111100,111101],{"class":158},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,111103,111104],{"class":86,"line":2935},[84,111105,107600],{"class":158},[84,111107,111108],{"class":86,"line":2940},[84,111109,102515],{"class":158},[84,111111,111112],{"class":86,"line":2945},[84,111113,96844],{"class":158},[84,111115,111116],{"class":86,"line":2959},[84,111117,3578],{"emptyLinePlaceholder":1252},[84,111119,111120],{"class":86,"line":2964},[84,111121,3578],{"emptyLinePlaceholder":1252},[84,111123,111124,111126,111129],{"class":86,"line":3755},[84,111125,33100],{"class":129},[84,111127,111128],{"class":90}," get_observation",[84,111130,111131],{"class":154},"(data: mujoco.MjData) -> np.ndarray:\n",[84,111133,111134,111136],{"class":86,"line":3769},[84,111135,5268],{"class":129},[84,111137,111138],{"class":154}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[84,111140,111141],{"class":86,"line":3777},[84,111142,3578],{"emptyLinePlaceholder":1252},[84,111144,111145],{"class":86,"line":3782},[84,111146,3578],{"emptyLinePlaceholder":1252},[84,111148,111149,111151,111154,111157,111159],{"class":86,"line":3788},[84,111150,33100],{"class":129},[84,111152,111153],{"class":90}," compute_reward",[84,111155,111156],{"class":154},"(obs: np.ndarray) -> ",[84,111158,1362],{"class":94},[84,111160,4917],{"class":154},[84,111162,111163,111166,111168,111171,111173],{"class":86,"line":3794},[84,111164,111165],{"class":154},"    cart_x ",[84,111167,867],{"class":129},[84,111169,111170],{"class":154}," obs[",[84,111172,1504],{"class":94},[84,111174,34398],{"class":154},[84,111176,111177,111180,111182,111184,111186],{"class":86,"line":3799},[84,111178,111179],{"class":154},"    pole_angle ",[84,111181,867],{"class":129},[84,111183,111170],{"class":154},[84,111185,1529],{"class":94},[84,111187,34398],{"class":154},[84,111189,111190,111192,111194,111196,111198,111200,111202,111204,111206,111208,111210,111212,111214,111216],{"class":86,"line":9120},[84,111191,5268],{"class":129},[84,111193,110931],{"class":94},[84,111195,155],{"class":154},[84,111197,103541],{"class":94},[84,111199,53420],{"class":129},[84,111201,110940],{"class":94},[84,111203,997],{"class":129},[84,111205,110945],{"class":154},[84,111207,1043],{"class":129},[84,111209,110945],{"class":154},[84,111211,1841],{"class":129},[84,111213,110954],{"class":154},[84,111215,1043],{"class":129},[84,111217,110959],{"class":154},[84,111219,111220],{"class":86,"line":9144},[84,111221,3578],{"emptyLinePlaceholder":1252},[84,111223,111224],{"class":86,"line":9149},[84,111225,3578],{"emptyLinePlaceholder":1252},[84,111227,111228,111230,111232,111234,111236],{"class":86,"line":9155},[84,111229,33100],{"class":129},[84,111231,3153],{"class":90},[84,111233,102536],{"class":154},[84,111235,96832],{"class":94},[84,111237,4917],{"class":154},[84,111239,111240,111242,111244,111246,111248],{"class":86,"line":9182},[84,111241,102545],{"class":154},[84,111243,867],{"class":129},[84,111245,102550],{"class":154},[84,111247,102452],{"class":94},[84,111249,162],{"class":154},[84,111251,111252,111254,111256],{"class":86,"line":9187},[84,111253,102559],{"class":154},[84,111255,867],{"class":129},[84,111257,102564],{"class":154},[84,111259,111260],{"class":86,"line":9193},[84,111261,3578],{"emptyLinePlaceholder":1252},[84,111263,111264,111266,111268,111270,111272],{"class":86,"line":9205},[84,111265,106204],{"class":154},[84,111267,1529],{"class":94},[84,111269,5620],{"class":154},[84,111271,867],{"class":129},[84,111273,111274],{"class":94}," 0.1\n",[84,111276,111277],{"class":86,"line":9217},[84,111278,106217],{"class":154},[84,111280,111281],{"class":86,"line":9229},[84,111282,3578],{"emptyLinePlaceholder":1252},[84,111284,111285,111288,111290],{"class":86,"line":10888},[84,111286,111287],{"class":154},"    total_reward ",[84,111289,867],{"class":129},[84,111291,105896],{"class":94},[84,111293,111294],{"class":86,"line":10913},[84,111295,3578],{"emptyLinePlaceholder":1252},[84,111297,111298,111300,111302,111304,111306,111308,111310],{"class":86,"line":10936},[84,111299,4379],{"class":129},[84,111301,32769],{"class":154},[84,111303,27206],{"class":129},[84,111305,33596],{"class":94},[84,111307,155],{"class":154},[84,111309,7583],{"class":94},[84,111311,31940],{"class":154},[84,111313,111314,111317,111319],{"class":86,"line":10960},[84,111315,111316],{"class":154},"        obs ",[84,111318,867],{"class":129},[84,111320,111321],{"class":154}," get_observation(data)\n",[84,111323,111324,111327,111329,111331,111333],{"class":86,"line":10965},[84,111325,111326],{"class":154},"        pole_angle ",[84,111328,867],{"class":129},[84,111330,111170],{"class":154},[84,111332,1529],{"class":94},[84,111334,34398],{"class":154},[84,111336,111337,111340,111342,111344,111346],{"class":86,"line":10970},[84,111338,111339],{"class":154},"        pole_angular_velocity ",[84,111341,867],{"class":129},[84,111343,111170],{"class":154},[84,111345,1391],{"class":94},[84,111347,34398],{"class":154},[84,111349,111350],{"class":86,"line":10975},[84,111351,3578],{"emptyLinePlaceholder":1252},[84,111353,111354,111357,111359,111362,111364,111366,111368,111370,111372],{"class":86,"line":10984},[84,111355,111356],{"class":154},"        action ",[84,111358,867],{"class":129},[84,111360,111361],{"class":94}," 2.0",[84,111363,997],{"class":129},[84,111365,110954],{"class":154},[84,111367,1790],{"class":129},[84,111369,63013],{"class":94},[84,111371,997],{"class":129},[84,111373,111374],{"class":154}," pole_angular_velocity\n",[84,111376,111377,111379,111381,111383,111385,111387,111389,111391],{"class":86,"line":10989},[84,111378,111356],{"class":154},[84,111380,867],{"class":129},[84,111382,108582],{"class":154},[84,111384,1841],{"class":129},[84,111386,103541],{"class":94},[84,111388,846],{"class":154},[84,111390,103541],{"class":94},[84,111392,162],{"class":154},[84,111394,111395],{"class":86,"line":10995},[84,111396,3578],{"emptyLinePlaceholder":1252},[84,111398,111399,111401,111403,111405,111407],{"class":86,"line":11016},[84,111400,107752],{"class":154},[84,111402,1504],{"class":94},[84,111404,5620],{"class":154},[84,111406,867],{"class":129},[84,111408,108605],{"class":154},[84,111410,111411],{"class":86,"line":11022},[84,111412,102654],{"class":154},[84,111414,111415],{"class":86,"line":11036},[84,111416,3578],{"emptyLinePlaceholder":1252},[84,111418,111419,111422,111424],{"class":86,"line":11042},[84,111420,111421],{"class":154},"        reward ",[84,111423,867],{"class":129},[84,111425,111426],{"class":154}," compute_reward(get_observation(data))\n",[84,111428,111429,111432,111434],{"class":86,"line":11069},[84,111430,111431],{"class":154},"        total_reward ",[84,111433,10649],{"class":129},[84,111435,111436],{"class":154}," reward\n",[84,111438,111439],{"class":86,"line":11078},[84,111440,3578],{"emptyLinePlaceholder":1252},[84,111442,111443,111445,111447,111449,111451,111453,111455],{"class":86,"line":11084},[84,111444,3675],{"class":129},[84,111446,32769],{"class":154},[84,111448,1638],{"class":129},[84,111450,6928],{"class":94},[84,111452,102697],{"class":129},[84,111454,5271],{"class":94},[84,111456,4917],{"class":154},[84,111458,111459,111461,111463,111466,111469,111472,111475,111477,111480,111483,111485,111487,111489,111491,111494,111496],{"class":86,"line":11092},[84,111460,35802],{"class":94},[84,111462,155],{"class":154},[84,111464,111465],{"class":158},"\"step:\"",[84,111467,111468],{"class":154},", step, ",[84,111470,111471],{"class":158},"\"obs:\"",[84,111473,111474],{"class":154},", np.round(obs, ",[84,111476,1391],{"class":94},[84,111478,111479],{"class":154},"), ",[84,111481,111482],{"class":158},"\"action:\"",[84,111484,846],{"class":154},[84,111486,33171],{"class":94},[84,111488,155],{"class":154},[84,111490,1362],{"class":94},[84,111492,111493],{"class":154},"(action), ",[84,111495,1391],{"class":94},[84,111497,31651],{"class":154},[84,111499,111500],{"class":86,"line":11097},[84,111501,3578],{"emptyLinePlaceholder":1252},[84,111503,111504,111506,111508,111511,111513,111515,111518,111520],{"class":86,"line":17774},[84,111505,32453],{"class":94},[84,111507,155],{"class":154},[84,111509,111510],{"class":158},"\"total_reward:\"",[84,111512,846],{"class":154},[84,111514,33171],{"class":94},[84,111516,111517],{"class":154},"(total_reward, ",[84,111519,1391],{"class":94},[84,111521,31651],{"class":154},[84,111523,111524,111526,111528,111531,111534,111536],{"class":86,"line":17780},[84,111525,32453],{"class":94},[84,111527,155],{"class":154},[84,111529,111530],{"class":158},"\"final obs:\"",[84,111532,111533],{"class":154},", np.round(get_observation(data), ",[84,111535,1391],{"class":94},[84,111537,31651],{"class":154},[84,111539,111540],{"class":86,"line":17803},[84,111541,3578],{"emptyLinePlaceholder":1252},[84,111543,111544],{"class":86,"line":17809},[84,111545,3578],{"emptyLinePlaceholder":1252},[84,111547,111548,111550,111552,111554,111556],{"class":86,"line":17832},[84,111549,2712],{"class":129},[84,111551,32374],{"class":94},[84,111553,102697],{"class":129},[84,111555,102700],{"class":158},[84,111557,4917],{"class":154},[84,111559,111560],{"class":86,"line":17846},[84,111561,102707],{"class":154},[19,111563,104707],{},[60,111565,111567],{"className":78,"code":111566,"language":80,"meta":66,"style":66},"touch ch6_cartpole.py\n",[39,111568,111569],{"__ignoreMap":66},[84,111570,111571,111573],{"class":86,"line":87},[84,111572,102421],{"class":90},[84,111574,111575],{"class":158}," ch6_cartpole.py\n",[19,111577,111578],{},"运行：",[60,111580,111582],{"className":78,"code":111581,"language":80,"meta":66,"style":66},"python ch6_cartpole.py\n",[39,111583,111584],{"__ignoreMap":66},[84,111585,111586,111588],{"class":86,"line":87},[84,111587,91],{"class":90},[84,111589,111575],{"class":158},[198,111591,102710],{"id":102710},[19,111593,111594],{},"构造观测：",[60,111596,111598],{"className":121,"code":111597,"language":91,"meta":66,"style":66},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[39,111599,111600,111608],{"__ignoreMap":66},[84,111601,111602,111604,111606],{"class":86,"line":87},[84,111603,33100],{"class":129},[84,111605,111128],{"class":90},[84,111607,111131],{"class":154},[84,111609,111610,111612],{"class":86,"line":98},[84,111611,5268],{"class":129},[84,111613,111138],{"class":154},[19,111615,111616,111619,111620,111622,111623,111625],{},[39,111617,111618],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[39,111621,105167],{}," 2 维，",[39,111624,105497],{}," 2 维，所以 obs 是 4 维。",[19,111627,111628],{},"设置初始角度：",[60,111630,111632],{"className":121,"code":111631,"language":91,"meta":66,"style":66},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[39,111633,111634,111646],{"__ignoreMap":66},[84,111635,111636,111638,111640,111642,111644],{"class":86,"line":87},[84,111637,105834],{"class":154},[84,111639,1529],{"class":94},[84,111641,5620],{"class":154},[84,111643,867],{"class":129},[84,111645,111274],{"class":94},[84,111647,111648],{"class":86,"line":98},[84,111649,105678],{"class":154},[19,111651,111652],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111654,111655],{},"简单反馈控制：",[60,111657,111659],{"className":121,"code":111658,"language":91,"meta":66,"style":66},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[39,111660,111661,111681],{"__ignoreMap":66},[84,111662,111663,111665,111667,111669,111671,111673,111675,111677,111679],{"class":86,"line":87},[84,111664,108577],{"class":154},[84,111666,867],{"class":129},[84,111668,111361],{"class":94},[84,111670,997],{"class":129},[84,111672,110954],{"class":154},[84,111674,1790],{"class":129},[84,111676,63013],{"class":94},[84,111678,997],{"class":129},[84,111680,111374],{"class":154},[84,111682,111683,111685,111687,111689,111691,111693,111695,111697],{"class":86,"line":98},[84,111684,108577],{"class":154},[84,111686,867],{"class":129},[84,111688,108582],{"class":154},[84,111690,1841],{"class":129},[84,111692,103541],{"class":94},[84,111694,846],{"class":154},[84,111696,103541],{"class":94},[84,111698,162],{"class":154},[19,111700,111701],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111703,111704],{},"限制动作：",[60,111706,111708],{"className":121,"code":111707,"language":91,"meta":66,"style":66},"np.clip(action, -1.0, 1.0)\n",[39,111709,111710],{"__ignoreMap":66},[84,111711,111712,111715,111717,111719,111721,111723],{"class":86,"line":87},[84,111713,111714],{"class":154},"np.clip(action, ",[84,111716,1841],{"class":129},[84,111718,103541],{"class":94},[84,111720,846],{"class":154},[84,111722,103541],{"class":94},[84,111724,162],{"class":154},[19,111726,111727,111728,111731],{},"因为 XML 里 ",[39,111729,111730],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[198,111733,102846],{"id":102846},[60,111735,111736],{"className":121,"code":111597,"language":91,"meta":66,"style":66},[39,111737,111738,111746],{"__ignoreMap":66},[84,111739,111740,111742,111744],{"class":86,"line":87},[84,111741,33100],{"class":129},[84,111743,111128],{"class":90},[84,111745,111131],{"class":154},[84,111747,111748,111750],{"class":86,"line":98},[84,111749,5268],{"class":129},[84,111751,111138],{"class":154},[19,111753,111754,111755,111758,111759,111762,111763,111766],{},"这段定义了一个函数，用来获取当前观测。",[39,111756,111757],{},"data.qpos.copy()"," 是位置数组副本，",[39,111760,111761],{},"data.qvel.copy()"," 是速度数组副本。",[39,111764,111765],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111768,111769],{},"在本章模型里：",[60,111771,111774],{"className":111772,"code":111773,"language":65,"meta":66},[63],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[39,111775,111773],{"__ignoreMap":66},[19,111777,111778],{},"所以返回的 obs 是：",[60,111780,111783],{"className":111781,"code":111782,"language":65,"meta":66},[63],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[39,111784,111782],{"__ignoreMap":66},[60,111786,111788],{"className":121,"code":111787,"language":91,"meta":66,"style":66},"def compute_reward(obs: np.ndarray) -> float:\n",[39,111789,111790],{"__ignoreMap":66},[84,111791,111792,111794,111796,111798,111800],{"class":86,"line":87},[84,111793,33100],{"class":129},[84,111795,111153],{"class":90},[84,111797,111156],{"class":154},[84,111799,1362],{"class":94},[84,111801,4917],{"class":154},[19,111803,111804,111805,111808],{},"这行定义奖励函数。输入是观测 ",[39,111806,111807],{},"obs","，输出是一个浮点数奖励。",[60,111810,111812],{"className":121,"code":111811,"language":91,"meta":66,"style":66},"cart_x = obs[0]\npole_angle = obs[1]\n",[39,111813,111814,111827],{"__ignoreMap":66},[84,111815,111816,111819,111821,111823,111825],{"class":86,"line":87},[84,111817,111818],{"class":154},"cart_x ",[84,111820,867],{"class":129},[84,111822,111170],{"class":154},[84,111824,1504],{"class":94},[84,111826,34398],{"class":154},[84,111828,111829,111832,111834,111836,111838],{"class":86,"line":98},[84,111830,111831],{"class":154},"pole_angle ",[84,111833,867],{"class":129},[84,111835,111170],{"class":154},[84,111837,1529],{"class":94},[84,111839,34398],{"class":154},[19,111841,111842,111843,111846,111847,111850],{},"数组索引从 0 开始。",[39,111844,111845],{},"obs[0]"," 是第一个元素，也就是小车位置。",[39,111848,111849],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[60,111852,111853],{"className":121,"code":110922,"language":91,"meta":66,"style":66},[39,111854,111855],{"__ignoreMap":66},[84,111856,111857,111859,111861,111863,111865,111867,111869,111871,111873,111875,111877,111879,111881,111883],{"class":86,"line":87},[84,111858,18216],{"class":129},[84,111860,110931],{"class":94},[84,111862,155],{"class":154},[84,111864,103541],{"class":94},[84,111866,53420],{"class":129},[84,111868,110940],{"class":94},[84,111870,997],{"class":129},[84,111872,110945],{"class":154},[84,111874,1043],{"class":129},[84,111876,110945],{"class":154},[84,111878,1841],{"class":129},[84,111880,110954],{"class":154},[84,111882,1043],{"class":129},[84,111884,110959],{"class":154},[19,111886,111887,111888,111891,111892,111895],{},"这行计算奖励。",[39,111889,111890],{},"cart_x * cart_x"," 是小车位置的平方，",[39,111893,111894],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[60,111897,111899],{"className":121,"code":111898,"language":91,"meta":66,"style":66},"data.qpos[1] = 0.1\n",[39,111900,111901],{"__ignoreMap":66},[84,111902,111903,111905,111907,111909,111911],{"class":86,"line":87},[84,111904,105834],{"class":154},[84,111906,1529],{"class":94},[84,111908,5620],{"class":154},[84,111910,867],{"class":129},[84,111912,111274],{"class":94},[19,111914,111915,111916,111918,111919,111921],{},"手动设置杆子的初始角度。因为 ",[39,111917,106591],{}," 是小车位置，",[39,111920,106594],{}," 是杆子角度，所以这里改的是杆子。",[60,111923,111924],{"className":121,"code":105678,"language":91,"meta":66,"style":66},[39,111925,111926],{"__ignoreMap":66},[84,111927,111928],{"class":86,"line":87},[84,111929,105678],{"class":154},[19,111931,106637,111932,111934],{},[39,111933,105167],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[60,111936,111938],{"className":121,"code":111937,"language":91,"meta":66,"style":66},"total_reward = 0.0\n",[39,111939,111940],{"__ignoreMap":66},[84,111941,111942,111945,111947],{"class":86,"line":87},[84,111943,111944],{"class":154},"total_reward ",[84,111946,867],{"class":129},[84,111948,105896],{"class":94},[19,111950,111951],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[60,111953,111955],{"className":121,"code":111954,"language":91,"meta":66,"style":66},"for step in range(1000):\n",[39,111956,111957],{"__ignoreMap":66},[84,111958,111959,111961,111963,111965,111967,111969,111971],{"class":86,"line":87},[84,111960,4203],{"class":129},[84,111962,32769],{"class":154},[84,111964,27206],{"class":129},[84,111966,33596],{"class":94},[84,111968,155],{"class":154},[84,111970,7583],{"class":94},[84,111972,31940],{"class":154},[19,111974,111975,111976,111978],{},"循环 1000 步。",[39,111977,108269],{}," 是当前步数，从 0 到 999。",[60,111980,111982],{"className":121,"code":111981,"language":91,"meta":66,"style":66},"obs = get_observation(data)\n",[39,111983,111984],{"__ignoreMap":66},[84,111985,111986,111989,111991],{"class":86,"line":87},[84,111987,111988],{"class":154},"obs ",[84,111990,867],{"class":129},[84,111992,111321],{"class":154},[19,111994,111995,111996,55],{},"读取当前状态，保存到 ",[39,111997,111807],{},[60,111999,112001],{"className":121,"code":112000,"language":91,"meta":66,"style":66},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[39,112002,112003,112015],{"__ignoreMap":66},[84,112004,112005,112007,112009,112011,112013],{"class":86,"line":87},[84,112006,111831],{"class":154},[84,112008,867],{"class":129},[84,112010,111170],{"class":154},[84,112012,1529],{"class":94},[84,112014,34398],{"class":154},[84,112016,112017,112020,112022,112024,112026],{"class":86,"line":98},[84,112018,112019],{"class":154},"pole_angular_velocity ",[84,112021,867],{"class":129},[84,112023,111170],{"class":154},[84,112025,1391],{"class":94},[84,112027,34398],{"class":154},[19,112029,112030,112031,112034,112035,55],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[39,112032,112033],{},"obs[3]","？因为 obs 的顺序是 ",[39,112036,112037],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[60,112039,112041],{"className":121,"code":112040,"language":91,"meta":66,"style":66},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[39,112042,112043],{"__ignoreMap":66},[84,112044,112045,112047,112049,112051,112053,112055,112057,112059,112061],{"class":86,"line":87},[84,112046,108577],{"class":154},[84,112048,867],{"class":129},[84,112050,111361],{"class":94},[84,112052,997],{"class":129},[84,112054,110954],{"class":154},[84,112056,1790],{"class":129},[84,112058,63013],{"class":94},[84,112060,997],{"class":129},[84,112062,111374],{"class":154},[19,112064,112065,112066,102156,112068,112070],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[39,112067,106395],{},[39,112069,36481],{}," 是人为设置的系数，不是固定公式。",[60,112072,112074],{"className":121,"code":112073,"language":91,"meta":66,"style":66},"action = np.clip(action, -1.0, 1.0)\n",[39,112075,112076],{"__ignoreMap":66},[84,112077,112078,112080,112082,112084,112086,112088,112090,112092],{"class":86,"line":87},[84,112079,108577],{"class":154},[84,112081,867],{"class":129},[84,112083,108582],{"class":154},[84,112085,1841],{"class":129},[84,112087,103541],{"class":94},[84,112089,846],{"class":154},[84,112091,103541],{"class":94},[84,112093,162],{"class":154},[19,112095,112096],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[60,112098,112099],{"className":121,"code":110907,"language":91,"meta":66,"style":66},[39,112100,112101],{"__ignoreMap":66},[84,112102,112103,112105,112107,112109,112111],{"class":86,"line":87},[84,112104,107006],{"class":154},[84,112106,1504],{"class":94},[84,112108,5620],{"class":154},[84,112110,867],{"class":129},[84,112112,108605],{"class":154},[19,112114,112115],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[60,112117,112118],{"className":121,"code":105640,"language":91,"meta":66,"style":66},[39,112119,112120],{"__ignoreMap":66},[84,112121,112122],{"class":86,"line":87},[84,112123,105640],{"class":154},[19,112125,112126,112127,112129],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[39,112128,107261],{}," 计算小车和杆子的下一刻状态。",[60,112131,112133],{"className":121,"code":112132,"language":91,"meta":66,"style":66},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[39,112134,112135,112144],{"__ignoreMap":66},[84,112136,112137,112140,112142],{"class":86,"line":87},[84,112138,112139],{"class":154},"reward ",[84,112141,867],{"class":129},[84,112143,111426],{"class":154},[84,112145,112146,112148,112150],{"class":86,"line":98},[84,112147,111944],{"class":154},[84,112149,10649],{"class":129},[84,112151,111436],{"class":154},[19,112153,112154,112155,112157,112158,112161,112162,55],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[39,112156,10649],{}," 是简写，",[39,112159,112160],{},"total_reward += reward"," 等价于 ",[39,112163,112164],{},"total_reward = total_reward + reward",[60,112166,112168],{"className":121,"code":112167,"language":91,"meta":66,"style":66},"if step % 100 == 0:\n",[39,112169,112170],{"__ignoreMap":66},[84,112171,112172,112174,112176,112178,112180,112182,112184],{"class":86,"line":87},[84,112173,2712],{"class":129},[84,112175,32769],{"class":154},[84,112177,1638],{"class":129},[84,112179,6928],{"class":94},[84,112181,102697],{"class":129},[84,112183,5271],{"class":94},[84,112185,4917],{"class":154},[19,112187,112188,112190,112191,112194],{},[39,112189,1638],{}," 是取余数。",[39,112192,112193],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[60,112196,112198],{"className":121,"code":112197,"language":91,"meta":66,"style":66},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[39,112199,112200],{"__ignoreMap":66},[84,112201,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224,112226,112228,112230,112232],{"class":86,"line":87},[84,112203,730],{"class":94},[84,112205,155],{"class":154},[84,112207,111465],{"class":158},[84,112209,111468],{"class":154},[84,112211,111471],{"class":158},[84,112213,111474],{"class":154},[84,112215,1391],{"class":94},[84,112217,111479],{"class":154},[84,112219,111482],{"class":158},[84,112221,846],{"class":154},[84,112223,33171],{"class":94},[84,112225,155],{"class":154},[84,112227,1362],{"class":94},[84,112229,111493],{"class":154},[84,112231,1391],{"class":94},[84,112233,31651],{"class":154},[19,112235,112236,112237,112240,112241,112244],{},"打印当前步数、观测和动作。",[39,112238,112239],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[39,112242,112243],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112246,103454],{"id":103453},[19,112248,112249],{},"观测向量:",[60,112251,112254],{"className":112252,"code":112253,"language":65,"meta":66},[63],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[39,112255,112253],{"__ignoreMap":66},[19,112257,112258],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112260,112261],{},"每隔 100 步会打印一次：",[60,112263,112266],{"className":112264,"code":112265,"language":65,"meta":66},[63],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[39,112267,112265],{"__ignoreMap":66},[19,112269,112270],{},"重点观察：",[26,112272,112273,112279,112284],{},[29,112274,112275,112278],{},[39,112276,112277],{},"pole_angle"," 是否越来越大。",[29,112280,112281,112283],{},[39,112282,110860],{}," 是否跑得太远。",[29,112285,112286,112287,83685,112289,55],{},"action 是否经常被 clip 到 ",[39,112288,105052],{},[39,112290,1529],{},[19,112292,112293],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112295,103486],{"id":103485},[26,112297,112298,112304,112307,112313,112323,112329,112332],{},[29,112299,112300,112301,55],{},"把初始角度改为 ",[39,112302,112303],{},"data.qpos[1] = 0.3",[29,112305,112306],{},"重新运行，观察控制是否变差。",[29,112308,112309,112310,112312],{},"把 actuator ",[39,112311,108202],{}," 改小。",[29,112314,112315,112316,112319,112320,55],{},"打印 ",[39,112317,112318],{},"model.nq, model.nv, model.nu","，应为 ",[39,112321,112322],{},"2 2 1",[29,112324,112325,112326,112328],{},"把 reward 里的 ",[39,112327,111894],{}," 系数改大，观察总奖励变化。",[29,112330,112331],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,112333,112334],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112336,103591],{"id":103590},[198,112338,112339],{"id":112339},"杆子方向和预期不一致",[19,112341,103534,112342,112344,112345,112347],{},[39,112343,107374],{}," 和 capsule 的 ",[39,112346,104313],{},"，必要时用 viewer 可视化确认。",[198,112349,112350],{"id":112350},"控制器越控越倒",[19,112352,112353],{},"说明反馈符号可能反了，尝试:",[60,112355,112357],{"className":121,"code":112356,"language":91,"meta":66,"style":66},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[39,112358,112359],{"__ignoreMap":66},[84,112360,112361,112363,112365,112367,112369,112371,112373,112375,112377,112379],{"class":86,"line":87},[84,112362,108577],{"class":154},[84,112364,867],{"class":129},[84,112366,53420],{"class":129},[84,112368,106395],{"class":94},[84,112370,997],{"class":129},[84,112372,110954],{"class":154},[84,112374,1841],{"class":129},[84,112376,63013],{"class":94},[84,112378,997],{"class":129},[84,112380,111374],{"class":154},[198,112382,112383],{"id":112383},"小车飞走",[19,112385,112386,112387,112389,112390,112393],{},"降低 ",[39,112388,108202],{}," 或缩小 ",[39,112391,112392],{},"action"," 的 clip 范围。",[198,112395,112397,112399],{"id":112396},"obs3-为什么是杆子角速度",[39,112398,112033],{}," 为什么是杆子角速度",[19,112401,112402],{},"因为这个模型里：",[60,112404,112407],{"className":112405,"code":112406,"language":65,"meta":66},[63],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[39,112408,112406],{"__ignoreMap":66},[19,112410,110881],{},[60,112412,112415],{"className":112413,"code":112414,"language":65,"meta":66},[63],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[39,112416,112414],{"__ignoreMap":66},[198,112418,112420],{"id":112419},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112422,112423],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112425,103745],{"id":103744},[19,112427,112428],{},"一个控制任务通常包含：",[26,112430,112431,112434,112442,112447,112450],{},[29,112432,112433],{},"模型：Cartpole 的 body、joint、actuator。",[29,112435,112436,112437,42,112439,112441],{},"观测：从 ",[39,112438,105167],{},[39,112440,105497],{}," 里取状态。",[29,112443,112444,112445,55],{},"动作：写入 ",[39,112446,102214],{},[29,112448,112449],{},"奖励：根据任务目标打分。",[29,112451,112452],{},"循环：obs -> action -> step -> reward。",[19,112454,112455],{},"这就是后面 Gymnasium 环境的基本骨架。",[1222,112457,105423],{},{"title":66,"searchDepth":98,"depth":98,"links":112459},[112460,112461,112462,112467,112471,112472,112473,112481],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":112463},[112464,112465,112466],{"id":110834,"depth":106,"text":110835},{"id":110899,"depth":106,"text":110900},{"id":110915,"depth":106,"text":110916},{"id":102390,"depth":98,"text":102391,"children":112468},[112469,112470],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":112474},[112475,112476,112477,112478,112480],{"id":112339,"depth":106,"text":112339},{"id":112350,"depth":106,"text":112350},{"id":112383,"depth":106,"text":112383},{"id":112396,"depth":106,"text":112479},"obs[3] 为什么是杆子角速度",{"id":112419,"depth":106,"text":112420},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110570,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112488,"title":112489,"body":112490,"description":66,"extension":1250,"meta":114504,"navigation":1252,"path":114505,"seo":114506,"stem":114507,"__hash__":114508},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112491,"toc":114480},[112492,112495,112497,112500,112502,112519,112522,112525,112531,112534,112536,112538,112562,112564,112578,112580,112621,112623,112641,112643,112646,112652,112655,112683,112687,112693,112718,112721,112752,112759,112762,112765,112771,112774,112780,112783,112789,112793,112796,112821,112824,112826,113586,113588,113600,113602,113613,113615,113618,113635,113638,113640,113651,113654,113656,113702,113705,113718,113721,113803,113806,113808,113824,113834,113847,113850,113889,113899,113910,113920,113933,113936,113965,113968,113978,113981,113987,114004,114015,114017,114023,114040,114051,114072,114075,114087,114090,114111,114114,114122,114130,114147,114150,114219,114226,114234,114237,114250,114257,114259,114262,114268,114271,114274,114280,114286,114288,114328,114330,114336,114345,114348,114350,114370,114373,114376,114382,114386,114388,114415,114418,114421,114448,114454,114457,114460,114462,114465,114468,114474,114477],[10,112493,112489],{"id":112494},"_7控制任务reacher-机械臂到达目标",[14,112496,101792],{"id":101791},[19,112498,112499],{},"本章搭建一个二维两关节 reacher 任务。",[19,112501,105468],{},[26,112503,112504,112507,112510,112513,112516],{},[29,112505,112506],{},"两个 hinge joint",[29,112508,112509],{},"两个 motor actuator",[29,112511,112512],{},"site 作为末端点和目标点",[29,112514,112515],{},"根据末端和目标距离设计 reward",[29,112517,112518],{},"构造机械臂任务的基本形式",[19,112520,112521],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112523,112524],{},"Reacher 任务可以理解为：",[60,112526,112529],{"className":112527,"code":112528,"language":65,"meta":66},[63],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[39,112530,112528],{"__ignoreMap":66},[19,112532,112533],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112535,101915],{"id":101914},[19,112537,101918],{},[60,112539,112540],{"className":78,"code":105524,"language":80,"meta":66,"style":66},[39,112541,112542],{"__ignoreMap":66},[84,112543,112544,112546,112548,112550,112552,112554,112556,112558,112560],{"class":86,"line":87},[84,112545,311],{"class":90},[84,112547,361],{"class":158},[84,112549,275],{"class":158},[84,112551,27559],{"class":94},[84,112553,328],{"class":158},[84,112555,331],{"class":158},[84,112557,103639],{"class":158},[84,112559,101958],{"class":158},[84,112561,105547],{"class":158},[19,112563,103956],{},[60,112565,112566],{"className":78,"code":102057,"language":80,"meta":66,"style":66},[39,112567,112568],{"__ignoreMap":66},[84,112569,112570,112572,112574,112576],{"class":86,"line":87},[84,112571,246],{"class":90},[84,112573,275],{"class":158},[84,112575,102068],{"class":158},[84,112577,102071],{"class":158},[19,112579,103973],{},[60,112581,112583],{"className":78,"code":112582,"language":80,"meta":66,"style":66},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[39,112584,112585,112602,112611],{"__ignoreMap":66},[84,112586,112587,112589,112591,112593,112596,112598,112600],{"class":86,"line":87},[84,112588,31487],{"class":90},[84,112590,30333],{"class":158},[84,112592,26279],{"class":94},[84,112594,112595],{"class":158}," mujoco-reacher",[84,112597,102113],{"class":158},[84,112599,102116],{"class":94},[84,112601,102119],{"class":94},[84,112603,112604,112606,112608],{"class":86,"line":98},[84,112605,31487],{"class":90},[84,112607,102126],{"class":158},[84,112609,112610],{"class":158}," mujoco-reacher\n",[84,112612,112613,112615,112617,112619],{"class":86,"line":106},[84,112614,246],{"class":90},[84,112616,275],{"class":158},[84,112618,102068],{"class":158},[84,112620,102071],{"class":158},[19,112622,102142],{},[26,112624,112625,112628,112631],{},[29,112626,112627],{},"本章使用低维状态，不使用图像输入。",[29,112629,112630],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,112632,112633,112634,42,112636,42,112638,112640],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[39,112635,105167],{},[39,112637,105497],{},[39,112639,104817],{}," 的方法一致。",[14,112642,102183],{"id":102182},[19,112644,112645],{},"Reacher 任务核心:",[60,112647,112650],{"className":112648,"code":112649,"language":65,"meta":66},[63],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[39,112651,112649],{"__ignoreMap":66},[19,112653,112654],{},"读取 site 世界坐标:",[60,112656,112658],{"className":121,"code":112657,"language":91,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[39,112659,112660,112673],{"__ignoreMap":66},[84,112661,112662,112664,112666,112668,112671],{"class":86,"line":87},[84,112663,104771],{"class":154},[84,112665,867],{"class":129},[84,112667,104542],{"class":154},[84,112669,112670],{"class":158},"\"tip\"",[84,112672,162],{"class":154},[84,112674,112675,112678,112680],{"class":86,"line":98},[84,112676,112677],{"class":154},"tip_pos ",[84,112679,867],{"class":129},[84,112681,112682],{"class":154}," data.site_xpos[site_id]\n",[198,112684,112686],{"id":112685},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112688,112689,112690,112692],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[39,112691,105167],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[60,112694,112696],{"className":121,"code":112695,"language":91,"meta":66,"style":66},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[39,112697,112698,112708],{"__ignoreMap":66},[84,112699,112700,112703,112705],{"class":86,"line":87},[84,112701,112702],{"class":154},"tip ",[84,112704,867],{"class":129},[84,112706,112707],{"class":154}," data.site_xpos[tip_site_id]\n",[84,112709,112710,112713,112715],{"class":86,"line":98},[84,112711,112712],{"class":154},"target ",[84,112714,867],{"class":129},[84,112716,112717],{"class":154}," data.site_xpos[target_site_id]\n",[19,112719,112720],{},"这样 reward 就很容易写：",[60,112722,112724],{"className":121,"code":112723,"language":91,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[39,112725,112726,112741],{"__ignoreMap":66},[84,112727,112728,112731,112733,112736,112738],{"class":86,"line":87},[84,112729,112730],{"class":154},"dist ",[84,112732,867],{"class":129},[84,112734,112735],{"class":154}," np.linalg.norm(tip ",[84,112737,1841],{"class":129},[84,112739,112740],{"class":154}," target)\n",[84,112742,112743,112745,112747,112749],{"class":86,"line":98},[84,112744,112139],{"class":154},[84,112746,867],{"class":129},[84,112748,53420],{"class":129},[84,112750,112751],{"class":154},"dist\n",[19,112753,112754,112755,112758],{},"距离越小，",[39,112756,112757],{},"-dist"," 越接近 0，奖励越高。",[198,112760,112761],{"id":112761},"两关节机械臂的状态",[19,112763,112764],{},"这个模型有两个 hinge joint：",[60,112766,112769],{"className":112767,"code":112768,"language":65,"meta":66},[63],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[39,112770,112768],{"__ignoreMap":66},[19,112772,112773],{},"再加上末端和目标位置：",[60,112775,112778],{"className":112776,"code":112777,"language":65,"meta":66},[63],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[39,112779,112777],{"__ignoreMap":66},[19,112781,112782],{},"总维度：",[60,112784,112787],{"className":112785,"code":112786,"language":65,"meta":66},[63],"2 + 2 + 3 + 3 = 10\n",[39,112788,112786],{"__ignoreMap":66},[198,112790,112792],{"id":112791},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112794,112795],{},"本章把重力设为：",[60,112797,112799],{"className":54216,"code":112798,"language":54218,"meta":66,"style":66},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[39,112800,112801],{"__ignoreMap":66},[84,112802,112803,112805,112807,112809,112811,112813,112815,112817,112819],{"class":86,"line":87},[84,112804,2218],{"class":154},[84,112806,70312],{"class":52449},[84,112808,102332],{"class":90},[84,112810,867],{"class":154},[84,112812,102337],{"class":158},[84,112814,102340],{"class":90},[84,112816,867],{"class":154},[84,112818,104908],{"class":158},[84,112820,102282],{"class":154},[19,112822,112823],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112825,102391],{"id":102390},[60,112827,112829],{"className":121,"code":112828,"language":91,"meta":66,"style":66},"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",[39,112830,112831,112837,112847,112851,112855,112863,112868,112873,112877,112881,112886,112891,112895,112900,112905,112910,112914,112919,112924,112929,112934,112938,112942,112946,112950,112954,112959,112964,112968,112972,112976,112980,112984,112999,113008,113020,113043,113050,113054,113058,113068,113082,113096,113103,113107,113111,113125,113137,113149,113162,113177,113194,113198,113202,113214,113226,113234,113242,113246,113262,113267,113280,113293,113308,113312,113347,113379,113383,113387,113396,113400,113416,113426,113437,113453,113469,113485,113501,113505,113523,113543,113562,113566,113570,113582],{"__ignoreMap":66},[84,112832,112833,112835],{"class":86,"line":87},[84,112834,31547],{"class":129},[84,112836,102439],{"class":154},[84,112838,112839,112841,112843,112845],{"class":86,"line":98},[84,112840,31547],{"class":129},[84,112842,32534],{"class":154},[84,112844,1157],{"class":129},[84,112846,32539],{"class":154},[84,112848,112849],{"class":86,"line":106},[84,112850,3578],{"emptyLinePlaceholder":1252},[84,112852,112853],{"class":86,"line":112},[84,112854,3578],{"emptyLinePlaceholder":1252},[84,112856,112857,112859,112861],{"class":86,"line":425},[84,112858,102452],{"class":94},[84,112860,14735],{"class":129},[84,112862,102457],{"class":158},[84,112864,112865],{"class":86,"line":2395},[84,112866,112867],{"class":158},"\u003Cmujoco model=\"two_link_reacher\">\n",[84,112869,112870],{"class":86,"line":2401},[84,112871,112872],{"class":158},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[84,112874,112875],{"class":86,"line":2492},[84,112876,3578],{"emptyLinePlaceholder":1252},[84,112878,112879],{"class":86,"line":2498},[84,112880,102476],{"class":158},[84,112882,112883],{"class":86,"line":2510},[84,112884,112885],{"class":158},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[84,112887,112888],{"class":86,"line":2793},[84,112889,112890],{"class":158},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[84,112892,112893],{"class":86,"line":2798},[84,112894,3578],{"emptyLinePlaceholder":1252},[84,112896,112897],{"class":86,"line":2804},[84,112898,112899],{"class":158},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[84,112901,112902],{"class":86,"line":2809},[84,112903,112904],{"class":158},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,112906,112907],{"class":86,"line":2823},[84,112908,112909],{"class":158},"      \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",[84,112911,112912],{"class":86,"line":2828},[84,112913,3578],{"emptyLinePlaceholder":1252},[84,112915,112916],{"class":86,"line":2834},[84,112917,112918],{"class":158},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[84,112920,112921],{"class":86,"line":2855},[84,112922,112923],{"class":158},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,112925,112926],{"class":86,"line":2860},[84,112927,112928],{"class":158},"        \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",[84,112930,112931],{"class":86,"line":2874},[84,112932,112933],{"class":158},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[84,112935,112936],{"class":86,"line":2879},[84,112937,107573],{"class":158},[84,112939,112940],{"class":86,"line":2908},[84,112941,102505],{"class":158},[84,112943,112944],{"class":86,"line":2913},[84,112945,102510],{"class":158},[84,112947,112948],{"class":86,"line":2930},[84,112949,3578],{"emptyLinePlaceholder":1252},[84,112951,112952],{"class":86,"line":2935},[84,112953,107590],{"class":158},[84,112955,112956],{"class":86,"line":2940},[84,112957,112958],{"class":158},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,112960,112961],{"class":86,"line":2945},[84,112962,112963],{"class":158},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,112965,112966],{"class":86,"line":2959},[84,112967,107600],{"class":158},[84,112969,112970],{"class":86,"line":2964},[84,112971,102515],{"class":158},[84,112973,112974],{"class":86,"line":3755},[84,112975,96844],{"class":158},[84,112977,112978],{"class":86,"line":3769},[84,112979,3578],{"emptyLinePlaceholder":1252},[84,112981,112982],{"class":86,"line":3777},[84,112983,3578],{"emptyLinePlaceholder":1252},[84,112985,112986,112988,112991,112994,112996],{"class":86,"line":3782},[84,112987,33100],{"class":129},[84,112989,112990],{"class":90}," site_position",[84,112992,112993],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[84,112995,2480],{"class":94},[84,112997,112998],{"class":154},") -> np.ndarray:\n",[84,113000,113001,113003,113005],{"class":86,"line":3788},[84,113002,104537],{"class":154},[84,113004,867],{"class":129},[84,113006,113007],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[84,113009,113010,113012,113014,113016,113018],{"class":86,"line":3794},[84,113011,4279],{"class":129},[84,113013,104586],{"class":154},[84,113015,2218],{"class":129},[84,113017,5271],{"class":94},[84,113019,4917],{"class":154},[84,113021,113022,113024,113026,113028,113030,113033,113035,113037,113039,113041],{"class":86,"line":3799},[84,113023,104569],{"class":129},[84,113025,104572],{"class":94},[84,113027,155],{"class":154},[84,113029,1372],{"class":129},[84,113031,113032],{"class":158},"\"site not found: ",[84,113034,2204],{"class":94},[84,113036,80956],{"class":154},[84,113038,2254],{"class":94},[84,113040,1562],{"class":158},[84,113042,162],{"class":154},[84,113044,113045,113047],{"class":86,"line":9120},[84,113046,5268],{"class":129},[84,113048,113049],{"class":154}," data.site_xpos[site_id].copy()\n",[84,113051,113052],{"class":86,"line":9144},[84,113053,3578],{"emptyLinePlaceholder":1252},[84,113055,113056],{"class":86,"line":9149},[84,113057,3578],{"emptyLinePlaceholder":1252},[84,113059,113060,113062,113065],{"class":86,"line":9155},[84,113061,33100],{"class":129},[84,113063,113064],{"class":90}," get_obs",[84,113066,113067],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[84,113069,113070,113073,113075,113078,113080],{"class":86,"line":9182},[84,113071,113072],{"class":154},"    tip ",[84,113074,867],{"class":129},[84,113076,113077],{"class":154}," site_position(model, data, ",[84,113079,112670],{"class":158},[84,113081,162],{"class":154},[84,113083,113084,113087,113089,113091,113094],{"class":86,"line":9187},[84,113085,113086],{"class":154},"    target ",[84,113088,867],{"class":129},[84,113090,113077],{"class":154},[84,113092,113093],{"class":158},"\"target\"",[84,113095,162],{"class":154},[84,113097,113098,113100],{"class":86,"line":9193},[84,113099,5268],{"class":129},[84,113101,113102],{"class":154}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[84,113104,113105],{"class":86,"line":9205},[84,113106,3578],{"emptyLinePlaceholder":1252},[84,113108,113109],{"class":86,"line":9217},[84,113110,3578],{"emptyLinePlaceholder":1252},[84,113112,113113,113115,113118,113121,113123],{"class":86,"line":9229},[84,113114,33100],{"class":129},[84,113116,113117],{"class":90}," reward",[84,113119,113120],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[84,113122,1362],{"class":94},[84,113124,4917],{"class":154},[84,113126,113127,113129,113131,113133,113135],{"class":86,"line":10888},[84,113128,113072],{"class":154},[84,113130,867],{"class":129},[84,113132,113077],{"class":154},[84,113134,112670],{"class":158},[84,113136,162],{"class":154},[84,113138,113139,113141,113143,113145,113147],{"class":86,"line":10913},[84,113140,113086],{"class":154},[84,113142,867],{"class":129},[84,113144,113077],{"class":154},[84,113146,113093],{"class":158},[84,113148,162],{"class":154},[84,113150,113151,113154,113156,113158,113160],{"class":86,"line":10936},[84,113152,113153],{"class":154},"    dist ",[84,113155,867],{"class":129},[84,113157,112735],{"class":154},[84,113159,1841],{"class":129},[84,113161,112740],{"class":154},[84,113163,113164,113167,113169,113172,113174],{"class":86,"line":10960},[84,113165,113166],{"class":154},"    control_cost ",[84,113168,867],{"class":129},[84,113170,113171],{"class":94}," 0.01",[84,113173,997],{"class":129},[84,113175,113176],{"class":154}," np.sum(np.square(data.ctrl))\n",[84,113178,113179,113181,113183,113185,113187,113189,113191],{"class":86,"line":10965},[84,113180,5268],{"class":129},[84,113182,110931],{"class":94},[84,113184,155],{"class":154},[84,113186,1841],{"class":129},[84,113188,112730],{"class":154},[84,113190,1841],{"class":129},[84,113192,113193],{"class":154}," control_cost)\n",[84,113195,113196],{"class":86,"line":10970},[84,113197,3578],{"emptyLinePlaceholder":1252},[84,113199,113200],{"class":86,"line":10975},[84,113201,3578],{"emptyLinePlaceholder":1252},[84,113203,113204,113206,113208,113210,113212],{"class":86,"line":10984},[84,113205,33100],{"class":129},[84,113207,3153],{"class":90},[84,113209,102536],{"class":154},[84,113211,96832],{"class":94},[84,113213,4917],{"class":154},[84,113215,113216,113218,113220,113222,113224],{"class":86,"line":10989},[84,113217,102545],{"class":154},[84,113219,867],{"class":129},[84,113221,102550],{"class":154},[84,113223,102452],{"class":94},[84,113225,162],{"class":154},[84,113227,113228,113230,113232],{"class":86,"line":10995},[84,113229,102559],{"class":154},[84,113231,867],{"class":129},[84,113233,102564],{"class":154},[84,113235,113236,113238,113240],{"class":86,"line":11016},[84,113237,111287],{"class":154},[84,113239,867],{"class":129},[84,113241,105896],{"class":94},[84,113243,113244],{"class":86,"line":11022},[84,113245,3578],{"emptyLinePlaceholder":1252},[84,113247,113248,113250,113252,113254,113256,113258,113260],{"class":86,"line":11036},[84,113249,4379],{"class":129},[84,113251,32769],{"class":154},[84,113253,27206],{"class":129},[84,113255,33596],{"class":94},[84,113257,155],{"class":154},[84,113259,66220],{"class":94},[84,113261,31940],{"class":154},[84,113263,113264],{"class":86,"line":11042},[84,113265,113266],{"class":154},"        mujoco.mj_forward(model, data)\n",[84,113268,113269,113272,113274,113276,113278],{"class":86,"line":11069},[84,113270,113271],{"class":154},"        tip ",[84,113273,867],{"class":129},[84,113275,113077],{"class":154},[84,113277,112670],{"class":158},[84,113279,162],{"class":154},[84,113281,113282,113285,113287,113289,113291],{"class":86,"line":11078},[84,113283,113284],{"class":154},"        target ",[84,113286,867],{"class":129},[84,113288,113077],{"class":154},[84,113290,113093],{"class":158},[84,113292,162],{"class":154},[84,113294,113295,113298,113300,113303,113305],{"class":86,"line":11084},[84,113296,113297],{"class":154},"        error ",[84,113299,867],{"class":129},[84,113301,113302],{"class":154}," target ",[84,113304,1841],{"class":129},[84,113306,113307],{"class":154}," tip\n",[84,113309,113310],{"class":86,"line":11092},[84,113311,3578],{"emptyLinePlaceholder":1252},[84,113313,113314,113316,113318,113320,113322,113325,113327,113329,113332,113334,113337,113339,113341,113343,113345],{"class":86,"line":11097},[84,113315,107752],{"class":154},[84,113317,1504],{"class":94},[84,113319,5620],{"class":154},[84,113321,867],{"class":129},[84,113323,113324],{"class":154}," np.clip(",[84,113326,106395],{"class":94},[84,113328,997],{"class":129},[84,113330,113331],{"class":154}," error[",[84,113333,1397],{"class":94},[84,113335,113336],{"class":154},"], ",[84,113338,1841],{"class":129},[84,113340,103541],{"class":94},[84,113342,846],{"class":154},[84,113344,103541],{"class":94},[84,113346,162],{"class":154},[84,113348,113349,113351,113353,113355,113357,113359,113361,113363,113365,113367,113369,113371,113373,113375,113377],{"class":86,"line":17774},[84,113350,107752],{"class":154},[84,113352,1529],{"class":94},[84,113354,5620],{"class":154},[84,113356,867],{"class":129},[84,113358,113324],{"class":154},[84,113360,106395],{"class":94},[84,113362,997],{"class":129},[84,113364,113331],{"class":154},[84,113366,1504],{"class":94},[84,113368,113336],{"class":154},[84,113370,1841],{"class":129},[84,113372,103541],{"class":94},[84,113374,846],{"class":154},[84,113376,103541],{"class":94},[84,113378,162],{"class":154},[84,113380,113381],{"class":86,"line":17780},[84,113382,3578],{"emptyLinePlaceholder":1252},[84,113384,113385],{"class":86,"line":17803},[84,113386,102654],{"class":154},[84,113388,113389,113391,113393],{"class":86,"line":17809},[84,113390,111431],{"class":154},[84,113392,10649],{"class":129},[84,113394,113395],{"class":154}," reward(model, data)\n",[84,113397,113398],{"class":86,"line":17832},[84,113399,3578],{"emptyLinePlaceholder":1252},[84,113401,113402,113404,113406,113408,113410,113412,113414],{"class":86,"line":17846},[84,113403,3675],{"class":129},[84,113405,32769],{"class":154},[84,113407,1638],{"class":129},[84,113409,6928],{"class":94},[84,113411,102697],{"class":129},[84,113413,5271],{"class":94},[84,113415,4917],{"class":154},[84,113417,113418,113421,113423],{"class":86,"line":17866},[84,113419,113420],{"class":154},"            obs ",[84,113422,867],{"class":129},[84,113424,113425],{"class":154}," get_obs(model, data)\n",[84,113427,113428,113430,113432,113434],{"class":86,"line":17872},[84,113429,35802],{"class":94},[84,113431,155],{"class":154},[84,113433,111465],{"class":158},[84,113435,113436],{"class":154},", step)\n",[84,113438,113439,113441,113443,113446,113449,113451],{"class":86,"line":17883},[84,113440,35802],{"class":94},[84,113442,155],{"class":154},[84,113444,113445],{"class":158},"\"  tip:\"",[84,113447,113448],{"class":154},", np.round(tip, ",[84,113450,1391],{"class":94},[84,113452,31651],{"class":154},[84,113454,113455,113457,113459,113462,113465,113467],{"class":86,"line":17906},[84,113456,35802],{"class":94},[84,113458,155],{"class":154},[84,113460,113461],{"class":158},"\"  target:\"",[84,113463,113464],{"class":154},", np.round(target, ",[84,113466,1391],{"class":94},[84,113468,31651],{"class":154},[84,113470,113471,113473,113475,113478,113481,113483],{"class":86,"line":17928},[84,113472,35802],{"class":94},[84,113474,155],{"class":154},[84,113476,113477],{"class":158},"\"  ctrl:\"",[84,113479,113480],{"class":154},", np.round(data.ctrl.copy(), ",[84,113482,1391],{"class":94},[84,113484,31651],{"class":154},[84,113486,113487,113489,113491,113494,113497,113499],{"class":86,"line":17933},[84,113488,35802],{"class":94},[84,113490,155],{"class":154},[84,113492,113493],{"class":158},"\"  obs_dim:\"",[84,113495,113496],{"class":154},", obs.shape[",[84,113498,1504],{"class":94},[84,113500,5834],{"class":154},[84,113502,113503],{"class":86,"line":17939},[84,113504,3578],{"emptyLinePlaceholder":1252},[84,113506,113507,113509,113511,113513,113515,113517,113519,113521],{"class":86,"line":17953},[84,113508,32453],{"class":94},[84,113510,155],{"class":154},[84,113512,111510],{"class":158},[84,113514,846],{"class":154},[84,113516,33171],{"class":94},[84,113518,111517],{"class":154},[84,113520,1391],{"class":94},[84,113522,31651],{"class":154},[84,113524,113525,113527,113529,113532,113535,113537,113539,113541],{"class":86,"line":17966},[84,113526,32453],{"class":94},[84,113528,155],{"class":154},[84,113530,113531],{"class":158},"\"final tip:\"",[84,113533,113534],{"class":154},", np.round(site_position(model, data, ",[84,113536,112670],{"class":158},[84,113538,111479],{"class":154},[84,113540,1391],{"class":94},[84,113542,31651],{"class":154},[84,113544,113545,113547,113549,113552,113554,113556,113558,113560],{"class":86,"line":17971},[84,113546,32453],{"class":94},[84,113548,155],{"class":154},[84,113550,113551],{"class":158},"\"target:\"",[84,113553,113534],{"class":154},[84,113555,113093],{"class":158},[84,113557,111479],{"class":154},[84,113559,1391],{"class":94},[84,113561,31651],{"class":154},[84,113563,113564],{"class":86,"line":17985},[84,113565,3578],{"emptyLinePlaceholder":1252},[84,113567,113568],{"class":86,"line":17990},[84,113569,3578],{"emptyLinePlaceholder":1252},[84,113571,113572,113574,113576,113578,113580],{"class":86,"line":17996},[84,113573,2712],{"class":129},[84,113575,32374],{"class":94},[84,113577,102697],{"class":129},[84,113579,102700],{"class":158},[84,113581,4917],{"class":154},[84,113583,113584],{"class":86,"line":18001},[84,113585,102707],{"class":154},[19,113587,104707],{},[60,113589,113591],{"className":78,"code":113590,"language":80,"meta":66,"style":66},"touch ch7_reacher.py\n",[39,113592,113593],{"__ignoreMap":66},[84,113594,113595,113597],{"class":86,"line":87},[84,113596,102421],{"class":90},[84,113598,113599],{"class":158}," ch7_reacher.py\n",[19,113601,111578],{},[60,113603,113605],{"className":78,"code":113604,"language":80,"meta":66,"style":66},"python ch7_reacher.py\n",[39,113606,113607],{"__ignoreMap":66},[84,113608,113609,113611],{"class":86,"line":87},[84,113610,91],{"class":90},[84,113612,113599],{"class":158},[198,113614,102710],{"id":102710},[19,113616,113617],{},"读取 site 坐标：",[60,113619,113621],{"className":121,"code":113620,"language":91,"meta":66,"style":66},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[39,113622,113623],{"__ignoreMap":66},[84,113624,113625,113627,113629,113631,113633],{"class":86,"line":87},[84,113626,33100],{"class":129},[84,113628,112990],{"class":90},[84,113630,112993],{"class":154},[84,113632,2480],{"class":94},[84,113634,112998],{"class":154},[19,113636,113637],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113639,111594],{},[60,113641,113643],{"className":121,"code":113642,"language":91,"meta":66,"style":66},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[39,113644,113645],{"__ignoreMap":66},[84,113646,113647,113649],{"class":86,"line":87},[84,113648,18216],{"class":129},[84,113650,113102],{"class":154},[19,113652,113653],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113655,110919],{},[60,113657,113659],{"className":121,"code":113658,"language":91,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[39,113660,113661,113673,113686],{"__ignoreMap":66},[84,113662,113663,113665,113667,113669,113671],{"class":86,"line":87},[84,113664,112730],{"class":154},[84,113666,867],{"class":129},[84,113668,112735],{"class":154},[84,113670,1841],{"class":129},[84,113672,112740],{"class":154},[84,113674,113675,113678,113680,113682,113684],{"class":86,"line":98},[84,113676,113677],{"class":154},"control_cost ",[84,113679,867],{"class":129},[84,113681,113171],{"class":94},[84,113683,997],{"class":129},[84,113685,113176],{"class":154},[84,113687,113688,113690,113692,113694,113696,113698,113700],{"class":86,"line":106},[84,113689,18216],{"class":129},[84,113691,110931],{"class":94},[84,113693,155],{"class":154},[84,113695,1841],{"class":129},[84,113697,112730],{"class":154},[84,113699,1841],{"class":129},[84,113701,113193],{"class":154},[19,113703,113704],{},"奖励由两部分组成：",[26,113706,113707,113712],{},[29,113708,113709,113711],{},[39,113710,112757],{},"：末端离目标越远，奖励越低。",[29,113713,113714,113717],{},[39,113715,113716],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113719,113720],{},"简单控制器：",[60,113722,113724],{"className":121,"code":113723,"language":91,"meta":66,"style":66},"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",[39,113725,113726,113739,113771],{"__ignoreMap":66},[84,113727,113728,113731,113733,113735,113737],{"class":86,"line":87},[84,113729,113730],{"class":154},"error ",[84,113732,867],{"class":129},[84,113734,113302],{"class":154},[84,113736,1841],{"class":129},[84,113738,113307],{"class":154},[84,113740,113741,113743,113745,113747,113749,113751,113753,113755,113757,113759,113761,113763,113765,113767,113769],{"class":86,"line":98},[84,113742,107006],{"class":154},[84,113744,1504],{"class":94},[84,113746,5620],{"class":154},[84,113748,867],{"class":129},[84,113750,113324],{"class":154},[84,113752,106395],{"class":94},[84,113754,997],{"class":129},[84,113756,113331],{"class":154},[84,113758,1397],{"class":94},[84,113760,113336],{"class":154},[84,113762,1841],{"class":129},[84,113764,103541],{"class":94},[84,113766,846],{"class":154},[84,113768,103541],{"class":94},[84,113770,162],{"class":154},[84,113772,113773,113775,113777,113779,113781,113783,113785,113787,113789,113791,113793,113795,113797,113799,113801],{"class":86,"line":106},[84,113774,107006],{"class":154},[84,113776,1529],{"class":94},[84,113778,5620],{"class":154},[84,113780,867],{"class":129},[84,113782,113324],{"class":154},[84,113784,106395],{"class":94},[84,113786,997],{"class":129},[84,113788,113331],{"class":154},[84,113790,1504],{"class":94},[84,113792,113336],{"class":154},[84,113794,1841],{"class":129},[84,113796,103541],{"class":94},[84,113798,846],{"class":154},[84,113800,103541],{"class":94},[84,113802,162],{"class":154},[19,113804,113805],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[198,113807,102846],{"id":102846},[60,113809,113810],{"className":121,"code":113620,"language":91,"meta":66,"style":66},[39,113811,113812],{"__ignoreMap":66},[84,113813,113814,113816,113818,113820,113822],{"class":86,"line":87},[84,113815,33100],{"class":129},[84,113817,112990],{"class":90},[84,113819,112993],{"class":154},[84,113821,2480],{"class":94},[84,113823,112998],{"class":154},[19,113825,113826,113827,113829,113830,83685,113832,55],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[39,113828,80956],{}," 是 site 的名字，比如 ",[39,113831,112670],{},[39,113833,113093],{},[60,113835,113837],{"className":121,"code":113836,"language":91,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[39,113838,113839],{"__ignoreMap":66},[84,113840,113841,113843,113845],{"class":86,"line":87},[84,113842,104771],{"class":154},[84,113844,867],{"class":129},[84,113846,113007],{"class":154},[19,113848,113849],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[60,113851,113853],{"className":121,"code":113852,"language":91,"meta":66,"style":66},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[39,113854,113855,113867],{"__ignoreMap":66},[84,113856,113857,113859,113861,113863,113865],{"class":86,"line":87},[84,113858,2712],{"class":129},[84,113860,104586],{"class":154},[84,113862,2218],{"class":129},[84,113864,5271],{"class":94},[84,113866,4917],{"class":154},[84,113868,113869,113871,113873,113875,113877,113879,113881,113883,113885,113887],{"class":86,"line":98},[84,113870,105032],{"class":129},[84,113872,104572],{"class":94},[84,113874,155],{"class":154},[84,113876,1372],{"class":129},[84,113878,113032],{"class":158},[84,113880,2204],{"class":94},[84,113882,80956],{"class":154},[84,113884,2254],{"class":94},[84,113886,1562],{"class":158},[84,113888,162],{"class":154},[19,113890,113891,113892,113895,113896,113898],{},"如果 site 没找到，就主动报错。",[39,113893,113894],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[39,113897,80956],{}," 的值放进字符串里。",[60,113900,113902],{"className":121,"code":113901,"language":91,"meta":66,"style":66},"return data.site_xpos[site_id].copy()\n",[39,113903,113904],{"__ignoreMap":66},[84,113905,113906,113908],{"class":86,"line":87},[84,113907,18216],{"class":129},[84,113909,113049],{"class":154},[19,113911,113912,113913,113915,113916,113919],{},"返回这个 site 的世界坐标。",[39,113914,104817],{}," 里的每一行都是一个 site 的 ",[39,113917,113918],{},"(x, y, z)"," 坐标。",[60,113921,113923],{"className":121,"code":113922,"language":91,"meta":66,"style":66},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[39,113924,113925],{"__ignoreMap":66},[84,113926,113927,113929,113931],{"class":86,"line":87},[84,113928,33100],{"class":129},[84,113930,113064],{"class":90},[84,113932,113067],{"class":154},[19,113934,113935],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[60,113937,113939],{"className":121,"code":113938,"language":91,"meta":66,"style":66},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[39,113940,113941,113953],{"__ignoreMap":66},[84,113942,113943,113945,113947,113949,113951],{"class":86,"line":87},[84,113944,112702],{"class":154},[84,113946,867],{"class":129},[84,113948,113077],{"class":154},[84,113950,112670],{"class":158},[84,113952,162],{"class":154},[84,113954,113955,113957,113959,113961,113963],{"class":86,"line":98},[84,113956,112712],{"class":154},[84,113958,867],{"class":129},[84,113960,113077],{"class":154},[84,113962,113093],{"class":158},[84,113964,162],{"class":154},[19,113966,113967],{},"分别读取末端点和目标点的世界坐标。",[60,113969,113970],{"className":121,"code":113642,"language":91,"meta":66,"style":66},[39,113971,113972],{"__ignoreMap":66},[84,113973,113974,113976],{"class":86,"line":87},[84,113975,18216],{"class":129},[84,113977,113102],{"class":154},[19,113979,113980],{},"把四部分拼成一个观测数组：",[60,113982,113985],{"className":113983,"code":113984,"language":65,"meta":66},[63],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[39,113986,113984],{"__ignoreMap":66},[60,113988,113990],{"className":121,"code":113989,"language":91,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\n",[39,113991,113992],{"__ignoreMap":66},[84,113993,113994,113996,113998,114000,114002],{"class":86,"line":87},[84,113995,112730],{"class":154},[84,113997,867],{"class":129},[84,113999,112735],{"class":154},[84,114001,1841],{"class":129},[84,114003,112740],{"class":154},[19,114005,114006,114007,114010,114011,114014],{},"计算 tip 到 target 的距离。",[39,114008,114009],{},"tip - target"," 得到一个三维向量，",[39,114012,114013],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114016,15803],{},[60,114018,114021],{"className":114019,"code":114020,"language":65,"meta":66},[63],"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",[39,114022,114020],{"__ignoreMap":66},[60,114024,114026],{"className":121,"code":114025,"language":91,"meta":66,"style":66},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[39,114027,114028],{"__ignoreMap":66},[84,114029,114030,114032,114034,114036,114038],{"class":86,"line":87},[84,114031,113677],{"class":154},[84,114033,867],{"class":129},[84,114035,113171],{"class":94},[84,114037,997],{"class":129},[84,114039,113176],{"class":154},[19,114041,114042,114043,114046,114047,114050],{},"计算动作惩罚。",[39,114044,114045],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[39,114048,114049],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[60,114052,114054],{"className":121,"code":114053,"language":91,"meta":66,"style":66},"return float(-dist - control_cost)\n",[39,114055,114056],{"__ignoreMap":66},[84,114057,114058,114060,114062,114064,114066,114068,114070],{"class":86,"line":87},[84,114059,18216],{"class":129},[84,114061,110931],{"class":94},[84,114063,155],{"class":154},[84,114065,1841],{"class":129},[84,114067,112730],{"class":154},[84,114069,1841],{"class":129},[84,114071,113193],{"class":154},[19,114073,114074],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[60,114076,114077],{"className":121,"code":111937,"language":91,"meta":66,"style":66},[39,114078,114079],{"__ignoreMap":66},[84,114080,114081,114083,114085],{"class":86,"line":87},[84,114082,111944],{"class":154},[84,114084,867],{"class":129},[84,114086,105896],{"class":94},[19,114088,114089],{},"累计奖励变量，记录整个运行过程的总分。",[60,114091,114093],{"className":121,"code":114092,"language":91,"meta":66,"style":66},"for step in range(500):\n",[39,114094,114095],{"__ignoreMap":66},[84,114096,114097,114099,114101,114103,114105,114107,114109],{"class":86,"line":87},[84,114098,4203],{"class":129},[84,114100,32769],{"class":154},[84,114102,27206],{"class":129},[84,114104,33596],{"class":94},[84,114106,155],{"class":154},[84,114108,66220],{"class":94},[84,114110,31940],{"class":154},[19,114112,114113],{},"运行 500 个控制步。",[60,114115,114116],{"className":121,"code":105678,"language":91,"meta":66,"style":66},[39,114117,114118],{"__ignoreMap":66},[84,114119,114120],{"class":86,"line":87},[84,114121,105678],{"class":154},[19,114123,114124,114125,102156,114127,114129],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[39,114126,104368],{},[39,114128,104371],{}," 是当前状态下的坐标。",[60,114131,114133],{"className":121,"code":114132,"language":91,"meta":66,"style":66},"error = target - tip\n",[39,114134,114135],{"__ignoreMap":66},[84,114136,114137,114139,114141,114143,114145],{"class":86,"line":87},[84,114138,113730],{"class":154},[84,114140,867],{"class":129},[84,114142,113302],{"class":154},[84,114144,1841],{"class":129},[84,114146,113307],{"class":154},[19,114148,114149],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[60,114151,114153],{"className":121,"code":114152,"language":91,"meta":66,"style":66},"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",[39,114154,114155,114187],{"__ignoreMap":66},[84,114156,114157,114159,114161,114163,114165,114167,114169,114171,114173,114175,114177,114179,114181,114183,114185],{"class":86,"line":87},[84,114158,107006],{"class":154},[84,114160,1504],{"class":94},[84,114162,5620],{"class":154},[84,114164,867],{"class":129},[84,114166,113324],{"class":154},[84,114168,106395],{"class":94},[84,114170,997],{"class":129},[84,114172,113331],{"class":154},[84,114174,1397],{"class":94},[84,114176,113336],{"class":154},[84,114178,1841],{"class":129},[84,114180,103541],{"class":94},[84,114182,846],{"class":154},[84,114184,103541],{"class":94},[84,114186,162],{"class":154},[84,114188,114189,114191,114193,114195,114197,114199,114201,114203,114205,114207,114209,114211,114213,114215,114217],{"class":86,"line":98},[84,114190,107006],{"class":154},[84,114192,1529],{"class":94},[84,114194,5620],{"class":154},[84,114196,867],{"class":129},[84,114198,113324],{"class":154},[84,114200,106395],{"class":94},[84,114202,997],{"class":129},[84,114204,113331],{"class":154},[84,114206,1504],{"class":94},[84,114208,113336],{"class":154},[84,114210,1841],{"class":129},[84,114212,103541],{"class":94},[84,114214,846],{"class":154},[84,114216,103541],{"class":94},[84,114218,162],{"class":154},[19,114220,114221,114222,114225],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[39,114223,114224],{},"error -> ctrl -> step"," 的流程。",[60,114227,114228],{"className":121,"code":105640,"language":91,"meta":66,"style":66},[39,114229,114230],{"__ignoreMap":66},[84,114231,114232],{"class":86,"line":87},[84,114233,105640],{"class":154},[19,114235,114236],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[60,114238,114240],{"className":121,"code":114239,"language":91,"meta":66,"style":66},"obs = get_obs(model, data)\n",[39,114241,114242],{"__ignoreMap":66},[84,114243,114244,114246,114248],{"class":86,"line":87},[84,114245,111988],{"class":154},[84,114247,867],{"class":129},[84,114249,113425],{"class":154},[19,114251,114252,114253,114256],{},"读取最新观测。后面打印 ",[39,114254,114255],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114258,103454],{"id":103453},[19,114260,114261],{},"观测维度为:",[60,114263,114266],{"className":114264,"code":114265,"language":65,"meta":66},[63],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[39,114267,114265],{"__ignoreMap":66},[19,114269,114270],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114272,114273],{},"程序每 100 步打印：",[60,114275,114278],{"className":114276,"code":114277,"language":65,"meta":66},[63],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[39,114279,114277],{"__ignoreMap":66},[19,114281,114282,114283,114285],{},"如果控制有效，你应该看到最终 ",[39,114284,104368],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114287,103486],{"id":103485},[26,114289,114290,114293,114296,114302,114308,114315,114325],{},[29,114291,114292],{},"修改目标点位置。",[29,114294,114295],{},"重新运行，观察最终 tip 是否变化。",[29,114297,114298,114299,114301],{},"把 gravity 改成 ",[39,114300,103727],{},"，观察控制是否变差。",[29,114303,112315,114304,112319,114306,55],{},[39,114305,103296],{},[39,114307,1397],{},[29,114309,103549,114310,103552,114312,114314],{},[39,114311,111730],{},[39,114313,108442],{},"，观察机械臂是否更难移动。",[29,114316,103549,114317,83676,114319,103552,114321,114324],{},[39,114318,104371],{},[39,114320,105283],{},[39,114322,114323],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114326,114327],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114329,103591],{"id":103590},[198,114331,114333],{"id":114332},"site-not-found",[39,114334,114335],{},"site not found",[19,114337,114338,114339,102156,114342,55],{},"检查 XML 中是否有 ",[39,114340,114341],{},"site name=\"tip\"",[39,114343,114344],{},"site name=\"target\"",[198,114346,114347],{"id":114347},"机械臂完全不动",[19,114349,103661],{},[26,114351,114352,114357,114360,114365],{},[29,114353,114354,114356],{},[39,114355,103296],{}," 是否为 2",[29,114358,114359],{},"actuator 是否引用正确 joint",[29,114361,114362,114364],{},[39,114363,102214],{}," 是否被赋值",[29,114366,114367,114368],{},"是否执行了 ",[39,114369,101830],{},[198,114371,114372],{"id":114372},"控制效果不好",[19,114374,114375],{},"正常。本章重点不是控制器最优，而是任务结构:",[60,114377,114380],{"className":114378,"code":114379,"language":65,"meta":66},[63],"obs → action → mj_step → reward → next_obs\n",[39,114381,114379],{"__ignoreMap":66},[198,114383,114385],{"id":114384},"tip-坐标不变化","tip 坐标不变化",[19,114387,103713],{},[26,114389,114390,114395,114403,114412],{},[29,114391,114392,114393,55],{},"是否每步调用了 ",[39,114394,101830],{},[29,114396,114397,114398,102156,114400,55],{},"是否写入了 ",[39,114399,107261],{},[39,114401,114402],{},"data.ctrl[1]",[29,114404,114405,114406,42,114409,55],{},"actuator 是否正确引用 ",[39,114407,114408],{},"joint1",[39,114410,114411],{},"joint2",[29,114413,114414],{},"控制输入是否太小。",[198,114416,114417],{"id":114417},"目标点不会动",[19,114419,114420],{},"本章的 target 是固定 site：",[60,114422,114424],{"className":54216,"code":114423,"language":54218,"meta":66,"style":66},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[39,114425,114426],{"__ignoreMap":66},[84,114427,114428,114430,114432,114434,114436,114438,114440,114442,114445],{"class":86,"line":87},[84,114429,2218],{"class":154},[84,114431,104347],{"class":52449},[84,114433,16090],{"class":90},[84,114435,867],{"class":154},[84,114437,113093],{"class":158},[84,114439,102244],{"class":90},[84,114441,867],{"class":154},[84,114443,114444],{"class":158},"\"0.5 0 0.4\"",[84,114446,114447],{"class":154}," ...\u002F>\n",[19,114449,114450,114451,114453],{},"它直接挂在 ",[39,114452,102979],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[198,114455,114456],{"id":114456},"机械臂不像真实机械臂",[19,114458,114459],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114461,103745],{"id":103744},[19,114463,114464],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114466,114467],{},"核心公式：",[60,114469,114472],{"className":114470,"code":114471,"language":65,"meta":66},[63],"distance = ||tip - target||\nreward = -distance - action_cost\n",[39,114473,114471],{"__ignoreMap":66},[19,114475,114476],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1222,114478,114479],{},"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":66,"searchDepth":98,"depth":98,"links":114481},[114482,114483,114484,114489,114493,114494,114495,114503],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":114485},[114486,114487,114488],{"id":112685,"depth":106,"text":112686},{"id":112761,"depth":106,"text":112761},{"id":112791,"depth":106,"text":112792},{"id":102390,"depth":98,"text":102391,"children":114490},[114491,114492],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":114496},[114497,114498,114499,114500,114501,114502],{"id":114332,"depth":106,"text":114335},{"id":114347,"depth":106,"text":114347},{"id":114372,"depth":106,"text":114372},{"id":114384,"depth":106,"text":114385},{"id":114417,"depth":106,"text":114417},{"id":114456,"depth":106,"text":114456},{"id":103744,"depth":98,"text":103745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112489,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114510,"title":114511,"body":114512,"description":66,"extension":1250,"meta":117974,"navigation":1252,"path":117975,"seo":117976,"stem":117977,"__hash__":117978},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114513,"toc":117945},[114514,114517,114519,114522,114525,114550,114553,114559,114562,114568,114570,114572,114596,114598,114616,114618,114661,114663,114690,114692,114695,114747,114750,114756,114765,114768,114806,114809,114848,114851,114859,114866,114869,114875,114877,114931,114938,114983,114986,114990,115006,115016,115018,116279,116281,116293,116295,116306,116308,116311,116332,116335,116338,116371,116377,116380,116413,116416,116419,116460,116465,116479,116482,116495,116500,116523,116525,116540,116550,116565,116572,116592,116607,116625,116628,116645,116653,116669,116675,116707,116720,116752,116762,116797,116811,116857,116871,116913,116924,116937,116943,116976,116979,117006,117016,117056,117066,117083,117090,117108,117111,117152,117165,117180,117183,117206,117209,117221,117224,117243,117248,117269,117272,117287,117290,117324,117336,117351,117354,117379,117382,117401,117404,117436,117439,117463,117469,117499,117506,117519,117522,117524,117526,117532,117535,117538,117550,117553,117555,117609,117611,117615,117621,117630,117633,117640,117642,117665,117668,117672,117674,117692,117698,117700,117733,117736,117742,117746,117749,117769,117774,117778,117785,117805,117810,117814,117817,117837,117840,117926,117930,117933,117939,117942],[10,114515,114511],{"id":114516},"_8gymnasium-风格强化学习接口基础",[14,114518,101792],{"id":101791},[19,114520,114521],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114523,114524],{},"你将实现:",[60,114526,114528],{"className":121,"code":114527,"language":91,"meta":66,"style":66},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[39,114529,114530,114540],{"__ignoreMap":66},[84,114531,114532,114535,114537],{"class":86,"line":87},[84,114533,114534],{"class":154},"obs, info ",[84,114536,867],{"class":129},[84,114538,114539],{"class":154}," env.reset()\n",[84,114541,114542,114545,114547],{"class":86,"line":98},[84,114543,114544],{"class":154},"obs, reward, terminated, truncated, info ",[84,114546,867],{"class":129},[84,114548,114549],{"class":154}," env.step(action)\n",[19,114551,114552],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114554,114555,114556,114558],{},"前面章节的代码都是“脚本式”的：在 ",[39,114557,103433],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114560,114561],{},"可以先记住 Gymnasium 环境的核心交互：",[60,114563,114566],{"className":114564,"code":114565,"language":65,"meta":66},[63],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[39,114567,114565],{"__ignoreMap":66},[14,114569,101915],{"id":101914},[19,114571,101918],{},[60,114573,114574],{"className":78,"code":105524,"language":80,"meta":66,"style":66},[39,114575,114576],{"__ignoreMap":66},[84,114577,114578,114580,114582,114584,114586,114588,114590,114592,114594],{"class":86,"line":87},[84,114579,311],{"class":90},[84,114581,361],{"class":158},[84,114583,275],{"class":158},[84,114585,27559],{"class":94},[84,114587,328],{"class":158},[84,114589,331],{"class":158},[84,114591,103639],{"class":158},[84,114593,101958],{"class":158},[84,114595,105547],{"class":158},[19,114597,103956],{},[60,114599,114601],{"className":78,"code":114600,"language":80,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[39,114602,114603],{"__ignoreMap":66},[84,114604,114605,114607,114609,114611,114613],{"class":86,"line":87},[84,114606,246],{"class":90},[84,114608,275],{"class":158},[84,114610,102068],{"class":158},[84,114612,108846],{"class":158},[84,114614,114615],{"class":158}," gymnasium\n",[19,114617,103973],{},[60,114619,114621],{"className":78,"code":114620,"language":80,"meta":66,"style":66},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[39,114622,114623,114640,114649],{"__ignoreMap":66},[84,114624,114625,114627,114629,114631,114634,114636,114638],{"class":86,"line":87},[84,114626,31487],{"class":90},[84,114628,30333],{"class":158},[84,114630,26279],{"class":94},[84,114632,114633],{"class":158}," mujoco-gym-api",[84,114635,102113],{"class":158},[84,114637,102116],{"class":94},[84,114639,102119],{"class":94},[84,114641,114642,114644,114646],{"class":86,"line":98},[84,114643,31487],{"class":90},[84,114645,102126],{"class":158},[84,114647,114648],{"class":158}," mujoco-gym-api\n",[84,114650,114651,114653,114655,114657,114659],{"class":86,"line":106},[84,114652,246],{"class":90},[84,114654,275],{"class":158},[84,114656,102068],{"class":158},[84,114658,108846],{"class":158},[84,114660,114615],{"class":158},[19,114662,102142],{},[26,114664,114665,114675,114678,114684],{},[29,114666,114667,114668,114671,114672,55],{},"本章使用 ",[39,114669,114670],{},"gymnasium","，不是旧版 ",[39,114673,114674],{},"gym",[29,114676,114677],{},"Gymnasium API 与旧 Gym API 有差异。",[29,114679,114680,114681,55],{},"旧 Gym 常见返回值是 4 个: ",[39,114682,114683],{},"obs, reward, done, info",[29,114685,114686,114687,55],{},"Gymnasium 返回值是 5 个: ",[39,114688,114689],{},"obs, reward, terminated, truncated, info",[14,114691,102183],{"id":102182},[19,114693,114694],{},"强化学习环境接口包含:",[458,114696,114697,114706],{},[461,114698,114699],{},[464,114700,114701,114704],{},[467,114702,114703],{"align":24906},"方法",[467,114705,472],{"align":24906},[474,114707,114708,114718,114728,114738],{},[464,114709,114710,114715],{},[479,114711,114712],{"align":24906},[39,114713,114714],{},"reset()",[479,114716,114717],{"align":24906},"重置环境",[464,114719,114720,114725],{},[479,114721,114722],{"align":24906},[39,114723,114724],{},"step(action)",[479,114726,114727],{"align":24906},"执行动作",[464,114729,114730,114735],{},[479,114731,114732],{"align":24906},[39,114733,114734],{},"observation_space",[479,114736,114737],{"align":24906},"观测空间",[464,114739,114740,114745],{},[479,114741,114742],{"align":24906},[39,114743,114744],{},"action_space",[479,114746,24824],{"align":24906},[19,114748,114749],{},"一个最小环境需要完成:",[60,114751,114754],{"className":114752,"code":114753,"language":65,"meta":66},[63],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[39,114755,114753],{"__ignoreMap":66},[198,114757,114759,102156,114762,105773],{"id":114758},"terminated-和-truncated-的区别",[39,114760,114761],{},"terminated",[39,114763,114764],{},"truncated",[19,114766,114767],{},"Gymnasium 把“结束”拆成两个概念：",[458,114769,114770,114780],{},[461,114771,114772],{},[464,114773,114774,114776,114778],{},[467,114775,105709],{"align":24906},[467,114777,101845],{"align":24906},[467,114779,22357],{"align":24906},[474,114781,114782,114794],{},[464,114783,114784,114788,114791],{},[479,114785,114786],{"align":24906},[39,114787,114761],{},[479,114789,114790],{"align":24906},"任务自然结束",[479,114792,114793],{"align":24906},"机械臂到达目标、机器人摔倒",[464,114795,114796,114800,114803],{},[479,114797,114798],{"align":24906},[39,114799,114764],{},[479,114801,114802],{"align":24906},"因外部限制截断",[479,114804,114805],{"align":24906},"达到最大步数、时间限制",[19,114807,114808],{},"本章中：",[60,114810,114812],{"className":121,"code":114811,"language":91,"meta":66,"style":66},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[39,114813,114814,114829],{"__ignoreMap":66},[84,114815,114816,114819,114821,114824,114826],{"class":86,"line":87},[84,114817,114818],{"class":154},"terminated ",[84,114820,867],{"class":129},[84,114822,114823],{"class":154}," dist ",[84,114825,2218],{"class":129},[84,114827,114828],{"class":94}," 0.05\n",[84,114830,114831,114834,114836,114838,114841,114843,114845],{"class":86,"line":98},[84,114832,114833],{"class":154},"truncated ",[84,114835,867],{"class":129},[84,114837,40025],{"class":94},[84,114839,114840],{"class":154},".steps ",[84,114842,2891],{"class":129},[84,114844,40025],{"class":94},[84,114846,114847],{"class":154},".max_steps\n",[19,114849,114850],{},"也就是：",[26,114852,114853,114856],{},[29,114854,114855],{},"末端距离目标小于 0.05，任务成功结束。",[29,114857,114858],{},"步数超过上限，episode 被截断。",[198,114860,114862,102156,114864],{"id":114861},"observation_space-和-action_space",[39,114863,114734],{},[39,114865,114744],{},[19,114867,114868],{},"这两个对象告诉算法：",[60,114870,114873],{"className":114871,"code":114872,"language":65,"meta":66},[63],"观测长什么样\n动作允许多大\n",[39,114874,114872],{"__ignoreMap":66},[19,114876,15803],{},[60,114878,114880],{"className":121,"code":114879,"language":91,"meta":66,"style":66},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[39,114881,114882],{"__ignoreMap":66},[84,114883,114884,114886,114889,114891,114894,114897,114900,114902,114904,114907,114909,114911,114913,114915,114917,114919,114921,114924,114926,114928],{"class":86,"line":87},[84,114885,31977],{"class":94},[84,114887,114888],{"class":154},".action_space ",[84,114890,867],{"class":129},[84,114892,114893],{"class":154}," spaces.Box(",[84,114895,114896],{"class":928},"low",[84,114898,114899],{"class":129},"=-",[84,114901,103541],{"class":94},[84,114903,846],{"class":154},[84,114905,114906],{"class":928},"high",[84,114908,867],{"class":129},[84,114910,103541],{"class":94},[84,114912,846],{"class":154},[84,114914,97109],{"class":928},[84,114916,867],{"class":129},[84,114918,155],{"class":154},[84,114920,1397],{"class":94},[84,114922,114923],{"class":154},",), ",[84,114925,94646],{"class":928},[84,114927,867],{"class":129},[84,114929,114930],{"class":154},"np.float32)\n",[19,114932,114933,114934,114937],{},"表示动作是 2 维数组，每个值都在 ",[39,114935,114936],{},"[-1, 1]"," 范围内。",[60,114939,114941],{"className":121,"code":114940,"language":91,"meta":66,"style":66},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[39,114942,114943],{"__ignoreMap":66},[84,114944,114945,114947,114950,114952,114954,114956,114958,114961,114963,114965,114967,114969,114971,114973,114975,114977,114979,114981],{"class":86,"line":87},[84,114946,31977],{"class":94},[84,114948,114949],{"class":154},".observation_space ",[84,114951,867],{"class":129},[84,114953,114893],{"class":154},[84,114955,114896],{"class":928},[84,114957,114899],{"class":129},[84,114959,114960],{"class":154},"np.inf, ",[84,114962,114906],{"class":928},[84,114964,867],{"class":129},[84,114966,114960],{"class":154},[84,114968,97109],{"class":928},[84,114970,867],{"class":129},[84,114972,155],{"class":154},[84,114974,1756],{"class":94},[84,114976,114923],{"class":154},[84,114978,94646],{"class":928},[84,114980,867],{"class":129},[84,114982,114930],{"class":154},[19,114984,114985],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[198,114987,114989],{"id":114988},"frame_skip-是什么","frame_skip 是什么",[60,114991,114993],{"className":121,"code":114992,"language":91,"meta":66,"style":66},"self.frame_skip = 5\n",[39,114994,114995],{"__ignoreMap":66},[84,114996,114997,114999,115002,115004],{"class":86,"line":87},[84,114998,31977],{"class":94},[84,115000,115001],{"class":154},".frame_skip ",[84,115003,867],{"class":129},[84,115005,1033],{"class":94},[19,115007,115008,115009,115012,115013,115015],{},"表示外部调用一次 ",[39,115010,115011],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[39,115014,102353],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115017,102391],{"id":102390},[60,115019,115021],{"className":121,"code":115020,"language":91,"meta":66,"style":66},"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",[39,115022,115023,115035,115041,115051,115062,115066,115070,115078,115083,115087,115091,115095,115099,115103,115107,115111,115116,115120,115124,115128,115133,115137,115141,115145,115149,115153,115157,115161,115165,115169,115173,115177,115181,115185,115203,115218,115222,115235,115245,115260,115277,115281,115302,115321,115346,115360,115364,115374,115386,115396,115400,115442,115480,115484,115494,115510,115525,115544,115551,115555,115568,115583,115598,115611,115630,115646,115650,115691,115706,115721,115725,115764,115775,115788,115792,115802,115811,115815,115825,115840,115858,115862,115873,115890,115903,115907,115917,115921,115932,115943,115947,115961,115975,115991,115995,116008,116025,116040,116047,116051,116055,116067,116077,116095,116107,116119,116123,116131,116147,116156,116165,116173,116215,116228,116233,116237,116255,116259,116263,116275],{"__ignoreMap":66},[84,115024,115025,115027,115030,115032],{"class":86,"line":87},[84,115026,31547],{"class":129},[84,115028,115029],{"class":154}," gymnasium ",[84,115031,1157],{"class":129},[84,115033,115034],{"class":154}," gym\n",[84,115036,115037,115039],{"class":86,"line":98},[84,115038,31547],{"class":129},[84,115040,102439],{"class":154},[84,115042,115043,115045,115047,115049],{"class":86,"line":106},[84,115044,31547],{"class":129},[84,115046,32534],{"class":154},[84,115048,1157],{"class":129},[84,115050,32539],{"class":154},[84,115052,115053,115055,115057,115059],{"class":86,"line":112},[84,115054,31891],{"class":129},[84,115056,115029],{"class":154},[84,115058,31547],{"class":129},[84,115060,115061],{"class":154}," spaces\n",[84,115063,115064],{"class":86,"line":425},[84,115065,3578],{"emptyLinePlaceholder":1252},[84,115067,115068],{"class":86,"line":2395},[84,115069,3578],{"emptyLinePlaceholder":1252},[84,115071,115072,115074,115076],{"class":86,"line":2401},[84,115073,102452],{"class":94},[84,115075,14735],{"class":129},[84,115077,102457],{"class":158},[84,115079,115080],{"class":86,"line":2492},[84,115081,115082],{"class":158},"\u003Cmujoco model=\"gym_reacher\">\n",[84,115084,115085],{"class":86,"line":2498},[84,115086,112872],{"class":158},[84,115088,115089],{"class":86,"line":2510},[84,115090,3578],{"emptyLinePlaceholder":1252},[84,115092,115093],{"class":86,"line":2793},[84,115094,102476],{"class":158},[84,115096,115097],{"class":86,"line":2798},[84,115098,112890],{"class":158},[84,115100,115101],{"class":86,"line":2804},[84,115102,3578],{"emptyLinePlaceholder":1252},[84,115104,115105],{"class":86,"line":2809},[84,115106,112899],{"class":158},[84,115108,115109],{"class":86,"line":2823},[84,115110,112904],{"class":158},[84,115112,115113],{"class":86,"line":2828},[84,115114,115115],{"class":158},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[84,115117,115118],{"class":86,"line":2834},[84,115119,3578],{"emptyLinePlaceholder":1252},[84,115121,115122],{"class":86,"line":2855},[84,115123,112918],{"class":158},[84,115125,115126],{"class":86,"line":2860},[84,115127,112923],{"class":158},[84,115129,115130],{"class":86,"line":2874},[84,115131,115132],{"class":158},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[84,115134,115135],{"class":86,"line":2879},[84,115136,112933],{"class":158},[84,115138,115139],{"class":86,"line":2908},[84,115140,107573],{"class":158},[84,115142,115143],{"class":86,"line":2913},[84,115144,102505],{"class":158},[84,115146,115147],{"class":86,"line":2930},[84,115148,102510],{"class":158},[84,115150,115151],{"class":86,"line":2935},[84,115152,3578],{"emptyLinePlaceholder":1252},[84,115154,115155],{"class":86,"line":2940},[84,115156,107590],{"class":158},[84,115158,115159],{"class":86,"line":2945},[84,115160,112958],{"class":158},[84,115162,115163],{"class":86,"line":2959},[84,115164,112963],{"class":158},[84,115166,115167],{"class":86,"line":2964},[84,115168,107600],{"class":158},[84,115170,115171],{"class":86,"line":3755},[84,115172,102515],{"class":158},[84,115174,115175],{"class":86,"line":3769},[84,115176,96844],{"class":158},[84,115178,115179],{"class":86,"line":3777},[84,115180,3578],{"emptyLinePlaceholder":1252},[84,115182,115183],{"class":86,"line":3782},[84,115184,3578],{"emptyLinePlaceholder":1252},[84,115186,115187,115189,115192,115194,115196,115198,115201],{"class":86,"line":3788},[84,115188,15864],{"class":129},[84,115190,115191],{"class":90}," ReacherEnv",[84,115193,155],{"class":154},[84,115195,114674],{"class":90},[84,115197,1867],{"class":154},[84,115199,115200],{"class":90},"Env",[84,115202,31940],{"class":154},[84,115204,115205,115208,115210,115212,115215],{"class":86,"line":3794},[84,115206,115207],{"class":154},"    metadata ",[84,115209,867],{"class":129},[84,115211,5625],{"class":154},[84,115213,115214],{"class":158},"\"render_modes\"",[84,115216,115217],{"class":154},": []}\n",[84,115219,115220],{"class":86,"line":3799},[84,115221,3578],{"emptyLinePlaceholder":1252},[84,115223,115224,115226,115228,115231,115233],{"class":86,"line":9120},[84,115225,31955],{"class":129},[84,115227,31958],{"class":94},[84,115229,115230],{"class":154},"(self) -> ",[84,115232,96832],{"class":94},[84,115234,4917],{"class":154},[84,115236,115237,115239,115241,115243],{"class":86,"line":9144},[84,115238,31971],{"class":94},[84,115240,18431],{"class":154},[84,115242,31983],{"class":94},[84,115244,183],{"class":154},[84,115246,115247,115249,115252,115254,115256,115258],{"class":86,"line":9149},[84,115248,31999],{"class":94},[84,115250,115251],{"class":154},".model ",[84,115253,867],{"class":129},[84,115255,102550],{"class":154},[84,115257,102452],{"class":94},[84,115259,162],{"class":154},[84,115261,115262,115264,115267,115269,115272,115274],{"class":86,"line":9155},[84,115263,31999],{"class":94},[84,115265,115266],{"class":154},".data ",[84,115268,867],{"class":129},[84,115270,115271],{"class":154}," mujoco.MjData(",[84,115273,31977],{"class":94},[84,115275,115276],{"class":154},".model)\n",[84,115278,115279],{"class":86,"line":9182},[84,115280,3578],{"emptyLinePlaceholder":1252},[84,115282,115283,115285,115288,115290,115293,115295,115298,115300],{"class":86,"line":9187},[84,115284,31999],{"class":94},[84,115286,115287],{"class":154},".tip_site_id ",[84,115289,867],{"class":129},[84,115291,115292],{"class":154}," mujoco.mj_name2id(",[84,115294,31977],{"class":94},[84,115296,115297],{"class":154},".model, mujoco.mjtObj.mjOBJ_SITE, ",[84,115299,112670],{"class":158},[84,115301,162],{"class":154},[84,115303,115304,115306,115309,115311,115313,115315,115317,115319],{"class":86,"line":9193},[84,115305,31999],{"class":94},[84,115307,115308],{"class":154},".target_site_id ",[84,115310,867],{"class":129},[84,115312,115292],{"class":154},[84,115314,31977],{"class":94},[84,115316,115297],{"class":154},[84,115318,113093],{"class":158},[84,115320,162],{"class":154},[84,115322,115323,115325,115327,115329,115331,115333,115336,115338,115340,115342,115344],{"class":86,"line":9205},[84,115324,3675],{"class":129},[84,115326,40025],{"class":94},[84,115328,115287],{"class":154},[84,115330,2218],{"class":129},[84,115332,5271],{"class":94},[84,115334,115335],{"class":129}," or",[84,115337,40025],{"class":94},[84,115339,115308],{"class":154},[84,115341,2218],{"class":129},[84,115343,5271],{"class":94},[84,115345,4917],{"class":154},[84,115347,115348,115351,115353,115355,115358],{"class":86,"line":9217},[84,115349,115350],{"class":129},"            raise",[84,115352,104572],{"class":94},[84,115354,155],{"class":154},[84,115356,115357],{"class":158},"\"required sites not found\"",[84,115359,162],{"class":154},[84,115361,115362],{"class":86,"line":9229},[84,115363,3578],{"emptyLinePlaceholder":1252},[84,115365,115366,115368,115370,115372],{"class":86,"line":10888},[84,115367,31999],{"class":94},[84,115369,115001],{"class":154},[84,115371,867],{"class":129},[84,115373,1033],{"class":94},[84,115375,115376,115378,115381,115383],{"class":86,"line":10913},[84,115377,31999],{"class":94},[84,115379,115380],{"class":154},".max_steps ",[84,115382,867],{"class":129},[84,115384,115385],{"class":94}," 200\n",[84,115387,115388,115390,115392,115394],{"class":86,"line":10936},[84,115389,31999],{"class":94},[84,115391,114840],{"class":154},[84,115393,867],{"class":129},[84,115395,48483],{"class":94},[84,115397,115398],{"class":86,"line":10960},[84,115399,3578],{"emptyLinePlaceholder":1252},[84,115401,115402,115404,115406,115408,115410,115412,115414,115416,115418,115420,115422,115424,115426,115428,115430,115432,115434,115436,115438,115440],{"class":86,"line":10965},[84,115403,31999],{"class":94},[84,115405,114888],{"class":154},[84,115407,867],{"class":129},[84,115409,114893],{"class":154},[84,115411,114896],{"class":928},[84,115413,114899],{"class":129},[84,115415,103541],{"class":94},[84,115417,846],{"class":154},[84,115419,114906],{"class":928},[84,115421,867],{"class":129},[84,115423,103541],{"class":94},[84,115425,846],{"class":154},[84,115427,97109],{"class":928},[84,115429,867],{"class":129},[84,115431,155],{"class":154},[84,115433,1397],{"class":94},[84,115435,114923],{"class":154},[84,115437,94646],{"class":928},[84,115439,867],{"class":129},[84,115441,114930],{"class":154},[84,115443,115444,115446,115448,115450,115452,115454,115456,115458,115460,115462,115464,115466,115468,115470,115472,115474,115476,115478],{"class":86,"line":10970},[84,115445,31999],{"class":94},[84,115447,114949],{"class":154},[84,115449,867],{"class":129},[84,115451,114893],{"class":154},[84,115453,114896],{"class":928},[84,115455,114899],{"class":129},[84,115457,114960],{"class":154},[84,115459,114906],{"class":928},[84,115461,867],{"class":129},[84,115463,114960],{"class":154},[84,115465,97109],{"class":928},[84,115467,867],{"class":129},[84,115469,155],{"class":154},[84,115471,1756],{"class":94},[84,115473,114923],{"class":154},[84,115475,94646],{"class":928},[84,115477,867],{"class":129},[84,115479,114930],{"class":154},[84,115481,115482],{"class":86,"line":10975},[84,115483,3578],{"emptyLinePlaceholder":1252},[84,115485,115486,115488,115491],{"class":86,"line":10984},[84,115487,31955],{"class":129},[84,115489,115490],{"class":90}," _get_obs",[84,115492,115493],{"class":154},"(self) -> np.ndarray:\n",[84,115495,115496,115498,115500,115502,115505,115507],{"class":86,"line":10989},[84,115497,113271],{"class":154},[84,115499,867],{"class":129},[84,115501,40025],{"class":94},[84,115503,115504],{"class":154},".data.site_xpos[",[84,115506,31977],{"class":94},[84,115508,115509],{"class":154},".tip_site_id].copy()\n",[84,115511,115512,115514,115516,115518,115520,115522],{"class":86,"line":10995},[84,115513,113284],{"class":154},[84,115515,867],{"class":129},[84,115517,40025],{"class":94},[84,115519,115504],{"class":154},[84,115521,31977],{"class":94},[84,115523,115524],{"class":154},".target_site_id].copy()\n",[84,115526,115527,115529,115531,115534,115536,115539,115541],{"class":86,"line":11016},[84,115528,111316],{"class":154},[84,115530,867],{"class":129},[84,115532,115533],{"class":154}," np.concatenate([",[84,115535,31977],{"class":94},[84,115537,115538],{"class":154},".data.qpos.copy(), ",[84,115540,31977],{"class":94},[84,115542,115543],{"class":154},".data.qvel.copy(), tip, target])\n",[84,115545,115546,115548],{"class":86,"line":11022},[84,115547,15922],{"class":129},[84,115549,115550],{"class":154}," obs.astype(np.float32)\n",[84,115552,115553],{"class":86,"line":11036},[84,115554,3578],{"emptyLinePlaceholder":1252},[84,115556,115557,115559,115562,115564,115566],{"class":86,"line":11042},[84,115558,31955],{"class":129},[84,115560,115561],{"class":90}," _get_reward",[84,115563,115230],{"class":154},[84,115565,1362],{"class":94},[84,115567,4917],{"class":154},[84,115569,115570,115572,115574,115576,115578,115580],{"class":86,"line":11069},[84,115571,113271],{"class":154},[84,115573,867],{"class":129},[84,115575,40025],{"class":94},[84,115577,115504],{"class":154},[84,115579,31977],{"class":94},[84,115581,115582],{"class":154},".tip_site_id]\n",[84,115584,115585,115587,115589,115591,115593,115595],{"class":86,"line":11078},[84,115586,113284],{"class":154},[84,115588,867],{"class":129},[84,115590,40025],{"class":94},[84,115592,115504],{"class":154},[84,115594,31977],{"class":94},[84,115596,115597],{"class":154},".target_site_id]\n",[84,115599,115600,115603,115605,115607,115609],{"class":86,"line":11084},[84,115601,115602],{"class":154},"        dist ",[84,115604,867],{"class":129},[84,115606,112735],{"class":154},[84,115608,1841],{"class":129},[84,115610,112740],{"class":154},[84,115612,115613,115616,115618,115620,115622,115625,115627],{"class":86,"line":11092},[84,115614,115615],{"class":154},"        control_cost ",[84,115617,867],{"class":129},[84,115619,113171],{"class":94},[84,115621,997],{"class":129},[84,115623,115624],{"class":154}," np.sum(np.square(",[84,115626,31977],{"class":94},[84,115628,115629],{"class":154},".data.ctrl))\n",[84,115631,115632,115634,115636,115638,115640,115642,115644],{"class":86,"line":11097},[84,115633,15922],{"class":129},[84,115635,110931],{"class":94},[84,115637,155],{"class":154},[84,115639,1841],{"class":129},[84,115641,112730],{"class":154},[84,115643,1841],{"class":129},[84,115645,113193],{"class":154},[84,115647,115648],{"class":86,"line":17774},[84,115649,3578],{"emptyLinePlaceholder":1252},[84,115651,115652,115654,115657,115660,115662,115665,115667,115669,115671,115673,115675,115678,115681,115683,115685,115687,115689],{"class":86,"line":17780},[84,115653,31955],{"class":129},[84,115655,115656],{"class":90}," reset",[84,115658,115659],{"class":154},"(self, ",[84,115661,1043],{"class":129},[84,115663,115664],{"class":154},", seed: ",[84,115666,1327],{"class":94},[84,115668,26273],{"class":129},[84,115670,40085],{"class":94},[84,115672,14735],{"class":129},[84,115674,40085],{"class":94},[84,115676,115677],{"class":154},", options: ",[84,115679,115680],{"class":94},"dict",[84,115682,26273],{"class":129},[84,115684,40085],{"class":94},[84,115686,14735],{"class":129},[84,115688,40085],{"class":94},[84,115690,31940],{"class":154},[84,115692,115693,115695,115698,115701,115703],{"class":86,"line":17803},[84,115694,31971],{"class":94},[84,115696,115697],{"class":154},"().reset(",[84,115699,115700],{"class":928},"seed",[84,115702,867],{"class":129},[84,115704,115705],{"class":154},"seed)\n",[84,115707,115708,115711,115713,115716,115718],{"class":86,"line":17809},[84,115709,115710],{"class":154},"        mujoco.mj_resetData(",[84,115712,31977],{"class":94},[84,115714,115715],{"class":154},".model, ",[84,115717,31977],{"class":94},[84,115719,115720],{"class":154},".data)\n",[84,115722,115723],{"class":86,"line":17832},[84,115724,3578],{"emptyLinePlaceholder":1252},[84,115726,115727,115729,115732,115734,115736,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761],{"class":86,"line":17846},[84,115728,31999],{"class":94},[84,115730,115731],{"class":154},".data.qpos[:] ",[84,115733,867],{"class":129},[84,115735,40025],{"class":94},[84,115737,115738],{"class":154},".np_random.uniform(",[84,115740,114896],{"class":928},[84,115742,114899],{"class":129},[84,115744,87356],{"class":94},[84,115746,846],{"class":154},[84,115748,114906],{"class":928},[84,115750,867],{"class":129},[84,115752,87356],{"class":94},[84,115754,846],{"class":154},[84,115756,32649],{"class":928},[84,115758,867],{"class":129},[84,115760,31977],{"class":94},[84,115762,115763],{"class":154},".model.nq)\n",[84,115765,115766,115768,115771,115773],{"class":86,"line":17866},[84,115767,31999],{"class":94},[84,115769,115770],{"class":154},".data.qvel[:] ",[84,115772,867],{"class":129},[84,115774,105896],{"class":94},[84,115776,115777,115780,115782,115784,115786],{"class":86,"line":17872},[84,115778,115779],{"class":154},"        mujoco.mj_forward(",[84,115781,31977],{"class":94},[84,115783,115715],{"class":154},[84,115785,31977],{"class":94},[84,115787,115720],{"class":154},[84,115789,115790],{"class":86,"line":17883},[84,115791,3578],{"emptyLinePlaceholder":1252},[84,115793,115794,115796,115798,115800],{"class":86,"line":17906},[84,115795,31999],{"class":94},[84,115797,114840],{"class":154},[84,115799,867],{"class":129},[84,115801,48483],{"class":94},[84,115803,115804,115806,115808],{"class":86,"line":17928},[84,115805,15922],{"class":129},[84,115807,40025],{"class":94},[84,115809,115810],{"class":154},"._get_obs(), {}\n",[84,115812,115813],{"class":86,"line":17933},[84,115814,3578],{"emptyLinePlaceholder":1252},[84,115816,115817,115819,115822],{"class":86,"line":17939},[84,115818,31955],{"class":129},[84,115820,115821],{"class":90}," step",[84,115823,115824],{"class":154},"(self, action):\n",[84,115826,115827,115829,115831,115834,115836,115838],{"class":86,"line":17953},[84,115828,111356],{"class":154},[84,115830,867],{"class":129},[84,115832,115833],{"class":154}," np.asarray(action, ",[84,115835,94646],{"class":928},[84,115837,867],{"class":129},[84,115839,114930],{"class":154},[84,115841,115842,115844,115846,115848,115850,115853,115855],{"class":86,"line":17966},[84,115843,111356],{"class":154},[84,115845,867],{"class":129},[84,115847,108582],{"class":154},[84,115849,31977],{"class":94},[84,115851,115852],{"class":154},".action_space.low, ",[84,115854,31977],{"class":94},[84,115856,115857],{"class":154},".action_space.high)\n",[84,115859,115860],{"class":86,"line":17971},[84,115861,3578],{"emptyLinePlaceholder":1252},[84,115863,115864,115866,115869,115871],{"class":86,"line":17985},[84,115865,31999],{"class":94},[84,115867,115868],{"class":154},".data.ctrl[:] ",[84,115870,867],{"class":129},[84,115872,108605],{"class":154},[84,115874,115875,115877,115879,115881,115883,115885,115887],{"class":86,"line":17990},[84,115876,4581],{"class":129},[84,115878,102639],{"class":154},[84,115880,27206],{"class":129},[84,115882,33596],{"class":94},[84,115884,155],{"class":154},[84,115886,31977],{"class":94},[84,115888,115889],{"class":154},".frame_skip):\n",[84,115891,115892,115895,115897,115899,115901],{"class":86,"line":17996},[84,115893,115894],{"class":154},"            mujoco.mj_step(",[84,115896,31977],{"class":94},[84,115898,115715],{"class":154},[84,115900,31977],{"class":94},[84,115902,115720],{"class":154},[84,115904,115905],{"class":86,"line":18001},[84,115906,3578],{"emptyLinePlaceholder":1252},[84,115908,115909,115911,115913,115915],{"class":86,"line":18015},[84,115910,31999],{"class":94},[84,115912,114840],{"class":154},[84,115914,10649],{"class":129},[84,115916,56846],{"class":94},[84,115918,115919],{"class":86,"line":18020},[84,115920,3578],{"emptyLinePlaceholder":1252},[84,115922,115923,115925,115927,115929],{"class":86,"line":18025},[84,115924,111316],{"class":154},[84,115926,867],{"class":129},[84,115928,40025],{"class":94},[84,115930,115931],{"class":154},"._get_obs()\n",[84,115933,115934,115936,115938,115940],{"class":86,"line":18039},[84,115935,111421],{"class":154},[84,115937,867],{"class":129},[84,115939,40025],{"class":94},[84,115941,115942],{"class":154},"._get_reward()\n",[84,115944,115945],{"class":86,"line":18051},[84,115946,3578],{"emptyLinePlaceholder":1252},[84,115948,115949,115951,115953,115955,115957,115959],{"class":86,"line":18056},[84,115950,113271],{"class":154},[84,115952,867],{"class":129},[84,115954,40025],{"class":94},[84,115956,115504],{"class":154},[84,115958,31977],{"class":94},[84,115960,115582],{"class":154},[84,115962,115963,115965,115967,115969,115971,115973],{"class":86,"line":18069},[84,115964,113284],{"class":154},[84,115966,867],{"class":129},[84,115968,40025],{"class":94},[84,115970,115504],{"class":154},[84,115972,31977],{"class":94},[84,115974,115597],{"class":154},[84,115976,115977,115979,115981,115983,115986,115988],{"class":86,"line":18074},[84,115978,115602],{"class":154},[84,115980,867],{"class":129},[84,115982,110931],{"class":94},[84,115984,115985],{"class":154},"(np.linalg.norm(tip ",[84,115987,1841],{"class":129},[84,115989,115990],{"class":154}," target))\n",[84,115992,115993],{"class":86,"line":18079},[84,115994,3578],{"emptyLinePlaceholder":1252},[84,115996,115997,116000,116002,116004,116006],{"class":86,"line":18084},[84,115998,115999],{"class":154},"        terminated ",[84,116001,867],{"class":129},[84,116003,114823],{"class":154},[84,116005,2218],{"class":129},[84,116007,114828],{"class":94},[84,116009,116010,116013,116015,116017,116019,116021,116023],{"class":86,"line":18097},[84,116011,116012],{"class":154},"        truncated ",[84,116014,867],{"class":129},[84,116016,40025],{"class":94},[84,116018,114840],{"class":154},[84,116020,2891],{"class":129},[84,116022,40025],{"class":94},[84,116024,114847],{"class":154},[84,116026,116027,116030,116032,116034,116037],{"class":86,"line":18102},[84,116028,116029],{"class":154},"        info ",[84,116031,867],{"class":129},[84,116033,5625],{"class":154},[84,116035,116036],{"class":158},"\"distance\"",[84,116038,116039],{"class":154},": dist}\n",[84,116041,116042,116044],{"class":86,"line":33785},[84,116043,15922],{"class":129},[84,116045,116046],{"class":154}," obs, reward, terminated, truncated, info\n",[84,116048,116049],{"class":86,"line":33791},[84,116050,3578],{"emptyLinePlaceholder":1252},[84,116052,116053],{"class":86,"line":33797},[84,116054,3578],{"emptyLinePlaceholder":1252},[84,116056,116057,116059,116061,116063,116065],{"class":86,"line":33803},[84,116058,33100],{"class":129},[84,116060,3153],{"class":90},[84,116062,102536],{"class":154},[84,116064,96832],{"class":94},[84,116066,4917],{"class":154},[84,116068,116069,116072,116074],{"class":86,"line":33809},[84,116070,116071],{"class":154},"    env ",[84,116073,867],{"class":129},[84,116075,116076],{"class":154}," ReacherEnv()\n",[84,116078,116079,116082,116084,116087,116089,116091,116093],{"class":86,"line":33820},[84,116080,116081],{"class":154},"    obs, info ",[84,116083,867],{"class":129},[84,116085,116086],{"class":154}," env.reset(",[84,116088,115700],{"class":928},[84,116090,867],{"class":129},[84,116092,1504],{"class":94},[84,116094,162],{"class":154},[84,116096,116097,116099,116101,116104],{"class":86,"line":33826},[84,116098,32453],{"class":94},[84,116100,155],{"class":154},[84,116102,116103],{"class":158},"\"initial obs shape:\"",[84,116105,116106],{"class":154},", obs.shape)\n",[84,116108,116109,116111,116113,116116],{"class":86,"line":33846},[84,116110,32453],{"class":94},[84,116112,155],{"class":154},[84,116114,116115],{"class":158},"\"initial info:\"",[84,116117,116118],{"class":154},", info)\n",[84,116120,116121],{"class":86,"line":33852},[84,116122,3578],{"emptyLinePlaceholder":1252},[84,116124,116125,116127,116129],{"class":86,"line":33863},[84,116126,111287],{"class":154},[84,116128,867],{"class":129},[84,116130,105896],{"class":94},[84,116132,116133,116135,116137,116139,116141,116143,116145],{"class":86,"line":33869},[84,116134,4379],{"class":129},[84,116136,32769],{"class":154},[84,116138,27206],{"class":129},[84,116140,33596],{"class":94},[84,116142,155],{"class":154},[84,116144,2008],{"class":94},[84,116146,31940],{"class":154},[84,116148,116149,116151,116153],{"class":86,"line":33875},[84,116150,111356],{"class":154},[84,116152,867],{"class":129},[84,116154,116155],{"class":154}," env.action_space.sample()\n",[84,116157,116158,116161,116163],{"class":86,"line":33881},[84,116159,116160],{"class":154},"        obs, reward, terminated, truncated, info ",[84,116162,867],{"class":129},[84,116164,114549],{"class":154},[84,116166,116167,116169,116171],{"class":86,"line":33887},[84,116168,111431],{"class":154},[84,116170,10649],{"class":129},[84,116172,111436],{"class":154},[84,116174,116175,116177,116179,116181,116183,116186,116188,116190,116193,116195,116197,116200,116202,116204,116207,116209,116211,116213],{"class":86,"line":33893},[84,116176,33604],{"class":94},[84,116178,155],{"class":154},[84,116180,111465],{"class":158},[84,116182,111468],{"class":154},[84,116184,116185],{"class":158},"\"reward:\"",[84,116187,846],{"class":154},[84,116189,33171],{"class":94},[84,116191,116192],{"class":154},"(reward, ",[84,116194,1391],{"class":94},[84,116196,111479],{"class":154},[84,116198,116199],{"class":158},"\"distance:\"",[84,116201,846],{"class":154},[84,116203,33171],{"class":94},[84,116205,116206],{"class":154},"(info[",[84,116208,116036],{"class":158},[84,116210,113336],{"class":154},[84,116212,1391],{"class":94},[84,116214,31651],{"class":154},[84,116216,116217,116219,116222,116225],{"class":86,"line":33899},[84,116218,3675],{"class":129},[84,116220,116221],{"class":154}," terminated ",[84,116223,116224],{"class":129},"or",[84,116226,116227],{"class":154}," truncated:\n",[84,116229,116230],{"class":86,"line":33905},[84,116231,116232],{"class":129},"            break\n",[84,116234,116235],{"class":86,"line":33925},[84,116236,3578],{"emptyLinePlaceholder":1252},[84,116238,116239,116241,116243,116245,116247,116249,116251,116253],{"class":86,"line":33931},[84,116240,32453],{"class":94},[84,116242,155],{"class":154},[84,116244,111510],{"class":158},[84,116246,846],{"class":154},[84,116248,33171],{"class":94},[84,116250,111517],{"class":154},[84,116252,1391],{"class":94},[84,116254,31651],{"class":154},[84,116256,116257],{"class":86,"line":33947},[84,116258,3578],{"emptyLinePlaceholder":1252},[84,116260,116261],{"class":86,"line":33953},[84,116262,3578],{"emptyLinePlaceholder":1252},[84,116264,116265,116267,116269,116271,116273],{"class":86,"line":33967},[84,116266,2712],{"class":129},[84,116268,32374],{"class":94},[84,116270,102697],{"class":129},[84,116272,102700],{"class":158},[84,116274,4917],{"class":154},[84,116276,116277],{"class":86,"line":33973},[84,116278,102707],{"class":154},[19,116280,104707],{},[60,116282,116284],{"className":78,"code":116283,"language":80,"meta":66,"style":66},"touch ch8_gym_env.py\n",[39,116285,116286],{"__ignoreMap":66},[84,116287,116288,116290],{"class":86,"line":87},[84,116289,102421],{"class":90},[84,116291,116292],{"class":158}," ch8_gym_env.py\n",[19,116294,111578],{},[60,116296,116298],{"className":78,"code":116297,"language":80,"meta":66,"style":66},"python ch8_gym_env.py\n",[39,116299,116300],{"__ignoreMap":66},[84,116301,116302,116304],{"class":86,"line":87},[84,116303,91],{"class":90},[84,116305,116292],{"class":158},[198,116307,102710],{"id":102710},[19,116309,116310],{},"继承 Gymnasium 环境：",[60,116312,116314],{"className":121,"code":116313,"language":91,"meta":66,"style":66},"class ReacherEnv(gym.Env):\n",[39,116315,116316],{"__ignoreMap":66},[84,116317,116318,116320,116322,116324,116326,116328,116330],{"class":86,"line":87},[84,116319,15864],{"class":129},[84,116321,115191],{"class":90},[84,116323,155],{"class":154},[84,116325,114674],{"class":90},[84,116327,1867],{"class":154},[84,116329,115200],{"class":90},[84,116331,31940],{"class":154},[19,116333,116334],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116336,116337],{},"初始化模型：",[60,116339,116341],{"className":121,"code":116340,"language":91,"meta":66,"style":66},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[39,116342,116343,116357],{"__ignoreMap":66},[84,116344,116345,116347,116349,116351,116353,116355],{"class":86,"line":87},[84,116346,31977],{"class":94},[84,116348,115251],{"class":154},[84,116350,867],{"class":129},[84,116352,102550],{"class":154},[84,116354,102452],{"class":94},[84,116356,162],{"class":154},[84,116358,116359,116361,116363,116365,116367,116369],{"class":86,"line":98},[84,116360,31977],{"class":94},[84,116362,115266],{"class":154},[84,116364,867],{"class":129},[84,116366,115271],{"class":154},[84,116368,31977],{"class":94},[84,116370,115276],{"class":154},[19,116372,116373,116374,116376],{},"这和前面章节一样，只是现在放到了类的 ",[39,116375,31983],{}," 里。",[19,116378,116379],{},"缓存 site ID：",[60,116381,116383],{"className":121,"code":116382,"language":91,"meta":66,"style":66},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[39,116384,116385,116399],{"__ignoreMap":66},[84,116386,116387,116389,116391,116393,116395,116397],{"class":86,"line":87},[84,116388,31977],{"class":94},[84,116390,115287],{"class":154},[84,116392,867],{"class":129},[84,116394,115292],{"class":154},[84,116396,90700],{"class":94},[84,116398,162],{"class":154},[84,116400,116401,116403,116405,116407,116409,116411],{"class":86,"line":98},[84,116402,31977],{"class":94},[84,116404,115308],{"class":154},[84,116406,867],{"class":129},[84,116408,115292],{"class":154},[84,116410,90700],{"class":94},[84,116412,162],{"class":154},[19,116414,116415],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116417,116418],{},"reset：",[60,116420,116422],{"className":121,"code":116421,"language":91,"meta":66,"style":66},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[39,116423,116424],{"__ignoreMap":66},[84,116425,116426,116428,116430,116432,116434,116436,116438,116440,116442,116444,116446,116448,116450,116452,116454,116456,116458],{"class":86,"line":87},[84,116427,33100],{"class":129},[84,116429,115656],{"class":90},[84,116431,115659],{"class":154},[84,116433,1043],{"class":129},[84,116435,115664],{"class":154},[84,116437,1327],{"class":94},[84,116439,26273],{"class":129},[84,116441,40085],{"class":94},[84,116443,14735],{"class":129},[84,116445,40085],{"class":94},[84,116447,115677],{"class":154},[84,116449,115680],{"class":94},[84,116451,26273],{"class":129},[84,116453,40085],{"class":94},[84,116455,14735],{"class":129},[84,116457,40085],{"class":94},[84,116459,31940],{"class":154},[19,116461,116462,116464],{},[39,116463,71202],{}," 做四件事：",[26,116466,116467,116470,116473,116476],{},[29,116468,116469],{},"设置随机种子。",[29,116471,116472],{},"重置 MuJoCo data。",[29,116474,116475],{},"随机初始化关节角。",[29,116477,116478],{},"返回初始观测和 info。",[19,116480,116481],{},"step：",[60,116483,116485],{"className":121,"code":116484,"language":91,"meta":66,"style":66},"def step(self, action):\n",[39,116486,116487],{"__ignoreMap":66},[84,116488,116489,116491,116493],{"class":86,"line":87},[84,116490,33100],{"class":129},[84,116492,115821],{"class":90},[84,116494,115824],{"class":154},[19,116496,116497,116499],{},[39,116498,108269],{}," 做六件事：",[26,116501,116502,116505,116511,116514,116517,116520],{},[29,116503,116504],{},"检查并裁剪 action。",[29,116506,116507,116508,55],{},"写入 ",[39,116509,116510],{},"self.data.ctrl",[29,116512,116513],{},"连续推进若干个 MuJoCo 物理步。",[29,116515,116516],{},"计算新观测。",[29,116518,116519],{},"计算奖励和结束条件。",[29,116521,116522],{},"返回 Gymnasium 标准五元组。",[198,116524,102846],{"id":102846},[60,116526,116528],{"className":121,"code":116527,"language":91,"meta":66,"style":66},"import gymnasium as gym\n",[39,116529,116530],{"__ignoreMap":66},[84,116531,116532,116534,116536,116538],{"class":86,"line":87},[84,116533,31547],{"class":129},[84,116535,115029],{"class":154},[84,116537,1157],{"class":129},[84,116539,115034],{"class":154},[19,116541,116542,116543,116545,116546,116549],{},"导入 Gymnasium，并起别名 ",[39,116544,114674],{},"。后面写 ",[39,116547,116548],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[60,116551,116553],{"className":121,"code":116552,"language":91,"meta":66,"style":66},"from gymnasium import spaces\n",[39,116554,116555],{"__ignoreMap":66},[84,116556,116557,116559,116561,116563],{"class":86,"line":87},[84,116558,31891],{"class":129},[84,116560,115029],{"class":154},[84,116562,31547],{"class":129},[84,116564,115061],{"class":154},[19,116566,116567,116568,116571],{},"导入空间定义工具。",[39,116569,116570],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[60,116573,116574],{"className":121,"code":116313,"language":91,"meta":66,"style":66},[39,116575,116576],{"__ignoreMap":66},[84,116577,116578,116580,116582,116584,116586,116588,116590],{"class":86,"line":87},[84,116579,15864],{"class":129},[84,116581,115191],{"class":90},[84,116583,155],{"class":154},[84,116585,114674],{"class":90},[84,116587,1867],{"class":154},[84,116589,115200],{"class":90},[84,116591,31940],{"class":154},[19,116593,116594,116595,116598,116599,116601,116602,102156,116604,116606],{},"定义一个类，名字叫 ",[39,116596,116597],{},"ReacherEnv","。括号里的 ",[39,116600,116548],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[39,116603,71202],{},[39,116605,108269],{}," 这两个核心方法。",[60,116608,116610],{"className":121,"code":116609,"language":91,"meta":66,"style":66},"metadata = {\"render_modes\": []}\n",[39,116611,116612],{"__ignoreMap":66},[84,116613,116614,116617,116619,116621,116623],{"class":86,"line":87},[84,116615,116616],{"class":154},"metadata ",[84,116618,867],{"class":129},[84,116620,5625],{"class":154},[84,116622,115214],{"class":158},[84,116624,115217],{"class":154},[19,116626,116627],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[60,116629,116631],{"className":121,"code":116630,"language":91,"meta":66,"style":66},"def __init__(self) -> None:\n",[39,116632,116633],{"__ignoreMap":66},[84,116634,116635,116637,116639,116641,116643],{"class":86,"line":87},[84,116636,33100],{"class":129},[84,116638,31958],{"class":94},[84,116640,115230],{"class":154},[84,116642,96832],{"class":94},[84,116644,4917],{"class":154},[19,116646,116647,116649,116650,55],{},[39,116648,31983],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[39,116651,116652],{},"env = ReacherEnv()",[60,116654,116656],{"className":121,"code":116655,"language":91,"meta":66,"style":66},"super().__init__()\n",[39,116657,116658],{"__ignoreMap":66},[84,116659,116660,116663,116665,116667],{"class":86,"line":87},[84,116661,116662],{"class":94},"super",[84,116664,18431],{"class":154},[84,116666,31983],{"class":94},[84,116668,183],{"class":154},[19,116670,116671,116672,116674],{},"调用父类 ",[39,116673,116548],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[60,116676,116677],{"className":121,"code":116340,"language":91,"meta":66,"style":66},[39,116678,116679,116693],{"__ignoreMap":66},[84,116680,116681,116683,116685,116687,116689,116691],{"class":86,"line":87},[84,116682,31977],{"class":94},[84,116684,115251],{"class":154},[84,116686,867],{"class":129},[84,116688,102550],{"class":154},[84,116690,102452],{"class":94},[84,116692,162],{"class":154},[84,116694,116695,116697,116699,116701,116703,116705],{"class":86,"line":98},[84,116696,31977],{"class":94},[84,116698,115266],{"class":154},[84,116700,867],{"class":129},[84,116702,115271],{"class":154},[84,116704,31977],{"class":94},[84,116706,115276],{"class":154},[19,116708,116709,116710,116712,116713,102156,116716,116719],{},"把 MuJoCo 模型和状态保存到 ",[39,116711,31977],{}," 上。",[39,116714,116715],{},"self.model",[39,116717,116718],{},"self.data"," 表示这个环境对象自己的模型和状态。",[60,116721,116722],{"className":121,"code":116382,"language":91,"meta":66,"style":66},[39,116723,116724,116738],{"__ignoreMap":66},[84,116725,116726,116728,116730,116732,116734,116736],{"class":86,"line":87},[84,116727,31977],{"class":94},[84,116729,115287],{"class":154},[84,116731,867],{"class":129},[84,116733,115292],{"class":154},[84,116735,90700],{"class":94},[84,116737,162],{"class":154},[84,116739,116740,116742,116744,116746,116748,116750],{"class":86,"line":98},[84,116741,31977],{"class":94},[84,116743,115308],{"class":154},[84,116745,867],{"class":129},[84,116747,115292],{"class":154},[84,116749,90700],{"class":94},[84,116751,162],{"class":154},[19,116753,116754,116755,102156,116758,116761],{},"提前查好 tip 和 target 的 site ID。这样 ",[39,116756,116757],{},"_get_obs",[39,116759,116760],{},"_get_reward"," 里就不用每次按名字查找。",[60,116763,116765],{"className":121,"code":116764,"language":91,"meta":66,"style":66},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[39,116766,116767,116777,116787],{"__ignoreMap":66},[84,116768,116769,116771,116773,116775],{"class":86,"line":87},[84,116770,31977],{"class":94},[84,116772,115001],{"class":154},[84,116774,867],{"class":129},[84,116776,1033],{"class":94},[84,116778,116779,116781,116783,116785],{"class":86,"line":98},[84,116780,31977],{"class":94},[84,116782,115380],{"class":154},[84,116784,867],{"class":129},[84,116786,115385],{"class":94},[84,116788,116789,116791,116793,116795],{"class":86,"line":106},[84,116790,31977],{"class":94},[84,116792,114840],{"class":154},[84,116794,867],{"class":129},[84,116796,48483],{"class":94},[19,116798,116799,116802,116803,116806,116807,116810],{},[39,116800,116801],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[39,116804,116805],{},"max_steps"," 是一个 episode 最多运行多少步。",[39,116808,116809],{},"steps"," 记录当前 episode 已经走了多少步。",[60,116812,116813],{"className":121,"code":114879,"language":91,"meta":66,"style":66},[39,116814,116815],{"__ignoreMap":66},[84,116816,116817,116819,116821,116823,116825,116827,116829,116831,116833,116835,116837,116839,116841,116843,116845,116847,116849,116851,116853,116855],{"class":86,"line":87},[84,116818,31977],{"class":94},[84,116820,114888],{"class":154},[84,116822,867],{"class":129},[84,116824,114893],{"class":154},[84,116826,114896],{"class":928},[84,116828,114899],{"class":129},[84,116830,103541],{"class":94},[84,116832,846],{"class":154},[84,116834,114906],{"class":928},[84,116836,867],{"class":129},[84,116838,103541],{"class":94},[84,116840,846],{"class":154},[84,116842,97109],{"class":928},[84,116844,867],{"class":129},[84,116846,155],{"class":154},[84,116848,1397],{"class":94},[84,116850,114923],{"class":154},[84,116852,94646],{"class":928},[84,116854,867],{"class":129},[84,116856,114930],{"class":154},[19,116858,116859,116860,116863,116864,102156,116867,116870],{},"定义动作空间。",[39,116861,116862],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[39,116865,116866],{},"low=-1.0",[39,116868,116869],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[60,116872,116873],{"className":121,"code":114940,"language":91,"meta":66,"style":66},[39,116874,116875],{"__ignoreMap":66},[84,116876,116877,116879,116881,116883,116885,116887,116889,116891,116893,116895,116897,116899,116901,116903,116905,116907,116909,116911],{"class":86,"line":87},[84,116878,31977],{"class":94},[84,116880,114949],{"class":154},[84,116882,867],{"class":129},[84,116884,114893],{"class":154},[84,116886,114896],{"class":928},[84,116888,114899],{"class":129},[84,116890,114960],{"class":154},[84,116892,114906],{"class":928},[84,116894,867],{"class":129},[84,116896,114960],{"class":154},[84,116898,97109],{"class":928},[84,116900,867],{"class":129},[84,116902,155],{"class":154},[84,116904,1756],{"class":94},[84,116906,114923],{"class":154},[84,116908,94646],{"class":928},[84,116910,867],{"class":129},[84,116912,114930],{"class":154},[19,116914,116915,116916,116919,116920,116923],{},"定义观测空间。",[39,116917,116918],{},"shape=(10,)"," 表示观测是 10 个数。",[39,116921,116922],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[60,116925,116927],{"className":121,"code":116926,"language":91,"meta":66,"style":66},"def _get_obs(self) -> np.ndarray:\n",[39,116928,116929],{"__ignoreMap":66},[84,116930,116931,116933,116935],{"class":86,"line":87},[84,116932,33100],{"class":129},[84,116934,115490],{"class":90},[84,116936,115493],{"class":154},[19,116938,116939,116940,116942],{},"定义内部函数，用来生成观测。函数名前面的 ",[39,116941,2300],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[60,116944,116946],{"className":121,"code":116945,"language":91,"meta":66,"style":66},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[39,116947,116948,116962],{"__ignoreMap":66},[84,116949,116950,116952,116954,116956,116958,116960],{"class":86,"line":87},[84,116951,112702],{"class":154},[84,116953,867],{"class":129},[84,116955,40025],{"class":94},[84,116957,115504],{"class":154},[84,116959,31977],{"class":94},[84,116961,115509],{"class":154},[84,116963,116964,116966,116968,116970,116972,116974],{"class":86,"line":98},[84,116965,112712],{"class":154},[84,116967,867],{"class":129},[84,116969,40025],{"class":94},[84,116971,115504],{"class":154},[84,116973,31977],{"class":94},[84,116975,115524],{"class":154},[19,116977,116978],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[60,116980,116982],{"className":121,"code":116981,"language":91,"meta":66,"style":66},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[39,116983,116984,117000],{"__ignoreMap":66},[84,116985,116986,116988,116990,116992,116994,116996,116998],{"class":86,"line":87},[84,116987,111988],{"class":154},[84,116989,867],{"class":129},[84,116991,115533],{"class":154},[84,116993,31977],{"class":94},[84,116995,115538],{"class":154},[84,116997,31977],{"class":94},[84,116999,115543],{"class":154},[84,117001,117002,117004],{"class":86,"line":98},[84,117003,18216],{"class":129},[84,117005,115550],{"class":154},[19,117007,117008,117009,117012,117013,117015],{},"拼接观测，并转换成 ",[39,117010,117011],{},"float32","。很多强化学习库默认使用 ",[39,117014,117011],{},"，所以这里主动转换。",[60,117017,117018],{"className":121,"code":116421,"language":91,"meta":66,"style":66},[39,117019,117020],{"__ignoreMap":66},[84,117021,117022,117024,117026,117028,117030,117032,117034,117036,117038,117040,117042,117044,117046,117048,117050,117052,117054],{"class":86,"line":87},[84,117023,33100],{"class":129},[84,117025,115656],{"class":90},[84,117027,115659],{"class":154},[84,117029,1043],{"class":129},[84,117031,115664],{"class":154},[84,117033,1327],{"class":94},[84,117035,26273],{"class":129},[84,117037,40085],{"class":94},[84,117039,14735],{"class":129},[84,117041,40085],{"class":94},[84,117043,115677],{"class":154},[84,117045,115680],{"class":94},[84,117047,26273],{"class":129},[84,117049,40085],{"class":94},[84,117051,14735],{"class":129},[84,117053,40085],{"class":94},[84,117055,31940],{"class":154},[19,117057,117058,117059,117061,117062,117065],{},"定义 reset。",[39,117060,115700],{}," 用来控制随机数，保证实验可以复现。",[39,117063,117064],{},"options"," 用来接收额外配置，本章暂时不用。",[60,117067,117069],{"className":121,"code":117068,"language":91,"meta":66,"style":66},"super().reset(seed=seed)\n",[39,117070,117071],{"__ignoreMap":66},[84,117072,117073,117075,117077,117079,117081],{"class":86,"line":87},[84,117074,116662],{"class":94},[84,117076,115697],{"class":154},[84,117078,115700],{"class":928},[84,117080,867],{"class":129},[84,117082,115705],{"class":154},[19,117084,117085,117086,117089],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[39,117087,117088],{},"self.np_random"," 生成可复现的随机数。",[60,117091,117093],{"className":121,"code":117092,"language":91,"meta":66,"style":66},"mujoco.mj_resetData(self.model, self.data)\n",[39,117094,117095],{"__ignoreMap":66},[84,117096,117097,117100,117102,117104,117106],{"class":86,"line":87},[84,117098,117099],{"class":154},"mujoco.mj_resetData(",[84,117101,31977],{"class":94},[84,117103,115715],{"class":154},[84,117105,31977],{"class":94},[84,117107,115720],{"class":154},[19,117109,117110],{},"把 MuJoCo 状态重置到默认状态。",[60,117112,117114],{"className":121,"code":117113,"language":91,"meta":66,"style":66},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[39,117115,117116],{"__ignoreMap":66},[84,117117,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138,117140,117142,117144,117146,117148,117150],{"class":86,"line":87},[84,117119,31977],{"class":94},[84,117121,115731],{"class":154},[84,117123,867],{"class":129},[84,117125,40025],{"class":94},[84,117127,115738],{"class":154},[84,117129,114896],{"class":928},[84,117131,114899],{"class":129},[84,117133,87356],{"class":94},[84,117135,846],{"class":154},[84,117137,114906],{"class":928},[84,117139,867],{"class":129},[84,117141,87356],{"class":94},[84,117143,846],{"class":154},[84,117145,32649],{"class":928},[84,117147,867],{"class":129},[84,117149,31977],{"class":94},[84,117151,115763],{"class":154},[19,117153,116475,117154,117157,117158,117161,117162,117164],{},[39,117155,117156],{},"[:]"," 表示修改整个数组。",[39,117159,117160],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[39,117163,103288],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[60,117166,117168],{"className":121,"code":117167,"language":91,"meta":66,"style":66},"self.data.qvel[:] = 0.0\n",[39,117169,117170],{"__ignoreMap":66},[84,117171,117172,117174,117176,117178],{"class":86,"line":87},[84,117173,31977],{"class":94},[84,117175,115770],{"class":154},[84,117177,867],{"class":129},[84,117179,105896],{"class":94},[19,117181,117182],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[60,117184,117186],{"className":121,"code":117185,"language":91,"meta":66,"style":66},"self.steps = 0\nreturn self._get_obs(), {}\n",[39,117187,117188,117198],{"__ignoreMap":66},[84,117189,117190,117192,117194,117196],{"class":86,"line":87},[84,117191,31977],{"class":94},[84,117193,114840],{"class":154},[84,117195,867],{"class":129},[84,117197,48483],{"class":94},[84,117199,117200,117202,117204],{"class":86,"line":98},[84,117201,18216],{"class":129},[84,117203,40025],{"class":94},[84,117205,115810],{"class":154},[19,117207,117208],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[60,117210,117211],{"className":121,"code":116484,"language":91,"meta":66,"style":66},[39,117212,117213],{"__ignoreMap":66},[84,117214,117215,117217,117219],{"class":86,"line":87},[84,117216,33100],{"class":129},[84,117218,115821],{"class":90},[84,117220,115824],{"class":154},[19,117222,117223],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[60,117225,117227],{"className":121,"code":117226,"language":91,"meta":66,"style":66},"action = np.asarray(action, dtype=np.float32)\n",[39,117228,117229],{"__ignoreMap":66},[84,117230,117231,117233,117235,117237,117239,117241],{"class":86,"line":87},[84,117232,108577],{"class":154},[84,117234,867],{"class":129},[84,117236,115833],{"class":154},[84,117238,94646],{"class":928},[84,117240,867],{"class":129},[84,117242,114930],{"class":154},[19,117244,117245,117246,55],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[39,117247,117011],{},[60,117249,117251],{"className":121,"code":117250,"language":91,"meta":66,"style":66},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[39,117252,117253],{"__ignoreMap":66},[84,117254,117255,117257,117259,117261,117263,117265,117267],{"class":86,"line":87},[84,117256,108577],{"class":154},[84,117258,867],{"class":129},[84,117260,108582],{"class":154},[84,117262,31977],{"class":94},[84,117264,115852],{"class":154},[84,117266,31977],{"class":94},[84,117268,115857],{"class":154},[19,117270,117271],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[60,117273,117275],{"className":121,"code":117274,"language":91,"meta":66,"style":66},"self.data.ctrl[:] = action\n",[39,117276,117277],{"__ignoreMap":66},[84,117278,117279,117281,117283,117285],{"class":86,"line":87},[84,117280,31977],{"class":94},[84,117282,115868],{"class":154},[84,117284,867],{"class":129},[84,117286,108605],{"class":154},[19,117288,117289],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[60,117291,117293],{"className":121,"code":117292,"language":91,"meta":66,"style":66},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[39,117294,117295,117311],{"__ignoreMap":66},[84,117296,117297,117299,117301,117303,117305,117307,117309],{"class":86,"line":87},[84,117298,4203],{"class":129},[84,117300,102639],{"class":154},[84,117302,27206],{"class":129},[84,117304,33596],{"class":94},[84,117306,155],{"class":154},[84,117308,31977],{"class":94},[84,117310,115889],{"class":154},[84,117312,117313,117316,117318,117320,117322],{"class":86,"line":98},[84,117314,117315],{"class":154},"    mujoco.mj_step(",[84,117317,31977],{"class":94},[84,117319,115715],{"class":154},[84,117321,31977],{"class":94},[84,117323,115720],{"class":154},[19,117325,117326,117327,117330,117331,117333,117334,55],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[39,117328,117329],{},"frame_skip=5","，所以外部调用一次 ",[39,117332,115011],{},"，内部实际执行 5 次 ",[39,117335,102353],{},[60,117337,117339],{"className":121,"code":117338,"language":91,"meta":66,"style":66},"self.steps += 1\n",[39,117340,117341],{"__ignoreMap":66},[84,117342,117343,117345,117347,117349],{"class":86,"line":87},[84,117344,31977],{"class":94},[84,117346,114840],{"class":154},[84,117348,10649],{"class":129},[84,117350,56846],{"class":94},[19,117352,117353],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[60,117355,117357],{"className":121,"code":117356,"language":91,"meta":66,"style":66},"obs = self._get_obs()\nreward = self._get_reward()\n",[39,117358,117359,117369],{"__ignoreMap":66},[84,117360,117361,117363,117365,117367],{"class":86,"line":87},[84,117362,111988],{"class":154},[84,117364,867],{"class":129},[84,117366,40025],{"class":94},[84,117368,115931],{"class":154},[84,117370,117371,117373,117375,117377],{"class":86,"line":98},[84,117372,112139],{"class":154},[84,117374,867],{"class":129},[84,117376,40025],{"class":94},[84,117378,115942],{"class":154},[19,117380,117381],{},"计算新的观测和奖励。",[60,117383,117385],{"className":121,"code":117384,"language":91,"meta":66,"style":66},"dist = float(np.linalg.norm(tip - target))\n",[39,117386,117387],{"__ignoreMap":66},[84,117388,117389,117391,117393,117395,117397,117399],{"class":86,"line":87},[84,117390,112730],{"class":154},[84,117392,867],{"class":129},[84,117394,110931],{"class":94},[84,117396,115985],{"class":154},[84,117398,1841],{"class":129},[84,117400,115990],{"class":154},[19,117402,117403],{},"计算末端到目标的距离，并转换成 Python float。",[60,117405,117406],{"className":121,"code":114811,"language":91,"meta":66,"style":66},[39,117407,117408,117420],{"__ignoreMap":66},[84,117409,117410,117412,117414,117416,117418],{"class":86,"line":87},[84,117411,114818],{"class":154},[84,117413,867],{"class":129},[84,117415,114823],{"class":154},[84,117417,2218],{"class":129},[84,117419,114828],{"class":94},[84,117421,117422,117424,117426,117428,117430,117432,117434],{"class":86,"line":98},[84,117423,114833],{"class":154},[84,117425,867],{"class":129},[84,117427,40025],{"class":94},[84,117429,114840],{"class":154},[84,117431,2891],{"class":129},[84,117433,40025],{"class":94},[84,117435,114847],{"class":154},[19,117437,117438],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[60,117440,117442],{"className":121,"code":117441,"language":91,"meta":66,"style":66},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[39,117443,117444,117457],{"__ignoreMap":66},[84,117445,117446,117449,117451,117453,117455],{"class":86,"line":87},[84,117447,117448],{"class":154},"info ",[84,117450,867],{"class":129},[84,117452,5625],{"class":154},[84,117454,116036],{"class":158},[84,117456,116039],{"class":154},[84,117458,117459,117461],{"class":86,"line":98},[84,117460,18216],{"class":129},[84,117462,116046],{"class":154},[19,117464,117465,117468],{},[39,117466,117467],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[60,117470,117472],{"className":121,"code":117471,"language":91,"meta":66,"style":66},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[39,117473,117474,117483],{"__ignoreMap":66},[84,117475,117476,117479,117481],{"class":86,"line":87},[84,117477,117478],{"class":154},"env ",[84,117480,867],{"class":129},[84,117482,116076],{"class":154},[84,117484,117485,117487,117489,117491,117493,117495,117497],{"class":86,"line":98},[84,117486,114534],{"class":154},[84,117488,867],{"class":129},[84,117490,116086],{"class":154},[84,117492,115700],{"class":928},[84,117494,867],{"class":129},[84,117496,1504],{"class":94},[84,117498,162],{"class":154},[19,117500,117501,117502,117505],{},"创建环境并重置。",[39,117503,117504],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[60,117507,117509],{"className":121,"code":117508,"language":91,"meta":66,"style":66},"action = env.action_space.sample()\n",[39,117510,117511],{"__ignoreMap":66},[84,117512,117513,117515,117517],{"class":86,"line":87},[84,117514,108577],{"class":154},[84,117516,867],{"class":129},[84,117518,116155],{"class":154},[19,117520,117521],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117523,103454],{"id":103453},[19,117525,106619],{},[60,117527,117530],{"className":117528,"code":117529,"language":65,"meta":66},[63],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[39,117531,117529],{"__ignoreMap":66},[19,117533,117534],{},"这个环境已经具备强化学习环境的基本结构。",[19,117536,117537],{},"主函数里使用随机动作：",[60,117539,117540],{"className":121,"code":117508,"language":91,"meta":66,"style":66},[39,117541,117542],{"__ignoreMap":66},[84,117543,117544,117546,117548],{"class":86,"line":87},[84,117545,108577],{"class":154},[84,117547,867],{"class":129},[84,117549,116155],{"class":154},[19,117551,117552],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117554,103486],{"id":103485},[26,117556,117557,117560,117566,117575,117584,117593,117599],{},[29,117558,117559],{},"运行程序。",[29,117561,117562,117563,55],{},"确认 ",[39,117564,117565],{},"obs.shape == (10,)",[29,117567,112315,117568,117571,117572,55],{},[39,117569,117570],{},"env.action_space","，应类似 ",[39,117573,117574],{},"Box(-1.0, 1.0, (2,), float32)",[29,117576,106720,117577,117580,117581,55],{},[39,117578,117579],{},"self.max_steps = 10","，确认环境会更快 ",[39,117582,117583],{},"truncated=True",[29,117585,103549,117586,103552,117589,117592],{},[39,117587,117588],{},"terminated = dist \u003C 0.05",[39,117590,117591],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,117594,103549,117595,117598],{},[39,117596,117597],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,117600,117601,117602,117604,117605,117608],{},"在 ",[39,117603,117467],{}," 里加入 ",[39,117606,117607],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117610,103591],{"id":103590},[198,117612,117614],{"id":117613},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117616,117617,117618,117620],{},"Gymnasium 的 ",[39,117619,108269],{}," 返回 5 个值:",[60,117622,117624],{"className":121,"code":117623,"language":91,"meta":66,"style":66},"obs, reward, terminated, truncated, info\n",[39,117625,117626],{"__ignoreMap":66},[84,117627,117628],{"class":86,"line":87},[84,117629,117623],{"class":154},[19,117631,117632],{},"不是旧 Gym 的 4 个值。",[198,117634,117636,117639],{"id":117635},"datactrl-action-维度错误",[39,117637,117638],{},"data.ctrl[:] = action"," 维度错误",[19,117641,103661],{},[60,117643,117645],{"className":121,"code":117644,"language":91,"meta":66,"style":66},"print(self.model.nu)\nprint(action.shape)\n",[39,117646,117647,117658],{"__ignoreMap":66},[84,117648,117649,117651,117653,117655],{"class":86,"line":87},[84,117650,730],{"class":94},[84,117652,155],{"class":154},[84,117654,31977],{"class":94},[84,117656,117657],{"class":154},".model.nu)\n",[84,117659,117660,117662],{"class":86,"line":98},[84,117661,730],{"class":94},[84,117663,117664],{"class":154},"(action.shape)\n",[19,117666,117667],{},"两者必须匹配。",[198,117669,117671],{"id":117670},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117673,103600],{},[60,117675,117677],{"className":121,"code":117676,"language":91,"meta":66,"style":66},"mujoco.mj_forward(self.model, self.data)\n",[39,117678,117679],{"__ignoreMap":66},[84,117680,117681,117684,117686,117688,117690],{"class":86,"line":87},[84,117682,117683],{"class":154},"mujoco.mj_forward(",[84,117685,31977],{"class":94},[84,117687,115715],{"class":154},[84,117689,31977],{"class":94},[84,117691,115720],{"class":154},[198,117693,117695,117697],{"id":117694},"observation_space-维度和-obs-不一致",[39,117696,114734],{}," 维度和 obs 不一致",[19,117699,103713],{},[60,117701,117703],{"className":121,"code":117702,"language":91,"meta":66,"style":66},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[39,117704,117705,117715,117722],{"__ignoreMap":66},[84,117706,117707,117709,117711,117713],{"class":86,"line":87},[84,117708,111988],{"class":154},[84,117710,867],{"class":129},[84,117712,40025],{"class":94},[84,117714,115931],{"class":154},[84,117716,117717,117719],{"class":86,"line":98},[84,117718,730],{"class":94},[84,117720,117721],{"class":154},"(obs.shape)\n",[84,117723,117724,117726,117728,117730],{"class":86,"line":106},[84,117725,730],{"class":94},[84,117727,155],{"class":154},[84,117729,31977],{"class":94},[84,117731,117732],{"class":154},".observation_space.shape)\n",[19,117734,117735],{},"两者必须一致。本章观测是：",[60,117737,117740],{"className":117738,"code":117739,"language":65,"meta":66},[63],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[39,117741,117739],{"__ignoreMap":66},[198,117743,117745],{"id":117744},"action-超过范围","action 超过范围",[19,117747,117748],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[60,117750,117751],{"className":121,"code":117250,"language":91,"meta":66,"style":66},[39,117752,117753],{"__ignoreMap":66},[84,117754,117755,117757,117759,117761,117763,117765,117767],{"class":86,"line":87},[84,117756,108577],{"class":154},[84,117758,867],{"class":129},[84,117760,108582],{"class":154},[84,117762,31977],{"class":94},[84,117764,115852],{"class":154},[84,117766,31977],{"class":94},[84,117768,115857],{"class":154},[19,117770,117771,117772,55],{},"这能避免无效动作直接写入 ",[39,117773,102214],{},[198,117775,117777],{"id":117776},"忘记返回-info","忘记返回 info",[19,117779,117617,117780,102156,117782,117784],{},[39,117781,71202],{},[39,117783,108269],{}," 都会返回 info：",[60,117786,117787],{"className":121,"code":114527,"language":91,"meta":66,"style":66},[39,117788,117789,117797],{"__ignoreMap":66},[84,117790,117791,117793,117795],{"class":86,"line":87},[84,117792,114534],{"class":154},[84,117794,867],{"class":129},[84,117796,114539],{"class":154},[84,117798,117799,117801,117803],{"class":86,"line":98},[84,117800,114544],{"class":154},[84,117802,867],{"class":129},[84,117804,114549],{"class":154},[19,117806,117807,117808,55],{},"即使暂时没有额外信息，也返回 ",[39,117809,33612],{},[14,117811,117813],{"id":117812},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117815,117816],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,117818,117819,117822,117825,117828,117831,117834],{},[29,117820,117821],{},"更稳定的 reward。",[29,117823,117824],{},"合理的 episode 长度。",[29,117826,117827],{},"可重复的随机目标采样。",[29,117829,117830],{},"render 接口。",[29,117832,117833],{},"环境注册代码。",[29,117835,117836],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117838,117839],{},"如果只是自己写训练循环，最小形式是：",[60,117841,117843],{"className":121,"code":117842,"language":91,"meta":66,"style":66},"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",[39,117844,117845,117853,117869,117873,117889,117898,117907,117917],{"__ignoreMap":66},[84,117846,117847,117849,117851],{"class":86,"line":87},[84,117848,117478],{"class":154},[84,117850,867],{"class":129},[84,117852,116076],{"class":154},[84,117854,117855,117857,117859,117861,117863,117865,117867],{"class":86,"line":98},[84,117856,114534],{"class":154},[84,117858,867],{"class":129},[84,117860,116086],{"class":154},[84,117862,115700],{"class":928},[84,117864,867],{"class":129},[84,117866,1504],{"class":94},[84,117868,162],{"class":154},[84,117870,117871],{"class":86,"line":106},[84,117872,3578],{"emptyLinePlaceholder":1252},[84,117874,117875,117877,117879,117881,117883,117885,117887],{"class":86,"line":112},[84,117876,4203],{"class":129},[84,117878,102639],{"class":154},[84,117880,27206],{"class":129},[84,117882,33596],{"class":94},[84,117884,155],{"class":154},[84,117886,7583],{"class":94},[84,117888,31940],{"class":154},[84,117890,117891,117894,117896],{"class":86,"line":425},[84,117892,117893],{"class":154},"    action ",[84,117895,867],{"class":129},[84,117897,116155],{"class":154},[84,117899,117900,117903,117905],{"class":86,"line":2395},[84,117901,117902],{"class":154},"    obs, reward, terminated, truncated, info ",[84,117904,867],{"class":129},[84,117906,114549],{"class":154},[84,117908,117909,117911,117913,117915],{"class":86,"line":2401},[84,117910,4279],{"class":129},[84,117912,116221],{"class":154},[84,117914,116224],{"class":129},[84,117916,116227],{"class":154},[84,117918,117919,117922,117924],{"class":86,"line":2492},[84,117920,117921],{"class":154},"        obs, info ",[84,117923,867],{"class":129},[84,117925,114539],{"class":154},[14,117927,117929],{"id":117928},"_9本章小结","9.本章小结",[19,117931,117932],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[60,117934,117937],{"className":117935,"code":117936,"language":65,"meta":66},[63],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[39,117938,117936],{"__ignoreMap":66},[19,117940,117941],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1222,117943,117944],{},"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":66,"searchDepth":98,"depth":98,"links":117946},[117947,117948,117949,117956,117960,117961,117962,117972,117973],{"id":101791,"depth":98,"text":101792},{"id":101914,"depth":98,"text":101915},{"id":102182,"depth":98,"text":102183,"children":117950},[117951,117953,117955],{"id":114758,"depth":106,"text":117952},"terminated 和 truncated 的区别",{"id":114861,"depth":106,"text":117954},"observation_space 和 action_space",{"id":114988,"depth":106,"text":114989},{"id":102390,"depth":98,"text":102391,"children":117957},[117958,117959],{"id":102710,"depth":106,"text":102710},{"id":102846,"depth":106,"text":102846},{"id":103453,"depth":98,"text":103454},{"id":103485,"depth":98,"text":103486},{"id":103590,"depth":98,"text":103591,"children":117963},[117964,117965,117967,117968,117970,117971],{"id":117613,"depth":106,"text":117614},{"id":117635,"depth":106,"text":117966},"data.ctrl[:] = action 维度错误",{"id":117670,"depth":106,"text":117671},{"id":117694,"depth":106,"text":117969},"observation_space 维度和 obs 不一致",{"id":117744,"depth":106,"text":117745},{"id":117776,"depth":106,"text":117777},{"id":117812,"depth":98,"text":117813},{"id":117928,"depth":98,"text":117929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114511,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117980,"title":117981,"body":117982,"description":118405,"extension":1250,"meta":118406,"navigation":1252,"path":118407,"seo":118408,"stem":118409,"__hash__":118410},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117983,"toc":118395},[117984,117988,117991,117994,118014,118020,118026,118036,118039,118042,118062,118065,118069,118072,118078,118081,118095,118098,118101,118175,118178,118184,118187,118210,118213,118263,118266,118272,118275,118278,118281,118300,118303,118309,118312,118315,118318,118338,118341,118344,118347,118392],[10,117985,117987],{"id":117986},"mujoco-学习","MuJoCo 学习",[19,117989,117990],{},"初版",[19,117992,117993],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,117995,117996,117999,118002,118011],{},[29,117997,117998],{},"MuJoCo 模型文件在描述什么。",[29,118000,118001],{},"Python 代码怎样读取和推进仿真。",[29,118003,118004,42,118006,42,118008,118010],{},[39,118005,105167],{},[39,118007,105497],{},[39,118009,105500],{}," 这些数组为什么重要。",[29,118012,118013],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118015,118016,118017,118019],{},"默认环境为 Fedora 44、Python >= 3.10、",[39,118018,102165],{}," 官方 Python bindings。",[19,118021,118022,118023,118025],{},"注意：本文禁止使用 ",[39,118024,102150],{},"。所有示例均使用：",[60,118027,118028],{"className":121,"code":102716,"language":91,"meta":66,"style":66},[39,118029,118030],{"__ignoreMap":66},[84,118031,118032,118034],{"class":86,"line":87},[84,118033,31547],{"class":129},[84,118035,102439],{"class":154},[14,118037,118038],{"id":118038},"适合谁阅读",[19,118040,118041],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118043,118044,118047,118050,118053],{},[29,118045,118046],{},"没学过 MuJoCo，只会一点 Python。",[29,118048,118049],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118051,118052],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118054,118055,118056,118058,118059,118061],{},"以前接触过 ",[39,118057,102150],{},"，现在想迁移到官方 ",[39,118060,102159],{}," Python bindings。",[19,118063,118064],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118066,118068],{"id":118067},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118070,118071],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[60,118073,118076],{"className":118074,"code":118075,"language":65,"meta":66},[63],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[39,118077,118075],{"__ignoreMap":66},[19,118079,118080],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118082,118083,118086,118089,118092],{},[29,118084,118085],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118087,118088],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118090,118091],{},"生成强化学习环境。",[29,118093,118094],{},"采集状态、动作、图像、奖励等训练数据。",[14,118096,118097],{"id":118097},"学习前的心智模型",[19,118099,118100],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[458,118102,118103,118115],{},[461,118104,118105],{},[464,118106,118107,118110,118113],{},[467,118108,118109],{"align":24906},"部分",[467,118111,118112],{"align":24906},"负责什么",[467,118114,22357],{"align":24906},[474,118116,118117,118128,118140,118152,118164],{},[464,118118,118119,118122,118125],{},[479,118120,118121],{"align":24906},"MJCF XML",[479,118123,118124],{"align":24906},"定义世界和机器人结构",[479,118126,118127],{"align":24906},"地面、盒子、关节、电机、摄像头",[464,118129,118130,118134,118137],{},[479,118131,118132],{"align":24906},[39,118133,101854],{},[479,118135,118136],{"align":24906},"编译后的静态模型",[479,118138,118139],{"align":24906},"有几个关节、有几个电机、时间步长是多少",[464,118141,118142,118146,118149],{},[479,118143,118144],{"align":24906},[39,118145,101864],{},[479,118147,118148],{"align":24906},"运行中的动态状态",[479,118150,118151],{"align":24906},"当前时间、位置、速度、电机输入",[464,118153,118154,118158,118161],{},[479,118155,118156],{"align":24906},[39,118157,102353],{},[479,118159,118160],{"align":24906},"推进一步物理仿真",[479,118162,118163],{"align":24906},"根据重力、力、碰撞更新状态",[464,118165,118166,118169,118172],{},[479,118167,118168],{"align":24906},"Viewer \u002F Renderer",[479,118170,118171],{"align":24906},"把仿真显示出来",[479,118173,118174],{"align":24906},"打开窗口或保存图片",[19,118176,118177],{},"一句话总结：",[60,118179,118182],{"className":118180,"code":118181,"language":65,"meta":66},[63],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[39,118183,118181],{"__ignoreMap":66},[19,118185,118186],{},"参考来源：",[2315,118188,118189,118196,118203],{},[29,118190,118191,118192],{},"MuJoCo Python 官方文档：",[208,118193,118194],{"href":118194,"rel":118195},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[212],[29,118197,118198,118199],{},"MuJoCo XML Reference：",[208,118200,118201],{"href":118201,"rel":118202},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[212],[29,118204,118205,118206],{},"MuJoCo Overview：",[208,118207,118208],{"href":118208,"rel":118209},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[212],[14,118211,118212],{"id":118212},"章节目录",[26,118214,118215,118221,118227,118233,118239,118245,118251,118257],{},[29,118216,118217],{},[208,118218,118220],{"href":118219},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118222,118223],{},[208,118224,118226],{"href":118225},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118228,118229],{},[208,118230,118232],{"href":118231},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118234,118235],{},[208,118236,118238],{"href":118237},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118240,118241],{},[208,118242,118244],{"href":118243},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118246,118247],{},[208,118248,118250],{"href":118249},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118252,118253],{},[208,118254,118256],{"href":118255},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118258,118259],{},[208,118260,118262],{"href":118261},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118264,118265],{"id":118265},"推荐学习路线",[60,118267,118270],{"className":118268,"code":118269,"language":65,"meta":66},[63],"环境安装\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",[39,118271,118269],{"__ignoreMap":66},[19,118273,118274],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118276,118277],{"id":118277},"建议的目录结构",[19,118279,118280],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[60,118282,118284],{"className":78,"code":118283,"language":80,"meta":66,"style":66},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[39,118285,118286,118294],{"__ignoreMap":66},[84,118287,118288,118290,118292],{"class":86,"line":87},[84,118289,102404],{"class":90},[84,118291,30373],{"class":94},[84,118293,102409],{"class":158},[84,118295,118296,118298],{"class":86,"line":98},[84,118297,102414],{"class":94},[84,118299,102409],{"class":158},[19,118301,118302],{},"每一章的代码都单独保存：",[60,118304,118307],{"className":118305,"code":118306,"language":65,"meta":66},[63],"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",[39,118308,118306],{"__ignoreMap":66},[19,118310,118311],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118313,118314],{"id":118314},"学习方法",[19,118316,118317],{},"每章建议按这个顺序操作：",[26,118319,118320,118323,118326,118329,118332,118335],{},[29,118321,118322],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118324,118325],{},"复制最小可运行代码，保存成指定文件。",[29,118327,118328],{},"运行代码，确认没有报错。",[29,118330,118331],{},"对照“运行结果说明”理解输出。",[29,118333,118334],{},"做“验证步骤”，主动改一两个参数。",[29,118336,118337],{},"遇到报错先看“常见错误与解决方案”。",[19,118339,118340],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118342,118343],{"id":118343},"全局排错顺序",[19,118345,118346],{},"遇到问题时，按下面顺序查：",[26,118348,118349,118355,118361,118366,118369,118372,118379,118389],{},[29,118350,118351,118352],{},"Python 环境是否激活：",[39,118353,118354],{},"which python",[29,118356,118357,118358],{},"MuJoCo 是否能导入：",[39,118359,118360],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118362,118363,118364],{},"是否误装了 ",[39,118365,102150],{},[29,118367,118368],{},"XML 标签是否闭合、属性是否拼写正确",[29,118370,118371],{},"actuator 引用的 joint 名字是否存在",[29,118373,118374,118376,118377],{},[39,118375,102214],{}," 的长度是否等于 ",[39,118378,103296],{},[29,118380,106720,118381,83685,118383,118385,118386],{},[39,118382,105167],{},[39,118384,105497],{}," 后是否调用了 ",[39,118387,118388],{},"mujoco.mj_forward",[29,118390,118391],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1222,118393,118394],{},"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":66,"searchDepth":98,"depth":98,"links":118396},[118397,118398,118399,118400,118401,118402,118403,118404],{"id":118038,"depth":98,"text":118038},{"id":118067,"depth":98,"text":118068},{"id":118097,"depth":98,"text":118097},{"id":118212,"depth":98,"text":118212},{"id":118265,"depth":98,"text":118265},{"id":118277,"depth":98,"text":118277},{"id":118314,"depth":98,"text":118314},{"id":118343,"depth":98,"text":118343},"仿真搭建。",{"category":24548},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117981,"description":118405},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118412,"title":118413,"body":118414,"description":1249,"extension":1250,"meta":118867,"navigation":1252,"path":118868,"seo":118869,"stem":118870,"__hash__":118871},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118415,"toc":118865},[118416,118419,118422,118428,118862],[10,118417,118413],{"id":118418},"_1-最常用的基本操作更新",[19,118420,118421],{},"装linux系统教程：",[19,118423,118424],{},[208,118425,118426],{"href":118426,"rel":118427},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[212],[60,118429,118433],{"className":118430,"code":118431,"language":118432,"meta":66,"style":66},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[39,118434,118435,118440,118445,118453,118458,118467,118472,118492,118497,118508,118513,118522,118527,118555,118560,118579,118584,118603,118607,118612,118628,118632,118637,118667,118671,118676,118692,118696,118701,118715,118719,118724,118740,118744,118749,118761,118773,118777,118782,118799,118803,118808,118826,118830,118835,118844,118848,118853],{"__ignoreMap":66},[84,118436,118437],{"class":86,"line":87},[84,118438,118439],{"class":1378},"#更新相关的知识\n",[84,118441,118442],{"class":86,"line":98},[84,118443,118444],{"class":1378},"# 更新软件包列表（从服务器获取最新软件信息）\n",[84,118446,118447,118449,118451],{"class":86,"line":106},[84,118448,311],{"class":90},[84,118450,314],{"class":158},[84,118452,317],{"class":158},[84,118454,118455],{"class":86,"line":112},[84,118456,118457],{"class":1378},"# 升级所有可更新的软件包（不删除旧包）\n",[84,118459,118460,118462,118464],{"class":86,"line":425},[84,118461,311],{"class":90},[84,118463,314],{"class":158},[84,118465,118466],{"class":158}," upgrade\n",[84,118468,118469],{"class":86,"line":2395},[84,118470,118471],{"class":1378},"#更新和升级软件包\n",[84,118473,118474,118476,118478,118481,118483,118485,118487,118490],{"class":86,"line":2401},[84,118475,311],{"class":90},[84,118477,314],{"class":158},[84,118479,118480],{"class":158}," update",[84,118482,27353],{"class":154},[84,118484,311],{"class":90},[84,118486,314],{"class":158},[84,118488,118489],{"class":158}," upgrade",[84,118491,102119],{"class":94},[84,118493,118494],{"class":86,"line":2492},[84,118495,118496],{"class":1378},"#列出可更新的软件包及版本信息\n",[84,118498,118499,118502,118505],{"class":86,"line":2498},[84,118500,118501],{"class":90},"apt",[84,118503,118504],{"class":158}," list",[84,118506,118507],{"class":94}," --upgradable\n",[84,118509,118510],{"class":86,"line":2510},[84,118511,118512],{"class":1378},"#彻底升级（处理依赖关系，可能删除旧包）\n",[84,118514,118515,118517,118519],{"class":86,"line":2793},[84,118516,311],{"class":90},[84,118518,314],{"class":158},[84,118520,118521],{"class":158}," full-upgrade\n",[84,118523,118524],{"class":86,"line":2798},[84,118525,118526],{"class":1378},"#设置指定版本\n",[84,118528,118529,118531,118533,118535,118537,118540,118542,118544,118546,118548,118551,118553],{"class":86,"line":2804},[84,118530,311],{"class":90},[84,118532,314],{"class":158},[84,118534,275],{"class":158},[84,118536,30059],{"class":129},[84,118538,118539],{"class":158},"package_nam",[84,118541,1394],{"class":154},[84,118543,2268],{"class":129},[84,118545,867],{"class":158},[84,118547,2218],{"class":129},[84,118549,118550],{"class":158},"version_numbe",[84,118552,1978],{"class":154},[84,118554,52456],{"class":129},[84,118556,118557],{"class":86,"line":2809},[84,118558,118559],{"class":1378},"#只安装软件包不升级\n",[84,118561,118562,118564,118566,118568,118570,118572,118574,118576],{"class":86,"line":2823},[84,118563,311],{"class":90},[84,118565,314],{"class":158},[84,118567,275],{"class":158},[84,118569,30059],{"class":129},[84,118571,118539],{"class":158},[84,118573,1394],{"class":154},[84,118575,2268],{"class":129},[84,118577,118578],{"class":94}," --no-upgrade\n",[84,118580,118581],{"class":86,"line":2828},[84,118582,118583],{"class":1378},"#只升级，不存在就不安装\n",[84,118585,118586,118588,118590,118592,118594,118596,118598,118600],{"class":86,"line":2834},[84,118587,311],{"class":90},[84,118589,314],{"class":158},[84,118591,275],{"class":158},[84,118593,30059],{"class":129},[84,118595,118539],{"class":158},[84,118597,1394],{"class":154},[84,118599,2268],{"class":129},[84,118601,118602],{"class":94}," --only-upgrade\n",[84,118604,118605],{"class":86,"line":2855},[84,118606,3578],{"emptyLinePlaceholder":1252},[84,118608,118609],{"class":86,"line":2860},[84,118610,118611],{"class":1378},"#安装指定的软件命令\n",[84,118613,118614,118616,118618,118620,118622,118624,118626],{"class":86,"line":2874},[84,118615,311],{"class":90},[84,118617,314],{"class":158},[84,118619,275],{"class":158},[84,118621,30059],{"class":129},[84,118623,118539],{"class":158},[84,118625,1394],{"class":154},[84,118627,52456],{"class":129},[84,118629,118630],{"class":86,"line":2879},[84,118631,3578],{"emptyLinePlaceholder":1252},[84,118633,118634],{"class":86,"line":2908},[84,118635,118636],{"class":1378},"#安装多个软件包\n",[84,118638,118639,118641,118643,118645,118647,118650,118653,118655,118657,118660,118662,118664],{"class":86,"line":2913},[84,118640,311],{"class":90},[84,118642,314],{"class":158},[84,118644,275],{"class":158},[84,118646,30059],{"class":129},[84,118648,118649],{"class":158},"package_",[84,118651,118652],{"class":129},"1>",[84,118654,30059],{"class":129},[84,118656,118649],{"class":158},[84,118658,118659],{"class":129},"2>",[84,118661,30059],{"class":129},[84,118663,118649],{"class":158},[84,118665,118666],{"class":129},"3>\n",[84,118668,118669],{"class":86,"line":2930},[84,118670,3578],{"emptyLinePlaceholder":1252},[84,118672,118673],{"class":86,"line":2935},[84,118674,118675],{"class":1378},"#更新指定的软件命令\n",[84,118677,118678,118680,118682,118684,118686,118688,118690],{"class":86,"line":2940},[84,118679,311],{"class":90},[84,118681,314],{"class":158},[84,118683,118480],{"class":158},[84,118685,30059],{"class":129},[84,118687,118539],{"class":158},[84,118689,1394],{"class":154},[84,118691,52456],{"class":129},[84,118693,118694],{"class":86,"line":2945},[84,118695,3578],{"emptyLinePlaceholder":1252},[84,118697,118698],{"class":86,"line":2959},[84,118699,118700],{"class":1378},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[84,118702,118703,118705,118707,118709,118711,118713],{"class":86,"line":2964},[84,118704,118501],{"class":90},[84,118706,413],{"class":158},[84,118708,30059],{"class":129},[84,118710,118539],{"class":158},[84,118712,1394],{"class":154},[84,118714,52456],{"class":129},[84,118716,118717],{"class":86,"line":3755},[84,118718,3578],{"emptyLinePlaceholder":1252},[84,118720,118721],{"class":86,"line":3769},[84,118722,118723],{"class":1378},"#删除软件包命令\n",[84,118725,118726,118728,118730,118732,118734,118736,118738],{"class":86,"line":3777},[84,118727,311],{"class":90},[84,118729,314],{"class":158},[84,118731,27242],{"class":158},[84,118733,30059],{"class":129},[84,118735,118539],{"class":158},[84,118737,1394],{"class":154},[84,118739,52456],{"class":129},[84,118741,118742],{"class":86,"line":3782},[84,118743,3578],{"emptyLinePlaceholder":1252},[84,118745,118746],{"class":86,"line":3788},[84,118747,118748],{"class":1378},"# 清理旧版本和缓存（释放磁盘空间）\n",[84,118750,118751,118753,118755,118758],{"class":86,"line":3794},[84,118752,311],{"class":90},[84,118754,314],{"class":158},[84,118756,118757],{"class":158}," autoremove",[84,118759,118760],{"class":1378},"  # 删除不再需要的依赖和库文件\n",[84,118762,118763,118765,118767,118770],{"class":86,"line":3799},[84,118764,311],{"class":90},[84,118766,314],{"class":158},[84,118768,118769],{"class":158}," clean",[84,118771,118772],{"class":1378},"       # 清理下载的缓存包\n",[84,118774,118775],{"class":86,"line":9120},[84,118776,3578],{"emptyLinePlaceholder":1252},[84,118778,118779],{"class":86,"line":9144},[84,118780,118781],{"class":1378},"#移除软件包及配置文件\n",[84,118783,118784,118786,118788,118791,118793,118795,118797],{"class":86,"line":9149},[84,118785,311],{"class":90},[84,118787,314],{"class":158},[84,118789,118790],{"class":158}," purge",[84,118792,30059],{"class":129},[84,118794,118539],{"class":158},[84,118796,1394],{"class":154},[84,118798,52456],{"class":129},[84,118800,118801],{"class":86,"line":9155},[84,118802,3578],{"emptyLinePlaceholder":1252},[84,118804,118805],{"class":86,"line":9182},[84,118806,118807],{"class":1378},"#查找软件包命令\n",[84,118809,118810,118812,118814,118817,118819,118822,118824],{"class":86,"line":9187},[84,118811,311],{"class":90},[84,118813,314],{"class":158},[84,118815,118816],{"class":158}," search",[84,118818,30059],{"class":129},[84,118820,118821],{"class":158},"keywor",[84,118823,1624],{"class":154},[84,118825,52456],{"class":129},[84,118827,118828],{"class":86,"line":9193},[84,118829,3578],{"emptyLinePlaceholder":1252},[84,118831,118832],{"class":86,"line":9205},[84,118833,118834],{"class":1378},"#列出所有已安装的包\n",[84,118836,118837,118839,118841],{"class":86,"line":9217},[84,118838,118501],{"class":90},[84,118840,118504],{"class":158},[84,118842,118843],{"class":94}," --installed\n",[84,118845,118846],{"class":86,"line":9229},[84,118847,3578],{"emptyLinePlaceholder":1252},[84,118849,118850],{"class":86,"line":10888},[84,118851,118852],{"class":1378},"#列出所有已安装的包的版本信息\n",[84,118854,118855,118857,118859],{"class":86,"line":10913},[84,118856,118501],{"class":90},[84,118858,118504],{"class":158},[84,118860,118861],{"class":94}," --all-versions\n",[1222,118863,118864],{},"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":66,"searchDepth":98,"depth":98,"links":118866},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118413,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118873,"title":118874,"body":118875,"description":1249,"extension":1250,"meta":119616,"navigation":1252,"path":119617,"seo":119618,"stem":119619,"__hash__":119620},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118876,"toc":119603},[118877,118880,118884,118887,118893,118897,118901,118907,118912,118917,118922,118927,118932,118935,118938,118941,118944,118948,118951,118956,118959,118964,118967,118972,118979,118982,118985,118988,118991,118994,119005,119009,119013,119018,119023,119027,119032,119036,119041,119045,119049,119054,119057,119102,119107,119111,119115,119120,119126,119131,119141,119146,119156,119161,119166,119193,119197,119200,119205,119208,119233,119237,119242,119245,119250,119255,119275,119280,119283,119298,119302,119355,119358,119363,119367,119370,119385,119388,119391,119396,119400,119404,119407,119411,119415,119418,119423,119428,119432,119439,119447,119450,119457,119462,119467,119470,119475,119482,119487,119494,119498,119500,119505,119509,119512,119515,119520,119523,119528,119531,119536,119541,119546,119550,119555,119559,119600],[10,118878,118874],{"id":118879},"_2-linux装机教程",[14,118881,118883],{"id":118882},"_21-实体机","2.1 实体机",[19,118885,118886],{},"使用清华源：（Ubuntu24.04）",[19,118888,118889],{},[208,118890,118891],{"href":118891,"rel":118892},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[212],[14,118894,118896],{"id":118895},"_22-普通虚拟机","2.2 普通虚拟机",[198,118898,118900],{"id":118899},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118902,118903],{},[208,118904,118905],{"href":118905,"rel":118906},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[212],[19,118908,118909],{},[2643,118910],{"alt":66,"src":118911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118913,118914],{},[2643,118915],{"alt":66,"src":118916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118918,118919],{},[2643,118920],{"alt":66,"src":118921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118923,118924],{},[2643,118925],{"alt":66,"src":118926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118928,118929],{},[2643,118930],{"alt":66,"src":118931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118933,118934],{},"内存4G（4096MB）；",[19,118936,118937],{},"CPU给4个核；",[19,118939,118940],{},"硬盘动态分配60G；",[19,118942,118943],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[198,118945,118947],{"id":118946},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118949,118950],{},"按照1.1的步骤下载Ubuntu",[19,118952,118953],{},[2643,118954],{"alt":66,"src":118955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118957,118958],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118960,118961],{},[2643,118962],{"alt":66,"src":118963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118965,118966],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118968,118969],{},[2643,118970],{"alt":66,"src":118971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118973,118974,118975,118978],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1464,118976,118977],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118980,118981],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118983,118984],{},"将改动写入磁盘吗 继续",[19,118986,118987],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118989,118990],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118992,118993],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118995,118996,118997,119000,119001,119004],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1464,118998,118999],{},"除了"," 选不发送系统信息与不升级之外， ",[1464,119002,119003],{},"其它"," 都跳过或前进）",[198,119006,119008],{"id":119007},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23168,119010,119012],{"id":119011},"_2231-全屏","2.2.3.1 全屏",[19,119014,119015],{},[2643,119016],{"alt":66,"src":119017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119019,119020],{},[2643,119021],{"alt":66,"src":119022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23168,119024,119026],{"id":119025},"_2232-文件交换","2.2.3.2 文件交换",[19,119028,119029],{},[2643,119030],{"alt":66,"src":119031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23168,119033,119035],{"id":119034},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119037,119038],{},[2643,119039],{"alt":66,"src":119040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119042,119044],{"id":119043},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[198,119046,119048],{"id":119047},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119050,119051],{},[29,119052,119053],{},"什么情况下推荐？",[19,119055,119056],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119058,119059],{"start":98},[29,119060,119061,119062],{},"优缺点：",[26,119063,119064,119094],{},[29,119065,119066,119067],{},"优点：",[26,119068,119069,119072,119079,119082,119085,119088,119091],{},[29,119070,119071],{},"WSL2是最好的Linux发行版;(bushi)",[29,119073,119074,119075,119078],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1464,119076,119077],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119080,119081],{},"非常方便调用USB设备，可以USB直通;",[29,119083,119084],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119086,119087],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119089,119090],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119092,119093],{},"非常方便使用Windows的VScode远程开发;",[29,119095,119096,119097],{},"缺点：",[26,119098,119099],{},[29,119100,119101],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119103,119104],{},[2643,119105],{"alt":66,"src":119106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[198,119108,119110],{"id":119109},"_232-安装教程","2.3.2 安装教程",[23168,119112,119114],{"id":119113},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119116,119117],{},[29,119118,119119],{},"方法一(图形界面)",[19,119121,119122,119123,720],{},"用Win+R输入",[39,119124,119125],{},"appwiz.cpl",[19,119127,119128],{},[2643,119129],{"alt":66,"src":119130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119132,119133,119134,119137,119138,27631],{},"点击OK进入 ",[1464,119135,119136],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1464,119139,119140],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119142,119143],{},[2643,119144],{"alt":66,"src":119145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119147,119148,119149,102156,119152,119155],{},"选择 ",[1464,119150,119151],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1464,119153,119154],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119157,119158],{},[2643,119159],{"alt":66,"src":119160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119162,119163],{"start":98},[29,119164,119165],{},"方法二(命令行)",[60,119167,119171],{"className":119168,"code":119169,"language":119170,"meta":66,"style":66},"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",[39,119172,119173,119178,119183,119188],{"__ignoreMap":66},[84,119174,119175],{"class":86,"line":87},[84,119176,119177],{},"# 开启 Linux 子系统\n",[84,119179,119180],{"class":86,"line":98},[84,119181,119182],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[84,119184,119185],{"class":86,"line":106},[84,119186,119187],{},"# 开启虚拟机平台\n",[84,119189,119190],{"class":86,"line":112},[84,119191,119192],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23168,119194,119196],{"id":119195},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119198,119199],{},"用管理员权限打开powershell",[19,119201,119202],{},[2643,119203],{"alt":66,"src":119204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119206,119207],{},"升级WSL并设置默认版本为WSL2",[60,119209,119211],{"className":119168,"code":119210,"language":119170,"meta":66,"style":66},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[39,119212,119213,119218,119223,119228],{"__ignoreMap":66},[84,119214,119215],{"class":86,"line":87},[84,119216,119217],{},"# 更新 wsl\n",[84,119219,119220],{"class":86,"line":98},[84,119221,119222],{},"wsl --update\n",[84,119224,119225],{"class":86,"line":106},[84,119226,119227],{},"# 将 wsl 版本设置为 wsl2\n",[84,119229,119230],{"class":86,"line":112},[84,119231,119232],{},"wsl --set-default-version 2\n",[23168,119234,119236],{"id":119235},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119238,119239],{},[29,119240,119241],{},"方式一(商店下载)",[19,119243,119244],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119246,119247],{},[2643,119248],{"alt":66,"src":119249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119251,119252],{"start":98},[29,119253,119254],{},"方式二(命令行安装)",[60,119256,119258],{"className":119168,"code":119257,"language":119170,"meta":66,"style":66},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[39,119259,119260,119265,119270],{"__ignoreMap":66},[84,119261,119262],{"class":86,"line":87},[84,119263,119264],{},"# 列出可安装的 Linux 版本\n",[84,119266,119267],{"class":86,"line":98},[84,119268,119269],{},"#（需要科学手段）\n",[84,119271,119272],{"class":86,"line":106},[84,119273,119274],{},"wsl --list --online\n",[19,119276,119277],{},[2643,119278],{"alt":66,"src":119279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119281,119282],{},"选择对应发行版并安装",[60,119284,119286],{"className":119168,"code":119285,"language":119170,"meta":66,"style":66},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[39,119287,119288,119293],{"__ignoreMap":66},[84,119289,119290],{"class":86,"line":87},[84,119291,119292],{},"# Ubuntu安装完毕后需要重启系统\n",[84,119294,119295],{"class":86,"line":98},[84,119296,119297],{},"wsl --install -d Ubuntu-24.04\n",[23168,119299,119301],{"id":119300},"_2324-查看系统状态","2.3.2.4 查看系统状态",[60,119303,119305],{"className":119168,"code":119304,"language":119170,"meta":66,"style":66},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[39,119306,119307,119312,119317,119322,119327,119331,119335,119340,119345,119350],{"__ignoreMap":66},[84,119308,119309],{"class":86,"line":87},[84,119310,119311],{},"# 查看 wsl\n",[84,119313,119314],{"class":86,"line":98},[84,119315,119316],{},"wsl -l\n",[84,119318,119319],{"class":86,"line":106},[84,119320,119321],{},"# 查看 wsl 运行版本或模式\n",[84,119323,119324],{"class":86,"line":112},[84,119325,119326],{},"wsl -l -v\n",[84,119328,119329],{"class":86,"line":425},[84,119330,3578],{"emptyLinePlaceholder":1252},[84,119332,119333],{"class":86,"line":2395},[84,119334,3578],{"emptyLinePlaceholder":1252},[84,119336,119337],{"class":86,"line":2401},[84,119338,119339],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[84,119341,119342],{"class":86,"line":2492},[84,119343,119344],{},"wsl --set-version \u003Cdistro> 2\n",[84,119346,119347],{"class":86,"line":2498},[84,119348,119349],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[84,119351,119352],{"class":86,"line":2510},[84,119353,119354],{},"wsl --unregister \u003Cdistro>\n",[19,119356,119357],{},"输出Version为2即正常",[19,119359,119360],{},[2643,119361],{"alt":66,"src":119362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23168,119364,119366],{"id":119365},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119368,119369],{},"直接在Powershell里输入wsl命令进入子系统",[60,119371,119373],{"className":119168,"code":119372,"language":119170,"meta":66,"style":66},"# 进入子系统\nwsl\n",[39,119374,119375,119380],{"__ignoreMap":66},[84,119376,119377],{"class":86,"line":87},[84,119378,119379],{},"# 进入子系统\n",[84,119381,119382],{"class":86,"line":98},[84,119383,119384],{},"wsl\n",[19,119386,119387],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119389,119390],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119392,119393],{},[2643,119394],{"alt":66,"src":119395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[198,119397,119399],{"id":119398},"_233-配置各种环境","2.3.3 配置各种环境",[23168,119401,119403],{"id":119402},"_2331-换源","2.3.3.1 换源",[19,119405,119406],{},"(同实体机LINUX，往下找教程)",[23168,119408,119410],{"id":119409},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24080,119412,119414],{"id":119413},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119416,119417],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119419,119420],{},[2643,119421],{"alt":66,"src":119422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119424,119425],{},[2643,119426],{"alt":66,"src":119427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24080,119429,119431],{"id":119430},"_23322-cuda","2.3.3.2.2 CUDA",[19,119433,119434,119435],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[208,119436,119437],{"href":119437,"rel":119438},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[212],[19,119440,119441,119444],{},[2643,119442],{"alt":66,"src":119443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2643,119445],{"alt":66,"src":119446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119448,119449],{},"在下方的网站，选择合适的版本。",[19,119451,119452,119453],{},"WSL2 专属 CUDA 指南：",[208,119454,119455],{"href":119455,"rel":119456},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[212],[19,119458,119459],{},[1464,119460,119461],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119463,119464],{},[2643,119465],{"alt":66,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119468,119469],{},"挨行敲一遍",[19,119471,119472],{},[2643,119473],{"alt":66,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119476,119477,119478,119481],{},"敲完后，输入",[39,119479,119480],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119483,119484],{},[2643,119485],{"alt":66,"src":119486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119488,119489,119490,119493],{},"（请详看下方教程的",[1464,119491,119492],{},"安装CUDA的配置环境来看","如何配置环境）",[24080,119495,119497],{"id":119496},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119499,119406],{},[19,119501,119502],{},[2643,119503],{"alt":66,"src":119504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23168,119506,119508],{"id":119507},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119510,119511],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119513,119514],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119516,119517],{},[2643,119518],{"alt":66,"src":119519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119521,119522],{},"连接WSL2",[19,119524,119525],{},[2643,119526],{"alt":66,"src":119527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119529,119530],{},"远程开发成功。",[19,119532,119533],{},[2643,119534],{"alt":66,"src":119535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119537,119538],{},[2643,119539],{"alt":66,"src":119540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119542,119543],{},[2643,119544],{"alt":66,"src":119545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23168,119547,119549],{"id":119548},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119551,119552],{},[2643,119553],{"alt":66,"src":119554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23168,119556,119558],{"id":119557},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[60,119560,119562],{"className":118430,"code":119561,"language":118432,"meta":66,"style":66},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[39,119563,119564,119572,119580,119591,119595],{"__ignoreMap":66},[84,119565,119566,119568,119570],{"class":86,"line":87},[84,119567,311],{"class":90},[84,119569,314],{"class":158},[84,119571,317],{"class":158},[84,119573,119574,119576,119578],{"class":86,"line":98},[84,119575,311],{"class":90},[84,119577,314],{"class":158},[84,119579,118466],{"class":158},[84,119581,119582,119584,119586,119588],{"class":86,"line":106},[84,119583,311],{"class":90},[84,119585,314],{"class":158},[84,119587,275],{"class":158},[84,119589,119590],{"class":158}," mesa-utils\n",[84,119592,119593],{"class":86,"line":112},[84,119594,3578],{"emptyLinePlaceholder":1252},[84,119596,119597],{"class":86,"line":425},[84,119598,119599],{"class":1378},"#然后重启wsl2即可\n",[1222,119601,119602],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":66,"searchDepth":98,"depth":98,"links":119604},[119605,119606,119611],{"id":118882,"depth":98,"text":118883},{"id":118895,"depth":98,"text":118896,"children":119607},[119608,119609,119610],{"id":118899,"depth":106,"text":118900},{"id":118946,"depth":106,"text":118947},{"id":119007,"depth":106,"text":119008},{"id":119043,"depth":98,"text":119044,"children":119612},[119613,119614,119615],{"id":119047,"depth":106,"text":119048},{"id":119109,"depth":106,"text":119110},{"id":119398,"depth":106,"text":119399},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118874,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119622,"title":119623,"body":119624,"description":1249,"extension":1250,"meta":122554,"navigation":1252,"path":122555,"seo":122556,"stem":122557,"__hash__":122558},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119625,"toc":122526},[119626,119629,119633,119639,119643,119649,119653,119841,119844,119849,119853,119857,119860,119863,119869,119874,119877,119880,119885,119918,119923,119927,120004,120007,120012,120016,120019,120058,120061,120070,120087,120092,120099,120216,120221,120224,120251,120256,120260,120269,120319,120326,120330,120333,120347,120354,120388,120393,120397,120420,120423,120428,120432,120435,120438,120441,120483,120487,120490,120493,120534,120538,120542,120545,120550,120555,120558,120581,120584,120592,120597,120600,120605,120610,120613,120618,120622,120627,120650,120655,120717,120725,120730,120735,120738,120743,120746,120751,120756,120773,120778,120784,120789,120803,120807,120810,120813,120816,120857,120860,120865,120965,120968,120973,120977,120981,121018,121022,121026,121030,121076,121080,121125,121129,121136,121144,121198,121201,121278,121281,121304,121308,121311,121316,121321,121329,121332,121337,121342,121347,121350,121355,121364,121367,121372,121375,121446,121451,121454,121459,121462,121467,121470,121475,121478,121483,121488,121491,121566,121569,121582,121587,121590,121604,121607,121636,121641,121670,121673,121678,121682,121687,121696,121699,121704,121707,121712,121715,121718,121723,121726,121731,121736,121739,121744,121747,121872,121877,121907,121910,121915,121920,121937,121940,121983,121986,122013,122018,122031,122174,122178,122183,122197,122200,122251,122254,122284,122287,122303,122308,122322,122325,122392,122397,122406,122411,122414,122426,122431,122438,122462,122465,122470,122473,122492,122497,122504,122516,122523],[10,119627,119623],{"id":119628},"_3-安装必备配置",[14,119630,119632],{"id":119631},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[60,119634,119637],{"className":119635,"code":119636,"language":65},[63],"  打开下方网站（注意，该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",[39,119638,119636],{"__ignoreMap":66},[198,119640,119642],{"id":119641},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[60,119644,119647],{"className":119645,"code":119646,"language":65},[63],"  输入以下命令\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",[39,119648,119646],{"__ignoreMap":66},[198,119650,119652],{"id":119651},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[60,119654,119658],{"className":119655,"code":119656,"language":119657,"meta":66,"style":66},"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",[39,119659,119660,119668,119679,119691,119705,119709,119719,119724,119728,119732,119737,119741,119753,119757,119762,119766,119777,119781,119797,119801,119812,119816,119821,119825,119833],{"__ignoreMap":66},[84,119661,119662,119664,119666],{"class":86,"line":87},[84,119663,311],{"class":90},[84,119665,314],{"class":158},[84,119667,317],{"class":158},[84,119669,119670,119672,119674,119676],{"class":86,"line":98},[84,119671,311],{"class":90},[84,119673,314],{"class":158},[84,119675,275],{"class":158},[84,119677,119678],{"class":158}," vim\n",[84,119680,119681,119683,119686,119688],{"class":86,"line":106},[84,119682,311],{"class":90},[84,119684,119685],{"class":158}," rm",[84,119687,26488],{"class":94},[84,119689,119690],{"class":158}," \u002Fetc\u002Fapt\u002Fsources.list\n",[84,119692,119693,119695,119697,119699,119702],{"class":86,"line":112},[84,119694,311],{"class":90},[84,119696,119685],{"class":158},[84,119698,26488],{"class":94},[84,119700,119701],{"class":158}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[84,119703,119704],{"class":94},"**\n",[84,119706,119707],{"class":86,"line":425},[84,119708,3578],{"emptyLinePlaceholder":1252},[84,119710,119711,119713,119716],{"class":86,"line":2395},[84,119712,311],{"class":90},[84,119714,119715],{"class":158}," vim",[84,119717,119718],{"class":158}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[84,119720,119721],{"class":86,"line":2401},[84,119722,119723],{"class":158},"```\n",[84,119725,119726],{"class":86,"line":2492},[84,119727,3578],{"emptyLinePlaceholder":1252},[84,119729,119730],{"class":86,"line":2498},[84,119731,3578],{"emptyLinePlaceholder":1252},[84,119733,119734],{"class":86,"line":2510},[84,119735,119736],{"class":90},"选择好Ubuntu版本后，复制下方的内容。\n",[84,119738,119739],{"class":86,"line":2793},[84,119740,3578],{"emptyLinePlaceholder":1252},[84,119742,119743,119745,119748,119751],{"class":86,"line":2798},[84,119744,1538],{"class":129},[84,119746,119747],{"class":158},"[](",[84,119749,119750],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[84,119752,162],{"class":158},[84,119754,119755],{"class":86,"line":2804},[84,119756,3578],{"emptyLinePlaceholder":1252},[84,119758,119759],{"class":86,"line":2809},[84,119760,119761],{"class":90},"粘贴进去\n",[84,119763,119764],{"class":86,"line":2823},[84,119765,3578],{"emptyLinePlaceholder":1252},[84,119767,119768,119770,119772,119775],{"class":86,"line":2828},[84,119769,1538],{"class":129},[84,119771,119747],{"class":158},[84,119773,119774],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[84,119776,162],{"class":158},[84,119778,119779],{"class":86,"line":2834},[84,119780,3578],{"emptyLinePlaceholder":1252},[84,119782,119783,119786,119789,119792,119794],{"class":86,"line":2855},[84,119784,119785],{"class":90},"按一下ESC，然后英文冒号，输入",[84,119787,119788],{"class":158}," `",[84,119790,119791],{"class":90},":wq!",[84,119793,2280],{"class":158},[84,119795,119796],{"class":90},"然后回车\n",[84,119798,119799],{"class":86,"line":2860},[84,119800,3578],{"emptyLinePlaceholder":1252},[84,119802,119803,119805,119807,119810],{"class":86,"line":2874},[84,119804,1538],{"class":129},[84,119806,119747],{"class":158},[84,119808,119809],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[84,119811,162],{"class":158},[84,119813,119814],{"class":86,"line":2879},[84,119815,3578],{"emptyLinePlaceholder":1252},[84,119817,119818],{"class":86,"line":2908},[84,119819,119820],{"class":90},"输入以下命令\n",[84,119822,119823],{"class":86,"line":2913},[84,119824,3578],{"emptyLinePlaceholder":1252},[84,119826,119827,119830],{"class":86,"line":2930},[84,119828,119829],{"class":158},"```",[84,119831,119832],{"class":90},"Bash\n",[84,119834,119835,119837,119839],{"class":86,"line":2935},[84,119836,311],{"class":90},[84,119838,314],{"class":158},[84,119840,317],{"class":158},[19,119842,119843],{},"这里被替换成对应学校则成功",[19,119845,119846],{},[2643,119847],{"alt":66,"src":119848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119850,119852],{"id":119851},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[198,119854,119856],{"id":119855},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119858,119859],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119861,119862],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119864,119865],{},[208,119866,119867],{"href":119867,"rel":119868},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[212],[19,119870,119871],{},[2643,119872],{"alt":66,"src":119873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119875,119876],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119878,119879],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119881,119882],{},[2643,119883],{"alt":66,"src":119884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[60,119886,119888],{"className":118430,"code":119887,"language":118432,"meta":66,"style":66},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[39,119889,119890,119895,119902,119907],{"__ignoreMap":66},[84,119891,119892],{"class":86,"line":87},[84,119893,119894],{"class":1378},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[84,119896,119897,119899],{"class":86,"line":98},[84,119898,102414],{"class":94},[84,119900,119901],{"class":158}," ~\u002FDownloads\n",[84,119903,119904],{"class":86,"line":106},[84,119905,119906],{"class":1378},"#下方chrome安装包名不一定是这个，根据名字来看\n",[84,119908,119909,119911,119913,119915],{"class":86,"line":112},[84,119910,311],{"class":90},[84,119912,314],{"class":158},[84,119914,275],{"class":158},[84,119916,119917],{"class":158}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119919,119920],{},[2643,119921],{"alt":66,"src":119922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[198,119924,119926],{"id":119925},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[60,119928,119930],{"className":118430,"code":119929,"language":118432,"meta":66,"style":66},"# 老版\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",[39,119931,119932,119937,119945,119956,119961,119965,119970,119980,119988,119999],{"__ignoreMap":66},[84,119933,119934],{"class":86,"line":87},[84,119935,119936],{"class":1378},"# 老版\n",[84,119938,119939,119941,119943],{"class":86,"line":98},[84,119940,311],{"class":90},[84,119942,314],{"class":158},[84,119944,317],{"class":158},[84,119946,119947,119949,119951,119953],{"class":86,"line":106},[84,119948,311],{"class":90},[84,119950,314],{"class":158},[84,119952,275],{"class":158},[84,119954,119955],{"class":158}," neofetch\n",[84,119957,119958],{"class":86,"line":112},[84,119959,119960],{"class":90},"neofetch\n",[84,119962,119963],{"class":86,"line":425},[84,119964,3578],{"emptyLinePlaceholder":1252},[84,119966,119967],{"class":86,"line":2395},[84,119968,119969],{"class":1378},"# 新版\n",[84,119971,119972,119974,119977],{"class":86,"line":2401},[84,119973,311],{"class":90},[84,119975,119976],{"class":158}," add-apt-repository",[84,119978,119979],{"class":158}," ppa:zhangsongcui3371\u002Ffastfetch\n",[84,119981,119982,119984,119986],{"class":86,"line":2492},[84,119983,311],{"class":90},[84,119985,314],{"class":158},[84,119987,317],{"class":158},[84,119989,119990,119992,119994,119996],{"class":86,"line":2498},[84,119991,311],{"class":90},[84,119993,314],{"class":158},[84,119995,275],{"class":158},[84,119997,119998],{"class":158}," fastfetch\n",[84,120000,120001],{"class":86,"line":2510},[84,120002,120003],{"class":90},"fastfetch\n",[19,120005,120006],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120008,120009],{},[2643,120010],{"alt":66,"src":120011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[198,120013,120015],{"id":120014},"_323-移除snap应用","3.2.3 移除snap应用",[19,120017,120018],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[60,120020,120022],{"className":118430,"code":120021,"language":118432,"meta":66,"style":66},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[39,120023,120024,120036,120047],{"__ignoreMap":66},[84,120025,120026,120028,120030,120033],{"class":86,"line":87},[84,120027,311],{"class":90},[84,120029,27671],{"class":158},[84,120031,120032],{"class":158}," disable",[84,120034,120035],{"class":158}," snapd.service\n",[84,120037,120038,120040,120042,120044],{"class":86,"line":98},[84,120039,311],{"class":90},[84,120041,27671],{"class":158},[84,120043,120032],{"class":158},[84,120045,120046],{"class":158}," snapd.socket\n",[84,120048,120049,120051,120053,120055],{"class":86,"line":106},[84,120050,311],{"class":90},[84,120052,27671],{"class":158},[84,120054,120032],{"class":158},[84,120056,120057],{"class":158}," snapd.seeded.service\n",[19,120059,120060],{},"然后查看snap应用列表",[19,120062,120063,120064,120069],{},"根据你安装的选择不同（最小安装或普通安装），有",[208,120065,120068],{"href":120066,"rel":120067},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[212],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[60,120071,120073],{"className":118430,"code":120072,"language":118432,"meta":66,"style":66},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[39,120074,120075,120080],{"__ignoreMap":66},[84,120076,120077],{"class":86,"line":87},[84,120078,120079],{"class":1378},"# 查询当前系统上snap安装了哪些app\n",[84,120081,120082,120085],{"class":86,"line":98},[84,120083,120084],{"class":90},"snap",[84,120086,422],{"class":158},[19,120088,120089],{},[2643,120090],{"alt":66,"src":120091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120093,120094,120095,120098],{},"卸载掉图中所有应用，按照 ",[1464,120096,120097],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[60,120100,120102],{"className":118430,"code":120101,"language":118432,"meta":66,"style":66},"#移除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",[39,120103,120104,120109,120121,120126,120137,120142,120153,120158,120169,120174,120178,120183,120194,120205],{"__ignoreMap":66},[84,120105,120106],{"class":86,"line":87},[84,120107,120108],{"class":1378},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[84,120110,120111,120113,120116,120118],{"class":86,"line":98},[84,120112,311],{"class":90},[84,120114,120115],{"class":158}," snap",[84,120117,27242],{"class":158},[84,120119,120120],{"class":158}," snap-store\n",[84,120122,120123],{"class":86,"line":106},[84,120124,120125],{"class":1378},"#移除firefox浏览器\n",[84,120127,120128,120130,120132,120134],{"class":86,"line":112},[84,120129,311],{"class":90},[84,120131,120115],{"class":158},[84,120133,27242],{"class":158},[84,120135,120136],{"class":158}," firefox\n",[84,120138,120139],{"class":86,"line":425},[84,120140,120141],{"class":1378},"#移除gnome-42-2204\n",[84,120143,120144,120146,120148,120150],{"class":86,"line":2395},[84,120145,311],{"class":90},[84,120147,120115],{"class":158},[84,120149,27242],{"class":158},[84,120151,120152],{"class":158}," gnome-42-2204\n",[84,120154,120155],{"class":86,"line":2401},[84,120156,120157],{"class":1378},"#移除gtk-common-themes\n",[84,120159,120160,120162,120164,120166],{"class":86,"line":2492},[84,120161,311],{"class":90},[84,120163,120115],{"class":158},[84,120165,27242],{"class":158},[84,120167,120168],{"class":158}," gtk-common-themes\n",[84,120170,120171],{"class":86,"line":2498},[84,120172,120173],{"class":1378},"#移除其它...\n",[84,120175,120176],{"class":86,"line":2510},[84,120177,3852],{"class":154},[84,120179,120180],{"class":86,"line":2793},[84,120181,120182],{"class":1378},"#移除core22,bare以及snapd\n",[84,120184,120185,120187,120189,120191],{"class":86,"line":2798},[84,120186,311],{"class":90},[84,120188,120115],{"class":158},[84,120190,27242],{"class":158},[84,120192,120193],{"class":158}," core22\n",[84,120195,120196,120198,120200,120202],{"class":86,"line":2804},[84,120197,311],{"class":90},[84,120199,120115],{"class":158},[84,120201,27242],{"class":158},[84,120203,120204],{"class":158}," bare\n",[84,120206,120207,120209,120211,120213],{"class":86,"line":2809},[84,120208,311],{"class":90},[84,120210,120115],{"class":158},[84,120212,27242],{"class":158},[84,120214,120215],{"class":158}," snapd\n",[19,120217,120218],{},[2643,120219],{"alt":66,"src":120220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120222,120223],{},"输入以下命令查看是否还有snap包",[60,120225,120227],{"className":118430,"code":120226,"language":118432,"meta":66,"style":66},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[39,120228,120229,120235,120239,120243,120247],{"__ignoreMap":66},[84,120230,120231,120233],{"class":86,"line":87},[84,120232,120084],{"class":90},[84,120234,422],{"class":158},[84,120236,120237],{"class":86,"line":98},[84,120238,119936],{"class":1378},[84,120240,120241],{"class":86,"line":106},[84,120242,119960],{"class":90},[84,120244,120245],{"class":86,"line":112},[84,120246,119969],{"class":1378},[84,120248,120249],{"class":86,"line":425},[84,120250,120003],{"class":90},[19,120252,120253],{},[2643,120254],{"alt":66,"src":120255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[198,120257,120259],{"id":120258},"_324-移除snap","3.2.4 移除snap",[19,120261,120262,120263,120268],{},"在删除掉",[208,120264,120267],{"href":120265,"rel":120266},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[212],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[60,120270,120272],{"className":118430,"code":120271,"language":118432,"meta":66,"style":66}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[39,120273,120274,120279,120292,120297,120308],{"__ignoreMap":66},[84,120275,120276],{"class":86,"line":87},[84,120277,120278],{"class":1378}," #使用apt移除掉snap\n",[84,120280,120281,120283,120285,120287,120290],{"class":86,"line":98},[84,120282,311],{"class":90},[84,120284,314],{"class":158},[84,120286,118757],{"class":158},[84,120288,120289],{"class":94}," --purge",[84,120291,120215],{"class":158},[84,120293,120294],{"class":86,"line":106},[84,120295,120296],{"class":1378},"#移除snapd的一些目录\n",[84,120298,120299,120301,120303,120305],{"class":86,"line":112},[84,120300,311],{"class":90},[84,120302,119685],{"class":158},[84,120304,26488],{"class":94},[84,120306,120307],{"class":158}," \u002Fvar\u002Fcache\u002Fsnapd\n",[84,120309,120310,120312,120314,120316],{"class":86,"line":425},[84,120311,311],{"class":90},[84,120313,119685],{"class":158},[84,120315,26488],{"class":94},[84,120317,120318],{"class":158}," ~\u002Fsnap\n",[19,120320,120321,120322,120325],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[39,120323,120324],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[198,120327,120329],{"id":120328},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120331,120332],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[60,120334,120336],{"className":118430,"code":120335,"language":118432,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[39,120337,120338],{"__ignoreMap":66},[84,120339,120340,120342,120344],{"class":86,"line":87},[84,120341,311],{"class":90},[84,120343,119715],{"class":158},[84,120345,120346],{"class":158}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120348,120349,120350,120353],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[39,120351,120352],{},":wq"," 回车",[60,120355,120357],{"className":118430,"code":120356,"language":118432,"meta":66,"style":66},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[39,120358,120359,120366,120380],{"__ignoreMap":66},[84,120360,120361,120364],{"class":86,"line":87},[84,120362,120363],{"class":90},"Package:",[84,120365,120215],{"class":158},[84,120367,120368,120371,120374,120377],{"class":86,"line":98},[84,120369,120370],{"class":90},"Pin:",[84,120372,120373],{"class":158}," release",[84,120375,120376],{"class":158}," a=",[84,120378,120379],{"class":94},"*\n",[84,120381,120382,120385],{"class":86,"line":106},[84,120383,120384],{"class":90},"Pin-Priority:",[84,120386,120387],{"class":94}," -10\n",[19,120389,120390],{},[2643,120391],{"alt":66,"src":120392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[198,120394,120396],{"id":120395},"_326-测试是否成功","3.2.6 测试是否成功",[60,120398,120400],{"className":118430,"code":120399,"language":118432,"meta":66,"style":66},"sudo apt update\nsudo apt install firefox\n",[39,120401,120402,120410],{"__ignoreMap":66},[84,120403,120404,120406,120408],{"class":86,"line":87},[84,120405,311],{"class":90},[84,120407,314],{"class":158},[84,120409,317],{"class":158},[84,120411,120412,120414,120416,120418],{"class":86,"line":98},[84,120413,311],{"class":90},[84,120415,314],{"class":158},[84,120417,275],{"class":158},[84,120419,120136],{"class":158},[19,120421,120422],{},"这里提示snapd无法被安装，就证明成功了",[19,120424,120425],{},[2643,120426],{"alt":66,"src":120427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[198,120429,120431],{"id":120430},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120433,120434],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120436,120437],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120439,120440],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[60,120442,120444],{"className":118430,"code":120443,"language":118432,"meta":66,"style":66},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[39,120445,120446,120451,120460,120465,120473],{"__ignoreMap":66},[84,120447,120448],{"class":86,"line":87},[84,120449,120450],{"class":1378},"# 添加Mozilla提供的源\n",[84,120452,120453,120455,120457],{"class":86,"line":98},[84,120454,311],{"class":90},[84,120456,119976],{"class":158},[84,120458,120459],{"class":158}," ppa:mozillateam\u002Fppa\n",[84,120461,120462],{"class":86,"line":106},[84,120463,120464],{"class":1378},"# 安装Firefox\n",[84,120466,120467,120469,120471],{"class":86,"line":112},[84,120468,311],{"class":90},[84,120470,314],{"class":158},[84,120472,317],{"class":158},[84,120474,120475,120477,120479,120481],{"class":86,"line":425},[84,120476,311],{"class":90},[84,120478,314],{"class":158},[84,120480,275],{"class":158},[84,120482,120136],{"class":158},[198,120484,120486],{"id":120485},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120488,120489],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120491,120492],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[60,120494,120496],{"className":118430,"code":120495,"language":118432,"meta":66,"style":66},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[39,120497,120498,120503,120513,120521,120525],{"__ignoreMap":66},[84,120499,120500],{"class":86,"line":87},[84,120501,120502],{"class":1378},"#删掉禁止安装snap的配置文件\n",[84,120504,120505,120507,120509,120511],{"class":86,"line":98},[84,120506,311],{"class":90},[84,120508,119685],{"class":158},[84,120510,26488],{"class":94},[84,120512,120346],{"class":158},[84,120514,120515,120517,120519],{"class":86,"line":106},[84,120516,311],{"class":90},[84,120518,314],{"class":158},[84,120520,317],{"class":158},[84,120522,120523],{"class":86,"line":112},[84,120524,3578],{"emptyLinePlaceholder":1252},[84,120526,120527,120529,120531],{"class":86,"line":425},[84,120528,311],{"class":90},[84,120530,314],{"class":158},[84,120532,120533],{"class":158}," dist-update\n",[14,120535,120537],{"id":120536},"_33-中文输入法","3.3 中文输入法",[198,120539,120541],{"id":120540},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120543,120544],{},"官网下载搜狗输入法",[19,120546,120547],{},[2643,120548],{"alt":66,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120551,120552],{},[2643,120553],{"alt":66,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120556,120557],{},"打开终端输入如下",[60,120559,120561],{"className":118430,"code":120560,"language":118432,"meta":66,"style":66},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[39,120562,120563,120570],{"__ignoreMap":66},[84,120564,120565,120567],{"class":86,"line":87},[84,120566,102414],{"class":94},[84,120568,120569],{"class":158}," ~\u002FDownloads\u002F\n",[84,120571,120572,120574,120576,120578],{"class":86,"line":98},[84,120573,311],{"class":90},[84,120575,314],{"class":158},[84,120577,275],{"class":158},[84,120579,120580],{"class":158}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120582,120583],{},"打开Fcitx",[19,120585,120586,120589],{},[2643,120587],{"alt":66,"src":120588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2643,120590],{"alt":66,"src":120591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120593,120594],{},[2643,120595],{"alt":66,"src":120596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120598,120599],{},"添加搜狗输入法",[19,120601,120602],{},[2643,120603],{"alt":66,"src":120604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120606,120607],{},[2643,120608],{"alt":66,"src":120609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120611,120612],{},"将搜狗输入法设置为唯一输入法",[19,120614,120615],{},[2643,120616],{"alt":66,"src":120617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[198,120619,120621],{"id":120620},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,120623,120624],{},[29,120625,120626],{},"卸载旧输入法",[60,120628,120630],{"className":119655,"code":120629,"language":119657,"meta":66,"style":66},"sudo apt purge fcitx* ibus*\n",[39,120631,120632],{"__ignoreMap":66},[84,120633,120634,120636,120638,120640,120643,120645,120648],{"class":86,"line":87},[84,120635,311],{"class":90},[84,120637,314],{"class":158},[84,120639,118790],{"class":158},[84,120641,120642],{"class":158}," fcitx",[84,120644,1043],{"class":94},[84,120646,120647],{"class":158}," ibus",[84,120649,120379],{"class":94},[26,120651,120652],{"start":98},[29,120653,120654],{},"安装Fcitx5",[60,120656,120658],{"className":118430,"code":120657,"language":118432,"meta":66,"style":66},"# 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",[39,120659,120660,120665,120679,120683,120688,120697,120705],{"__ignoreMap":66},[84,120661,120662],{"class":86,"line":87},[84,120663,120664],{"class":1378},"# Ubuntu22.04及以上、Debian12及以上\n",[84,120666,120667,120669,120671,120673,120676],{"class":86,"line":98},[84,120668,311],{"class":90},[84,120670,314],{"class":158},[84,120672,275],{"class":158},[84,120674,120675],{"class":158}," fcitx5",[84,120677,120678],{"class":158}," fcitx5-chinese-addons\n",[84,120680,120681],{"class":86,"line":106},[84,120682,3578],{"emptyLinePlaceholder":1252},[84,120684,120685],{"class":86,"line":112},[84,120686,120687],{"class":1378},"# Ubuntu20.04\n",[84,120689,120690,120692,120694],{"class":86,"line":425},[84,120691,311],{"class":90},[84,120693,119976],{"class":158},[84,120695,120696],{"class":158}," ppa:zhsj\u002Ffcitx5\n",[84,120698,120699,120701,120703],{"class":86,"line":2395},[84,120700,311],{"class":90},[84,120702,314],{"class":158},[84,120704,317],{"class":158},[84,120706,120707,120709,120711,120713,120715],{"class":86,"line":2401},[84,120708,311],{"class":90},[84,120710,314],{"class":158},[84,120712,275],{"class":158},[84,120714,120675],{"class":158},[84,120716,120678],{"class":158},[26,120718,120719,120722],{"start":106},[29,120720,120721],{},"Reboot System",[29,120723,120724],{},"启动Fcitx5",[19,120726,120727],{},[2643,120728],{"alt":66,"src":120729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,120731,120732],{"start":425},[29,120733,120734],{},"修改一些设置",[19,120736,120737],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120739,120740],{},[2643,120741],{"alt":66,"src":120742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120744,120745],{},"添加快捷键以便于更好切换中英文",[19,120747,120748],{},[2643,120749],{"alt":66,"src":120750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,120752,120753],{"start":2395},[29,120754,120755],{},"重启",[60,120757,120759],{"className":119655,"code":120758,"language":119657,"meta":66,"style":66},"sudo shutdown -r now\n",[39,120760,120761],{"__ignoreMap":66},[84,120762,120763,120765,120768,120770],{"class":86,"line":87},[84,120764,311],{"class":90},[84,120766,120767],{"class":158}," shutdown",[84,120769,642],{"class":94},[84,120771,120772],{"class":158}," now\n",[26,120774,120775],{"start":2401},[29,120776,120777],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120779,120780],{},[208,120781,120782],{"href":120782,"rel":120783},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[212],[26,120785,120786],{"start":2492},[29,120787,120788],{},"再重启",[60,120790,120791],{"className":119655,"code":120758,"language":119657,"meta":66,"style":66},[39,120792,120793],{"__ignoreMap":66},[84,120794,120795,120797,120799,120801],{"class":86,"line":87},[84,120796,311],{"class":90},[84,120798,120767],{"class":158},[84,120800,642],{"class":94},[84,120802,120772],{"class":158},[14,120804,120806],{"id":120805},"_34-pip3源替换","3.4 pip3源替换",[19,120808,120809],{},"非Debian系发行版需要做。",[19,120811,120812],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120814,120815],{},"使用dnf的系统也可能不用做。",[60,120817,120819],{"className":118430,"code":120818,"language":118432,"meta":66,"style":66},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[39,120820,120821,120826,120832,120837,120842],{"__ignoreMap":66},[84,120822,120823],{"class":86,"line":87},[84,120824,120825],{"class":1378},"# 检查是否已安装 pip\n",[84,120827,120828,120830],{"class":86,"line":98},[84,120829,289],{"class":90},[84,120831,95],{"class":94},[84,120833,120834],{"class":86,"line":106},[84,120835,120836],{"class":1378},"# 如果未安装，先安装 pip3（见下方）\n",[84,120838,120839],{"class":86,"line":112},[84,120840,120841],{"class":1378},"# 配置 pip 使用清华源\n",[84,120843,120844,120846,120849,120852,120855],{"class":86,"line":425},[84,120845,289],{"class":90},[84,120847,120848],{"class":158}," config",[84,120850,120851],{"class":158}," set",[84,120853,120854],{"class":158}," global.index-url",[84,120856,453],{"class":158},[19,120858,120859],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120861,120862],{},[2643,120863],{"alt":66,"src":120864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[60,120866,120868],{"className":118430,"code":120867,"language":118432,"meta":66,"style":66},"#安装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",[39,120869,120870,120875,120883,120893,120897,120902,120921,120925,120930,120942,120946,120951],{"__ignoreMap":66},[84,120871,120872],{"class":86,"line":87},[84,120873,120874],{"class":1378},"#安装pip3\n",[84,120876,120877,120879,120881],{"class":86,"line":98},[84,120878,311],{"class":90},[84,120880,314],{"class":158},[84,120882,317],{"class":158},[84,120884,120885,120887,120889,120891],{"class":86,"line":106},[84,120886,311],{"class":90},[84,120888,27239],{"class":158},[84,120890,275],{"class":158},[84,120892,368],{"class":158},[84,120894,120895],{"class":86,"line":112},[84,120896,3578],{"emptyLinePlaceholder":1252},[84,120898,120899],{"class":86,"line":425},[84,120900,120901],{"class":1378},"#更新pip3\n",[84,120903,120904,120906,120908,120910,120912,120914,120917,120919],{"class":86,"line":2395},[84,120905,101],{"class":90},[84,120907,558],{"class":94},[84,120909,102043],{"class":158},[84,120911,275],{"class":158},[84,120913,450],{"class":94},[84,120915,120916],{"class":158}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[84,120918,102048],{"class":94},[84,120920,102051],{"class":158},[84,120922,120923],{"class":86,"line":2401},[84,120924,3578],{"emptyLinePlaceholder":1252},[84,120926,120927],{"class":86,"line":2492},[84,120928,120929],{"class":1378},"#设置pip源为清华源\n",[84,120931,120932,120934,120936,120938,120940],{"class":86,"line":2498},[84,120933,289],{"class":90},[84,120935,120848],{"class":158},[84,120937,120851],{"class":158},[84,120939,120854],{"class":158},[84,120941,453],{"class":158},[84,120943,120944],{"class":86,"line":2510},[84,120945,3578],{"emptyLinePlaceholder":1252},[84,120947,120948],{"class":86,"line":2793},[84,120949,120950],{"class":1378},"#测试\n",[84,120952,120953,120955,120957,120959,120961,120963],{"class":86,"line":2798},[84,120954,101],{"class":90},[84,120956,558],{"class":94},[84,120958,102043],{"class":158},[84,120960,275],{"class":158},[84,120962,102048],{"class":94},[84,120964,102051],{"class":158},[19,120966,120967],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120969,120970],{},[2643,120971],{"alt":66,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120974,120976],{"id":120975},"_35-显卡驱动安装","3.5 显卡驱动安装",[198,120978,120980],{"id":120979},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[60,120982,120984],{"className":119655,"code":120983,"language":119657,"meta":66,"style":66},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[39,120985,120986,120991,121006,121011],{"__ignoreMap":66},[84,120987,120988],{"class":86,"line":87},[84,120989,120990],{"class":1378},"# 如果是使用apt安装的驱动\n",[84,120992,120993,120995,120997,120999,121001,121004],{"class":86,"line":98},[84,120994,311],{"class":90},[84,120996,27239],{"class":158},[84,120998,27242],{"class":158},[84,121000,120289],{"class":94},[84,121002,121003],{"class":158}," nvidia",[84,121005,120379],{"class":94},[84,121007,121008],{"class":86,"line":106},[84,121009,121010],{"class":1378},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[84,121012,121013,121015],{"class":86,"line":112},[84,121014,311],{"class":90},[84,121016,121017],{"class":158}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[198,121019,121021],{"id":121020},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23168,121023,121025],{"id":121024},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24080,121027,121029],{"id":121028},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[60,121031,121033],{"className":119655,"code":121032,"language":119657,"meta":66,"style":66},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[39,121034,121035,121040,121051,121056,121066,121071],{"__ignoreMap":66},[84,121036,121037],{"class":86,"line":87},[84,121038,121039],{"class":1378},"# 安装英伟达驱动\n",[84,121041,121042,121044,121046,121048],{"class":86,"line":98},[84,121043,311],{"class":90},[84,121045,314],{"class":158},[84,121047,275],{"class":158},[84,121049,121050],{"class":158}," nvidia-driver-版本号\n",[84,121052,121053],{"class":86,"line":106},[84,121054,121055],{"class":1378},"# 重启 \n",[84,121057,121058,121060,121062,121064],{"class":86,"line":112},[84,121059,311],{"class":90},[84,121061,120767],{"class":158},[84,121063,642],{"class":94},[84,121065,120772],{"class":158},[84,121067,121068],{"class":86,"line":425},[84,121069,121070],{"class":1378},"# 检查驱动是否安装成功\n",[84,121072,121073],{"class":86,"line":2395},[84,121074,121075],{"class":90},"nvidia-smi\n",[24080,121077,121079],{"id":121078},"_35212-debian","3.5.2.1.2 Debian",[60,121081,121083],{"className":119655,"code":121082,"language":119657,"meta":66,"style":66},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[39,121084,121085,121089,121103,121107,121117,121121],{"__ignoreMap":66},[84,121086,121087],{"class":86,"line":87},[84,121088,121039],{"class":1378},[84,121090,121091,121093,121095,121097,121100],{"class":86,"line":98},[84,121092,311],{"class":90},[84,121094,314],{"class":158},[84,121096,275],{"class":158},[84,121098,121099],{"class":158}," nvidia-driver",[84,121101,121102],{"class":158}," nvidia-settings\n",[84,121104,121105],{"class":86,"line":106},[84,121106,121055],{"class":1378},[84,121108,121109,121111,121113,121115],{"class":86,"line":112},[84,121110,311],{"class":90},[84,121112,120767],{"class":158},[84,121114,642],{"class":94},[84,121116,120772],{"class":158},[84,121118,121119],{"class":86,"line":425},[84,121120,121070],{"class":1378},[84,121122,121123],{"class":86,"line":2395},[84,121124,121075],{"class":90},[23168,121126,121128],{"id":121127},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121130,121131,121132,121135],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1464,121133,121134],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121137,121138,121139],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24723,121140,121141],{},[1464,121142,121143],{},"（也可以不禁用桌面环境，直接进行下一步。）",[60,121145,121147],{"className":119655,"code":121146,"language":119657,"meta":66,"style":66},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[39,121148,121149,121154,121163,121168,121181,121186],{"__ignoreMap":66},[84,121150,121151],{"class":86,"line":87},[84,121152,121153],{"class":1378},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[84,121155,121156,121158,121161],{"class":86,"line":98},[84,121157,311],{"class":90},[84,121159,121160],{"class":158}," telinit",[84,121162,1000],{"class":94},[84,121164,121165],{"class":86,"line":106},[84,121166,121167],{"class":1378},"# ubuntu 使用下方命令\n",[84,121169,121170,121172,121175,121178],{"class":86,"line":112},[84,121171,311],{"class":90},[84,121173,121174],{"class":158}," service",[84,121176,121177],{"class":158}," lightdm",[84,121179,121180],{"class":158}," stop\n",[84,121182,121183],{"class":86,"line":425},[84,121184,121185],{"class":1378},"# Fedora 使用下方命令\n",[84,121187,121188,121190,121192,121195],{"class":86,"line":2395},[84,121189,311],{"class":90},[84,121191,27671],{"class":158},[84,121193,121194],{"class":158}," isolate",[84,121196,121197],{"class":158}," multi-user.target\n",[19,121199,121200],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[60,121202,121204],{"className":119655,"code":121203,"language":119657,"meta":66,"style":66},"# 编译环境+准备工作\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",[39,121205,121206,121211,121222,121227,121234,121239,121251,121256,121263,121268],{"__ignoreMap":66},[84,121207,121208],{"class":86,"line":87},[84,121209,121210],{"class":1378},"# 编译环境+准备工作\n",[84,121212,121213,121215,121217,121219],{"class":86,"line":98},[84,121214,311],{"class":90},[84,121216,314],{"class":158},[84,121218,275],{"class":158},[84,121220,121221],{"class":158}," build-essential\n",[84,121223,121224],{"class":86,"line":106},[84,121225,121226],{"class":1378},"# 进入到.run目录中\n",[84,121228,121229,121231],{"class":86,"line":112},[84,121230,102414],{"class":94},[84,121232,121233],{"class":158}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[84,121235,121236],{"class":86,"line":425},[84,121237,121238],{"class":1378},"# 给驱动文件增加可执行权限：\n",[84,121240,121241,121243,121245,121248],{"class":86,"line":2395},[84,121242,311],{"class":90},[84,121244,25744],{"class":158},[84,121246,121247],{"class":158}," a+x",[84,121249,121250],{"class":158}," NVIDIA-Linux-x86_64-550.107.02.run\n",[84,121252,121253],{"class":86,"line":2401},[84,121254,121255],{"class":1378},"# 然后执行安装：\n",[84,121257,121258,121260],{"class":86,"line":2492},[84,121259,311],{"class":90},[84,121261,121262],{"class":158}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[84,121264,121265],{"class":86,"line":2498},[84,121266,121267],{"class":1378},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[84,121269,121270,121272,121275],{"class":86,"line":2510},[84,121271,311],{"class":90},[84,121273,121274],{"class":158}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[84,121276,121277],{"class":94},"  --no-opengl-files\n",[19,121279,121280],{},"安装完毕重启即可",[60,121282,121284],{"className":119655,"code":121283,"language":119657,"meta":66,"style":66},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[39,121285,121286,121290,121296,121300],{"__ignoreMap":66},[84,121287,121288],{"class":86,"line":87},[84,121289,121055],{"class":1378},[84,121291,121292,121294],{"class":86,"line":98},[84,121293,311],{"class":90},[84,121295,27805],{"class":158},[84,121297,121298],{"class":86,"line":106},[84,121299,121070],{"class":1378},[84,121301,121302],{"class":86,"line":112},[84,121303,121075],{"class":90},[198,121305,121307],{"id":121306},"_353-安装cuda","3.5.3 安装CUDA",[19,121309,121310],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121312,121313],{},[2643,121314],{"alt":66,"src":121315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121317,121318],{},[29,121319,121320],{},"先查看显卡驱动所支持的最高CUDA版本",[60,121322,121323],{"className":119655,"code":121075,"language":119657,"meta":66,"style":66},[39,121324,121325],{"__ignoreMap":66},[84,121326,121327],{"class":86,"line":87},[84,121328,121075],{"class":90},[19,121330,121331],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121333,121334],{},[2643,121335],{"alt":66,"src":121336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121338,121339],{"start":98},[29,121340,121341],{},"下载CUDA并安装CUDA",[19,121343,119434,121344],{},[208,121345,119437],{"href":119437,"rel":121346},[212],[19,121348,121349],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121351,121352],{},[2643,121353],{"alt":66,"src":121354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121356,121357,121358,121363],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[208,121359,121362],{"href":121360,"rel":121361},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[212],"Vinci机器人队单片机教程","）",[19,121365,121366],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121368,121369],{},[2643,121370],{"alt":66,"src":121371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121373,121374],{},"将最下方框框里的命令敲入终端",[60,121376,121378],{"className":119655,"code":121377,"language":119657,"meta":66,"style":66},"# 在当前文件夹下创建一个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",[39,121379,121380,121385,121394,121399,121406,121411,121419,121424,121435,121440],{"__ignoreMap":66},[84,121381,121382],{"class":86,"line":87},[84,121383,121384],{"class":1378},"# 在当前文件夹下创建一个ttt的子文件夹\n",[84,121386,121387,121389,121391],{"class":86,"line":98},[84,121388,102404],{"class":90},[84,121390,30373],{"class":94},[84,121392,121393],{"class":158}," .\u002Fttt\n",[84,121395,121396],{"class":86,"line":106},[84,121397,121398],{"class":1378},"# 进入ttt文件夹\n",[84,121400,121401,121403],{"class":86,"line":112},[84,121402,102414],{"class":94},[84,121404,121405],{"class":158}," ttt\n",[84,121407,121408],{"class":86,"line":425},[84,121409,121410],{"class":1378},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[84,121412,121413,121416],{"class":86,"line":2395},[84,121414,121415],{"class":90},"wget",[84,121417,121418],{"class":158}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[84,121420,121421],{"class":86,"line":2401},[84,121422,121423],{"class":1378},"# 给予权限\n",[84,121425,121426,121428,121430,121432],{"class":86,"line":2492},[84,121427,311],{"class":90},[84,121429,25744],{"class":158},[84,121431,121247],{"class":158},[84,121433,121434],{"class":158}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[84,121436,121437],{"class":86,"line":2498},[84,121438,121439],{"class":1378},"# 运行脚本\n",[84,121441,121442,121444],{"class":86,"line":2510},[84,121443,311],{"class":90},[84,121445,121434],{"class":158},[19,121447,121448],{},[2643,121449],{"alt":66,"src":121450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121452,121453],{},"正在安装中：",[19,121455,121456],{},[2643,121457],{"alt":66,"src":121458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121460,121461],{},"输入accept接受即可",[19,121463,121464],{},[2643,121465],{"alt":66,"src":121466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121468,121469],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121471,121472],{},[2643,121473],{"alt":66,"src":121474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121476,121477],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121479,121480],{},[2643,121481],{"alt":66,"src":121482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,121484,121485],{"start":106},[29,121486,121487],{},"配置环境",[19,121489,121490],{},"根据上方确认一下路径，比如我上面红色框起来的为",[60,121492,121494],{"className":119655,"code":121493,"language":119657,"meta":66,"style":66},"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",[39,121495,121496,121512,121527],{"__ignoreMap":66},[84,121497,121498,121501,121504,121507,121510],{"class":86,"line":87},[84,121499,121500],{"class":90},"Please",[84,121502,121503],{"class":158}," make",[84,121505,121506],{"class":158}," sure",[84,121508,121509],{"class":158}," that",[84,121511,3852],{"class":154},[84,121513,121514,121516,121519,121522,121525],{"class":86,"line":98},[84,121515,53420],{"class":90},[84,121517,121518],{"class":158},"   PATH",[84,121520,121521],{"class":158}," includes",[84,121523,121524],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[84,121526,3852],{"class":154},[84,121528,121529,121531,121534,121536,121539,121542,121544,121547,121550,121553,121556,121558,121561,121563],{"class":86,"line":106},[84,121530,53420],{"class":90},[84,121532,121533],{"class":158},"   LD_LIBRARY_PATH",[84,121535,121521],{"class":158},[84,121537,121538],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[84,121540,121541],{"class":158}," or,",[84,121543,6384],{"class":158},[84,121545,121546],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[84,121548,121549],{"class":158}," to",[84,121551,121552],{"class":158}," \u002Fetc\u002Fld.so.conf",[84,121554,121555],{"class":158}," and",[84,121557,28388],{"class":158},[84,121559,121560],{"class":158}," ldconfig",[84,121562,65750],{"class":158},[84,121564,121565],{"class":158}," root\n",[19,121567,121568],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[60,121570,121572],{"className":119655,"code":121571,"language":119657,"meta":66,"style":66},"which nvcc\n",[39,121573,121574],{"__ignoreMap":66},[84,121575,121576,121579],{"class":86,"line":87},[84,121577,121578],{"class":94},"which",[84,121580,121581],{"class":158}," nvcc\n",[19,121583,121584],{},[2643,121585],{"alt":66,"src":121586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121588,121589],{},"所以我进行以下操作：",[60,121591,121593],{"className":119655,"code":121592,"language":119657,"meta":66,"style":66},"sudo vim ~\u002F.bashrc\n",[39,121594,121595],{"__ignoreMap":66},[84,121596,121597,121599,121601],{"class":86,"line":87},[84,121598,311],{"class":90},[84,121600,119715],{"class":158},[84,121602,121603],{"class":158}," ~\u002F.bashrc\n",[19,121605,121606],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[60,121608,121610],{"className":119655,"code":121609,"language":119657,"meta":66,"style":66},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[39,121611,121612,121624],{"__ignoreMap":66},[84,121613,121614,121616,121619,121621],{"class":86,"line":87},[84,121615,26206],{"class":129},[84,121617,121618],{"class":154}," PATH",[84,121620,867],{"class":129},[84,121622,121623],{"class":154},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[84,121625,121626,121628,121631,121633],{"class":86,"line":98},[84,121627,26206],{"class":129},[84,121629,121630],{"class":154}," LD_LIBRARY_PATH",[84,121632,867],{"class":129},[84,121634,121635],{"class":154},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121637,121638],{},[2643,121639],{"alt":66,"src":121640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[60,121642,121644],{"className":119655,"code":121643,"language":119657,"meta":66,"style":66},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[39,121645,121646,121651,121657,121662],{"__ignoreMap":66},[84,121647,121648],{"class":86,"line":87},[84,121649,121650],{"class":1378},"# 刷新当前终端的环境变量\n",[84,121652,121653,121655],{"class":86,"line":98},[84,121654,589],{"class":94},[84,121656,121603],{"class":158},[84,121658,121659],{"class":86,"line":106},[84,121660,121661],{"class":1378},"# 验证CUDA是否安装成功\n",[84,121663,121664,121667],{"class":86,"line":112},[84,121665,121666],{"class":90},"nvcc",[84,121668,121669],{"class":94}," -V\n",[19,121671,121672],{},"出现下图这种则安装成功。",[19,121674,121675],{},[2643,121676],{"alt":66,"src":121677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[198,121679,121681],{"id":121680},"_354-安装cudnn","3.5.4 安装cuDNN",[26,121683,121684],{},[29,121685,121686],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121688,121689,121690,121695],{},"前往 NVIDIA cuDNN 下载页面：",[208,121691,121694],{"href":121692,"rel":121693},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[212],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121697,121698],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121700,121701],{},[2643,121702],{"alt":66,"src":121703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121705,121706],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121708,121709],{},[2643,121710],{"alt":66,"src":121711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121713,121714],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121716,121717],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121719,121720],{},[1464,121721,121722],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121724,121725],{},"下载好的：",[19,121727,121728],{},[2643,121729],{"alt":66,"src":121730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,121732,121733],{"start":98},[29,121734,121735],{},"安装cuDNN",[19,121737,121738],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121740,121741],{},[2643,121742],{"alt":66,"src":121743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121745,121746],{},"解压文件，并复制到对应位置完成安装",[60,121748,121750],{"className":119655,"code":121749,"language":119657,"meta":66,"style":66},"# 解压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",[39,121751,121752,121757,121768,121773,121780,121785,121801,121815,121820,121831,121840,121844,121860],{"__ignoreMap":66},[84,121753,121754],{"class":86,"line":87},[84,121755,121756],{"class":1378},"# 解压cuDNN文件\n",[84,121758,121759,121762,121765],{"class":86,"line":98},[84,121760,121761],{"class":90},"tar",[84,121763,121764],{"class":94}," -xvf",[84,121766,121767],{"class":158}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[84,121769,121770],{"class":86,"line":106},[84,121771,121772],{"class":1378},"# cd进文件夹\n",[84,121774,121775,121777],{"class":86,"line":112},[84,121776,102414],{"class":94},[84,121778,121779],{"class":158}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[84,121781,121782],{"class":86,"line":425},[84,121783,121784],{"class":1378},"# 复制cuDNN文件到CUDA目录\n",[84,121786,121787,121789,121791,121794,121796,121799],{"class":86,"line":2395},[84,121788,311],{"class":90},[84,121790,29019],{"class":158},[84,121792,121793],{"class":158}," include\u002Fcudnn",[84,121795,1043],{"class":94},[84,121797,121798],{"class":158},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[84,121800,3852],{"class":154},[84,121802,121803,121805,121807,121810,121812],{"class":86,"line":2401},[84,121804,311],{"class":90},[84,121806,29019],{"class":158},[84,121808,121809],{"class":158}," lib\u002Flibcudnn",[84,121811,1043],{"class":94},[84,121813,121814],{"class":158},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[84,121816,121817],{"class":86,"line":2492},[84,121818,121819],{"class":1378},"# 对比一下有没有缺文件\n",[84,121821,121822,121824,121827,121829],{"class":86,"line":2498},[84,121823,27919],{"class":90},[84,121825,121826],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[84,121828,1043],{"class":94},[84,121830,3852],{"class":154},[84,121832,121833,121835,121838],{"class":86,"line":2510},[84,121834,27919],{"class":90},[84,121836,121837],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[84,121839,120379],{"class":94},[84,121841,121842],{"class":86,"line":2793},[84,121843,121423],{"class":1378},[84,121845,121846,121848,121850,121853,121855,121857],{"class":86,"line":2798},[84,121847,311],{"class":90},[84,121849,25744],{"class":158},[84,121851,121852],{"class":158}," a+r",[84,121854,121826],{"class":158},[84,121856,1043],{"class":94},[84,121858,121859],{"class":154},"   \n",[84,121861,121862,121864,121866,121868,121870],{"class":86,"line":2804},[84,121863,311],{"class":90},[84,121865,25744],{"class":158},[84,121867,121852],{"class":158},[84,121869,121837],{"class":158},[84,121871,120379],{"class":94},[26,121873,121874],{"start":106},[29,121875,121876],{},"检查是否安装成功",[60,121878,121880],{"className":119655,"code":121879,"language":119657,"meta":66,"style":66},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[39,121881,121882,121887],{"__ignoreMap":66},[84,121883,121884],{"class":86,"line":87},[84,121885,121886],{"class":1378},"# 检查cuDNN版本命令\n",[84,121888,121889,121892,121895,121897,121899,121902,121905],{"class":86,"line":98},[84,121890,121891],{"class":90},"cat",[84,121893,121894],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[84,121896,26273],{"class":129},[84,121898,31393],{"class":90},[84,121900,121901],{"class":158}," CUDNN_MAJOR",[84,121903,121904],{"class":94}," -A",[84,121906,139],{"class":94},[19,121908,121909],{},"出现下图这样的就是安装成功了",[19,121911,121912],{},[2643,121913],{"alt":66,"src":121914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,121916,121917],{"start":112},[29,121918,121919],{},"软链接(一般不需要)",[60,121921,121923],{"className":119655,"code":121922,"language":119657,"meta":66,"style":66},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[39,121924,121925,121930],{"__ignoreMap":66},[84,121926,121927],{"class":86,"line":87},[84,121928,121929],{"class":1378},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[84,121931,121932,121934],{"class":86,"line":98},[84,121933,311],{"class":90},[84,121935,121936],{"class":158}," ldconfig\n",[19,121938,121939],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[60,121941,121946],{"className":121942,"code":121943,"language":121944,"meta":121945,"style":66},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[39,121947,121948,121953,121958,121963,121968,121973,121978],{"__ignoreMap":66},[84,121949,121950],{"class":86,"line":87},[84,121951,121952],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[84,121954,121955],{"class":86,"line":98},[84,121956,121957],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[84,121959,121960],{"class":86,"line":106},[84,121961,121962],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[84,121964,121965],{"class":86,"line":112},[84,121966,121967],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[84,121969,121970],{"class":86,"line":425},[84,121971,121972],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[84,121974,121975],{"class":86,"line":2395},[84,121976,121977],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[84,121979,121980],{"class":86,"line":2401},[84,121981,121982],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121984,121985],{},"运行下方的命令",[60,121987,121989],{"className":119655,"code":121988,"language":119657,"meta":66,"style":66},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[39,121990,121991,121996,122003,122008],{"__ignoreMap":66},[84,121992,121993],{"class":86,"line":87},[84,121994,121995],{"class":1378},"# cd进入CUDA路径\n",[84,121997,121998,122000],{"class":86,"line":98},[84,121999,102414],{"class":94},[84,122001,122002],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[84,122004,122005],{"class":86,"line":106},[84,122006,122007],{"class":1378}," # 查看本路径下的需要软链接的文件名\n",[84,122009,122010],{"class":86,"line":112},[84,122011,122012],{"class":90}," ls\n",[19,122014,122015],{},[2643,122016],{"alt":66,"src":122017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122019,122020,122021,19580,122024,19580,122027,122030],{},"如上图，我需要将",[39,122022,122023],{},"libcudnn_xxx_xxxxx.so.8.9.7",[39,122025,122026],{},"libcudnn_xxx_xxxxx.so.8",[39,122028,122029],{},"libcudnn_xxx_xxxxx.so","软链接",[60,122032,122034],{"className":119655,"code":122033,"language":119657,"meta":66,"style":66},"# 创建符号链接。对于每个 .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",[39,122035,122036,122041,122057,122071,122085,122099,122113,122127,122141,122146,122152,122157],{"__ignoreMap":66},[84,122037,122038],{"class":86,"line":87},[84,122039,122040],{"class":1378},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[84,122042,122043,122045,122048,122051,122054],{"class":86,"line":98},[84,122044,311],{"class":90},[84,122046,122047],{"class":158}," ln",[84,122049,122050],{"class":94}," -sf",[84,122052,122053],{"class":158}," libcudnn_cnn_train.so.8.9.7",[84,122055,122056],{"class":158}," libcudnn_cnn_train.so.8\n",[84,122058,122059,122061,122063,122065,122068],{"class":86,"line":106},[84,122060,311],{"class":90},[84,122062,122047],{"class":158},[84,122064,122050],{"class":94},[84,122066,122067],{"class":158}," libcudnn_adv_infer.so.8.9.7",[84,122069,122070],{"class":158}," libcudnn_adv_infer.so.8\n",[84,122072,122073,122075,122077,122079,122082],{"class":86,"line":112},[84,122074,311],{"class":90},[84,122076,122047],{"class":158},[84,122078,122050],{"class":94},[84,122080,122081],{"class":158}," libcudnn_adv_train.so.8.9.7",[84,122083,122084],{"class":158}," libcudnn_adv_train.so.8\n",[84,122086,122087,122089,122091,122093,122096],{"class":86,"line":425},[84,122088,311],{"class":90},[84,122090,122047],{"class":158},[84,122092,122050],{"class":94},[84,122094,122095],{"class":158}," libcudnn_cnn_infer.so.8.9.7",[84,122097,122098],{"class":158}," libcudnn_cnn_infer.so.8\n",[84,122100,122101,122103,122105,122107,122110],{"class":86,"line":2395},[84,122102,311],{"class":90},[84,122104,122047],{"class":158},[84,122106,122050],{"class":94},[84,122108,122109],{"class":158}," libcudnn.so.8.9.7",[84,122111,122112],{"class":158}," libcudnn.so.8\n",[84,122114,122115,122117,122119,122121,122124],{"class":86,"line":2401},[84,122116,311],{"class":90},[84,122118,122047],{"class":158},[84,122120,122050],{"class":94},[84,122122,122123],{"class":158}," libcudnn_ops_infer.so.8.9.7",[84,122125,122126],{"class":158}," libcudnn_ops_infer.so.8\n",[84,122128,122129,122131,122133,122135,122138],{"class":86,"line":2492},[84,122130,311],{"class":90},[84,122132,122047],{"class":158},[84,122134,122050],{"class":94},[84,122136,122137],{"class":158}," libcudnn_ops_train.so.8.9.7",[84,122139,122140],{"class":158}," libcudnn_ops_train.so.8\n",[84,122142,122143],{"class":86,"line":2498},[84,122144,122145],{"class":1378},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[84,122147,122148,122150],{"class":86,"line":2510},[84,122149,311],{"class":90},[84,122151,121936],{"class":158},[84,122153,122154],{"class":86,"line":2793},[84,122155,122156],{"class":1378},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[84,122158,122159,122161,122164,122167,122169,122172],{"class":86,"line":2798},[84,122160,27919],{"class":90},[84,122162,122163],{"class":94}," -l",[84,122165,122166],{"class":158}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[84,122168,1043],{"class":94},[84,122170,122171],{"class":158},".so",[84,122173,120379],{"class":94},[198,122175,122177],{"id":122176},"_355-常见问题","3.5.5 常见问题",[26,122179,122180],{},[29,122181,122182],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[60,122184,122186],{"className":119655,"code":122185,"language":119657,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[39,122187,122188],{"__ignoreMap":66},[84,122189,122190,122192,122194],{"class":86,"line":87},[84,122191,311],{"class":90},[84,122193,119715],{"class":158},[84,122195,122196],{"class":158}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122198,122199],{},"blacklist-nouveau.conf文件内容如下：",[60,122201,122203],{"className":119655,"code":122202,"language":119657,"meta":66,"style":66},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[39,122204,122205,122213,122220,122232,122242],{"__ignoreMap":66},[84,122206,122207,122210],{"class":86,"line":87},[84,122208,122209],{"class":90},"blacklist",[84,122211,122212],{"class":158}," nouveau\n",[84,122214,122215,122217],{"class":86,"line":98},[84,122216,122209],{"class":90},[84,122218,122219],{"class":158}," lbm-nouveau\n",[84,122221,122222,122224,122227,122230],{"class":86,"line":106},[84,122223,117064],{"class":90},[84,122225,122226],{"class":158}," nouveau",[84,122228,122229],{"class":158}," modeset=",[84,122231,4263],{"class":94},[84,122233,122234,122237,122239],{"class":86,"line":112},[84,122235,122236],{"class":94},"alias",[84,122238,122226],{"class":158},[84,122240,122241],{"class":158}," off\n",[84,122243,122244,122246,122249],{"class":86,"line":425},[84,122245,122236],{"class":94},[84,122247,122248],{"class":158}," lbm-nouveau",[84,122250,122241],{"class":158},[19,122252,122253],{},"接着运行下方命令",[60,122255,122257],{"className":119655,"code":122256,"language":119657,"meta":66,"style":66},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[39,122258,122259,122269,122274],{"__ignoreMap":66},[84,122260,122261,122263,122266],{"class":86,"line":87},[84,122262,311],{"class":90},[84,122264,122265],{"class":158}," update-initramfs",[84,122267,122268],{"class":94}," -u\n",[84,122270,122271],{"class":86,"line":98},[84,122272,122273],{"class":90},"或者\n",[84,122275,122276,122278,122281],{"class":86,"line":106},[84,122277,311],{"class":90},[84,122279,122280],{"class":158}," dracut",[84,122282,122283],{"class":94}," --force\n",[19,122285,122286],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[60,122288,122290],{"className":119655,"code":122289,"language":119657,"meta":66,"style":66},"lsmod | grep nouveau\n",[39,122291,122292],{"__ignoreMap":66},[84,122293,122294,122297,122299,122301],{"class":86,"line":87},[84,122295,122296],{"class":90},"lsmod",[84,122298,26273],{"class":129},[84,122300,31393],{"class":90},[84,122302,122212],{"class":158},[26,122304,122305],{"start":98},[29,122306,122307],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[60,122309,122311],{"className":119655,"code":122310,"language":119657,"meta":66,"style":66},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[39,122312,122313],{"__ignoreMap":66},[84,122314,122315,122317,122319],{"class":86,"line":87},[84,122316,311],{"class":90},[84,122318,119715],{"class":158},[84,122320,122321],{"class":158}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122323,122324],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[60,122326,122328],{"className":119655,"code":122327,"language":119657,"meta":66,"style":66},"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",[39,122329,122330,122338,122346,122354,122361,122369,122379,122387],{"__ignoreMap":66},[84,122331,122332,122335],{"class":86,"line":87},[84,122333,122334],{"class":90},"Section",[84,122336,122337],{"class":158}," \"OutputClass\"\n",[84,122339,122340,122343],{"class":86,"line":98},[84,122341,122342],{"class":90},"   Identifier",[84,122344,122345],{"class":158}," \"nvidia\"\n",[84,122347,122348,122351],{"class":86,"line":106},[84,122349,122350],{"class":90},"   MatchDriver",[84,122352,122353],{"class":158}," \"nvidia-drm\"\n",[84,122355,122356,122359],{"class":86,"line":112},[84,122357,122358],{"class":90},"   Driver",[84,122360,122345],{"class":158},[84,122362,122363,122366],{"class":86,"line":425},[84,122364,122365],{"class":90},"   Option",[84,122367,122368],{"class":158}," \"AllowEmptyInitialConfiguration\"\n",[84,122370,122371,122373,122376],{"class":86,"line":2395},[84,122372,122365],{"class":90},[84,122374,122375],{"class":158}," \"PrimaryGPU\"",[84,122377,122378],{"class":158}," \"yes\"\n",[84,122380,122381,122384],{"class":86,"line":2401},[84,122382,122383],{"class":90},"   ModulePath",[84,122385,122386],{"class":158}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[84,122388,122389],{"class":86,"line":2492},[84,122390,122391],{"class":90},"EndSection\n",[26,122393,122394],{"start":106},[29,122395,122396],{},"安装N卡驱动提示错误",[60,122398,122400],{"className":121942,"code":122399,"language":121944,"meta":121945,"style":66},"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",[39,122401,122402],{"__ignoreMap":66},[84,122403,122404],{"class":86,"line":87},[84,122405,122399],{},[26,122407,122408],{},[29,122409,122410],{},"检查当前运行的内核版本：",[19,122412,122413],{},"运行以下命令以查看你当前正在使用的内核版本：",[60,122415,122417],{"className":118430,"code":122416,"language":118432,"meta":66,"style":66},"uname -r\n",[39,122418,122419],{"__ignoreMap":66},[84,122420,122421,122423],{"class":86,"line":87},[84,122422,71350],{"class":90},[84,122424,122425],{"class":94}," -r\n",[26,122427,122428],{"start":98},[29,122429,122430],{},"安装内核开发文件：",[19,122432,122433,122434,122437],{},"确保你已经安装了与当前内核版本相匹配的 ",[39,122435,122436],{},"kernel-devel"," 包。运行以下命令来安装：",[60,122439,122441],{"className":118430,"code":122440,"language":118432,"meta":66,"style":66},"sudo dnf install kernel-devel-$(uname -r)\n",[39,122442,122443],{"__ignoreMap":66},[84,122444,122445,122447,122449,122451,122454,122456,122458,122460],{"class":86,"line":87},[84,122446,311],{"class":90},[84,122448,361],{"class":158},[84,122450,275],{"class":158},[84,122452,122453],{"class":158}," kernel-devel-",[84,122455,26263],{"class":154},[84,122457,71350],{"class":90},[84,122459,642],{"class":94},[84,122461,162],{"class":154},[19,122463,122464],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,122466,122467],{"start":106},[29,122468,122469],{},"安装内核源代码（如果需要）：",[19,122471,122472],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[60,122474,122476],{"className":118430,"code":122475,"language":118432,"meta":66,"style":66},"sudo dnf install kernel-headers kernel-source\n",[39,122477,122478],{"__ignoreMap":66},[84,122479,122480,122482,122484,122486,122489],{"class":86,"line":87},[84,122481,311],{"class":90},[84,122483,361],{"class":158},[84,122485,275],{"class":158},[84,122487,122488],{"class":158}," kernel-headers",[84,122490,122491],{"class":158}," kernel-source\n",[26,122493,122494],{"start":112},[29,122495,122496],{},"检查安装：",[19,122498,122499,122500,122503],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[39,122501,122502],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[60,122505,122507],{"className":118430,"code":122506,"language":118432,"meta":66,"style":66},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[39,122508,122509],{"__ignoreMap":66},[84,122510,122511,122513],{"class":86,"line":87},[84,122512,27919],{"class":90},[84,122514,122515],{"class":158}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122517,122518,122519,122522],{},"如果仍然遇到问题，可以通过 ",[39,122520,122521],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1222,122524,122525],{},"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":66,"searchDepth":98,"depth":98,"links":122527},[122528,122532,122542,122546,122547],{"id":119631,"depth":98,"text":119632,"children":122529},[122530,122531],{"id":119641,"depth":106,"text":119642},{"id":119651,"depth":106,"text":119652},{"id":119851,"depth":98,"text":119852,"children":122533},[122534,122535,122536,122537,122538,122539,122540,122541],{"id":119855,"depth":106,"text":119856},{"id":119925,"depth":106,"text":119926},{"id":120014,"depth":106,"text":120015},{"id":120258,"depth":106,"text":120259},{"id":120328,"depth":106,"text":120329},{"id":120395,"depth":106,"text":120396},{"id":120430,"depth":106,"text":120431},{"id":120485,"depth":106,"text":120486},{"id":120536,"depth":98,"text":120537,"children":122543},[122544,122545],{"id":120540,"depth":106,"text":120541},{"id":120620,"depth":106,"text":120621},{"id":120805,"depth":98,"text":120806},{"id":120975,"depth":98,"text":120976,"children":122548},[122549,122550,122551,122552,122553],{"id":120979,"depth":106,"text":120980},{"id":121020,"depth":106,"text":121021},{"id":121306,"depth":106,"text":121307},{"id":121680,"depth":106,"text":121681},{"id":122176,"depth":106,"text":122177},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119623,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122560,"title":122561,"body":122562,"description":1249,"extension":1250,"meta":122902,"navigation":1252,"path":122903,"seo":122904,"stem":122905,"__hash__":122906},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122563,"toc":122900},[122564,122567,122572,122575,122821,122826,122829,122865,122868,122897],[10,122565,122561],{"id":122566},"_4-命令教程长期积累",[26,122568,122569],{},[29,122570,122571],{},"大多数命令",[19,122573,122574],{},"常用 Linux 命令速查：",[60,122576,122578],{"className":118430,"code":122577,"language":118432,"meta":66,"style":66},"# 文件与目录\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",[39,122579,122580,122585,122592,122599,122607,122614,122621,122629,122637,122644,122651,122659,122663,122668,122675,122683,122690,122694,122699,122706,122714,122722,122730,122738,122742,122747,122755,122762,122769,122777,122785,122789,122794,122803,122812],{"__ignoreMap":66},[84,122581,122582],{"class":86,"line":87},[84,122583,122584],{"class":1378},"# 文件与目录\n",[84,122586,122587,122589],{"class":86,"line":98},[84,122588,27919],{"class":90},[84,122590,122591],{"class":1378},"        # 列出目录内容\n",[84,122593,122594,122596],{"class":86,"line":106},[84,122595,102414],{"class":94},[84,122597,122598],{"class":1378},"        # 切换目录\n",[84,122600,122601,122604],{"class":86,"line":112},[84,122602,122603],{"class":94},"pwd",[84,122605,122606],{"class":1378},"       # 显示当前路径\n",[84,122608,122609,122611],{"class":86,"line":425},[84,122610,102404],{"class":90},[84,122612,122613],{"class":1378},"     # 创建目录\n",[84,122615,122616,122618],{"class":86,"line":2395},[84,122617,26485],{"class":90},[84,122619,122620],{"class":1378},"        # 删除文件或目录\n",[84,122622,122623,122626],{"class":86,"line":2401},[84,122624,122625],{"class":90},"cp",[84,122627,122628],{"class":1378},"        # 复制文件或目录\n",[84,122630,122631,122634],{"class":86,"line":2492},[84,122632,122633],{"class":90},"mv",[84,122635,122636],{"class":1378},"        # 移动\u002F重命名文件或目录\n",[84,122638,122639,122641],{"class":86,"line":2498},[84,122640,102421],{"class":90},[84,122642,122643],{"class":1378},"     # 创建空文件\n",[84,122645,122646,122648],{"class":86,"line":2510},[84,122647,121891],{"class":90},[84,122649,122650],{"class":1378},"       # 查看文件内容\n",[84,122652,122653,122656],{"class":86,"line":2793},[84,122654,122655],{"class":90},"head\u002Ftail",[84,122657,122658],{"class":1378}," # 查看文件头部\u002F尾部\n",[84,122660,122661],{"class":86,"line":2798},[84,122662,3578],{"emptyLinePlaceholder":1252},[84,122664,122665],{"class":86,"line":2804},[84,122666,122667],{"class":1378},"# 权限管理\n",[84,122669,122670,122672],{"class":86,"line":2809},[84,122671,25776],{"class":90},[84,122673,122674],{"class":1378},"     # 修改文件权限\n",[84,122676,122677,122680],{"class":86,"line":2823},[84,122678,122679],{"class":90},"chown",[84,122681,122682],{"class":1378},"     # 修改文件所有者\n",[84,122684,122685,122687],{"class":86,"line":2828},[84,122686,311],{"class":90},[84,122688,122689],{"class":1378},"      # 以管理员身份执行\n",[84,122691,122692],{"class":86,"line":2834},[84,122693,3578],{"emptyLinePlaceholder":1252},[84,122695,122696],{"class":86,"line":2855},[84,122697,122698],{"class":1378},"# 系统信息\n",[84,122700,122701,122703],{"class":86,"line":2860},[84,122702,71350],{"class":90},[84,122704,122705],{"class":1378},"     # 系统信息\n",[84,122707,122708,122711],{"class":86,"line":2874},[84,122709,122710],{"class":90},"df",[84,122712,122713],{"class":1378},"        # 磁盘使用情况\n",[84,122715,122716,122719],{"class":86,"line":2879},[84,122717,122718],{"class":90},"free",[84,122720,122721],{"class":1378},"      # 内存使用情况\n",[84,122723,122724,122727],{"class":86,"line":2908},[84,122725,122726],{"class":90},"top\u002Fhtop",[84,122728,122729],{"class":1378},"  # 进程监控\n",[84,122731,122732,122735],{"class":86,"line":2913},[84,122733,122734],{"class":90},"ps",[84,122736,122737],{"class":1378},"        # 查看进程\n",[84,122739,122740],{"class":86,"line":2930},[84,122741,3578],{"emptyLinePlaceholder":1252},[84,122743,122744],{"class":86,"line":2935},[84,122745,122746],{"class":1378},"# 网络\n",[84,122748,122749,122752],{"class":86,"line":2940},[84,122750,122751],{"class":90},"ping",[84,122753,122754],{"class":1378},"      # 测试网络连通性\n",[84,122756,122757,122759],{"class":86,"line":2945},[84,122758,28007],{"class":90},[84,122760,122761],{"class":1378},"      # 发送 HTTP 请求\n",[84,122763,122764,122766],{"class":86,"line":2959},[84,122765,121415],{"class":90},[84,122767,122768],{"class":1378},"      # 下载文件\n",[84,122770,122771,122774],{"class":86,"line":2964},[84,122772,122773],{"class":90},"ssh",[84,122775,122776],{"class":1378},"       # 远程登录\n",[84,122778,122779,122782],{"class":86,"line":3755},[84,122780,122781],{"class":90},"scp",[84,122783,122784],{"class":1378},"       # 远程文件传输\n",[84,122786,122787],{"class":86,"line":3769},[84,122788,3578],{"emptyLinePlaceholder":1252},[84,122790,122791],{"class":86,"line":3777},[84,122792,122793],{"class":1378},"# 包管理（Debian\u002FUbuntu）\n",[84,122795,122796,122798,122800],{"class":86,"line":3782},[84,122797,118501],{"class":90},[84,122799,118480],{"class":158},[84,122801,122802],{"class":1378},"   # 更新软件源\n",[84,122804,122805,122807,122809],{"class":86,"line":3788},[84,122806,118501],{"class":90},[84,122808,275],{"class":158},[84,122810,122811],{"class":1378},"  # 安装软件包\n",[84,122813,122814,122816,122818],{"class":86,"line":3794},[84,122815,118501],{"class":90},[84,122817,27242],{"class":158},[84,122819,122820],{"class":1378},"   # 卸载软件包\n",[26,122822,122823],{"start":98},[29,122824,122825],{},"KDE Dolphin 以root打开",[19,122827,122828],{},"kde5",[60,122830,122832],{"className":118430,"code":122831,"language":118432,"meta":66,"style":66},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[39,122833,122834],{"__ignoreMap":66},[84,122835,122836,122839,122842,122845,122847,122849,122852,122855,122857,122860,122862],{"class":86,"line":87},[84,122837,122838],{"class":90},"pkexec",[84,122840,122841],{"class":158}," env",[84,122843,122844],{"class":158}," DISPLAY=",[84,122846,29301],{"class":154},[84,122848,29359],{"class":158},[84,122850,122851],{"class":154},"$XAUTHORITY ",[84,122853,122854],{"class":158},"KDE_SESSION_VERSION=",[84,122856,1629],{"class":94},[84,122858,122859],{"class":158}," KDE_FULL_SESSION=",[84,122861,2543],{"class":94},[84,122863,122864],{"class":158}," dolphin\n",[19,122866,122867],{},"kde6",[60,122869,122871],{"className":118430,"code":122870,"language":118432,"meta":66,"style":66},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[39,122872,122873],{"__ignoreMap":66},[84,122874,122875,122877,122879,122881,122883,122885,122887,122889,122891,122893,122895],{"class":86,"line":87},[84,122876,122838],{"class":90},[84,122878,122841],{"class":158},[84,122880,122844],{"class":158},[84,122882,29301],{"class":154},[84,122884,29359],{"class":158},[84,122886,122851],{"class":154},[84,122888,122854],{"class":158},[84,122890,1654],{"class":94},[84,122892,122859],{"class":158},[84,122894,2543],{"class":94},[84,122896,122864],{"class":158},[1222,122898,122899],{},"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":66,"searchDepth":98,"depth":98,"links":122901},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122561,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122908,"title":122909,"body":122910,"description":1249,"extension":1250,"meta":122924,"navigation":1252,"path":122925,"seo":122926,"stem":122927,"__hash__":122928},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122911,"toc":122922},[122912,122915],[10,122913,122909],{"id":122914},"_5-各种环境配置",[19,122916,122917],{},[208,122918,122921],{"href":122919,"rel":122920},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[212],"电控组环境搭建大全",{"title":66,"searchDepth":98,"depth":98,"links":122923},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122909,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122930,"title":122931,"body":122932,"description":1249,"extension":1250,"meta":123279,"navigation":1252,"path":123280,"seo":123281,"stem":123282,"__hash__":123283},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122933,"toc":123271},[122934,122937,122941,122945,122949,122954,122961,122965,123257,123261,123268],[10,122935,122931],{"id":122936},"_6-拓展功能",[14,122938,122940],{"id":122939},"_61-wine","6.1 Wine",[14,122942,122944],{"id":122943},"_62-android","6.2 Android",[198,122946,122948],{"id":122947},"_621-i卡a卡","6.2.1 I卡、A卡",[26,122950,122951],{},[29,122952,122953],{},"Wayland-Waydroid(体验超级好)",[19,122955,122956,122957],{},"Waydroid 官网与安装指南：",[208,122958,122959],{"href":122959,"rel":122960},"https:\u002F\u002Fwaydro.id\u002F",[212],[198,122962,122964],{"id":122963},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,122966,122967],{},[29,122968,122969,122970,122972,122973,122977,122979,122982,122987,123184],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54865,122971],{},"BlissOS 官网下载：",[208,122974,122975],{"href":122975,"rel":122976},"https:\u002F\u002Fblissos.org\u002F",[212],[54865,122978],{},[2643,122980],{"alt":66,"src":122981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,122983,122984],{"start":106},[29,122985,122986],{},"比较推荐的配置",[60,122988,122990],{"className":118430,"code":122989,"language":118432,"meta":66,"style":66},"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",[39,122991,122992,122999,123009,123019,123029,123041,123051,123058,123068,123077,123086,123096,123106,123115,123125,123135,123147,123157,123166,123176],{"__ignoreMap":66},[84,122993,122994,122997],{"class":86,"line":87},[84,122995,122996],{"class":90},"qemu-system-x86_64",[84,122998,25842],{"class":94},[84,123000,123001,123004,123007],{"class":86,"line":98},[84,123002,123003],{"class":94},"        -M",[84,123005,123006],{"class":158}," q35,vmport=off",[84,123008,25842],{"class":94},[84,123010,123011,123014,123017],{"class":86,"line":106},[84,123012,123013],{"class":94},"        -accel",[84,123015,123016],{"class":158}," kvm",[84,123018,25842],{"class":94},[84,123020,123021,123024,123027],{"class":86,"line":112},[84,123022,123023],{"class":94},"        -cpu",[84,123025,123026],{"class":158}," qemu64,+sse3,+sse4.2",[84,123028,25842],{"class":94},[84,123030,123031,123034,123037,123039],{"class":86,"line":425},[84,123032,123033],{"class":94},"        -smp",[84,123035,123036],{"class":158}," 8,cores=",[84,123038,1604],{"class":94},[84,123040,25842],{"class":94},[84,123042,123043,123046,123049],{"class":86,"line":2395},[84,123044,123045],{"class":94},"        -m",[84,123047,123048],{"class":158}," 6G",[84,123050,25842],{"class":94},[84,123052,123053,123056],{"class":86,"line":2401},[84,123054,123055],{"class":94},"        -usb",[84,123057,25842],{"class":94},[84,123059,123060,123063,123066],{"class":86,"line":2492},[84,123061,123062],{"class":94},"        -device",[84,123064,123065],{"class":158}," virtio-tablet",[84,123067,25842],{"class":94},[84,123069,123070,123072,123075],{"class":86,"line":2498},[84,123071,123062],{"class":94},[84,123073,123074],{"class":158}," virtio-keyboard",[84,123076,25842],{"class":94},[84,123078,123079,123081,123084],{"class":86,"line":2510},[84,123080,123062],{"class":94},[84,123082,123083],{"class":158}," usb-tablet",[84,123085,25842],{"class":94},[84,123087,123088,123091,123094],{"class":86,"line":2793},[84,123089,123090],{"class":94},"        -bios",[84,123092,123093],{"class":158}," OVMF-pure-efi64.fd",[84,123095,25842],{"class":94},[84,123097,123098,123101,123104],{"class":86,"line":2798},[84,123099,123100],{"class":94},"        -net",[84,123102,123103],{"class":158}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[84,123105,25842],{"class":94},[84,123107,123108,123110,123113],{"class":86,"line":2804},[84,123109,123100],{"class":94},[84,123111,123112],{"class":158}," nic,model=virtio",[84,123114,25842],{"class":94},[84,123116,123117,123120,123123],{"class":86,"line":2809},[84,123118,123119],{"class":94},"        -audio",[84,123121,123122],{"class":158}," sdl,model=hda",[84,123124,25842],{"class":94},[84,123126,123127,123130,123133],{"class":86,"line":2823},[84,123128,123129],{"class":94},"        -display",[84,123131,123132],{"class":158}," sdl,gl=on,show-cursor=on",[84,123134,25842],{"class":94},[84,123136,123137,123139,123142,123145],{"class":86,"line":2828},[84,123138,123062],{"class":94},[84,123140,123141],{"class":158}," virtio-vga-gl,xres=1920,yres=",[84,123143,123144],{"class":94},"1080",[84,123146,25842],{"class":94},[84,123148,123149,123152,123155],{"class":86,"line":2834},[84,123150,123151],{"class":94},"        -drive",[84,123153,123154],{"class":158}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[84,123156,25842],{"class":94},[84,123158,123159,123161,123164],{"class":86,"line":2855},[84,123160,123151],{"class":94},[84,123162,123163],{"class":158}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[84,123165,25842],{"class":94},[84,123167,123168,123171,123174],{"class":86,"line":2860},[84,123169,123170],{"class":94},"        -monitor",[84,123172,123173],{"class":158}," stdio",[84,123175,25842],{"class":94},[84,123177,123178,123181],{"class":86,"line":2874},[84,123179,123180],{"class":94},"        -serial",[84,123182,123183],{"class":158}," none\n",[26,123185,123186],{"start":425},[29,123187,658,123188],{},[26,123189,123190,123193,123249],{},[29,123191,123192],{},"全屏：Ctrl+Alt+F",[29,123194,123195,123196,123201],{},"adb调试",[26,123197,123198],{},[29,123199,123200],{},"使Linux与Android用ADB连接。",[60,123202,123204],{"className":118430,"code":123203,"language":118432,"meta":66,"style":66},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[39,123205,123206,123211,123222,123227,123239,123244],{"__ignoreMap":66},[84,123207,123208],{"class":86,"line":87},[84,123209,123210],{"class":1378},"# 连接安卓\n",[84,123212,123213,123216,123219],{"class":86,"line":98},[84,123214,123215],{"class":90},"adb",[84,123217,123218],{"class":158}," connect",[84,123220,123221],{"class":94}," 127.0.0.1\n",[84,123223,123224],{"class":86,"line":106},[84,123225,123226],{"class":1378},"# 打开shell\n",[84,123228,123229,123231,123233,123236],{"class":86,"line":112},[84,123230,123215],{"class":90},[84,123232,28041],{"class":94},[84,123234,123235],{"class":158}," 127.0.0.1:5555",[84,123237,123238],{"class":158}," shell\n",[84,123240,123241],{"class":86,"line":425},[84,123242,123243],{"class":1378},"# 使用root权限\n",[84,123245,123246],{"class":86,"line":2395},[84,123247,123248],{"class":90},"su\n",[29,123250,123251,123252],{},"中文输入法",[26,123253,123254],{},[29,123255,123256],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123258,123260],{"id":123259},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123262,123263,123264],{},"rEFInd 官网与文档：",[208,123265,123266],{"href":123266,"rel":123267},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[212],[1222,123269,123270],{},"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":66,"searchDepth":98,"depth":98,"links":123272},[123273,123274,123278],{"id":122939,"depth":98,"text":122940},{"id":122943,"depth":98,"text":122944,"children":123275},[123276,123277],{"id":122947,"depth":106,"text":122948},{"id":122963,"depth":106,"text":122964},{"id":123259,"depth":98,"text":123260},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122931,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123285,"title":123286,"body":123287,"description":1249,"extension":1250,"meta":126585,"navigation":1252,"path":126586,"seo":126587,"stem":126588,"__hash__":126589},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123288,"toc":126559},[123289,123292,123296,123299,123306,123556,123559,123631,123634,123638,123642,123647,123650,123653,123656,123661,123664,123667,123670,123675,123678,123683,123686,123689,123694,123697,123702,123705,123709,123713,123716,123721,123724,123738,123741,123744,123753,123756,123765,123768,123771,123780,123783,123792,123795,123798,123807,123810,123813,123828,123831,123834,123843,123848,123851,123854,123863,123866,123875,123878,123887,123890,123899,123904,123907,123915,123920,123923,123932,123935,123943,123948,123951,123960,123963,123966,123970,123973,123978,123981,123986,124000,124005,124010,124021,124026,124032,124037,124052,124057,124060,124065,124070,124075,124083,124088,124095,124100,124111,124116,124119,124123,124126,124129,124134,124137,124156,124161,124164,124173,124178,124181,124203,124206,124236,124239,124244,124247,124261,124266,124285,124288,124291,124296,124308,124313,124318,124321,124326,124329,124344,124347,124352,124357,124361,124366,124406,124409,124413,124419,124425,124430,124433,124440,124445,124452,124455,124458,124465,124479,124482,124542,124545,124559,124571,124574,124577,124580,124644,124647,124650,124653,124673,124676,124681,124688,124692,124695,124699,124704,124709,124713,124716,124719,124761,124766,124769,124791,124806,124808,124813,124825,124885,124887,124889,124943,124945,124947,124953,124958,124961,124966,124970,124973,125035,125040,125043,125045,125049,125061,125143,125145,125147,125201,125207,125209,125213,125218,125220,125225,125229,125249,125284,125288,125291,125294,125297,125304,125307,125319,125322,125337,125340,125359,125407,125410,125427,125430,125443,125448,125451,125460,125475,125487,125525,125530,125539,125544,125549,125575,125584,125588,125592,125597,125600,125604,125608,125613,125616,125621,125624,125629,125632,125637,125640,125644,125649,125652,125657,125660,125664,125669,125672,125677,125680,125685,125688,125692,125697,125700,125705,125708,125713,125716,125720,125725,125728,125733,125736,125741,125744,125749,125752,125757,125760,125765,125768,125772,125777,125780,125785,125792,125796,125801,125804,125809,125812,125816,125821,125824,125827,125830,125833,125836,125840,125843,125853,125858,125863,125885,125890,125895,125902,125906,125911,125914,125917,125922,125925,125928,125931,125934,125937,125940,125943,125946,125949,125952,125955,125958,125963,125968,125973,125978,125983,125988,125993,125996,126000,126003,126007,126012,126017,126022,126027,126031,126037,126045,126050,126053,126058,126073,126076,126081,126115,126130,126133,126188,126214,126226,126229,126238,126241,126256,126261,126264,126270,126275,126278,126283,126286,126291,126296,126303,126306,126321,126324,126359,126364,126372,126410,126413,126416,126421,126424,126429,126440,126474,126479,126482,126491,126496,126502,126505,126510,126519,126524,126527,126530,126535,126543,126546,126551,126556],[10,123290,123286],{"id":123291},"_7-其他操作",[14,123293,123295],{"id":123294},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123297,123298],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123300,123301,123302,123305],{},"进入工控机的硬盘目录，进入",[39,123303,123304],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[60,123307,123311],{"className":123308,"code":123309,"language":123310,"meta":66,"style":66},"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",[39,123312,123313,123321,123332,123339,123346,123358,123365,123377,123388,123399,123406,123413,123420,123432,123444,123451,123463,123475,123482,123494,123506,123518,123529,123536,123547],{"__ignoreMap":66},[84,123314,123315,123318],{"class":86,"line":87},[84,123316,123317],{"class":52449},"network",[84,123319,123320],{"class":154},": \n",[84,123322,123323,123326,123328,123330],{"class":86,"line":98},[84,123324,123325],{"class":52449},"  version",[84,123327,52586],{"class":154},[84,123329,1397],{"class":94},[84,123331,3852],{"class":154},[84,123333,123334,123337],{"class":86,"line":106},[84,123335,123336],{"class":52449},"  wifis",[84,123338,123320],{"class":154},[84,123340,123341,123344],{"class":86,"line":112},[84,123342,123343],{"class":52449},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[84,123345,123320],{"class":154},[84,123347,123348,123351,123353,123356],{"class":86,"line":425},[84,123349,123350],{"class":52449},"      renderer",[84,123352,52586],{"class":154},[84,123354,123355],{"class":158},"NetworkManager",[84,123357,3852],{"class":154},[84,123359,123360,123363],{"class":86,"line":2395},[84,123361,123362],{"class":52449},"      match",[84,123364,123320],{"class":154},[84,123366,123367,123370,123372,123375],{"class":86,"line":2401},[84,123368,123369],{"class":52449},"        name",[84,123371,52586],{"class":154},[84,123373,123374],{"class":158},"\"wlan0\"",[84,123376,3852],{"class":154},[84,123378,123379,123382,123384,123386],{"class":86,"line":2492},[84,123380,123381],{"class":52449},"      dhcp4",[84,123383,52586],{"class":154},[84,123385,2543],{"class":94},[84,123387,3852],{"class":154},[84,123389,123390,123393,123395,123397],{"class":86,"line":2498},[84,123391,123392],{"class":52449},"      dhcp6",[84,123394,52586],{"class":154},[84,123396,2543],{"class":94},[84,123398,3852],{"class":154},[84,123400,123401,123404],{"class":86,"line":2510},[84,123402,123403],{"class":52449},"      access-points",[84,123405,123320],{"class":154},[84,123407,123408,123411],{"class":86,"line":2793},[84,123409,123410],{"class":158},"        \"EMIS_Vinci_Robocon_5G\"",[84,123412,123320],{"class":154},[84,123414,123415,123418],{"class":86,"line":2798},[84,123416,123417],{"class":52449},"          auth",[84,123419,123320],{"class":154},[84,123421,123422,123425,123427,123430],{"class":86,"line":2804},[84,123423,123424],{"class":52449},"            key-management",[84,123426,52586],{"class":154},[84,123428,123429],{"class":158},"\"psk\"",[84,123431,3852],{"class":154},[84,123433,123434,123437,123439,123442],{"class":86,"line":2809},[84,123435,123436],{"class":52449},"            password",[84,123438,52586],{"class":154},[84,123440,123441],{"class":158},"\"vinci666\"",[84,123443,3852],{"class":154},[84,123445,123446,123449],{"class":86,"line":2823},[84,123447,123448],{"class":52449},"          networkmanager",[84,123450,123320],{"class":154},[84,123452,123453,123456,123458,123461],{"class":86,"line":2828},[84,123454,123455],{"class":52449},"            uuid",[84,123457,52586],{"class":154},[84,123459,123460],{"class":158},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[84,123462,3852],{"class":154},[84,123464,123465,123468,123470,123473],{"class":86,"line":2834},[84,123466,123467],{"class":52449},"            name",[84,123469,52586],{"class":154},[84,123471,123472],{"class":158},"\"EMIS_Vinci_Robocon_5G\"",[84,123474,3852],{"class":154},[84,123476,123477,123480],{"class":86,"line":2855},[84,123478,123479],{"class":52449},"            passthrough",[84,123481,123320],{"class":154},[84,123483,123484,123487,123489,123492],{"class":86,"line":2860},[84,123485,123486],{"class":52449},"              wifi-security.auth-alg",[84,123488,52586],{"class":154},[84,123490,123491],{"class":158},"\"open\"",[84,123493,3852],{"class":154},[84,123495,123496,123499,123501,123504],{"class":86,"line":2874},[84,123497,123498],{"class":52449},"              ipv6.addr-gen-mode",[84,123500,52586],{"class":154},[84,123502,123503],{"class":158},"\"default\"",[84,123505,3852],{"class":154},[84,123507,123508,123511,123513,123516],{"class":86,"line":2879},[84,123509,123510],{"class":52449},"              ipv6.ip6-privacy",[84,123512,52586],{"class":154},[84,123514,123515],{"class":158},"\"-1\"",[84,123517,3852],{"class":154},[84,123519,123520,123523,123525,123527],{"class":86,"line":2908},[84,123521,123522],{"class":52449},"              proxy._",[84,123524,52586],{"class":154},[84,123526,8824],{"class":158},[84,123528,3852],{"class":154},[84,123530,123531,123534],{"class":86,"line":2913},[84,123532,123533],{"class":52449},"      networkmanager",[84,123535,123320],{"class":154},[84,123537,123538,123541,123543,123545],{"class":86,"line":2930},[84,123539,123540],{"class":52449},"        uuid",[84,123542,52586],{"class":154},[84,123544,123460],{"class":158},[84,123546,3852],{"class":154},[84,123548,123549,123551,123553],{"class":86,"line":2935},[84,123550,123369],{"class":52449},[84,123552,52586],{"class":154},[84,123554,123555],{"class":158},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123557,123558],{},"将其改为新wifi的名和密码：",[60,123560,123562],{"className":123308,"code":123561,"language":123310,"meta":66,"style":66},"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",[39,123563,123564,123570,123579,123585,123592,123601,123609,123615,123621],{"__ignoreMap":66},[84,123565,123566,123568],{"class":86,"line":87},[84,123567,123317],{"class":52449},[84,123569,4917],{"class":154},[84,123571,123572,123574,123576],{"class":86,"line":98},[84,123573,123325],{"class":52449},[84,123575,52586],{"class":154},[84,123577,123578],{"class":94},"2\n",[84,123580,123581,123583],{"class":86,"line":106},[84,123582,123336],{"class":52449},[84,123584,4917],{"class":154},[84,123586,123587,123590],{"class":86,"line":112},[84,123588,123589],{"class":52449},"    wlan0",[84,123591,4917],{"class":154},[84,123593,123594,123596,123598],{"class":86,"line":425},[84,123595,123381],{"class":52449},[84,123597,52586],{"class":154},[84,123599,123600],{"class":94},"true\n",[84,123602,123603,123605,123607],{"class":86,"line":2395},[84,123604,123392],{"class":52449},[84,123606,52586],{"class":154},[84,123608,123600],{"class":94},[84,123610,123611,123613],{"class":86,"line":2401},[84,123612,123403],{"class":52449},[84,123614,4917],{"class":154},[84,123616,123617,123619],{"class":86,"line":2492},[84,123618,123410],{"class":158},[84,123620,4917],{"class":154},[84,123622,123623,123626,123628],{"class":86,"line":2498},[84,123624,123625],{"class":52449},"          password",[84,123627,52586],{"class":154},[84,123629,123630],{"class":158},"\"vinci666\"\n",[19,123632,123633],{},"工控机开机即可连上网。",[14,123635,123637],{"id":123636},"_72-ssh远程开发","7.2 SSH远程开发",[198,123639,123641],{"id":123640},"_721-环境准备","7.2.1 环境准备",[19,123643,123644],{},[1464,123645,123646],{},"1.硬件准备",[19,123648,123649],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123651,123652],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123654,123655],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123657,123658],{},[1464,123659,123660],{},"2.设置固定IP",[19,123662,123663],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123665,123666],{},"1.进入设置界面",[19,123668,123669],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123671,123672],{},[2643,123673],{"alt":66,"src":123674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123676,123677],{},"2.配置所连接的网络",[19,123679,123680],{},[2643,123681],{"alt":66,"src":123682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123684,123685],{},"3.设置固定IP",[19,123687,123688],{},"查看当前IP地址。",[19,123690,123691],{},[2643,123692],{"alt":66,"src":123693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123695,123696],{},"设置固定IP。",[19,123698,123699],{},[2643,123700],{"alt":66,"src":123701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123703,123704],{},"至此，IP配置完毕。",[198,123706,123708],{"id":123707},"_722-环境搭建","7.2.2 环境搭建",[19,123710,123711],{},[1464,123712,26916],{},[19,123714,123715],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123717,123718],{},[1464,123719,123720],{},"实现",[19,123722,123723],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,123725,123726,123729,123732,123735],{},[29,123727,123728],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,123730,123731],{},"远程主机启动SSH服务；",[29,123733,123734],{},"本地主机登陆远程主机；",[29,123736,123737],{},"实现数据传输。",[19,123739,123740],{},"1.安装SSH客户端与服务端",[19,123742,123743],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[60,123745,123747],{"className":121942,"code":123746,"language":121944,"meta":121945,"style":66}," sudo apt install openssh-server\n",[39,123748,123749],{"__ignoreMap":66},[84,123750,123751],{"class":86,"line":87},[84,123752,123746],{},[19,123754,123755],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[60,123757,123759],{"className":121942,"code":123758,"language":121944,"meta":121945,"style":66},"sudo apt install openssh-client\n",[39,123760,123761],{"__ignoreMap":66},[84,123762,123763],{"class":86,"line":87},[84,123764,123758],{},[19,123766,123767],{},"2.远程主机启动SSH服务",[19,123769,123770],{},"远程主机启动 ssh 服务命令如下：",[60,123772,123774],{"className":121942,"code":123773,"language":121944,"meta":121945,"style":66},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[39,123775,123776],{"__ignoreMap":66},[84,123777,123778],{"class":86,"line":87},[84,123779,123773],{},[19,123781,123782],{},"启动后可使用如下命令查看服务是否正常运行：",[60,123784,123786],{"className":121942,"code":123785,"language":121944,"meta":121945,"style":66},"ps -e | grep ssh\n",[39,123787,123788],{"__ignoreMap":66},[84,123789,123790],{"class":86,"line":87},[84,123791,123785],{},[19,123793,123794],{},"如果启动成功，会包含 sshd 程序。",[19,123796,123797],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[60,123799,123801],{"className":121942,"code":123800,"language":121944,"meta":121945,"style":66},"sudo systemctl enable ssh\n",[39,123802,123803],{"__ignoreMap":66},[84,123804,123805],{"class":86,"line":87},[84,123806,123800],{},[19,123808,123809],{},"3.本地远程登录",[19,123811,123812],{},"登录远程主机可以调用如下命令:",[60,123814,123816],{"className":118430,"code":123815,"language":118432,"meta":66,"style":66},"ssh -X 用户名@ip地址\n",[39,123817,123818],{"__ignoreMap":66},[84,123819,123820,123822,123825],{"class":86,"line":87},[84,123821,122773],{"class":90},[84,123823,123824],{"class":94}," -X",[84,123826,123827],{"class":158}," 用户名@ip地址\n",[19,123829,123830],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123832,123833],{},"如果退出，可以调用exit命令：",[60,123835,123837],{"className":121942,"code":123836,"language":121944,"meta":121945,"style":66},"exit\n",[39,123838,123839],{"__ignoreMap":66},[84,123840,123841],{"class":86,"line":87},[84,123842,123836],{},[19,123844,123845],{},[1464,123846,123847],{},"4.实现数据传输",[19,123849,123850],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123852,123853],{},"上传文件指令格式如下：",[60,123855,123857],{"className":121942,"code":123856,"language":121944,"meta":121945,"style":66},"scp 本地文件路径 账号@ip:路径\n",[39,123858,123859],{"__ignoreMap":66},[84,123860,123861],{"class":86,"line":87},[84,123862,123856],{},[19,123864,123865],{},"上传文件夹指令格式如下：",[60,123867,123869],{"className":121942,"code":123868,"language":121944,"meta":121945,"style":66},"scp -r 本地文件夹路径 账号@ip:路径\n",[39,123870,123871],{"__ignoreMap":66},[84,123872,123873],{"class":86,"line":87},[84,123874,123868],{},[19,123876,123877],{},"下载文件指令格式如下：",[60,123879,123881],{"className":121942,"code":123880,"language":121944,"meta":121945,"style":66},"scp 账号@ip:路径 本地文件夹路径\n",[39,123882,123883],{"__ignoreMap":66},[84,123884,123885],{"class":86,"line":87},[84,123886,123880],{},[19,123888,123889],{},"下载文件夹指令格式如下：",[60,123891,123893],{"className":121942,"code":123892,"language":121944,"meta":121945,"style":66},"scp -r 账号@ip:路径 本地文件夹路径\n",[39,123894,123895],{"__ignoreMap":66},[84,123896,123897],{"class":86,"line":87},[84,123898,123892],{},[19,123900,123901],{},[1464,123902,123903],{},"优化",[19,123905,123906],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,123908,123909,123912],{},[29,123910,123911],{},"本地生成密钥对；",[29,123913,123914],{},"将公钥上传至远程主机。",[19,123916,123917],{},[1464,123918,123919],{},"1.生成密钥对",[19,123921,123922],{},"本地客户端生成公私钥：（一路回车默认即可）",[60,123924,123926],{"className":121942,"code":123925,"language":121944,"meta":121945,"style":66},"ssh-keygen\n",[39,123927,123928],{"__ignoreMap":66},[84,123929,123930],{"class":86,"line":87},[84,123931,123925],{},[19,123933,123934],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,123936,123937,123940],{},[29,123938,123939],{},"id_rsa （私钥）；",[29,123941,123942],{},"id_rsa.pub (公钥)。",[19,123944,123945],{},[1464,123946,123947],{},"2.公钥上传",[19,123949,123950],{},"上传指令如下：",[60,123952,123954],{"className":121942,"code":123953,"language":121944,"meta":121945,"style":66},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[39,123955,123956],{"__ignoreMap":66},[84,123957,123958],{"class":86,"line":87},[84,123959,123953],{},[19,123961,123962],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123964,123965],{},"以后再远程登录就无需录入密码了。",[198,123967,123969],{"id":123968},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123971,123972],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123974,123975],{},[1464,123976,123977],{},"1.准备工作",[19,123979,123980],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123982,123983],{},[1464,123984,123985],{},"2.为VScode安装远程开发插件",[19,123987,123988,123989,123992,123993,123996,123997,55],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[39,123990,123991],{},"扩展：商店","的搜索栏输入",[39,123994,123995],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[39,123998,123999],{},"安装",[19,124001,124002],{},[2643,124003],{"alt":66,"src":124004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124006,124007],{},[1464,124008,124009],{},"3.配置远程连接",[19,124011,124012,124013,124016,124017,124020],{},"步骤1：使用快捷键",[39,124014,124015],{},"ctrl + shift + p","打开命令输入窗口，并输入",[39,124018,124019],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124022,124023],{},[2643,124024],{"alt":66,"src":124025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124027,124028,124029,55],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[39,124030,124031],{},"Add New SSH Host",[19,124033,124034],{},[2643,124035],{"alt":66,"src":124036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124038,124039,124040,124043,124044,124047,124048,124051],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[39,124041,124042],{},"ssh +X ubuntu@192.168.43.164","，其中，",[39,124045,124046],{},"ubuntu","需要替换为你的登录用户名，",[39,124049,124050],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124053,124054],{},[2643,124055],{"alt":66,"src":124056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124058,124059],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124061,124062],{},[2643,124063],{"alt":66,"src":124064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124066,124067],{},[2643,124068],{"alt":66,"src":124069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124071,124072],{},[1464,124073,124074],{},"4.使用",[19,124076,124077,124078,124016,124080,124082],{},"步骤1：继续使用快捷键",[39,124079,124015],{},[39,124081,124019],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124084,124085],{},[2643,124086],{"alt":66,"src":124087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124089,124090,124091,124094],{},"或者，也可以点击侧边栏的",[39,124092,124093],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124096,124097],{},[2643,124098],{"alt":66,"src":124099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124101,124102,124103,124106,124107,124110],{},"步骤2：选择菜单栏的",[39,124104,124105],{},"文件","下的",[39,124108,124109],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124112,124113],{},[2643,124114],{"alt":66,"src":124115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124117,124118],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124120,124122],{"id":124121},"_73-远程桌面","7.3 远程桌面",[19,124124,124125],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124127,124128],{},"我们选择使用VNC来看。",[26,124130,124131],{},[29,124132,124133],{},"安装VNC服务器：",[19,124135,124136],{},"这里以TigerVNC为例进行安装：",[60,124138,124140],{"className":118430,"code":124139,"language":118432,"meta":66,"style":66},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[39,124141,124142],{"__ignoreMap":66},[84,124143,124144,124146,124148,124150,124153],{"class":86,"line":87},[84,124145,311],{"class":90},[84,124147,314],{"class":158},[84,124149,275],{"class":158},[84,124151,124152],{"class":158}," tigervnc-standalone-server",[84,124154,124155],{"class":158}," tigervnc-common\n",[26,124157,124158],{"start":98},[29,124159,124160],{},"设置VNC密码：",[19,124162,124163],{},"为VNC用户设置密码，运行以下命令：",[60,124165,124167],{"className":118430,"code":124166,"language":118432,"meta":66,"style":66},"vncpasswd\n",[39,124168,124169],{"__ignoreMap":66},[84,124170,124171],{"class":86,"line":87},[84,124172,124166],{"class":90},[26,124174,124175],{"start":106},[29,124176,124177],{},"配置VNC启动脚本:",[19,124179,124180],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[60,124182,124184],{"className":118430,"code":124183,"language":118432,"meta":66,"style":66},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[39,124185,124186,124195],{"__ignoreMap":66},[84,124187,124188,124190,124192],{"class":86,"line":87},[84,124189,102404],{"class":90},[84,124191,30373],{"class":94},[84,124193,124194],{"class":158}," ~\u002F.vnc\n",[84,124196,124197,124200],{"class":86,"line":98},[84,124198,124199],{"class":90},"nano",[84,124201,124202],{"class":158}," ~\u002F.vnc\u002Fxstartup\n",[19,124204,124205],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[60,124207,124209],{"className":118430,"code":124208,"language":118432,"meta":66,"style":66},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[39,124210,124211,124216,124224,124231],{"__ignoreMap":66},[84,124212,124213],{"class":86,"line":87},[84,124214,124215],{"class":1378},"#!\u002Fbin\u002Fsh\n",[84,124217,124218,124221],{"class":86,"line":98},[84,124219,124220],{"class":94},"unset",[84,124222,124223],{"class":158}," SESSION_MANAGER\n",[84,124225,124226,124228],{"class":86,"line":106},[84,124227,124220],{"class":94},[84,124229,124230],{"class":158}," DBUS_SESSION_BUS_ADDRESS\n",[84,124232,124233],{"class":86,"line":112},[84,124234,124235],{"class":90},"gnome-session\n",[19,124237,124238],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124240,124241],{"start":112},[29,124242,124243],{},"给予执行权限：",[19,124245,124246],{},"为xstartup文件设置执行权限：",[60,124248,124250],{"className":118430,"code":124249,"language":118432,"meta":66,"style":66},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[39,124251,124252],{"__ignoreMap":66},[84,124253,124254,124256,124259],{"class":86,"line":87},[84,124255,25776],{"class":90},[84,124257,124258],{"class":158}," +x",[84,124260,124202],{"class":158},[26,124262,124263],{"start":425},[29,124264,124265],{},"启动VNC服务器：",[60,124267,124269],{"className":118430,"code":124268,"language":118432,"meta":66,"style":66},"vncserver -geometry 1920x1080 -localhost=0\n",[39,124270,124271],{"__ignoreMap":66},[84,124272,124273,124276,124279,124282],{"class":86,"line":87},[84,124274,124275],{"class":90},"vncserver",[84,124277,124278],{"class":94}," -geometry",[84,124280,124281],{"class":158}," 1920x1080",[84,124283,124284],{"class":94}," -localhost=0\n",[19,124286,124287],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124289,124290],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124292,124293],{"start":2395},[29,124294,124295],{},"查看已开启的VNC服务器：",[60,124297,124299],{"className":118430,"code":124298,"language":118432,"meta":66,"style":66},"vncserver -list\n",[39,124300,124301],{"__ignoreMap":66},[84,124302,124303,124305],{"class":86,"line":87},[84,124304,124275],{"class":90},[84,124306,124307],{"class":94}," -list\n",[19,124309,124310],{},[2643,124311],{"alt":66,"src":124312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124314,124315],{"start":2401},[29,124316,124317],{},"连接到VNC服务器：",[19,124319,124320],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124322,124323],{"start":2492},[29,124324,124325],{},"停止VNC服务器：",[19,124327,124328],{},"如果需要停止VNC服务器，可以使用以下命令：",[60,124330,124332],{"className":118430,"code":124331,"language":118432,"meta":66,"style":66},"vncserver -kill :1\n",[39,124333,124334],{"__ignoreMap":66},[84,124335,124336,124338,124341],{"class":86,"line":87},[84,124337,124275],{"class":90},[84,124339,124340],{"class":94}," -kill",[84,124342,124343],{"class":158}," :1\n",[19,124345,124346],{},"将:1替换为你实际使用的显示编号。",[19,124348,124349],{},[2643,124350],{"alt":66,"src":124351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124353,124354],{},[2643,124355],{"alt":66,"src":124356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124358,124360],{"id":124359},"_74-usb端口设置","7.4 USB端口设置",[19,124362,124363],{},[1464,124364,124365],{},"首先先配置好权限",[60,124367,124369],{"className":118430,"code":124368,"language":118432,"meta":66,"style":66},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[39,124370,124371,124376,124389,124396,124401],{"__ignoreMap":66},[84,124372,124373],{"class":86,"line":87},[84,124374,124375],{"class":1378},"# 将用户权限提高\n",[84,124377,124378,124380,124382,124384,124387],{"class":86,"line":98},[84,124379,311],{"class":90},[84,124381,27732],{"class":158},[84,124383,27735],{"class":94},[84,124385,124386],{"class":158}," dialout",[84,124388,27740],{"class":154},[84,124390,124391,124393],{"class":86,"line":106},[84,124392,27759],{"class":90},[84,124394,124395],{"class":158}," dialout\n",[84,124397,124398],{"class":86,"line":112},[84,124399,124400],{"class":1378},"# 查看下面命令是否输出dialout（若输出才正常）\n",[84,124402,124403],{"class":86,"line":425},[84,124404,124405],{"class":90},"groups\n",[19,124407,124408],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[198,124410,124412],{"id":124411},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124414,124415,124418],{},[1464,124416,124417],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124420,124421,124424],{},[1464,124422,124423],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124426,124427],{},[1464,124428,124429],{},"流程如下：",[19,124431,124432],{},"（1）.查找设备idVendor和idProduct",[19,124434,124435,124436,124439],{},"接入两个USB设备，在终端调用指令",[39,124437,124438],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124441,124442],{},[2643,124443],{"alt":66,"src":124444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124446,124447,124448,124451],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[39,124449,124450],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124453,124454],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124456,124457],{},"（2）.编写映射规则",[19,124459,124460,124461,124464],{},"在",[39,124462,124463],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[60,124466,124468],{"className":118430,"code":124467,"language":118432,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[39,124469,124470],{"__ignoreMap":66},[84,124471,124472,124474,124476],{"class":86,"line":87},[84,124473,311],{"class":90},[84,124475,119715],{"class":158},[84,124477,124478],{"class":158}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124480,124481],{},"输入如下内容：",[60,124483,124485],{"className":118430,"code":124484,"language":118432,"meta":66,"style":66},"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",[39,124486,124487,124517],{"__ignoreMap":66},[84,124488,124489,124492,124494,124497,124500,124503,124506,124508,124511,124514],{"class":86,"line":87},[84,124490,124491],{"class":154},"KERNEL",[84,124493,867],{"class":129},[84,124495,124496],{"class":158},"=\"ttyUSB*\",",[84,124498,124499],{"class":90}," ATTRS",[84,124501,124502],{"class":158},"{idVendor}==",[84,124504,124505],{"class":90},"\"10c4\"",[84,124507,1688],{"class":90},[84,124509,124510],{"class":158}," ATTRS{idProduct}==\"ea60\",",[84,124512,124513],{"class":158}," MODE:=\"0777\",",[84,124515,124516],{"class":158}," SYMLINK+=\"mylidar\"\n",[84,124518,124519,124521,124523,124525,124527,124529,124532,124534,124537,124539],{"class":86,"line":98},[84,124520,124491],{"class":154},[84,124522,867],{"class":129},[84,124524,124496],{"class":158},[84,124526,124499],{"class":90},[84,124528,124502],{"class":158},[84,124530,124531],{"class":90},"\"1a86\"",[84,124533,1688],{"class":90},[84,124535,124536],{"class":158}," ATTRS{idProduct}==\"7523\",",[84,124538,124513],{"class":158},[84,124540,124541],{"class":158}," SYMLINK+=\"mycar\"\n",[19,124543,124544],{},"代码解释：",[2315,124546,124547,124550,124553,124556],{},[29,124548,124549],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,124551,124552],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,124554,124555],{},"SYMLINK是符号连接，即绑定的别名；",[29,124557,124558],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124560,124561,124562,124565,124568],{},"***小提示：***",[24723,124563,124564],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[39,124566,124567],{},"\u002Fetc\u002Fudev\u002Frule.d",[24723,124569,124570],{},"目录即可。",[19,124572,124573],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124575,124576],{},"（3）.使规则生效",[19,124578,124579],{},"在终端下输入如下指令：",[60,124581,124583],{"className":118430,"code":124582,"language":118432,"meta":66,"style":66},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[39,124584,124585,124590,124602,124613,124617,124622,124635],{"__ignoreMap":66},[84,124586,124587],{"class":86,"line":87},[84,124588,124589],{"class":1378},"# Ubuntu用下方命令\n",[84,124591,124592,124594,124596,124599],{"class":86,"line":98},[84,124593,311],{"class":90},[84,124595,121174],{"class":158},[84,124597,124598],{"class":158}," udev",[84,124600,124601],{"class":158}," reload\n",[84,124603,124604,124606,124608,124610],{"class":86,"line":106},[84,124605,311],{"class":90},[84,124607,121174],{"class":158},[84,124609,124598],{"class":158},[84,124611,124612],{"class":158}," restart\n",[84,124614,124615],{"class":86,"line":112},[84,124616,3578],{"emptyLinePlaceholder":1252},[84,124618,124619],{"class":86,"line":425},[84,124620,124621],{"class":1378},"#Fedora用下方命令\n",[84,124623,124624,124626,124629,124632],{"class":86,"line":2395},[84,124625,311],{"class":90},[84,124627,124628],{"class":158}," udevadm",[84,124630,124631],{"class":158}," control",[84,124633,124634],{"class":94}," --reload\n",[84,124636,124637,124639,124641],{"class":86,"line":2401},[84,124638,311],{"class":90},[84,124640,124628],{"class":158},[84,124642,124643],{"class":158}," trigger\n",[19,124645,124646],{},"再重新插拔设备即可。",[19,124648,124649],{},"（4）.测试",[19,124651,124652],{},"终端下输入如下指令",[60,124654,124656],{"className":118430,"code":124655,"language":118432,"meta":66,"style":66},"ll \u002Fdev | grep ttyUSB\n",[39,124657,124658],{"__ignoreMap":66},[84,124659,124660,124663,124666,124668,124670],{"class":86,"line":87},[84,124661,124662],{"class":90},"ll",[84,124664,124665],{"class":158}," \u002Fdev",[84,124667,26273],{"class":129},[84,124669,31393],{"class":90},[84,124671,124672],{"class":158}," ttyUSB\n",[19,124674,124675],{},"运行结果如下：",[19,124677,124678],{},[2643,124679],{"alt":66,"src":124680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124682,124683,124684,124687],{},"也可以多次插拔USB设备，会发现设备端口",[39,124685,124686],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124689,124690],{},[1464,124691,119096],{},[19,124693,124694],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[198,124696,124698],{"id":124697},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124700,124701,124703],{},[1464,124702,124417],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124705,124706,124708],{},[1464,124707,124423],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124710,124711],{},[1464,124712,124429],{},[19,124714,124715],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124717,124718],{},"调用如下指令查看第一台雷达的USB信息：",[60,124720,124722],{"className":118430,"code":124721,"language":118432,"meta":66,"style":66},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[39,124723,124724,124744],{"__ignoreMap":66},[84,124725,124726,124729,124731,124734,124737,124739,124741],{"class":86,"line":87},[84,124727,124728],{"class":90},"udevadm",[84,124730,70967],{"class":158},[84,124732,124733],{"class":94}," --attribute-walk",[84,124735,124736],{"class":94}," --name=\u002Fdev\u002FttyUSB0",[84,124738,26273],{"class":129},[84,124740,31393],{"class":90},[84,124742,124743],{"class":158}," KERNELS\n",[84,124745,124746,124748,124750,124752,124755,124757,124759],{"class":86,"line":98},[84,124747,124728],{"class":90},[84,124749,70967],{"class":158},[84,124751,124733],{"class":94},[84,124753,124754],{"class":94}," --name=\u002Fdev\u002FttyACM0",[84,124756,26273],{"class":129},[84,124758,31393],{"class":90},[84,124760,124743],{"class":158},[19,124762,124763],{},[2643,124764],{"alt":66,"src":124765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124767,124768],{},"调用如下指令查看第二台雷达的USB信息：",[60,124770,124772],{"className":118430,"code":124771,"language":118432,"meta":66,"style":66},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[39,124773,124774],{"__ignoreMap":66},[84,124775,124776,124778,124780,124782,124785,124787,124789],{"class":86,"line":87},[84,124777,124728],{"class":90},[84,124779,70967],{"class":158},[84,124781,124733],{"class":94},[84,124783,124784],{"class":94}," --name=\u002Fdev\u002FttyUSB1",[84,124786,26273],{"class":129},[84,124788,31393],{"class":90},[84,124790,124743],{"class":158},[19,124792,124793,124794,124797,124798,124801,124802,124805],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[39,124795,124796],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[39,124799,124800],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1464,124803,124804],{},"唯一性标识","”。",[19,124807,124457],{},[19,124809,124460,124810,124812],{},[39,124811,124463],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[60,124814,124815],{"className":118430,"code":124467,"language":118432,"meta":66,"style":66},[39,124816,124817],{"__ignoreMap":66},[84,124818,124819,124821,124823],{"class":86,"line":87},[84,124820,311],{"class":90},[84,124822,119715],{"class":158},[84,124824,124478],{"class":158},[60,124826,124828],{"className":118430,"code":124827,"language":118432,"meta":66,"style":66},"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",[39,124829,124830,124859],{"__ignoreMap":66},[84,124831,124832,124834,124836,124838,124841,124843,124846,124849,124851,124854,124856],{"class":86,"line":87},[84,124833,124491],{"class":154},[84,124835,867],{"class":129},[84,124837,124496],{"class":158},[84,124839,124840],{"class":154}," KERNELS",[84,124842,867],{"class":129},[84,124844,124845],{"class":158},"=\"1-1.3:1.0\",",[84,124847,124848],{"class":90}," MODE:",[84,124850,867],{"class":158},[84,124852,124853],{"class":90},"\"0777\"",[84,124855,1688],{"class":90},[84,124857,124858],{"class":158}," SYMLINK+=\"rplidar_front\"\n",[84,124860,124861,124863,124865,124867,124869,124871,124874,124876,124878,124880,124882],{"class":86,"line":98},[84,124862,124491],{"class":154},[84,124864,867],{"class":129},[84,124866,124496],{"class":158},[84,124868,124840],{"class":154},[84,124870,867],{"class":129},[84,124872,124873],{"class":158},"=\"1-1.4:1.0\",",[84,124875,124848],{"class":90},[84,124877,867],{"class":158},[84,124879,124853],{"class":90},[84,124881,1688],{"class":90},[84,124883,124884],{"class":158}," SYMLINK+=\"rplidar_back\"\n",[19,124886,124576],{},[19,124888,124579],{},[60,124890,124891],{"className":118430,"code":124582,"language":118432,"meta":66,"style":66},[39,124892,124893,124897,124907,124917,124921,124925,124935],{"__ignoreMap":66},[84,124894,124895],{"class":86,"line":87},[84,124896,124589],{"class":1378},[84,124898,124899,124901,124903,124905],{"class":86,"line":98},[84,124900,311],{"class":90},[84,124902,121174],{"class":158},[84,124904,124598],{"class":158},[84,124906,124601],{"class":158},[84,124908,124909,124911,124913,124915],{"class":86,"line":106},[84,124910,311],{"class":90},[84,124912,121174],{"class":158},[84,124914,124598],{"class":158},[84,124916,124612],{"class":158},[84,124918,124919],{"class":86,"line":112},[84,124920,3578],{"emptyLinePlaceholder":1252},[84,124922,124923],{"class":86,"line":425},[84,124924,124621],{"class":1378},[84,124926,124927,124929,124931,124933],{"class":86,"line":2395},[84,124928,311],{"class":90},[84,124930,124628],{"class":158},[84,124932,124631],{"class":158},[84,124934,124634],{"class":94},[84,124936,124937,124939,124941],{"class":86,"line":2401},[84,124938,311],{"class":90},[84,124940,124628],{"class":158},[84,124942,124643],{"class":158},[19,124944,124646],{},[19,124946,124649],{},[19,124948,124652,124949,124952],{},[39,124950,124951],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124954,124955],{},[2643,124956],{"alt":66,"src":124957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124959,124960],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124962,124963,124965],{},[1464,124964,119096],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[198,124967,124969],{"id":124968},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124971,124972],{},"（1）.查看所连接的主机USB接口的信息",[60,124974,124976],{"className":118430,"code":124975,"language":118432,"meta":66,"style":66},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[39,124977,124978,125008],{"__ignoreMap":66},[84,124979,124980,124982,124984,124987,124989,124991,124993,124995,124998,125001,125003,125006],{"class":86,"line":87},[84,124981,124728],{"class":90},[84,124983,70967],{"class":158},[84,124985,124986],{"class":94}," -a",[84,124988,30373],{"class":94},[84,124990,29579],{"class":154},[84,124992,124728],{"class":90},[84,124994,70967],{"class":158},[84,124996,124997],{"class":94}," -q",[84,124999,125000],{"class":158}," path",[84,125002,26279],{"class":94},[84,125004,125005],{"class":158}," \u002Fdev\u002FttyACM0",[84,125007,162],{"class":154},[84,125009,125010,125012,125014,125016,125018,125020,125022,125024,125026,125028,125030,125033],{"class":86,"line":98},[84,125011,124728],{"class":90},[84,125013,70967],{"class":158},[84,125015,124986],{"class":94},[84,125017,30373],{"class":94},[84,125019,29579],{"class":154},[84,125021,124728],{"class":90},[84,125023,70967],{"class":158},[84,125025,124997],{"class":94},[84,125027,125000],{"class":158},[84,125029,26279],{"class":94},[84,125031,125032],{"class":158}," \u002Fdev\u002FttyUSB0",[84,125034,162],{"class":154},[19,125036,125037],{},[2643,125038],{"alt":66,"src":125039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125041,125042],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125044,124457],{},[19,125046,124460,125047,124812],{},[39,125048,124463],{},[60,125050,125051],{"className":118430,"code":124467,"language":118432,"meta":66,"style":66},[39,125052,125053],{"__ignoreMap":66},[84,125054,125055,125057,125059],{"class":86,"line":87},[84,125056,311],{"class":90},[84,125058,119715],{"class":158},[84,125060,124478],{"class":158},[60,125062,125064],{"className":118430,"code":125063,"language":118432,"meta":66,"style":66},"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",[39,125065,125066,125094,125120],{"__ignoreMap":66},[84,125067,125068,125070,125072,125075,125077,125079,125081,125083,125086,125089,125091],{"class":86,"line":87},[84,125069,124491],{"class":154},[84,125071,867],{"class":129},[84,125073,125074],{"class":158},"=\"ttyACM*\",",[84,125076,124499],{"class":90},[84,125078,124502],{"class":158},[84,125080,124531],{"class":90},[84,125082,1688],{"class":90},[84,125084,125085],{"class":158}," ATTRS{idProduct}==\"55d4\",",[84,125087,125088],{"class":158}," ATTRS{serial}==\"0001\",",[84,125090,124513],{"class":158},[84,125092,125093],{"class":158}," SYMLINK+=\"ttyACM_MCU\"\n",[84,125095,125096,125098,125100,125102,125104,125106,125108,125110,125112,125115,125117],{"class":86,"line":98},[84,125097,124491],{"class":154},[84,125099,867],{"class":129},[84,125101,125074],{"class":158},[84,125103,124499],{"class":90},[84,125105,124502],{"class":158},[84,125107,124531],{"class":90},[84,125109,1688],{"class":90},[84,125111,125085],{"class":158},[84,125113,125114],{"class":158}," ATTRS{serial}==\"0002\",",[84,125116,124513],{"class":158},[84,125118,125119],{"class":158}," SYMLINK+=\"ttyACM_Lidar\"\n",[84,125121,125122,125124,125126,125128,125130,125132,125134,125136,125138,125140],{"class":86,"line":106},[84,125123,124491],{"class":154},[84,125125,867],{"class":129},[84,125127,124496],{"class":158},[84,125129,124499],{"class":90},[84,125131,124502],{"class":158},[84,125133,124531],{"class":90},[84,125135,1688],{"class":90},[84,125137,124536],{"class":158},[84,125139,124513],{"class":158},[84,125141,125142],{"class":158}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125144,124576],{},[19,125146,124579],{},[60,125148,125149],{"className":118430,"code":124582,"language":118432,"meta":66,"style":66},[39,125150,125151,125155,125165,125175,125179,125183,125193],{"__ignoreMap":66},[84,125152,125153],{"class":86,"line":87},[84,125154,124589],{"class":1378},[84,125156,125157,125159,125161,125163],{"class":86,"line":98},[84,125158,311],{"class":90},[84,125160,121174],{"class":158},[84,125162,124598],{"class":158},[84,125164,124601],{"class":158},[84,125166,125167,125169,125171,125173],{"class":86,"line":106},[84,125168,311],{"class":90},[84,125170,121174],{"class":158},[84,125172,124598],{"class":158},[84,125174,124612],{"class":158},[84,125176,125177],{"class":86,"line":112},[84,125178,3578],{"emptyLinePlaceholder":1252},[84,125180,125181],{"class":86,"line":425},[84,125182,124621],{"class":1378},[84,125184,125185,125187,125189,125191],{"class":86,"line":2395},[84,125186,311],{"class":90},[84,125188,124628],{"class":158},[84,125190,124631],{"class":158},[84,125192,124634],{"class":94},[84,125194,125195,125197,125199],{"class":86,"line":2401},[84,125196,311],{"class":90},[84,125198,124628],{"class":158},[84,125200,124643],{"class":158},[19,125202,125203,125204],{},"再重新插拔设备即可，或者 ",[1464,125205,125206],{},"直接重启系统。",[19,125208,124649],{},[19,125210,124652,125211,124952],{},[39,125212,124951],{},[19,125214,125215],{},[2643,125216],{"alt":66,"src":125217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125219,124960],{},[19,125221,125222,125224],{},[1464,125223,119096],{}," 一些设备可能没有串口号等。",[198,125226,125228],{"id":125227},"_744-其他注意事项","7.4.4 其他注意事项",[19,125230,125231,125232,125234,125235,125238,125239,19580,125242,125245,125246,125248],{},"并非所有的USB设备端口号都是",[39,125233,124686],{},"的格式，比如Arduino的端口号可能是",[39,125236,125237],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[39,125240,125241],{},"videon",[39,125243,125244],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[39,125247,125241],{},"端口，绑定时需要关联的也是该接口。",[19,125250,125251,125252,125255,125256,125259,125260,125262,125263,125266,125267,125270,125271,125274,125275,125274,125278,125274,125281,55],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[39,125253,125254],{},"KERNEL==\"ttyUSB*\"","修改为",[39,125257,125258],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[39,125261,125254],{},"修改为类似于",[39,125264,125265],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[39,125268,125269],{},"video[0,2,4,6]","表示可以绑定的端口为",[39,125272,125273],{},"video0","或",[39,125276,125277],{},"video2",[39,125279,125280],{},"video4",[39,125282,125283],{},"video6",[14,125285,125287],{"id":125286},"_75-挂载内网网页","7.5 挂载内网网页",[19,125289,125290],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125292,125293],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125295,125296],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125298,125299,125300],{},"Termux 下载地址（F-Droid）：",[208,125301,125302],{"href":125302,"rel":125303},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[212],[19,125305,125306],{},"首先打开app后，先更新软件缓存：",[60,125308,125310],{"className":118430,"code":125309,"language":118432,"meta":66,"style":66},"pkg update\n",[39,125311,125312],{"__ignoreMap":66},[84,125313,125314,125317],{"class":86,"line":87},[84,125315,125316],{"class":90},"pkg",[84,125318,317],{"class":158},[19,125320,125321],{},"然后换源",[60,125323,125325],{"className":118430,"code":125324,"language":118432,"meta":66,"style":66},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[39,125326,125327],{"__ignoreMap":66},[84,125328,125329,125331,125334],{"class":86,"line":87},[84,125330,124199],{"class":90},[84,125332,125333],{"class":154}," $PREFIX",[84,125335,125336],{"class":158},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125338,125339],{},"将该文件内容替换为下面：",[60,125341,125343],{"className":118430,"code":125342,"language":118432,"meta":66,"style":66},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[39,125344,125345],{"__ignoreMap":66},[84,125346,125347,125350,125353,125356],{"class":86,"line":87},[84,125348,125349],{"class":90},"deb",[84,125351,125352],{"class":158}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[84,125354,125355],{"class":158}," stable",[84,125357,125358],{"class":158}," main\n",[2315,125360,125361,125388],{},[29,125362,125363,125364,125366,125367],{},"如果你使用的是",[39,125365,124199],{},"编辑器：",[2315,125368,125369,125376,125382],{},[29,125370,125371,125372,125375],{},"按 ",[39,125373,125374],{},"Ctrl+O"," 保存文件。",[29,125377,125371,125378,125381],{},[39,125379,125380],{},"Enter"," 确认文件名。",[29,125383,125371,125384,125387],{},[39,125385,125386],{},"Ctrl+X"," 退出编辑器。",[29,125389,125363,125390,125366,125393],{},[39,125391,125392],{},"vim",[2315,125394,125395,125401],{},[29,125396,125371,125397,125400],{},[39,125398,125399],{},"Esc"," 退出编辑模式。",[29,125402,125403,125404,125406],{},"输入 ",[39,125405,120352],{}," 保存并退出。",[19,125408,125409],{},"接下来重新更新软件源：",[60,125411,125413],{"className":118430,"code":125412,"language":118432,"meta":66,"style":66},"pkg update && pkg upgrade\n",[39,125414,125415],{"__ignoreMap":66},[84,125416,125417,125419,125421,125423,125425],{"class":86,"line":87},[84,125418,125316],{"class":90},[84,125420,118480],{"class":158},[84,125422,27353],{"class":154},[84,125424,125316],{"class":90},[84,125426,118466],{"class":158},[19,125428,125429],{},"安装python：",[60,125431,125433],{"className":118430,"code":125432,"language":118432,"meta":66,"style":66},"pkg install python\n",[39,125434,125435],{"__ignoreMap":66},[84,125436,125437,125439,125441],{"class":86,"line":87},[84,125438,125316],{"class":90},[84,125440,275],{"class":158},[84,125442,278],{"class":158},[19,125444,125445,27631],{},[1464,125446,125447],{},"通过Termux访问设备存储",[19,125449,125450],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[60,125452,125454],{"className":118430,"code":125453,"language":118432,"meta":66,"style":66},"termux-setup-storage\n",[39,125455,125456],{"__ignoreMap":66},[84,125457,125458],{"class":86,"line":87},[84,125459,125453],{"class":90},[26,125461,125462],{},[29,125463,125464,27631,125467],{},[1464,125465,125466],{},"进入HTML文件所在的目录",[26,125468,125469],{},[29,125470,125471,125472,125474],{},"使用",[39,125473,102414],{},"命令进入HTML文件所在的目录：",[60,125476,125478],{"className":118430,"code":125477,"language":118432,"meta":66,"style":66},"cd ~\u002Fyour_html_folder\n",[39,125479,125480],{"__ignoreMap":66},[84,125481,125482,125484],{"class":86,"line":87},[84,125483,102414],{"class":94},[84,125485,125486],{"class":158}," ~\u002Fyour_html_folder\n",[26,125488,125489],{"start":98},[29,125490,125491,27631,125494,125499,125516],{},[1464,125492,125493],{},"启动Python HTTP服务器",[26,125495,125496],{},[29,125497,125498],{},"运行以下命令启动一个简单的HTTP服务器：",[60,125500,125502],{"className":118430,"code":125501,"language":118432,"meta":66,"style":66},"python -m http.server 8000\n",[39,125503,125504],{"__ignoreMap":66},[84,125505,125506,125508,125510,125513],{"class":86,"line":87},[84,125507,91],{"class":90},[84,125509,558],{"class":94},[84,125511,125512],{"class":158}," http.server",[84,125514,125515],{"class":94}," 8000\n",[26,125517,125518],{"start":106},[29,125519,125520,125521,125524],{},"这会在端口",[39,125522,125523],{},"8000","上启动一个Web服务器。",[2315,125526,125527],{},[29,125528,125529],{},"启动服务器后，Termux会显示日志信息，例如：",[60,125531,125533],{"className":121942,"code":125532,"language":121944,"meta":121945,"style":66},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[39,125534,125535],{"__ignoreMap":66},[84,125536,125537],{"class":86,"line":87},[84,125538,125532],{},[2315,125540,125541],{},[29,125542,125543],{},"这表示服务器已成功启动。",[19,125545,125546],{},[1464,125547,125548],{},"在浏览器中访问HTML文件",[26,125550,125551],{},[29,125552,125553,27631,125556,125561],{},[1464,125554,125555],{},"在同一设备上访问",[26,125557,125558],{},[29,125559,125560],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[60,125562,125565],{"className":125563,"code":125564,"language":72810,"meta":66,"style":66},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[39,125566,125567],{"__ignoreMap":66},[84,125568,125569,125572],{"class":86,"line":87},[84,125570,125571],{"class":154},"http:",[84,125573,125574],{"class":1378},"\u002F\u002Flocalhost:8000\n",[2315,125576,125577],{},[29,125578,125579,125580,125583],{},"如果HTML文件中有",[39,125581,125582],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125585,125587],{"id":125586},"_76-linux重点知识","7.6 Linux重点知识",[198,125589,125591],{"id":125590},"_761-关于点的说明","7.6.1 关于点的说明",[19,125593,125594],{},[2643,125595],{"alt":66,"src":125596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125598,125599],{},"一点本目录，两点上目录",[198,125601,125603],{"id":125602},"_762-目录","7.6.2 目录",[23168,125605,125607],{"id":125606},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125609,125610],{},[1464,125611,125612],{},"\u002Fboot:",[19,125614,125615],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125617,125618],{},[1464,125619,125620],{},"\u002Fetc:",[19,125622,125623],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125625,125626],{},[1464,125627,125628],{},"\u002Flib：",[19,125630,125631],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125633,125634],{},[1464,125635,125636],{},"\u002Fsys:",[19,125638,125639],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23168,125641,125643],{"id":125642},"_7622-指令集合","7.6.2.2 指令集合",[19,125645,125646],{},[1464,125647,125648],{},"\u002Fbin:",[19,125650,125651],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125653,125654],{},[1464,125655,125656],{},"\u002Fsbin:",[19,125658,125659],{},"只有系统管理员才能使用的程序和指令",[23168,125661,125663],{"id":125662},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125665,125666],{},[1464,125667,125668],{},"\u002Fdev:",[19,125670,125671],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125673,125674],{},[1464,125675,125676],{},"\u002Fmedia:",[19,125678,125679],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125681,125682],{},[1464,125683,125684],{},"\u002Fmnt:",[19,125686,125687],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23168,125689,125691],{"id":125690},"_7624-临时文件","7.6.2.4 临时文件",[19,125693,125694],{},[1464,125695,125696],{},"\u002Frun:",[19,125698,125699],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125701,125702],{},[1464,125703,125704],{},"\u002Flost+found:",[19,125706,125707],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125709,125710],{},[1464,125711,125712],{},"\u002Ftmp:",[19,125714,125715],{},"这个目录是用来存放一些临时文件的",[23168,125717,125719],{"id":125718},"_7625-账户","7.6.2.5 账户",[19,125721,125722],{},[1464,125723,125724],{},"\u002Froot：",[19,125726,125727],{},"系统管理员的用户主目录",[19,125729,125730,27631],{},[1464,125731,125732],{},"\u002Fhome",[19,125734,125735],{},"用户的主目录，以用户的账号命名的",[19,125737,125738,27631],{},[1464,125739,125740],{},"\u002Fusr",[19,125742,125743],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125745,125746],{},[1464,125747,125748],{},"\u002Fusr\u002Fbin：",[19,125750,125751],{},"系统用户使用的应用程序与指令",[19,125753,125754],{},[1464,125755,125756],{},"\u002Fusr\u002Fsbin：",[19,125758,125759],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125761,125762],{},[1464,125763,125764],{},"\u002Fusr\u002Fsrc：",[19,125766,125767],{},"内核源代码默认的放置目录",[23168,125769,125771],{"id":125770},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125773,125774],{},[1464,125775,125776],{},"\u002Fvar：",[19,125778,125779],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125781,125782],{},[1464,125783,125784],{},"\u002Fproc:",[19,125786,125787,125788,125791],{},"管理 ",[1464,125789,125790],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23168,125793,125795],{"id":125794},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125797,125798],{},[1464,125799,125800],{},"\u002Fopt:",[19,125802,125803],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125805,125806],{},[1464,125807,125808],{},"\u002Fsrv:",[19,125810,125811],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[198,125813,125815],{"id":125814},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125817,125818],{},[2643,125819],{"alt":66,"src":125820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125822,125823],{},"windows-->linux:",[19,125825,125826],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125828,125829],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125831,125832],{},"linux传输文件到windows",[19,125834,125835],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[198,125837,125839],{"id":125838},"_764-易忘知识","7.6.4 易忘知识",[19,125841,125842],{},"操作系统内核查看",[60,125844,125845],{"className":118430,"code":122416,"language":118432,"meta":66,"style":66},[39,125846,125847],{"__ignoreMap":66},[84,125848,125849,125851],{"class":86,"line":87},[84,125850,71350],{"class":90},[84,125852,122425],{"class":94},[19,125854,125855],{},[2643,125856],{"alt":66,"src":125857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125859,125860],{},[2643,125861],{"alt":66,"src":125862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[60,125864,125866],{"className":118430,"code":125865,"language":118432,"meta":66,"style":66},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[39,125867,125868,125880],{"__ignoreMap":66},[84,125869,125870,125872,125875,125878],{"class":86,"line":87},[84,125871,122633],{"class":90},[84,125873,125874],{"class":158}," mvtest",[84,125876,125877],{"class":158}," mvtest2",[84,125879,3852],{"class":154},[84,125881,125882],{"class":86,"line":98},[84,125883,125884],{"class":90},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125886,125887],{},[2643,125888],{"alt":66,"src":125889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125891,125892],{},[2643,125893],{"alt":66,"src":125894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125896,125897,125898,125901],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[39,125899,125900],{},"du -a"," 可以快速查看磁盘使用细节。",[198,125903,125905],{"id":125904},"_765-vim","7.6.5 Vim",[19,125907,125908],{},[2643,125909],{"alt":66,"src":125910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125912,125913],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125915,125916],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125918,125919],{},[1464,125920,125921],{},"1.命令模式：",[19,125923,125924],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125926,125927],{},"x 删除当前光标所在处的字符",[19,125929,125930],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125932,125933],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125935,125936],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125938,125939],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125941,125942],{},"dd 剪切当前行",[19,125944,125945],{},"yy 复制当前行",[19,125947,125948],{},"p 粘贴剪贴板内容到光标下方",[19,125950,125951],{},"P 粘贴剪贴板内容到光标上方",[19,125953,125954],{},"u 撤销上一次操作",[19,125956,125957],{},"ctrl+r 重做上一次操作",[19,125959,125960,125962],{},[2103,125961],{}," 保存文件",[19,125964,125965,125967],{},[1954,125966],{}," 退出Vim编辑器",[19,125969,125970,125972],{},[1954,125971],{},"! 强制退出Vim编辑器，不保存修改",[19,125974,125975],{},[1464,125976,125977],{},"2.输入模式：",[19,125979,125980],{},[2643,125981],{"alt":66,"src":125982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125984,125985],{},[1464,125986,125987],{},"3.底线命令模式：",[19,125989,125990],{},[2643,125991],{"alt":66,"src":125992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125994,125995],{},"按下esc可以退出底线命令模式",[198,125997,125999],{"id":125998},"_766-apt","7.6.6 apt",[19,126001,126002],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[198,126004,126006],{"id":126005},"_767-home与root的区别","7.6.7 home与root的区别",[19,126008,126009],{},[2643,126010],{"alt":66,"src":126011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126013,126014],{},[2643,126015],{"alt":66,"src":126016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126018,126019],{},[2643,126020],{"alt":66,"src":126021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126023,126024],{},[2643,126025],{"alt":66,"src":126026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[198,126028,126030],{"id":126029},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126032,126033],{},[208,126034,126035],{"href":126035,"rel":126036},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[212],[26,126038,126039,126042],{},[29,126040,126041],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126043,126044],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126046,126047],{},[2643,126048],{"alt":66,"src":126049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126051,126052],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126054,126055],{},[2643,126056],{"alt":66,"src":126057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[60,126059,126061],{"className":121942,"code":126060,"language":121944,"meta":121945,"style":66},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[39,126062,126063,126068],{"__ignoreMap":66},[84,126064,126065],{"class":86,"line":87},[84,126066,126067],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[84,126069,126070],{"class":86,"line":98},[84,126071,126072],{},".\u002Fpycharm.sh\n",[19,126074,126075],{},"3️⃣创建.desktop文件",[19,126077,126078],{},[1464,126079,126080],{},"原理：",[2315,126082,126083,126093],{},[29,126084,126085,126086,126092],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1464,126087,126088,126091],{},[39,126089,126090],{},".desktop"," 文件"," 来识别应用。",[29,126094,126095,126097,126098],{},[39,126096,126090],{}," 文件相当于一个“应用注册表”，告诉系统：",[2315,126099,126100,126103,126106,126109,126112],{},[29,126101,126102],{},"应用名字（Name）",[29,126104,126105],{},"图标（Icon）",[29,126107,126108],{},"执行命令（Exec）",[29,126110,126111],{},"分类（Categories）",[29,126113,126114],{},"是否需要终端（Terminal）",[60,126116,126118],{"className":121942,"code":126117,"language":121944,"meta":121945,"style":66},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[39,126119,126120,126125],{"__ignoreMap":66},[84,126121,126122],{"class":86,"line":87},[84,126123,126124],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[84,126126,126127],{"class":86,"line":98},[84,126128,126129],{},"nano pycharm.desktop\n",[19,126131,126132],{},"nano是一个命令行下的编辑器，也可以使用vim",[60,126134,126136],{"className":121942,"code":126135,"language":121944,"meta":121945,"style":66},"[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",[39,126137,126138,126143,126148,126153,126158,126163,126168,126173,126178,126183],{"__ignoreMap":66},[84,126139,126140],{"class":86,"line":87},[84,126141,126142],{},"[Desktop Entry]\n",[84,126144,126145],{"class":86,"line":98},[84,126146,126147],{},"Version=1.0\n",[84,126149,126150],{"class":86,"line":106},[84,126151,126152],{},"Type=Application\n",[84,126154,126155],{"class":86,"line":112},[84,126156,126157],{},"Name=PyCharm\n",[84,126159,126160],{"class":86,"line":425},[84,126161,126162],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[84,126164,126165],{"class":86,"line":2395},[84,126166,126167],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[84,126169,126170],{"class":86,"line":2401},[84,126171,126172],{},"Comment=JetBrains PyCharm IDE\n",[84,126174,126175],{"class":86,"line":2492},[84,126176,126177],{},"Categories=Development;IDE;\n",[84,126179,126180],{"class":86,"line":2498},[84,126181,126182],{},"Terminal=false\n",[84,126184,126185],{"class":86,"line":2510},[84,126186,126187],{},"StartupWMClass=jetbrains-pycharm\n",[2315,126189,126190,126196,126202,126208],{},[29,126191,126192,126195],{},[39,126193,126194],{},"Exec"," → 点击图标时执行的命令",[29,126197,126198,126201],{},[39,126199,126200],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126203,126204,126207],{},[39,126205,126206],{},"Terminal=false"," → 不打开终端",[29,126209,126210,126213],{},[39,126211,126212],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126215,126216,126217],"blockquote",{},[19,126218,126219,126220,126222,126223],{},"可以理解成 ",[39,126221,126090],{}," 文件是 Linux 的 ",[1464,126224,126225],{},"快捷方式配置文件",[19,126227,126228],{},"4️⃣设置可执行权限",[60,126230,126232],{"className":121942,"code":126231,"language":121944,"meta":121945,"style":66},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[39,126233,126234],{"__ignoreMap":66},[84,126235,126236],{"class":86,"line":87},[84,126237,126231],{},[19,126239,126240],{},"5️⃣桌面图标启动的话如下：",[60,126242,126244],{"className":121942,"code":126243,"language":121944,"meta":121945,"style":66},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[39,126245,126246,126251],{"__ignoreMap":66},[84,126247,126248],{"class":86,"line":87},[84,126249,126250],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[84,126252,126253],{"class":86,"line":98},[84,126254,126255],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126257,126258],{"start":106},[29,126259,126260],{},"下载Appimage文件实现软件的安装",[19,126262,126263],{},"1️⃣先下载appimage",[19,126265,126266],{},[208,126267,126268],{"href":126268,"rel":126269},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[212],[19,126271,126272],{},[2643,126273],{"alt":66,"src":126274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126276,126277],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126279,126280],{},[2643,126281],{"alt":66,"src":126282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126284,126285],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126287,126288],{},[2643,126289],{"alt":66,"src":126290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126292,126293],{},[2643,126294],{"alt":66,"src":126295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126297,126298,126299,126302],{},"3️⃣给他们放在",[39,126300,126301],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126304,126305],{},"4️⃣给软件执行权限",[60,126307,126309],{"className":121942,"code":126308,"language":121944,"meta":121945,"style":66},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[39,126310,126311,126316],{"__ignoreMap":66},[84,126312,126313],{"class":86,"line":87},[84,126314,126315],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[84,126317,126318],{"class":86,"line":98},[84,126319,126320],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126322,126323],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[60,126325,126327],{"className":118430,"code":126326,"language":118432,"meta":66,"style":66},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[39,126328,126329,126336,126343,126349],{"__ignoreMap":66},[84,126330,126331,126333],{"class":86,"line":87},[84,126332,102414],{"class":94},[84,126334,126335],{"class":158}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[84,126337,126338,126340],{"class":86,"line":98},[84,126339,102421],{"class":90},[84,126341,126342],{"class":158}," .\u002Fqqmusic.desktop\n",[84,126344,126345,126347],{"class":86,"line":106},[84,126346,125392],{"class":90},[84,126348,126342],{"class":158},[84,126350,126351,126353,126355,126357],{"class":86,"line":112},[84,126352,311],{"class":90},[84,126354,25744],{"class":158},[84,126356,124258],{"class":158},[84,126358,126342],{"class":158},[19,126360,126361,126363],{},[39,126362,102421],{},"：一个 Linux 命令，主要功能是：",[2315,126365,126366,126369],{},[29,126367,126368],{},"如果文件不存在，就创建一个新的空文件",[29,126370,126371],{},"如果文件已存在，就更新该文件的最后修改时间",[60,126373,126375],{"className":121942,"code":126374,"language":121944,"meta":121945,"style":66},"[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",[39,126376,126377,126381,126386,126391,126396,126400,126405],{"__ignoreMap":66},[84,126378,126379],{"class":86,"line":87},[84,126380,126142],{},[84,126382,126383],{"class":86,"line":98},[84,126384,126385],{},"Name=QQ音乐\n",[84,126387,126388],{"class":86,"line":106},[84,126389,126390],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[84,126392,126393],{"class":86,"line":112},[84,126394,126395],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[84,126397,126398],{"class":86,"line":425},[84,126399,126152],{},[84,126401,126402],{"class":86,"line":2395},[84,126403,126404],{},"Categories=Audio;Music;Player;\n",[84,126406,126407],{"class":86,"line":2401},[84,126408,126409],{},"Comment=QQ Music Client for Linux\n",[19,126411,126412],{},"将文件复制进去",[19,126414,126415],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126417,126418],{},[2643,126419],{"alt":66,"src":126420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126422,126423],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126425,126426],{},[2643,126427],{"alt":66,"src":126428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126430,126431,126432,126435,126436,126439],{},"如果你用的不是KDE，那么也可以直接修改",[39,126433,126434],{},"qqmuic.desktop","：在exec的末尾加上",[39,126437,126438],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[60,126441,126443],{"className":121942,"code":126442,"language":121944,"meta":121945,"style":66},"[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",[39,126444,126445,126449,126453,126458,126462,126466,126470],{"__ignoreMap":66},[84,126446,126447],{"class":86,"line":87},[84,126448,126142],{},[84,126450,126451],{"class":86,"line":98},[84,126452,126385],{},[84,126454,126455],{"class":86,"line":106},[84,126456,126457],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[84,126459,126460],{"class":86,"line":112},[84,126461,126395],{},[84,126463,126464],{"class":86,"line":425},[84,126465,126152],{},[84,126467,126468],{"class":86,"line":2395},[84,126469,126404],{},[84,126471,126472],{"class":86,"line":2401},[84,126473,126409],{},[19,126475,126476],{},[2643,126477],{"alt":66,"src":126478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126480,126481],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[60,126483,126485],{"className":121942,"code":126484,"language":121944,"meta":121945,"style":66},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[39,126486,126487],{"__ignoreMap":66},[84,126488,126489],{"class":86,"line":87},[84,126490,126484],{},[26,126492,126493],{"start":112},[29,126494,126495],{},"去Flathub上安装软件",[19,126497,126498],{},[208,126499,126500],{"href":126500,"rel":126501},"https:\u002F\u002Fflathub.org\u002F",[212],[19,126503,126504],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126506,126507],{},[2643,126508],{"alt":66,"src":126509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[60,126511,126513],{"className":121942,"code":126512,"language":121944,"meta":121945,"style":66},"flatpak install flathub com.obsproject.Studio\n",[39,126514,126515],{"__ignoreMap":66},[84,126516,126517],{"class":86,"line":87},[84,126518,126512],{},[19,126520,126521],{},[2643,126522],{"alt":66,"src":126523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126525,126526],{},"2️⃣运行软件",[19,126528,126529],{},"a.官方方式：",[19,126531,126532],{},[2643,126533],{"alt":66,"src":126534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[60,126536,126537],{"className":121942,"code":126512,"language":121944,"meta":121945,"style":66},[39,126538,126539],{"__ignoreMap":66},[84,126540,126541],{"class":86,"line":87},[84,126542,126512],{},[19,126544,126545],{},"b.当普通软件运行：",[19,126547,126548],{},[2643,126549],{"alt":66,"src":126550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126552,126553],{},[2643,126554],{"alt":66,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1222,126557,126558],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":66,"searchDepth":98,"depth":98,"links":126560},[126561,126562,126567,126568,126574,126575],{"id":123294,"depth":98,"text":123295},{"id":123636,"depth":98,"text":123637,"children":126563},[126564,126565,126566],{"id":123640,"depth":106,"text":123641},{"id":123707,"depth":106,"text":123708},{"id":123968,"depth":106,"text":123969},{"id":124121,"depth":98,"text":124122},{"id":124359,"depth":98,"text":124360,"children":126569},[126570,126571,126572,126573],{"id":124411,"depth":106,"text":124412},{"id":124697,"depth":106,"text":124698},{"id":124968,"depth":106,"text":124969},{"id":125227,"depth":106,"text":125228},{"id":125286,"depth":98,"text":125287},{"id":125586,"depth":98,"text":125587,"children":126576},[126577,126578,126579,126580,126581,126582,126583,126584],{"id":125590,"depth":106,"text":125591},{"id":125602,"depth":106,"text":125603},{"id":125814,"depth":106,"text":125815},{"id":125838,"depth":106,"text":125839},{"id":125904,"depth":106,"text":125905},{"id":125998,"depth":106,"text":125999},{"id":126005,"depth":106,"text":126006},{"id":126029,"depth":106,"text":126030},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123286,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126591,"title":126592,"body":126593,"description":1249,"extension":1250,"meta":126597,"navigation":1252,"path":126598,"seo":126599,"stem":126600,"__hash__":126601},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126594,"toc":126595},[],{"title":66,"searchDepth":98,"depth":98,"links":126596},[],{"category":31420},"\u002Fwiki\u002F2025-01-27-linux",{"title":126592,"description":1249},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126603,"title":126604,"body":126605,"description":126609,"extension":1250,"meta":127000,"navigation":1252,"path":127001,"seo":127002,"stem":127003,"__hash__":127004},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126606,"toc":126998},[126607,126610,126614,126631,126634,126687,126691,126693,126733,126742,126746,126749,126990,126995],[19,126608,126609],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126611,126613],{"id":126612},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,126615,126616,126619,126622,126625,126628],{},[29,126617,126618],{},"ubuntu环境换源",[29,126620,126621],{},"安装cuda",[29,126623,126624],{},"安装miniconda",[29,126626,126627],{},"安装pytorch",[29,126629,126630],{},"安装genesis",[19,126632,126633],{},"参考链接：",[60,126635,126637],{"className":78,"code":126636,"language":80,"meta":66,"style":66},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[39,126638,126639],{"__ignoreMap":66},[84,126640,126641,126644,126647,126650,126652,126655,126658,126660,126663,126666,126668,126671,126674,126676,126679,126682,126684],{"class":86,"line":87},[84,126642,126643],{"class":90},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[84,126645,126646],{"class":158},"=blogdetail",[84,126648,126649],{"class":154},"&sharetype",[84,126651,867],{"class":129},[84,126653,126654],{"class":158},"blogdetail",[84,126656,126657],{"class":154},"&sharerId",[84,126659,867],{"class":129},[84,126661,126662],{"class":158},"144728092",[84,126664,126665],{"class":154},"&sharerefer",[84,126667,867],{"class":129},[84,126669,126670],{"class":158},"PC",[84,126672,126673],{"class":154},"&sharesource",[84,126675,867],{"class":129},[84,126677,126678],{"class":158},"qq_69379513",[84,126680,126681],{"class":154},"&sharefrom",[84,126683,867],{"class":129},[84,126685,126686],{"class":158},"from_link\n",[10,126688,126690],{"id":126689},"_2genesis-报错issue","2.Genesis 报错issue",[19,126692,126633],{},[60,126694,126695],{"className":78,"code":126636,"language":80,"meta":66,"style":66},[39,126696,126697],{"__ignoreMap":66},[84,126698,126699,126701,126703,126705,126707,126709,126711,126713,126715,126717,126719,126721,126723,126725,126727,126729,126731],{"class":86,"line":87},[84,126700,126643],{"class":90},[84,126702,126646],{"class":158},[84,126704,126649],{"class":154},[84,126706,867],{"class":129},[84,126708,126654],{"class":158},[84,126710,126657],{"class":154},[84,126712,867],{"class":129},[84,126714,126662],{"class":158},[84,126716,126665],{"class":154},[84,126718,867],{"class":129},[84,126720,126670],{"class":158},[84,126722,126673],{"class":154},[84,126724,867],{"class":129},[84,126726,126678],{"class":158},[84,126728,126681],{"class":154},[84,126730,867],{"class":129},[84,126732,126686],{"class":158},[60,126734,126736],{"className":78,"code":126735,"language":80,"meta":66,"style":66},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[39,126737,126738],{"__ignoreMap":66},[84,126739,126740],{"class":86,"line":87},[84,126741,126735],{"class":90},[10,126743,126745],{"id":126744},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126747,126748],{},"hello_robot.py",[60,126750,126752],{"className":121,"code":126751,"language":91,"meta":66,"style":66},"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",[39,126753,126754,126760,126775,126779,126791,126803,126807,126820,126824,126843,126853,126863,126877,126881,126885,126890,126894,126904,126911,126925,126932,126942,126947,126951,126969,126974,126978,126985],{"__ignoreMap":66},[84,126755,126756,126758],{"class":86,"line":87},[84,126757,31547],{"class":129},[84,126759,46457],{"class":154},[84,126761,126762,126765,126768,126770,126772],{"class":86,"line":98},[84,126763,126764],{"class":154},"os.environ[",[84,126766,126767],{"class":158},"'PYOPENGL_PLATFORM'",[84,126769,5620],{"class":154},[84,126771,867],{"class":129},[84,126773,126774],{"class":158}," 'glx'\n",[84,126776,126777],{"class":86,"line":106},[84,126778,3578],{"emptyLinePlaceholder":1252},[84,126780,126781,126783,126786,126788],{"class":86,"line":112},[84,126782,31547],{"class":129},[84,126784,126785],{"class":154}," genesis ",[84,126787,1157],{"class":129},[84,126789,126790],{"class":154}," gs\n",[84,126792,126793,126795,126798,126800],{"class":86,"line":425},[84,126794,31891],{"class":129},[84,126796,126797],{"class":154}," pynput ",[84,126799,31547],{"class":129},[84,126801,126802],{"class":154}," keyboard\n",[84,126804,126805],{"class":86,"line":2395},[84,126806,3578],{"emptyLinePlaceholder":1252},[84,126808,126809,126812,126815,126817],{"class":86,"line":2401},[84,126810,126811],{"class":154},"gs.init(",[84,126813,126814],{"class":928},"backend",[84,126816,867],{"class":129},[84,126818,126819],{"class":154},"gs.gpu)\n",[84,126821,126822],{"class":86,"line":2492},[84,126823,3578],{"emptyLinePlaceholder":1252},[84,126825,126826,126829,126831,126834,126837,126839,126841],{"class":86,"line":2498},[84,126827,126828],{"class":154},"scene ",[84,126830,867],{"class":129},[84,126832,126833],{"class":154}," gs.Scene(",[84,126835,126836],{"class":928},"show_viewer",[84,126838,867],{"class":129},[84,126840,32629],{"class":94},[84,126842,162],{"class":154},[84,126844,126845,126848,126850],{"class":86,"line":2510},[84,126846,126847],{"class":154},"plane ",[84,126849,867],{"class":129},[84,126851,126852],{"class":154}," scene.add_entity(gs.morphs.Plane())\n",[84,126854,126855,126858,126860],{"class":86,"line":2793},[84,126856,126857],{"class":154},"franka ",[84,126859,867],{"class":129},[84,126861,126862],{"class":154}," scene.add_entity(\n",[84,126864,126865,126868,126870,126872,126875],{"class":86,"line":2798},[84,126866,126867],{"class":154},"    gs.morphs.MJCF(",[84,126869,46506],{"class":928},[84,126871,867],{"class":129},[84,126873,126874],{"class":158},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[84,126876,39199],{"class":154},[84,126878,126879],{"class":86,"line":2804},[84,126880,162],{"class":154},[84,126882,126883],{"class":86,"line":2809},[84,126884,3578],{"emptyLinePlaceholder":1252},[84,126886,126887],{"class":86,"line":2823},[84,126888,126889],{"class":154},"scene.build()\n",[84,126891,126892],{"class":86,"line":2828},[84,126893,3578],{"emptyLinePlaceholder":1252},[84,126895,126896,126898,126901],{"class":86,"line":2834},[84,126897,33100],{"class":129},[84,126899,126900],{"class":90}," on_press",[84,126902,126903],{"class":154},"(key):\n",[84,126905,126906,126909],{"class":86,"line":2855},[84,126907,126908],{"class":129},"    try",[84,126910,4917],{"class":154},[84,126912,126913,126915,126918,126920,126923],{"class":86,"line":2860},[84,126914,3675],{"class":129},[84,126916,126917],{"class":154}," key.char ",[84,126919,4127],{"class":129},[84,126921,126922],{"class":158}," 'q'",[84,126924,4917],{"class":154},[84,126926,126927,126929],{"class":86,"line":2874},[84,126928,16902],{"class":129},[84,126930,126931],{"class":94}," False\n",[84,126933,126934,126937,126940],{"class":86,"line":2879},[84,126935,126936],{"class":129},"    except",[84,126938,126939],{"class":94}," AttributeError",[84,126941,4917],{"class":154},[84,126943,126944],{"class":86,"line":2908},[84,126945,126946],{"class":129},"        pass\n",[84,126948,126949],{"class":86,"line":2913},[84,126950,3578],{"emptyLinePlaceholder":1252},[84,126952,126953,126956,126958,126961,126964,126966],{"class":86,"line":2930},[84,126954,126955],{"class":154},"listener ",[84,126957,867],{"class":129},[84,126959,126960],{"class":154}," keyboard.Listener(",[84,126962,126963],{"class":928},"on_press",[84,126965,867],{"class":129},[84,126967,126968],{"class":154},"on_press)\n",[84,126970,126971],{"class":86,"line":2935},[84,126972,126973],{"class":154},"listener.start()\n",[84,126975,126976],{"class":86,"line":2940},[84,126977,3578],{"emptyLinePlaceholder":1252},[84,126979,126980,126982],{"class":86,"line":2945},[84,126981,109797],{"class":129},[84,126983,126984],{"class":154}," listener.running:\n",[84,126986,126987],{"class":86,"line":2959},[84,126988,126989],{"class":154},"    scene.step()\n",[19,126991,126992],{},[2643,126993],{"alt":66,"src":126994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1222,126996,126997],{},"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":66,"searchDepth":98,"depth":98,"links":126999},[],{"category":24548},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126604,"description":126609},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127006,"title":127007,"body":127008,"description":1249,"extension":1250,"meta":127023,"navigation":1252,"path":127024,"seo":127025,"stem":127026,"__hash__":127027},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127009,"toc":127020},[127010,127013,127017],[10,127011,127007],{"id":127012},"_1-基础知识",[14,127014,127016],{"id":127015},"_11-js的组成","1.1 js的组成",[19,127018,127019],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":66,"searchDepth":98,"depth":98,"links":127021},[127022],{"id":127015,"depth":98,"text":127016},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127007,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127029,"title":127030,"body":127031,"description":1249,"extension":1250,"meta":127169,"navigation":1252,"path":127170,"seo":127171,"stem":127172,"__hash__":127173},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127032,"toc":127157},[127033,127036,127040,127043,127047,127057,127061,127064,127067,127070,127074,127081,127087,127091,127097,127107,127111,127114,127118,127121,127125,127128,127132,127135,127139,127142,127145,127148,127151,127154],[10,127034,127030],{"id":127035},"_2-vscode必备内容",[14,127037,127039],{"id":127038},"_21-标签分类","2.1 标签分类",[19,127041,127042],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127044,127046],{"id":127045},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127048,127049,127050,127052,127053,127056],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[39,127051,1538],{}," 然后按 ",[39,127054,127055],{},"Tab","，快速自动生成基本结构。",[14,127058,127060],{"id":127059},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127062,127063],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127065,127066],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127068,127069],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127071,127073],{"id":127072},"_24-视图缩放","2.4 视图缩放",[19,127075,127076,127077,127080],{},"缩放视图 ",[39,127078,127079],{},"ctrl+"," 可实现代码增大。",[19,127082,127083,127086],{},[39,127084,127085],{},"ctrl-"," 可实现代码减小。",[14,127088,127090],{"id":127089},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127092,127093,127094,55],{},"VSCode 新建文件快捷键为 ",[39,127095,127096],{},"ctrl+N",[19,127098,127099,127100,127103,127104,673],{},"保存快捷键为 ",[39,127101,127102],{},"ctrl+S","，将文本保存为 ",[39,127105,127106],{},".html",[14,127108,127110],{"id":127109},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127112,127113],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127115,127117],{"id":127116},"_27-vscode-icons","2.7 vscode-icons",[19,127119,127120],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127122,127124],{"id":127123},"_28-easy-less","2.8 Easy LESS",[19,127126,127127],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127129,127131],{"id":127130},"_29-会了吧插件","2.9 会了吧插件",[19,127133,127134],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127136,127138],{"id":127137},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127140,127141],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127143,127144],{},"②选定多个相同的单词:ctrl+D",[19,127146,127147],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127149,127150],{},"④全局替换某些单词:ctrl+h",[19,127152,127153],{},"⑤快速定位到某一行:ctrl+g",[19,127155,127156],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":66,"searchDepth":98,"depth":98,"links":127158},[127159,127160,127161,127162,127163,127164,127165,127166,127167,127168],{"id":127038,"depth":98,"text":127039},{"id":127045,"depth":98,"text":127046},{"id":127059,"depth":98,"text":127060},{"id":127072,"depth":98,"text":127073},{"id":127089,"depth":98,"text":127090},{"id":127109,"depth":98,"text":127110},{"id":127116,"depth":98,"text":127117},{"id":127123,"depth":98,"text":127124},{"id":127130,"depth":98,"text":127131},{"id":127137,"depth":98,"text":127138},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127030,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127175,"title":127176,"body":127177,"description":1249,"extension":1250,"meta":127336,"navigation":1252,"path":127337,"seo":127338,"stem":127339,"__hash__":127340},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127178,"toc":127328},[127179,127182,127186,127196,127202,127208,127212,127221,127225,127230,127233,127236,127240,127243,127253,127262,127271,127280,127290,127297,127302,127307,127320],[10,127180,127176],{"id":127181},"_3-html文本与容器标签",[14,127183,127185],{"id":127184},"_31-标题标签","3.1 标题标签",[19,127187,127188,127191,127192,127195],{},[39,127189,127190],{},"\u003Ch1>","我是一级标签",[39,127193,127194],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127197,127198,127191,127200],{},[39,127199,127190],{},[39,127201,127194],{},[19,127203,124460,127204,127207],{},[39,127205,127206],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127209,127211],{"id":127210},"_32-段落标签","3.2 段落标签",[19,127213,127214,127217,127218],{},[39,127215,127216],{},"\u003Cp>","....",[39,127219,127220],{},"\u003C\u002Fp>",[14,127222,127224],{"id":127223},"_33-换行标签","3.3 换行标签",[19,127226,127227],{},[39,127228,127229],{},"\u003Cbr \u002F>",[19,127231,127232],{},"具有强制换行的作用",[19,127234,127235],{},"单标签",[14,127237,127239],{"id":127238},"_34-文本格式化标签","3.4 文本格式化标签",[19,127241,127242],{},"提供粗体、斜体和下划线等效果",[19,127244,127245,127246,83685,127249,127252],{},"加粗：",[39,127247,127248],{},"\u003Cstrong>...\u003C\u002Fstrong>",[39,127250,127251],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127254,127255,127256,83685,127259,127252],{},"斜体：",[39,127257,127258],{},"\u003Cem>...\u003C\u002Fem>",[39,127260,127261],{},"\u003Ci>...\u003C\u002Fi>",[19,127263,127264,127265,83685,127268,127252],{},"删除线：",[39,127266,127267],{},"\u003Cdel>...\u003C\u002Fdel>",[39,127269,127270],{},"\u003Cs>...\u003C\u002Fs>",[19,127272,127273,127274,83685,127277,127252],{},"下划线：",[39,127275,127276],{},"\u003Cins>...\u003C\u002Fins>",[39,127278,127279],{},"\u003Cu>...\u003C\u002Fu>",[14,127281,127283,127284,19580,127287,103831],{"id":127282},"_35-div和span标签","3.5 ",[39,127285,127286],{},"\u003Cdiv>",[39,127288,127289],{},"\u003Cspan>",[19,127291,127292,102156,127294,127296],{},[39,127293,127286],{},[39,127295,127289],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127298,127299],{},[39,127300,127301],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127303,127304],{},[39,127305,127306],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127308,127309,127310,127312,127313,127315,127316,127319],{},"两者特点：①",[39,127311,127286],{}," 标签用来布局，但一行通常只放一个 ",[39,127314,127286],{},"。可以理解为一个大盒子，独占一行，在 ",[39,127317,127318],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127321,78395,127322,127324,127325,127327],{},[39,127323,127289],{}," 标签也可用于布局，一行可以放多个 ",[39,127326,127289],{},"，可理解为小盒子。",{"title":66,"searchDepth":98,"depth":98,"links":127329},[127330,127331,127332,127333,127334],{"id":127184,"depth":98,"text":127185},{"id":127210,"depth":98,"text":127211},{"id":127223,"depth":98,"text":127224},{"id":127238,"depth":98,"text":127239},{"id":127282,"depth":98,"text":127335},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127176,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127342,"title":127343,"body":127344,"description":1249,"extension":1250,"meta":127541,"navigation":1252,"path":127542,"seo":127543,"stem":127544,"__hash__":127545},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127345,"toc":127533},[127346,127349,127353,127356,127362,127369,127375,127381,127384,127387,127390,127393,127396,127399,127402,127406,127409,127412,127415,127421,127427,127433,127440,127444,127450,127456,127459,127462,127468,127474,127480,127483,127486,127490,127493,127503,127509,127513,127522,127526,127529],[10,127347,127343],{"id":127348},"_4-html图像与链接",[14,127350,127352],{"id":127351},"_41-图像标签","4.1 图像标签",[19,127354,127355],{},"（1）标签",[19,127357,127358,127361],{},[39,127359,127360],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127363,127364,127365,127368],{},"src是",[39,127366,127367],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127370,127371,127372],{},"alt:文本，替换文本。图像不能显示的文字 ",[39,127373,127374],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127376,127377,127378],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[39,127379,127380],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127382,127383],{},"width:像素，设置图像的宽度",[19,127385,127386],{},"height:像素，设置图像的高度",[19,127388,127389],{},"border：像素，设置图像的边框粗细",[19,127391,127392],{},"（2）图像标签属性的注意点：",[19,127394,127395],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127397,127398],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127400,127401],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127403,127405],{"id":127404},"_42-路径注意要点","4.2 路径注意要点：",[19,127407,127408],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127410,127411],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127413,127414],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127416,127417,127418],{},"①同一级路径：图像文件位于HTML文件同一级，如",[39,127419,127420],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127422,127423,127424],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[39,127425,127426],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127428,127429,127430],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[39,127431,127432],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127434,127435,127436,1562],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[208,127437,127438],{"href":127438,"rel":127439},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[212],[14,127441,127443],{"id":127442},"_43-超链接标签","4.3 超链接标签",[19,127445,127446,127449],{},[39,127447,127448],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127451,127452,127453],{},"①语法格式：",[39,127454,127455],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127457,127458],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127460,127461],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127463,127464,127465],{},"③链接分类：外部链接：",[39,127466,127467],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127469,127470,127471],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[39,127472,127473],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127475,127476,127477],{},"空链接：如果当时没有确定链接目标时，",[39,127478,127479],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127481,127482],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127484,127485],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127487,127489],{"id":127488},"_44-锚点链接","4.4 锚点链接",[19,127491,127492],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127494,127495,127496,127499,127500],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[39,127497,127498],{},"\u003Ca href=\"#two\">","第二级",[39,127501,127502],{},"\u003C\u002Fa>",[19,127504,127505,127506],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[39,127507,127508],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127510,127512],{"id":127511},"_45-注释标签","4.5 注释标签",[19,127514,127515,127518,127519],{},[39,127516,127517],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[39,127520,127521],{},"ctrl+\u002F",[14,127523,127525],{"id":127524},"_46-特殊字符","4.6 特殊字符",[19,127527,127528],{},"可以实现添加多个空格",[2643,127530],{"style":127531,"src":127532},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":66,"searchDepth":98,"depth":98,"links":127534},[127535,127536,127537,127538,127539,127540],{"id":127351,"depth":98,"text":127352},{"id":127404,"depth":98,"text":127405},{"id":127442,"depth":98,"text":127443},{"id":127488,"depth":98,"text":127489},{"id":127511,"depth":98,"text":127512},{"id":127524,"depth":98,"text":127525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127343,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127547,"title":127548,"body":127549,"description":1249,"extension":1250,"meta":127842,"navigation":1252,"path":127843,"seo":127844,"stem":127845,"__hash__":127846},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127550,"toc":127833},[127551,127554,127558,127561,127564,127567,127570,127573,127576,127579,127582,127585,127605,127611,127615,127618,127621,127624,127627,127630,127633,127637,127640,127643,127646,127649,127662,127667,127670,127673,127688,127691,127694,127697,127700,127703,127707,127710,127717,127720,127723,127726,127729,127732,127738,127741,127744,127750,127753,127756,127759,127765,127768,127771,127785,127792,127795,127798,127805,127814,127817,127820,127823,127827,127830],[10,127552,127548],{"id":127553},"_5-html表格列表与表单",[14,127555,127557],{"id":127556},"_51-表格标签","5.1 表格标签",[19,127559,127560],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127562,127563],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127565,127566],{},"②表格基本语法：",[2643,127568],{"style":127531,"src":127569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127571,127572],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2643,127574],{"style":127531,"src":127575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127577,127578],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2643,127580],{"style":127531,"src":127581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127583,127584],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127586,127587,127590,127591,127593,127594,127597,127598,127600,127601,127604],{},[39,127588,127589],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[39,127592,127589],{},"内部必须拥有",[39,127595,127596],{},"\u003Ctr>","标签，一般位于第一行，",[39,127599,127589],{},"比",[39,127602,127603],{},"\u003Cth>","范围广",[19,127606,127607,127610],{},[39,127608,127609],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127612,127614],{"id":127613},"_52-合并单元格","5.2 合并单元格",[19,127616,127617],{},"（1）合并单元格方式：",[19,127619,127620],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127622,127623],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127625,127626],{},"（2）目标单元格：",[19,127628,127629],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127631,127632],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127634,127636],{"id":127635},"_53-列表标签","5.3 列表标签",[19,127638,127639],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127641,127642],{},"①无序列表：",[2643,127644],{"style":127531,"src":127645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127647,127648],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127650,127651,127654,127655,127658,127659,127661],{},[39,127652,127653],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[39,127656,127657],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[39,127660,127653],{},"中输入其他标签或文字是不对的",[19,127663,127664,127666],{},[39,127665,127657],{},"之间相当于一个容器，可以容纳所有元素",[19,127668,127669],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127671,127672],{},"在css中去除前边的小圆点采用如下代码:",[60,127674,127678],{"className":127675,"code":127676,"language":127677,"meta":66,"style":66},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[39,127679,127680],{"__ignoreMap":66},[84,127681,127682,127685],{"class":86,"line":87},[84,127683,127684],{"class":52449},"list-style",[84,127686,127687],{"class":154},": none;\n",[19,127689,127690],{},"②有序列表：",[2643,127692],{"style":127531,"src":127693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127695,127696],{},"③自定义列表：",[2643,127698],{"style":127531,"src":127699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2643,127701],{"style":127531,"src":127702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127704,127706],{"id":127705},"_54-表单标签","5.4 表单标签",[19,127708,127709],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127711,127712,127713,127716],{},"（1）表单域：包含单元素的区域，",[39,127714,127715],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2643,127718],{"style":127531,"src":127719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127721,127722],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127724,127725],{},"表单元素提交必须有name属性",[19,127727,127728],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127730,127731],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127733,78372,127734,127737],{},[39,127735,127736],{},"\u003Cinput>","输入表单元素",[2643,127739],{"style":127531,"src":127740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2643,127742],{"style":127531,"src":127743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127745,127746,127747],{},"单选按钮：",[39,127748,127749],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2643,127751],{"style":127531,"src":127752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127754,127755],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2643,127757],{"style":127531,"src":127758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127760,127761,127764],{},[1464,127762,127763],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127766,127767],{},"②select下拉表单元素：可以节约页面控件",[2643,127769],{"style":127531,"src":127770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127772,127773,14965,127775,127778,127779,127781,127782,127784],{},[1464,127774,1352],{},[39,127776,127777],{},"\u003Cselect>","中至少包含一对",[39,127780,103851],{},"；在",[39,127783,103851],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127786,127787,127788,127791],{},"③",[39,127789,127790],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2643,127793],{"style":127531,"src":127794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127796,127797],{},"3行20列",[14,127799,127801,127802,103831],{"id":127800},"_55-lable标签","5.5 ",[39,127803,127804],{},"\u003Clable>",[19,127806,127807,127808,127810,127811,127813],{},"它不是表单标签，但常常与表单标签搭配使用，",[39,127809,127804],{},"标签用于绑定一个表单标签，当点击",[39,127812,127804],{},"标签内的文本",[19,127815,127816],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2643,127818],{"style":127531,"src":127819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2643,127821],{"style":127531,"src":127822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127824,127826],{"id":127825},"_56-实例","5.6 实例",[2643,127828],{"style":127531,"src":127829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1222,127831,127832],{},"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":66,"searchDepth":98,"depth":98,"links":127834},[127835,127836,127837,127838,127839,127841],{"id":127556,"depth":98,"text":127557},{"id":127613,"depth":98,"text":127614},{"id":127635,"depth":98,"text":127636},{"id":127705,"depth":98,"text":127706},{"id":127800,"depth":98,"text":127840},"5.5 \u003Clable>标签",{"id":127825,"depth":98,"text":127826},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127548,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127848,"title":127849,"body":127850,"description":1249,"extension":1250,"meta":128399,"navigation":1252,"path":128400,"seo":128401,"stem":128402,"__hash__":128403},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127851,"toc":128374},[127852,127855,127859,127862,127865,127869,127872,127875,127878,127881,127884,127887,127890,127894,127897,127901,127904,127907,127910,127914,127917,127920,127923,127929,127932,127935,127938,127941,127944,127947,127950,127983,127987,127990,127993,127996,128000,128003,128006,128009,128012,128015,128019,128022,128025,128028,128032,128035,128039,128042,128046,128049,128054,128058,128061,128065,128068,128071,128074,128077,128104,128107,128111,128114,128117,128122,128125,128128,128132,128135,128140,128143,128146,128149,128153,128156,128159,128162,128166,128169,128172,128175,128179,128183,128186,128226,128229,128233,128240,128243,128247,128250,128296,128300,128303,128306,128309,128337,128341,128344,128371],[10,127853,127849],{"id":127854},"_6-css语法与文本样式",[14,127856,127858],{"id":127857},"_61-css语法规范","6.1 css语法规范",[19,127860,127861],{},"由两部分组成，选择器及一条或多条声明",[2643,127863],{"style":127531,"src":127864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127866,127867],{},[1464,127868,1352],{},[19,127870,127871],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127873,127874],{},"②属性与属性值以“键值对”的形式出现",[19,127876,127877],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127879,127880],{},"④属性和属性值之间用英文“;”分开",[2643,127882],{"style":127531,"src":127883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2643,127885],{"style":127531,"src":127886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2643,127888],{"style":127531,"src":127889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127891,127893],{"id":127892},"_62-css选择器","6.2 css选择器",[19,127895,127896],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[198,127898,127900],{"id":127899},"_621-标签选择器","6.2.1 标签选择器",[19,127902,127903],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127905,127906],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2643,127908],{"style":127531,"src":127909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[198,127911,127913],{"id":127912},"_622-类选择器","6.2.2 类选择器",[19,127915,127916],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127918,127919],{},"②样例",[2643,127921],{"style":127531,"src":127922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127924,127925,127926,127928],{},"③ ",[1464,127927,127763],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127930,127931],{},"可以理解为给这个标签起了个名字，来表示；",[19,127933,127934],{},"长名称或词组可以使用横线来为选择器命名；",[19,127936,127937],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127939,127940],{},"命名要有意义；",[2643,127942],{"style":127531,"src":127943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127945,127946],{},"类选择器也可以指定特殊的元素p.center{}",[19,127948,127949],{},"p.center和.center都对",[60,127951,127953],{"className":127675,"code":127952,"language":127677,"meta":66,"style":66},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[39,127954,127955,127960,127969,127979],{"__ignoreMap":66},[84,127956,127957],{"class":86,"line":87},[84,127958,127959],{"class":1378},"\u002F* 类选择器指定特殊元素 *\u002F\n",[84,127961,127962,127964,127967],{"class":86,"line":98},[84,127963,19],{"class":52449},[84,127965,127966],{"class":90},".center",[84,127968,16742],{"class":154},[84,127970,127971,127973,127975,127977],{"class":86,"line":106},[84,127972,71672],{"class":94},[84,127974,52586],{"class":154},[84,127976,52741],{"class":94},[84,127978,2471],{"class":154},[84,127980,127981],{"class":86,"line":112},[84,127982,2746],{"class":154},[198,127984,127986],{"id":127985},"_623-多类名使用","6.2.3 多类名使用",[19,127988,127989],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2643,127991],{"style":127531,"src":127992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127994,127995],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[198,127997,127999],{"id":127998},"_624-id选择器","6.2.4 id选择器",[19,128001,128002],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128004,128005],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2643,128007],{"style":127531,"src":128008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128010,128011],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128013,128014],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[198,128016,128018],{"id":128017},"_625-通配符选择器","6.2.5 通配符选择器",[19,128020,128021],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128023,128024],{},"* {",[19,128026,128027],{},"color=\"red\"}",[198,128029,128031],{"id":128030},"_626-总结","6.2.6 总结",[2643,128033],{"style":127531,"src":128034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128036,128038],{"id":128037},"_63-css字体属性","6.3 css字体属性",[19,128040,128041],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[198,128043,128045],{"id":128044},"_631-字体系列","6.3.1 字体系列",[19,128047,128048],{},"font-family: '宋体';",[19,128050,128051,128053],{},[1464,128052,1352],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[198,128055,128057],{"id":128056},"_632-字体大小","6.3.2 字体大小",[19,128059,128060],{},"font-size: 20px",[19,128062,128063,27631],{},[1464,128064,127763],{},[19,128066,128067],{},"①px（像素）大小是网页的最常用单位",[19,128069,128070],{},"②谷歌浏览器默认为16px",[19,128072,128073],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128075,128076],{},"④可以给body指定整个页面的大小：会自动引用",[60,128078,128080],{"className":127675,"code":128079,"language":127677,"meta":66,"style":66},"body {\n  font-size: 16px;\n}\n",[39,128081,128082,128088,128100],{"__ignoreMap":66},[84,128083,128084,128086],{"class":86,"line":87},[84,128085,52949],{"class":52449},[84,128087,16742],{"class":154},[84,128089,128090,128092,128094,128096,128098],{"class":86,"line":98},[84,128091,71772],{"class":94},[84,128093,52586],{"class":154},[84,128095,1910],{"class":94},[84,128097,52641],{"class":129},[84,128099,2471],{"class":154},[84,128101,128102],{"class":86,"line":106},[84,128103,2746],{"class":154},[19,128105,128106],{},"⑤标题标签比较特殊，需要单独指定大小",[198,128108,128110],{"id":128109},"_633-字体粗细","6.3.3 字体粗细",[19,128112,128113],{},"font-weight: bold;",[19,128115,128116],{},"font-weight: 100；",[19,128118,128119,128121],{},[1464,128120,1352],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128123,128124],{},"font-weight= 400;",[19,128126,128127],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[198,128129,128131],{"id":128130},"_634-文字样式","6.3.4 文字样式",[19,128133,128134],{},"font-style: normal；",[19,128136,128137,27631],{},[1464,128138,128139],{},"属性值",[19,128141,128142],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128144,128145],{},"②italic：浏览器会显示斜体的字体样式",[2643,128147],{"style":127531,"src":128148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[198,128150,128152],{"id":128151},"_635-字体符合属性","6.3.5 字体符合属性",[2643,128154],{"style":127531,"src":128155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2643,128157],{"style":127531,"src":128158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128160,128161],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128163,128164,27631],{},[1464,128165,127763],{},[19,128167,128168],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128170,128171],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128173,128174],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128176,128178],{"id":128177},"_64-css-test文本属性","6.4 css test文本属性",[198,128180,128182],{"id":128181},"_641-文本颜色","6.4.1 文本颜色",[19,128184,128185],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[60,128187,128189],{"className":127675,"code":128188,"language":127677,"meta":66,"style":66},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[39,128190,128191,128196,128202,128212,128217,128222],{"__ignoreMap":66},[84,128192,128193],{"class":86,"line":87},[84,128194,128195],{"class":1378},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[84,128197,128198,128200],{"class":86,"line":98},[84,128199,19],{"class":52449},[84,128201,16742],{"class":154},[84,128203,128204,128206,128208,128210],{"class":86,"line":106},[84,128205,72051],{"class":94},[84,128207,52586],{"class":154},[84,128209,58568],{"class":94},[84,128211,2471],{"class":154},[84,128213,128214],{"class":86,"line":112},[84,128215,128216],{"class":1378},"  \u002F* color: #ff0000; *\u002F\n",[84,128218,128219],{"class":86,"line":425},[84,128220,128221],{"class":1378},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[84,128223,128224],{"class":86,"line":2395},[84,128225,2746],{"class":154},[2643,128227],{"style":127531,"src":128228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[198,128230,128232],{"id":128231},"_642-对齐文本","6.4.2 对齐文本",[19,128234,128235,128236,128239],{},"text-align属于用于设置元素内文本内容的 ",[1464,128237,128238],{},"水平对齐"," 方式",[19,128241,128242],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[198,128244,128246],{"id":128245},"_643-装饰文本","6.4.3 装饰文本",[19,128248,128249],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[60,128251,128253],{"className":127675,"code":128252,"language":127677,"meta":66,"style":66},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[39,128254,128255,128261,128271,128275,128281,128292],{"__ignoreMap":66},[84,128256,128257,128259],{"class":86,"line":87},[84,128258,208],{"class":52449},[84,128260,16742],{"class":154},[84,128262,128263,128265,128267,128269],{"class":86,"line":98},[84,128264,71648],{"class":94},[84,128266,52586],{"class":154},[84,128268,55884],{"class":94},[84,128270,2471],{"class":154},[84,128272,128273],{"class":86,"line":106},[84,128274,2746],{"class":154},[84,128276,128277,128279],{"class":86,"line":112},[84,128278,19],{"class":52449},[84,128280,16742],{"class":154},[84,128282,128283,128285,128287,128290],{"class":86,"line":425},[84,128284,71648],{"class":94},[84,128286,52586],{"class":154},[84,128288,128289],{"class":94},"underline",[84,128291,2471],{"class":154},[84,128293,128294],{"class":86,"line":2395},[84,128295,2746],{"class":154},[198,128297,128299],{"id":128298},"_644-文本缩进","6.4.4 文本缩进",[19,128301,128302],{},"实现文本的第一行首行缩进自己指定的距离",[19,128304,128305],{},"20px往右边走；-20px往左边走",[19,128307,128308],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[60,128310,128312],{"className":127675,"code":128311,"language":127677,"meta":66,"style":66},"p {\n  text-indent: 2em;\n}\n",[39,128313,128314,128320,128333],{"__ignoreMap":66},[84,128315,128316,128318],{"class":86,"line":87},[84,128317,19],{"class":52449},[84,128319,16742],{"class":154},[84,128321,128322,128325,128327,128329,128331],{"class":86,"line":98},[84,128323,128324],{"class":94},"  text-indent",[84,128326,52586],{"class":154},[84,128328,1397],{"class":94},[84,128330,24723],{"class":129},[84,128332,2471],{"class":154},[84,128334,128335],{"class":86,"line":106},[84,128336,2746],{"class":154},[198,128338,128340],{"id":128339},"_645-行间距","6.4.5 行间距",[19,128342,128343],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[60,128345,128347],{"className":127675,"code":128346,"language":127677,"meta":66,"style":66},"p {\n  line-height: 1.6;\n}\n",[39,128348,128349,128355,128367],{"__ignoreMap":66},[84,128350,128351,128353],{"class":86,"line":87},[84,128352,19],{"class":52449},[84,128354,16742],{"class":154},[84,128356,128357,128360,128362,128365],{"class":86,"line":98},[84,128358,128359],{"class":94},"  line-height",[84,128361,52586],{"class":154},[84,128363,128364],{"class":94},"1.6",[84,128366,2471],{"class":154},[84,128368,128369],{"class":86,"line":106},[84,128370,2746],{"class":154},[1222,128372,128373],{},"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":66,"searchDepth":98,"depth":98,"links":128375},[128376,128377,128385,128392],{"id":127857,"depth":98,"text":127858},{"id":127892,"depth":98,"text":127893,"children":128378},[128379,128380,128381,128382,128383,128384],{"id":127899,"depth":106,"text":127900},{"id":127912,"depth":106,"text":127913},{"id":127985,"depth":106,"text":127986},{"id":127998,"depth":106,"text":127999},{"id":128017,"depth":106,"text":128018},{"id":128030,"depth":106,"text":128031},{"id":128037,"depth":98,"text":128038,"children":128386},[128387,128388,128389,128390,128391],{"id":128044,"depth":106,"text":128045},{"id":128056,"depth":106,"text":128057},{"id":128109,"depth":106,"text":128110},{"id":128130,"depth":106,"text":128131},{"id":128151,"depth":106,"text":128152},{"id":128177,"depth":98,"text":128178,"children":128393},[128394,128395,128396,128397,128398],{"id":128181,"depth":106,"text":128182},{"id":128231,"depth":106,"text":128232},{"id":128245,"depth":106,"text":128246},{"id":128298,"depth":106,"text":128299},{"id":128339,"depth":106,"text":128340},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127849,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128405,"title":128406,"body":128407,"description":1249,"extension":1250,"meta":129056,"navigation":1252,"path":129057,"seo":129058,"stem":129059,"__hash__":129060},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128408,"toc":129037},[128409,128412,128416,128420,128480,128484,128494,128497,128500,128504,128529,128533,128536,128539,128542,128545,128548,128552,128555,128558,128600,128603,128629,128635,128638,128642,128646,128652,128655,128658,128661,128664,128667,128670,128715,128719,128722,128725,128729,128733,128762,128765,128770,128773,128776,128779,128782,128786,128790,128793,128795,128798,128802,128805,128809,128812,128815,128818,128822,128826,128832,128842,128845,128848,128851,128854,128857,128980,128988,128996,129034],[10,128410,128406],{"id":128411},"_7-css引入方式与选择器进阶",[14,128413,128415],{"id":128414},"_71-css引入方式","7.1 css引入方式",[198,128417,128419],{"id":128418},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[60,128421,128425],{"className":128422,"code":128423,"language":128424,"meta":66,"style":66},"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",[39,128426,128427,128435,128442,128454,128467,128472],{"__ignoreMap":66},[84,128428,128429,128431,128433],{"class":86,"line":87},[84,128430,2218],{"class":154},[84,128432,1222],{"class":52449},[84,128434,52456],{"class":154},[84,128436,128437,128440],{"class":86,"line":98},[84,128438,128439],{"class":52449},"  h1",[84,128441,16742],{"class":154},[84,128443,128444,128447,128449,128452],{"class":86,"line":106},[84,128445,128446],{"class":94},"    color",[84,128448,52586],{"class":154},[84,128450,128451],{"class":94},"blue",[84,128453,2471],{"class":154},[84,128455,128456,128459,128461,128463,128465],{"class":86,"line":112},[84,128457,128458],{"class":94},"    font-size",[84,128460,52586],{"class":154},[84,128462,2108],{"class":94},[84,128464,52641],{"class":129},[84,128466,2471],{"class":154},[84,128468,128469],{"class":86,"line":425},[84,128470,128471],{"class":154},"  }\n",[84,128473,128474,128476,128478],{"class":86,"line":2395},[84,128475,52934],{"class":154},[84,128477,1222],{"class":52449},[84,128479,52456],{"class":154},[19,128481,128482,27631],{},[1464,128483,127763],{},[19,128485,78372,128486,128489,128490,128493],{},[39,128487,128488],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[39,128491,128492],{},"\u003Chead>","标签中",[19,128495,128496],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128498,128499],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[198,128501,128503],{"id":128502},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[60,128505,128507],{"className":128422,"code":128506,"language":128424,"meta":66,"style":66},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[39,128508,128509],{"__ignoreMap":66},[84,128510,128511,128513,128515,128517,128519,128522,128525,128527],{"class":86,"line":87},[84,128512,2218],{"class":154},[84,128514,19],{"class":52449},[84,128516,63772],{"class":90},[84,128518,867],{"class":154},[84,128520,128521],{"class":158},"\"color: red; font-size: 16px;\"",[84,128523,128524],{"class":154},">这是一个段落\u003C\u002F",[84,128526,19],{"class":52449},[84,128528,52456],{"class":154},[19,128530,128531,27631],{},[1464,128532,127763],{},[19,128534,128535],{},"①style其实就是标签的属性",[19,128537,128538],{},"②在双引号中间，写法要符合css规范",[19,128540,128541],{},"③可以控制当前的标签设置样式",[19,128543,128544],{},"④书写繁琐，简单时才用",[19,128546,128547],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[198,128549,128551],{"id":128550},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128553,128554],{},"使用最多，单独建一个css文件，然后html引用",[19,128556,128557],{},"①css文件部分： style.css",[60,128559,128561],{"className":127675,"code":128560,"language":127677,"meta":66,"style":66},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[39,128562,128563,128568,128574,128584,128596],{"__ignoreMap":66},[84,128564,128565],{"class":86,"line":87},[84,128566,128567],{"class":1378},"\u002F* style.css *\u002F\n",[84,128569,128570,128572],{"class":86,"line":98},[84,128571,10],{"class":52449},[84,128573,16742],{"class":154},[84,128575,128576,128578,128580,128582],{"class":86,"line":106},[84,128577,72051],{"class":94},[84,128579,52586],{"class":154},[84,128581,128451],{"class":94},[84,128583,2471],{"class":154},[84,128585,128586,128588,128590,128592,128594],{"class":86,"line":112},[84,128587,71772],{"class":94},[84,128589,52586],{"class":154},[84,128591,2108],{"class":94},[84,128593,52641],{"class":129},[84,128595,2471],{"class":154},[84,128597,128598],{"class":86,"line":425},[84,128599,2746],{"class":154},[19,128601,128602],{},"②html部分",[60,128604,128606],{"className":128422,"code":128605,"language":128424,"meta":66,"style":66},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[39,128607,128608],{"__ignoreMap":66},[84,128609,128610,128612,128614,128616,128618,128620,128622,128624,128627],{"class":86,"line":87},[84,128611,2218],{"class":154},[84,128613,70151],{"class":52449},[84,128615,70154],{"class":90},[84,128617,867],{"class":154},[84,128619,70159],{"class":158},[84,128621,62203],{"class":90},[84,128623,867],{"class":154},[84,128625,128626],{"class":158},"\"style.css\"",[84,128628,52456],{"class":154},[19,128630,128631,128634],{},[39,128632,128633],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128636,128637],{},"ctrl+0回到页面原来大小",[14,128639,128641],{"id":128640},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[198,128643,128645],{"id":128644},"_721-快速生成html","7.2.1 快速生成html",[19,128647,128648,128649],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[39,128650,128651],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128653,128654],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128656,128657],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128659,128660],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128662,128663],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128665,128666],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128668,128669],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[60,128671,128673],{"className":128422,"code":128672,"language":128424,"meta":66,"style":66},"\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",[39,128674,128675,128680,128685,128690,128695,128700,128705,128710],{"__ignoreMap":66},[84,128676,128677],{"class":86,"line":87},[84,128678,128679],{"class":1378},"\u003C!-- Emmet 语法示例 -->\n",[84,128681,128682],{"class":86,"line":98},[84,128683,128684],{"class":1378},"\u003C!-- div*3        → 生成3个div -->\n",[84,128686,128687],{"class":86,"line":106},[84,128688,128689],{"class":1378},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[84,128691,128692],{"class":86,"line":112},[84,128693,128694],{"class":1378},"\u003C!-- div+p        → 兄弟div和p -->\n",[84,128696,128697],{"class":86,"line":425},[84,128698,128699],{"class":1378},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[84,128701,128702],{"class":86,"line":2395},[84,128703,128704],{"class":1378},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[84,128706,128707],{"class":86,"line":2401},[84,128708,128709],{"class":1378},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[84,128711,128712],{"class":86,"line":2492},[84,128713,128714],{"class":1378},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[198,128716,128718],{"id":128717},"_722-快速生成css","7.2.2 快速生成css",[19,128720,128721],{},"简写开头",[19,128723,128724],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128726,128728],{"id":128727},"_73-css复合选择器","7.3 css复合选择器",[198,128730,128732],{"id":128731},"_731-后代选择器","7.3.1 后代选择器",[60,128734,128736],{"className":127675,"code":128735,"language":127677,"meta":66,"style":66},".parent .child {\n  color: blue;\n}\n",[39,128737,128738,128748,128758],{"__ignoreMap":66},[84,128739,128740,128743,128746],{"class":86,"line":87},[84,128741,128742],{"class":90},".parent",[84,128744,128745],{"class":90}," .child",[84,128747,16742],{"class":154},[84,128749,128750,128752,128754,128756],{"class":86,"line":98},[84,128751,72051],{"class":94},[84,128753,52586],{"class":154},[84,128755,128451],{"class":94},[84,128757,2471],{"class":154},[84,128759,128760],{"class":86,"line":106},[84,128761,2746],{"class":154},[19,128763,128764],{},"元素1 元素2 {样式声明}",[19,128766,128767],{},[1464,128768,128769],{},"注意点:",[19,128771,128772],{},"①元素1和元素2中间用空格隔开",[19,128774,128775],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128777,128778],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128780,128781],{},"④元素1和元素2可以是任意基础选择器",[198,128783,128785],{"id":128784},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128787,128788],{},[1464,128789,128769],{},[19,128791,128792],{},"①元素1和元素2中间用大于号隔开",[19,128794,128775],{},[19,128796,128797],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[198,128799,128801],{"id":128800},"_733-并集选择器","7.3.3 并集选择器",[19,128803,128804],{},"元素1，元素2 {样式声明}",[19,128806,128807],{},[1464,128808,128769],{},[19,128810,128811],{},"①元素1和元素2中间用逗号隔开",[19,128813,128814],{},"②逗号可以理解为和的意思",[19,128816,128817],{},"③并集选择器通常用于集体声明",[198,128819,128821],{"id":128820},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128823,128824],{},[1464,128825,128769],{},[19,128827,128828,128829,128831],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70151,128830],{},"－:visited－:hover－:active。",[19,128833,128834,128835,128838,128839,26903],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128836,128837],"hover",{}," 、 ",[128840,128841],"first-child",{},[19,128843,128844],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128846,128847],{},"link对没访问的进行设置",[19,128849,128850],{},"vistied对已访问的进行改变",[19,128852,128853],{},"hover鼠标经过就会变",[19,128855,128856],{},"active常按(点)就会变",[60,128858,128860],{"className":127675,"code":128859,"language":127677,"meta":66,"style":66},"\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",[39,128861,128862,128867,128876,128886,128896,128900,128909,128920,128924,128932,128942,128952,128956,128965,128976],{"__ignoreMap":66},[84,128863,128864],{"class":86,"line":87},[84,128865,128866],{"class":1378},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[84,128868,128869,128871,128874],{"class":86,"line":98},[84,128870,208],{"class":52449},[84,128872,128873],{"class":90},":link",[84,128875,16742],{"class":154},[84,128877,128878,128880,128882,128884],{"class":86,"line":106},[84,128879,72051],{"class":94},[84,128881,52586],{"class":154},[84,128883,63515],{"class":94},[84,128885,2471],{"class":154},[84,128887,128888,128890,128892,128894],{"class":86,"line":112},[84,128889,71648],{"class":94},[84,128891,52586],{"class":154},[84,128893,55884],{"class":94},[84,128895,2471],{"class":154},[84,128897,128898],{"class":86,"line":425},[84,128899,2746],{"class":154},[84,128901,128902,128904,128907],{"class":86,"line":2395},[84,128903,208],{"class":52449},[84,128905,128906],{"class":90},":visited",[84,128908,16742],{"class":154},[84,128910,128911,128913,128915,128918],{"class":86,"line":2401},[84,128912,72051],{"class":94},[84,128914,52586],{"class":154},[84,128916,128917],{"class":94},"purple",[84,128919,2471],{"class":154},[84,128921,128922],{"class":86,"line":2492},[84,128923,2746],{"class":154},[84,128925,128926,128928,128930],{"class":86,"line":2498},[84,128927,208],{"class":52449},[84,128929,62086],{"class":90},[84,128931,16742],{"class":154},[84,128933,128934,128936,128938,128940],{"class":86,"line":2510},[84,128935,72051],{"class":94},[84,128937,52586],{"class":154},[84,128939,56036],{"class":94},[84,128941,2471],{"class":154},[84,128943,128944,128946,128948,128950],{"class":86,"line":2793},[84,128945,71648],{"class":94},[84,128947,52586],{"class":154},[84,128949,128289],{"class":94},[84,128951,2471],{"class":154},[84,128953,128954],{"class":86,"line":2798},[84,128955,2746],{"class":154},[84,128957,128958,128960,128963],{"class":86,"line":2804},[84,128959,208],{"class":52449},[84,128961,128962],{"class":90},":active",[84,128964,16742],{"class":154},[84,128966,128967,128969,128971,128974],{"class":86,"line":2809},[84,128968,72051],{"class":94},[84,128970,52586],{"class":154},[84,128972,128973],{"class":94},"green",[84,128975,2471],{"class":154},[84,128977,128978],{"class":86,"line":2823},[84,128979,2746],{"class":154},[198,128981,128983,128984,128987],{"id":128982},"_735-伪类选择器","7.3.5 ",[128985,128986],"focus",{},"伪类选择器",[19,128989,128990,128992,128993,128995],{},[128985,128991],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[39,128994,127736],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[60,128997,128999],{"className":127675,"code":128998,"language":127677,"meta":66,"style":66},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[39,129000,129001,129009,129020,129030],{"__ignoreMap":66},[84,129002,129003,129005,129007],{"class":86,"line":87},[84,129004,54970],{"class":52449},[84,129006,63046],{"class":90},[84,129008,16742],{"class":154},[84,129010,129011,129014,129016,129018],{"class":86,"line":98},[84,129012,129013],{"class":94},"  border-color",[84,129015,52586],{"class":154},[84,129017,56036],{"class":94},[84,129019,2471],{"class":154},[84,129021,129022,129024,129026,129028],{"class":86,"line":106},[84,129023,71944],{"class":94},[84,129025,52586],{"class":154},[84,129027,55884],{"class":94},[84,129029,2471],{"class":154},[84,129031,129032],{"class":86,"line":112},[84,129033,2746],{"class":154},[1222,129035,129036],{},"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":66,"searchDepth":98,"depth":98,"links":129038},[129039,129044,129048],{"id":128414,"depth":98,"text":128415,"children":129040},[129041,129042,129043],{"id":128418,"depth":106,"text":128419},{"id":128502,"depth":106,"text":128503},{"id":128550,"depth":106,"text":128551},{"id":128640,"depth":98,"text":128641,"children":129045},[129046,129047],{"id":128644,"depth":106,"text":128645},{"id":128717,"depth":106,"text":128718},{"id":128727,"depth":98,"text":128728,"children":129049},[129050,129051,129052,129053,129054],{"id":128731,"depth":106,"text":128732},{"id":128784,"depth":106,"text":128785},{"id":128800,"depth":106,"text":128801},{"id":128820,"depth":106,"text":128821},{"id":128982,"depth":106,"text":129055},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128406,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129062,"title":129063,"body":129064,"description":1249,"extension":1250,"meta":130987,"navigation":1252,"path":130988,"seo":130989,"stem":130990,"__hash__":130991},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129065,"toc":130961},[129066,129069,129073,129082,129086,129112,129117,129120,129123,129126,129129,129133,129136,129146,129154,129158,129193,129198,129201,129204,129207,129210,129214,129217,129226,129230,129243,129248,129251,129254,129257,129261,129264,129268,129271,129326,129329,129360,129363,129417,129421,129424,129590,129713,129716,129719,129722,129725,129729,129732,129736,129739,129742,129746,129749,129780,129807,129835,129838,129842,129868,129911,129915,130009,130012,130039,130042,130045,130048,130051,130054,130057,130060,130063,130066,130070,130127,130154,130158,130206,130210,130251,130253,130256,130259,130262,130265,130269,130361,130364,130367,130370,130374,130497,130698,130702,130706,130709,130712,130715,130719,130722,130725,130750,130753,130756,130759,130762,130765,130769,130777,130839,130842,130900,130903,130906,130909,130912,130915,130918,130921,130958],[10,129067,129063],{"id":129068},"_8-css显示模式与背景特性",[14,129070,129072],{"id":129071},"_81-css元素显示模式","8.1 css元素显示模式",[19,129074,129075,129076,129078,129079,129081],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[39,129077,127286],{},"自己占一行，比如一行可以放多个",[39,129080,127289],{},"，HTML 元素一般分为块元素和行内元素两种类型",[198,129083,129085],{"id":129084},"_811-块元素","8.1.1 块元素",[19,129087,129088,129089,129091,129092,42,129095,42,129097,42,129099,42,129102,42,129105,129108,129109,129111],{},"常见的块元素有",[39,129090,127190],{},"~",[39,129093,129094],{},"\u003Ch6>",[39,129096,127216],{},[39,129098,127286],{},[39,129100,129101],{},"\u003Cul>",[39,129103,129104],{},"\u003Col>",[39,129106,129107],{},"\u003Cli>","等，其中 ",[39,129110,127286],{}," 标签是最典型的块元素",[19,129113,129114],{},[1464,129115,129116],{},"块级元素的特点：",[19,129118,129119],{},"① 比较霸道，自己独占一行。",[19,129121,129122],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129124,129125],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129127,129128],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129130,129131],{},[1464,129132,1352],{},[19,129134,129135],{},"①文字类的元素内不能使用块级元素",[19,129137,78395,129138,129140,129141,129143,129144],{},[39,129139,127216],{}," 标签主要用于存放文字，因此 ",[39,129142,127216],{}," 里面不能放块级元素，特别是不能放",[39,129145,127286],{},[19,129147,129148,129149,129091,129151,129153],{},"⑥同理， ",[39,129150,127190],{},[39,129152,129094],{},"等都是文字类块级标签，里面也不能放其他块级元素",[198,129155,129157],{"id":129156},"_812-行内元素","8.1.2 行内元素",[19,129159,129160,129161,42,129163,42,129166,42,129169,42,129172,42,129175,42,129178,42,129181,42,129184,42,129187,129189,129190,129192],{},"常见的行内元素有 ",[39,129162,127448],{},[39,129164,129165],{},"\u003Cstrong>",[39,129167,129168],{},"\u003Cb>",[39,129170,129171],{},"\u003Cem>",[39,129173,129174],{},"\u003Ci>",[39,129176,129177],{},"\u003Cdel>",[39,129179,129180],{},"\u003Cs>",[39,129182,129183],{},"\u003Cins>",[39,129185,129186],{},"\u003Cu>",[39,129188,127289],{}," 等，其中 ",[39,129191,127289],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129194,129195],{},[1464,129196,129197],{},"特点：",[19,129199,129200],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129202,129203],{},"② 高、宽直接设置是无效的。",[19,129205,129206],{},"③ 默认宽度就是它本身内容的宽度。",[19,129208,129209],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129211,129212],{},[1464,129213,1352],{},[19,129215,129216],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129218,129219,129220,129222,129223,129225],{},"②特殊情况链接 ",[39,129221,127448],{}," 里面可以放块级元素，但是给 ",[39,129224,127448],{}," 转换一下块级模式最安全",[198,129227,129229],{"id":129228},"_813-行内块元素","8.1.3 行内块元素",[19,129231,129232,129233,42,129236,42,129239,129242],{},"在行内元素中有几个特殊的标签 —— ",[39,129234,129235],{},"\u003Cimg \u002F>",[39,129237,129238],{},"\u003Cinput \u002F>",[39,129240,129241],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129244,129245],{},[1464,129246,129247],{},"行内块元素的特点：",[19,129249,129250],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129252,129253],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129255,129256],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[198,129258,129260],{"id":129259},"_814-总结","8.1.4 总结",[2643,129262],{"style":127531,"src":129263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[198,129265,129267],{"id":129266},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129269,129270],{},"①转换为块元素：display:block;",[60,129272,129274],{"className":127675,"code":129273,"language":127677,"meta":66,"style":66},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[39,129275,129276,129281,129287,129298,129310,129322],{"__ignoreMap":66},[84,129277,129278],{"class":86,"line":87},[84,129279,129280],{"class":1378},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[84,129282,129283,129285],{"class":86,"line":98},[84,129284,208],{"class":52449},[84,129286,16742],{"class":154},[84,129288,129289,129292,129294,129296],{"class":86,"line":106},[84,129290,129291],{"class":94},"  display",[84,129293,52586],{"class":154},[84,129295,62015],{"class":94},[84,129297,2471],{"class":154},[84,129299,129300,129302,129304,129306,129308],{"class":86,"line":112},[84,129301,71714],{"class":94},[84,129303,52586],{"class":154},[84,129305,821],{"class":94},[84,129307,52641],{"class":129},[84,129309,2471],{"class":154},[84,129311,129312,129314,129316,129318,129320],{"class":86,"line":425},[84,129313,71934],{"class":94},[84,129315,52586],{"class":154},[84,129317,1711],{"class":94},[84,129319,52641],{"class":129},[84,129321,2471],{"class":154},[84,129323,129324],{"class":86,"line":2395},[84,129325,2746],{"class":154},[19,129327,129328],{},"②转换为行内元素：display:inline;",[60,129330,129332],{"className":127675,"code":129331,"language":127677,"meta":66,"style":66},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[39,129333,129334,129339,129345,129356],{"__ignoreMap":66},[84,129335,129336],{"class":86,"line":87},[84,129337,129338],{"class":1378},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[84,129340,129341,129343],{"class":86,"line":98},[84,129342,52760],{"class":52449},[84,129344,16742],{"class":154},[84,129346,129347,129349,129351,129354],{"class":86,"line":106},[84,129348,129291],{"class":94},[84,129350,52586],{"class":154},[84,129352,129353],{"class":94},"inline",[84,129355,2471],{"class":154},[84,129357,129358],{"class":86,"line":112},[84,129359,2746],{"class":154},[19,129361,129362],{},"③转换为行内块：display:inline-block;",[60,129364,129366],{"className":127675,"code":129365,"language":127677,"meta":66,"style":66},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[39,129367,129368,129373,129379,129389,129401,129413],{"__ignoreMap":66},[84,129369,129370],{"class":86,"line":87},[84,129371,129372],{"class":1378},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[84,129374,129375,129377],{"class":86,"line":98},[84,129376,84],{"class":52449},[84,129378,16742],{"class":154},[84,129380,129381,129383,129385,129387],{"class":86,"line":106},[84,129382,129291],{"class":94},[84,129384,52586],{"class":154},[84,129386,73529],{"class":94},[84,129388,2471],{"class":154},[84,129390,129391,129393,129395,129397,129399],{"class":86,"line":112},[84,129392,71714],{"class":94},[84,129394,52586],{"class":154},[84,129396,1921],{"class":94},[84,129398,52641],{"class":129},[84,129400,2471],{"class":154},[84,129402,129403,129405,129407,129409,129411],{"class":86,"line":425},[84,129404,71934],{"class":94},[84,129406,52586],{"class":154},[84,129408,2259],{"class":94},[84,129410,52641],{"class":129},[84,129412,2471],{"class":154},[84,129414,129415],{"class":86,"line":2395},[84,129416,2746],{"class":154},[198,129418,129420],{"id":129419},"_816-小米侧边栏","8.1.6 小米侧边栏",[2643,129422],{"style":127531,"src":129423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[60,129425,129427],{"className":128422,"code":129426,"language":128424,"meta":66,"style":66},"\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",[39,129428,129429,129434,129449,129468,129487,129506,129525,129544,129563,129582],{"__ignoreMap":66},[84,129430,129431],{"class":86,"line":87},[84,129432,129433],{"class":1378},"\u003C!-- 小米侧边栏案例 -->\n",[84,129435,129436,129438,129440,129442,129444,129447],{"class":86,"line":98},[84,129437,2218],{"class":154},[84,129439,52760],{"class":52449},[84,129441,54635],{"class":90},[84,129443,867],{"class":154},[84,129445,129446],{"class":158},"\"sidebar\"",[84,129448,52456],{"class":154},[84,129450,129451,129453,129455,129457,129459,129461,129464,129466],{"class":86,"line":106},[84,129452,53293],{"class":154},[84,129454,208],{"class":52449},[84,129456,62203],{"class":90},[84,129458,867],{"class":154},[84,129460,62208],{"class":158},[84,129462,129463],{"class":154},">手机 电话卡\u003C\u002F",[84,129465,208],{"class":52449},[84,129467,52456],{"class":154},[84,129469,129470,129472,129474,129476,129478,129480,129483,129485],{"class":86,"line":112},[84,129471,53293],{"class":154},[84,129473,208],{"class":52449},[84,129475,62203],{"class":90},[84,129477,867],{"class":154},[84,129479,62208],{"class":158},[84,129481,129482],{"class":154},">电视 盒子\u003C\u002F",[84,129484,208],{"class":52449},[84,129486,52456],{"class":154},[84,129488,129489,129491,129493,129495,129497,129499,129502,129504],{"class":86,"line":425},[84,129490,53293],{"class":154},[84,129492,208],{"class":52449},[84,129494,62203],{"class":90},[84,129496,867],{"class":154},[84,129498,62208],{"class":158},[84,129500,129501],{"class":154},">笔记本 平板\u003C\u002F",[84,129503,208],{"class":52449},[84,129505,52456],{"class":154},[84,129507,129508,129510,129512,129514,129516,129518,129521,129523],{"class":86,"line":2395},[84,129509,53293],{"class":154},[84,129511,208],{"class":52449},[84,129513,62203],{"class":90},[84,129515,867],{"class":154},[84,129517,62208],{"class":158},[84,129519,129520],{"class":154},">出行 穿戴\u003C\u002F",[84,129522,208],{"class":52449},[84,129524,52456],{"class":154},[84,129526,129527,129529,129531,129533,129535,129537,129540,129542],{"class":86,"line":2401},[84,129528,53293],{"class":154},[84,129530,208],{"class":52449},[84,129532,62203],{"class":90},[84,129534,867],{"class":154},[84,129536,62208],{"class":158},[84,129538,129539],{"class":154},">智能 路由器\u003C\u002F",[84,129541,208],{"class":52449},[84,129543,52456],{"class":154},[84,129545,129546,129548,129550,129552,129554,129556,129559,129561],{"class":86,"line":2492},[84,129547,53293],{"class":154},[84,129549,208],{"class":52449},[84,129551,62203],{"class":90},[84,129553,867],{"class":154},[84,129555,62208],{"class":158},[84,129557,129558],{"class":154},">健康 儿童\u003C\u002F",[84,129560,208],{"class":52449},[84,129562,52456],{"class":154},[84,129564,129565,129567,129569,129571,129573,129575,129578,129580],{"class":86,"line":2498},[84,129566,53293],{"class":154},[84,129568,208],{"class":52449},[84,129570,62203],{"class":90},[84,129572,867],{"class":154},[84,129574,62208],{"class":158},[84,129576,129577],{"class":154},">耳机 音响\u003C\u002F",[84,129579,208],{"class":52449},[84,129581,52456],{"class":154},[84,129583,129584,129586,129588],{"class":86,"line":2510},[84,129585,52934],{"class":154},[84,129587,52760],{"class":52449},[84,129589,52456],{"class":154},[60,129591,129593],{"className":127675,"code":129592,"language":127677,"meta":66,"style":66},".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",[39,129594,129595,129604,129614,129627,129639,129651,129663,129673,129684,129688,129698,129709],{"__ignoreMap":66},[84,129596,129597,129600,129602],{"class":86,"line":87},[84,129598,129599],{"class":90},".sidebar",[84,129601,2579],{"class":52449},[84,129603,16742],{"class":154},[84,129605,129606,129608,129610,129612],{"class":86,"line":98},[84,129607,129291],{"class":94},[84,129609,52586],{"class":154},[84,129611,62015],{"class":94},[84,129613,2471],{"class":154},[84,129615,129616,129618,129620,129623,129625],{"class":86,"line":106},[84,129617,71714],{"class":94},[84,129619,52586],{"class":154},[84,129621,129622],{"class":94},"234",[84,129624,52641],{"class":129},[84,129626,2471],{"class":154},[84,129628,129629,129631,129633,129635,129637],{"class":86,"line":112},[84,129630,71934],{"class":94},[84,129632,52586],{"class":154},[84,129634,1762],{"class":94},[84,129636,52641],{"class":129},[84,129638,2471],{"class":154},[84,129640,129641,129643,129645,129647,129649],{"class":86,"line":425},[84,129642,128359],{"class":94},[84,129644,52586],{"class":154},[84,129646,1762],{"class":94},[84,129648,52641],{"class":129},[84,129650,2471],{"class":154},[84,129652,129653,129655,129657,129659,129661],{"class":86,"line":2395},[84,129654,71969],{"class":94},[84,129656,52586],{"class":154},[84,129658,2259],{"class":94},[84,129660,52641],{"class":129},[84,129662,2471],{"class":154},[84,129664,129665,129667,129669,129671],{"class":86,"line":2401},[84,129666,72051],{"class":94},[84,129668,52586],{"class":154},[84,129670,61988],{"class":94},[84,129672,2471],{"class":154},[84,129674,129675,129677,129679,129682],{"class":86,"line":2492},[84,129676,72024],{"class":94},[84,129678,52586],{"class":154},[84,129680,129681],{"class":94},"#55585a",[84,129683,2471],{"class":154},[84,129685,129686],{"class":86,"line":2498},[84,129687,2746],{"class":154},[84,129689,129690,129692,129694,129696],{"class":86,"line":2510},[84,129691,129599],{"class":90},[84,129693,2579],{"class":52449},[84,129695,62086],{"class":90},[84,129697,16742],{"class":154},[84,129699,129700,129702,129704,129707],{"class":86,"line":2793},[84,129701,72024],{"class":94},[84,129703,52586],{"class":154},[84,129705,129706],{"class":94},"#ff6700",[84,129708,2471],{"class":154},[84,129710,129711],{"class":86,"line":2798},[84,129712,2746],{"class":154},[2643,129714],{"style":127531,"src":129715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129717,129718],{},"行高=盒子高度：实现文字的垂直居中",[19,129720,129721],{},"原理讲解：",[2643,129723],{"style":127531,"src":129724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129726,129728],{"id":129727},"_82-css背景","8.2 css背景",[19,129730,129731],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[198,129733,129735],{"id":129734},"_821-背景颜色","8.2.1 背景颜色",[19,129737,129738],{},"background-color:颜色值;",[19,129740,129741],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[198,129743,129745],{"id":129744},"_822-背景图片","8.2.2 背景图片",[19,129747,129748],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[60,129750,129752],{"className":127675,"code":129751,"language":127677,"meta":66,"style":66},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[39,129753,129754,129760,129776],{"__ignoreMap":66},[84,129755,129756,129758],{"class":86,"line":87},[84,129757,52760],{"class":52449},[84,129759,16742],{"class":154},[84,129761,129762,129765,129767,129769,129771,129774],{"class":86,"line":98},[84,129763,129764],{"class":94},"  background-image",[84,129766,52586],{"class":154},[84,129768,62872],{"class":94},[84,129770,155],{"class":154},[84,129772,129773],{"class":928},"images\u002Fbg.png",[84,129775,3897],{"class":154},[84,129777,129778],{"class":86,"line":106},[84,129779,2746],{"class":154},[458,129781,129782,129791],{},[461,129783,129784],{},[464,129785,129786,129789],{},[467,129787,129788],{"align":24906},"参数值",[467,129790,472],{"align":24906},[474,129792,129793,129800],{},[464,129794,129795,129797],{},[479,129796,55884],{"align":24906},[479,129798,129799],{"align":24906},"无背景图（默认的）",[464,129801,129802,129804],{},[479,129803,62872],{"align":24906},[479,129805,129806],{"align":24906},"使用绝对或相对地址指定背景图像",[60,129808,129809],{"className":127675,"code":129751,"language":127677,"meta":66,"style":66},[39,129810,129811,129817,129831],{"__ignoreMap":66},[84,129812,129813,129815],{"class":86,"line":87},[84,129814,52760],{"class":52449},[84,129816,16742],{"class":154},[84,129818,129819,129821,129823,129825,129827,129829],{"class":86,"line":98},[84,129820,129764],{"class":94},[84,129822,52586],{"class":154},[84,129824,62872],{"class":94},[84,129826,155],{"class":154},[84,129828,129773],{"class":928},[84,129830,3897],{"class":154},[84,129832,129833],{"class":86,"line":106},[84,129834,2746],{"class":154},[19,129836,129837],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[198,129839,129841],{"id":129840},"_823-背景平铺","8.2.3 背景平铺",[60,129843,129845],{"className":127675,"code":129844,"language":127677,"meta":66,"style":66},"div {\n  background-repeat: no-repeat;\n}\n",[39,129846,129847,129853,129864],{"__ignoreMap":66},[84,129848,129849,129851],{"class":86,"line":87},[84,129850,52760],{"class":52449},[84,129852,16742],{"class":154},[84,129854,129855,129858,129860,129862],{"class":86,"line":98},[84,129856,129857],{"class":94},"  background-repeat",[84,129859,52586],{"class":154},[84,129861,62882],{"class":94},[84,129863,2471],{"class":154},[84,129865,129866],{"class":86,"line":106},[84,129867,2746],{"class":154},[458,129869,129870,129878],{},[461,129871,129872],{},[464,129873,129874,129876],{},[467,129875,129788],{"align":24906},[467,129877,472],{"align":24906},[474,129879,129880,129888,129895,129903],{},[464,129881,129882,129885],{},[479,129883,129884],{"align":24906},"repeat",[479,129886,129887],{"align":24906},"背景图像在纵向和横向上平铺（默认的）",[464,129889,129890,129892],{},[479,129891,62882],{"align":24906},[479,129893,129894],{"align":24906},"背景图像不平铺",[464,129896,129897,129900],{},[479,129898,129899],{"align":24906},"repeat-x",[479,129901,129902],{"align":24906},"背景图像在横向上平铺",[464,129904,129905,129908],{},[479,129906,129907],{"align":24906},"repeat-y",[479,129909,129910],{"align":24906},"背景图像在纵向平铺",[198,129912,129914],{"id":129913},"_824-背景图片位置","8.2.4 背景图片位置",[60,129916,129918],{"className":127675,"code":129917,"language":127677,"meta":66,"style":66},"\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",[39,129919,129920,129925,129931,129945,129949,129954,129960,129976,129980,129985,129991,130005],{"__ignoreMap":66},[84,129921,129922],{"class":86,"line":87},[84,129923,129924],{"class":1378},"\u002F* 方位名词 *\u002F\n",[84,129926,129927,129929],{"class":86,"line":98},[84,129928,52760],{"class":52449},[84,129930,16742],{"class":154},[84,129932,129933,129936,129938,129940,129943],{"class":86,"line":106},[84,129934,129935],{"class":94},"  background-position",[84,129937,52586],{"class":154},[84,129939,52741],{"class":94},[84,129941,129942],{"class":94}," top",[84,129944,2471],{"class":154},[84,129946,129947],{"class":86,"line":112},[84,129948,2746],{"class":154},[84,129950,129951],{"class":86,"line":425},[84,129952,129953],{"class":1378},"\u002F* 精确单位 *\u002F\n",[84,129955,129956,129958],{"class":86,"line":2395},[84,129957,52760],{"class":52449},[84,129959,16742],{"class":154},[84,129961,129962,129964,129966,129968,129970,129972,129974],{"class":86,"line":2401},[84,129963,129935],{"class":94},[84,129965,52586],{"class":154},[84,129967,2008],{"class":94},[84,129969,52641],{"class":129},[84,129971,58651],{"class":94},[84,129973,52641],{"class":129},[84,129975,2471],{"class":154},[84,129977,129978],{"class":86,"line":2492},[84,129979,2746],{"class":154},[84,129981,129982],{"class":86,"line":2498},[84,129983,129984],{"class":1378},"\u002F* 混合单位 *\u002F\n",[84,129986,129987,129989],{"class":86,"line":2510},[84,129988,52760],{"class":52449},[84,129990,16742],{"class":154},[84,129992,129993,129995,129997,129999,130001,130003],{"class":86,"line":2793},[84,129994,129935],{"class":94},[84,129996,52586],{"class":154},[84,129998,2008],{"class":94},[84,130000,52641],{"class":129},[84,130002,18314],{"class":94},[84,130004,2471],{"class":154},[84,130006,130007],{"class":86,"line":2798},[84,130008,2746],{"class":154},[19,130010,130011],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[458,130013,130014,130022],{},[461,130015,130016],{},[464,130017,130018,130020],{},[467,130019,129788],{"align":24906},[467,130021,27032],{"align":24906},[474,130023,130024,130031],{},[464,130025,130026,130028],{},[479,130027,53117],{"align":24906},[479,130029,130030],{"align":24906},"百分数|由浮点数和单位标识符组成的长度值",[464,130032,130033,130036],{},[479,130034,130035],{"align":24906},"position",[479,130037,130038],{"align":24906},"top|center|bottom|left|center|right 方位名词",[19,130040,130041],{},"其他说明：",[19,130043,130044],{},"①参数是方位名词",[19,130046,130047],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130049,130050],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130052,130053],{},"②参数是精确单位",[19,130055,130056],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130058,130059],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130061,130062],{},"③参数是混合单位",[19,130064,130065],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[198,130067,130069],{"id":130068},"_825-背景图片固定","8.2.5 背景图片固定",[60,130071,130073],{"className":127675,"code":130072,"language":127677,"meta":66,"style":66},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[39,130074,130075,130080,130086,130098,130102,130107,130113,130123],{"__ignoreMap":66},[84,130076,130077],{"class":86,"line":87},[84,130078,130079],{"class":1378},"\u002F* 背景滚动（默认） *\u002F\n",[84,130081,130082,130084],{"class":86,"line":98},[84,130083,52760],{"class":52449},[84,130085,16742],{"class":154},[84,130087,130088,130091,130093,130096],{"class":86,"line":106},[84,130089,130090],{"class":94},"  background-attachment",[84,130092,52586],{"class":154},[84,130094,130095],{"class":94},"scroll",[84,130097,2471],{"class":154},[84,130099,130100],{"class":86,"line":112},[84,130101,2746],{"class":154},[84,130103,130104],{"class":86,"line":425},[84,130105,130106],{"class":1378},"\u002F* 背景固定 *\u002F\n",[84,130108,130109,130111],{"class":86,"line":2395},[84,130110,52760],{"class":52449},[84,130112,16742],{"class":154},[84,130114,130115,130117,130119,130121],{"class":86,"line":2401},[84,130116,130090],{"class":94},[84,130118,52586],{"class":154},[84,130120,87379],{"class":94},[84,130122,2471],{"class":154},[84,130124,130125],{"class":86,"line":2492},[84,130126,2746],{"class":154},[458,130128,130129,130138],{},[461,130130,130131],{},[464,130132,130133,130136],{},[467,130134,130135],{"align":24906},"参数",[467,130137,472],{"align":24906},[474,130139,130140,130147],{},[464,130141,130142,130144],{},[479,130143,130095],{"align":24906},[479,130145,130146],{"align":24906},"背景图像是随对象内容滚动",[464,130148,130149,130151],{},[479,130150,87379],{"align":24906},[479,130152,130153],{"align":24906},"背景图像固定",[198,130155,130157],{"id":130156},"_826-背景样式合写","8.2.6 背景样式合写",[60,130159,130161],{"className":127675,"code":130160,"language":127677,"meta":66,"style":66},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[39,130162,130163,130168,130174,130202],{"__ignoreMap":66},[84,130164,130165],{"class":86,"line":87},[84,130166,130167],{"class":1378},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[84,130169,130170,130172],{"class":86,"line":98},[84,130171,52760],{"class":52449},[84,130173,16742],{"class":154},[84,130175,130176,130178,130180,130182,130185,130187,130189,130191,130193,130196,130198,130200],{"class":86,"line":106},[84,130177,71757],{"class":94},[84,130179,52586],{"class":154},[84,130181,61988],{"class":94},[84,130183,130184],{"class":94}," url",[84,130186,155],{"class":154},[84,130188,129773],{"class":928},[84,130190,1154],{"class":154},[84,130192,62882],{"class":94},[84,130194,130195],{"class":94}," fixed",[84,130197,18314],{"class":94},[84,130199,129942],{"class":94},[84,130201,2471],{"class":154},[84,130203,130204],{"class":86,"line":112},[84,130205,2746],{"class":154},[198,130207,130209],{"id":130208},"_827-背景色半透明","8.2.7 背景色半透明",[60,130211,130213],{"className":127675,"code":130212,"language":127677,"meta":66,"style":66},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[39,130214,130215,130221,130247],{"__ignoreMap":66},[84,130216,130217,130219],{"class":86,"line":87},[84,130218,52760],{"class":52449},[84,130220,16742],{"class":154},[84,130222,130223,130225,130227,130229,130231,130233,130235,130237,130239,130241,130243,130245],{"class":86,"line":98},[84,130224,71757],{"class":94},[84,130226,52586],{"class":154},[84,130228,56257],{"class":94},[84,130230,155],{"class":154},[84,130232,1504],{"class":94},[84,130234,846],{"class":154},[84,130236,1504],{"class":94},[84,130238,846],{"class":154},[84,130240,1504],{"class":94},[84,130242,846],{"class":154},[84,130244,101667],{"class":94},[84,130246,3897],{"class":154},[84,130248,130249],{"class":86,"line":106},[84,130250,2746],{"class":154},[19,130252,100542],{},[19,130254,130255],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130257,130258],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130260,130261],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130263,130264],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[198,130266,130268],{"id":130267},"_828-总结","8.2.8 总结",[458,130270,130271,130282],{},[461,130272,130273],{},[464,130274,130275,130278,130280],{},[467,130276,130277],{"align":24906},"属性",[467,130279,472],{"align":24906},[467,130281,1467],{"align":24906},[474,130283,130284,130295,130306,130317,130328,130339,130350],{},[464,130285,130286,130289,130292],{},[479,130287,130288],{"align":24906},"background-color",[479,130290,130291],{"align":24906},"背景颜色",[479,130293,130294],{"align":24906},"预定义的颜色值\u002F十六进制\u002FRGB代码",[464,130296,130297,130300,130303],{},[479,130298,130299],{"align":24906},"background-image",[479,130301,130302],{"align":24906},"背景图片",[479,130304,130305],{"align":24906},"url(图片路径)",[464,130307,130308,130311,130314],{},[479,130309,130310],{"align":24906},"background-repeat",[479,130312,130313],{"align":24906},"是否平铺",[479,130315,130316],{"align":24906},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[464,130318,130319,130322,130325],{},[479,130320,130321],{"align":24906},"background-position",[479,130323,130324],{"align":24906},"背景位置",[479,130326,130327],{"align":24906},"length\u002Fposition 分别是x和y坐标",[464,130329,130330,130333,130336],{},[479,130331,130332],{"align":24906},"background-attachment",[479,130334,130335],{"align":24906},"背景附着",[479,130337,130338],{"align":24906},"scroll(背景滚动) \u002Ffixed (背景固定)",[464,130340,130341,130344,130347],{},[479,130342,130343],{"align":24906},"背景简写",[479,130345,130346],{"align":24906},"书写更简单",[479,130348,130349],{"align":24906},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[464,130351,130352,130355,130358],{},[479,130353,130354],{"align":24906},"背景半透明",[479,130356,130357],{"align":24906},"背景颜色半透明",[479,130359,130360],{"align":24906},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130362,130363],{},"颜色渐变：",[2643,130365],{"style":127531,"src":130366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2643,130368],{"style":127531,"src":130369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[198,130371,130373],{"id":130372},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[60,130375,130377],{"className":128422,"code":130376,"language":128424,"meta":66,"style":66},"\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",[39,130378,130379,130394,130413,130432,130451,130470,130489],{"__ignoreMap":66},[84,130380,130381,130383,130385,130387,130389,130392],{"class":86,"line":87},[84,130382,2218],{"class":154},[84,130384,52760],{"class":52449},[84,130386,54635],{"class":90},[84,130388,867],{"class":154},[84,130390,130391],{"class":158},"\"nav\"",[84,130393,52456],{"class":154},[84,130395,130396,130398,130400,130402,130404,130406,130409,130411],{"class":86,"line":98},[84,130397,53293],{"class":154},[84,130399,208],{"class":52449},[84,130401,62203],{"class":90},[84,130403,867],{"class":154},[84,130405,62208],{"class":158},[84,130407,130408],{"class":154},">五彩导航1\u003C\u002F",[84,130410,208],{"class":52449},[84,130412,52456],{"class":154},[84,130414,130415,130417,130419,130421,130423,130425,130428,130430],{"class":86,"line":106},[84,130416,53293],{"class":154},[84,130418,208],{"class":52449},[84,130420,62203],{"class":90},[84,130422,867],{"class":154},[84,130424,62208],{"class":158},[84,130426,130427],{"class":154},">五彩导航2\u003C\u002F",[84,130429,208],{"class":52449},[84,130431,52456],{"class":154},[84,130433,130434,130436,130438,130440,130442,130444,130447,130449],{"class":86,"line":112},[84,130435,53293],{"class":154},[84,130437,208],{"class":52449},[84,130439,62203],{"class":90},[84,130441,867],{"class":154},[84,130443,62208],{"class":158},[84,130445,130446],{"class":154},">五彩导航3\u003C\u002F",[84,130448,208],{"class":52449},[84,130450,52456],{"class":154},[84,130452,130453,130455,130457,130459,130461,130463,130466,130468],{"class":86,"line":425},[84,130454,53293],{"class":154},[84,130456,208],{"class":52449},[84,130458,62203],{"class":90},[84,130460,867],{"class":154},[84,130462,62208],{"class":158},[84,130464,130465],{"class":154},">五彩导航4\u003C\u002F",[84,130467,208],{"class":52449},[84,130469,52456],{"class":154},[84,130471,130472,130474,130476,130478,130480,130482,130485,130487],{"class":86,"line":2395},[84,130473,53293],{"class":154},[84,130475,208],{"class":52449},[84,130477,62203],{"class":90},[84,130479,867],{"class":154},[84,130481,62208],{"class":158},[84,130483,130484],{"class":154},">五彩导航5\u003C\u002F",[84,130486,208],{"class":52449},[84,130488,52456],{"class":154},[84,130490,130491,130493,130495],{"class":86,"line":2401},[84,130492,52934],{"class":154},[84,130494,52760],{"class":52449},[84,130496,52456],{"class":154},[60,130498,130500],{"className":127675,"code":130499,"language":127677,"meta":66,"style":66},".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",[39,130501,130502,130511,130521,130533,130545,130555,130567,130577,130581,130606,130629,130652,130675],{"__ignoreMap":66},[84,130503,130504,130507,130509],{"class":86,"line":87},[84,130505,130506],{"class":90},".nav",[84,130508,2579],{"class":52449},[84,130510,16742],{"class":154},[84,130512,130513,130515,130517,130519],{"class":86,"line":98},[84,130514,129291],{"class":94},[84,130516,52586],{"class":154},[84,130518,73529],{"class":94},[84,130520,2471],{"class":154},[84,130522,130523,130525,130527,130529,130531],{"class":86,"line":106},[84,130524,71714],{"class":94},[84,130526,52586],{"class":154},[84,130528,2125],{"class":94},[84,130530,52641],{"class":129},[84,130532,2471],{"class":154},[84,130534,130535,130537,130539,130541,130543],{"class":86,"line":112},[84,130536,71934],{"class":94},[84,130538,52586],{"class":154},[84,130540,2164],{"class":94},[84,130542,52641],{"class":129},[84,130544,2471],{"class":154},[84,130546,130547,130549,130551,130553],{"class":86,"line":425},[84,130548,71672],{"class":94},[84,130550,52586],{"class":154},[84,130552,52741],{"class":94},[84,130554,2471],{"class":154},[84,130556,130557,130559,130561,130563,130565],{"class":86,"line":2395},[84,130558,128359],{"class":94},[84,130560,52586],{"class":154},[84,130562,2164],{"class":94},[84,130564,52641],{"class":129},[84,130566,2471],{"class":154},[84,130568,130569,130571,130573,130575],{"class":86,"line":2401},[84,130570,72051],{"class":94},[84,130572,52586],{"class":154},[84,130574,61988],{"class":94},[84,130576,2471],{"class":154},[84,130578,130579],{"class":86,"line":2492},[84,130580,2746],{"class":154},[84,130582,130583,130585,130587,130590,130592,130594,130597,130599,130601,130603],{"class":86,"line":2498},[84,130584,130506],{"class":90},[84,130586,2579],{"class":52449},[84,130588,130589],{"class":90},":nth-child",[84,130591,155],{"class":154},[84,130593,1529],{"class":94},[84,130595,130596],{"class":154},") { ",[84,130598,130288],{"class":94},[84,130600,52586],{"class":154},[84,130602,129706],{"class":94},[84,130604,130605],{"class":154},"; }\n",[84,130607,130608,130610,130612,130614,130616,130618,130620,130622,130624,130627],{"class":86,"line":2510},[84,130609,130506],{"class":90},[84,130611,2579],{"class":52449},[84,130613,130589],{"class":90},[84,130615,155],{"class":154},[84,130617,1397],{"class":94},[84,130619,130596],{"class":154},[84,130621,130288],{"class":94},[84,130623,52586],{"class":154},[84,130625,130626],{"class":94},"#ff0000",[84,130628,130605],{"class":154},[84,130630,130631,130633,130635,130637,130639,130641,130643,130645,130647,130650],{"class":86,"line":2793},[84,130632,130506],{"class":90},[84,130634,2579],{"class":52449},[84,130636,130589],{"class":90},[84,130638,155],{"class":154},[84,130640,1391],{"class":94},[84,130642,130596],{"class":154},[84,130644,130288],{"class":94},[84,130646,52586],{"class":154},[84,130648,130649],{"class":94},"#00a4ff",[84,130651,130605],{"class":154},[84,130653,130654,130656,130658,130660,130662,130664,130666,130668,130670,130673],{"class":86,"line":2798},[84,130655,130506],{"class":90},[84,130657,2579],{"class":52449},[84,130659,130589],{"class":90},[84,130661,155],{"class":154},[84,130663,1604],{"class":94},[84,130665,130596],{"class":154},[84,130667,130288],{"class":94},[84,130669,52586],{"class":154},[84,130671,130672],{"class":94},"#ff00ff",[84,130674,130605],{"class":154},[84,130676,130677,130679,130681,130683,130685,130687,130689,130691,130693,130696],{"class":86,"line":2804},[84,130678,130506],{"class":90},[84,130680,2579],{"class":52449},[84,130682,130589],{"class":90},[84,130684,155],{"class":154},[84,130686,1629],{"class":94},[84,130688,130596],{"class":154},[84,130690,130288],{"class":94},[84,130692,52586],{"class":154},[84,130694,130695],{"class":94},"#00ff00",[84,130697,130605],{"class":154},[14,130699,130701],{"id":130700},"_83-css三大特性","8.3 css三大特性",[198,130703,130705],{"id":130704},"_831-层叠性","8.3.1 层叠性",[19,130707,130708],{},"为了解决样式冲突问题",[19,130710,130711],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130713,130714],{},"   ②样式不冲突，不会层叠",[198,130716,130718],{"id":130717},"_832-继承性","8.3.2 继承性",[19,130720,130721],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130723,130724],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[60,130726,130728],{"className":127675,"code":130727,"language":127677,"meta":66,"style":66},"p {\n  color: #333;\n}\n",[39,130729,130730,130736,130746],{"__ignoreMap":66},[84,130731,130732,130734],{"class":86,"line":87},[84,130733,19],{"class":52449},[84,130735,16742],{"class":154},[84,130737,130738,130740,130742,130744],{"class":86,"line":98},[84,130739,72051],{"class":94},[84,130741,52586],{"class":154},[84,130743,63515],{"class":94},[84,130745,2471],{"class":154},[84,130747,130748],{"class":86,"line":106},[84,130749,2746],{"class":154},[2643,130751],{"style":127531,"src":130752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130754,130755],{},"解释：①行高可以跟单位也可以不跟单位",[19,130757,130758],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130760,130761],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130763,130764],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[198,130766,130768],{"id":130767},"_833-优先级","8.3.3 优先级",[26,130770,130771,130774],{},[29,130772,130773],{},"选择器相同，则执行层叠性",[29,130775,130776],{},"选择器不同，则根据选择器权重执行",[458,130778,130779,130789],{},[461,130780,130781],{},[464,130782,130783,130786],{},[467,130784,130785],{"align":24906},"选择器",[467,130787,130788],{"align":24906},"选择器权重",[474,130790,130791,130799,130807,130815,130823,130831],{},[464,130792,130793,130796],{},[479,130794,130795],{"align":24906},"继承 或者*",[479,130797,130798],{"align":24906},"0，0，0，0",[464,130800,130801,130804],{},[479,130802,130803],{"align":24906},"标签选择器",[479,130805,130806],{"align":24906},"0，0，0，1",[464,130808,130809,130812],{},[479,130810,130811],{"align":24906},"类选择器，伪类选择器",[479,130813,130814],{"align":24906},"0，0，1，0",[464,130816,130817,130820],{},[479,130818,130819],{"align":24906},"ID选择器",[479,130821,130822],{"align":24906},"0，1，0，0",[464,130824,130825,130828],{},[479,130826,130827],{"align":24906},"行内样式",[479,130829,130830],{"align":24906},"1，0，0，0",[464,130832,130833,130836],{},[479,130834,130835],{"align":24906},"！important",[479,130837,130838],{"align":24906},"无穷大",[19,130840,130841],{},"! important用法：",[60,130843,130845],{"className":127675,"code":130844,"language":127677,"meta":66,"style":66},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[39,130846,130847,130852,130858,130871,130875,130880,130886,130896],{"__ignoreMap":66},[84,130848,130849],{"class":86,"line":87},[84,130850,130851],{"class":1378},"\u002F* !important 拥有最高优先级 *\u002F\n",[84,130853,130854,130856],{"class":86,"line":98},[84,130855,52760],{"class":52449},[84,130857,16742],{"class":154},[84,130859,130860,130862,130864,130866,130869],{"class":86,"line":106},[84,130861,72051],{"class":94},[84,130863,52586],{"class":154},[84,130865,52794],{"class":94},[84,130867,130868],{"class":129}," !important",[84,130870,2471],{"class":154},[84,130872,130873],{"class":86,"line":112},[84,130874,2746],{"class":154},[84,130876,130877],{"class":86,"line":425},[84,130878,130879],{"class":1378},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[84,130881,130882,130884],{"class":86,"line":2395},[84,130883,52760],{"class":52449},[84,130885,16742],{"class":154},[84,130887,130888,130890,130892,130894],{"class":86,"line":2401},[84,130889,72051],{"class":94},[84,130891,52586],{"class":154},[84,130893,58568],{"class":94},[84,130895,2471],{"class":154},[84,130897,130898],{"class":86,"line":2492},[84,130899,2746],{"class":154},[19,130901,130902],{},"优先级注意点：",[19,130904,130905],{},"①权重是有4组数字组成,但是不会有进位",[19,130907,130908],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130910,130911],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130913,130914],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130916,130917],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130919,130920],{},"⑥复合选择器",[458,130922,130923,130933],{},[461,130924,130925],{},[464,130926,130927,130930],{},[467,130928,130929],{"align":24906},"div ul li",[467,130931,130932],{"align":24906},"0,0,0,3",[474,130934,130935,130943,130951],{},[464,130936,130937,130940],{},[479,130938,130939],{"align":24906},".nav ul li",[479,130941,130942],{"align":24906},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[464,130944,130945,130948],{},[479,130946,130947],{"align":24906},"a:hover",[479,130949,130950],{"align":24906},"0,0,1,1",[464,130952,130953,130956],{},[479,130954,130955],{"align":24906},".nav a",[479,130957,130950],{"align":24906},[1222,130959,130960],{},"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":66,"searchDepth":98,"depth":98,"links":130962},[130963,130971,130982],{"id":129071,"depth":98,"text":129072,"children":130964},[130965,130966,130967,130968,130969,130970],{"id":129084,"depth":106,"text":129085},{"id":129156,"depth":106,"text":129157},{"id":129228,"depth":106,"text":129229},{"id":129259,"depth":106,"text":129260},{"id":129266,"depth":106,"text":129267},{"id":129419,"depth":106,"text":129420},{"id":129727,"depth":98,"text":129728,"children":130972},[130973,130974,130975,130976,130977,130978,130979,130980,130981],{"id":129734,"depth":106,"text":129735},{"id":129744,"depth":106,"text":129745},{"id":129840,"depth":106,"text":129841},{"id":129913,"depth":106,"text":129914},{"id":130068,"depth":106,"text":130069},{"id":130156,"depth":106,"text":130157},{"id":130208,"depth":106,"text":130209},{"id":130267,"depth":106,"text":130268},{"id":130372,"depth":106,"text":130373},{"id":130700,"depth":98,"text":130701,"children":130983},[130984,130985,130986],{"id":130704,"depth":106,"text":130705},{"id":130717,"depth":106,"text":130718},{"id":130767,"depth":106,"text":130768},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129063,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130993,"title":130994,"body":130995,"description":1249,"extension":1250,"meta":132585,"navigation":1252,"path":132586,"seo":132587,"stem":132588,"__hash__":132589},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130996,"toc":132564},[130997,131000,131004,131007,131010,131013,131016,131019,131022,131025,131029,131037,131074,131110,131113,131127,131132,131166,131169,131262,131267,131270,131300,131303,131308,131316,131320,131327,131373,131417,131422,131425,131428,131431,131434,131437,131440,131442,131445,131449,131454,131498,131503,131506,131509,131546,131551,131554,131557,131560,131563,131595,131598,131601,131604,131636,131639,131642,131645,131649,131652,131684,131687,131691,131711,131714,131722,131725,131729,131734,131737,131769,131774,131777,131815,131819,131824,131827,131830,131861,131864,131881,131886,131938,131998,132003,132057,132095,132099,132103,132106,132110,132118,132121,132123,132134,132139,132187,132221,132224,132227,132230,132233,132277,132280,132283,132286,132289,132292,132295,132339,132342,132345,132348,132351,132354,132357,132363,132366,132410,132413,132416,132419,132422,132425,132469,132472,132474,132477,132481,132485,132523,132527,132530,132533,132537,132545,132549,132552,132555,132558,132561],[10,130998,130994],{"id":130999},"_9-css盒模型浮动与切图",[14,131001,131003],{"id":131002},"_91-盒子模型","9.1 盒子模型",[19,131005,131006],{},"利用盒子来设计网页",[19,131008,131009],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131011,131012],{},"网页布局设置：",[19,131014,131015],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131017,131018],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131020,131021],{},"③往盒子里装内容",[2643,131023],{"style":127531,"src":131024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[198,131026,131028],{"id":131027},"_911-边框border","9.1.1 边框（border）",[26,131030,131031,131034],{},[29,131032,131033],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131035,131036],{},"语法",[60,131038,131040],{"className":127675,"code":131039,"language":127677,"meta":66,"style":66},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[39,131041,131042,131047,131053,131070],{"__ignoreMap":66},[84,131043,131044],{"class":86,"line":87},[84,131045,131046],{"class":1378},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[84,131048,131049,131051],{"class":86,"line":98},[84,131050,52760],{"class":52449},[84,131052,16742],{"class":154},[84,131054,131055,131057,131059,131061,131063,131065,131068],{"class":86,"line":106},[84,131056,72042],{"class":94},[84,131058,52586],{"class":154},[84,131060,1529],{"class":94},[84,131062,52641],{"class":129},[84,131064,52670],{"class":94},[84,131066,131067],{"class":94}," #ccc",[84,131069,2471],{"class":154},[84,131071,131072],{"class":86,"line":112},[84,131073,2746],{"class":154},[458,131075,131076,131084],{},[461,131077,131078],{},[464,131079,131080,131082],{},[467,131081,130277],{"align":24906},[467,131083,472],{"align":24906},[474,131085,131086,131094,131102],{},[464,131087,131088,131091],{},[479,131089,131090],{"align":24906},"border-width",[479,131092,131093],{"align":24906},"定义边框粗细，单位是px",[464,131095,131096,131099],{},[479,131097,131098],{"align":24906},"border-style",[479,131100,131101],{"align":24906},"边框的样式",[464,131103,131104,131107],{},[479,131105,131106],{"align":24906},"border-color",[479,131108,131109],{"align":24906},"边框的颜色",[19,131111,131112],{},"边框样式 border-style 可以设置如下值：",[2315,131114,131115,131118,131121,131124],{},[29,131116,131117],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131119,131120],{},"solid：边框为单实线(最为常用的)",[29,131122,131123],{},"dashed：边框为虚线",[29,131125,131126],{},"dotted：边框为点线",[26,131128,131129],{"start":106},[29,131130,131131],{},"边框的合写分写",[60,131133,131134],{"className":127675,"code":131039,"language":127677,"meta":66,"style":66},[39,131135,131136,131140,131146,131162],{"__ignoreMap":66},[84,131137,131138],{"class":86,"line":87},[84,131139,131046],{"class":1378},[84,131141,131142,131144],{"class":86,"line":98},[84,131143,52760],{"class":52449},[84,131145,16742],{"class":154},[84,131147,131148,131150,131152,131154,131156,131158,131160],{"class":86,"line":106},[84,131149,72042],{"class":94},[84,131151,52586],{"class":154},[84,131153,1529],{"class":94},[84,131155,52641],{"class":129},[84,131157,52670],{"class":94},[84,131159,131067],{"class":94},[84,131161,2471],{"class":154},[84,131163,131164],{"class":86,"line":112},[84,131165,2746],{"class":154},[19,131167,131168],{},"边框分开写法：",[60,131170,131172],{"className":127675,"code":131171,"language":127677,"meta":66,"style":66},"\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",[39,131173,131174,131179,131185,131203,131221,131240,131258],{"__ignoreMap":66},[84,131175,131176],{"class":86,"line":87},[84,131177,131178],{"class":1378},"\u002F* 边框分开写法 *\u002F\n",[84,131180,131181,131183],{"class":86,"line":98},[84,131182,52760],{"class":52449},[84,131184,16742],{"class":154},[84,131186,131187,131190,131192,131194,131196,131198,131201],{"class":86,"line":106},[84,131188,131189],{"class":94},"  border-top",[84,131191,52586],{"class":154},[84,131193,1529],{"class":94},[84,131195,52641],{"class":129},[84,131197,52670],{"class":94},[84,131199,131200],{"class":94}," #000",[84,131202,2471],{"class":154},[84,131204,131205,131208,131210,131212,131214,131216,131219],{"class":86,"line":112},[84,131206,131207],{"class":94},"  border-right",[84,131209,52586],{"class":154},[84,131211,1397],{"class":94},[84,131213,52641],{"class":129},[84,131215,63387],{"class":94},[84,131217,131218],{"class":94}," #333",[84,131220,2471],{"class":154},[84,131222,131223,131226,131228,131230,131232,131235,131238],{"class":86,"line":425},[84,131224,131225],{"class":94},"  border-bottom",[84,131227,52586],{"class":154},[84,131229,1391],{"class":94},[84,131231,52641],{"class":129},[84,131233,131234],{"class":94}," dotted",[84,131236,131237],{"class":94}," #666",[84,131239,2471],{"class":154},[84,131241,131242,131245,131247,131249,131251,131253,131256],{"class":86,"line":2395},[84,131243,131244],{"class":94},"  border-left",[84,131246,52586],{"class":154},[84,131248,1529],{"class":94},[84,131250,52641],{"class":129},[84,131252,52670],{"class":94},[84,131254,131255],{"class":94}," #999",[84,131257,2471],{"class":154},[84,131259,131260],{"class":86,"line":2401},[84,131261,2746],{"class":154},[26,131263,131264],{"start":112},[29,131265,131266],{},"表格的细线边框",[19,131268,131269],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[60,131271,131273],{"className":127675,"code":131272,"language":127677,"meta":66,"style":66},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[39,131274,131275,131280,131286,131296],{"__ignoreMap":66},[84,131276,131277],{"class":86,"line":87},[84,131278,131279],{"class":1378},"\u002F* 表格细线边框合并 *\u002F\n",[84,131281,131282,131284],{"class":86,"line":98},[84,131283,458],{"class":52449},[84,131285,16742],{"class":154},[84,131287,131288,131290,131292,131294],{"class":86,"line":106},[84,131289,71724],{"class":94},[84,131291,52586],{"class":154},[84,131293,66181],{"class":94},[84,131295,2471],{"class":154},[84,131297,131298],{"class":86,"line":112},[84,131299,2746],{"class":154},[19,131301,131302],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131304,131305],{"start":425},[29,131306,131307],{},"解决边框额外增加盒子的实际大小的方法：",[2315,131309,131310,131313],{},[29,131311,131312],{},"测量盒子大小的时候,不量边框",[29,131314,131315],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[198,131317,131319],{"id":131318},"_912-内边距","9.1.2 内边距",[26,131321,131322,131325],{},[29,131323,131324],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131326,131036],{},[458,131328,131329,131339],{},[461,131330,131331],{},[464,131332,131333,131336],{},[467,131334,131335],{"align":24906},"值的个数",[467,131337,131338],{"align":24906},"表达意思",[474,131340,131341,131349,131357,131365],{},[464,131342,131343,131346],{},[479,131344,131345],{"align":24906},"padding: 5px;",[479,131347,131348],{"align":24906},"1个值，代表上下左右都有5个元素",[464,131350,131351,131354],{},[479,131352,131353],{"align":24906},"padding: 5px 10px;",[479,131355,131356],{"align":24906},"2个值，代表上下内边距为5像素，左右内边距为10像素",[464,131358,131359,131362],{},[479,131360,131361],{"align":24906},"padding: 5px 10px 20px;",[479,131363,131364],{"align":24906},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[464,131366,131367,131370],{},[479,131368,131369],{"align":24906},"padding: 5px 10px 20px 30px;",[479,131371,131372],{"align":24906},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[458,131374,131375,131383],{},[461,131376,131377],{},[464,131378,131379,131381],{},[467,131380,130277],{"align":24906},[467,131382,472],{"align":24906},[474,131384,131385,131393,131401,131409],{},[464,131386,131387,131390],{},[479,131388,131389],{"align":24906},"padding-left",[479,131391,131392],{"align":24906},"左内边距",[464,131394,131395,131398],{},[479,131396,131397],{"align":24906},"padding-right",[479,131399,131400],{"align":24906},"右内边距",[464,131402,131403,131406],{},[479,131404,131405],{"align":24906},"padding-top",[479,131407,131408],{"align":24906},"上内边距",[464,131410,131411,131414],{},[479,131412,131413],{"align":24906},"padding-bottom",[479,131415,131416],{"align":24906},"下内边距",[26,131418,131419],{"start":106},[29,131420,131421],{},"内边距会影响盒子的实际大小",[19,131423,131424],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131426,131427],{},"①内容和边框有了距离，添加了内边距",[19,131429,131430],{},"②padding影响了盒子实际大小",[19,131432,131433],{},"内边距对盒子大小的影响：",[19,131435,131436],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131438,131439],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131441,96366],{},[19,131443,131444],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[198,131446,131448],{"id":131447},"_913-外边距","9.1.3 外边距",[26,131450,131451],{},[29,131452,131453],{},"控制盒子与盒子之间的距离",[458,131455,131456,131464],{},[461,131457,131458],{},[464,131459,131460,131462],{},[467,131461,130277],{"align":24906},[467,131463,472],{"align":24906},[474,131465,131466,131474,131482,131490],{},[464,131467,131468,131471],{},[479,131469,131470],{"align":24906},"margin-left",[479,131472,131473],{"align":24906},"左外边距",[464,131475,131476,131479],{},[479,131477,131478],{"align":24906},"margin-right",[479,131480,131481],{"align":24906},"右外边距",[464,131483,131484,131487],{},[479,131485,131486],{"align":24906},"margin-top",[479,131488,131489],{"align":24906},"上外边距",[464,131491,131492,131495],{},[479,131493,131494],{"align":24906},"margin-bottom",[479,131496,131497],{"align":24906},"下外边距",[26,131499,131500],{"start":98},[29,131501,131502],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131504,131505],{},"①盒子必须指定了宽度（width）",[19,131507,131508],{},"②盒子左右的外边距都设置为 auto",[60,131510,131512],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[39,131513,131514,131519,131526,131542],{"__ignoreMap":66},[84,131515,131516],{"class":86,"line":87},[84,131517,131518],{"class":1378},"\u002F* margin 复合写法（同上） *\u002F\n",[84,131520,131521,131524],{"class":86,"line":98},[84,131522,131523],{"class":90},".box",[84,131525,16742],{"class":154},[84,131527,131528,131530,131532,131534,131536,131539],{"class":86,"line":106},[84,131529,71616],{"class":94},[84,131531,52586],{"class":154},[84,131533,1504],{"class":94},[84,131535,52705],{"class":94},[84,131537,131538],{"class":154},";  ",[84,131540,131541],{"class":1378},"\u002F* 块级盒子水平居中 *\u002F\n",[84,131543,131544],{"class":86,"line":112},[84,131545,2746],{"class":154},[26,131547,131548],{"start":106},[29,131549,131550],{},"外边距塌陷问题",[19,131552,131553],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2643,131555],{"style":127531,"src":131556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131558,131559],{},"解决方案：",[19,131561,131562],{},"①可以为父亲元素定义上边距",[60,131564,131565],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,131566,131567,131571,131577,131591],{"__ignoreMap":66},[84,131568,131569],{"class":86,"line":87},[84,131570,131518],{"class":1378},[84,131572,131573,131575],{"class":86,"line":98},[84,131574,131523],{"class":90},[84,131576,16742],{"class":154},[84,131578,131579,131581,131583,131585,131587,131589],{"class":86,"line":106},[84,131580,71616],{"class":94},[84,131582,52586],{"class":154},[84,131584,1504],{"class":94},[84,131586,52705],{"class":94},[84,131588,131538],{"class":154},[84,131590,131541],{"class":1378},[84,131592,131593],{"class":86,"line":112},[84,131594,2746],{"class":154},[19,131596,131597],{},"②可以为父亲元素定义上内边距",[19,131599,131600],{},"③可以为父亲元素添加overflow:hidden",[2643,131602],{"style":127531,"src":131603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[60,131605,131606],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,131607,131608,131612,131618,131632],{"__ignoreMap":66},[84,131609,131610],{"class":86,"line":87},[84,131611,131518],{"class":1378},[84,131613,131614,131616],{"class":86,"line":98},[84,131615,131523],{"class":90},[84,131617,16742],{"class":154},[84,131619,131620,131622,131624,131626,131628,131630],{"class":86,"line":106},[84,131621,71616],{"class":94},[84,131623,52586],{"class":154},[84,131625,1504],{"class":94},[84,131627,52705],{"class":94},[84,131629,131538],{"class":154},[84,131631,131541],{"class":1378},[84,131633,131634],{"class":86,"line":112},[84,131635,2746],{"class":154},[2643,131637],{"style":127531,"src":131638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131640,131641],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131643,131644],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[198,131646,131648],{"id":131647},"_914-清除内外边距","9.1.4 清除内外边距",[19,131650,131651],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[60,131653,131654],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,131655,131656,131660,131666,131680],{"__ignoreMap":66},[84,131657,131658],{"class":86,"line":87},[84,131659,131518],{"class":1378},[84,131661,131662,131664],{"class":86,"line":98},[84,131663,131523],{"class":90},[84,131665,16742],{"class":154},[84,131667,131668,131670,131672,131674,131676,131678],{"class":86,"line":106},[84,131669,71616],{"class":94},[84,131671,52586],{"class":154},[84,131673,1504],{"class":94},[84,131675,52705],{"class":94},[84,131677,131538],{"class":154},[84,131679,131541],{"class":1378},[84,131681,131682],{"class":86,"line":112},[84,131683,2746],{"class":154},[19,131685,131686],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[198,131688,131690],{"id":131689},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2315,131692,131693,131696,131699,131702,131705,131708],{},[29,131694,131695],{},"文件→打开 ：可以打开我们要测量的图片",[29,131697,131698],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,131700,131701],{},"右击标尺，把里面的单位改为像素",[29,131703,131704],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,131706,131707],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,131709,131710],{},"用选区拖动 可以测量大小",[2643,131712],{"style":127531,"src":131713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2315,131715,131716,131719],{},[29,131717,131718],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,131720,131721],{},"吸管取色工具",[2643,131723],{"style":127531,"src":131724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[198,131726,131728],{"id":131727},"_916-案例","9.1.6 案例",[26,131730,131731],{},[29,131732,131733],{},"小米商品",[2643,131735],{"style":127531,"src":131736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[60,131738,131739],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,131740,131741,131745,131751,131765],{"__ignoreMap":66},[84,131742,131743],{"class":86,"line":87},[84,131744,131518],{"class":1378},[84,131746,131747,131749],{"class":86,"line":98},[84,131748,131523],{"class":90},[84,131750,16742],{"class":154},[84,131752,131753,131755,131757,131759,131761,131763],{"class":86,"line":106},[84,131754,71616],{"class":94},[84,131756,52586],{"class":154},[84,131758,1504],{"class":94},[84,131760,52705],{"class":94},[84,131762,131538],{"class":154},[84,131764,131541],{"class":1378},[84,131766,131767],{"class":86,"line":112},[84,131768,2746],{"class":154},[26,131770,131771],{"start":98},[29,131772,131773],{},"快报模块",[2643,131775],{"style":127531,"src":131776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[60,131778,131780],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[39,131781,131782,131787,131802,131807],{"__ignoreMap":66},[84,131783,131784],{"class":86,"line":87},[84,131785,131786],{"class":1378},"\u003C!-- HTML 代码示例 -->\n",[84,131788,131789,131791,131793,131795,131797,131800],{"class":86,"line":98},[84,131790,2218],{"class":154},[84,131792,52760],{"class":52449},[84,131794,54635],{"class":90},[84,131796,867],{"class":154},[84,131798,131799],{"class":158},"\"example\"",[84,131801,52456],{"class":154},[84,131803,131804],{"class":86,"line":106},[84,131805,131806],{"class":154},"  示例内容\n",[84,131808,131809,131811,131813],{"class":86,"line":112},[84,131810,52934],{"class":154},[84,131812,52760],{"class":52449},[84,131814,52456],{"class":154},[198,131816,131818],{"id":131817},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,131820,131821],{},[29,131822,131823],{},"圆角边框",[19,131825,131826],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2643,131828],{"style":127531,"src":131829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[60,131831,131833],{"className":127675,"code":131832,"language":127677,"meta":66,"style":66},"div {\n  border: 1px solid #ccc;\n}\n",[39,131834,131835,131841,131857],{"__ignoreMap":66},[84,131836,131837,131839],{"class":86,"line":87},[84,131838,52760],{"class":52449},[84,131840,16742],{"class":154},[84,131842,131843,131845,131847,131849,131851,131853,131855],{"class":86,"line":98},[84,131844,72042],{"class":94},[84,131846,52586],{"class":154},[84,131848,1529],{"class":94},[84,131850,52641],{"class":129},[84,131852,52670],{"class":94},[84,131854,131067],{"class":94},[84,131856,2471],{"class":154},[84,131858,131859],{"class":86,"line":106},[84,131860,2746],{"class":154},[19,131862,131863],{},"解释:",[2315,131865,131866,131869,131872,131875,131878],{},[29,131867,131868],{},"参数值可以为数值或百分比的形式",[29,131870,131871],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,131873,131874],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,131876,131877],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,131879,131880],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,131882,131883],{"start":98},[29,131884,131885],{},"盒子阴影",[60,131887,131889],{"className":127675,"code":131888,"language":127677,"meta":66,"style":66},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[39,131890,131891,131897,131934],{"__ignoreMap":66},[84,131892,131893,131895],{"class":86,"line":87},[84,131894,52760],{"class":52449},[84,131896,16742],{"class":154},[84,131898,131899,131902,131904,131906,131908,131910,131912,131914,131916,131918,131920,131922,131924,131926,131928,131930,131932],{"class":86,"line":98},[84,131900,131901],{"class":94},"  box-shadow",[84,131903,52586],{"class":154},[84,131905,1504],{"class":94},[84,131907,15925],{"class":94},[84,131909,52641],{"class":129},[84,131911,994],{"class":94},[84,131913,52641],{"class":129},[84,131915,79913],{"class":94},[84,131917,155],{"class":154},[84,131919,1504],{"class":94},[84,131921,846],{"class":154},[84,131923,1504],{"class":94},[84,131925,846],{"class":154},[84,131927,1504],{"class":94},[84,131929,846],{"class":154},[84,131931,87356],{"class":94},[84,131933,3897],{"class":154},[84,131935,131936],{"class":86,"line":106},[84,131937,2746],{"class":154},[458,131939,131940,131948],{},[461,131941,131942],{},[464,131943,131944,131946],{},[467,131945,1467],{"align":24906},[467,131947,28647],{"align":24906},[474,131949,131950,131958,131966,131974,131982,131990],{},[464,131951,131952,131955],{},[479,131953,131954],{"align":24906},"h-shadow",[479,131956,131957],{"align":24906},"必需,水平阴影的位置,允许负值",[464,131959,131960,131963],{},[479,131961,131962],{"align":24906},"v-shadow",[479,131964,131965],{"align":24906},"必需,垂直阴影的位置,允许负值",[464,131967,131968,131971],{},[479,131969,131970],{"align":24906},"blur",[479,131972,131973],{"align":24906},"可选,模糊距离,就是影子的虚实",[464,131975,131976,131979],{},[479,131977,131978],{"align":24906},"spread",[479,131980,131981],{"align":24906},"可选,阴影尺寸",[464,131983,131984,131987],{},[479,131985,131986],{"align":24906},"color",[479,131988,131989],{"align":24906},"可选,阴影的颜色",[464,131991,131992,131995],{},[479,131993,131994],{"align":24906},"inset",[479,131996,131997],{"align":24906},"可选,将外部阴影(outset)改为内部阴影",[26,131999,132000],{"start":106},[29,132001,132002],{},"文字阴影",[60,132004,132006],{"className":127675,"code":132005,"language":127677,"meta":66,"style":66},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[39,132007,132008,132014,132053],{"__ignoreMap":66},[84,132009,132010,132012],{"class":86,"line":87},[84,132011,19],{"class":52449},[84,132013,16742],{"class":154},[84,132015,132016,132019,132021,132023,132025,132027,132029,132031,132033,132035,132037,132039,132041,132043,132045,132047,132049,132051],{"class":86,"line":98},[84,132017,132018],{"class":94},"  text-shadow",[84,132020,52586],{"class":154},[84,132022,1529],{"class":94},[84,132024,52641],{"class":129},[84,132026,133],{"class":94},[84,132028,52641],{"class":129},[84,132030,15925],{"class":94},[84,132032,52641],{"class":129},[84,132034,79913],{"class":94},[84,132036,155],{"class":154},[84,132038,1504],{"class":94},[84,132040,846],{"class":154},[84,132042,1504],{"class":94},[84,132044,846],{"class":154},[84,132046,1504],{"class":94},[84,132048,846],{"class":154},[84,132050,101667],{"class":94},[84,132052,3897],{"class":154},[84,132054,132055],{"class":86,"line":106},[84,132056,2746],{"class":154},[458,132058,132059,132067],{},[461,132060,132061],{},[464,132062,132063,132065],{},[467,132064,1467],{"align":24906},[467,132066,28647],{"align":24906},[474,132068,132069,132075,132082,132089],{},[464,132070,132071,132073],{},[479,132072,131954],{"align":24906},[479,132074,131957],{"align":24906},[464,132076,132077,132079],{},[479,132078,131962],{"align":24906},[479,132080,132081],{"align":24906},"必需,垂直阴影位置,允许负值",[464,132083,132084,132086],{},[479,132085,131970],{"align":24906},[479,132087,132088],{"align":24906},"可选,模糊的距离",[464,132090,132091,132093],{},[479,132092,131986],{"align":24906},[479,132094,131989],{"align":24906},[14,132096,132098],{"id":132097},"_92-浮动","9.2 浮动",[198,132100,132102],{"id":132101},"_921-浮动介绍","9.2.1 浮动介绍",[19,132104,132105],{},"在16.2中详细介绍",[198,132107,132109],{"id":132108},"_922-清除浮动","9.2.2 清除浮动",[26,132111,132112,132115],{},[29,132113,132114],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132116,132117],{},"清除浮动的本质",[19,132119,132120],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132122,10197],{},[2315,132124,132125,132128,132131],{},[29,132126,132127],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132129,132130],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132132,132133],{},"父级有了高度，就不会影响下面的标准流了",[26,132135,132136],{"start":106},[29,132137,132138],{},"清除浮动样式",[60,132140,132142],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[39,132143,132144,132151,132162,132166,132173,132183],{"__ignoreMap":66},[84,132145,132146,132149],{"class":86,"line":87},[84,132147,132148],{"class":90},".left",[84,132150,16742],{"class":154},[84,132152,132153,132156,132158,132160],{"class":86,"line":98},[84,132154,132155],{"class":94},"  float",[84,132157,52586],{"class":154},[84,132159,24906],{"class":94},[84,132161,2471],{"class":154},[84,132163,132164],{"class":86,"line":106},[84,132165,2746],{"class":154},[84,132167,132168,132171],{"class":86,"line":112},[84,132169,132170],{"class":90},".right",[84,132172,16742],{"class":154},[84,132174,132175,132177,132179,132181],{"class":86,"line":425},[84,132176,132155],{"class":94},[84,132178,52586],{"class":154},[84,132180,73668],{"class":94},[84,132182,2471],{"class":154},[84,132184,132185],{"class":86,"line":2395},[84,132186,2746],{"class":154},[458,132188,132189,132197],{},[461,132190,132191],{},[464,132192,132193,132195],{},[467,132194,128139],{"align":24906},[467,132196,28647],{"align":24906},[474,132198,132199,132206,132213],{},[464,132200,132201,132203],{},[479,132202,24906],{"align":24906},[479,132204,132205],{"align":24906},"不允许左侧有浮动元素（清除左侧浮动的影响）",[464,132207,132208,132210],{},[479,132209,73668],{"align":24906},[479,132211,132212],{"align":24906},"不允许右侧有浮动元素（清除右侧浮动的影响）",[464,132214,132215,132218],{},[479,132216,132217],{"align":24906},"both",[479,132219,132220],{"align":24906},"同时清除左右侧浮动的影响",[19,132222,132223],{},"法一",[19,132225,132226],{},"额外标签法也称为隔墙法",[19,132228,132229],{},"使用方式：",[19,132231,132232],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[60,132234,132235],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,132236,132237,132243,132253,132257,132263,132273],{"__ignoreMap":66},[84,132238,132239,132241],{"class":86,"line":87},[84,132240,132148],{"class":90},[84,132242,16742],{"class":154},[84,132244,132245,132247,132249,132251],{"class":86,"line":98},[84,132246,132155],{"class":94},[84,132248,52586],{"class":154},[84,132250,24906],{"class":94},[84,132252,2471],{"class":154},[84,132254,132255],{"class":86,"line":106},[84,132256,2746],{"class":154},[84,132258,132259,132261],{"class":86,"line":112},[84,132260,132170],{"class":90},[84,132262,16742],{"class":154},[84,132264,132265,132267,132269,132271],{"class":86,"line":425},[84,132266,132155],{"class":94},[84,132268,52586],{"class":154},[84,132270,73668],{"class":94},[84,132272,2471],{"class":154},[84,132274,132275],{"class":86,"line":2395},[84,132276,2746],{"class":154},[19,132278,132279],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132281,132282],{},"优点： 通俗易懂，书写方便",[19,132284,132285],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132287,132288],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132290,132291],{},"法二",[19,132293,132294],{},"父级添加overflow属性",[60,132296,132297],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,132298,132299,132305,132315,132319,132325,132335],{"__ignoreMap":66},[84,132300,132301,132303],{"class":86,"line":87},[84,132302,132148],{"class":90},[84,132304,16742],{"class":154},[84,132306,132307,132309,132311,132313],{"class":86,"line":98},[84,132308,132155],{"class":94},[84,132310,52586],{"class":154},[84,132312,24906],{"class":94},[84,132314,2471],{"class":154},[84,132316,132317],{"class":86,"line":106},[84,132318,2746],{"class":154},[84,132320,132321,132323],{"class":86,"line":112},[84,132322,132170],{"class":90},[84,132324,16742],{"class":154},[84,132326,132327,132329,132331,132333],{"class":86,"line":425},[84,132328,132155],{"class":94},[84,132330,52586],{"class":154},[84,132332,73668],{"class":94},[84,132334,2471],{"class":154},[84,132336,132337],{"class":86,"line":2395},[84,132338,2746],{"class":154},[19,132340,132341],{},"overflow: hidden;",[19,132343,132344],{},"优点：代码简洁",[19,132346,132347],{},"缺点：无法显示溢出的部分",[19,132349,132350],{},"注意：是给父元素添加代码",[19,132352,132353],{},"法三",[19,132355,132356],{},"父级添加after伪元素",[19,132358,132359,132362],{},[132360,132361],"after",{}," 方式是额外标签法的升级版",[19,132364,132365],{},"使用的时候复制就可以",[60,132367,132368],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,132369,132370,132376,132386,132390,132396,132406],{"__ignoreMap":66},[84,132371,132372,132374],{"class":86,"line":87},[84,132373,132148],{"class":90},[84,132375,16742],{"class":154},[84,132377,132378,132380,132382,132384],{"class":86,"line":98},[84,132379,132155],{"class":94},[84,132381,52586],{"class":154},[84,132383,24906],{"class":94},[84,132385,2471],{"class":154},[84,132387,132388],{"class":86,"line":106},[84,132389,2746],{"class":154},[84,132391,132392,132394],{"class":86,"line":112},[84,132393,132170],{"class":90},[84,132395,16742],{"class":154},[84,132397,132398,132400,132402,132404],{"class":86,"line":425},[84,132399,132155],{"class":94},[84,132401,52586],{"class":154},[84,132403,73668],{"class":94},[84,132405,2471],{"class":154},[84,132407,132408],{"class":86,"line":2395},[84,132409,2746],{"class":154},[19,132411,132412],{},"优点：没有增加标签，结构更简单",[19,132414,132415],{},"缺点：照顾低版本浏览器",[19,132417,132418],{},"代表网站： 百度、淘宝网、网易等",[19,132420,132421],{},"法四",[19,132423,132424],{},"父级添加双伪元素",[60,132426,132427],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,132428,132429,132435,132445,132449,132455,132465],{"__ignoreMap":66},[84,132430,132431,132433],{"class":86,"line":87},[84,132432,132148],{"class":90},[84,132434,16742],{"class":154},[84,132436,132437,132439,132441,132443],{"class":86,"line":98},[84,132438,132155],{"class":94},[84,132440,52586],{"class":154},[84,132442,24906],{"class":94},[84,132444,2471],{"class":154},[84,132446,132447],{"class":86,"line":106},[84,132448,2746],{"class":154},[84,132450,132451,132453],{"class":86,"line":112},[84,132452,132170],{"class":90},[84,132454,16742],{"class":154},[84,132456,132457,132459,132461,132463],{"class":86,"line":425},[84,132458,132155],{"class":94},[84,132460,52586],{"class":154},[84,132462,73668],{"class":94},[84,132464,2471],{"class":154},[84,132466,132467],{"class":86,"line":2395},[84,132468,2746],{"class":154},[19,132470,132471],{},"优点：代码更简洁",[19,132473,132415],{},[19,132475,132476],{},"代表网站：小米、腾讯等",[14,132478,132480],{"id":132479},"_93-ps切图","9.3 PS切图",[198,132482,132484],{"id":132483},"_931-常见图片格式","9.3.1 常见图片格式",[458,132486,132487,132497],{},[461,132488,132489],{},[464,132490,132491,132494],{},[467,132492,132493],{"align":24906},"jpg图像格式",[467,132495,132496],{"align":24906},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[474,132498,132499,132507,132515],{},[464,132500,132501,132504],{},[479,132502,132503],{"align":24906},"gif图像格式",[479,132505,132506],{"align":24906},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[464,132508,132509,132512],{},[479,132510,132511],{"align":24906},"png图像格式",[479,132513,132514],{"align":24906},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[464,132516,132517,132520],{},[479,132518,132519],{"align":24906},"PSD图像格式",[479,132521,132522],{"align":24906},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[198,132524,132526],{"id":132525},"_932-图层切图","9.3.2 图层切图",[19,132528,132529],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132531,132532],{},"按住shift选中两个图层->图层菜单->合并图层",[198,132534,132536],{"id":132535},"_933-切片切图","9.3.3 切片切图",[2315,132538,132539,132542],{},[29,132540,132541],{},"利用切片工具手动划出",[29,132543,132544],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[198,132546,132548],{"id":132547},"_934-切图步骤","9.3.4 切图步骤",[19,132550,132551],{},"用切片工具选中：",[2643,132553],{"style":127531,"src":132554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132556,132557],{},"文件 -> 导出",[2643,132559],{"style":127531,"src":132560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1222,132562,132563],{},"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":66,"searchDepth":98,"depth":98,"links":132565},[132566,132575,132579],{"id":131002,"depth":98,"text":131003,"children":132567},[132568,132569,132570,132571,132572,132573,132574],{"id":131027,"depth":106,"text":131028},{"id":131318,"depth":106,"text":131319},{"id":131447,"depth":106,"text":131448},{"id":131647,"depth":106,"text":131648},{"id":131689,"depth":106,"text":131690},{"id":131727,"depth":106,"text":131728},{"id":131817,"depth":106,"text":131818},{"id":132097,"depth":98,"text":132098,"children":132576},[132577,132578],{"id":132101,"depth":106,"text":132102},{"id":132108,"depth":106,"text":132109},{"id":132479,"depth":98,"text":132480,"children":132580},[132581,132582,132583,132584],{"id":132483,"depth":106,"text":132484},{"id":132525,"depth":106,"text":132526},{"id":132535,"depth":106,"text":132536},{"id":132547,"depth":106,"text":132548},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130994,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132591,"title":132592,"body":132593,"description":1249,"extension":1250,"meta":133234,"navigation":1252,"path":133235,"seo":133236,"stem":133237,"__hash__":133238},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132594,"toc":133222},[132595,132598,132602,132628,132662,132666,132670,132673,132715,132722,132732,132740,132742,132745,132748,132751,132758,132772,132776,132779,132808,132812,132815,132829,132833,132836,132864,132868,132871,132897,132901,132906,132939,132944,132972,132976,132993,133039,133044,133088,133105,133212,133220],[10,132596,132592],{"id":132597},"_10-css规范与学成在线案例",[14,132599,132601],{"id":132600},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,132603,132604,132610,132616,132622],{},[29,132605,132606,132609],{},[1464,132607,132608],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,132611,132612,132615],{},[1464,132613,132614],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,132617,132618,132621],{},[1464,132619,132620],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,132623,132624,132627],{},[1464,132625,132626],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[60,132629,132630],{"className":127675,"code":131039,"language":127677,"meta":66,"style":66},[39,132631,132632,132636,132642,132658],{"__ignoreMap":66},[84,132633,132634],{"class":86,"line":87},[84,132635,131046],{"class":1378},[84,132637,132638,132640],{"class":86,"line":98},[84,132639,52760],{"class":52449},[84,132641,16742],{"class":154},[84,132643,132644,132646,132648,132650,132652,132654,132656],{"class":86,"line":106},[84,132645,72042],{"class":94},[84,132647,52586],{"class":154},[84,132649,1529],{"class":94},[84,132651,52641],{"class":129},[84,132653,52670],{"class":94},[84,132655,131067],{"class":94},[84,132657,2471],{"class":154},[84,132659,132660],{"class":86,"line":112},[84,132661,2746],{"class":154},[14,132663,132665],{"id":132664},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[198,132667,132669],{"id":132668},"_1021-header头部制作","10.2.1 header头部制作",[2643,132671],{"style":127531,"src":132672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2315,132674,132675,132682,132689,132695,132702,132709],{},[29,132676,132677,132678,132681],{},"1号是版心盒子 ",[1464,132679,132680],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,132683,132684,132685,132688],{},"版心盒子 里面包含 2号盒子 ",[1464,132686,132687],{},"logo"," 图标",[29,132690,132691,132692,132694],{},"版心盒子 里面包含 3号盒子 ",[1464,132693,54862],{}," 导航栏",[29,132696,132697,132698,132701],{},"版心盒子 里面包含 4号盒子 ",[1464,132699,132700],{},"search"," 搜索框",[29,132703,132704,132705,132708],{},"版心盒子 里面包含 5号盒子 ",[1464,132706,132707],{},"user"," 个人信息",[29,132710,132711,132712],{},"注意，要求里面的 ",[1464,132713,132714],{},"4个子盒子 必须都浮动",[26,132716,132717],{},[29,132718,132719],{},[1464,132720,132721],{},"导航栏注意点:",[19,132723,132724,132725,132728,132729],{},"实际开发中， ",[1464,132726,132727],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1464,132730,132731],{},"用 li 包含链接(li+a)的做法",[2315,132733,132734,132737],{},[29,132735,132736],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,132738,132739],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132741,10197],{},[19,132743,132744],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132746,132747],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132749,132750],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,132752,132753],{"start":98},[29,132754,132755],{},[1464,132756,132757],{},"4号盒子search的细节：",[2315,132759,132760,132763,132766],{},[29,132761,132762],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,132764,132765],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,132767,132768,132771],{},[39,132769,132770],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[198,132773,132775],{"id":132774},"_1022-banner制作","10.2.2 banner制作",[2643,132777],{"style":127531,"src":132778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2315,132780,132781,132788,132794,132801],{},[29,132782,132783,132784,132787],{},"1号盒子是通栏的大盒子 ",[1464,132785,132786],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,132789,132790,132791,132793],{},"2号盒子是版心 ",[1464,132792,2103],{}," ， 要水平居中对齐",[29,132795,132796,132797,132800],{},"3号盒子版心内，左对齐 ",[1464,132798,132799],{},"subnav"," 侧导航栏",[29,132802,132803,132804,132807],{},"4号盒子版心内，右对齐 ",[1464,132805,132806],{},"course"," 课程",[198,132809,132811],{"id":132810},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2643,132813],{"style":127531,"src":132814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2315,132816,132817,132820,132823,132826],{},[29,132818,132819],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,132821,132822],{},"1号盒子是标题 H3 左侧浮动",[29,132824,132825],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,132827,132828],{},"3号盒子 右浮动 mod 修改",[198,132830,132832],{"id":132831},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2643,132834],{"style":127531,"src":132835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2315,132837,132838,132844,132851,132858,132861],{},[29,132839,132840,132841,132843],{},"1号盒子为最大的盒子 ",[1464,132842,54863],{}," 版心水平居中对齐",[29,132845,132846,132847,132850],{},"2号盒子为上面部分 ",[1464,132848,132849],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,132852,132853,132854,132857],{},"3号盒子为底下部分 ",[1464,132855,132856],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,132859,132860],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,132862,132863],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[198,132865,132867],{"id":132866},"_1025-底部模块制作","10.2.5 底部模块制作",[2643,132869],{"style":127531,"src":132870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2315,132872,132873,132880,132883,132890],{},[29,132874,132875,132876,132879],{},"1号盒子通栏大盒子 底部 ",[1464,132877,132878],{},"footer"," 给高度 底色是白色",[29,132881,132882],{},"2号盒子版心水平居中",[29,132884,132885,132886,132889],{},"3号盒子版权 ",[1464,132887,132888],{},"copyright"," 左对齐",[29,132891,132892,132893,132896],{},"4号盒子 链接组 ",[1464,132894,132895],{},"links"," 右对齐",[198,132898,132900],{"id":132899},"_1026-代码模块","10.2.6 代码模块",[26,132902,132903],{},[29,132904,132905],{},"html部分",[60,132907,132909],{"className":128422,"code":132908,"language":128424,"meta":66,"style":66},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[39,132910,132911],{"__ignoreMap":66},[84,132912,132913,132915,132917,132919,132921,132924,132927,132929,132932,132935,132937],{"class":86,"line":87},[84,132914,2218],{"class":154},[84,132916,208],{"class":52449},[84,132918,62203],{"class":90},[84,132920,867],{"class":154},[84,132922,132923],{"class":158},"\"https:\u002F\u002Fexample.com\"",[84,132925,132926],{"class":90}," target",[84,132928,867],{"class":154},[84,132930,132931],{"class":158},"\"_blank\"",[84,132933,132934],{"class":154},">链接文字\u003C\u002F",[84,132936,208],{"class":52449},[84,132938,52456],{"class":154},[26,132940,132941],{"start":98},[29,132942,132943],{},"css部分",[60,132945,132946],{"className":128422,"code":132908,"language":128424,"meta":66,"style":66},[39,132947,132948],{"__ignoreMap":66},[84,132949,132950,132952,132954,132956,132958,132960,132962,132964,132966,132968,132970],{"class":86,"line":87},[84,132951,2218],{"class":154},[84,132953,208],{"class":52449},[84,132955,62203],{"class":90},[84,132957,867],{"class":154},[84,132959,132923],{"class":158},[84,132961,132926],{"class":90},[84,132963,867],{"class":154},[84,132965,132931],{"class":158},[84,132967,132934],{"class":154},[84,132969,208],{"class":52449},[84,132971,52456],{"class":154},[198,132973,132975],{"id":132974},"_1027-收获","10.2.7 收获",[26,132977,132978,132981,132984,132987,132990],{},[29,132979,132980],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,132982,132983],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,132985,132986],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,132988,132989],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,132991,132992],{},"遗忘代码",[60,132994,132996],{"className":127675,"code":132995,"language":127677,"meta":66,"style":66},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[39,132997,132998,133020,133025,133035],{"__ignoreMap":66},[84,132999,133000,133002,133004,133006,133008,133010,133012,133014,133016,133018],{"class":86,"line":87},[84,133001,52760],{"class":52449},[84,133003,846],{"class":154},[84,133005,19],{"class":52449},[84,133007,846],{"class":154},[84,133009,10],{"class":52449},[84,133011,846],{"class":154},[84,133013,2315],{"class":52449},[84,133015,846],{"class":154},[84,133017,29],{"class":52449},[84,133019,16742],{"class":154},[84,133021,133022],{"class":86,"line":98},[84,133023,133024],{"class":1378},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[84,133026,133027,133029,133031,133033],{"class":86,"line":106},[84,133028,129291],{"class":94},[84,133030,52586],{"class":154},[84,133032,62015],{"class":94},[84,133034,2471],{"class":154},[84,133036,133037],{"class":86,"line":112},[84,133038,2746],{"class":154},[26,133040,133041],{"start":2395},[29,133042,133043],{},"html引css的程序",[60,133045,133046],{"className":127675,"code":132995,"language":127677,"meta":66,"style":66},[39,133047,133048,133070,133074,133084],{"__ignoreMap":66},[84,133049,133050,133052,133054,133056,133058,133060,133062,133064,133066,133068],{"class":86,"line":87},[84,133051,52760],{"class":52449},[84,133053,846],{"class":154},[84,133055,19],{"class":52449},[84,133057,846],{"class":154},[84,133059,10],{"class":52449},[84,133061,846],{"class":154},[84,133063,2315],{"class":52449},[84,133065,846],{"class":154},[84,133067,29],{"class":52449},[84,133069,16742],{"class":154},[84,133071,133072],{"class":86,"line":98},[84,133073,133024],{"class":1378},[84,133075,133076,133078,133080,133082],{"class":86,"line":106},[84,133077,129291],{"class":94},[84,133079,52586],{"class":154},[84,133081,62015],{"class":94},[84,133083,2471],{"class":154},[84,133085,133086],{"class":86,"line":112},[84,133087,2746],{"class":154},[26,133089,133090,133093,133096,133099,133102],{"start":2401},[29,133091,133092],{},"浮动的盒子不会有外边距合并问题",[29,133094,133095],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133097,133098],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133100,133101],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133103,133104],{},"在写选择器时尽量写全一些，例如",[60,133106,133108],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},"\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",[39,133109,133110,133115,133131,133136,133151,133156,133171,133176,133191,133196],{"__ignoreMap":66},[84,133111,133112],{"class":86,"line":87},[84,133113,133114],{"class":1378},"\u002F* 静态定位（默认） *\u002F\n",[84,133116,133117,133120,133122,133124,133126,133129],{"class":86,"line":98},[84,133118,133119],{"class":90},".static",[84,133121,80953],{"class":154},[84,133123,130035],{"class":94},[84,133125,52586],{"class":154},[84,133127,133128],{"class":94},"static",[84,133130,130605],{"class":154},[84,133132,133133],{"class":86,"line":106},[84,133134,133135],{"class":1378},"\u002F* 相对定位 *\u002F\n",[84,133137,133138,133141,133143,133145,133147,133149],{"class":86,"line":112},[84,133139,133140],{"class":90},".relative",[84,133142,80953],{"class":154},[84,133144,130035],{"class":94},[84,133146,52586],{"class":154},[84,133148,55911],{"class":94},[84,133150,130605],{"class":154},[84,133152,133153],{"class":86,"line":425},[84,133154,133155],{"class":1378},"\u002F* 绝对定位 *\u002F\n",[84,133157,133158,133161,133163,133165,133167,133169],{"class":86,"line":2395},[84,133159,133160],{"class":90},".absolute",[84,133162,80953],{"class":154},[84,133164,130035],{"class":94},[84,133166,52586],{"class":154},[84,133168,55978],{"class":94},[84,133170,130605],{"class":154},[84,133172,133173],{"class":86,"line":2401},[84,133174,133175],{"class":1378},"\u002F* 固定定位 *\u002F\n",[84,133177,133178,133181,133183,133185,133187,133189],{"class":86,"line":2492},[84,133179,133180],{"class":90},".fixed",[84,133182,80953],{"class":154},[84,133184,130035],{"class":94},[84,133186,52586],{"class":154},[84,133188,87379],{"class":94},[84,133190,130605],{"class":154},[84,133192,133193],{"class":86,"line":2498},[84,133194,133195],{"class":1378},"\u002F* 粘性定位 *\u002F\n",[84,133197,133198,133201,133203,133205,133207,133210],{"class":86,"line":2510},[84,133199,133200],{"class":90},".sticky",[84,133202,80953],{"class":154},[84,133204,130035],{"class":94},[84,133206,52586],{"class":154},[84,133208,133209],{"class":94},"sticky",[84,133211,130605],{"class":154},[26,133213,133214,133217],{"start":2798},[29,133215,133216],{},"一定要用好注释",[29,133218,133219],{},"浮动的盒子不会有外边距合并的问题",[1222,133221,132563],{},{"title":66,"searchDepth":98,"depth":98,"links":133223},[133224,133225],{"id":132600,"depth":98,"text":132601},{"id":132664,"depth":98,"text":132665,"children":133226},[133227,133228,133229,133230,133231,133232,133233],{"id":132668,"depth":106,"text":132669},{"id":132774,"depth":106,"text":132775},{"id":132810,"depth":106,"text":132811},{"id":132831,"depth":106,"text":132832},{"id":132866,"depth":106,"text":132867},{"id":132899,"depth":106,"text":132900},{"id":132974,"depth":106,"text":132975},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132592,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133240,"title":133241,"body":133242,"description":1249,"extension":1250,"meta":134728,"navigation":1252,"path":134729,"seo":134730,"stem":134731,"__hash__":134732},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133243,"toc":134720},[133244,133247,133251,133255,133266,133270,133287,133331,133364,133367,133384,133387,133390,133434,133438,133442,133445,133448,133452,133455,133466,133529,133570,133573,133588,133642,133650,133653,133664,133718,133744,133747,133760,133814,133846,133900,133923,133977,133980,133983,133990,134044,134065,134119,134122,134125,134210,134218,134275,134298,134302,134305,134323,134327,134346,134400,134438,134442,134445,134448,134470,134474,134482,134485,134490,134501,134504,134508,134522,134566,134569,134573,134576,134581,134607,134612,134689,134692,134696,134699,134702,134705,134708,134711,134714,134717],[10,133245,133241],{"id":133246},"_11-传统布局与定位体系",[14,133248,133250],{"id":133249},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[198,133252,133254],{"id":133253},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2315,133256,133257,133260,133263],{},[29,133258,133259],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133261,133262],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133264,133265],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[198,133267,133269],{"id":133268},"_1112-浮动","11.1.2 浮动",[2315,133271,133272,133275,133278,133281,133284],{},[29,133273,133274],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133276,133277],{},"浮动可以改变元素标签默认的排列方式",[29,133279,133280],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133282,133283],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133285,133286],{},"在使用行内块转换时盒子之间是有空隙的",[60,133288,133289],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,133290,133291,133297,133307,133311,133317,133327],{"__ignoreMap":66},[84,133292,133293,133295],{"class":86,"line":87},[84,133294,132148],{"class":90},[84,133296,16742],{"class":154},[84,133298,133299,133301,133303,133305],{"class":86,"line":98},[84,133300,132155],{"class":94},[84,133302,52586],{"class":154},[84,133304,24906],{"class":94},[84,133306,2471],{"class":154},[84,133308,133309],{"class":86,"line":106},[84,133310,2746],{"class":154},[84,133312,133313,133315],{"class":86,"line":112},[84,133314,132170],{"class":90},[84,133316,16742],{"class":154},[84,133318,133319,133321,133323,133325],{"class":86,"line":425},[84,133320,132155],{"class":94},[84,133322,52586],{"class":154},[84,133324,73668],{"class":94},[84,133326,2471],{"class":154},[84,133328,133329],{"class":86,"line":2395},[84,133330,2746],{"class":154},[458,133332,133333,133341],{},[461,133334,133335],{},[464,133336,133337,133339],{},[467,133338,128139],{"align":24906},[467,133340,28647],{"align":24906},[474,133342,133343,133350,133357],{},[464,133344,133345,133347],{},[479,133346,55884],{"align":24906},[479,133348,133349],{"align":24906},"元素不浮动（默认值）",[464,133351,133352,133354],{},[479,133353,24906],{"align":24906},[479,133355,133356],{"align":24906},"元素向左浮动",[464,133358,133359,133361],{},[479,133360,73668],{"align":24906},[479,133362,133363],{"align":24906},"元素向右浮动",[19,133365,133366],{},"浮动重点：",[2315,133368,133369,133372,133375,133378,133381],{},[29,133370,133371],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133373,133374],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133376,133377],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133379,133380],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133382,133383],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133385,133386],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133388,133389],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[60,133391,133392],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,133393,133394,133400,133410,133414,133420,133430],{"__ignoreMap":66},[84,133395,133396,133398],{"class":86,"line":87},[84,133397,132148],{"class":90},[84,133399,16742],{"class":154},[84,133401,133402,133404,133406,133408],{"class":86,"line":98},[84,133403,132155],{"class":94},[84,133405,52586],{"class":154},[84,133407,24906],{"class":94},[84,133409,2471],{"class":154},[84,133411,133412],{"class":86,"line":106},[84,133413,2746],{"class":154},[84,133415,133416,133418],{"class":86,"line":112},[84,133417,132170],{"class":90},[84,133419,16742],{"class":154},[84,133421,133422,133424,133426,133428],{"class":86,"line":425},[84,133423,132155],{"class":94},[84,133425,52586],{"class":154},[84,133427,73668],{"class":94},[84,133429,2471],{"class":154},[84,133431,133432],{"class":86,"line":2395},[84,133433,2746],{"class":154},[198,133435,133437],{"id":133436},"_1113-定位","11.1.3 定位",[23168,133439,133441],{"id":133440},"_11131-使用场景","11.1.3.1 使用场景",[19,133443,133444],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133446,133447],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23168,133449,133451],{"id":133450},"_11132-定位组成","11.1.3.2 定位组成",[19,133453,133454],{},"定位 = 定位模式 + 边偏移",[26,133456,133457],{},[29,133458,133459,133462,133463],{},[1464,133460,133461],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1464,133464,133465],{},"定位模式",[60,133467,133469],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[39,133470,133471,133477,133491,133508,133525],{"__ignoreMap":66},[84,133472,133473,133475],{"class":86,"line":87},[84,133474,131523],{"class":90},[84,133476,16742],{"class":154},[84,133478,133479,133482,133484,133486,133488],{"class":86,"line":98},[84,133480,133481],{"class":94},"  position",[84,133483,52586],{"class":154},[84,133485,55911],{"class":94},[84,133487,131538],{"class":154},[84,133489,133490],{"class":1378},"\u002F* 定位模式 *\u002F\n",[84,133492,133493,133496,133498,133500,133502,133505],{"class":86,"line":106},[84,133494,133495],{"class":94},"  top",[84,133497,52586],{"class":154},[84,133499,1756],{"class":94},[84,133501,52641],{"class":129},[84,133503,133504],{"class":154},";           ",[84,133506,133507],{"class":1378},"\u002F* 边偏移：上 *\u002F\n",[84,133509,133510,133513,133515,133517,133519,133522],{"class":86,"line":112},[84,133511,133512],{"class":94},"  left",[84,133514,52586],{"class":154},[84,133516,2008],{"class":94},[84,133518,52641],{"class":129},[84,133520,133521],{"class":154},";          ",[84,133523,133524],{"class":1378},"\u002F* 边偏移：左 *\u002F\n",[84,133526,133527],{"class":86,"line":425},[84,133528,2746],{"class":154},[458,133530,133531,133540],{},[461,133532,133533],{},[464,133534,133535,133537],{},[467,133536,1467],{"align":24906},[467,133538,133539],{"align":24906},"语义",[474,133541,133542,133549,133556,133563],{},[464,133543,133544,133546],{},[479,133545,133128],{"align":24906},[479,133547,133548],{"align":24906},"静态定位",[464,133550,133551,133553],{},[479,133552,55911],{"align":24906},[479,133554,133555],{"align":24906},"相对定位",[464,133557,133558,133560],{},[479,133559,55978],{"align":24906},[479,133561,133562],{"align":24906},"绝对定位",[464,133564,133565,133567],{},[479,133566,87379],{"align":24906},[479,133568,133569],{"align":24906},"固定定位",[19,133571,133572],{},"（1）静态定位：",[2315,133574,133575,133586],{},[29,133576,133577,133578,133581,133582,133585],{},"静态定位是元素的 ",[1464,133579,133580],{},"默认定位方式"," ， ",[1464,133583,133584],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,133587,6358],{},[60,133589,133590],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133591,133592,133598,133610,133624,133638],{"__ignoreMap":66},[84,133593,133594,133596],{"class":86,"line":87},[84,133595,131523],{"class":90},[84,133597,16742],{"class":154},[84,133599,133600,133602,133604,133606,133608],{"class":86,"line":98},[84,133601,133481],{"class":94},[84,133603,52586],{"class":154},[84,133605,55911],{"class":94},[84,133607,131538],{"class":154},[84,133609,133490],{"class":1378},[84,133611,133612,133614,133616,133618,133620,133622],{"class":86,"line":106},[84,133613,133495],{"class":94},[84,133615,52586],{"class":154},[84,133617,1756],{"class":94},[84,133619,52641],{"class":129},[84,133621,133504],{"class":154},[84,133623,133507],{"class":1378},[84,133625,133626,133628,133630,133632,133634,133636],{"class":86,"line":112},[84,133627,133512],{"class":94},[84,133629,52586],{"class":154},[84,133631,2008],{"class":94},[84,133633,52641],{"class":129},[84,133635,133521],{"class":154},[84,133637,133524],{"class":1378},[84,133639,133640],{"class":86,"line":425},[84,133641,2746],{"class":154},[2315,133643,133644,133647],{},[29,133645,133646],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,133648,133649],{},"静态定位在布局时我们几乎不用的",[19,133651,133652],{},"（2）相对定位",[2315,133654,133655,133662],{},[29,133656,133657,133658,133661],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1464,133659,133660],{},"原来的位置"," 来说的（自恋型）",[29,133663,6358],{},[60,133665,133666],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133667,133668,133674,133686,133700,133714],{"__ignoreMap":66},[84,133669,133670,133672],{"class":86,"line":87},[84,133671,131523],{"class":90},[84,133673,16742],{"class":154},[84,133675,133676,133678,133680,133682,133684],{"class":86,"line":98},[84,133677,133481],{"class":94},[84,133679,52586],{"class":154},[84,133681,55911],{"class":94},[84,133683,131538],{"class":154},[84,133685,133490],{"class":1378},[84,133687,133688,133690,133692,133694,133696,133698],{"class":86,"line":106},[84,133689,133495],{"class":94},[84,133691,52586],{"class":154},[84,133693,1756],{"class":94},[84,133695,52641],{"class":129},[84,133697,133504],{"class":154},[84,133699,133507],{"class":1378},[84,133701,133702,133704,133706,133708,133710,133712],{"class":86,"line":112},[84,133703,133512],{"class":94},[84,133705,52586],{"class":154},[84,133707,2008],{"class":94},[84,133709,52641],{"class":129},[84,133711,133521],{"class":154},[84,133713,133524],{"class":1378},[84,133715,133716],{"class":86,"line":425},[84,133717,2746],{"class":154},[2315,133719,133720],{},[29,133721,133722,133723,133725,133726,133728,133729,133732,133733,133736,133737,133739,133740,133743],{},"相对定位的特点：",[54865,133724],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54865,133727],{},"  ② ",[1464,133730,133731],{},"原来"," 在标准流的 ",[1464,133734,133735],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54865,133738],{},"  ③因此， ",[1464,133741,133742],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133745,133746],{},"（3）绝对定位",[2315,133748,133749,133758],{},[29,133750,133751,133753,133754,133757],{},[1464,133752,133562],{}," 是元素在移动位置的时候，是相对于它 ",[1464,133755,133756],{},"祖先元素"," 来说的（拼爹型）",[29,133759,6358],{},[60,133761,133762],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133763,133764,133770,133782,133796,133810],{"__ignoreMap":66},[84,133765,133766,133768],{"class":86,"line":87},[84,133767,131523],{"class":90},[84,133769,16742],{"class":154},[84,133771,133772,133774,133776,133778,133780],{"class":86,"line":98},[84,133773,133481],{"class":94},[84,133775,52586],{"class":154},[84,133777,55911],{"class":94},[84,133779,131538],{"class":154},[84,133781,133490],{"class":1378},[84,133783,133784,133786,133788,133790,133792,133794],{"class":86,"line":106},[84,133785,133495],{"class":94},[84,133787,52586],{"class":154},[84,133789,1756],{"class":94},[84,133791,52641],{"class":129},[84,133793,133504],{"class":154},[84,133795,133507],{"class":1378},[84,133797,133798,133800,133802,133804,133806,133808],{"class":86,"line":112},[84,133799,133512],{"class":94},[84,133801,52586],{"class":154},[84,133803,2008],{"class":94},[84,133805,52641],{"class":129},[84,133807,133521],{"class":154},[84,133809,133524],{"class":1378},[84,133811,133812],{"class":86,"line":425},[84,133813,2746],{"class":154},[2315,133815,133816,133831,133840,133843],{},[29,133817,133818,133819,133821,133822,133824,133825,133827,133828,133830],{},"绝对定位的特点：",[54865,133820],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54865,133823],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54865,133826],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54865,133829],{},"  (4)固定定位",[29,133832,133833,133835,133836,133839],{},[1464,133834,133569],{}," 是元素 ",[1464,133837,133838],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,133841,133842],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,133844,133845],{},"语法:",[60,133847,133848],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133849,133850,133856,133868,133882,133896],{"__ignoreMap":66},[84,133851,133852,133854],{"class":86,"line":87},[84,133853,131523],{"class":90},[84,133855,16742],{"class":154},[84,133857,133858,133860,133862,133864,133866],{"class":86,"line":98},[84,133859,133481],{"class":94},[84,133861,52586],{"class":154},[84,133863,55911],{"class":94},[84,133865,131538],{"class":154},[84,133867,133490],{"class":1378},[84,133869,133870,133872,133874,133876,133878,133880],{"class":86,"line":106},[84,133871,133495],{"class":94},[84,133873,52586],{"class":154},[84,133875,1756],{"class":94},[84,133877,52641],{"class":129},[84,133879,133504],{"class":154},[84,133881,133507],{"class":1378},[84,133883,133884,133886,133888,133890,133892,133894],{"class":86,"line":112},[84,133885,133512],{"class":94},[84,133887,52586],{"class":154},[84,133889,2008],{"class":94},[84,133891,52641],{"class":129},[84,133893,133521],{"class":154},[84,133895,133524],{"class":1378},[84,133897,133898],{"class":86,"line":425},[84,133899,2746],{"class":154},[2315,133901,133902,133911],{},[29,133903,133904,133905,133907,133908,133910],{},"特点:",[54865,133906],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54865,133909],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,133912,133913,133914,133916,133917,133919,133920,133922],{},"固定在版心位置的方法:",[54865,133915],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54865,133918],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54865,133921],{},"  实例：",[60,133924,133925],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133926,133927,133933,133945,133959,133973],{"__ignoreMap":66},[84,133928,133929,133931],{"class":86,"line":87},[84,133930,131523],{"class":90},[84,133932,16742],{"class":154},[84,133934,133935,133937,133939,133941,133943],{"class":86,"line":98},[84,133936,133481],{"class":94},[84,133938,52586],{"class":154},[84,133940,55911],{"class":94},[84,133942,131538],{"class":154},[84,133944,133490],{"class":1378},[84,133946,133947,133949,133951,133953,133955,133957],{"class":86,"line":106},[84,133948,133495],{"class":94},[84,133950,52586],{"class":154},[84,133952,1756],{"class":94},[84,133954,52641],{"class":129},[84,133956,133504],{"class":154},[84,133958,133507],{"class":1378},[84,133960,133961,133963,133965,133967,133969,133971],{"class":86,"line":112},[84,133962,133512],{"class":94},[84,133964,52586],{"class":154},[84,133966,2008],{"class":94},[84,133968,52641],{"class":129},[84,133970,133521],{"class":154},[84,133972,133524],{"class":1378},[84,133974,133975],{"class":86,"line":425},[84,133976,2746],{"class":154},[2643,133978],{"style":127531,"src":133979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133981,133982],{},"(5)粘性定位",[2315,133984,133985,133988],{},[29,133986,133987],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,133989,6358],{},[60,133991,133992],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,133993,133994,134000,134012,134026,134040],{"__ignoreMap":66},[84,133995,133996,133998],{"class":86,"line":87},[84,133997,131523],{"class":90},[84,133999,16742],{"class":154},[84,134001,134002,134004,134006,134008,134010],{"class":86,"line":98},[84,134003,133481],{"class":94},[84,134005,52586],{"class":154},[84,134007,55911],{"class":94},[84,134009,131538],{"class":154},[84,134011,133490],{"class":1378},[84,134013,134014,134016,134018,134020,134022,134024],{"class":86,"line":106},[84,134015,133495],{"class":94},[84,134017,52586],{"class":154},[84,134019,1756],{"class":94},[84,134021,52641],{"class":129},[84,134023,133504],{"class":154},[84,134025,133507],{"class":1378},[84,134027,134028,134030,134032,134034,134036,134038],{"class":86,"line":112},[84,134029,133512],{"class":94},[84,134031,52586],{"class":154},[84,134033,2008],{"class":94},[84,134035,52641],{"class":129},[84,134037,133521],{"class":154},[84,134039,133524],{"class":1378},[84,134041,134042],{"class":86,"line":425},[84,134043,2746],{"class":154},[2315,134045,134046],{},[29,134047,134048,134049,134051,134052,134054,134055,134057,134058,134061,134062,134064],{},"粘性定位的特点：",[54865,134050],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54865,134053],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54865,134056],{},"  ③必须添加 top 、left、right、bottom ",[1464,134059,134060],{},"其中一个"," 才有效",[54865,134063],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[60,134066,134067],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,134068,134069,134075,134087,134101,134115],{"__ignoreMap":66},[84,134070,134071,134073],{"class":86,"line":87},[84,134072,131523],{"class":90},[84,134074,16742],{"class":154},[84,134076,134077,134079,134081,134083,134085],{"class":86,"line":98},[84,134078,133481],{"class":94},[84,134080,52586],{"class":154},[84,134082,55911],{"class":94},[84,134084,131538],{"class":154},[84,134086,133490],{"class":1378},[84,134088,134089,134091,134093,134095,134097,134099],{"class":86,"line":106},[84,134090,133495],{"class":94},[84,134092,52586],{"class":154},[84,134094,1756],{"class":94},[84,134096,52641],{"class":129},[84,134098,133504],{"class":154},[84,134100,133507],{"class":1378},[84,134102,134103,134105,134107,134109,134111,134113],{"class":86,"line":112},[84,134104,133512],{"class":94},[84,134106,52586],{"class":154},[84,134108,2008],{"class":94},[84,134110,52641],{"class":129},[84,134112,133521],{"class":154},[84,134114,133524],{"class":1378},[84,134116,134117],{"class":86,"line":425},[84,134118,2746],{"class":154},[2643,134120],{"style":127531,"src":134121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134123,134124],{},"(6)总结",[458,134126,134127,134142],{},[461,134128,134129],{},[464,134130,134131,134133,134136,134139],{},[467,134132,133465],{"align":24906},[467,134134,134135],{"align":24906},"是否脱标",[467,134137,134138],{"align":24906},"移动位置",[467,134140,134141],{"align":24906},"是否常用",[474,134143,134144,134157,134171,134185,134198],{},[464,134145,134146,134149,134151,134154],{},[479,134147,134148],{"align":24906},"Static 静态定位",[479,134150,105813],{"align":24906},[479,134152,134153],{"align":24906},"不能使用边偏移",[479,134155,134156],{"align":24906},"很少",[464,134158,134159,134162,134165,134168],{},[479,134160,134161],{"align":24906},"Relative 相对定位",[479,134163,134164],{"align":24906},"否(占有位置)",[479,134166,134167],{"align":24906},"相对于自身位置移动",[479,134169,134170],{"align":24906},"基本单独使用",[464,134172,134173,134176,134179,134182],{},[479,134174,134175],{"align":24906},"Absolute 绝对定位",[479,134177,134178],{"align":24906},"是(不占有位置)",[479,134180,134181],{"align":24906},"带有定位的父级",[479,134183,134184],{"align":24906},"要和定位父级元素搭配使用",[464,134186,134187,134190,134192,134195],{},[479,134188,134189],{"align":24906},"Fixed 固定定位",[479,134191,134178],{"align":24906},[479,134193,134194],{"align":24906},"浏览器可视区",[479,134196,134197],{"align":24906},"单独使用,不需要父级",[464,134199,134200,134203,134205,134207],{},[479,134201,134202],{"align":24906},"Sticky 粘性定位",[479,134204,134164],{"align":24906},[479,134206,134194],{"align":24906},[479,134208,134209],{"align":24906},"当前阶段少",[26,134211,134212],{"start":98},[29,134213,134214,134217],{},[1464,134215,134216],{},"边偏移"," 则决定了该元素的最终位置",[458,134219,134220,134231],{},[461,134221,134222],{},[464,134223,134224,134227,134229],{},[467,134225,134226],{"align":24906},"边偏移属性",[467,134228,28650],{"align":24906},[467,134230,28647],{"align":24906},[474,134232,134233,134244,134255,134265],{},[464,134234,134235,134238,134241],{},[479,134236,134237],{"align":24906},"top",[479,134239,134240],{"align":24906},"top: 80px;",[479,134242,134243],{"align":24906},"顶端偏移量，定义元素相对于父元素上边线的距离",[464,134245,134246,134249,134252],{},[479,134247,134248],{"align":24906},"bottom",[479,134250,134251],{"align":24906},"bottom: 80px ;",[479,134253,134254],{"align":24906},"底部偏移量，定义元素相对于其父元素下边线的距离",[464,134256,134257,134259,134262],{},[479,134258,24906],{"align":24906},[479,134260,134261],{"align":24906},"left: 80px ;",[479,134263,134264],{"align":24906},"左侧偏移量，定义元素相对于其父元素左边线的距离",[464,134266,134267,134269,134272],{},[479,134268,73668],{"align":24906},[479,134270,134271],{"align":24906},"right: 80px ;",[479,134273,134274],{"align":24906},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2315,134276,134277],{},[29,134278,10197,134279,134281,134282,134284,134285,134287,134288,134291,134292,134294,134295,134297],{},[54865,134280],{},"  ① ",[1464,134283,134216],{}," 需要和 ",[1464,134286,133465],{}," 联合使用， ",[1464,134289,134290],{},"单独使用无效"," ；",[54865,134293],{},"  ②top和bottom不要同时使用",[54865,134296],{},"  ③left和right不要同时使用",[23168,134299,134301],{"id":134300},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134303,134304],{},"子级是绝对定位的话，父级要用相对定位",[2315,134306,134307,134310,134313,134316],{},[29,134308,134309],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134311,134312],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134314,134315],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134317,134318,134319,134322],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1464,134320,134321],{},"子绝父绝"," 也会遇到",[23168,134324,134326],{"id":134325},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2315,134328,134329,134344],{},[29,134330,134331,134332,134335,134336,134339,134340,134343],{},"在使用 ",[1464,134333,134334],{},"定位"," 布局时，可能会 ",[1464,134337,134338],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1464,134341,134342],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134345,6358],{},[60,134347,134348],{"className":127675,"code":133468,"language":127677,"meta":66,"style":66},[39,134349,134350,134356,134368,134382,134396],{"__ignoreMap":66},[84,134351,134352,134354],{"class":86,"line":87},[84,134353,131523],{"class":90},[84,134355,16742],{"class":154},[84,134357,134358,134360,134362,134364,134366],{"class":86,"line":98},[84,134359,133481],{"class":94},[84,134361,52586],{"class":154},[84,134363,55911],{"class":94},[84,134365,131538],{"class":154},[84,134367,133490],{"class":1378},[84,134369,134370,134372,134374,134376,134378,134380],{"class":86,"line":106},[84,134371,133495],{"class":94},[84,134373,52586],{"class":154},[84,134375,1756],{"class":94},[84,134377,52641],{"class":129},[84,134379,133504],{"class":154},[84,134381,133507],{"class":1378},[84,134383,134384,134386,134388,134390,134392,134394],{"class":86,"line":112},[84,134385,133512],{"class":94},[84,134387,52586],{"class":154},[84,134389,2008],{"class":94},[84,134391,52641],{"class":129},[84,134393,133521],{"class":154},[84,134395,133524],{"class":1378},[84,134397,134398],{"class":86,"line":425},[84,134399,2746],{"class":154},[2315,134401,134402],{},[29,134403,134404,134405,134281,134407,134409,134410,128838,134413,83685,134416,134418,134419,134421,134422,134425,134426,134291,134429,134431,134432,134435,134437],{},"z-index的特性",[54865,134406],{},[1464,134408,128139],{}," ： ",[1464,134411,134412],{},"正整数",[1464,134414,134415],{},"负整数",[1464,134417,1504],{}," ，默认值是 0，数值越大，盒子越靠上；",[54865,134420],{},"  ②如果 ",[1464,134423,134424],{},"属性值相同"," ，则按照书写顺序， ",[1464,134427,134428],{},"后来居上",[54865,134430],{},"  ③数字后面 ",[1464,134433,134434],{},"不能加单位",[54865,134436],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23168,134439,134441],{"id":134440},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134443,134444],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134446,134447],{},"方法:",[2315,134449,134450,134460],{},[29,134451,134452,134453,134456,134457],{},"left: 50%; 让 ",[1464,134454,134455],{},"盒子的左侧"," 移动到 ",[1464,134458,134459],{},"父级元素的水平中心位置",[29,134461,134462,134463,134466,134467],{},"margin-left: -100px; 让盒子 ",[1464,134464,134465],{},"向左"," 移动 ",[1464,134468,134469],{},"自身宽度的一半",[23168,134471,134473],{"id":134472},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,134475,134476,134479],{},[29,134477,134478],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134480,134481],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134483,134484],{},"也就是说绝对定位和固定定位和浮动类似",[26,134486,134487],{"start":106},[29,134488,134489],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2315,134491,134492,134495,134498],{},[29,134493,134494],{},"可以用inline-block 转换为行内块",[29,134496,134497],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,134499,134500],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134502,134503],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23168,134505,134507],{"id":134506},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,134509,134510,134513,134516,134519],{},[29,134511,134512],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,134514,134515],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,134517,134518],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,134520,134521],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[60,134523,134524],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,134525,134526,134532,134542,134546,134552,134562],{"__ignoreMap":66},[84,134527,134528,134530],{"class":86,"line":87},[84,134529,132148],{"class":90},[84,134531,16742],{"class":154},[84,134533,134534,134536,134538,134540],{"class":86,"line":98},[84,134535,132155],{"class":94},[84,134537,52586],{"class":154},[84,134539,24906],{"class":94},[84,134541,2471],{"class":154},[84,134543,134544],{"class":86,"line":106},[84,134545,2746],{"class":154},[84,134547,134548,134550],{"class":86,"line":112},[84,134549,132170],{"class":90},[84,134551,16742],{"class":154},[84,134553,134554,134556,134558,134560],{"class":86,"line":425},[84,134555,132155],{"class":94},[84,134557,52586],{"class":154},[84,134559,73668],{"class":94},[84,134561,2471],{"class":154},[84,134563,134564],{"class":86,"line":2395},[84,134565,2746],{"class":154},[2643,134567],{"style":127531,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23168,134570,134572],{"id":134571},"_11138-轮播图","11.1.3.8 轮播图",[2643,134574],{"style":127531,"src":134575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,134577,134578],{},[29,134579,134580],{},"制作顺序:",[2315,134582,134583,134586,134589,134598],{},[29,134584,134585],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,134587,134588],{},"里面先放一张图片",[29,134590,134591,134592,134594,134595,134597],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54865,134593],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54865,134596],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,134599,134600,134601,134603,134604,134606],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54865,134602],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54865,134605],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,134608,134609],{"start":98},[29,134610,134611],{},"代码模块",[60,134613,134615],{"className":127675,"code":134614,"language":127677,"meta":66,"style":66},"\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",[39,134616,134617,134622,134629,134639,134649,134659,134663,134668,134675,134685],{"__ignoreMap":66},[84,134618,134619],{"class":86,"line":87},[84,134620,134621],{"class":1378},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[84,134623,134624,134627],{"class":86,"line":98},[84,134625,134626],{"class":90},".son",[84,134628,16742],{"class":154},[84,134630,134631,134633,134635,134637],{"class":86,"line":106},[84,134632,133481],{"class":94},[84,134634,52586],{"class":154},[84,134636,55978],{"class":94},[84,134638,2471],{"class":154},[84,134640,134641,134643,134645,134647],{"class":86,"line":112},[84,134642,133495],{"class":94},[84,134644,52586],{"class":154},[84,134646,1504],{"class":94},[84,134648,2471],{"class":154},[84,134650,134651,134653,134655,134657],{"class":86,"line":425},[84,134652,133512],{"class":94},[84,134654,52586],{"class":154},[84,134656,1504],{"class":94},[84,134658,2471],{"class":154},[84,134660,134661],{"class":86,"line":2395},[84,134662,2746],{"class":154},[84,134664,134665],{"class":86,"line":2401},[84,134666,134667],{"class":1378},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[84,134669,134670,134673],{"class":86,"line":2492},[84,134671,134672],{"class":90},".father",[84,134674,16742],{"class":154},[84,134676,134677,134679,134681,134683],{"class":86,"line":2498},[84,134678,133481],{"class":94},[84,134680,52586],{"class":154},[84,134682,55911],{"class":94},[84,134684,2471],{"class":154},[84,134686,134687],{"class":86,"line":2510},[84,134688,2746],{"class":154},[19,134690,134691],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[198,134693,134695],{"id":134694},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2643,134697],{"style":127531,"src":134698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134700,134701],{},"✨ 黄金口诀：",[19,134703,134704],{},"\"TOP正下负上，LEFT正右负左\"",[19,134706,134707],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134709,134710],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134712,134713],{},"✨ 简单记：",[19,134715,134716],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1222,134718,134719],{},"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":66,"searchDepth":98,"depth":98,"links":134721},[134722],{"id":133249,"depth":98,"text":133250,"children":134723},[134724,134725,134726,134727],{"id":133253,"depth":106,"text":133254},{"id":133268,"depth":106,"text":133269},{"id":133436,"depth":106,"text":133437},{"id":134694,"depth":106,"text":134695},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133241,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134734,"title":134735,"body":134736,"description":1249,"extension":1250,"meta":136159,"navigation":1252,"path":136160,"seo":136161,"stem":136162,"__hash__":136163},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134737,"toc":136138},[134738,134741,134745,134753,134757,134762,134770,134782,134786,134791,134799,134810,134814,134819,134860,134868,134872,134875,134878,134881,134975,134978,135072,135075,135169,135172,135175,135210,135213,135216,135246,135249,135252,135255,135258,135261,135264,135267,135337,135340,135344,135348,135389,135393,135399,135402,135405,135409,135412,135415,135418,135499,135502,135505,135509,135513,135516,135519,135522,135525,135528,135534,135543,135547,135566,135570,135580,135583,135586,135589,135592,135595,135598,135601,135604,135613,135617,135626,135629,135634,135687,135692,135858,135861,135864,135869,135872,135875,135878,135881,135886,136034,136037,136040,136045,136048,136053,136087,136090,136093,136097,136100,136107,136110,136113,136116,136119,136122,136125,136128,136132,136135],[10,134739,134735],{"id":134740},"_12-显示隐藏与图形资源",[14,134742,134744],{"id":134743},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2315,134746,134747,134750],{},[29,134748,134749],{},"目的:让一个元素在页面中消失或者显示出来",[29,134751,134752],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[198,134754,134756],{"id":134755},"_1211-display-显示","12.1.1 display 显示",[26,134758,134759],{},[29,134760,134761],{},"display 设置或检索对象是否及如何显示",[2315,134763,134764,134767],{},[29,134765,134766],{},"display: none;隐藏对象",[29,134768,134769],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,134771,134772,134779],{"start":98},[29,134773,134774,134775,134778],{},"特点： display 隐藏元素后， ",[1464,134776,134777],{},"不再占"," 有原来的位置",[29,134780,134781],{},"在js中使用非常的广泛",[198,134783,134785],{"id":134784},"_1212-visibility可见性","12.1.2 visibility可见性",[26,134787,134788],{},[29,134789,134790],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2315,134792,134793,134796],{},[29,134794,134795],{},"visibility： visible；元素可见",[29,134797,134798],{},"visibility：hidden；元素隐藏",[26,134800,134801,134804,134807],{"start":98},[29,134802,134803],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,134805,134806],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,134808,134809],{},"隐藏后继续占有原有位置",[198,134811,134813],{"id":134812},"_1213-overflow溢出","12.1.3 overflow溢出",[2315,134815,134816],{},[29,134817,134818],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[458,134820,134821,134829],{},[461,134822,134823],{},[464,134824,134825,134827],{},[467,134826,128139],{"align":24906},[467,134828,28647],{"align":24906},[474,134830,134831,134839,134846,134853],{},[464,134832,134833,134836],{},[479,134834,134835],{"align":24906},"visible",[479,134837,134838],{"align":24906},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[464,134840,134841,134843],{},[479,134842,62860],{"align":24906},[479,134844,134845],{"align":24906},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[464,134847,134848,134850],{},[479,134849,130095],{"align":24906},[479,134851,134852],{"align":24906},"不管超出内容否，总是显示滚动条",[464,134854,134855,134857],{},[479,134856,73809],{"align":24906},[479,134858,134859],{"align":24906},"超出自动显示滚动条，不超出不显示滚动条",[2315,134861,134862,134865],{},[29,134863,134864],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,134866,134867],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[198,134869,134871],{"id":134870},"_1214-案例收获","12.1.4 案例收获",[2643,134873],{"style":127531,"src":134874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134876,134877],{},"问题：没做出来动态效果，使用hover没实现",[19,134879,134880],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[60,134882,134883],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,134884,134885,134889,134903,134907,134921,134925,134939,134943,134957,134961],{"__ignoreMap":66},[84,134886,134887],{"class":86,"line":87},[84,134888,133114],{"class":1378},[84,134890,134891,134893,134895,134897,134899,134901],{"class":86,"line":98},[84,134892,133119],{"class":90},[84,134894,80953],{"class":154},[84,134896,130035],{"class":94},[84,134898,52586],{"class":154},[84,134900,133128],{"class":94},[84,134902,130605],{"class":154},[84,134904,134905],{"class":86,"line":106},[84,134906,133135],{"class":1378},[84,134908,134909,134911,134913,134915,134917,134919],{"class":86,"line":112},[84,134910,133140],{"class":90},[84,134912,80953],{"class":154},[84,134914,130035],{"class":94},[84,134916,52586],{"class":154},[84,134918,55911],{"class":94},[84,134920,130605],{"class":154},[84,134922,134923],{"class":86,"line":425},[84,134924,133155],{"class":1378},[84,134926,134927,134929,134931,134933,134935,134937],{"class":86,"line":2395},[84,134928,133160],{"class":90},[84,134930,80953],{"class":154},[84,134932,130035],{"class":94},[84,134934,52586],{"class":154},[84,134936,55978],{"class":94},[84,134938,130605],{"class":154},[84,134940,134941],{"class":86,"line":2401},[84,134942,133175],{"class":1378},[84,134944,134945,134947,134949,134951,134953,134955],{"class":86,"line":2492},[84,134946,133180],{"class":90},[84,134948,80953],{"class":154},[84,134950,130035],{"class":94},[84,134952,52586],{"class":154},[84,134954,87379],{"class":94},[84,134956,130605],{"class":154},[84,134958,134959],{"class":86,"line":2498},[84,134960,133195],{"class":1378},[84,134962,134963,134965,134967,134969,134971,134973],{"class":86,"line":2510},[84,134964,133200],{"class":90},[84,134966,80953],{"class":154},[84,134968,130035],{"class":94},[84,134970,52586],{"class":154},[84,134972,133209],{"class":94},[84,134974,130605],{"class":154},[19,134976,134977],{},"完整代码：",[60,134979,134980],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,134981,134982,134986,135000,135004,135018,135022,135036,135040,135054,135058],{"__ignoreMap":66},[84,134983,134984],{"class":86,"line":87},[84,134985,133114],{"class":1378},[84,134987,134988,134990,134992,134994,134996,134998],{"class":86,"line":98},[84,134989,133119],{"class":90},[84,134991,80953],{"class":154},[84,134993,130035],{"class":94},[84,134995,52586],{"class":154},[84,134997,133128],{"class":94},[84,134999,130605],{"class":154},[84,135001,135002],{"class":86,"line":106},[84,135003,133135],{"class":1378},[84,135005,135006,135008,135010,135012,135014,135016],{"class":86,"line":112},[84,135007,133140],{"class":90},[84,135009,80953],{"class":154},[84,135011,130035],{"class":94},[84,135013,52586],{"class":154},[84,135015,55911],{"class":94},[84,135017,130605],{"class":154},[84,135019,135020],{"class":86,"line":425},[84,135021,133155],{"class":1378},[84,135023,135024,135026,135028,135030,135032,135034],{"class":86,"line":2395},[84,135025,133160],{"class":90},[84,135027,80953],{"class":154},[84,135029,130035],{"class":94},[84,135031,52586],{"class":154},[84,135033,55978],{"class":94},[84,135035,130605],{"class":154},[84,135037,135038],{"class":86,"line":2401},[84,135039,133175],{"class":1378},[84,135041,135042,135044,135046,135048,135050,135052],{"class":86,"line":2492},[84,135043,133180],{"class":90},[84,135045,80953],{"class":154},[84,135047,130035],{"class":94},[84,135049,52586],{"class":154},[84,135051,87379],{"class":94},[84,135053,130605],{"class":154},[84,135055,135056],{"class":86,"line":2498},[84,135057,133195],{"class":1378},[84,135059,135060,135062,135064,135066,135068,135070],{"class":86,"line":2510},[84,135061,133200],{"class":90},[84,135063,80953],{"class":154},[84,135065,130035],{"class":94},[84,135067,52586],{"class":154},[84,135069,133209],{"class":94},[84,135071,130605],{"class":154},[19,135073,135074],{},"分布思路重点详解：",[60,135076,135077],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,135078,135079,135083,135097,135101,135115,135119,135133,135137,135151,135155],{"__ignoreMap":66},[84,135080,135081],{"class":86,"line":87},[84,135082,133114],{"class":1378},[84,135084,135085,135087,135089,135091,135093,135095],{"class":86,"line":98},[84,135086,133119],{"class":90},[84,135088,80953],{"class":154},[84,135090,130035],{"class":94},[84,135092,52586],{"class":154},[84,135094,133128],{"class":94},[84,135096,130605],{"class":154},[84,135098,135099],{"class":86,"line":106},[84,135100,133135],{"class":1378},[84,135102,135103,135105,135107,135109,135111,135113],{"class":86,"line":112},[84,135104,133140],{"class":90},[84,135106,80953],{"class":154},[84,135108,130035],{"class":94},[84,135110,52586],{"class":154},[84,135112,55911],{"class":94},[84,135114,130605],{"class":154},[84,135116,135117],{"class":86,"line":425},[84,135118,133155],{"class":1378},[84,135120,135121,135123,135125,135127,135129,135131],{"class":86,"line":2395},[84,135122,133160],{"class":90},[84,135124,80953],{"class":154},[84,135126,130035],{"class":94},[84,135128,52586],{"class":154},[84,135130,55978],{"class":94},[84,135132,130605],{"class":154},[84,135134,135135],{"class":86,"line":2401},[84,135136,133175],{"class":1378},[84,135138,135139,135141,135143,135145,135147,135149],{"class":86,"line":2492},[84,135140,133180],{"class":90},[84,135142,80953],{"class":154},[84,135144,130035],{"class":94},[84,135146,52586],{"class":154},[84,135148,87379],{"class":94},[84,135150,130605],{"class":154},[84,135152,135153],{"class":86,"line":2498},[84,135154,133195],{"class":1378},[84,135156,135157,135159,135161,135163,135165,135167],{"class":86,"line":2510},[84,135158,133200],{"class":90},[84,135160,80953],{"class":154},[84,135162,130035],{"class":94},[84,135164,52586],{"class":154},[84,135166,133209],{"class":94},[84,135168,130605],{"class":154},[2643,135170],{"style":127531,"src":135171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135173,135174],{},"图片太大，盒子太小，此时需要修改图片的大小",[60,135176,135178],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[39,135179,135180],{"__ignoreMap":66},[84,135181,135182,135184,135186,135188,135190,135193,135195,135197,135200,135203,135205,135208],{"class":86,"line":87},[84,135183,2218],{"class":154},[84,135185,2643],{"class":52449},[84,135187,56386],{"class":90},[84,135189,867],{"class":154},[84,135191,135192],{"class":158},"\"images\u002Fpic.jpg\"",[84,135194,56394],{"class":90},[84,135196,867],{"class":154},[84,135198,135199],{"class":158},"\"描述文字\"",[84,135201,135202],{"class":90}," title",[84,135204,867],{"class":154},[84,135206,135207],{"class":158},"\"悬停提示\"",[84,135209,52456],{"class":154},[2643,135211],{"style":127531,"src":135212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135214,135215],{},"制造遮罩层",[60,135217,135218],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,135219,135220],{"__ignoreMap":66},[84,135221,135222,135224,135226,135228,135230,135232,135234,135236,135238,135240,135242,135244],{"class":86,"line":87},[84,135223,2218],{"class":154},[84,135225,2643],{"class":52449},[84,135227,56386],{"class":90},[84,135229,867],{"class":154},[84,135231,135192],{"class":158},[84,135233,56394],{"class":90},[84,135235,867],{"class":154},[84,135237,135199],{"class":158},[84,135239,135202],{"class":90},[84,135241,867],{"class":154},[84,135243,135207],{"class":158},[84,135245,52456],{"class":154},[19,135247,135248],{},"此时是这样的为标准流",[2643,135250],{"style":127531,"src":135251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135253,135254],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135256,135257],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135259,135260],{},"让他在中间，用center(background-position)",[19,135262,135263],{},"将需要变的尽可能放到一个盒子中",[19,135265,135266],{},"放大盒子上内部盒子发生变化",[60,135268,135270],{"className":127675,"code":135269,"language":127677,"meta":66,"style":66},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[39,135271,135272,135278,135288,135292,135299,135309,135321,135333],{"__ignoreMap":66},[84,135273,135274,135276],{"class":86,"line":87},[84,135275,128742],{"class":90},[84,135277,16742],{"class":154},[84,135279,135280,135282,135284,135286],{"class":86,"line":98},[84,135281,133481],{"class":94},[84,135283,52586],{"class":154},[84,135285,55911],{"class":94},[84,135287,2471],{"class":154},[84,135289,135290],{"class":86,"line":106},[84,135291,2746],{"class":154},[84,135293,135294,135297],{"class":86,"line":112},[84,135295,135296],{"class":90},".child",[84,135298,16742],{"class":154},[84,135300,135301,135303,135305,135307],{"class":86,"line":425},[84,135302,133481],{"class":94},[84,135304,52586],{"class":154},[84,135306,55978],{"class":94},[84,135308,2471],{"class":154},[84,135310,135311,135313,135315,135317,135319],{"class":86,"line":2395},[84,135312,133495],{"class":94},[84,135314,52586],{"class":154},[84,135316,1964],{"class":94},[84,135318,1638],{"class":129},[84,135320,2471],{"class":154},[84,135322,135323,135325,135327,135329,135331],{"class":86,"line":2401},[84,135324,133512],{"class":94},[84,135326,52586],{"class":154},[84,135328,1964],{"class":94},[84,135330,1638],{"class":129},[84,135332,2471],{"class":154},[84,135334,135335],{"class":86,"line":2492},[84,135336,2746],{"class":154},[19,135338,135339],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135341,135343],{"id":135342},"_122-精灵图","12.2 精灵图",[198,135345,135347],{"id":135346},"_1221-理解","12.2.1 理解",[26,135349,135350,135368],{},[29,135351,135352,135353,133581,135356,135359,135360,135363,135364,135367],{},"目的： ",[1464,135354,135355],{},"为了有效地减少服务器接收和发送请求的次数",[1464,135357,135358],{},"提高"," 页面的 ",[1464,135361,135362],{},"加载速度"," ，出现了 ",[1464,135365,135366],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135369,135370,135371,135373,135374,135376,135377,135379,135380,135382,135383,135385,135386,135388],{},"使用精灵图核心：",[54865,135372],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54865,135375],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54865,135378],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54865,135381],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54865,135384],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54865,135387],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[198,135390,135392],{"id":135391},"_1222-扒图","12.2.2 扒图",[60,135394,135397],{"className":135395,"code":135396,"language":65},[63],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[39,135398,135396],{"__ignoreMap":66},[2643,135400],{"style":127531,"src":135401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2643,135403],{"style":127531,"src":135404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[198,135406,135408],{"id":135407},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2643,135410],{"style":127531,"src":135411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135413,135414],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2643,135416],{"style":127531,"src":135417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[60,135419,135421],{"className":127675,"code":135420,"language":127677,"meta":66,"style":66},"\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",[39,135422,135423,135428,135435,135447,135459,135478,135495],{"__ignoreMap":66},[84,135424,135425],{"class":86,"line":87},[84,135426,135427],{"class":1378},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[84,135429,135430,135433],{"class":86,"line":98},[84,135431,135432],{"class":90},".icon",[84,135434,16742],{"class":154},[84,135436,135437,135439,135441,135443,135445],{"class":86,"line":106},[84,135438,71714],{"class":94},[84,135440,52586],{"class":154},[84,135442,2008],{"class":94},[84,135444,52641],{"class":129},[84,135446,2471],{"class":154},[84,135448,135449,135451,135453,135455,135457],{"class":86,"line":112},[84,135450,71934],{"class":94},[84,135452,52586],{"class":154},[84,135454,2008],{"class":94},[84,135456,52641],{"class":129},[84,135458,2471],{"class":154},[84,135460,135461,135463,135465,135467,135469,135472,135474,135476],{"class":86,"line":425},[84,135462,71757],{"class":94},[84,135464,52586],{"class":154},[84,135466,62872],{"class":94},[84,135468,155],{"class":154},[84,135470,135471],{"class":928},"sprites.png",[84,135473,1154],{"class":154},[84,135475,62882],{"class":94},[84,135477,2471],{"class":154},[84,135479,135480,135482,135484,135486,135488,135491,135493],{"class":86,"line":2395},[84,135481,129935],{"class":94},[84,135483,52586],{"class":154},[84,135485,52912],{"class":94},[84,135487,52641],{"class":129},[84,135489,135490],{"class":94}," -20",[84,135492,52641],{"class":129},[84,135494,2471],{"class":154},[84,135496,135497],{"class":86,"line":2401},[84,135498,2746],{"class":154},[2643,135500],{"style":127531,"src":135501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135503,135504],{},"在前端中坐标轴的正方向是右和下",[14,135506,135508],{"id":135507},"_123-字体图标","12.3 字体图标",[198,135510,135512],{"id":135511},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135514,135515],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135517,135518],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135520,135521],{},"1.图片文件还是比较大的。",[19,135523,135524],{},"2.图片本身放大和缩小会失真。",[19,135526,135527],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135529,135530,135531,26903],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1464,135532,135533],{},"字体图标 iconfont",[19,135535,135536,135539,135540,55],{},[1464,135537,135538],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1464,135541,135542],{},"展示的是图标，本质属于字体",[198,135544,135546],{"id":135545},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2315,135548,135549,135554,135557,135560,135563],{},[29,135550,135551,135553],{},[1464,135552,27039],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,135555,135556],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,135558,135559],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,135561,135562],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,135564,135565],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[198,135567,135569],{"id":135568},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2315,135571,135572],{},[29,135573,135574,135575],{},"icomoon字体库：",[208,135576,135579],{"href":135577,"rel":135578},"http:\u002F\u002Ficomoon.io\u002F",[212],"http:\u002F\u002Ficomoon.io",[19,135581,135582],{},"进去之后点icomoon app",[2643,135584],{"style":127531,"src":135585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135587,135588],{},"可以对其编辑：",[2643,135590],{"style":127531,"src":135591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135593,135594],{},"生成字体：",[2643,135596],{"style":127531,"src":135597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135599,135600],{},"下载：",[2643,135602],{"style":127531,"src":135603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2315,135605,135606],{},[29,135607,135608,135609],{},"阿里iconfont字体库： ",[208,135610,135611],{"href":135611,"rel":135612},"http:\u002F\u002Fwww.iconfont.cn\u002F",[212],[198,135614,135616],{"id":135615},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,135618,135619],{},[29,135620,135621,135622,135625],{},"把下载包里面的 ",[1464,135623,135624],{},"fonts"," 文件夹放入页面根目录下",[2643,135627],{"style":127531,"src":135628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,135630,135631],{"start":98},[29,135632,135633],{},"字体文件格式",[458,135635,135636,135645],{},[461,135637,135638],{},[464,135639,135640,135643],{},[467,135641,135642],{"align":24906},"格式",[467,135644,24910],{"align":24906},[474,135646,135647,135657,135667,135677],{},[464,135648,135649,135654],{},[479,135650,135651],{"align":24906},[1464,135652,135653],{},".ttf",[479,135655,135656],{"align":24906},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[464,135658,135659,135664],{},[479,135660,135661],{"align":24906},[1464,135662,135663],{},".woff",[479,135665,135666],{"align":24906},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[464,135668,135669,135674],{},[479,135670,135671],{"align":24906},[1464,135672,135673],{},".eot",[479,135675,135676],{"align":24906},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[464,135678,135679,135684],{},[479,135680,135681],{"align":24906},[1464,135682,135683],{},"svg",[479,135685,135686],{"align":24906},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,135688,135689],{"start":106},[29,135690,135691],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[60,135693,135695],{"className":127675,"code":135694,"language":127677,"meta":66,"style":66},"\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",[39,135696,135697,135702,135709,135721,135737,135762,135783,135803,135823,135827,135833,135843,135854],{"__ignoreMap":66},[84,135698,135699],{"class":86,"line":87},[84,135700,135701],{"class":1378},"\u002F* 引入字体图标 *\u002F\n",[84,135703,135704,135707],{"class":86,"line":98},[84,135705,135706],{"class":129},"@font-face",[84,135708,16742],{"class":154},[84,135710,135711,135714,135716,135719],{"class":86,"line":106},[84,135712,135713],{"class":94},"  font-family",[84,135715,52586],{"class":154},[84,135717,135718],{"class":158},"'icomoon'",[84,135720,2471],{"class":154},[84,135722,135723,135726,135728,135730,135732,135735],{"class":86,"line":112},[84,135724,135725],{"class":94},"  src",[84,135727,52586],{"class":154},[84,135729,62872],{"class":94},[84,135731,155],{"class":154},[84,135733,135734],{"class":158},"'fonts\u002Ficomoon.eot'",[84,135736,3897],{"class":154},[84,135738,135739,135741,135743,135745,135747,135750,135752,135755,135757,135760],{"class":86,"line":425},[84,135740,135725],{"class":94},[84,135742,52586],{"class":154},[84,135744,62872],{"class":94},[84,135746,155],{"class":154},[84,135748,135749],{"class":158},"'fonts\u002Ficomoon.eot?#iefix'",[84,135751,1154],{"class":154},[84,135753,135754],{"class":94},"format",[84,135756,155],{"class":154},[84,135758,135759],{"class":158},"'embedded-opentype'",[84,135761,39199],{"class":154},[84,135763,135764,135767,135769,135772,135774,135776,135778,135781],{"class":86,"line":2395},[84,135765,135766],{"class":94},"       url",[84,135768,155],{"class":154},[84,135770,135771],{"class":158},"'fonts\u002Ficomoon.woff'",[84,135773,1154],{"class":154},[84,135775,135754],{"class":94},[84,135777,155],{"class":154},[84,135779,135780],{"class":158},"'woff'",[84,135782,39199],{"class":154},[84,135784,135785,135787,135789,135792,135794,135796,135798,135801],{"class":86,"line":2401},[84,135786,135766],{"class":94},[84,135788,155],{"class":154},[84,135790,135791],{"class":158},"'fonts\u002Ficomoon.ttf'",[84,135793,1154],{"class":154},[84,135795,135754],{"class":94},[84,135797,155],{"class":154},[84,135799,135800],{"class":158},"'truetype'",[84,135802,39199],{"class":154},[84,135804,135805,135807,135809,135812,135814,135816,135818,135821],{"class":86,"line":2492},[84,135806,135766],{"class":94},[84,135808,155],{"class":154},[84,135810,135811],{"class":158},"'fonts\u002Ficomoon.svg#icomoon'",[84,135813,1154],{"class":154},[84,135815,135754],{"class":94},[84,135817,155],{"class":154},[84,135819,135820],{"class":158},"'svg'",[84,135822,3897],{"class":154},[84,135824,135825],{"class":86,"line":2498},[84,135826,2746],{"class":154},[84,135828,135829,135831],{"class":86,"line":2510},[84,135830,135432],{"class":90},[84,135832,16742],{"class":154},[84,135834,135835,135837,135839,135841],{"class":86,"line":2793},[84,135836,135713],{"class":94},[84,135838,52586],{"class":154},[84,135840,135718],{"class":158},[84,135842,2471],{"class":154},[84,135844,135845,135848,135850,135852],{"class":86,"line":2798},[84,135846,135847],{"class":94},"  font-style",[84,135849,52586],{"class":154},[84,135851,64987],{"class":94},[84,135853,2471],{"class":154},[84,135855,135856],{"class":86,"line":2804},[84,135857,2746],{"class":154},[19,135859,135860],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2643,135862],{"style":127531,"src":135863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,135865,135866],{"start":112},[29,135867,135868],{},"添加字体",[2643,135870],{"style":127531,"src":135871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135873,135874],{},"复制：",[2643,135876],{"style":127531,"src":135877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135879,135880],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,135882,135883],{"start":425},[29,135884,135885],{},"代码展示：",[60,135887,135888],{"className":127675,"code":135694,"language":127677,"meta":66,"style":66},[39,135889,135890,135894,135900,135910,135924,135946,135964,135982,136000,136004,136010,136020,136030],{"__ignoreMap":66},[84,135891,135892],{"class":86,"line":87},[84,135893,135701],{"class":1378},[84,135895,135896,135898],{"class":86,"line":98},[84,135897,135706],{"class":129},[84,135899,16742],{"class":154},[84,135901,135902,135904,135906,135908],{"class":86,"line":106},[84,135903,135713],{"class":94},[84,135905,52586],{"class":154},[84,135907,135718],{"class":158},[84,135909,2471],{"class":154},[84,135911,135912,135914,135916,135918,135920,135922],{"class":86,"line":112},[84,135913,135725],{"class":94},[84,135915,52586],{"class":154},[84,135917,62872],{"class":94},[84,135919,155],{"class":154},[84,135921,135734],{"class":158},[84,135923,3897],{"class":154},[84,135925,135926,135928,135930,135932,135934,135936,135938,135940,135942,135944],{"class":86,"line":425},[84,135927,135725],{"class":94},[84,135929,52586],{"class":154},[84,135931,62872],{"class":94},[84,135933,155],{"class":154},[84,135935,135749],{"class":158},[84,135937,1154],{"class":154},[84,135939,135754],{"class":94},[84,135941,155],{"class":154},[84,135943,135759],{"class":158},[84,135945,39199],{"class":154},[84,135947,135948,135950,135952,135954,135956,135958,135960,135962],{"class":86,"line":2395},[84,135949,135766],{"class":94},[84,135951,155],{"class":154},[84,135953,135771],{"class":158},[84,135955,1154],{"class":154},[84,135957,135754],{"class":94},[84,135959,155],{"class":154},[84,135961,135780],{"class":158},[84,135963,39199],{"class":154},[84,135965,135966,135968,135970,135972,135974,135976,135978,135980],{"class":86,"line":2401},[84,135967,135766],{"class":94},[84,135969,155],{"class":154},[84,135971,135791],{"class":158},[84,135973,1154],{"class":154},[84,135975,135754],{"class":94},[84,135977,155],{"class":154},[84,135979,135800],{"class":158},[84,135981,39199],{"class":154},[84,135983,135984,135986,135988,135990,135992,135994,135996,135998],{"class":86,"line":2492},[84,135985,135766],{"class":94},[84,135987,155],{"class":154},[84,135989,135811],{"class":158},[84,135991,1154],{"class":154},[84,135993,135754],{"class":94},[84,135995,155],{"class":154},[84,135997,135820],{"class":158},[84,135999,3897],{"class":154},[84,136001,136002],{"class":86,"line":2498},[84,136003,2746],{"class":154},[84,136005,136006,136008],{"class":86,"line":2510},[84,136007,135432],{"class":90},[84,136009,16742],{"class":154},[84,136011,136012,136014,136016,136018],{"class":86,"line":2793},[84,136013,135713],{"class":94},[84,136015,52586],{"class":154},[84,136017,135718],{"class":158},[84,136019,2471],{"class":154},[84,136021,136022,136024,136026,136028],{"class":86,"line":2798},[84,136023,135847],{"class":94},[84,136025,52586],{"class":154},[84,136027,64987],{"class":94},[84,136029,2471],{"class":154},[84,136031,136032],{"class":86,"line":2804},[84,136033,2746],{"class":154},[2643,136035],{"style":127531,"src":136036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136038,136039],{},"更加细节展示：",[26,136041,136042],{},[29,136043,136044],{},"html 标签内添加小图标",[2643,136046],{"style":127531,"src":136047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136049,136050],{"start":98},[29,136051,136052],{},"给标签定义字体",[60,136054,136055],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,136056,136057,136061,136075,136079],{"__ignoreMap":66},[84,136058,136059],{"class":86,"line":87},[84,136060,131786],{"class":1378},[84,136062,136063,136065,136067,136069,136071,136073],{"class":86,"line":98},[84,136064,2218],{"class":154},[84,136066,52760],{"class":52449},[84,136068,54635],{"class":90},[84,136070,867],{"class":154},[84,136072,131799],{"class":158},[84,136074,52456],{"class":154},[84,136076,136077],{"class":86,"line":106},[84,136078,131806],{"class":154},[84,136080,136081,136083,136085],{"class":86,"line":112},[84,136082,52934],{"class":154},[84,136084,52760],{"class":52449},[84,136086,52456],{"class":154},[19,136088,136089],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2643,136091],{"style":127531,"src":136092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[198,136094,136096],{"id":136095},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136098,136099],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136101,136102,136103,136106],{},"把压缩包里面的 ",[1464,136104,136105],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136108,136109],{},"打开网站，点下方：",[2643,136111],{"style":127531,"src":136112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2643,136114],{"style":127531,"src":136115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2643,136117],{"style":127531,"src":136118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136120,136121],{},"点yes重新加载",[19,136123,136124],{},"然后重复之前的操作就可以实现了",[19,136126,136127],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[198,136129,136131],{"id":136130},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2643,136133],{"style":127531,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1222,136136,136137],{},"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":66,"searchDepth":98,"depth":98,"links":136139},[136140,136146,136151],{"id":134743,"depth":98,"text":134744,"children":136141},[136142,136143,136144,136145],{"id":134755,"depth":106,"text":134756},{"id":134784,"depth":106,"text":134785},{"id":134812,"depth":106,"text":134813},{"id":134870,"depth":106,"text":134871},{"id":135342,"depth":98,"text":135343,"children":136147},[136148,136149,136150],{"id":135346,"depth":106,"text":135347},{"id":135391,"depth":106,"text":135392},{"id":135407,"depth":106,"text":135408},{"id":135507,"depth":98,"text":135508,"children":136152},[136153,136154,136155,136156,136157,136158],{"id":135511,"depth":106,"text":135512},{"id":135545,"depth":106,"text":135546},{"id":135568,"depth":106,"text":135569},{"id":135615,"depth":106,"text":135616},{"id":136095,"depth":106,"text":136096},{"id":136130,"depth":106,"text":136131},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134735,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136165,"title":136166,"body":136167,"description":1249,"extension":1250,"meta":137394,"navigation":1252,"path":137395,"seo":137396,"stem":137397,"__hash__":137398},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136168,"toc":137375},[136169,136172,136176,136179,136193,136261,136291,136294,136298,136302,136404,136451,136455,136458,136461,136495,136498,136501,136504,136507,136510,136513,136516,136518,136521,136524,136527,136530,136533,136536,136539,136567,136570,136574,136577,136584,136587,136590,136616,136619,136623,136626,136629,136636,136640,136643,136645,136677,136680,136683,136695,136701,136704,136707,136710,136712,136716,136719,136722,136725,136770,136774,136776,136779,136786,136828,136831,136835,136840,136854,136858,136861,136864,136867,136870,136873,136907,136910,136913,136967,136970,136973,136976,136979,137031,137034,137037,137086,137090,137092,137095,137098,137101,137104,137107,137165,137168,137174,137177,137180,137212,137215,137219,137223,137226,137258,137262,137265,137309,137313,137316,137319,137322,137325,137328,137331,137334,137336,137339,137341,137344,137347,137350,137353,137358,137361,137363,137366,137369,137372],[10,136170,136166],{"id":136171},"_13-界面样式与布局技巧",[14,136173,136175],{"id":136174},"_131-css三角","13.1 css三角",[19,136177,136178],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2315,136180,136181,136184,136187,136190],{},[29,136182,136183],{},"用css 边框可以模拟三角效果",[29,136185,136186],{},"宽度高度为0",[29,136188,136189],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136191,136192],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[60,136194,136196],{"className":127675,"code":136195,"language":127677,"meta":66,"style":66},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[39,136197,136198,136203,136210,136220,136230,136246,136257],{"__ignoreMap":66},[84,136199,136200],{"class":86,"line":87},[84,136201,136202],{"class":1378},"\u002F* CSS 实现三角形 *\u002F\n",[84,136204,136205,136208],{"class":86,"line":98},[84,136206,136207],{"class":90},".triangle",[84,136209,16742],{"class":154},[84,136211,136212,136214,136216,136218],{"class":86,"line":106},[84,136213,71714],{"class":94},[84,136215,52586],{"class":154},[84,136217,1504],{"class":94},[84,136219,2471],{"class":154},[84,136221,136222,136224,136226,136228],{"class":86,"line":112},[84,136223,71934],{"class":94},[84,136225,52586],{"class":154},[84,136227,1504],{"class":94},[84,136229,2471],{"class":154},[84,136231,136232,136234,136236,136238,136240,136242,136244],{"class":86,"line":425},[84,136233,72042],{"class":94},[84,136235,52586],{"class":154},[84,136237,1756],{"class":94},[84,136239,52641],{"class":129},[84,136241,52670],{"class":94},[84,136243,65137],{"class":94},[84,136245,2471],{"class":154},[84,136247,136248,136251,136253,136255],{"class":86,"line":2395},[84,136249,136250],{"class":94},"  border-bottom-color",[84,136252,52586],{"class":154},[84,136254,63515],{"class":94},[84,136256,2471],{"class":154},[84,136258,136259],{"class":86,"line":2401},[84,136260,2746],{"class":154},[60,136262,136263],{"className":127675,"code":131832,"language":127677,"meta":66,"style":66},[39,136264,136265,136271,136287],{"__ignoreMap":66},[84,136266,136267,136269],{"class":86,"line":87},[84,136268,52760],{"class":52449},[84,136270,16742],{"class":154},[84,136272,136273,136275,136277,136279,136281,136283,136285],{"class":86,"line":98},[84,136274,72042],{"class":94},[84,136276,52586],{"class":154},[84,136278,1529],{"class":94},[84,136280,52641],{"class":129},[84,136282,52670],{"class":94},[84,136284,131067],{"class":94},[84,136286,2471],{"class":154},[84,136288,136289],{"class":86,"line":106},[84,136290,2746],{"class":154},[2643,136292],{"style":127531,"src":136293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136295,136297],{"id":136296},"_132-css用户界面样式","13.2 css用户界面样式",[198,136299,136301],{"id":136300},"_1321-鼠标样式","13.2.1 鼠标样式",[60,136303,136305],{"className":127675,"code":136304,"language":127677,"meta":66,"style":66},"\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",[39,136306,136307,136312,136331,136349,136368,136385],{"__ignoreMap":66},[84,136308,136309],{"class":86,"line":87},[84,136310,136311],{"class":1378},"\u002F* 鼠标样式 *\u002F\n",[84,136313,136314,136316,136318,136321,136323,136325,136328],{"class":86,"line":98},[84,136315,52760],{"class":52449},[84,136317,80953],{"class":154},[84,136319,136320],{"class":94},"cursor",[84,136322,52586],{"class":154},[84,136324,63176],{"class":94},[84,136326,136327],{"class":154},"; }   ",[84,136329,136330],{"class":1378},"\u002F* 手型 *\u002F\n",[84,136332,136333,136335,136337,136339,136341,136344,136346],{"class":86,"line":106},[84,136334,52760],{"class":52449},[84,136336,80953],{"class":154},[84,136338,136320],{"class":94},[84,136340,52586],{"class":154},[84,136342,136343],{"class":94},"default",[84,136345,136327],{"class":154},[84,136347,136348],{"class":1378},"\u002F* 默认 *\u002F\n",[84,136350,136351,136353,136355,136357,136359,136362,136365],{"class":86,"line":112},[84,136352,52760],{"class":52449},[84,136354,80953],{"class":154},[84,136356,136320],{"class":94},[84,136358,52586],{"class":154},[84,136360,136361],{"class":94},"move",[84,136363,136364],{"class":154},"; }      ",[84,136366,136367],{"class":1378},"\u002F* 移动 *\u002F\n",[84,136369,136370,136372,136374,136376,136378,136380,136382],{"class":86,"line":425},[84,136371,52760],{"class":52449},[84,136373,80953],{"class":154},[84,136375,136320],{"class":94},[84,136377,52586],{"class":154},[84,136379,65],{"class":94},[84,136381,136364],{"class":154},[84,136383,136384],{"class":1378},"\u002F* 文本 *\u002F\n",[84,136386,136387,136389,136391,136393,136395,136398,136401],{"class":86,"line":2395},[84,136388,52760],{"class":52449},[84,136390,80953],{"class":154},[84,136392,136320],{"class":94},[84,136394,52586],{"class":154},[84,136396,136397],{"class":94},"not-allowed",[84,136399,136400],{"class":154},"; } ",[84,136402,136403],{"class":1378},"\u002F* 禁止 *\u002F\n",[458,136405,136406,136414],{},[461,136407,136408],{},[464,136409,136410,136412],{},[467,136411,128139],{"align":24906},[467,136413,28647],{"align":24906},[474,136415,136416,136423,136430,136437,136444],{},[464,136417,136418,136420],{},[479,136419,136343],{"align":24906},[479,136421,136422],{"align":24906},"小白 默认",[464,136424,136425,136427],{},[479,136426,63176],{"align":24906},[479,136428,136429],{"align":24906},"小手",[464,136431,136432,136434],{},[479,136433,136361],{"align":24906},[479,136435,136436],{"align":24906},"移动",[464,136438,136439,136441],{},[479,136440,65],{"align":24906},[479,136442,136443],{"align":24906},"文本",[464,136445,136446,136448],{},[479,136447,136397],{"align":24906},[479,136449,136450],{"align":24906},"禁止",[198,136452,136454],{"id":136453},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136456,136457],{},"去除表单轮廓线",[19,136459,136460],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[60,136462,136463],{"className":127675,"code":131039,"language":127677,"meta":66,"style":66},[39,136464,136465,136469,136475,136491],{"__ignoreMap":66},[84,136466,136467],{"class":86,"line":87},[84,136468,131046],{"class":1378},[84,136470,136471,136473],{"class":86,"line":98},[84,136472,52760],{"class":52449},[84,136474,16742],{"class":154},[84,136476,136477,136479,136481,136483,136485,136487,136489],{"class":86,"line":106},[84,136478,72042],{"class":94},[84,136480,52586],{"class":154},[84,136482,1529],{"class":94},[84,136484,52641],{"class":129},[84,136486,52670],{"class":94},[84,136488,131067],{"class":94},[84,136490,2471],{"class":154},[84,136492,136493],{"class":86,"line":112},[84,136494,2746],{"class":154},[19,136496,136497],{},"文本域：",[2643,136499],{"style":127531,"src":136500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136502,136503],{},"此时会有一个空白区域",[2643,136505],{"style":127531,"src":136506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136508,136509],{},"写在同一行就不会出现这个问题",[2643,136511],{"style":127531,"src":136512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136514,136515],{},"文本域是行内块元素，一定记住！！！",[19,136517,99379],{},[2643,136519],{"style":127531,"src":136520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136522,136523],{},"文本域尽量放在一行",[19,136525,136526],{},"知识回顾：cols是列，rols是行",[2643,136528],{"style":127531,"src":136529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136531,136532],{},"它可以进行拖动，显然这是我们不愿意看到的",[2643,136534],{"style":127531,"src":136535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136537,136538],{},"使用resize进行解决",[60,136540,136542],{"className":127675,"code":136541,"language":127677,"meta":66,"style":66},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[39,136543,136544,136550,136563],{"__ignoreMap":66},[84,136545,136546,136548],{"class":86,"line":87},[84,136547,54970],{"class":52449},[84,136549,16742],{"class":154},[84,136551,136552,136554,136556,136558,136560],{"class":86,"line":98},[84,136553,71944],{"class":94},[84,136555,52586],{"class":154},[84,136557,55884],{"class":94},[84,136559,131538],{"class":154},[84,136561,136562],{"class":1378},"\u002F* 取消表单轮廓线 *\u002F\n",[84,136564,136565],{"class":86,"line":106},[84,136566,2746],{"class":154},[19,136568,136569],{},"此时就无法通过右下方实现拖动了",[198,136571,136573],{"id":136572},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136575,136576],{},"实现一个盒子中的文字和图片对齐",[19,136578,136579,136580,136583],{},"用于设置一个元素的 ",[1464,136581,136582],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136585,136586],{},"图片和文字默认是基线对齐",[2643,136588],{"style":127531,"src":136589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[60,136591,136592],{"className":127675,"code":136541,"language":127677,"meta":66,"style":66},[39,136593,136594,136600,136612],{"__ignoreMap":66},[84,136595,136596,136598],{"class":86,"line":87},[84,136597,54970],{"class":52449},[84,136599,16742],{"class":154},[84,136601,136602,136604,136606,136608,136610],{"class":86,"line":98},[84,136603,71944],{"class":94},[84,136605,52586],{"class":154},[84,136607,55884],{"class":94},[84,136609,131538],{"class":154},[84,136611,136562],{"class":1378},[84,136613,136614],{"class":86,"line":106},[84,136615,2746],{"class":154},[2643,136617],{"style":127531,"src":136618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23168,136620,136622],{"id":136621},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136624,136625],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2643,136627],{"style":127531,"src":136628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136630,136631,136632,136635],{},"此时可以给图片、表单这些行内块元素的 ",[1464,136633,136634],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23168,136637,136639],{"id":136638},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136641,136642],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136644,15803],{},[60,136646,136648],{"className":127675,"code":136647,"language":127677,"meta":66,"style":66},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[39,136649,136650,136655,136661,136673],{"__ignoreMap":66},[84,136651,136652],{"class":86,"line":87},[84,136653,136654],{"class":1378},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[84,136656,136657,136659],{"class":86,"line":98},[84,136658,2643],{"class":52449},[84,136660,16742],{"class":154},[84,136662,136663,136666,136668,136671],{"class":86,"line":106},[84,136664,136665],{"class":94},"  vertical-align",[84,136667,52586],{"class":154},[84,136669,136670],{"class":94},"middle",[84,136672,2471],{"class":154},[84,136674,136675],{"class":86,"line":112},[84,136676,2746],{"class":154},[2643,136678],{"style":127531,"src":136679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136681,136682],{},"主要解决方法有两种：",[26,136684,136685],{},[29,136686,136687,136690,136691,136694],{},[1464,136688,136689],{},"给图片"," 添加 ",[1464,136692,136693],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136696,136697,136698],{},"2.把图片转换为块级元素 ",[1464,136699,136700],{},"display: block",[19,136702,136703],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136705,136706],{},"img {",[19,136708,136709],{},"vertical-align:middle;",[19,136711,2254],{},[198,136713,136715],{"id":136714},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136717,136718],{},"效果：",[2643,136720],{"style":127531,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136723,136724],{},"单行文本溢出显示省略号--必须满足三个条件：",[60,136726,136728],{"className":127675,"code":136727,"language":127677,"meta":66,"style":66},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[39,136729,136730,136735,136741,136751,136756,136766],{"__ignoreMap":66},[84,136731,136732],{"class":86,"line":87},[84,136733,136734],{"class":1378},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[84,136736,136737,136739],{"class":86,"line":98},[84,136738,2643],{"class":52449},[84,136740,16742],{"class":154},[84,136742,136743,136745,136747,136749],{"class":86,"line":106},[84,136744,136665],{"class":94},[84,136746,52586],{"class":154},[84,136748,136670],{"class":94},[84,136750,2471],{"class":154},[84,136752,136753],{"class":86,"line":112},[84,136754,136755],{"class":1378},"  \u002F* 或 *\u002F\n",[84,136757,136758,136760,136762,136764],{"class":86,"line":425},[84,136759,129291],{"class":94},[84,136761,52586],{"class":154},[84,136763,62015],{"class":94},[84,136765,2471],{"class":154},[84,136767,136768],{"class":86,"line":2395},[84,136769,2746],{"class":154},[198,136771,136773],{"id":136772},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136775,136718],{},[2643,136777],{"style":127531,"src":136778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136780,136781,136782,136785],{},"多行文本溢出显示省略号， ",[1464,136783,136784],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[60,136787,136788],{"className":127675,"code":136727,"language":127677,"meta":66,"style":66},[39,136789,136790,136794,136800,136810,136814,136824],{"__ignoreMap":66},[84,136791,136792],{"class":86,"line":87},[84,136793,136734],{"class":1378},[84,136795,136796,136798],{"class":86,"line":98},[84,136797,2643],{"class":52449},[84,136799,16742],{"class":154},[84,136801,136802,136804,136806,136808],{"class":86,"line":106},[84,136803,136665],{"class":94},[84,136805,52586],{"class":154},[84,136807,136670],{"class":94},[84,136809,2471],{"class":154},[84,136811,136812],{"class":86,"line":112},[84,136813,136755],{"class":1378},[84,136815,136816,136818,136820,136822],{"class":86,"line":425},[84,136817,129291],{"class":94},[84,136819,52586],{"class":154},[84,136821,62015],{"class":94},[84,136823,2471],{"class":154},[84,136825,136826],{"class":86,"line":2395},[84,136827,2746],{"class":154},[19,136829,136830],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136832,136834],{"id":136833},"_133-常见布局技巧","13.3 常见布局技巧",[19,136836,136837],{},[1464,136838,136839],{},"巧妙利用一个技术更快更好的布局：",[26,136841,136842,136845,136848,136851],{},[29,136843,136844],{},"margin负值的运用",[29,136846,136847],{},"文字围绕浮动元素",[29,136849,136850],{},"行内块的巧妙运用",[29,136852,136853],{},"CSS三角强化",[198,136855,136857],{"id":136856},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136859,136860],{},"应用场景：",[2643,136862],{"style":127531,"src":136863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2643,136865],{"style":127531,"src":136866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136868,136869],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136871,136872],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[60,136874,136875],{"className":127675,"code":131039,"language":127677,"meta":66,"style":66},[39,136876,136877,136881,136887,136903],{"__ignoreMap":66},[84,136878,136879],{"class":86,"line":87},[84,136880,131046],{"class":1378},[84,136882,136883,136885],{"class":86,"line":98},[84,136884,52760],{"class":52449},[84,136886,16742],{"class":154},[84,136888,136889,136891,136893,136895,136897,136899,136901],{"class":86,"line":106},[84,136890,72042],{"class":94},[84,136892,52586],{"class":154},[84,136894,1529],{"class":94},[84,136896,52641],{"class":129},[84,136898,52670],{"class":94},[84,136900,131067],{"class":94},[84,136902,2471],{"class":154},[84,136904,136905],{"class":86,"line":112},[84,136906,2746],{"class":154},[2643,136908],{"style":127531,"src":136909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136911,136912],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[60,136914,136916],{"className":127675,"code":136915,"language":127677,"meta":66,"style":66},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[39,136917,136918,136923,136929,136939,136951,136963],{"__ignoreMap":66},[84,136919,136920],{"class":86,"line":87},[84,136921,136922],{"class":1378},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[84,136924,136925,136927],{"class":86,"line":98},[84,136926,131523],{"class":90},[84,136928,16742],{"class":154},[84,136930,136931,136933,136935,136937],{"class":86,"line":106},[84,136932,133481],{"class":94},[84,136934,52586],{"class":154},[84,136936,55911],{"class":94},[84,136938,2471],{"class":154},[84,136940,136941,136943,136945,136947,136949],{"class":86,"line":112},[84,136942,133495],{"class":94},[84,136944,52586],{"class":154},[84,136946,1756],{"class":94},[84,136948,52641],{"class":129},[84,136950,2471],{"class":154},[84,136952,136953,136955,136957,136959,136961],{"class":86,"line":425},[84,136954,133512],{"class":94},[84,136956,52586],{"class":154},[84,136958,2008],{"class":94},[84,136960,52641],{"class":129},[84,136962,2471],{"class":154},[84,136964,136965],{"class":86,"line":2395},[84,136966,2746],{"class":154},[19,136968,136969],{},"加上上述代码会发现：",[2643,136971],{"style":127531,"src":136972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136974,136975],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136977,136978],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[60,136980,136981],{"className":127675,"code":136915,"language":127677,"meta":66,"style":66},[39,136982,136983,136987,136993,137003,137015,137027],{"__ignoreMap":66},[84,136984,136985],{"class":86,"line":87},[84,136986,136922],{"class":1378},[84,136988,136989,136991],{"class":86,"line":98},[84,136990,131523],{"class":90},[84,136992,16742],{"class":154},[84,136994,136995,136997,136999,137001],{"class":86,"line":106},[84,136996,133481],{"class":94},[84,136998,52586],{"class":154},[84,137000,55911],{"class":94},[84,137002,2471],{"class":154},[84,137004,137005,137007,137009,137011,137013],{"class":86,"line":112},[84,137006,133495],{"class":94},[84,137008,52586],{"class":154},[84,137010,1756],{"class":94},[84,137012,52641],{"class":129},[84,137014,2471],{"class":154},[84,137016,137017,137019,137021,137023,137025],{"class":86,"line":425},[84,137018,133512],{"class":94},[84,137020,52586],{"class":154},[84,137022,2008],{"class":94},[84,137024,52641],{"class":129},[84,137026,2471],{"class":154},[84,137028,137029],{"class":86,"line":2395},[84,137030,2746],{"class":154},[19,137032,137033],{},"解决方式2：",[19,137035,137036],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[60,137038,137040],{"className":127675,"code":137039,"language":127677,"meta":66,"style":66},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[39,137041,137042,137048,137058,137070,137082],{"__ignoreMap":66},[84,137043,137044,137046],{"class":86,"line":87},[84,137045,52760],{"class":52449},[84,137047,16742],{"class":154},[84,137049,137050,137052,137054,137056],{"class":86,"line":98},[84,137051,133481],{"class":94},[84,137053,52586],{"class":154},[84,137055,55911],{"class":94},[84,137057,2471],{"class":154},[84,137059,137060,137062,137064,137066,137068],{"class":86,"line":106},[84,137061,133495],{"class":94},[84,137063,52586],{"class":154},[84,137065,1756],{"class":94},[84,137067,52641],{"class":129},[84,137069,2471],{"class":154},[84,137071,137072,137074,137076,137078,137080],{"class":86,"line":112},[84,137073,133512],{"class":94},[84,137075,52586],{"class":154},[84,137077,2008],{"class":94},[84,137079,52641],{"class":129},[84,137081,2471],{"class":154},[84,137083,137084],{"class":86,"line":425},[84,137085,2746],{"class":154},[198,137087,137089],{"id":137088},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137091,136860],{},[2643,137093],{"style":127531,"src":137094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137096,137097],{},"实现结构图：",[2643,137099],{"style":127531,"src":137100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137102,137103],{},"巧妙运用浮动元素不会压住文字的特性",[19,137105,137106],{},"代码显示：",[60,137108,137110],{"className":127675,"code":137109,"language":127677,"meta":66,"style":66},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[39,137111,137112,137118,137128,137132,137137,137141,137147,137161],{"__ignoreMap":66},[84,137113,137114,137116],{"class":86,"line":87},[84,137115,131523],{"class":90},[84,137117,16742],{"class":154},[84,137119,137120,137122,137124,137126],{"class":86,"line":98},[84,137121,132155],{"class":94},[84,137123,52586],{"class":154},[84,137125,24906],{"class":94},[84,137127,2471],{"class":154},[84,137129,137130],{"class":86,"line":106},[84,137131,2746],{"class":154},[84,137133,137134],{"class":86,"line":112},[84,137135,137136],{"class":154},"```Css\n",[84,137138,137139],{"class":86,"line":425},[84,137140,131518],{"class":1378},[84,137142,137143,137145],{"class":86,"line":2395},[84,137144,131523],{"class":90},[84,137146,16742],{"class":154},[84,137148,137149,137151,137153,137155,137157,137159],{"class":86,"line":2401},[84,137150,71616],{"class":94},[84,137152,52586],{"class":154},[84,137154,1504],{"class":94},[84,137156,52705],{"class":94},[84,137158,131538],{"class":154},[84,137160,131541],{"class":1378},[84,137162,137163],{"class":86,"line":2492},[84,137164,2746],{"class":154},[19,137166,137167],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[60,137169,137172],{"className":137170,"code":137171,"language":65},[63],"\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",[39,137173,137171],{"__ignoreMap":66},[2643,137175],{"style":127531,"src":137176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137178,137179],{},"最终展示结果：",[60,137181,137182],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,137183,137184,137188,137194,137208],{"__ignoreMap":66},[84,137185,137186],{"class":86,"line":87},[84,137187,131518],{"class":1378},[84,137189,137190,137192],{"class":86,"line":98},[84,137191,131523],{"class":90},[84,137193,16742],{"class":154},[84,137195,137196,137198,137200,137202,137204,137206],{"class":86,"line":106},[84,137197,71616],{"class":94},[84,137199,52586],{"class":154},[84,137201,1504],{"class":94},[84,137203,52705],{"class":94},[84,137205,131538],{"class":154},[84,137207,131541],{"class":1378},[84,137209,137210],{"class":86,"line":112},[84,137211,2746],{"class":154},[2643,137213],{"style":127531,"src":137214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137216,137218],{"id":137217},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[198,137220,137222],{"id":137221},"_1341-原理","13.4.1 原理",[2643,137224],{"style":127531,"src":137225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[60,137227,137228],{"className":127675,"code":131511,"language":127677,"meta":66,"style":66},[39,137229,137230,137234,137240,137254],{"__ignoreMap":66},[84,137231,137232],{"class":86,"line":87},[84,137233,131518],{"class":1378},[84,137235,137236,137238],{"class":86,"line":98},[84,137237,131523],{"class":90},[84,137239,16742],{"class":154},[84,137241,137242,137244,137246,137248,137250,137252],{"class":86,"line":106},[84,137243,71616],{"class":94},[84,137245,52586],{"class":154},[84,137247,1504],{"class":94},[84,137249,52705],{"class":94},[84,137251,131538],{"class":154},[84,137253,131541],{"class":1378},[84,137255,137256],{"class":86,"line":112},[84,137257,2746],{"class":154},[198,137259,137261],{"id":137260},"_1342-实例","13.4.2 实例",[2643,137263],{"style":127531,"src":137264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[60,137266,137267],{"className":127675,"code":132141,"language":127677,"meta":66,"style":66},[39,137268,137269,137275,137285,137289,137295,137305],{"__ignoreMap":66},[84,137270,137271,137273],{"class":86,"line":87},[84,137272,132148],{"class":90},[84,137274,16742],{"class":154},[84,137276,137277,137279,137281,137283],{"class":86,"line":98},[84,137278,132155],{"class":94},[84,137280,52586],{"class":154},[84,137282,24906],{"class":94},[84,137284,2471],{"class":154},[84,137286,137287],{"class":86,"line":106},[84,137288,2746],{"class":154},[84,137290,137291,137293],{"class":86,"line":112},[84,137292,132170],{"class":90},[84,137294,16742],{"class":154},[84,137296,137297,137299,137301,137303],{"class":86,"line":425},[84,137298,132155],{"class":94},[84,137300,52586],{"class":154},[84,137302,73668],{"class":94},[84,137304,2471],{"class":154},[84,137306,137307],{"class":86,"line":2395},[84,137308,2746],{"class":154},[14,137310,137312],{"id":137311},"_135-css的初始化","13.5 css的初始化",[19,137314,137315],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137317,137318],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137320,137321],{},"每个网页都必须首先进行 CSS初始化。",[19,137323,137324],{},"这里我们以 京东CSS初始化代码为例。",[19,137326,137327],{},"在网页右键查看网页源代码",[19,137329,137330],{},"找到css的link引入语句",[19,137332,137333],{},"然后ctrl+f 输入body",[19,137335,78372],{},[2643,137337],{"style":127531,"src":137338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137340,78395],{},[2643,137342],{"style":127531,"src":137343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137345,137346],{},"③打开了网页上传压缩的代码",[2643,137348],{"style":127531,"src":137349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137351,137352],{},"④从body前可以查看这个网页的初始化代码",[19,137354,137355],{},[1464,137356,137357],{},"Unicode编码字体：",[19,137359,137360],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137362,84353],{},[19,137364,137365],{},"黑体 \\9ED1\\4F53",[19,137367,137368],{},"宋体 \\5B8B\\4F53",[19,137370,137371],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1222,137373,137374],{},"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":66,"searchDepth":98,"depth":98,"links":137376},[137377,137378,137385,137389,137393],{"id":136174,"depth":98,"text":136175},{"id":136296,"depth":98,"text":136297,"children":137379},[137380,137381,137382,137383,137384],{"id":136300,"depth":106,"text":136301},{"id":136453,"depth":106,"text":136454},{"id":136572,"depth":106,"text":136573},{"id":136714,"depth":106,"text":136715},{"id":136772,"depth":106,"text":136773},{"id":136833,"depth":98,"text":136834,"children":137386},[137387,137388],{"id":136856,"depth":106,"text":136857},{"id":137088,"depth":106,"text":137089},{"id":137217,"depth":98,"text":137218,"children":137390},[137391,137392],{"id":137221,"depth":106,"text":137222},{"id":137260,"depth":106,"text":137261},{"id":137311,"depth":98,"text":137312},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136166,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137400,"title":137401,"body":137402,"description":1249,"extension":1250,"meta":139088,"navigation":1252,"path":139089,"seo":139090,"stem":139091,"__hash__":139092},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137403,"toc":139077},[137404,137407,137411,137415,137418,137425,137428,137431,137469,137472,137474,137488,137492,137501,137505,137510,137513,137516,137519,137554,137559,137562,137592,137595,137600,137603,137606,137636,137639,137693,137696,137700,137705,137717,137720,137724,137754,137757,137762,137765,137795,137798,137802,137819,137823,137827,137830,137863,137866,137870,137873,137876,137879,137882,137885,137996,137999,138002,138005,138107,138110,138114,138118,138122,138125,138165,138168,138170,138186,138190,138193,138198,138279,138282,138285,138411,138416,138419,138427,138430,138435,138520,138523,138527,138530,138533,138537,138557,138562,138646,138649,138654,138657,138660,138738,138741,138744,138747,138750,138753,138758,138761,138764,138836,138839,138844,138847,138944,138947,138953,138956,138959,138962,138965,138968,138971,138974,138977,138981,138986,138989,139022,139027,139030,139071,139074],[10,137405,137401],{"id":137406},"_14-html5与css3新特性",[14,137408,137410],{"id":137409},"_141-html5的新特性","14.1 HTML5的新特性",[198,137412,137414],{"id":137413},"_1411-基本标签","14.1.1 基本标签",[19,137416,137417],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137419,137420,137421,137424],{},"这些新特性都有兼容性问题，基本是 ",[1464,137422,137423],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137426,137427],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137429,137430],{},"现在使用的是新特性：",[2315,137432,137433,137439,137445,137451,137457,137463],{},[29,137434,137435,137438],{},[39,137436,137437],{},"\u003Cheader>"," 头部标签",[29,137440,137441,137444],{},[39,137442,137443],{},"\u003Cnav>"," 导航标签",[29,137446,137447,137450],{},[39,137448,137449],{},"\u003Carticle>"," 内容标签",[29,137452,137453,137456],{},[39,137454,137455],{},"\u003Csection>"," 定义文档某个区域",[29,137458,137459,137462],{},[39,137460,137461],{},"\u003Caside>"," 侧边栏标签",[29,137464,137465,137468],{},[39,137466,137467],{},"\u003Cfooter>"," 尾部标签",[2643,137470],{"style":127531,"src":137471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137473,1352],{},[2315,137475,137476,137479,137482,137485],{},[29,137477,137478],{},"这种语义化标准主要是针对搜索引擎的",[29,137480,137481],{},"这些标签页面中可以经常使用",[29,137483,137484],{},"在IE9中，需要把这些元素转换为块级元素",[29,137486,137487],{},"移动端更喜欢使用这些标签",[198,137489,137491],{"id":137490},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137493,137494,137495,137497,137498,137500],{},"音频 ",[1464,137496,29332],{}," 和视频 ",[1464,137499,29341],{}," 两个标签",[23168,137502,137504],{"id":137503},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,137506,137507],{},[29,137508,137509],{},"支持格式：",[2643,137511],{"style":127531,"src":137512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137514,137515],{},"尽量使用MP4，兼容性好",[19,137517,137518],{},"用MP4就可以",[60,137520,137522],{"className":128422,"code":137521,"language":128424,"meta":66,"style":66},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[39,137523,137524],{"__ignoreMap":66},[84,137525,137526,137528,137530,137532,137534,137537,137539,137542,137545,137548,137550,137552],{"class":86,"line":87},[84,137527,2218],{"class":154},[84,137529,29341],{"class":52449},[84,137531,56386],{"class":90},[84,137533,867],{"class":154},[84,137535,137536],{"class":158},"\"movie.mp4\"",[84,137538,93569],{"class":90},[84,137540,137541],{"class":90}," autoplay",[84,137543,137544],{"class":90}," muted",[84,137546,137547],{"class":90}," loop",[84,137549,56461],{"class":154},[84,137551,29341],{"class":52449},[84,137553,52456],{"class":154},[26,137555,137556],{"start":98},[29,137557,137558],{},"兼容写法",[19,137560,137561],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[60,137563,137564],{"className":128422,"code":137521,"language":128424,"meta":66,"style":66},[39,137565,137566],{"__ignoreMap":66},[84,137567,137568,137570,137572,137574,137576,137578,137580,137582,137584,137586,137588,137590],{"class":86,"line":87},[84,137569,2218],{"class":154},[84,137571,29341],{"class":52449},[84,137573,56386],{"class":90},[84,137575,867],{"class":154},[84,137577,137536],{"class":158},[84,137579,93569],{"class":90},[84,137581,137541],{"class":90},[84,137583,137544],{"class":90},[84,137585,137547],{"class":90},[84,137587,56461],{"class":154},[84,137589,29341],{"class":52449},[84,137591,52456],{"class":154},[19,137593,137594],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137596,137597],{"start":106},[29,137598,137599],{},"video常用属性",[2643,137601],{"style":127531,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137604,137605],{},"poster属性后面是跟的等待加载图片的地址",[60,137607,137608],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,137609,137610],{"__ignoreMap":66},[84,137611,137612,137614,137616,137618,137620,137622,137624,137626,137628,137630,137632,137634],{"class":86,"line":87},[84,137613,2218],{"class":154},[84,137615,2643],{"class":52449},[84,137617,56386],{"class":90},[84,137619,867],{"class":154},[84,137621,135192],{"class":158},[84,137623,56394],{"class":90},[84,137625,867],{"class":154},[84,137627,135199],{"class":158},[84,137629,135202],{"class":90},[84,137631,867],{"class":154},[84,137633,135207],{"class":158},[84,137635,52456],{"class":154},[19,137637,137638],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[60,137640,137642],{"className":127675,"code":137641,"language":127677,"meta":66,"style":66},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[39,137643,137644,137649,137655,137679,137684,137689],{"__ignoreMap":66},[84,137645,137646],{"class":86,"line":87},[84,137647,137648],{"class":1378},"\u002F* 2D 位移 *\u002F\n",[84,137650,137651,137653],{"class":86,"line":98},[84,137652,52760],{"class":52449},[84,137654,16742],{"class":154},[84,137656,137657,137660,137662,137665,137667,137669,137671,137673,137675,137677],{"class":86,"line":106},[84,137658,137659],{"class":94},"  transform",[84,137661,52586],{"class":154},[84,137663,137664],{"class":94},"translate",[84,137666,155],{"class":154},[84,137668,821],{"class":94},[84,137670,52641],{"class":129},[84,137672,846],{"class":154},[84,137674,1964],{"class":94},[84,137676,52641],{"class":129},[84,137678,3897],{"class":154},[84,137680,137681],{"class":86,"line":112},[84,137682,137683],{"class":1378},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[84,137685,137686],{"class":86,"line":425},[84,137687,137688],{"class":1378},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[84,137690,137691],{"class":86,"line":2395},[84,137692,2746],{"class":154},[19,137694,137695],{},"muted:自动静音属性",[23168,137697,137699],{"id":137698},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,137701,137702],{},[29,137703,137704],{},"基本使用",[19,137706,137707,137708,137713,137714],{},"当前 ",[1464,137709,137710],{},[39,137711,137712],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1464,137715,137716],{},"mp3格式",[2643,137718],{"style":127531,"src":137719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,137721,137722],{"start":98},[29,137723,137558],{},[60,137725,137726],{"className":128422,"code":137521,"language":128424,"meta":66,"style":66},[39,137727,137728],{"__ignoreMap":66},[84,137729,137730,137732,137734,137736,137738,137740,137742,137744,137746,137748,137750,137752],{"class":86,"line":87},[84,137731,2218],{"class":154},[84,137733,29341],{"class":52449},[84,137735,56386],{"class":90},[84,137737,867],{"class":154},[84,137739,137536],{"class":158},[84,137741,93569],{"class":90},[84,137743,137541],{"class":90},[84,137745,137544],{"class":90},[84,137747,137547],{"class":90},[84,137749,56461],{"class":154},[84,137751,29341],{"class":52449},[84,137753,52456],{"class":154},[19,137755,137756],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137758,137759],{"start":106},[29,137760,137761],{},"常用属性",[2643,137763],{"style":127531,"src":137764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[60,137766,137767],{"className":128422,"code":137521,"language":128424,"meta":66,"style":66},[39,137768,137769],{"__ignoreMap":66},[84,137770,137771,137773,137775,137777,137779,137781,137783,137785,137787,137789,137791,137793],{"class":86,"line":87},[84,137772,2218],{"class":154},[84,137774,29341],{"class":52449},[84,137776,56386],{"class":90},[84,137778,867],{"class":154},[84,137780,137536],{"class":158},[84,137782,93569],{"class":90},[84,137784,137541],{"class":90},[84,137786,137544],{"class":90},[84,137788,137547],{"class":90},[84,137790,56461],{"class":154},[84,137792,29341],{"class":52449},[84,137794,52456],{"class":154},[19,137796,137797],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23168,137799,137801],{"id":137800},"_14123-总结","14.1.2.3 总结",[2315,137803,137804,137807,137810,137813,137816],{},[29,137805,137806],{},"音频标签和视频标签使用方式基本一致",[29,137808,137809],{},"浏览器支持情况不同",[29,137811,137812],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,137814,137815],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,137817,137818],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[198,137820,137822],{"id":137821},"_1413-表单元素","14.1.3 表单元素",[23168,137824,137826],{"id":137825},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2643,137828],{"style":127531,"src":137829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[60,137831,137833],{"className":128422,"code":137832,"language":128424,"meta":66,"style":66},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[39,137834,137835],{"__ignoreMap":66},[84,137836,137837,137839,137841,137843,137845,137847,137849,137851,137854,137856,137858,137861],{"class":86,"line":87},[84,137838,2218],{"class":154},[84,137840,54970],{"class":52449},[84,137842,54973],{"class":90},[84,137844,867],{"class":154},[84,137846,63845],{"class":158},[84,137848,16090],{"class":90},[84,137850,867],{"class":154},[84,137852,137853],{"class":158},"\"username\"",[84,137855,62166],{"class":90},[84,137857,867],{"class":154},[84,137859,137860],{"class":158},"\"请输入用户名\"",[84,137862,52456],{"class":154},[2643,137864],{"style":127531,"src":137865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23168,137867,137869],{"id":137868},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2643,137871],{"style":127531,"src":137872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137874,137875],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137877,137878],{},"快捷操作：",[2643,137880],{"style":127531,"src":137881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137883,137884],{},"例子1：",[60,137886,137888],{"className":128422,"code":137887,"language":128424,"meta":66,"style":66},"\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",[39,137889,137890,137913,137940,137969,137988],{"__ignoreMap":66},[84,137891,137892,137894,137896,137898,137900,137903,137906,137908,137911],{"class":86,"line":87},[84,137893,2218],{"class":154},[84,137895,67771],{"class":52449},[84,137897,67774],{"class":90},[84,137899,867],{"class":154},[84,137901,137902],{"class":158},"\"\u002Fsubmit\"",[84,137904,137905],{"class":90}," method",[84,137907,867],{"class":154},[84,137909,137910],{"class":158},"\"post\"",[84,137912,52456],{"class":154},[84,137914,137915,137917,137919,137921,137923,137925,137927,137929,137931,137933,137935,137938],{"class":86,"line":98},[84,137916,53293],{"class":154},[84,137918,54970],{"class":52449},[84,137920,54973],{"class":90},[84,137922,867],{"class":154},[84,137924,63845],{"class":158},[84,137926,16090],{"class":90},[84,137928,867],{"class":154},[84,137930,137853],{"class":158},[84,137932,62166],{"class":90},[84,137934,867],{"class":154},[84,137936,137937],{"class":158},"\"用户名\"",[84,137939,52456],{"class":154},[84,137941,137942,137944,137946,137948,137950,137953,137955,137957,137960,137962,137964,137967],{"class":86,"line":106},[84,137943,53293],{"class":154},[84,137945,54970],{"class":52449},[84,137947,54973],{"class":90},[84,137949,867],{"class":154},[84,137951,137952],{"class":158},"\"password\"",[84,137954,16090],{"class":90},[84,137956,867],{"class":154},[84,137958,137959],{"class":158},"\"pwd\"",[84,137961,62166],{"class":90},[84,137963,867],{"class":154},[84,137965,137966],{"class":158},"\"密码\"",[84,137968,52456],{"class":154},[84,137970,137971,137973,137975,137977,137979,137981,137984,137986],{"class":86,"line":112},[84,137972,53293],{"class":154},[84,137974,55036],{"class":52449},[84,137976,54973],{"class":90},[84,137978,867],{"class":154},[84,137980,67794],{"class":158},[84,137982,137983],{"class":154},">提交\u003C\u002F",[84,137985,55036],{"class":52449},[84,137987,52456],{"class":154},[84,137989,137990,137992,137994],{"class":86,"line":425},[84,137991,52934],{"class":154},[84,137993,67771],{"class":52449},[84,137995,52456],{"class":154},[2643,137997],{"style":127531,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138000,138001],{},"value是表单域的内容",[19,138003,138004],{},"例子2：",[60,138006,138007],{"className":128422,"code":137887,"language":128424,"meta":66,"style":66},[39,138008,138009,138029,138055,138081,138099],{"__ignoreMap":66},[84,138010,138011,138013,138015,138017,138019,138021,138023,138025,138027],{"class":86,"line":87},[84,138012,2218],{"class":154},[84,138014,67771],{"class":52449},[84,138016,67774],{"class":90},[84,138018,867],{"class":154},[84,138020,137902],{"class":158},[84,138022,137905],{"class":90},[84,138024,867],{"class":154},[84,138026,137910],{"class":158},[84,138028,52456],{"class":154},[84,138030,138031,138033,138035,138037,138039,138041,138043,138045,138047,138049,138051,138053],{"class":86,"line":98},[84,138032,53293],{"class":154},[84,138034,54970],{"class":52449},[84,138036,54973],{"class":90},[84,138038,867],{"class":154},[84,138040,63845],{"class":158},[84,138042,16090],{"class":90},[84,138044,867],{"class":154},[84,138046,137853],{"class":158},[84,138048,62166],{"class":90},[84,138050,867],{"class":154},[84,138052,137937],{"class":158},[84,138054,52456],{"class":154},[84,138056,138057,138059,138061,138063,138065,138067,138069,138071,138073,138075,138077,138079],{"class":86,"line":106},[84,138058,53293],{"class":154},[84,138060,54970],{"class":52449},[84,138062,54973],{"class":90},[84,138064,867],{"class":154},[84,138066,137952],{"class":158},[84,138068,16090],{"class":90},[84,138070,867],{"class":154},[84,138072,137959],{"class":158},[84,138074,62166],{"class":90},[84,138076,867],{"class":154},[84,138078,137966],{"class":158},[84,138080,52456],{"class":154},[84,138082,138083,138085,138087,138089,138091,138093,138095,138097],{"class":86,"line":112},[84,138084,53293],{"class":154},[84,138086,55036],{"class":52449},[84,138088,54973],{"class":90},[84,138090,867],{"class":154},[84,138092,67794],{"class":158},[84,138094,137983],{"class":154},[84,138096,55036],{"class":52449},[84,138098,52456],{"class":154},[84,138100,138101,138103,138105],{"class":86,"line":425},[84,138102,52934],{"class":154},[84,138104,67771],{"class":52449},[84,138106,52456],{"class":154},[2643,138108],{"style":127531,"src":138109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138111,138113],{"id":138112},"_142-css新特性","14.2 CSS新特性",[198,138115,138117],{"id":138116},"_1421-新增选择器","14.2.1 新增选择器",[23168,138119,138121],{"id":138120},"_14211-属性选择器","14.2.1.1 属性选择器",[2643,138123],{"style":127531,"src":138124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[60,138126,138128],{"className":127675,"code":138127,"language":127677,"meta":66,"style":66},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[39,138129,138130,138145,138161],{"__ignoreMap":66},[84,138131,138132,138134,138136,138138,138140,138142],{"class":86,"line":87},[84,138133,54970],{"class":52449},[84,138135,2198],{"class":154},[84,138137,104244],{"class":90},[84,138139,867],{"class":129},[84,138141,63845],{"class":158},[84,138143,138144],{"class":154},"] {\n",[84,138146,138147,138149,138151,138153,138155,138157,138159],{"class":86,"line":98},[84,138148,72042],{"class":94},[84,138150,52586],{"class":154},[84,138152,1529],{"class":94},[84,138154,52641],{"class":129},[84,138156,52670],{"class":94},[84,138158,131255],{"class":94},[84,138160,2471],{"class":154},[84,138162,138163],{"class":86,"line":106},[84,138164,2746],{"class":154},[2643,138166],{"style":127531,"src":138167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138169,1352],{},[2315,138171,138172,138175,138178,138181],{},[29,138173,138174],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138176,138177],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138179,138180],{},"属性选择器也可以选择出来自定义的属性",[29,138182,138183,138185],{},[1464,138184,10197],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23168,138187,138189],{"id":138188},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2643,138191],{"style":127531,"src":138192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138194,138195],{},[29,138196,138197],{},"fist-child",[60,138199,138201],{"className":127675,"code":138200,"language":127677,"meta":66,"style":66},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[39,138202,138203,138208,138223,138243,138261],{"__ignoreMap":66},[84,138204,138205],{"class":86,"line":87},[84,138206,138207],{"class":1378},"\u002F* 属性选择器 *\u002F\n",[84,138209,138210,138212,138214,138216,138218,138220],{"class":86,"line":98},[84,138211,54970],{"class":52449},[84,138213,2198],{"class":154},[84,138215,104244],{"class":90},[84,138217,867],{"class":129},[84,138219,63845],{"class":158},[84,138221,138222],{"class":154},"] { }\n",[84,138224,138225,138227,138229,138231,138234,138237,138240],{"class":86,"line":106},[84,138226,54970],{"class":52449},[84,138228,2198],{"class":154},[84,138230,15864],{"class":90},[84,138232,138233],{"class":129},"^=",[84,138235,138236],{"class":158},"\"icon\"",[84,138238,138239],{"class":154},"] { }  ",[84,138241,138242],{"class":1378},"\u002F* 以 icon 开头 *\u002F\n",[84,138244,138245,138247,138249,138251,138254,138256,138258],{"class":86,"line":112},[84,138246,54970],{"class":52449},[84,138248,2198],{"class":154},[84,138250,15864],{"class":90},[84,138252,138253],{"class":129},"$=",[84,138255,138236],{"class":158},[84,138257,138239],{"class":154},[84,138259,138260],{"class":1378},"\u002F* 以 icon 结尾 *\u002F\n",[84,138262,138263,138265,138267,138269,138272,138274,138276],{"class":86,"line":425},[84,138264,54970],{"class":52449},[84,138266,2198],{"class":154},[84,138268,15864],{"class":90},[84,138270,138271],{"class":129},"*=",[84,138273,138236],{"class":158},[84,138275,138239],{"class":154},[84,138277,138278],{"class":1378},"\u002F* 包含 icon *\u002F\n",[19,138280,138281],{},"ul的第一个儿子文本为红色",[19,138283,138284],{},"一定要在冒号前加空格，不然就是选中所有的了",[60,138286,138288],{"className":127675,"code":138287,"language":127677,"meta":66,"style":66},".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",[39,138289,138290,138296,138306,138310,138314,138319,138332,138345,138361,138378,138395],{"__ignoreMap":66},[84,138291,138292,138294],{"class":86,"line":87},[84,138293,127966],{"class":90},[84,138295,16742],{"class":154},[84,138297,138298,138300,138302,138304],{"class":86,"line":98},[84,138299,72051],{"class":94},[84,138301,52586],{"class":154},[84,138303,58568],{"class":94},[84,138305,2471],{"class":154},[84,138307,138308],{"class":86,"line":106},[84,138309,2746],{"class":154},[84,138311,138312],{"class":86,"line":112},[84,138313,137136],{"class":154},[84,138315,138316],{"class":86,"line":425},[84,138317,138318],{"class":1378},"\u002F* 结构伪类选择器 *\u002F\n",[84,138320,138321,138323,138326,138329],{"class":86,"line":2395},[84,138322,29],{"class":52449},[84,138324,138325],{"class":90},":first-child",[84,138327,138328],{"class":154}," { }           ",[84,138330,138331],{"class":1378},"\u002F* 第一个 *\u002F\n",[84,138333,138334,138336,138339,138342],{"class":86,"line":2401},[84,138335,29],{"class":52449},[84,138337,138338],{"class":90},":last-child",[84,138340,138341],{"class":154}," { }            ",[84,138343,138344],{"class":1378},"\u002F* 最后一个 *\u002F\n",[84,138346,138347,138349,138351,138353,138355,138358],{"class":86,"line":2492},[84,138348,29],{"class":52449},[84,138350,130589],{"class":90},[84,138352,155],{"class":154},[84,138354,1397],{"class":94},[84,138356,138357],{"class":154},") { }          ",[84,138359,138360],{"class":1378},"\u002F* 第2个 *\u002F\n",[84,138362,138363,138365,138367,138369,138372,138375],{"class":86,"line":2498},[84,138364,29],{"class":52449},[84,138366,130589],{"class":90},[84,138368,155],{"class":154},[84,138370,138371],{"class":94},"2n",[84,138373,138374],{"class":154},") { }         ",[84,138376,138377],{"class":1378},"\u002F* 偶数 *\u002F\n",[84,138379,138380,138382,138384,138386,138389,138392],{"class":86,"line":2510},[84,138381,29],{"class":52449},[84,138383,130589],{"class":90},[84,138385,155],{"class":154},[84,138387,138388],{"class":94},"2n+1",[84,138390,138391],{"class":154},") { }       ",[84,138393,138394],{"class":1378},"\u002F* 奇数 *\u002F\n",[84,138396,138397,138399,138401,138403,138406,138408],{"class":86,"line":2793},[84,138398,29],{"class":52449},[84,138400,130589],{"class":90},[84,138402,155],{"class":154},[84,138404,138405],{"class":94},"-n+3",[84,138407,138391],{"class":154},[84,138409,138410],{"class":1378},"\u002F* 前3个 *\u002F\n",[52760,138412,138415],{"className":138413},[138414],"example","\n  示例内容\n",[19,138417,138418],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2315,138420,138421],{},[29,138422,138423,138426],{},[39,138424,138425],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138428,138429],{},"也就是说它选择的是熊大",[26,138431,138432],{"start":2395},[29,138433,138434],{},"权重",[60,138436,138438],{"className":127675,"code":138437,"language":127677,"meta":66,"style":66},"\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",[39,138439,138440,138444,138454,138464,138478,138492,138506],{"__ignoreMap":66},[84,138441,138442],{"class":86,"line":87},[84,138443,138318],{"class":1378},[84,138445,138446,138448,138450,138452],{"class":86,"line":98},[84,138447,29],{"class":52449},[84,138449,138325],{"class":90},[84,138451,138328],{"class":154},[84,138453,138331],{"class":1378},[84,138455,138456,138458,138460,138462],{"class":86,"line":106},[84,138457,29],{"class":52449},[84,138459,138338],{"class":90},[84,138461,138341],{"class":154},[84,138463,138344],{"class":1378},[84,138465,138466,138468,138470,138472,138474,138476],{"class":86,"line":112},[84,138467,29],{"class":52449},[84,138469,130589],{"class":90},[84,138471,155],{"class":154},[84,138473,1397],{"class":94},[84,138475,138357],{"class":154},[84,138477,138360],{"class":1378},[84,138479,138480,138482,138484,138486,138488,138490],{"class":86,"line":425},[84,138481,29],{"class":52449},[84,138483,130589],{"class":90},[84,138485,155],{"class":154},[84,138487,138371],{"class":94},[84,138489,138374],{"class":154},[84,138491,138377],{"class":1378},[84,138493,138494,138496,138498,138500,138502,138504],{"class":86,"line":2395},[84,138495,29],{"class":52449},[84,138497,130589],{"class":90},[84,138499,155],{"class":154},[84,138501,138388],{"class":94},[84,138503,138391],{"class":154},[84,138505,138394],{"class":1378},[84,138507,138508,138510,138512,138514,138516,138518],{"class":86,"line":2401},[84,138509,29],{"class":52449},[84,138511,130589],{"class":90},[84,138513,155],{"class":154},[84,138515,138405],{"class":94},[84,138517,138391],{"class":154},[84,138519,138410],{"class":1378},[19,138521,138522],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23168,138524,138526],{"id":138525},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138528,138529],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2643,138531],{"style":127531,"src":138532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,138534,138535],{},[29,138536,1352],{},[2315,138538,138539,138542,138545,138548,138551,138554],{},[29,138540,138541],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,138543,138544],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,138546,138547],{},"语法： element::before {}",[29,138549,138550],{},"before 和 after 必须有 content 属性",[29,138552,138553],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,138555,138556],{},"伪元素选择器和标签选择器一样，权重为 1",[26,138558,138559],{"start":98},[29,138560,138561],{},"实例",[60,138563,138564],{"className":127675,"code":138437,"language":127677,"meta":66,"style":66},[39,138565,138566,138570,138580,138590,138604,138618,138632],{"__ignoreMap":66},[84,138567,138568],{"class":86,"line":87},[84,138569,138318],{"class":1378},[84,138571,138572,138574,138576,138578],{"class":86,"line":98},[84,138573,29],{"class":52449},[84,138575,138325],{"class":90},[84,138577,138328],{"class":154},[84,138579,138331],{"class":1378},[84,138581,138582,138584,138586,138588],{"class":86,"line":106},[84,138583,29],{"class":52449},[84,138585,138338],{"class":90},[84,138587,138341],{"class":154},[84,138589,138344],{"class":1378},[84,138591,138592,138594,138596,138598,138600,138602],{"class":86,"line":112},[84,138593,29],{"class":52449},[84,138595,130589],{"class":90},[84,138597,155],{"class":154},[84,138599,1397],{"class":94},[84,138601,138357],{"class":154},[84,138603,138360],{"class":1378},[84,138605,138606,138608,138610,138612,138614,138616],{"class":86,"line":425},[84,138607,29],{"class":52449},[84,138609,130589],{"class":90},[84,138611,155],{"class":154},[84,138613,138371],{"class":94},[84,138615,138374],{"class":154},[84,138617,138377],{"class":1378},[84,138619,138620,138622,138624,138626,138628,138630],{"class":86,"line":2395},[84,138621,29],{"class":52449},[84,138623,130589],{"class":90},[84,138625,155],{"class":154},[84,138627,138388],{"class":94},[84,138629,138391],{"class":154},[84,138631,138394],{"class":1378},[84,138633,138634,138636,138638,138640,138642,138644],{"class":86,"line":2401},[84,138635,29],{"class":52449},[84,138637,130589],{"class":90},[84,138639,155],{"class":154},[84,138641,138405],{"class":94},[84,138643,138391],{"class":154},[84,138645,138410],{"class":1378},[2643,138647],{"style":127531,"src":138648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,138650,138651],{"start":106},[29,138652,138653],{},"使用场景1",[2643,138655],{"style":127531,"src":138656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138658,138659],{},"不需要再加盒子来整红色那部分了",[60,138661,138663],{"className":127675,"code":138662,"language":127677,"meta":66,"style":66},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[39,138664,138665,138670,138679,138690,138700,138704,138713,138724,138734],{"__ignoreMap":66},[84,138666,138667],{"class":86,"line":87},[84,138668,138669],{"class":1378},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[84,138671,138672,138674,138677],{"class":86,"line":98},[84,138673,52760],{"class":52449},[84,138675,138676],{"class":90},"::before",[84,138678,16742],{"class":154},[84,138680,138681,138684,138686,138688],{"class":86,"line":106},[84,138682,138683],{"class":94},"  content",[84,138685,52586],{"class":154},[84,138687,8824],{"class":158},[84,138689,2471],{"class":154},[84,138691,138692,138694,138696,138698],{"class":86,"line":112},[84,138693,129291],{"class":94},[84,138695,52586],{"class":154},[84,138697,62015],{"class":94},[84,138699,2471],{"class":154},[84,138701,138702],{"class":86,"line":425},[84,138703,2746],{"class":154},[84,138705,138706,138708,138711],{"class":86,"line":2395},[84,138707,52760],{"class":52449},[84,138709,138710],{"class":90},"::after",[84,138712,16742],{"class":154},[84,138714,138715,138717,138719,138722],{"class":86,"line":2401},[84,138716,138683],{"class":94},[84,138718,52586],{"class":154},[84,138720,138721],{"class":158},"\"→\"",[84,138723,2471],{"class":154},[84,138725,138726,138728,138730,138732],{"class":86,"line":2492},[84,138727,72051],{"class":94},[84,138729,52586],{"class":154},[84,138731,63216],{"class":94},[84,138733,2471],{"class":154},[84,138735,138736],{"class":86,"line":2498},[84,138737,2746],{"class":154},[2643,138739],{"style":127531,"src":138740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138742,138743],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2643,138745],{"style":127531,"src":138746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138748,138749],{},"但是在引用时需要先转义一下",[19,138751,138752],{},"content='\\e930'",[26,138754,138755],{"start":112},[29,138756,138757],{},"使用场景2",[19,138759,138760],{},"仿土豆效果",[19,138762,138763],{},"通过使用伪元素选择器可以减少body中盒子的数量",[60,138765,138766],{"className":127675,"code":138662,"language":127677,"meta":66,"style":66},[39,138767,138768,138772,138780,138790,138800,138804,138812,138822,138832],{"__ignoreMap":66},[84,138769,138770],{"class":86,"line":87},[84,138771,138669],{"class":1378},[84,138773,138774,138776,138778],{"class":86,"line":98},[84,138775,52760],{"class":52449},[84,138777,138676],{"class":90},[84,138779,16742],{"class":154},[84,138781,138782,138784,138786,138788],{"class":86,"line":106},[84,138783,138683],{"class":94},[84,138785,52586],{"class":154},[84,138787,8824],{"class":158},[84,138789,2471],{"class":154},[84,138791,138792,138794,138796,138798],{"class":86,"line":112},[84,138793,129291],{"class":94},[84,138795,52586],{"class":154},[84,138797,62015],{"class":94},[84,138799,2471],{"class":154},[84,138801,138802],{"class":86,"line":425},[84,138803,2746],{"class":154},[84,138805,138806,138808,138810],{"class":86,"line":2395},[84,138807,52760],{"class":52449},[84,138809,138710],{"class":90},[84,138811,16742],{"class":154},[84,138813,138814,138816,138818,138820],{"class":86,"line":2401},[84,138815,138683],{"class":94},[84,138817,52586],{"class":154},[84,138819,138721],{"class":158},[84,138821,2471],{"class":154},[84,138823,138824,138826,138828,138830],{"class":86,"line":2492},[84,138825,72051],{"class":94},[84,138827,52586],{"class":154},[84,138829,63216],{"class":94},[84,138831,2471],{"class":154},[84,138833,138834],{"class":86,"line":2498},[84,138835,2746],{"class":154},[2643,138837],{"style":127531,"src":138838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,138840,138841],{"start":425},[29,138842,138843],{},"使用场景3",[19,138845,138846],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[60,138848,138850],{"className":127675,"code":138849,"language":127677,"meta":66,"style":66},".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",[39,138851,138852,138858,138868,138872,138876,138880,138888,138898,138908,138912,138920,138930,138940],{"__ignoreMap":66},[84,138853,138854,138856],{"class":86,"line":87},[84,138855,131523],{"class":90},[84,138857,16742],{"class":154},[84,138859,138860,138862,138864,138866],{"class":86,"line":98},[84,138861,132155],{"class":94},[84,138863,52586],{"class":154},[84,138865,24906],{"class":94},[84,138867,2471],{"class":154},[84,138869,138870],{"class":86,"line":106},[84,138871,2746],{"class":154},[84,138873,138874],{"class":86,"line":112},[84,138875,137136],{"class":154},[84,138877,138878],{"class":86,"line":425},[84,138879,138669],{"class":1378},[84,138881,138882,138884,138886],{"class":86,"line":2395},[84,138883,52760],{"class":52449},[84,138885,138676],{"class":90},[84,138887,16742],{"class":154},[84,138889,138890,138892,138894,138896],{"class":86,"line":2401},[84,138891,138683],{"class":94},[84,138893,52586],{"class":154},[84,138895,8824],{"class":158},[84,138897,2471],{"class":154},[84,138899,138900,138902,138904,138906],{"class":86,"line":2492},[84,138901,129291],{"class":94},[84,138903,52586],{"class":154},[84,138905,62015],{"class":94},[84,138907,2471],{"class":154},[84,138909,138910],{"class":86,"line":2498},[84,138911,2746],{"class":154},[84,138913,138914,138916,138918],{"class":86,"line":2510},[84,138915,52760],{"class":52449},[84,138917,138710],{"class":90},[84,138919,16742],{"class":154},[84,138921,138922,138924,138926,138928],{"class":86,"line":2793},[84,138923,138683],{"class":94},[84,138925,52586],{"class":154},[84,138927,138721],{"class":158},[84,138929,2471],{"class":154},[84,138931,138932,138934,138936,138938],{"class":86,"line":2798},[84,138933,72051],{"class":94},[84,138935,52586],{"class":154},[84,138937,63216],{"class":94},[84,138939,2471],{"class":154},[84,138941,138942],{"class":86,"line":2804},[84,138943,2746],{"class":154},[19,138945,138946],{},"div {\nmargin: 0 auto;\n}",[60,138948,138951],{"className":138949,"code":138950,"language":65},[63],"\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",[39,138952,138950],{"__ignoreMap":66},[19,138954,138955],{},"如果想让多个元素都发生变化",[19,138957,138958],{},"不能如下操作：",[19,138960,138961],{},"transition: width 2s ease 0.5s;",[19,138963,138964],{},"transition: height 2s ease 0.5s;不对！！！",[19,138966,138967],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138969,138970],{},"使用如下：加逗号隔开",[19,138972,138973],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138975,138976],{},"transition all 2s ease;",[198,138978,138980],{"id":138979},"_1426-过渡练习","14.2.6 过渡练习",[26,138982,138983],{},[29,138984,138985],{},"进度条",[2643,138987],{"style":127531,"src":138988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[60,138990,138992],{"className":127675,"code":138991,"language":127677,"meta":66,"style":66},"div {\n  transition: all 0.3s ease;\n}\n",[39,138993,138994,139000,139018],{"__ignoreMap":66},[84,138995,138996,138998],{"class":86,"line":87},[84,138997,52760],{"class":52449},[84,138999,16742],{"class":154},[84,139001,139002,139005,139007,139009,139012,139014,139016],{"class":86,"line":98},[84,139003,139004],{"class":94},"  transition",[84,139006,52586],{"class":154},[84,139008,29279],{"class":94},[84,139010,139011],{"class":94}," 0.3",[84,139013,2003],{"class":129},[84,139015,79826],{"class":94},[84,139017,2471],{"class":154},[84,139019,139020],{"class":86,"line":106},[84,139021,2746],{"class":154},[26,139023,139024],{"start":98},[29,139025,139026],{},"小米logo",[19,139028,139029],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[60,139031,139033],{"className":127675,"code":139032,"language":127677,"meta":66,"style":66},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[39,139034,139035,139040,139046,139062,139067],{"__ignoreMap":66},[84,139036,139037],{"class":86,"line":87},[84,139038,139039],{"class":1378},"\u002F* CSS3 过渡 *\u002F\n",[84,139041,139042,139044],{"class":86,"line":98},[84,139043,52760],{"class":52449},[84,139045,16742],{"class":154},[84,139047,139048,139050,139052,139054,139056,139058,139060],{"class":86,"line":106},[84,139049,139004],{"class":94},[84,139051,52586],{"class":154},[84,139053,29279],{"class":94},[84,139055,139011],{"class":94},[84,139057,2003],{"class":129},[84,139059,79826],{"class":94},[84,139061,2471],{"class":154},[84,139063,139064],{"class":86,"line":112},[84,139065,139066],{"class":1378},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[84,139068,139069],{"class":86,"line":425},[84,139070,2746],{"class":154},[19,139072,139073],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1222,139075,139076],{},"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":66,"searchDepth":98,"depth":98,"links":139078},[139079,139084],{"id":137409,"depth":98,"text":137410,"children":139080},[139081,139082,139083],{"id":137413,"depth":106,"text":137414},{"id":137490,"depth":106,"text":137491},{"id":137821,"depth":106,"text":137822},{"id":138112,"depth":98,"text":138113,"children":139085},[139086,139087],{"id":138116,"depth":106,"text":138117},{"id":138979,"depth":106,"text":138980},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137401,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139094,"title":139095,"body":139096,"description":1249,"extension":1250,"meta":140840,"navigation":1252,"path":140841,"seo":140842,"stem":140843,"__hash__":140844},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139097,"toc":140821},[139098,139101,139105,139108,139114,139120,139124,139126,139129,139132,139135,139138,139141,139144,139147,139151,139155,139158,139161,139164,139168,139171,139174,139179,139182,139185,139188,139192,139195,139204,139207,139210,139214,139217,139220,139225,139232,139246,139254,139261,139266,139269,139272,139275,139282,139286,139292,139298,139301,139304,139309,139315,139317,139325,139330,139333,139339,139341,139346,139351,139354,139356,139361,139364,139369,139374,139408,139412,139416,139419,139423,139426,139512,139515,139552,139555,139591,139595,139600,139613,139667,139669,139697,139699,139727,139733,139747,139749,139793,139795,139839,139842,139849,139860,139862,139889,139891,139917,139924,139940,139942,140036,140038,140132,140139,140142,140147,140153,140227,140230,140232,140268,140270,140306,140309,140316,140335,140338,140341,140343,140368,140370,140394,140397,140400,140430,140434,140437,140500,140502,140568,140570,140634,140637,140669,140671,140697,140699,140725,140728,140759,140761,140787,140789,140815,140818],[10,139099,139095],{"id":139100},"_15-品优购项目上篇-搭建与公共模块",[14,139102,139104],{"id":139103},"_151-项目规划","15.1 项目规划",[2643,139106],{"style":127531,"src":139107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139109,139110,139113],{},[1464,139111,139112],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139115,139116,139119],{},[1464,139117,139118],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139121,139123],{"id":139122},"_152-项目介绍","15.2 项目介绍",[19,139125,139112],{},[2643,139127],{"style":127531,"src":139128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139130,139131],{},"主页：",[2643,139133],{"style":127531,"src":139134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139136,139137],{},"列表页：",[2643,139139],{"style":127531,"src":139140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139142,139143],{},"注册页：",[2643,139145],{"style":127531,"src":139146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139148,139150],{"id":139149},"_153-项目搭建工作","15.3 项目搭建工作",[198,139152,139154],{"id":139153},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2643,139156],{"style":127531,"src":139157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139159,139160],{},"经常更换的图片要放到upload文件夹中",[19,139162,139163],{},"不经常换的放到images文件夹中",[198,139165,139167],{"id":139166},"_1532-创建文件如下","15.3.2 创建文件如下",[2643,139169],{"style":127531,"src":139170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2643,139172],{"style":127531,"src":139173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139175,139176],{},[1464,139177,139178],{},"初始化样式：",[19,139180,139181],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139183,139184],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139186,139187],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[198,139189,139191],{"id":139190},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139193,139194],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139196,139197,139198,139203],{},"这里最典型的应用就是 ",[1464,139199,139200],{},[39,139201,139202],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2643,139205],{"style":127531,"src":139206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139208,139209],{},"通过link方法来引入",[198,139211,139213],{"id":139212},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2643,139215],{"style":127531,"src":139216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139218,139219],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139221,139222],{},[29,139223,139224],{},"制作favicon图标",[19,139226,139227,139228,139231],{},"①把品优购图标切成 ",[39,139229,139230],{},"png"," 图片",[19,139233,139234,139235,139237,139238,139241,139242],{},"②把 ",[39,139236,139230],{}," 图片转换为 ",[39,139239,139240],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[208,139243,139244],{"href":139244,"rel":139245},"http:\u002F\u002Fwww.bitbug.net\u002F",[212],[26,139247,139248,139251],{"start":98},[29,139249,139250],{},"favicon图标放到网站根目录下",[29,139252,139253],{},"HTML页面引入favicon",[19,139255,139256,139257,139260],{},"在html 页面里面的 ",[39,139258,139259],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139262,139263],{},[39,139264,139265],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139267,139268],{},"复制这行代码或者在生成这个的网站进行复制",[2643,139270],{"style":127531,"src":139271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139273,139274],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139276,139277,139278],{},"例如:",[208,139279,139280],{"href":139280,"rel":139281},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[212],[198,139283,139285],{"id":139284},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139287,139288,139291],{},[1464,139289,139290],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139293,139294,139297],{},[1464,139295,139296],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139299,139300],{},"页面必须有三个标签用来符合 SEO 优化",[2643,139302],{"style":127531,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139305,139306],{},[29,139307,139308],{},"title网站标题",[19,139310,139311,139314],{},[1464,139312,139313],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139316,69936],{},[2315,139318,139319,139322],{},[29,139320,139321],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139323,139324],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139326,139327],{"start":98},[29,139328,139329],{},"description网站描述",[19,139331,139332],{},"简要说明我们网站主要是做什么的",[19,139334,139335,139338],{},[1464,139336,139337],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139340,69936],{},[19,139342,139343],{},[39,139344,139345],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139347,139348],{"start":106},[29,139349,139350],{},"keywords关键词",[19,139352,139353],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139355,69936],{},[19,139357,139358],{},[39,139359,139360],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139362,139363],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139365,139366],{},[1464,139367,139368],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139370,139371],{"start":112},[29,139372,139373],{},"代码总结",[60,139375,139376],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,139377,139378,139382,139396,139400],{"__ignoreMap":66},[84,139379,139380],{"class":86,"line":87},[84,139381,131786],{"class":1378},[84,139383,139384,139386,139388,139390,139392,139394],{"class":86,"line":98},[84,139385,2218],{"class":154},[84,139387,52760],{"class":52449},[84,139389,54635],{"class":90},[84,139391,867],{"class":154},[84,139393,131799],{"class":158},[84,139395,52456],{"class":154},[84,139397,139398],{"class":86,"line":106},[84,139399,131806],{"class":154},[84,139401,139402,139404,139406],{"class":86,"line":112},[84,139403,52934],{"class":154},[84,139405,52760],{"class":52449},[84,139407,52456],{"class":154},[14,139409,139411],{"id":139410},"_154-项目公共部分制作","15.4 项目公共部分制作",[198,139413,139415],{"id":139414},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2643,139417],{"style":127531,"src":139418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[198,139420,139422],{"id":139421},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139424,139425],{},"布局思路：",[2315,139427,139428,139431,139434,139456,139489],{},[29,139429,139430],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139432,139433],{},"里面包含版心的盒子",[29,139435,139436,139437],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2315,139438,139439,139447,139453],{},[29,139440,139441,139442,22670,139444,139446],{},"1 号盒子 里面包含一个",[39,139443,2315],{},[39,139445,2315],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139448,139449,139450,139452],{},"里面的内容是水平排列，所以需要给",[39,139451,29],{},"设置浮动",[29,139454,139455],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139457,139458,139459],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2315,139460,139461,139475,139480],{},[29,139462,139463,139464,22670,139466,139468,139469,139471,139472,139474],{},"2 号盒子 里面包含一个",[39,139465,2315],{},[39,139467,2315],{},"包裹",[39,139470,29],{},"，中间的",[39,139473,2229],{},"可以用样式去设置，也可以用字符 |",[29,139476,139477,139478,139452],{},"里面内容水平排列，给",[39,139479,29],{},[29,139481,139482,139483,139485,139486,139488],{},"找到里面所有偶数的 ",[39,139484,29],{}," 设置样式（偶数的 ",[39,139487,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,139490,139491,139492],{},"需要用到字体图标",[2315,139493,139494,139500,139503,139506,139509],{},[29,139495,139496,139497],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[39,139498,139499],{},"arrow-icon",[29,139501,139502],{},"先要引入字体图片的资源",[29,139504,139505],{},"在样式里面利用 font-face 来进行声明",[29,139507,139508],{},"在伪元素的 content属性设置 图标的编码",[29,139510,139511],{},"给伪元素设置font-family属性",[19,139513,139514],{},"结构实例代码：",[60,139516,139518],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},"div::before {\n  content: \"\";\n  display: block;\n}\n",[39,139519,139520,139528,139538,139548],{"__ignoreMap":66},[84,139521,139522,139524,139526],{"class":86,"line":87},[84,139523,52760],{"class":52449},[84,139525,138676],{"class":90},[84,139527,16742],{"class":154},[84,139529,139530,139532,139534,139536],{"class":86,"line":98},[84,139531,138683],{"class":94},[84,139533,52586],{"class":154},[84,139535,8824],{"class":158},[84,139537,2471],{"class":154},[84,139539,139540,139542,139544,139546],{"class":86,"line":106},[84,139541,129291],{"class":94},[84,139543,52586],{"class":154},[84,139545,62015],{"class":94},[84,139547,2471],{"class":154},[84,139549,139550],{"class":86,"line":112},[84,139551,2746],{"class":154},[19,139553,139554],{},"样式实例代码：",[60,139556,139557],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,139558,139559,139567,139577,139587],{"__ignoreMap":66},[84,139560,139561,139563,139565],{"class":86,"line":87},[84,139562,52760],{"class":52449},[84,139564,138676],{"class":90},[84,139566,16742],{"class":154},[84,139568,139569,139571,139573,139575],{"class":86,"line":98},[84,139570,138683],{"class":94},[84,139572,52586],{"class":154},[84,139574,8824],{"class":158},[84,139576,2471],{"class":154},[84,139578,139579,139581,139583,139585],{"class":86,"line":106},[84,139580,129291],{"class":94},[84,139582,52586],{"class":154},[84,139584,62015],{"class":94},[84,139586,2471],{"class":154},[84,139588,139589],{"class":86,"line":112},[84,139590,2746],{"class":154},[198,139592,139594],{"id":139593},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2315,139596,139597],{},[29,139598,139599],{},"header 盒子必须要有高度",[19,139601,139602,139603,139605,139606],{},"1 号盒子是 ",[39,139604,132687],{}," 标志定位，在正常开发过程中， ",[1464,139607,139608,139609,139612],{},"logo的布局其实是有讲究的，需要进行 ",[39,139610,139611],{},"logoSEO","的优化 （★★★）",[2315,139614,139615,139623,139631,139658],{},[29,139616,139617,139619,139620,139622],{},[39,139618,132687],{}," 里面首先放一个 ",[39,139621,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,139624,139625,139627,139628,139630],{},[39,139626,10],{}," 里面再放一个链接，可以返回首页的，把 ",[39,139629,132687],{}," 的背景图片给链接即可",[29,139632,139633,139634],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2315,139635,139636,139651],{},[29,139637,139638,139639,139642,139643,139646,139647,139650],{},"方法1：",[39,139640,139641],{},"text-indent"," 移到盒子外面（",[39,139644,139645],{},"text-indent: -9999px",") ，然后 ",[39,139648,139649],{},"overflow:hidden"," ，淘宝的做法",[29,139652,139653,139654,139657],{},"方法2：直接给 ",[39,139655,139656],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,139659,139660,139661,139663,139664,139666],{},"最后给链接一个 ",[39,139662,52556],{}," 属性，这样鼠标放到 ",[39,139665,132687],{}," 上就可以看到提示文字了",[19,139668,139514],{},[60,139670,139671],{"className":128422,"code":132908,"language":128424,"meta":66,"style":66},[39,139672,139673],{"__ignoreMap":66},[84,139674,139675,139677,139679,139681,139683,139685,139687,139689,139691,139693,139695],{"class":86,"line":87},[84,139676,2218],{"class":154},[84,139678,208],{"class":52449},[84,139680,62203],{"class":90},[84,139682,867],{"class":154},[84,139684,132923],{"class":158},[84,139686,132926],{"class":90},[84,139688,867],{"class":154},[84,139690,132931],{"class":158},[84,139692,132934],{"class":154},[84,139694,208],{"class":52449},[84,139696,52456],{"class":154},[19,139698,139554],{},[60,139700,139701],{"className":128422,"code":132908,"language":128424,"meta":66,"style":66},[39,139702,139703],{"__ignoreMap":66},[84,139704,139705,139707,139709,139711,139713,139715,139717,139719,139721,139723,139725],{"class":86,"line":87},[84,139706,2218],{"class":154},[84,139708,208],{"class":52449},[84,139710,62203],{"class":90},[84,139712,867],{"class":154},[84,139714,132923],{"class":158},[84,139716,132926],{"class":90},[84,139718,867],{"class":154},[84,139720,132931],{"class":158},[84,139722,132934],{"class":154},[84,139724,208],{"class":52449},[84,139726,52456],{"class":154},[19,139728,139729,139730,139732],{},"2 号盒子是 ",[39,139731,132700],{}," 搜索模块定位",[2315,139734,139735,139738,139741,139744],{},[29,139736,139737],{},"search盒子利用定位的方式放在对应的位置",[29,139739,139740],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,139742,139743],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,139745,139746],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139748,139514],{},[60,139750,139751],{"className":127675,"code":132995,"language":127677,"meta":66,"style":66},[39,139752,139753,139775,139779,139789],{"__ignoreMap":66},[84,139754,139755,139757,139759,139761,139763,139765,139767,139769,139771,139773],{"class":86,"line":87},[84,139756,52760],{"class":52449},[84,139758,846],{"class":154},[84,139760,19],{"class":52449},[84,139762,846],{"class":154},[84,139764,10],{"class":52449},[84,139766,846],{"class":154},[84,139768,2315],{"class":52449},[84,139770,846],{"class":154},[84,139772,29],{"class":52449},[84,139774,16742],{"class":154},[84,139776,139777],{"class":86,"line":98},[84,139778,133024],{"class":1378},[84,139780,139781,139783,139785,139787],{"class":86,"line":106},[84,139782,129291],{"class":94},[84,139784,52586],{"class":154},[84,139786,62015],{"class":94},[84,139788,2471],{"class":154},[84,139790,139791],{"class":86,"line":112},[84,139792,2746],{"class":154},[19,139794,139554],{},[60,139796,139797],{"className":127675,"code":132995,"language":127677,"meta":66,"style":66},[39,139798,139799,139821,139825,139835],{"__ignoreMap":66},[84,139800,139801,139803,139805,139807,139809,139811,139813,139815,139817,139819],{"class":86,"line":87},[84,139802,52760],{"class":52449},[84,139804,846],{"class":154},[84,139806,19],{"class":52449},[84,139808,846],{"class":154},[84,139810,10],{"class":52449},[84,139812,846],{"class":154},[84,139814,2315],{"class":52449},[84,139816,846],{"class":154},[84,139818,29],{"class":52449},[84,139820,16742],{"class":154},[84,139822,139823],{"class":86,"line":98},[84,139824,133024],{"class":1378},[84,139826,139827,139829,139831,139833],{"class":86,"line":106},[84,139828,129291],{"class":94},[84,139830,52586],{"class":154},[84,139832,62015],{"class":94},[84,139834,2471],{"class":154},[84,139836,139837],{"class":86,"line":112},[84,139838,2746],{"class":154},[19,139840,139841],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139843,139844,139845,139848],{},"3 号盒子是 ",[39,139846,139847],{},"hotwords"," 热词模块定位",[2315,139850,139851,139854,139857],{},[29,139852,139853],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,139855,139856],{},"给里面所有的a标签设置 左右10px的外边距",[29,139858,139859],{},"给第一个a标签设置文字变红色（#c81623）",[19,139861,139514],{},[60,139863,139865],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},"div {\n  margin: 0 auto;\n}\n",[39,139866,139867,139873,139885],{"__ignoreMap":66},[84,139868,139869,139871],{"class":86,"line":87},[84,139870,52760],{"class":52449},[84,139872,16742],{"class":154},[84,139874,139875,139877,139879,139881,139883],{"class":86,"line":98},[84,139876,71616],{"class":94},[84,139878,52586],{"class":154},[84,139880,1504],{"class":94},[84,139882,52705],{"class":94},[84,139884,2471],{"class":154},[84,139886,139887],{"class":86,"line":106},[84,139888,2746],{"class":154},[19,139890,139554],{},[60,139892,139893],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,139894,139895,139901,139913],{"__ignoreMap":66},[84,139896,139897,139899],{"class":86,"line":87},[84,139898,52760],{"class":52449},[84,139900,16742],{"class":154},[84,139902,139903,139905,139907,139909,139911],{"class":86,"line":98},[84,139904,71616],{"class":94},[84,139906,52586],{"class":154},[84,139908,1504],{"class":94},[84,139910,52705],{"class":94},[84,139912,2471],{"class":154},[84,139914,139915],{"class":86,"line":106},[84,139916,2746],{"class":154},[19,139918,139919,139920,139923],{},"4 号盒子是 ",[39,139921,139922],{},"shopcar"," 购物车模块",[2315,139925,139926,139931,139934,139937],{},[29,139927,124460,139928,139930],{},[39,139929,139922],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,139932,139933],{},"count 统计部分用绝对定位做",[29,139935,139936],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,139938,139939],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139941,139514],{},[60,139943,139944],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,139945,139946,139950,139964,139968,139982,139986,140000,140004,140018,140022],{"__ignoreMap":66},[84,139947,139948],{"class":86,"line":87},[84,139949,133114],{"class":1378},[84,139951,139952,139954,139956,139958,139960,139962],{"class":86,"line":98},[84,139953,133119],{"class":90},[84,139955,80953],{"class":154},[84,139957,130035],{"class":94},[84,139959,52586],{"class":154},[84,139961,133128],{"class":94},[84,139963,130605],{"class":154},[84,139965,139966],{"class":86,"line":106},[84,139967,133135],{"class":1378},[84,139969,139970,139972,139974,139976,139978,139980],{"class":86,"line":112},[84,139971,133140],{"class":90},[84,139973,80953],{"class":154},[84,139975,130035],{"class":94},[84,139977,52586],{"class":154},[84,139979,55911],{"class":94},[84,139981,130605],{"class":154},[84,139983,139984],{"class":86,"line":425},[84,139985,133155],{"class":1378},[84,139987,139988,139990,139992,139994,139996,139998],{"class":86,"line":2395},[84,139989,133160],{"class":90},[84,139991,80953],{"class":154},[84,139993,130035],{"class":94},[84,139995,52586],{"class":154},[84,139997,55978],{"class":94},[84,139999,130605],{"class":154},[84,140001,140002],{"class":86,"line":2401},[84,140003,133175],{"class":1378},[84,140005,140006,140008,140010,140012,140014,140016],{"class":86,"line":2492},[84,140007,133180],{"class":90},[84,140009,80953],{"class":154},[84,140011,130035],{"class":94},[84,140013,52586],{"class":154},[84,140015,87379],{"class":94},[84,140017,130605],{"class":154},[84,140019,140020],{"class":86,"line":2498},[84,140021,133195],{"class":1378},[84,140023,140024,140026,140028,140030,140032,140034],{"class":86,"line":2510},[84,140025,133200],{"class":90},[84,140027,80953],{"class":154},[84,140029,130035],{"class":94},[84,140031,52586],{"class":154},[84,140033,133209],{"class":94},[84,140035,130605],{"class":154},[19,140037,139554],{},[60,140039,140040],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,140041,140042,140046,140060,140064,140078,140082,140096,140100,140114,140118],{"__ignoreMap":66},[84,140043,140044],{"class":86,"line":87},[84,140045,133114],{"class":1378},[84,140047,140048,140050,140052,140054,140056,140058],{"class":86,"line":98},[84,140049,133119],{"class":90},[84,140051,80953],{"class":154},[84,140053,130035],{"class":94},[84,140055,52586],{"class":154},[84,140057,133128],{"class":94},[84,140059,130605],{"class":154},[84,140061,140062],{"class":86,"line":106},[84,140063,133135],{"class":1378},[84,140065,140066,140068,140070,140072,140074,140076],{"class":86,"line":112},[84,140067,133140],{"class":90},[84,140069,80953],{"class":154},[84,140071,130035],{"class":94},[84,140073,52586],{"class":154},[84,140075,55911],{"class":94},[84,140077,130605],{"class":154},[84,140079,140080],{"class":86,"line":425},[84,140081,133155],{"class":1378},[84,140083,140084,140086,140088,140090,140092,140094],{"class":86,"line":2395},[84,140085,133160],{"class":90},[84,140087,80953],{"class":154},[84,140089,130035],{"class":94},[84,140091,52586],{"class":154},[84,140093,55978],{"class":94},[84,140095,130605],{"class":154},[84,140097,140098],{"class":86,"line":2401},[84,140099,133175],{"class":1378},[84,140101,140102,140104,140106,140108,140110,140112],{"class":86,"line":2492},[84,140103,133180],{"class":90},[84,140105,80953],{"class":154},[84,140107,130035],{"class":94},[84,140109,52586],{"class":154},[84,140111,87379],{"class":94},[84,140113,130605],{"class":154},[84,140115,140116],{"class":86,"line":2498},[84,140117,133195],{"class":1378},[84,140119,140120,140122,140124,140126,140128,140130],{"class":86,"line":2510},[84,140121,133200],{"class":90},[84,140123,80953],{"class":154},[84,140125,130035],{"class":94},[84,140127,52586],{"class":154},[84,140129,133209],{"class":94},[84,140131,130605],{"class":154},[198,140133,140135,140136,140138],{"id":140134},"_1544-nav导航模块制作","15.4.4 ",[39,140137,54862],{},"导航模块制作",[2643,140140],{"style":127531,"src":140141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140143,140144,140146],{},[39,140145,54862],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140148,140149,140150],{},"1 号盒子左侧浮动，",[39,140151,140152],{},"dropdown",[2315,140154,140155,140165,140173,140179,140187,140197,140205,140216],{},[29,140156,140157,140158,102156,140161,140164],{},"1号盒子有讲究，根据相关性 里面包含 ",[39,140159,140160],{},".dt",[39,140162,140163],{},".dd"," 两个盒子",[29,140166,140167,140169,140170,140172],{},[39,140168,140160],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[39,140171,140163],{}," 挤到下面去了",[29,140174,140175,140176,140178],{},"给 ",[39,140177,140163],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140180,140175,140181,140183,140184,121363],{},[39,140182,140163],{}," 盒子里面定义 无序列表 （",[39,140185,140186],{},"ul > li > a",[29,140188,140189,140190,140192,140193,140196],{},"每个 ",[39,140191,29],{}," 都有一个高度（",[39,140194,140195],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140198,140175,140199,140201,140202,121363],{},[39,140200,29],{}," 里面的a设置文字大小（",[39,140203,140204],{},"14px",[29,140206,140175,140207,140209,140210,140212,140213,140215],{},[39,140208,29],{}," 设置 ",[39,140211,128836],{},"，当鼠标移入的时候，让",[39,140214,29],{},"的背景变成白色，让里面的文字变成红色",[29,140217,140218,140220,140221,140223,140224,140226],{},[39,140219,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[39,140222,29],{},"的右侧，那么给",[39,140225,29],{},"设置相对定位",[19,140228,140229],{},"一定要注意相关性",[19,140231,139514],{},[60,140233,140234],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,140235,140236,140244,140254,140264],{"__ignoreMap":66},[84,140237,140238,140240,140242],{"class":86,"line":87},[84,140239,52760],{"class":52449},[84,140241,138676],{"class":90},[84,140243,16742],{"class":154},[84,140245,140246,140248,140250,140252],{"class":86,"line":98},[84,140247,138683],{"class":94},[84,140249,52586],{"class":154},[84,140251,8824],{"class":158},[84,140253,2471],{"class":154},[84,140255,140256,140258,140260,140262],{"class":86,"line":106},[84,140257,129291],{"class":94},[84,140259,52586],{"class":154},[84,140261,62015],{"class":94},[84,140263,2471],{"class":154},[84,140265,140266],{"class":86,"line":112},[84,140267,2746],{"class":154},[19,140269,139554],{},[60,140271,140272],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,140273,140274,140282,140292,140302],{"__ignoreMap":66},[84,140275,140276,140278,140280],{"class":86,"line":87},[84,140277,52760],{"class":52449},[84,140279,138676],{"class":90},[84,140281,16742],{"class":154},[84,140283,140284,140286,140288,140290],{"class":86,"line":98},[84,140285,138683],{"class":94},[84,140287,52586],{"class":154},[84,140289,8824],{"class":158},[84,140291,2471],{"class":154},[84,140293,140294,140296,140298,140300],{"class":86,"line":106},[84,140295,129291],{"class":94},[84,140297,52586],{"class":154},[84,140299,62015],{"class":94},[84,140301,2471],{"class":154},[84,140303,140304],{"class":86,"line":112},[84,140305,2746],{"class":154},[19,140307,140308],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140310,140311,140312,140315],{},"2 号盒子左侧浮动，",[39,140313,140314],{},"navitems"," 导航栏组",[2315,140317,140318,140323,140332],{},[29,140319,140320,140321],{},"里面结构是 ",[39,140322,140186],{},[29,140324,140325,140326,140328,140329,140331],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[39,140327,208],{},"左右的",[39,140330,32037],{},"把两侧撑开",[29,140333,140334],{},"让文字垂直居中（行高等于高度）",[2643,140336],{"style":127531,"src":140337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140339,140340],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140342,139514],{},[60,140344,140346],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},".box {\n  float: left;\n}\n",[39,140347,140348,140354,140364],{"__ignoreMap":66},[84,140349,140350,140352],{"class":86,"line":87},[84,140351,131523],{"class":90},[84,140353,16742],{"class":154},[84,140355,140356,140358,140360,140362],{"class":86,"line":98},[84,140357,132155],{"class":94},[84,140359,52586],{"class":154},[84,140361,24906],{"class":94},[84,140363,2471],{"class":154},[84,140365,140366],{"class":86,"line":106},[84,140367,2746],{"class":154},[19,140369,139554],{},[60,140371,140372],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,140373,140374,140380,140390],{"__ignoreMap":66},[84,140375,140376,140378],{"class":86,"line":87},[84,140377,131523],{"class":90},[84,140379,16742],{"class":154},[84,140381,140382,140384,140386,140388],{"class":86,"line":98},[84,140383,132155],{"class":94},[84,140385,52586],{"class":154},[84,140387,24906],{"class":94},[84,140389,2471],{"class":154},[84,140391,140392],{"class":86,"line":106},[84,140393,2746],{"class":154},[19,140395,140396],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2643,140398],{"style":127531,"src":140399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[60,140401,140402],{"className":127675,"code":131832,"language":127677,"meta":66,"style":66},[39,140403,140404,140410,140426],{"__ignoreMap":66},[84,140405,140406,140408],{"class":86,"line":87},[84,140407,52760],{"class":52449},[84,140409,16742],{"class":154},[84,140411,140412,140414,140416,140418,140420,140422,140424],{"class":86,"line":98},[84,140413,72042],{"class":94},[84,140415,52586],{"class":154},[84,140417,1529],{"class":94},[84,140419,52641],{"class":129},[84,140421,52670],{"class":94},[84,140423,131067],{"class":94},[84,140425,2471],{"class":154},[84,140427,140428],{"class":86,"line":106},[84,140429,2746],{"class":154},[198,140431,140433],{"id":140432},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2643,140435],{"style":127531,"src":140436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2315,140438,140439,140444,140449],{},[29,140440,140441,140443],{},[39,140442,132878],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140445,140446,140448],{},[39,140447,132878],{}," 里面有一个大的版心",[29,140450,140451,140452,140455,140456],{},"版心里面包含 1 号盒子，",[39,140453,140454],{},"mod_service"," 是服务模块，mod 是模块的意思",[2315,140457,140458,140463,140476,140492,140497],{},[29,140459,140175,140460,140462],{},[39,140461,140454],{}," 设置高度（80px）和下边框",[29,140464,140465,140466,140469,140470,140472,140473,140475],{},"在里面定义 ",[39,140467,140468],{},"ul > li"," ,每个",[39,140471,29],{}," 宽度是300px 高度是 50px，给每个",[39,140474,29],{},"设置35px的左内边距",[29,140477,140478,140479,140481,140482,140484,140485,140487,140488,19580,140490,121363],{},"在每个",[39,140480,29],{},"里面，放一个 ",[39,140483,24080],{},"（里面放图标），一个",[39,140486,52760],{},"（里面放",[39,140489,52760],{},[39,140491,19],{},[29,140493,140175,140494,140496],{},[39,140495,24080],{},"设置浮动，让h5与这个div左右排列",[29,140498,140499],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140501,139514],{},[60,140503,140505],{"className":127675,"code":140504,"language":127677,"meta":66,"style":66},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[39,140506,140507,140513,140525,140537,140564],{"__ignoreMap":66},[84,140508,140509,140511],{"class":86,"line":87},[84,140510,135432],{"class":90},[84,140512,16742],{"class":154},[84,140514,140515,140517,140519,140521,140523],{"class":86,"line":98},[84,140516,71714],{"class":94},[84,140518,52586],{"class":154},[84,140520,2008],{"class":94},[84,140522,52641],{"class":129},[84,140524,2471],{"class":154},[84,140526,140527,140529,140531,140533,140535],{"class":86,"line":106},[84,140528,71934],{"class":94},[84,140530,52586],{"class":154},[84,140532,2008],{"class":94},[84,140534,52641],{"class":129},[84,140536,2471],{"class":154},[84,140538,140539,140541,140543,140545,140547,140549,140551,140553,140556,140558,140560,140562],{"class":86,"line":112},[84,140540,71757],{"class":94},[84,140542,52586],{"class":154},[84,140544,62872],{"class":94},[84,140546,155],{"class":154},[84,140548,135471],{"class":928},[84,140550,1154],{"class":154},[84,140552,62882],{"class":94},[84,140554,140555],{"class":94}," -10",[84,140557,52641],{"class":129},[84,140559,135490],{"class":94},[84,140561,52641],{"class":129},[84,140563,2471],{"class":154},[84,140565,140566],{"class":86,"line":425},[84,140567,2746],{"class":154},[19,140569,139554],{},[60,140571,140572],{"className":127675,"code":140504,"language":127677,"meta":66,"style":66},[39,140573,140574,140580,140592,140604,140630],{"__ignoreMap":66},[84,140575,140576,140578],{"class":86,"line":87},[84,140577,135432],{"class":90},[84,140579,16742],{"class":154},[84,140581,140582,140584,140586,140588,140590],{"class":86,"line":98},[84,140583,71714],{"class":94},[84,140585,52586],{"class":154},[84,140587,2008],{"class":94},[84,140589,52641],{"class":129},[84,140591,2471],{"class":154},[84,140593,140594,140596,140598,140600,140602],{"class":86,"line":106},[84,140595,71934],{"class":94},[84,140597,52586],{"class":154},[84,140599,2008],{"class":94},[84,140601,52641],{"class":129},[84,140603,2471],{"class":154},[84,140605,140606,140608,140610,140612,140614,140616,140618,140620,140622,140624,140626,140628],{"class":86,"line":112},[84,140607,71757],{"class":94},[84,140609,52586],{"class":154},[84,140611,62872],{"class":94},[84,140613,155],{"class":154},[84,140615,135471],{"class":928},[84,140617,1154],{"class":154},[84,140619,62882],{"class":94},[84,140621,140555],{"class":94},[84,140623,52641],{"class":129},[84,140625,135490],{"class":94},[84,140627,52641],{"class":129},[84,140629,2471],{"class":154},[84,140631,140632],{"class":86,"line":425},[84,140633,2746],{"class":154},[19,140635,140636],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2315,140638,140639,140642,140648,140654,140666],{},[29,140640,140641],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,140643,140644,140645,121363],{},"里面的布局利用 自定义列表来实现（",[39,140646,140647],{},"dl > dt + dd",[29,140649,140175,140650,140653],{},[39,140651,140652],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,140655,140175,140656,140659,140660,19580,140662,140665],{},[39,140657,140658],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[39,140661,140658],{},[39,140663,140664],{},"dd","之间有些距离",[29,140667,140668],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140670,139514],{},[60,140672,140673],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,140674,140675,140681,140693],{"__ignoreMap":66},[84,140676,140677,140679],{"class":86,"line":87},[84,140678,52760],{"class":52449},[84,140680,16742],{"class":154},[84,140682,140683,140685,140687,140689,140691],{"class":86,"line":98},[84,140684,71616],{"class":94},[84,140686,52586],{"class":154},[84,140688,1504],{"class":94},[84,140690,52705],{"class":94},[84,140692,2471],{"class":154},[84,140694,140695],{"class":86,"line":106},[84,140696,2746],{"class":154},[19,140698,139554],{},[60,140700,140701],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,140702,140703,140709,140721],{"__ignoreMap":66},[84,140704,140705,140707],{"class":86,"line":87},[84,140706,52760],{"class":52449},[84,140708,16742],{"class":154},[84,140710,140711,140713,140715,140717,140719],{"class":86,"line":98},[84,140712,71616],{"class":94},[84,140714,52586],{"class":154},[84,140716,1504],{"class":94},[84,140718,52705],{"class":94},[84,140720,2471],{"class":154},[84,140722,140723],{"class":86,"line":106},[84,140724,2746],{"class":154},[19,140726,140727],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2315,140729,140730,140739,140742,140753],{},[29,140731,140732,140733,140735,140736,140738],{},"分为上下两块，上面是 ",[39,140734,132895],{}," 友情链接，下面是 ",[39,140737,132888],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,140740,140741],{},"把内容分别复制到相应模块中",[29,140743,140175,140744,140746,140747,140749,140750,140752],{},[39,140745,132895],{}," 设置 15px 的下外边距，给",[39,140748,132895],{}," 里面 的 ",[39,140751,208],{}," 标签设置 左右 3px 的外边距",[29,140754,140755,140756,140758],{},"给",[39,140757,132888],{}," 设置 20px 的行高",[19,140760,139514],{},[60,140762,140763],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,140764,140765,140771,140783],{"__ignoreMap":66},[84,140766,140767,140769],{"class":86,"line":87},[84,140768,52760],{"class":52449},[84,140770,16742],{"class":154},[84,140772,140773,140775,140777,140779,140781],{"class":86,"line":98},[84,140774,71616],{"class":94},[84,140776,52586],{"class":154},[84,140778,1504],{"class":94},[84,140780,52705],{"class":94},[84,140782,2471],{"class":154},[84,140784,140785],{"class":86,"line":106},[84,140786,2746],{"class":154},[19,140788,139554],{},[60,140790,140791],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,140792,140793,140799,140811],{"__ignoreMap":66},[84,140794,140795,140797],{"class":86,"line":87},[84,140796,52760],{"class":52449},[84,140798,16742],{"class":154},[84,140800,140801,140803,140805,140807,140809],{"class":86,"line":98},[84,140802,71616],{"class":94},[84,140804,52586],{"class":154},[84,140806,1504],{"class":94},[84,140808,52705],{"class":94},[84,140810,2471],{"class":154},[84,140812,140813],{"class":86,"line":106},[84,140814,2746],{"class":154},[19,140816,140817],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1222,140819,140820],{},"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":66,"searchDepth":98,"depth":98,"links":140822},[140823,140824,140825,140832],{"id":139103,"depth":98,"text":139104},{"id":139122,"depth":98,"text":139123},{"id":139149,"depth":98,"text":139150,"children":140826},[140827,140828,140829,140830,140831],{"id":139153,"depth":106,"text":139154},{"id":139166,"depth":106,"text":139167},{"id":139190,"depth":106,"text":139191},{"id":139212,"depth":106,"text":139213},{"id":139284,"depth":106,"text":139285},{"id":139410,"depth":98,"text":139411,"children":140833},[140834,140835,140836,140837,140839],{"id":139414,"depth":106,"text":139415},{"id":139421,"depth":106,"text":139422},{"id":139593,"depth":106,"text":139594},{"id":140134,"depth":106,"text":140838},"15.4.4 nav导航模块制作",{"id":140432,"depth":106,"text":140433},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139095,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140846,"title":140847,"body":140848,"description":1249,"extension":1250,"meta":143250,"navigation":1252,"path":143251,"seo":143252,"stem":143253,"__hash__":143254},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140849,"toc":143227},[140850,140853,140857,140861,140873,140876,140879,140882,140893,140895,140919,140921,140945,140950,140953,140955,140991,140993,141029,141032,141037,141040,141043,141046,141076,141083,141086,141096,141098,141132,141135,141169,141175,141192,141194,141230,141232,141268,141273,141298,141300,141326,141328,141352,141359,141362,141426,141428,141470,141472,141512,141519,141524,141526,141556,141558,141588,141592,141595,141602,141614,141616,141642,141644,141668,141671,141673,141697,141703,141713,141715,141745,141747,141777,141784,141825,141827,141863,141865,141901,141905,141908,141911,141914,141920,141925,141928,141951,141954,141978,141981,142005,142010,142013,142016,142019,142022,142025,142099,142101,142131,142133,142163,142166,142169,142201,142205,142209,142223,142232,142235,142240,142242,142336,142338,142432,142455,142457,142481,142483,142507,142514,142517,142527,142529,142553,142558,142566,142568,142598,142603,142643,142645,142671,142673,142699,142703,142706,142711,142714,142718,142726,142733,142741,142743,142773,142775,142805,142813,142816,142819,142821,142851,142853,142883,142886,142891,142893,142917,142919,142943,142946,143031,143033,143057,143059,143083,143087,143089,143113,143115,143149,143153,143167,143170,143175,143178,143183,143186,143216,143224],[10,140851,140847],{"id":140852},"_16-品优购项目下篇-主体与页面开发",[14,140854,140856],{"id":140855},"_161-项目主体模块制作","16.1 项目主体模块制作",[198,140858,140860],{"id":140859},"_1611-首页制作","16.1.1 首页制作",[19,140862,140863,140865,140866,140868,140869,140872],{},[1464,140864,103196],{}," 主体模块是 ",[1464,140867,75204],{}," 里面专有的，注意需要新的样式文件 ",[1464,140870,140871],{},"index.css，"," 就不要写在common.css中了",[2643,140874],{"style":127531,"src":140875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2643,140877],{"style":127531,"src":140878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140880,140881],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2315,140883,140884,140887,140890],{},[29,140885,140886],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,140888,140889],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,140891,140892],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140894,139514],{},[60,140896,140897],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,140898,140899,140905,140915],{"__ignoreMap":66},[84,140900,140901,140903],{"class":86,"line":87},[84,140902,131523],{"class":90},[84,140904,16742],{"class":154},[84,140906,140907,140909,140911,140913],{"class":86,"line":98},[84,140908,132155],{"class":94},[84,140910,52586],{"class":154},[84,140912,24906],{"class":94},[84,140914,2471],{"class":154},[84,140916,140917],{"class":86,"line":106},[84,140918,2746],{"class":154},[19,140920,139554],{},[60,140922,140923],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,140924,140925,140931,140941],{"__ignoreMap":66},[84,140926,140927,140929],{"class":86,"line":87},[84,140928,131523],{"class":90},[84,140930,16742],{"class":154},[84,140932,140933,140935,140937,140939],{"class":86,"line":98},[84,140934,132155],{"class":94},[84,140936,52586],{"class":154},[84,140938,24906],{"class":94},[84,140940,2471],{"class":154},[84,140942,140943],{"class":86,"line":106},[84,140944,2746],{"class":154},[26,140946,140947],{},[29,140948,140949],{},"左侧focus模块制作",[2643,140951],{"style":127531,"src":140952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140954,139514],{},[60,140956,140957],{"className":127675,"code":128998,"language":127677,"meta":66,"style":66},[39,140958,140959,140967,140977,140987],{"__ignoreMap":66},[84,140960,140961,140963,140965],{"class":86,"line":87},[84,140962,54970],{"class":52449},[84,140964,63046],{"class":90},[84,140966,16742],{"class":154},[84,140968,140969,140971,140973,140975],{"class":86,"line":98},[84,140970,129013],{"class":94},[84,140972,52586],{"class":154},[84,140974,56036],{"class":94},[84,140976,2471],{"class":154},[84,140978,140979,140981,140983,140985],{"class":86,"line":106},[84,140980,71944],{"class":94},[84,140982,52586],{"class":154},[84,140984,55884],{"class":94},[84,140986,2471],{"class":154},[84,140988,140989],{"class":86,"line":112},[84,140990,2746],{"class":154},[19,140992,139554],{},[60,140994,140995],{"className":127675,"code":128998,"language":127677,"meta":66,"style":66},[39,140996,140997,141005,141015,141025],{"__ignoreMap":66},[84,140998,140999,141001,141003],{"class":86,"line":87},[84,141000,54970],{"class":52449},[84,141002,63046],{"class":90},[84,141004,16742],{"class":154},[84,141006,141007,141009,141011,141013],{"class":86,"line":98},[84,141008,129013],{"class":94},[84,141010,52586],{"class":154},[84,141012,56036],{"class":94},[84,141014,2471],{"class":154},[84,141016,141017,141019,141021,141023],{"class":86,"line":106},[84,141018,71944],{"class":94},[84,141020,52586],{"class":154},[84,141022,55884],{"class":94},[84,141024,2471],{"class":154},[84,141026,141027],{"class":86,"line":112},[84,141028,2746],{"class":154},[19,141030,141031],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141033,141034],{"start":98},[29,141035,141036],{},"右侧newsflash模块制作",[2643,141038],{"style":127531,"src":141039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141041,141042],{},"右侧的模块 分为上中下三个盒子",[19,141044,141045],{},"结构代码：",[60,141047,141048],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,141049,141050],{"__ignoreMap":66},[84,141051,141052,141054,141056,141058,141060,141062,141064,141066,141068,141070,141072,141074],{"class":86,"line":87},[84,141053,2218],{"class":154},[84,141055,2643],{"class":52449},[84,141057,56386],{"class":90},[84,141059,867],{"class":154},[84,141061,135192],{"class":158},[84,141063,56394],{"class":90},[84,141065,867],{"class":154},[84,141067,135199],{"class":158},[84,141069,135202],{"class":90},[84,141071,867],{"class":154},[84,141073,135207],{"class":158},[84,141075,52456],{"class":154},[19,141077,141078,141079,141082],{},"1 号盒子为 ",[39,141080,141081],{},"news"," 新闻模块 高度为 165px",[2643,141084],{"style":127531,"src":141085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141087,141088,141089,141092,141093],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[39,141090,141091],{},"news-hd","，下面是 ",[39,141094,141095],{},"news-bd",[19,141097,141045],{},[60,141099,141100],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,141101,141102,141106,141120,141124],{"__ignoreMap":66},[84,141103,141104],{"class":86,"line":87},[84,141105,131786],{"class":1378},[84,141107,141108,141110,141112,141114,141116,141118],{"class":86,"line":98},[84,141109,2218],{"class":154},[84,141111,52760],{"class":52449},[84,141113,54635],{"class":90},[84,141115,867],{"class":154},[84,141117,131799],{"class":158},[84,141119,52456],{"class":154},[84,141121,141122],{"class":86,"line":106},[84,141123,131806],{"class":154},[84,141125,141126,141128,141130],{"class":86,"line":112},[84,141127,52934],{"class":154},[84,141129,52760],{"class":52449},[84,141131,52456],{"class":154},[19,141133,141134],{},"样式代码：",[60,141136,141137],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,141138,141139,141143,141157,141161],{"__ignoreMap":66},[84,141140,141141],{"class":86,"line":87},[84,141142,131786],{"class":1378},[84,141144,141145,141147,141149,141151,141153,141155],{"class":86,"line":98},[84,141146,2218],{"class":154},[84,141148,52760],{"class":52449},[84,141150,54635],{"class":90},[84,141152,867],{"class":154},[84,141154,131799],{"class":158},[84,141156,52456],{"class":154},[84,141158,141159],{"class":86,"line":106},[84,141160,131806],{"class":154},[84,141162,141163,141165,141167],{"class":86,"line":112},[84,141164,52934],{"class":154},[84,141166,52760],{"class":52449},[84,141168,52456],{"class":154},[19,141170,141171,141172,141174],{},"上面是",[39,141173,141091],{},"，设置高度是 33px，设置下边框",[2315,141176,141177,141183],{},[29,141178,141179,141180,141182],{},"里面放一个",[39,141181,24080],{}," 标题",[29,141184,141185,141186,141188,141189,141191],{},"放一个a",[39,141187,103831],{},"，内容是 更多，然后让 ",[39,141190,208],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141193,141045],{},[60,141195,141196],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,141197,141198,141206,141216,141226],{"__ignoreMap":66},[84,141199,141200,141202,141204],{"class":86,"line":87},[84,141201,52760],{"class":52449},[84,141203,138676],{"class":90},[84,141205,16742],{"class":154},[84,141207,141208,141210,141212,141214],{"class":86,"line":98},[84,141209,138683],{"class":94},[84,141211,52586],{"class":154},[84,141213,8824],{"class":158},[84,141215,2471],{"class":154},[84,141217,141218,141220,141222,141224],{"class":86,"line":106},[84,141219,129291],{"class":94},[84,141221,52586],{"class":154},[84,141223,62015],{"class":94},[84,141225,2471],{"class":154},[84,141227,141228],{"class":86,"line":112},[84,141229,2746],{"class":154},[19,141231,141134],{},[60,141233,141234],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,141235,141236,141244,141254,141264],{"__ignoreMap":66},[84,141237,141238,141240,141242],{"class":86,"line":87},[84,141239,52760],{"class":52449},[84,141241,138676],{"class":90},[84,141243,16742],{"class":154},[84,141245,141246,141248,141250,141252],{"class":86,"line":98},[84,141247,138683],{"class":94},[84,141249,52586],{"class":154},[84,141251,8824],{"class":158},[84,141253,2471],{"class":154},[84,141255,141256,141258,141260,141262],{"class":86,"line":106},[84,141257,129291],{"class":94},[84,141259,52586],{"class":154},[84,141261,62015],{"class":94},[84,141263,2471],{"class":154},[84,141265,141266],{"class":86,"line":112},[84,141267,2746],{"class":154},[19,141269,141270,141271],{},"下面是",[39,141272,141095],{},[2315,141274,141275,141283],{},[29,141276,141277,141278,102156,141280,141282],{},"里面包含 ",[39,141279,2315],{},[39,141281,29],{}," 还有链接",[29,141284,140755,141285,141287,141288,141290,141291,141294,141295],{},[39,141286,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[39,141289,132341],{}," 2.设置 ",[39,141292,141293],{},"white-space: nowrap;"," 3. 设置 ",[39,141296,141297],{},"text-overflow: ellipsis;",[19,141299,141045],{},[60,141301,141303],{"className":127675,"code":141302,"language":127677,"meta":66,"style":66},"div {\n  overflow: hidden;\n}\n",[39,141304,141305,141311,141322],{"__ignoreMap":66},[84,141306,141307,141309],{"class":86,"line":87},[84,141308,52760],{"class":52449},[84,141310,16742],{"class":154},[84,141312,141313,141316,141318,141320],{"class":86,"line":98},[84,141314,141315],{"class":94},"  overflow",[84,141317,52586],{"class":154},[84,141319,62860],{"class":94},[84,141321,2471],{"class":154},[84,141323,141324],{"class":86,"line":106},[84,141325,2746],{"class":154},[19,141327,141134],{},[60,141329,141330],{"className":127675,"code":141302,"language":127677,"meta":66,"style":66},[39,141331,141332,141338,141348],{"__ignoreMap":66},[84,141333,141334,141336],{"class":86,"line":87},[84,141335,52760],{"class":52449},[84,141337,16742],{"class":154},[84,141339,141340,141342,141344,141346],{"class":86,"line":98},[84,141341,141315],{"class":94},[84,141343,52586],{"class":154},[84,141345,62860],{"class":94},[84,141347,2471],{"class":154},[84,141349,141350],{"class":86,"line":106},[84,141351,2746],{"class":154},[19,141353,141354,141355,141358],{},"2 号盒子为 ",[39,141356,141357],{},"lifeservice"," 生活服务模块 高度为 209px",[2643,141360],{"style":127531,"src":141361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2315,141363,141364,141367,141377,141401,141412],{},[29,141365,141366],{},"设置边框（左右下边框）",[29,141368,141369,141370,141373,141374,141376],{},"里面的内容 是 ",[39,141371,141372],{},"ul > 12*li","，给",[39,141375,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141378,141379,141380],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2315,141381,141382,141387,141396],{},[29,141383,141384,141386],{},[39,141385,141357],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141388,141389,141390,141392,141393,141395],{},"可以让 ",[39,141391,141357],{}," 里面的 ",[39,141394,2315],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141397,141398,141400],{},[39,141399,141357],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141402,117601,141403,141405,141406,141408,141409,141411],{},[39,141404,29],{}," 里面放一个 ",[39,141407,1751],{},"（里面放图标），下面的文本用 ",[39,141410,19],{}," 标签包裹",[29,141413,140175,141414,141416,141417,141419,141420,140209,141422,141425],{},[39,141415,1751],{}," 设置 24px宽和28px的高（注意 ",[39,141418,1751],{}," 是行内元素， 转成行内块），给 ",[39,141421,29],{},[39,141423,141424],{},"text-align:center"," 让里面内容居中显示",[19,141427,141045],{},[60,141429,141431],{"className":127675,"code":141430,"language":127677,"meta":66,"style":66},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[39,141432,141433,141451,141456,141466],{"__ignoreMap":66},[84,141434,141435,141437,141439,141441,141443,141445,141447,141449],{"class":86,"line":87},[84,141436,84],{"class":52449},[84,141438,846],{"class":154},[84,141440,208],{"class":52449},[84,141442,846],{"class":154},[84,141444,24723],{"class":52449},[84,141446,846],{"class":154},[84,141448,1464],{"class":52449},[84,141450,16742],{"class":154},[84,141452,141453],{"class":86,"line":98},[84,141454,141455],{"class":1378},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[84,141457,141458,141460,141462,141464],{"class":86,"line":106},[84,141459,129291],{"class":94},[84,141461,52586],{"class":154},[84,141463,129353],{"class":94},[84,141465,2471],{"class":154},[84,141467,141468],{"class":86,"line":112},[84,141469,2746],{"class":154},[19,141471,141134],{},[60,141473,141474],{"className":127675,"code":141430,"language":127677,"meta":66,"style":66},[39,141475,141476,141494,141498,141508],{"__ignoreMap":66},[84,141477,141478,141480,141482,141484,141486,141488,141490,141492],{"class":86,"line":87},[84,141479,84],{"class":52449},[84,141481,846],{"class":154},[84,141483,208],{"class":52449},[84,141485,846],{"class":154},[84,141487,24723],{"class":52449},[84,141489,846],{"class":154},[84,141491,1464],{"class":52449},[84,141493,16742],{"class":154},[84,141495,141496],{"class":86,"line":98},[84,141497,141455],{"class":1378},[84,141499,141500,141502,141504,141506],{"class":86,"line":106},[84,141501,129291],{"class":94},[84,141503,52586],{"class":154},[84,141505,129353],{"class":94},[84,141507,2471],{"class":154},[84,141509,141510],{"class":86,"line":112},[84,141511,2746],{"class":154},[19,141513,141514,141515,141518],{},"3 号盒子为 ",[39,141516,141517],{},"bargain"," 特价商品",[2315,141520,141521],{},[29,141522,141523],{},"这个比较简单，直接插入一张图片即可",[19,141525,141045],{},[60,141527,141528],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,141529,141530],{"__ignoreMap":66},[84,141531,141532,141534,141536,141538,141540,141542,141544,141546,141548,141550,141552,141554],{"class":86,"line":87},[84,141533,2218],{"class":154},[84,141535,2643],{"class":52449},[84,141537,56386],{"class":90},[84,141539,867],{"class":154},[84,141541,135192],{"class":158},[84,141543,56394],{"class":90},[84,141545,867],{"class":154},[84,141547,135199],{"class":158},[84,141549,135202],{"class":90},[84,141551,867],{"class":154},[84,141553,135207],{"class":158},[84,141555,52456],{"class":154},[19,141557,141134],{},[60,141559,141560],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,141561,141562],{"__ignoreMap":66},[84,141563,141564,141566,141568,141570,141572,141574,141576,141578,141580,141582,141584,141586],{"class":86,"line":87},[84,141565,2218],{"class":154},[84,141567,2643],{"class":52449},[84,141569,56386],{"class":90},[84,141571,867],{"class":154},[84,141573,135192],{"class":158},[84,141575,56394],{"class":90},[84,141577,867],{"class":154},[84,141579,135199],{"class":158},[84,141581,135202],{"class":90},[84,141583,867],{"class":154},[84,141585,135207],{"class":158},[84,141587,52456],{"class":154},[198,141589,141591],{"id":141590},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2643,141593],{"style":127531,"src":141594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141596,141597,141598,141601],{},"大盒子 ",[39,141599,141600],{},"recom"," 推荐模块 recommend",[2315,141603,141604],{},[29,141605,141606,141607,141609,141610,141613],{},"给这个 ",[39,141608,141600],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[39,141611,141612],{},"#ebebeb","），设置距离上边 12px",[19,141615,141045],{},[60,141617,141619],{"className":127675,"code":141618,"language":127677,"meta":66,"style":66},"div {\n  background-color: #f0f0f0;\n}\n",[39,141620,141621,141627,141638],{"__ignoreMap":66},[84,141622,141623,141625],{"class":86,"line":87},[84,141624,52760],{"class":52449},[84,141626,16742],{"class":154},[84,141628,141629,141631,141633,141636],{"class":86,"line":98},[84,141630,72024],{"class":94},[84,141632,52586],{"class":154},[84,141634,141635],{"class":94},"#f0f0f0",[84,141637,2471],{"class":154},[84,141639,141640],{"class":86,"line":106},[84,141641,2746],{"class":154},[19,141643,141134],{},[60,141645,141646],{"className":127675,"code":141618,"language":127677,"meta":66,"style":66},[39,141647,141648,141654,141664],{"__ignoreMap":66},[84,141649,141650,141652],{"class":86,"line":87},[84,141651,52760],{"class":52449},[84,141653,16742],{"class":154},[84,141655,141656,141658,141660,141662],{"class":86,"line":98},[84,141657,72024],{"class":94},[84,141659,52586],{"class":154},[84,141661,141635],{"class":94},[84,141663,2471],{"class":154},[84,141665,141666],{"class":86,"line":106},[84,141667,2746],{"class":154},[19,141669,141670],{},"里面包含 2 个盒子， 浮动即可",[19,141672,141045],{},[60,141674,141675],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,141676,141677,141683,141693],{"__ignoreMap":66},[84,141678,141679,141681],{"class":86,"line":87},[84,141680,131523],{"class":90},[84,141682,16742],{"class":154},[84,141684,141685,141687,141689,141691],{"class":86,"line":98},[84,141686,132155],{"class":94},[84,141688,52586],{"class":154},[84,141690,24906],{"class":94},[84,141692,2471],{"class":154},[84,141694,141695],{"class":86,"line":106},[84,141696,2746],{"class":154},[19,141698,141699,141700],{},"1 号盒子 ",[39,141701,141702],{},"recom_hd",[2315,141704,141705,141708],{},[29,141706,141707],{},"设置宽度205px，高度163px",[29,141709,141179,141710,141712],{},[39,141711,2643],{},"标签，插入图片即可",[19,141714,141045],{},[60,141716,141717],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,141718,141719],{"__ignoreMap":66},[84,141720,141721,141723,141725,141727,141729,141731,141733,141735,141737,141739,141741,141743],{"class":86,"line":87},[84,141722,2218],{"class":154},[84,141724,2643],{"class":52449},[84,141726,56386],{"class":90},[84,141728,867],{"class":154},[84,141730,135192],{"class":158},[84,141732,56394],{"class":90},[84,141734,867],{"class":154},[84,141736,135199],{"class":158},[84,141738,135202],{"class":90},[84,141740,867],{"class":154},[84,141742,135207],{"class":158},[84,141744,52456],{"class":154},[19,141746,141134],{},[60,141748,141749],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,141750,141751],{"__ignoreMap":66},[84,141752,141753,141755,141757,141759,141761,141763,141765,141767,141769,141771,141773,141775],{"class":86,"line":87},[84,141754,2218],{"class":154},[84,141756,2643],{"class":52449},[84,141758,56386],{"class":90},[84,141760,867],{"class":154},[84,141762,135192],{"class":158},[84,141764,56394],{"class":90},[84,141766,867],{"class":154},[84,141768,135199],{"class":158},[84,141770,135202],{"class":90},[84,141772,867],{"class":154},[84,141774,135207],{"class":158},[84,141776,52456],{"class":154},[19,141778,141779,141780,141783],{},"2 号盒子 ",[39,141781,141782],{},"recom_bd"," ，注意里面的小竖线",[2315,141785,141786,141797,141800,141805,141810],{},[29,141787,141788,141789,141791,141792,141794,141795],{},"右侧结构里面放 ",[39,141790,2315],{}," 包含 4个 ",[39,141793,29],{},"，每个li里面包含一个",[39,141796,2643],{},[29,141798,141799],{},"直接利用切片工具把里面的内容当成一张图片",[29,141801,140175,141802,141804],{},[39,141803,29],{}," 设置浮动",[29,141806,140175,141807,141809],{},[39,141808,2643],{}," 设置宽高，宽度 248px，高度 163px",[29,141811,141812,141813,141373,141816,141818,141819,141821,141822],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[39,141814,141815],{},"top 10px",[39,141817,29],{},"设置相对定位（注意，最后一个",[39,141820,29],{},"不用设置伪元素），可以利用 ",[39,141823,141824],{},"nth-child(-n+3){...}",[19,141826,141045],{},[60,141828,141829],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,141830,141831,141839,141849,141859],{"__ignoreMap":66},[84,141832,141833,141835,141837],{"class":86,"line":87},[84,141834,52760],{"class":52449},[84,141836,138676],{"class":90},[84,141838,16742],{"class":154},[84,141840,141841,141843,141845,141847],{"class":86,"line":98},[84,141842,138683],{"class":94},[84,141844,52586],{"class":154},[84,141846,8824],{"class":158},[84,141848,2471],{"class":154},[84,141850,141851,141853,141855,141857],{"class":86,"line":106},[84,141852,129291],{"class":94},[84,141854,52586],{"class":154},[84,141856,62015],{"class":94},[84,141858,2471],{"class":154},[84,141860,141861],{"class":86,"line":112},[84,141862,2746],{"class":154},[19,141864,141134],{},[60,141866,141867],{"className":127675,"code":139517,"language":127677,"meta":66,"style":66},[39,141868,141869,141877,141887,141897],{"__ignoreMap":66},[84,141870,141871,141873,141875],{"class":86,"line":87},[84,141872,52760],{"class":52449},[84,141874,138676],{"class":90},[84,141876,16742],{"class":154},[84,141878,141879,141881,141883,141885],{"class":86,"line":98},[84,141880,138683],{"class":94},[84,141882,52586],{"class":154},[84,141884,8824],{"class":158},[84,141886,2471],{"class":154},[84,141888,141889,141891,141893,141895],{"class":86,"line":106},[84,141890,129291],{"class":94},[84,141892,52586],{"class":154},[84,141894,62015],{"class":94},[84,141896,2471],{"class":154},[84,141898,141899],{"class":86,"line":112},[84,141900,2746],{"class":154},[198,141902,141904],{"id":141903},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2643,141906],{"style":127531,"src":141907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141909,141910],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141912,141913],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141915,141916,141919],{},[39,141917,141918],{},"box_hd"," 制作",[19,141921,141699,141922,141924],{},[39,141923,141918],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2643,141926],{"style":127531,"src":141927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2315,141929,141930,141935,141940,141943],{},[29,141931,141932,141934],{},[39,141933,141918],{}," 给 30px 的高度，2个像素的下边框",[29,141936,141937,141938],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[39,141939,140186],{},[29,141941,141942],{},"左侧盒左浮动，右侧盒子右浮动",[29,141944,141945,141947,141948,141950],{},[39,141946,208],{},"标签之间的距离用左右的",[39,141949,32037],{},"撑开即可",[19,141952,141953],{},"结构代码",[60,141955,141956],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,141957,141958,141964,141974],{"__ignoreMap":66},[84,141959,141960,141962],{"class":86,"line":87},[84,141961,131523],{"class":90},[84,141963,16742],{"class":154},[84,141965,141966,141968,141970,141972],{"class":86,"line":98},[84,141967,132155],{"class":94},[84,141969,52586],{"class":154},[84,141971,24906],{"class":94},[84,141973,2471],{"class":154},[84,141975,141976],{"class":86,"line":106},[84,141977,2746],{"class":154},[19,141979,141980],{},"样式代码",[60,141982,141983],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,141984,141985,141991,142001],{"__ignoreMap":66},[84,141986,141987,141989],{"class":86,"line":87},[84,141988,131523],{"class":90},[84,141990,16742],{"class":154},[84,141992,141993,141995,141997,141999],{"class":86,"line":98},[84,141994,132155],{"class":94},[84,141996,52586],{"class":154},[84,141998,24906],{"class":94},[84,142000,2471],{"class":154},[84,142002,142003],{"class":86,"line":106},[84,142004,2746],{"class":154},[19,142006,142007,141919],{},[39,142008,142009],{},"box_bd",[19,142011,142012],{},"2 号盒子 box_bd，不要给高度",[2643,142014],{"style":127531,"src":142015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142017,142018],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142020,142021],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142023,142024],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2315,142026,142027,142039,142055],{},[29,142028,142029,142031,142032,142035,142036,142038],{},[39,142030,142009],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[39,142033,142034],{},"tab_content","，在",[39,142037,142034],{}," 里面包裹tab选项卡对应的内容",[29,142040,142041,142042,142045,142046,142048,142049,142051,142052,142054],{},"内容被一个大盒子包裹（",[39,142043,142044],{},"tab_list_item","），里面是 ",[39,142047,2315],{}," 包裹 5个 ",[39,142050,29],{},"，每个",[39,142053,29],{},"设置对应的宽度，然后设置浮动",[29,142056,142057,142058,142060,142061,142063,142064],{},"而这5个",[39,142059,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[39,142062,29],{},"设置",[2315,142065,142066,142084,142087],{},[29,142067,142068,142069,142071,142072,142074,142075,142077,142078,142080,142081,142083],{},"第一个小 ",[39,142070,29],{}," 分为上下结构，上面是 ",[39,142073,2315],{}," 包裹 ",[39,142076,29],{}," ，",[39,142079,29],{},"里面包裹 ",[39,142082,208],{},"，下面插入一张图片",[29,142085,142086],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142088,142089,142090,142092,142093,142095,142096,142098],{},"后面的小 ",[39,142091,29],{}," 里面先放一个",[39,142094,208],{},"标签，然后在",[39,142097,208],{},"标签里面插入图片即可",[19,142100,141953],{},[60,142102,142103],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,142104,142105],{"__ignoreMap":66},[84,142106,142107,142109,142111,142113,142115,142117,142119,142121,142123,142125,142127,142129],{"class":86,"line":87},[84,142108,2218],{"class":154},[84,142110,2643],{"class":52449},[84,142112,56386],{"class":90},[84,142114,867],{"class":154},[84,142116,135192],{"class":158},[84,142118,56394],{"class":90},[84,142120,867],{"class":154},[84,142122,135199],{"class":158},[84,142124,135202],{"class":90},[84,142126,867],{"class":154},[84,142128,135207],{"class":158},[84,142130,52456],{"class":154},[19,142132,141980],{},[60,142134,142135],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,142136,142137],{"__ignoreMap":66},[84,142138,142139,142141,142143,142145,142147,142149,142151,142153,142155,142157,142159,142161],{"class":86,"line":87},[84,142140,2218],{"class":154},[84,142142,2643],{"class":52449},[84,142144,56386],{"class":90},[84,142146,867],{"class":154},[84,142148,135192],{"class":158},[84,142150,56394],{"class":90},[84,142152,867],{"class":154},[84,142154,135199],{"class":158},[84,142156,135202],{"class":90},[84,142158,867],{"class":154},[84,142160,135207],{"class":158},[84,142162,52456],{"class":154},[19,142164,142165],{},"tab栏切换需求！！！！！！介绍：",[2643,142167],{"style":127531,"src":142168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2315,142170,142171,142179,142185,142188],{},[29,142172,142173,142176,142177],{},[39,142174,142175],{},"tab","栏的布局是 ",[39,142178,140186],{},[29,142180,142181,142182,142184],{},"有多少个",[39,142183,142175],{},"选项卡，那么对应就有多少个内容",[29,142186,142187],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142189,142190,142191,142194,142195,142197,142198,142200],{},"等后面我们学习了",[39,142192,142193],{},"js","之后，我们就会配合",[39,142196,142193],{},"来实现，",[39,142199,142175],{},"栏的切换",[14,142202,142204],{"id":142203},"_162-列表制作","16.2 列表制作",[198,142206,142208],{"id":142207},"_1621-准备工作","16.2.1 准备工作",[2315,142210,142211,142214,142217,142220],{},[29,142212,142213],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142215,142216],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142218,142219],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142221,142222],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[198,142224,142226,142227,102156,142229,142231],{"id":142225},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[39,142228,132680],{},[39,142230,54862],{}," 修改",[2643,142233],{"style":127531,"src":142234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2315,142236,142237],{},[29,142238,142239],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142241,141045],{},[60,142243,142244],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,142245,142246,142250,142264,142268,142282,142286,142300,142304,142318,142322],{"__ignoreMap":66},[84,142247,142248],{"class":86,"line":87},[84,142249,133114],{"class":1378},[84,142251,142252,142254,142256,142258,142260,142262],{"class":86,"line":98},[84,142253,133119],{"class":90},[84,142255,80953],{"class":154},[84,142257,130035],{"class":94},[84,142259,52586],{"class":154},[84,142261,133128],{"class":94},[84,142263,130605],{"class":154},[84,142265,142266],{"class":86,"line":106},[84,142267,133135],{"class":1378},[84,142269,142270,142272,142274,142276,142278,142280],{"class":86,"line":112},[84,142271,133140],{"class":90},[84,142273,80953],{"class":154},[84,142275,130035],{"class":94},[84,142277,52586],{"class":154},[84,142279,55911],{"class":94},[84,142281,130605],{"class":154},[84,142283,142284],{"class":86,"line":425},[84,142285,133155],{"class":1378},[84,142287,142288,142290,142292,142294,142296,142298],{"class":86,"line":2395},[84,142289,133160],{"class":90},[84,142291,80953],{"class":154},[84,142293,130035],{"class":94},[84,142295,52586],{"class":154},[84,142297,55978],{"class":94},[84,142299,130605],{"class":154},[84,142301,142302],{"class":86,"line":2401},[84,142303,133175],{"class":1378},[84,142305,142306,142308,142310,142312,142314,142316],{"class":86,"line":2492},[84,142307,133180],{"class":90},[84,142309,80953],{"class":154},[84,142311,130035],{"class":94},[84,142313,52586],{"class":154},[84,142315,87379],{"class":94},[84,142317,130605],{"class":154},[84,142319,142320],{"class":86,"line":2498},[84,142321,133195],{"class":1378},[84,142323,142324,142326,142328,142330,142332,142334],{"class":86,"line":2510},[84,142325,133200],{"class":90},[84,142327,80953],{"class":154},[84,142329,130035],{"class":94},[84,142331,52586],{"class":154},[84,142333,133209],{"class":94},[84,142335,130605],{"class":154},[19,142337,141134],{},[60,142339,142340],{"className":127675,"code":133107,"language":127677,"meta":66,"style":66},[39,142341,142342,142346,142360,142364,142378,142382,142396,142400,142414,142418],{"__ignoreMap":66},[84,142343,142344],{"class":86,"line":87},[84,142345,133114],{"class":1378},[84,142347,142348,142350,142352,142354,142356,142358],{"class":86,"line":98},[84,142349,133119],{"class":90},[84,142351,80953],{"class":154},[84,142353,130035],{"class":94},[84,142355,52586],{"class":154},[84,142357,133128],{"class":94},[84,142359,130605],{"class":154},[84,142361,142362],{"class":86,"line":106},[84,142363,133135],{"class":1378},[84,142365,142366,142368,142370,142372,142374,142376],{"class":86,"line":112},[84,142367,133140],{"class":90},[84,142369,80953],{"class":154},[84,142371,130035],{"class":94},[84,142373,52586],{"class":154},[84,142375,55911],{"class":94},[84,142377,130605],{"class":154},[84,142379,142380],{"class":86,"line":425},[84,142381,133155],{"class":1378},[84,142383,142384,142386,142388,142390,142392,142394],{"class":86,"line":2395},[84,142385,133160],{"class":90},[84,142387,80953],{"class":154},[84,142389,130035],{"class":94},[84,142391,52586],{"class":154},[84,142393,55978],{"class":94},[84,142395,130605],{"class":154},[84,142397,142398],{"class":86,"line":2401},[84,142399,133175],{"class":1378},[84,142401,142402,142404,142406,142408,142410,142412],{"class":86,"line":2492},[84,142403,133180],{"class":90},[84,142405,80953],{"class":154},[84,142407,130035],{"class":94},[84,142409,52586],{"class":154},[84,142411,87379],{"class":94},[84,142413,130605],{"class":154},[84,142415,142416],{"class":86,"line":2498},[84,142417,133195],{"class":1378},[84,142419,142420,142422,142424,142426,142428,142430],{"class":86,"line":2510},[84,142421,133200],{"class":90},[84,142423,80953],{"class":154},[84,142425,130035],{"class":94},[84,142427,52586],{"class":154},[84,142429,133209],{"class":94},[84,142431,130605],{"class":154},[2315,142433,142434,142445],{},[29,142435,142436,142437,142440,142441,102156,142443],{},"1 号盒子左侧浮动 ",[39,142438,142439],{},"sk_list"," 里面包含 ",[39,142442,2315],{},[39,142444,29],{},[29,142446,142447,142448,142440,142451,102156,142453],{},"2 号盒子左侧浮动 ",[39,142449,142450],{},"sk_con",[39,142452,2315],{},[39,142454,29],{},[19,142456,141045],{},[60,142458,142459],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,142460,142461,142467,142477],{"__ignoreMap":66},[84,142462,142463,142465],{"class":86,"line":87},[84,142464,131523],{"class":90},[84,142466,16742],{"class":154},[84,142468,142469,142471,142473,142475],{"class":86,"line":98},[84,142470,132155],{"class":94},[84,142472,52586],{"class":154},[84,142474,24906],{"class":94},[84,142476,2471],{"class":154},[84,142478,142479],{"class":86,"line":106},[84,142480,2746],{"class":154},[19,142482,141134],{},[60,142484,142485],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,142486,142487,142493,142503],{"__ignoreMap":66},[84,142488,142489,142491],{"class":86,"line":87},[84,142490,131523],{"class":90},[84,142492,16742],{"class":154},[84,142494,142495,142497,142499,142501],{"class":86,"line":98},[84,142496,132155],{"class":94},[84,142498,52586],{"class":154},[84,142500,24906],{"class":94},[84,142502,2471],{"class":154},[84,142504,142505],{"class":86,"line":106},[84,142506,2746],{"class":154},[198,142508,142510,142511],{"id":142509},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[39,142512,142513],{},"sk_container",[2643,142515],{"style":127531,"src":142516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2315,142518,142519,142524],{},[29,142520,141699,142521,142523],{},[39,142522,142513],{}," 给宽度 1200，不要给高度",[29,142525,142526],{},"一定不要忘记清除浮动",[19,142528,141045],{},[60,142530,142531],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,142532,142533,142539,142549],{"__ignoreMap":66},[84,142534,142535,142537],{"class":86,"line":87},[84,142536,131523],{"class":90},[84,142538,16742],{"class":154},[84,142540,142541,142543,142545,142547],{"class":86,"line":98},[84,142542,132155],{"class":94},[84,142544,52586],{"class":154},[84,142546,24906],{"class":94},[84,142548,2471],{"class":154},[84,142550,142551],{"class":86,"line":106},[84,142552,2746],{"class":154},[26,142554,142555],{},[29,142556,142557],{},"sk_hd制作",[2315,142559,142560],{},[29,142561,141779,142562,142565],{},[39,142563,142564],{},"sk_hd"," ，插入图片即可",[19,142567,141045],{},[60,142569,142570],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,142571,142572],{"__ignoreMap":66},[84,142573,142574,142576,142578,142580,142582,142584,142586,142588,142590,142592,142594,142596],{"class":86,"line":87},[84,142575,2218],{"class":154},[84,142577,2643],{"class":52449},[84,142579,56386],{"class":90},[84,142581,867],{"class":154},[84,142583,135192],{"class":158},[84,142585,56394],{"class":90},[84,142587,867],{"class":154},[84,142589,135199],{"class":158},[84,142591,135202],{"class":90},[84,142593,867],{"class":154},[84,142595,135207],{"class":158},[84,142597,52456],{"class":154},[26,142599,142600],{"start":98},[29,142601,142602],{},"sk_bd制作",[2315,142604,142605],{},[29,142606,142607,142608,142611,142612,102156,142614,142616],{},"3 号盒子 ",[39,142609,142610],{},"sk_bd"," ，里面包含很多的 ",[39,142613,2315],{},[39,142615,29],{},[2315,142617,142618,142627],{},[29,142619,142620,142621,142623,142624,142626],{},"当鼠标移入到 ",[39,142622,29],{}," 上面的时候显示红色的边框，在这里先给 ",[39,142625,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,142628,142629,142630,142632,142633,142635,142636,142639,142640,142642],{},"由于给每个 ",[39,142631,29],{}," 都设置了外边距，导致一行的最后一个 ",[39,142634,29],{}," 掉了下来，在这里我们利用 ",[39,142637,142638],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[39,142641,29],{},"，去掉外边距就好了",[19,142644,141045],{},[60,142646,142647],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,142648,142649,142655,142667],{"__ignoreMap":66},[84,142650,142651,142653],{"class":86,"line":87},[84,142652,52760],{"class":52449},[84,142654,16742],{"class":154},[84,142656,142657,142659,142661,142663,142665],{"class":86,"line":98},[84,142658,71616],{"class":94},[84,142660,52586],{"class":154},[84,142662,1504],{"class":94},[84,142664,52705],{"class":94},[84,142666,2471],{"class":154},[84,142668,142669],{"class":86,"line":106},[84,142670,2746],{"class":154},[19,142672,141134],{},[60,142674,142675],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,142676,142677,142683,142695],{"__ignoreMap":66},[84,142678,142679,142681],{"class":86,"line":87},[84,142680,52760],{"class":52449},[84,142682,16742],{"class":154},[84,142684,142685,142687,142689,142691,142693],{"class":86,"line":98},[84,142686,71616],{"class":94},[84,142688,52586],{"class":154},[84,142690,1504],{"class":94},[84,142692,52705],{"class":94},[84,142694,2471],{"class":154},[84,142696,142697],{"class":86,"line":106},[84,142698,2746],{"class":154},[14,142700,142702],{"id":142701},"_163-注册页面制作","16.3 注册页面制作",[2643,142704],{"style":127531,"src":142705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142707,142708,142710],{},[1464,142709,10197],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2643,142712],{"style":127531,"src":142713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[198,142715,142717],{"id":142716},"_1631-准备工作","16.3.1 准备工作",[2315,142719,142720,142723],{},[29,142721,142722],{},"创建register.html，引入 base.css，引入favicon图标",[29,142724,142725],{},"创建register.css ，在html页面进行引入",[198,142727,142729,142730,142732],{"id":142728},"_1632-header-头部实现","16.3.2 ",[39,142731,132680],{}," 头部实现",[2315,142734,142735,142738],{},[29,142736,142737],{},"整个内容用 版心 进行包裹",[29,142739,142740],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142742,141045],{},[60,142744,142745],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,142746,142747],{"__ignoreMap":66},[84,142748,142749,142751,142753,142755,142757,142759,142761,142763,142765,142767,142769,142771],{"class":86,"line":87},[84,142750,2218],{"class":154},[84,142752,2643],{"class":52449},[84,142754,56386],{"class":90},[84,142756,867],{"class":154},[84,142758,135192],{"class":158},[84,142760,56394],{"class":90},[84,142762,867],{"class":154},[84,142764,135199],{"class":158},[84,142766,135202],{"class":90},[84,142768,867],{"class":154},[84,142770,135207],{"class":158},[84,142772,52456],{"class":154},[19,142774,141134],{},[60,142776,142777],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,142778,142779],{"__ignoreMap":66},[84,142780,142781,142783,142785,142787,142789,142791,142793,142795,142797,142799,142801,142803],{"class":86,"line":87},[84,142782,2218],{"class":154},[84,142784,2643],{"class":52449},[84,142786,56386],{"class":90},[84,142788,867],{"class":154},[84,142790,135192],{"class":158},[84,142792,56394],{"class":90},[84,142794,867],{"class":154},[84,142796,135199],{"class":158},[84,142798,135202],{"class":90},[84,142800,867],{"class":154},[84,142802,135207],{"class":158},[84,142804,52456],{"class":154},[198,142806,142808,142809,142812],{"id":142807},"_1633-registerarea-主体模块实现","16.3.3 ",[39,142810,142811],{},"registerarea"," 主体模块实现",[2643,142814],{"style":127531,"src":142815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142817,142818],{},"整个大盒子 高度为 522px，设置4个边框",[19,142820,141045],{},[60,142822,142823],{"className":127675,"code":131832,"language":127677,"meta":66,"style":66},[39,142824,142825,142831,142847],{"__ignoreMap":66},[84,142826,142827,142829],{"class":86,"line":87},[84,142828,52760],{"class":52449},[84,142830,16742],{"class":154},[84,142832,142833,142835,142837,142839,142841,142843,142845],{"class":86,"line":98},[84,142834,72042],{"class":94},[84,142836,52586],{"class":154},[84,142838,1529],{"class":94},[84,142840,52641],{"class":129},[84,142842,52670],{"class":94},[84,142844,131067],{"class":94},[84,142846,2471],{"class":154},[84,142848,142849],{"class":86,"line":106},[84,142850,2746],{"class":154},[19,142852,141134],{},[60,142854,142855],{"className":127675,"code":131832,"language":127677,"meta":66,"style":66},[39,142856,142857,142863,142879],{"__ignoreMap":66},[84,142858,142859,142861],{"class":86,"line":87},[84,142860,52760],{"class":52449},[84,142862,16742],{"class":154},[84,142864,142865,142867,142869,142871,142873,142875,142877],{"class":86,"line":98},[84,142866,72042],{"class":94},[84,142868,52586],{"class":154},[84,142870,1529],{"class":94},[84,142872,52641],{"class":129},[84,142874,52670],{"class":94},[84,142876,131067],{"class":94},[84,142878,2471],{"class":154},[84,142880,142881],{"class":86,"line":106},[84,142882,2746],{"class":154},[19,142884,142885],{},"1号盒子 是一个 h3 标签，放标题",[2315,142887,142888],{},[29,142889,142890],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142892,141045],{},[60,142894,142895],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,142896,142897,142903,142913],{"__ignoreMap":66},[84,142898,142899,142901],{"class":86,"line":87},[84,142900,131523],{"class":90},[84,142902,16742],{"class":154},[84,142904,142905,142907,142909,142911],{"class":86,"line":98},[84,142906,132155],{"class":94},[84,142908,52586],{"class":154},[84,142910,24906],{"class":94},[84,142912,2471],{"class":154},[84,142914,142915],{"class":86,"line":106},[84,142916,2746],{"class":154},[19,142918,141134],{},[60,142920,142921],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,142922,142923,142929,142939],{"__ignoreMap":66},[84,142924,142925,142927],{"class":86,"line":87},[84,142926,131523],{"class":90},[84,142928,16742],{"class":154},[84,142930,142931,142933,142935,142937],{"class":86,"line":98},[84,142932,132155],{"class":94},[84,142934,52586],{"class":154},[84,142936,24906],{"class":94},[84,142938,2471],{"class":154},[84,142940,142941],{"class":86,"line":106},[84,142942,2746],{"class":154},[19,142944,142945],{},"2号盒子 里面放注册的内容",[2315,142947,142948,142951,142960,142974,142987,142990,142993,143011,143025],{},[29,142949,142950],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,142952,142953,142954,142956,142957,142959],{},"里面的内容利用 ",[39,142955,2315],{}," 包含 ",[39,142958,29],{}," 来实现的（不需要用表格）",[29,142961,140189,142962,142964,142965,142967,142968,142970,142971,142973],{},[39,142963,29],{}," 里面，左侧放 ",[39,142966,34760],{}," 标签， 中间放",[39,142969,54970],{}," 标签， 右侧放 ",[39,142972,84],{}," 提示信息",[29,142975,142976,142977,142979,142980,142982,142983,142986],{},"左侧 ",[39,142978,34760],{},"里面的文字都是右对齐，我们可以给",[39,142981,34760],{},"设置一个宽度（88px），然后利用",[39,142984,142985],{},"text-align"," 来设置右对齐",[29,142988,142989],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,142991,142992],{},"右侧 span修饰一下文字颜色",[29,142994,142995,142996],{},"提示信息的样式优化",[2315,142997,142998,143001,143004],{},[29,142999,143000],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143002,143003],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143005,143006,143007,143010],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[39,143008,143009],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143012,143013,143014],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2315,143015,143016,143022],{},[29,143017,143018,143019,143021],{},"设置 ",[39,143020,24723],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143023,143024],{},"分别设置 背景颜色",[29,143026,143027,143028,143030],{},"同意协议 和 完成注册 都是用 ",[39,143029,29],{}," 进行包裹",[19,143032,141045],{},[60,143034,143035],{"className":127675,"code":141618,"language":127677,"meta":66,"style":66},[39,143036,143037,143043,143053],{"__ignoreMap":66},[84,143038,143039,143041],{"class":86,"line":87},[84,143040,52760],{"class":52449},[84,143042,16742],{"class":154},[84,143044,143045,143047,143049,143051],{"class":86,"line":98},[84,143046,72024],{"class":94},[84,143048,52586],{"class":154},[84,143050,141635],{"class":94},[84,143052,2471],{"class":154},[84,143054,143055],{"class":86,"line":106},[84,143056,2746],{"class":154},[19,143058,141134],{},[60,143060,143061],{"className":127675,"code":141618,"language":127677,"meta":66,"style":66},[39,143062,143063,143069,143079],{"__ignoreMap":66},[84,143064,143065,143067],{"class":86,"line":87},[84,143066,52760],{"class":52449},[84,143068,16742],{"class":154},[84,143070,143071,143073,143075,143077],{"class":86,"line":98},[84,143072,72024],{"class":94},[84,143074,52586],{"class":154},[84,143076,141635],{"class":94},[84,143078,2471],{"class":154},[84,143080,143081],{"class":86,"line":106},[84,143082,2746],{"class":154},[198,143084,143086],{"id":143085},"_1634-底部实现","16.3.4 底部实现",[19,143088,141045],{},[60,143090,143091],{"className":127675,"code":141618,"language":127677,"meta":66,"style":66},[39,143092,143093,143099,143109],{"__ignoreMap":66},[84,143094,143095,143097],{"class":86,"line":87},[84,143096,52760],{"class":52449},[84,143098,16742],{"class":154},[84,143100,143101,143103,143105,143107],{"class":86,"line":98},[84,143102,72024],{"class":94},[84,143104,52586],{"class":154},[84,143106,141635],{"class":94},[84,143108,2471],{"class":154},[84,143110,143111],{"class":86,"line":106},[84,143112,2746],{"class":154},[19,143114,141134],{},[60,143116,143117],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,143118,143119,143123,143137,143141],{"__ignoreMap":66},[84,143120,143121],{"class":86,"line":87},[84,143122,131786],{"class":1378},[84,143124,143125,143127,143129,143131,143133,143135],{"class":86,"line":98},[84,143126,2218],{"class":154},[84,143128,52760],{"class":52449},[84,143130,54635],{"class":90},[84,143132,867],{"class":154},[84,143134,131799],{"class":158},[84,143136,52456],{"class":154},[84,143138,143139],{"class":86,"line":106},[84,143140,131806],{"class":154},[84,143142,143143,143145,143147],{"class":86,"line":112},[84,143144,52934],{"class":154},[84,143146,52760],{"class":52449},[84,143148,52456],{"class":154},[14,143150,143152],{"id":143151},"_164-项目总结","16.4 项目总结",[26,143154,143155,143158,143161,143164],{},[29,143156,143157],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143159,143160],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143162,143163],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143165,143166],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2643,143168],{"style":127531,"src":143169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143171,143172],{"start":425},[29,143173,143174],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2643,143176],{"style":127531,"src":143177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143179,143180],{"start":2395},[29,143181,143182],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2643,143184],{"style":127531,"src":143185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[60,143187,143188],{"className":128422,"code":137832,"language":128424,"meta":66,"style":66},[39,143189,143190],{"__ignoreMap":66},[84,143191,143192,143194,143196,143198,143200,143202,143204,143206,143208,143210,143212,143214],{"class":86,"line":87},[84,143193,2218],{"class":154},[84,143195,54970],{"class":52449},[84,143197,54973],{"class":90},[84,143199,867],{"class":154},[84,143201,63845],{"class":158},[84,143203,16090],{"class":90},[84,143205,867],{"class":154},[84,143207,137853],{"class":158},[84,143209,62166],{"class":90},[84,143211,867],{"class":154},[84,143213,137860],{"class":158},[84,143215,52456],{"class":154},[26,143217,143218,143221],{"start":2401},[29,143219,143220],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143222,143223],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1222,143225,143226],{},"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":66,"searchDepth":98,"depth":98,"links":143228},[143229,143234,143241,143249],{"id":140855,"depth":98,"text":140856,"children":143230},[143231,143232,143233],{"id":140859,"depth":106,"text":140860},{"id":141590,"depth":106,"text":141591},{"id":141903,"depth":106,"text":141904},{"id":142203,"depth":98,"text":142204,"children":143235},[143236,143237,143239],{"id":142207,"depth":106,"text":142208},{"id":142225,"depth":106,"text":143238},"16.2.2 列表页 header 和 nav 修改",{"id":142509,"depth":106,"text":143240},"16.2.3 列表页主体 sk_container",{"id":142701,"depth":98,"text":142702,"children":143242},[143243,143244,143246,143248],{"id":142716,"depth":106,"text":142717},{"id":142728,"depth":106,"text":143245},"16.3.2 header 头部实现",{"id":142807,"depth":106,"text":143247},"16.3.3 registerarea 主体模块实现",{"id":143085,"depth":106,"text":143086},{"id":143151,"depth":98,"text":143152},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140847,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143256,"title":143257,"body":143258,"description":1249,"extension":1250,"meta":143366,"navigation":1252,"path":143367,"seo":143368,"stem":143369,"__hash__":143370},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143259,"toc":143361},[143260,143263,143267,143270,143273,143282,143291,143295,143300,143307,143325,143328,143331,143334,143337,143340,143343,143346,143349,143352,143355,143358],[10,143261,143257],{"id":143262},"_17-web服务器与网站发布",[14,143264,143266],{"id":143265},"_171-web服务器","17.1 Web服务器",[19,143268,143269],{},"把自己网站上传到服务器上，可以让其他人访问",[2643,143271],{"style":127531,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143274,143275,143278,143279],{},[1464,143276,143277],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1464,143280,143281],{},"Web 服务器等",[19,143283,143284,143285,102156,143288,26903],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1464,143286,143287],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1464,143289,143290],{},"远程服务器",[198,143292,143294],{"id":143293},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143296,143297],{},[1464,143298,143299],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143301,143302,143303],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[208,143304,143305],{"href":143305,"rel":143306},"http:\u002F\u002Ffree.3v.do\u002F",[212],[2315,143308,143309,143312,143315,143322],{},[29,143310,143311],{},"去免费空间网站注册账号。",[29,143313,143314],{},"记录下主机名、用户名、密码、域名。",[29,143316,143317,143318,143321],{},"利用 ",[39,143319,143320],{},"utftp"," 软件 上传网站到远程服务器",[29,143323,143324],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143326,143327],{},"使用软件上传，对上传软件文件进行解压",[2643,143329],{"style":127531,"src":143330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2643,143332],{"style":127531,"src":143333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143335,143336],{},"输入刚刚申请的服务器账号信息：",[2643,143338],{"style":127531,"src":143339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2643,143341],{"style":127531,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2643,143344],{"style":127531,"src":143345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2643,143347],{"style":127531,"src":143348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143350,143351],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2643,143353],{"style":127531,"src":143354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143356,143357],{},"浏览器输入域名即可访问",[19,143359,143360],{},"首页一定必须是index",{"title":66,"searchDepth":98,"depth":98,"links":143362},[143363],{"id":143265,"depth":98,"text":143266,"children":143364},[143365],{"id":143293,"depth":106,"text":143294},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143257,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143372,"title":143373,"body":143374,"description":1249,"extension":1250,"meta":144301,"navigation":1252,"path":144302,"seo":144303,"stem":144304,"__hash__":144305},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143375,"toc":144284},[143376,143379,143383,143386,143389,143400,143403,143407,143411,143416,143419,143422,143425,143428,143432,143458,143462,143466,143469,143472,143476,143509,143513,143516,143519,143583,143587,143591,143594,143597,143600,143604,143649,143653,143656,143686,143690,143694,143697,143700,143704,143707,143776,143779,143887,143889,143895,143899,143902,143905,144001,144004,144008,144032,144036,144039,144043,144046,144050,144053,144056,144059,144062,144066,144069,144072,144076,144080,144083,144086,144089,144092,144096,144099,144103,144106,144109,144154,144158,144162,144165,144168,144171,144203,144207,144210,144244,144248,144251,144281],[10,143377,143373],{"id":143378},"_18-2d动画与3d转换",[14,143380,143382],{"id":143381},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143384,143385],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143387,143388],{},"转换（transform）你可以简单理解为变形",[2315,143390,143391,143394,143397],{},[29,143392,143393],{},"移动：translate",[29,143395,143396],{},"旋转：rotate",[29,143398,143399],{},"缩放：scale",[2643,143401],{"style":127531,"src":143402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[198,143404,143406],{"id":143405},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23168,143408,143410],{"id":143409},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143412,143413,143414],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1464,143415,134334],{},[2643,143417],{"style":127531,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143420,143421],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143423,143424],{},"对于行内元素无效",[19,143426,143427],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23168,143429,143431],{"id":143430},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[60,143433,143434],{"className":127675,"code":139864,"language":127677,"meta":66,"style":66},[39,143435,143436,143442,143454],{"__ignoreMap":66},[84,143437,143438,143440],{"class":86,"line":87},[84,143439,52760],{"class":52449},[84,143441,16742],{"class":154},[84,143443,143444,143446,143448,143450,143452],{"class":86,"line":98},[84,143445,71616],{"class":94},[84,143447,52586],{"class":154},[84,143449,1504],{"class":94},[84,143451,52705],{"class":94},[84,143453,2471],{"class":154},[84,143455,143456],{"class":86,"line":106},[84,143457,2746],{"class":154},[198,143459,143461],{"id":143460},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23168,143463,143465],{"id":143464},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143467,143468],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2643,143470],{"style":127531,"src":143471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23168,143473,143475],{"id":143474},"_18122-旋转效果","18.1.2.2 旋转效果",[60,143477,143479],{"className":127675,"code":143478,"language":127677,"meta":66,"style":66},"div {\n  transform: rotate(45deg);\n}\n",[39,143480,143481,143487,143505],{"__ignoreMap":66},[84,143482,143483,143485],{"class":86,"line":87},[84,143484,52760],{"class":52449},[84,143486,16742],{"class":154},[84,143488,143489,143491,143493,143496,143498,143500,143503],{"class":86,"line":98},[84,143490,137659],{"class":94},[84,143492,52586],{"class":154},[84,143494,143495],{"class":94},"rotate",[84,143497,155],{"class":154},[84,143499,1838],{"class":94},[84,143501,143502],{"class":129},"deg",[84,143504,3897],{"class":154},[84,143506,143507],{"class":86,"line":106},[84,143508,2746],{"class":154},[23168,143510,143512],{"id":143511},"_18123-三角做法","18.1.2.3 三角做法",[19,143514,143515],{},"该下标当经过最外层大盒子时会实现向上反转",[2643,143517],{"style":127531,"src":143518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[60,143520,143521],{"className":127675,"code":136195,"language":127677,"meta":66,"style":66},[39,143522,143523,143527,143533,143543,143553,143569,143579],{"__ignoreMap":66},[84,143524,143525],{"class":86,"line":87},[84,143526,136202],{"class":1378},[84,143528,143529,143531],{"class":86,"line":98},[84,143530,136207],{"class":90},[84,143532,16742],{"class":154},[84,143534,143535,143537,143539,143541],{"class":86,"line":106},[84,143536,71714],{"class":94},[84,143538,52586],{"class":154},[84,143540,1504],{"class":94},[84,143542,2471],{"class":154},[84,143544,143545,143547,143549,143551],{"class":86,"line":112},[84,143546,71934],{"class":94},[84,143548,52586],{"class":154},[84,143550,1504],{"class":94},[84,143552,2471],{"class":154},[84,143554,143555,143557,143559,143561,143563,143565,143567],{"class":86,"line":425},[84,143556,72042],{"class":94},[84,143558,52586],{"class":154},[84,143560,1756],{"class":94},[84,143562,52641],{"class":129},[84,143564,52670],{"class":94},[84,143566,65137],{"class":94},[84,143568,2471],{"class":154},[84,143570,143571,143573,143575,143577],{"class":86,"line":2395},[84,143572,136250],{"class":94},[84,143574,52586],{"class":154},[84,143576,63515],{"class":94},[84,143578,2471],{"class":154},[84,143580,143581],{"class":86,"line":2401},[84,143582,2746],{"class":154},[198,143584,143586],{"id":143585},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23168,143588,143590],{"id":143589},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143592,143593],{},"设置中心点",[2643,143595],{"style":127531,"src":143596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143598,143599],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23168,143601,143603],{"id":143602},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[60,143605,143607],{"className":127675,"code":143606,"language":127677,"meta":66,"style":66},"\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",[39,143608,143609,143614,143620,143635,143640,143645],{"__ignoreMap":66},[84,143610,143611],{"class":86,"line":87},[84,143612,143613],{"class":1378},"\u002F* 转换中心点 *\u002F\n",[84,143615,143616,143618],{"class":86,"line":98},[84,143617,52760],{"class":52449},[84,143619,16742],{"class":154},[84,143621,143622,143625,143627,143629,143631,143633],{"class":86,"line":106},[84,143623,143624],{"class":94},"  transform-origin",[84,143626,52586],{"class":154},[84,143628,52741],{"class":94},[84,143630,18314],{"class":94},[84,143632,131538],{"class":154},[84,143634,136348],{"class":1378},[84,143636,143637],{"class":86,"line":112},[84,143638,143639],{"class":1378},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[84,143641,143642],{"class":86,"line":425},[84,143643,143644],{"class":1378},"  \u002F* transform-origin: left top; *\u002F\n",[84,143646,143647],{"class":86,"line":2395},[84,143648,2746],{"class":154},[23168,143650,143652],{"id":143651},"_18133-旋转案例","18.1.3.3 旋转案例",[2643,143654],{"style":127531,"src":143655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[60,143657,143658],{"className":127675,"code":143478,"language":127677,"meta":66,"style":66},[39,143659,143660,143666,143682],{"__ignoreMap":66},[84,143661,143662,143664],{"class":86,"line":87},[84,143663,52760],{"class":52449},[84,143665,16742],{"class":154},[84,143667,143668,143670,143672,143674,143676,143678,143680],{"class":86,"line":98},[84,143669,137659],{"class":94},[84,143671,52586],{"class":154},[84,143673,143495],{"class":94},[84,143675,155],{"class":154},[84,143677,1838],{"class":94},[84,143679,143502],{"class":129},[84,143681,3897],{"class":154},[84,143683,143684],{"class":86,"line":106},[84,143685,2746],{"class":154},[198,143687,143689],{"id":143688},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23168,143691,143693],{"id":143692},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143695,143696],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2643,143698],{"style":127531,"src":143699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23168,143701,143703],{"id":143702},"_18142-分页按钮","18.1.4.2 分页按钮",[2643,143705],{"style":127531,"src":143706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[60,143708,143710],{"className":127675,"code":143709,"language":127677,"meta":66,"style":66},"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",[39,143711,143712,143718,143734,143738,143742,143747,143753,143767,143772],{"__ignoreMap":66},[84,143713,143714,143716],{"class":86,"line":87},[84,143715,52760],{"class":52449},[84,143717,16742],{"class":154},[84,143719,143720,143722,143724,143727,143729,143732],{"class":86,"line":98},[84,143721,137659],{"class":94},[84,143723,52586],{"class":154},[84,143725,143726],{"class":94},"scale",[84,143728,155],{"class":154},[84,143730,143731],{"class":94},"1.2",[84,143733,3897],{"class":154},[84,143735,143736],{"class":86,"line":106},[84,143737,2746],{"class":154},[84,143739,143740],{"class":86,"line":112},[84,143741,137136],{"class":154},[84,143743,143744],{"class":86,"line":425},[84,143745,143746],{"class":1378},"\u002F* 2D 缩放 *\u002F\n",[84,143748,143749,143751],{"class":86,"line":2395},[84,143750,52760],{"class":52449},[84,143752,16742],{"class":154},[84,143754,143755,143757,143759,143761,143763,143765],{"class":86,"line":2401},[84,143756,137659],{"class":94},[84,143758,52586],{"class":154},[84,143760,143726],{"class":94},[84,143762,155],{"class":154},[84,143764,143731],{"class":94},[84,143766,3897],{"class":154},[84,143768,143769],{"class":86,"line":2492},[84,143770,143771],{"class":1378},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[84,143773,143774],{"class":86,"line":2498},[84,143775,2746],{"class":154},[19,143777,143778],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[60,143780,143782],{"className":127675,"code":143781,"language":127677,"meta":66,"style":66},"\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",[39,143783,143784,143789,143799,143820,143841,143845,143850,143856,143883],{"__ignoreMap":66},[84,143785,143786],{"class":86,"line":87},[84,143787,143788],{"class":1378},"\u002F* 定义动画 *\u002F\n",[84,143790,143791,143794,143797],{"class":86,"line":98},[84,143792,143793],{"class":129},"@keyframes",[84,143795,143796],{"class":928}," move",[84,143798,16742],{"class":154},[84,143800,143801,143804,143806,143808,143810,143813,143815,143817],{"class":86,"line":106},[84,143802,143803],{"class":90},"  0%",[84,143805,80953],{"class":154},[84,143807,49283],{"class":94},[84,143809,52586],{"class":154},[84,143811,143812],{"class":94},"translateX",[84,143814,155],{"class":154},[84,143816,1504],{"class":94},[84,143818,143819],{"class":154},"); }\n",[84,143821,143822,143825,143827,143829,143831,143833,143835,143837,143839],{"class":86,"line":112},[84,143823,143824],{"class":90},"  100%",[84,143826,80953],{"class":154},[84,143828,49283],{"class":94},[84,143830,52586],{"class":154},[84,143832,143812],{"class":94},[84,143834,155],{"class":154},[84,143836,821],{"class":94},[84,143838,52641],{"class":129},[84,143840,143819],{"class":154},[84,143842,143843],{"class":86,"line":425},[84,143844,2746],{"class":154},[84,143846,143847],{"class":86,"line":2395},[84,143848,143849],{"class":1378},"\u002F* 调用动画 *\u002F\n",[84,143851,143852,143854],{"class":86,"line":2401},[84,143853,52760],{"class":52449},[84,143855,16742],{"class":154},[84,143857,143858,143861,143863,143865,143867,143869,143871,143873,143875,143878,143881],{"class":86,"line":2492},[84,143859,143860],{"class":94},"  animation",[84,143862,52586],{"class":154},[84,143864,136361],{"class":94},[84,143866,133],{"class":94},[84,143868,2003],{"class":129},[84,143870,79826],{"class":94},[84,143872,5271],{"class":94},[84,143874,2003],{"class":129},[84,143876,143877],{"class":94}," infinite",[84,143879,143880],{"class":94}," alternate",[84,143882,2471],{"class":154},[84,143884,143885],{"class":86,"line":2498},[84,143886,2746],{"class":154},[19,143888,143778],{},[60,143890,143893],{"className":143891,"code":143892,"language":65},[63],"\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",[39,143894,143892],{"__ignoreMap":66},[23168,143896,143898],{"id":143897},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143900,143901],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2643,143903],{"style":127531,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[60,143906,143907],{"className":127675,"code":143781,"language":127677,"meta":66,"style":66},[39,143908,143909,143913,143921,143939,143959,143963,143967,143973,143997],{"__ignoreMap":66},[84,143910,143911],{"class":86,"line":87},[84,143912,143788],{"class":1378},[84,143914,143915,143917,143919],{"class":86,"line":98},[84,143916,143793],{"class":129},[84,143918,143796],{"class":928},[84,143920,16742],{"class":154},[84,143922,143923,143925,143927,143929,143931,143933,143935,143937],{"class":86,"line":106},[84,143924,143803],{"class":90},[84,143926,80953],{"class":154},[84,143928,49283],{"class":94},[84,143930,52586],{"class":154},[84,143932,143812],{"class":94},[84,143934,155],{"class":154},[84,143936,1504],{"class":94},[84,143938,143819],{"class":154},[84,143940,143941,143943,143945,143947,143949,143951,143953,143955,143957],{"class":86,"line":112},[84,143942,143824],{"class":90},[84,143944,80953],{"class":154},[84,143946,49283],{"class":94},[84,143948,52586],{"class":154},[84,143950,143812],{"class":94},[84,143952,155],{"class":154},[84,143954,821],{"class":94},[84,143956,52641],{"class":129},[84,143958,143819],{"class":154},[84,143960,143961],{"class":86,"line":425},[84,143962,2746],{"class":154},[84,143964,143965],{"class":86,"line":2395},[84,143966,143849],{"class":1378},[84,143968,143969,143971],{"class":86,"line":2401},[84,143970,52760],{"class":52449},[84,143972,16742],{"class":154},[84,143974,143975,143977,143979,143981,143983,143985,143987,143989,143991,143993,143995],{"class":86,"line":2492},[84,143976,143860],{"class":94},[84,143978,52586],{"class":154},[84,143980,136361],{"class":94},[84,143982,133],{"class":94},[84,143984,2003],{"class":129},[84,143986,79826],{"class":94},[84,143988,5271],{"class":94},[84,143990,2003],{"class":129},[84,143992,143877],{"class":94},[84,143994,143880],{"class":94},[84,143996,2471],{"class":154},[84,143998,143999],{"class":86,"line":2498},[84,144000,2746],{"class":154},[19,144002,144003],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[198,144005,144007],{"id":144006},"_1823-知识点回顾","18.2.3 知识点回顾",[60,144009,144010],{"className":127675,"code":129844,"language":127677,"meta":66,"style":66},[39,144011,144012,144018,144028],{"__ignoreMap":66},[84,144013,144014,144016],{"class":86,"line":87},[84,144015,52760],{"class":52449},[84,144017,16742],{"class":154},[84,144019,144020,144022,144024,144026],{"class":86,"line":98},[84,144021,129857],{"class":94},[84,144023,52586],{"class":154},[84,144025,62882],{"class":94},[84,144027,2471],{"class":154},[84,144029,144030],{"class":86,"line":106},[84,144031,2746],{"class":154},[14,144033,144035],{"id":144034},"_183-3d-转换","18.3 3D 转换",[19,144037,144038],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[198,144040,144042],{"id":144041},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2643,144044],{"style":127531,"src":144045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[198,144047,144049],{"id":144048},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2643,144051],{"style":127531,"src":144052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144054,144055],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144057,144058],{},"translate3d的效果需要搭配透视perspective来使用",[2643,144060],{"style":127531,"src":144061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[198,144063,144065],{"id":144064},"_1833-透视-perspective","18.3.3 透视 perspective",[2643,144067],{"style":127531,"src":144068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144070,144071],{},"透视写在父盒子上，单位为像素",[198,144073,144075],{"id":144074},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23168,144077,144079],{"id":144078},"_18341-分开解释","18.3.4.1 分开解释",[2643,144081],{"style":127531,"src":144082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2643,144084],{"style":127531,"src":144085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2643,144087],{"style":127531,"src":144088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144090,144091],{},"总结来说就是左手原则",[23168,144093,144095],{"id":144094},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2643,144097],{"style":127531,"src":144098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[198,144100,144102],{"id":144101},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2643,144104],{"style":127531,"src":144105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2643,144107],{"style":127531,"src":144108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[60,144110,144112],{"className":127675,"code":144111,"language":127677,"meta":66,"style":66},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[39,144113,144114,144120,144133,144150],{"__ignoreMap":66},[84,144115,144116,144118],{"class":86,"line":87},[84,144117,52760],{"class":52449},[84,144119,16742],{"class":154},[84,144121,144122,144125,144127,144129,144131],{"class":86,"line":98},[84,144123,144124],{"class":94},"  perspective",[84,144126,52586],{"class":154},[84,144128,66220],{"class":94},[84,144130,52641],{"class":129},[84,144132,2471],{"class":154},[84,144134,144135,144137,144139,144142,144144,144146,144148],{"class":86,"line":106},[84,144136,137659],{"class":94},[84,144138,52586],{"class":154},[84,144140,144141],{"class":94},"rotateX",[84,144143,155],{"class":154},[84,144145,1838],{"class":94},[84,144147,143502],{"class":129},[84,144149,3897],{"class":154},[84,144151,144152],{"class":86,"line":112},[84,144153,2746],{"class":154},[198,144155,144157],{"id":144156},"_1836-案例","18.3.6 案例",[23168,144159,144161],{"id":144160},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2643,144163],{"style":127531,"src":144164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2643,144166],{"style":127531,"src":144167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2643,144169],{"style":127531,"src":144170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[60,144172,144174],{"className":127675,"code":144173,"language":127677,"meta":66,"style":66},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[39,144175,144176,144181,144187,144199],{"__ignoreMap":66},[84,144177,144178],{"class":86,"line":87},[84,144179,144180],{"class":1378},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[84,144182,144183,144185],{"class":86,"line":98},[84,144184,134672],{"class":90},[84,144186,16742],{"class":154},[84,144188,144189,144191,144193,144195,144197],{"class":86,"line":106},[84,144190,144124],{"class":94},[84,144192,52586],{"class":154},[84,144194,66220],{"class":94},[84,144196,52641],{"class":129},[84,144198,2471],{"class":154},[84,144200,144201],{"class":86,"line":112},[84,144202,2746],{"class":154},[23168,144204,144206],{"id":144205},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2643,144208],{"style":127531,"src":144209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[60,144211,144212],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,144213,144214,144218,144232,144236],{"__ignoreMap":66},[84,144215,144216],{"class":86,"line":87},[84,144217,131786],{"class":1378},[84,144219,144220,144222,144224,144226,144228,144230],{"class":86,"line":98},[84,144221,2218],{"class":154},[84,144223,52760],{"class":52449},[84,144225,54635],{"class":90},[84,144227,867],{"class":154},[84,144229,131799],{"class":158},[84,144231,52456],{"class":154},[84,144233,144234],{"class":86,"line":106},[84,144235,131806],{"class":154},[84,144237,144238,144240,144242],{"class":86,"line":112},[84,144239,52934],{"class":154},[84,144241,52760],{"class":52449},[84,144243,52456],{"class":154},[23168,144245,144247],{"id":144246},"_18363-旋转木马","18.3.6.3 旋转木马",[2643,144249],{"style":127531,"src":144250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[60,144252,144253],{"className":127675,"code":143478,"language":127677,"meta":66,"style":66},[39,144254,144255,144261,144277],{"__ignoreMap":66},[84,144256,144257,144259],{"class":86,"line":87},[84,144258,52760],{"class":52449},[84,144260,16742],{"class":154},[84,144262,144263,144265,144267,144269,144271,144273,144275],{"class":86,"line":98},[84,144264,137659],{"class":94},[84,144266,52586],{"class":154},[84,144268,143495],{"class":94},[84,144270,155],{"class":154},[84,144272,1838],{"class":94},[84,144274,143502],{"class":129},[84,144276,3897],{"class":154},[84,144278,144279],{"class":86,"line":106},[84,144280,2746],{"class":154},[1222,144282,144283],{},"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":66,"searchDepth":98,"depth":98,"links":144285},[144286,144293],{"id":143381,"depth":98,"text":143382,"children":144287},[144288,144289,144290,144291,144292],{"id":143405,"depth":106,"text":143406},{"id":143460,"depth":106,"text":143461},{"id":143585,"depth":106,"text":143586},{"id":143688,"depth":106,"text":143689},{"id":144006,"depth":106,"text":144007},{"id":144034,"depth":98,"text":144035,"children":144294},[144295,144296,144297,144298,144299,144300],{"id":144041,"depth":106,"text":144042},{"id":144048,"depth":106,"text":144049},{"id":144064,"depth":106,"text":144065},{"id":144074,"depth":106,"text":144075},{"id":144101,"depth":106,"text":144102},{"id":144156,"depth":106,"text":144157},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143373,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144307,"title":144308,"body":144309,"description":1249,"extension":1250,"meta":144512,"navigation":1252,"path":144513,"seo":144514,"stem":144515,"__hash__":144516},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144310,"toc":144501},[144311,144314,144318,144321,144324,144328,144331,144334,144337,144341,144344,144348,144351,144355,144358,144362,144376,144380,144405,144408,144411,144428,144432,144436,144439,144442,144446,144449,144452,144470,144474,144477,144491,144495,144498],[10,144312,144308],{"id":144313},"_19-移动端基础-前缀现状与视口",[14,144315,144317],{"id":144316},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2643,144319],{"style":127531,"src":144320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144322,144323],{},"意思就是加个前缀，增加兼容性",[14,144325,144327],{"id":144326},"_192-移动端现状认识","19.2 移动端现状认识",[2643,144329],{"style":127531,"src":144330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144332,144333],{},"调试方法：",[2643,144335],{"style":127531,"src":144336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144338,144340],{"id":144339},"_193-视口","19.3 视口",[19,144342,144343],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[198,144345,144347],{"id":144346},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2643,144349],{"style":127531,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[198,144352,144354],{"id":144353},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2643,144356],{"style":127531,"src":144357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[198,144359,144361],{"id":144360},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2315,144363,144364,144367,144370,144373],{},[29,144365,144366],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144368,144369],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144371,144372],{},"需要手动添写meta视口标签通知浏览器操作",[29,144374,144375],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[198,144377,144379],{"id":144378},"_1934-meta视口标签","19.3.4 meta视口标签",[60,144381,144383],{"className":128422,"code":144382,"language":128424,"meta":66,"style":66},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[39,144384,144385],{"__ignoreMap":66},[84,144386,144387,144389,144391,144393,144395,144397,144399,144401,144403],{"class":86,"line":87},[84,144388,2218],{"class":154},[84,144390,52493],{"class":52449},[84,144392,16090],{"class":90},[84,144394,867],{"class":154},[84,144396,52540],{"class":158},[84,144398,52520],{"class":90},[84,144400,867],{"class":154},[84,144402,52547],{"class":158},[84,144404,52456],{"class":154},[2643,144406],{"style":127531,"src":144407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144409,144410],{},"标准视口设置：",[26,144412,144413,144416,144419,144422,144425],{},[29,144414,144415],{},"视口宽度和设备保持一致",[29,144417,144418],{},"视口的默认缩放比例1.0",[29,144420,144421],{},"不允许用户自行缩放",[29,144423,144424],{},"最大允许的缩放比例1.0",[29,144426,144427],{},"最小允许的缩放比例1.0",[198,144429,144431],{"id":144430},"_1935-二倍图","19.3.5 二倍图",[23168,144433,144435],{"id":144434},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2643,144437],{"style":127531,"src":144438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2643,144440],{"style":127531,"src":144441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23168,144443,144445],{"id":144444},"_19352-多倍图","19.3.5.2 多倍图",[2643,144447],{"style":127531,"src":144448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144450,144451],{},"二倍图法，代码如下：",[60,144453,144455],{"className":127675,"code":144454,"language":127677,"meta":66,"style":66},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[39,144456,144457,144462],{"__ignoreMap":66},[84,144458,144459],{"class":86,"line":87},[84,144460,144461],{"class":1378},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[84,144463,144464,144467],{"class":86,"line":98},[84,144465,144466],{"class":52449},"background-size",[84,144468,144469],{"class":154},": 50% 50%;\n",[23168,144471,144473],{"id":144472},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2643,144475],{"style":127531,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,144478,144479,144482,144485,144488],{},[29,144480,144481],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144483,144484],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144486,144487],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144489,144490],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23168,144492,144494],{"id":144493},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2643,144496],{"style":127531,"src":144497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1222,144499,144500],{},"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":66,"searchDepth":98,"depth":98,"links":144502},[144503,144504,144505],{"id":144316,"depth":98,"text":144317},{"id":144326,"depth":98,"text":144327},{"id":144339,"depth":98,"text":144340,"children":144506},[144507,144508,144509,144510,144511],{"id":144346,"depth":106,"text":144347},{"id":144353,"depth":106,"text":144354},{"id":144360,"depth":106,"text":144361},{"id":144378,"depth":106,"text":144379},{"id":144430,"depth":106,"text":144431},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144308,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144518,"title":144519,"body":144520,"description":1249,"extension":1250,"meta":145397,"navigation":1252,"path":145398,"seo":145399,"stem":145400,"__hash__":145401},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144521,"toc":145381},[144522,144525,144529,144536,144539,144546,144549,144554,144557,144561,144565,144572,144575,144578,144582,144585,144588,144591,144594,144597,144601,144604,144608,144610,144613,144616,144619,144622,144624,144627,144629,144659,144661,144691,144695,144698,144702,144705,144722,144725,144728,144804,144806,144809,144812,144815,144818,144820,144823,144826,144830,144852,144855,144858,144862,144865,144871,144874,144878,144881,144884,144888,144891,144894,144897,144901,144904,144907,144910,144913,144917,144920,144924,144931,144934,144937,144940,144943,144953,144956,144959,144966,144969,144973,144976,144979,144983,144986,144989,144992,145037,145040,145043,145046,145048,145177,145179,145217,145220,145223,145225,145343,145345,145379],[10,144523,144519],{"id":144524},"_20-移动端布局实战上篇",[14,144526,144528],{"id":144527},"_201-移动端主流方案","20.1 移动端主流方案",[26,144530,144531],{},[29,144532,144533],{},[1464,144534,144535],{},"单独移动端页面（主流）",[2643,144537],{"style":127531,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,144540,144541],{"start":98},[29,144542,144543],{},[1464,144544,144545],{},"响应式兼容PC移动端",[2643,144547],{"style":127531,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,144550,144551],{"start":106},[29,144552,144553],{},"两种页面选型布局方式",[2643,144555],{"style":127531,"src":144556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144558,144560],{"id":144559},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[198,144562,144564],{"id":144563},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144566,144567,144568],{},"官网地址： ",[208,144569,144570],{"href":144570,"rel":144571},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[212],[2643,144573],{"style":127531,"src":144574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2643,144576],{"style":127531,"src":144577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[198,144579,144581],{"id":144580},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2643,144583],{"style":127531,"src":144584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2643,144586],{"style":127531,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144589,144590],{},"去除高亮：",[19,144592,144593],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144595,144596],{},"-webkit- tap-highlight-color: transparent;",[14,144598,144600],{"id":144599},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2643,144602],{"style":127531,"src":144603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144605,144607],{"id":144606},"_204-流式布局案例","20.4 流式布局案例",[19,144609,1352],{},[19,144611,144612],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144614,144615],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144617,144618],{},"图片格式：",[2643,144620],{"style":127531,"src":144621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144623,136718],{},[2643,144625],{"style":127531,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144628,141045],{},[60,144630,144631],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,144632,144633],{"__ignoreMap":66},[84,144634,144635,144637,144639,144641,144643,144645,144647,144649,144651,144653,144655,144657],{"class":86,"line":87},[84,144636,2218],{"class":154},[84,144638,2643],{"class":52449},[84,144640,56386],{"class":90},[84,144642,867],{"class":154},[84,144644,135192],{"class":158},[84,144646,56394],{"class":90},[84,144648,867],{"class":154},[84,144650,135199],{"class":158},[84,144652,135202],{"class":90},[84,144654,867],{"class":154},[84,144656,135207],{"class":158},[84,144658,52456],{"class":154},[19,144660,141134],{},[60,144662,144663],{"className":128422,"code":135177,"language":128424,"meta":66,"style":66},[39,144664,144665],{"__ignoreMap":66},[84,144666,144667,144669,144671,144673,144675,144677,144679,144681,144683,144685,144687,144689],{"class":86,"line":87},[84,144668,2218],{"class":154},[84,144670,2643],{"class":52449},[84,144672,56386],{"class":90},[84,144674,867],{"class":154},[84,144676,135192],{"class":158},[84,144678,56394],{"class":90},[84,144680,867],{"class":154},[84,144682,135199],{"class":158},[84,144684,135202],{"class":90},[84,144686,867],{"class":154},[84,144688,135207],{"class":158},[84,144690,52456],{"class":154},[14,144692,144694],{"id":144693},"_205-flex布局","20.5 flex布局",[2643,144696],{"style":127531,"src":144697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[198,144699,144701],{"id":144700},"_2051-布局原理","20.5.1 布局原理",[19,144703,144704],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2315,144706,144707,144710,144713,144716,144719],{},[29,144708,144709],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,144711,144712],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,144714,144715],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,144717,144718],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,144720,144721],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144723,144724],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144726,144727],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[60,144729,144731],{"className":127675,"code":144730,"language":127677,"meta":66,"style":66},"\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",[39,144732,144733,144738,144745,144755,144767,144778,144789,144800],{"__ignoreMap":66},[84,144734,144735],{"class":86,"line":87},[84,144736,144737],{"class":1378},"\u002F* Flex 弹性布局 *\u002F\n",[84,144739,144740,144743],{"class":86,"line":98},[84,144741,144742],{"class":90},".container",[84,144744,16742],{"class":154},[84,144746,144747,144749,144751,144753],{"class":86,"line":106},[84,144748,129291],{"class":94},[84,144750,52586],{"class":154},[84,144752,52626],{"class":94},[84,144754,2471],{"class":154},[84,144756,144757,144760,144762,144765],{"class":86,"line":112},[84,144758,144759],{"class":94},"  flex-direction",[84,144761,52586],{"class":154},[84,144763,144764],{"class":94},"row",[84,144766,2471],{"class":154},[84,144768,144769,144772,144774,144776],{"class":86,"line":425},[84,144770,144771],{"class":94},"  justify-content",[84,144773,52586],{"class":154},[84,144775,52817],{"class":94},[84,144777,2471],{"class":154},[84,144779,144780,144783,144785,144787],{"class":86,"line":2395},[84,144781,144782],{"class":94},"  align-items",[84,144784,52586],{"class":154},[84,144786,52741],{"class":94},[84,144788,2471],{"class":154},[84,144790,144791,144794,144796,144798],{"class":86,"line":2401},[84,144792,144793],{"class":94},"  flex-wrap",[84,144795,52586],{"class":154},[84,144797,79756],{"class":94},[84,144799,2471],{"class":154},[84,144801,144802],{"class":86,"line":2492},[84,144803,2746],{"class":154},[19,144805,71599],{},[19,144807,144808],{},".form-item .male-label {",[19,144810,144811],{},"   margin-right: 20px;",[19,144813,144814],{},"   display: inline-flex;",[19,144816,144817],{},"   align-items: center;",[19,144819,2254],{},[2643,144821],{"style":127531,"src":144822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2643,144824],{"style":127531,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[198,144827,144829],{"id":144828},"_2052-常见父项属性","20.5.2 常见父项属性",[26,144831,144832,144835,144838,144841,144844,144847,144850],{},[29,144833,144834],{},"flex-direction：设置主轴的方向",[29,144836,144837],{},"justify-content：设置主轴上的子元素排列方式",[29,144839,144840],{},"flex-wrap：设置子元素是否换行",[29,144842,144843],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,144845,144846],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,144848,144849],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,144851,144834],{},[2643,144853],{"style":127531,"src":144854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2643,144856],{"style":127531,"src":144857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,144859,144860],{"start":98},[29,144861,144837],{},[2643,144863],{"style":127531,"src":144864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144866,144867,144870],{},[39,144868,144869],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144872,144873],{},"跟着主轴走",[26,144875,144876],{"start":106},[29,144877,144840],{},[2643,144879],{"style":127531,"src":144880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144882,144883],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,144885,144886],{"start":112},[29,144887,144843],{},[2643,144889],{"style":127531,"src":144890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144892,144893],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144895,144896],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,144898,144899],{"start":425},[29,144900,144846],{},[2643,144902],{"style":127531,"src":144903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144905,144906],{},"align-items与align-content之间的区别：",[19,144908,144909],{},"单找items，多找content",[2643,144911],{"style":127531,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,144914,144915],{"start":2395},[29,144916,144849],{},[2643,144918],{"style":127531,"src":144919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[198,144921,144923],{"id":144922},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,144925,144926],{},[29,144927,144928],{},[1464,144929,144930],{},"flex 属性",[19,144932,144933],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2643,144935],{"style":127531,"src":144936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144938,144939],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144941,144942],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,144944,144945],{"start":98},[29,144946,144947,14965,144950],{},[1464,144948,144949],{},"align-self",[1464,144951,144952],{},"控制子项自己在侧轴上的排列方式",[2643,144954],{"style":127531,"src":144955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144957,144958],{},"单个子盒子在父盒子侧轴上的排列方式",[26,144960,144961],{"start":106},[29,144962,144963,144965],{},[1464,144964,96443],{}," 属性定义项目的排列顺序",[2643,144967],{"style":127531,"src":144968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[198,144970,144972],{"id":144971},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2643,144974],{"style":127531,"src":144975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144977,144978],{},"必须要添加浏览器的私有前缀",[198,144980,144982],{"id":144981},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144984,144985],{},"学到最重要的知识：",[19,144987,144988],{},"flex处理这样的布局思路",[2643,144990],{"style":127531,"src":144991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[60,144993,144995],{"className":127675,"code":144994,"language":127677,"meta":66,"style":66},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[39,144996,144997,145003,145013,145023,145033],{"__ignoreMap":66},[84,144998,144999,145001],{"class":86,"line":87},[84,145000,144742],{"class":90},[84,145002,16742],{"class":154},[84,145004,145005,145007,145009,145011],{"class":86,"line":98},[84,145006,129291],{"class":94},[84,145008,52586],{"class":154},[84,145010,52626],{"class":94},[84,145012,2471],{"class":154},[84,145014,145015,145017,145019,145021],{"class":86,"line":106},[84,145016,144771],{"class":94},[84,145018,52586],{"class":154},[84,145020,52741],{"class":94},[84,145022,2471],{"class":154},[84,145024,145025,145027,145029,145031],{"class":86,"line":112},[84,145026,144782],{"class":94},[84,145028,52586],{"class":154},[84,145030,52741],{"class":94},[84,145032,2471],{"class":154},[84,145034,145035],{"class":86,"line":425},[84,145036,2746],{"class":154},[19,145038,145039],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145041,145042],{},"使用属性选择器",[2643,145044],{"style":127531,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145047,70035],{},[60,145049,145051],{"className":128422,"code":145050,"language":128424,"meta":66,"style":66},"\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",[39,145052,145053,145058,145072,145077,145097,145102,145121,145126,145145,145150,145169],{"__ignoreMap":66},[84,145054,145055],{"class":86,"line":87},[84,145056,145057],{"class":1378},"\u003C!-- 携程网移动端案例结构 -->\n",[84,145059,145060,145062,145064,145066,145068,145070],{"class":86,"line":98},[84,145061,2218],{"class":154},[84,145063,52760],{"class":52449},[84,145065,54635],{"class":90},[84,145067,867],{"class":154},[84,145069,93469],{"class":158},[84,145071,52456],{"class":154},[84,145073,145074],{"class":86,"line":106},[84,145075,145076],{"class":1378},"  \u003C!-- 搜索栏 -->\n",[84,145078,145079,145081,145083,145085,145087,145090,145093,145095],{"class":86,"line":112},[84,145080,53293],{"class":154},[84,145082,52760],{"class":52449},[84,145084,54635],{"class":90},[84,145086,867],{"class":154},[84,145088,145089],{"class":158},"\"search-index\"",[84,145091,145092],{"class":154},">...\u003C\u002F",[84,145094,52760],{"class":52449},[84,145096,52456],{"class":154},[84,145098,145099],{"class":86,"line":425},[84,145100,145101],{"class":1378},"  \u003C!-- 焦点图 -->\n",[84,145103,145104,145106,145108,145110,145112,145115,145117,145119],{"class":86,"line":2395},[84,145105,53293],{"class":154},[84,145107,52760],{"class":52449},[84,145109,54635],{"class":90},[84,145111,867],{"class":154},[84,145113,145114],{"class":158},"\"focus\"",[84,145116,145092],{"class":154},[84,145118,52760],{"class":52449},[84,145120,52456],{"class":154},[84,145122,145123],{"class":86,"line":2401},[84,145124,145125],{"class":1378},"  \u003C!-- 主导航 -->\n",[84,145127,145128,145130,145132,145134,145136,145139,145141,145143],{"class":86,"line":2492},[84,145129,53293],{"class":154},[84,145131,52760],{"class":52449},[84,145133,54635],{"class":90},[84,145135,867],{"class":154},[84,145137,145138],{"class":158},"\"local-nav\"",[84,145140,145092],{"class":154},[84,145142,52760],{"class":52449},[84,145144,52456],{"class":154},[84,145146,145147],{"class":86,"line":2498},[84,145148,145149],{"class":1378},"  \u003C!-- 子导航 -->\n",[84,145151,145152,145154,145156,145158,145160,145163,145165,145167],{"class":86,"line":2510},[84,145153,53293],{"class":154},[84,145155,52760],{"class":52449},[84,145157,54635],{"class":90},[84,145159,867],{"class":154},[84,145161,145162],{"class":158},"\"nav-common\"",[84,145164,145092],{"class":154},[84,145166,52760],{"class":52449},[84,145168,52456],{"class":154},[84,145170,145171,145173,145175],{"class":86,"line":2793},[84,145172,52934],{"class":154},[84,145174,52760],{"class":52449},[84,145176,52456],{"class":154},[19,145178,71599],{},[60,145180,145181],{"className":127675,"code":138127,"language":127677,"meta":66,"style":66},[39,145182,145183,145197,145213],{"__ignoreMap":66},[84,145184,145185,145187,145189,145191,145193,145195],{"class":86,"line":87},[84,145186,54970],{"class":52449},[84,145188,2198],{"class":154},[84,145190,104244],{"class":90},[84,145192,867],{"class":129},[84,145194,63845],{"class":158},[84,145196,138144],{"class":154},[84,145198,145199,145201,145203,145205,145207,145209,145211],{"class":86,"line":98},[84,145200,72042],{"class":94},[84,145202,52586],{"class":154},[84,145204,1529],{"class":94},[84,145206,52641],{"class":129},[84,145208,52670],{"class":94},[84,145210,131255],{"class":94},[84,145212,2471],{"class":154},[84,145214,145215],{"class":86,"line":106},[84,145216,2746],{"class":154},[19,145218,145219],{},"总代码和效果展示：",[2643,145221],{"style":127531,"src":145222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145224,70035],{},[60,145226,145227],{"className":128422,"code":145050,"language":128424,"meta":66,"style":66},[39,145228,145229,145233,145247,145251,145269,145273,145291,145295,145313,145317,145335],{"__ignoreMap":66},[84,145230,145231],{"class":86,"line":87},[84,145232,145057],{"class":1378},[84,145234,145235,145237,145239,145241,145243,145245],{"class":86,"line":98},[84,145236,2218],{"class":154},[84,145238,52760],{"class":52449},[84,145240,54635],{"class":90},[84,145242,867],{"class":154},[84,145244,93469],{"class":158},[84,145246,52456],{"class":154},[84,145248,145249],{"class":86,"line":106},[84,145250,145076],{"class":1378},[84,145252,145253,145255,145257,145259,145261,145263,145265,145267],{"class":86,"line":112},[84,145254,53293],{"class":154},[84,145256,52760],{"class":52449},[84,145258,54635],{"class":90},[84,145260,867],{"class":154},[84,145262,145089],{"class":158},[84,145264,145092],{"class":154},[84,145266,52760],{"class":52449},[84,145268,52456],{"class":154},[84,145270,145271],{"class":86,"line":425},[84,145272,145101],{"class":1378},[84,145274,145275,145277,145279,145281,145283,145285,145287,145289],{"class":86,"line":2395},[84,145276,53293],{"class":154},[84,145278,52760],{"class":52449},[84,145280,54635],{"class":90},[84,145282,867],{"class":154},[84,145284,145114],{"class":158},[84,145286,145092],{"class":154},[84,145288,52760],{"class":52449},[84,145290,52456],{"class":154},[84,145292,145293],{"class":86,"line":2401},[84,145294,145125],{"class":1378},[84,145296,145297,145299,145301,145303,145305,145307,145309,145311],{"class":86,"line":2492},[84,145298,53293],{"class":154},[84,145300,52760],{"class":52449},[84,145302,54635],{"class":90},[84,145304,867],{"class":154},[84,145306,145138],{"class":158},[84,145308,145092],{"class":154},[84,145310,52760],{"class":52449},[84,145312,52456],{"class":154},[84,145314,145315],{"class":86,"line":2498},[84,145316,145149],{"class":1378},[84,145318,145319,145321,145323,145325,145327,145329,145331,145333],{"class":86,"line":2510},[84,145320,53293],{"class":154},[84,145322,52760],{"class":52449},[84,145324,54635],{"class":90},[84,145326,867],{"class":154},[84,145328,145162],{"class":158},[84,145330,145092],{"class":154},[84,145332,52760],{"class":52449},[84,145334,52456],{"class":154},[84,145336,145337,145339,145341],{"class":86,"line":2793},[84,145338,52934],{"class":154},[84,145340,52760],{"class":52449},[84,145342,52456],{"class":154},[19,145344,71599],{},[60,145346,145347],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,145348,145349,145353,145367,145371],{"__ignoreMap":66},[84,145350,145351],{"class":86,"line":87},[84,145352,131786],{"class":1378},[84,145354,145355,145357,145359,145361,145363,145365],{"class":86,"line":98},[84,145356,2218],{"class":154},[84,145358,52760],{"class":52449},[84,145360,54635],{"class":90},[84,145362,867],{"class":154},[84,145364,131799],{"class":158},[84,145366,52456],{"class":154},[84,145368,145369],{"class":86,"line":106},[84,145370,131806],{"class":154},[84,145372,145373,145375,145377],{"class":86,"line":112},[84,145374,52934],{"class":154},[84,145376,52760],{"class":52449},[84,145378,52456],{"class":154},[1222,145380,139076],{},{"title":66,"searchDepth":98,"depth":98,"links":145382},[145383,145384,145388,145389,145390],{"id":144527,"depth":98,"text":144528},{"id":144559,"depth":98,"text":144560,"children":145385},[145386,145387],{"id":144563,"depth":106,"text":144564},{"id":144580,"depth":106,"text":144581},{"id":144599,"depth":98,"text":144600},{"id":144606,"depth":98,"text":144607},{"id":144693,"depth":98,"text":144694,"children":145391},[145392,145393,145394,145395,145396],{"id":144700,"depth":106,"text":144701},{"id":144828,"depth":106,"text":144829},{"id":144922,"depth":106,"text":144923},{"id":144971,"depth":106,"text":144972},{"id":144981,"depth":106,"text":144982},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144519,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145403,"title":145404,"body":145405,"description":1249,"extension":1250,"meta":146632,"navigation":1252,"path":146633,"seo":146634,"stem":146635,"__hash__":146636},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145406,"toc":146610},[145407,145410,145414,145418,145421,145424,145428,145433,145436,145439,145442,145445,145448,145505,145508,145513,145516,145519,145523,145534,145538,145541,145544,145551,145556,145560,145563,145569,145572,145576,145579,145586,145589,145592,145599,145602,145609,145612,145615,145622,145625,145628,145630,145647,145651,145654,145657,145660,145664,145667,145670,145673,145676,145679,145682,145684,145687,145690,145752,145755,145865,145872,145878,145881,145884,145888,145891,145895,145900,145903,145910,145913,145919,145924,145927,145930,145933,145936,145939,145942,145945,145948,146004,146006,146032,146036,146039,146042,146045,146053,146056,146059,146063,146119,146122,146126,146132,146143,146146,146151,146154,146157,146163,146166,146169,146172,146175,146178,146181,146184,146187,146212,146218,146221,146224,146227,146230,146233,146236,146241,146244,146247,146250,146258,146261,146268,146271,146274,146276,146300,146302,146305,146308,146311,146314,146317,146320,146323,146357,146360,146363,146397,146404,146407,146410,146413,146416,146419,146422,146429,146432,146435,146438,146441,146448,146451,146454,146461,146464,146467,146471,146474,146477,146480,146483,146486,146489,146492,146495,146497,146521,146523,146547,146551,146562,146565,146568,146571,146574,146577,146580,146583,146586,146589,146592,146595,146598,146601,146604,146607],[10,145408,145404],{"id":145409},"_21-移动端布局实战下篇",[14,145411,145413],{"id":145412},"_211-rem适配布局","21.1 rem适配布局",[198,145415,145417],{"id":145416},"_2111-rem单位","21.1.1 rem单位",[2643,145419],{"style":127531,"src":145420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145422,145423],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[198,145425,145427],{"id":145426},"_2112-媒体查询","21.1.2 媒体查询",[26,145429,145430],{},[29,145431,145432],{},"参数介绍",[2643,145434],{"style":127531,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2643,145437],{"style":127531,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2643,145440],{"style":127531,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2643,145443],{"style":127531,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2643,145446],{"style":127531,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[60,145449,145451],{"className":127675,"code":145450,"language":127677,"meta":66,"style":66},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[39,145452,145453,145458,145477,145484,145497,145501],{"__ignoreMap":66},[84,145454,145455],{"class":86,"line":87},[84,145456,145457],{"class":1378},"\u002F* 媒体查询 *\u002F\n",[84,145459,145460,145463,145465,145468,145470,145473,145475],{"class":86,"line":98},[84,145461,145462],{"class":129},"@media",[84,145464,2839],{"class":154},[84,145466,145467],{"class":94},"max-width",[84,145469,52586],{"class":154},[84,145471,145472],{"class":94},"768",[84,145474,52641],{"class":129},[84,145476,13613],{"class":154},[84,145478,145479,145482],{"class":86,"line":106},[84,145480,145481],{"class":90},"  .container",[84,145483,16742],{"class":154},[84,145485,145486,145489,145491,145493,145495],{"class":86,"line":112},[84,145487,145488],{"class":94},"    width",[84,145490,52586],{"class":154},[84,145492,821],{"class":94},[84,145494,1638],{"class":129},[84,145496,2471],{"class":154},[84,145498,145499],{"class":86,"line":425},[84,145500,128471],{"class":154},[84,145502,145503],{"class":86,"line":2395},[84,145504,2746],{"class":154},[19,145506,145507],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,145509,145510],{"start":98},[29,145511,145512],{},"引入资源",[2643,145514],{"style":127531,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145517,145518],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[198,145520,145522],{"id":145521},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2315,145524,145525,145528,145531],{},[29,145526,145527],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,145529,145530],{},"媒体查询可以根据不同设备宽度来修改样式",[29,145532,145533],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145535,145537],{"id":145536},"_212-less基础","21.2 Less基础",[19,145539,145540],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145542,145543],{},"Less可以解决该问题，它是css的扩展语言",[19,145545,145546,145547],{},"Less中文网址： ",[208,145548,145549],{"href":145549,"rel":145550},"http:\u002F\u002Flesscss.cn\u002F",[212],[19,145552,145553],{},[1464,145554,145555],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[198,145557,145559],{"id":145558},"_2121-less安装","21.2.1 less安装",[19,145561,145562],{},"如果使用vscode，则无需进行下方安装步骤",[19,145564,145565],{},[208,145566,145567],{"href":145567,"rel":145568},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[212],[2643,145570],{"style":127531,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[198,145573,145575],{"id":145574},"_2122-less使用","21.2.2 less使用",[19,145577,145578],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,145580,145581],{},[29,145582,145583],{},[1464,145584,145585],{},"Less 变量",[2643,145587],{"style":127531,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2643,145590],{"style":127531,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,145593,145594],{"start":98},[29,145595,145596],{},[1464,145597,145598],{},"Less 编译",[2643,145600],{"style":127531,"src":145601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,145603,145604],{"start":106},[29,145605,145606],{},[1464,145607,145608],{},"Less 嵌套",[2643,145610],{"style":127531,"src":145611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2643,145613],{"style":127531,"src":145614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,145616,145617],{"start":112},[29,145618,145619],{},[1464,145620,145621],{},"Less 运算",[2643,145623],{"style":127531,"src":145624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145626,145627],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145629,1352],{},[2315,145631,145632,145635,145638,145641,145644],{},[29,145633,145634],{},"乘号（*）和除号（\u002F）的写法",[29,145636,145637],{},"运算符中间左右有个空格隔开 1px + 5",[29,145639,145640],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,145642,145643],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,145645,145646],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145648,145650],{"id":145649},"_213-rem-适配方案","21.3 rem 适配方案",[19,145652,145653],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145655,145656],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2643,145658],{"style":127531,"src":145659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[198,145661,145663],{"id":145662},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145665,145666],{},"rem + 媒体查询 + less 技术",[2643,145668],{"style":127531,"src":145669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145671,145672],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145674,145675],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2643,145677],{"style":127531,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145680,145681],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145683,15803],{},[2643,145685],{"style":127531,"src":145686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145688,145689],{},"index.html:",[60,145691,145693],{"className":127675,"code":145692,"language":127677,"meta":66,"style":66},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[39,145694,145695,145700,145706,145722,145726,145732,145748],{"__ignoreMap":66},[84,145696,145697],{"class":86,"line":87},[84,145698,145699],{"class":1378},"\u002F* rem 适配方案 *\u002F\n",[84,145701,145702,145704],{"class":86,"line":98},[84,145703,51784],{"class":52449},[84,145705,16742],{"class":154},[84,145707,145708,145710,145712,145715,145717,145719],{"class":86,"line":106},[84,145709,71772],{"class":94},[84,145711,52586],{"class":154},[84,145713,145714],{"class":94},"62.5",[84,145716,1638],{"class":129},[84,145718,131538],{"class":154},[84,145720,145721],{"class":1378},"\u002F* 1rem = 10px *\u002F\n",[84,145723,145724],{"class":86,"line":112},[84,145725,2746],{"class":154},[84,145727,145728,145730],{"class":86,"line":425},[84,145729,131523],{"class":90},[84,145731,16742],{"class":154},[84,145733,145734,145736,145738,145740,145743,145745],{"class":86,"line":2395},[84,145735,71714],{"class":94},[84,145737,52586],{"class":154},[84,145739,1756],{"class":94},[84,145741,145742],{"class":129},"rem",[84,145744,131538],{"class":154},[84,145746,145747],{"class":1378},"\u002F* 100px *\u002F\n",[84,145749,145750],{"class":86,"line":2401},[84,145751,2746],{"class":154},[19,145753,145754],{},"common.less",[60,145756,145758],{"className":127675,"code":145757,"language":127677,"meta":66,"style":66},"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",[39,145759,145760,145766,145781,145785,145791,145805,145809,145813,145817,145823,145837,145841,145847,145861],{"__ignoreMap":66},[84,145761,145762,145764],{"class":86,"line":87},[84,145763,51784],{"class":52449},[84,145765,16742],{"class":154},[84,145767,145768,145770,145772,145774,145776,145778],{"class":86,"line":98},[84,145769,71772],{"class":94},[84,145771,52586],{"class":154},[84,145773,145714],{"class":94},[84,145775,1638],{"class":129},[84,145777,27230],{"class":154},[84,145779,145780],{"class":1378},"\u002F* 10px *\u002F\n",[84,145782,145783],{"class":86,"line":106},[84,145784,2746],{"class":154},[84,145786,145787,145789],{"class":86,"line":112},[84,145788,52760],{"class":52449},[84,145790,16742],{"class":154},[84,145792,145793,145795,145797,145799,145801,145803],{"class":86,"line":425},[84,145794,71714],{"class":94},[84,145796,52586],{"class":154},[84,145798,1756],{"class":94},[84,145800,145742],{"class":129},[84,145802,27230],{"class":154},[84,145804,145747],{"class":1378},[84,145806,145807],{"class":86,"line":2395},[84,145808,2746],{"class":154},[84,145810,145811],{"class":86,"line":2401},[84,145812,137136],{"class":154},[84,145814,145815],{"class":86,"line":2492},[84,145816,145699],{"class":1378},[84,145818,145819,145821],{"class":86,"line":2498},[84,145820,51784],{"class":52449},[84,145822,16742],{"class":154},[84,145824,145825,145827,145829,145831,145833,145835],{"class":86,"line":2510},[84,145826,71772],{"class":94},[84,145828,52586],{"class":154},[84,145830,145714],{"class":94},[84,145832,1638],{"class":129},[84,145834,131538],{"class":154},[84,145836,145721],{"class":1378},[84,145838,145839],{"class":86,"line":2793},[84,145840,2746],{"class":154},[84,145842,145843,145845],{"class":86,"line":2798},[84,145844,131523],{"class":90},[84,145846,16742],{"class":154},[84,145848,145849,145851,145853,145855,145857,145859],{"class":86,"line":2804},[84,145850,71714],{"class":94},[84,145852,52586],{"class":154},[84,145854,1756],{"class":94},[84,145856,145742],{"class":129},[84,145858,131538],{"class":154},[84,145860,145747],{"class":1378},[84,145862,145863],{"class":86,"line":2809},[84,145864,2746],{"class":154},[19,145866,145867,145868,145871],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24723,145869,145870],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[60,145873,145876],{"className":145874,"code":145875,"language":65},[63],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[39,145877,145875],{"__ignoreMap":66},[19,145879,145880],{},"less保存时会自动变成.css文件",[19,145882,145883],{},"好好搞懂上述代码写法",[198,145885,145887],{"id":145886},"_2132-样式导入样式","21.3.2 样式导入样式",[2643,145889],{"style":127531,"src":145890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[198,145892,145894],{"id":145893},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,145896,145897],{},[29,145898,145899],{},"准备工作",[2643,145901],{"style":127531,"src":145902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145904,145905,145906],{},"github地址：",[208,145907,145908],{"href":145908,"rel":145909},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[212],[19,145911,145912],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145914,145915,145916],{},"js文件引入到index.html中使用的是",[39,145917,145918],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,145920,145921],{"start":98},[29,145922,145923],{},"vscode插件",[2643,145925],{"style":127531,"src":145926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145928,145929],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145931,145932],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2643,145934],{"style":127531,"src":145935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145937,145938],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2643,145940],{"style":127531,"src":145941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145943,145944],{},"修改成75就可以，alt+z为快捷键",[19,145946,145947],{},"index.css：",[60,145949,145950],{"className":127675,"code":145692,"language":127677,"meta":66,"style":66},[39,145951,145952,145956,145962,145976,145980,145986,146000],{"__ignoreMap":66},[84,145953,145954],{"class":86,"line":87},[84,145955,145699],{"class":1378},[84,145957,145958,145960],{"class":86,"line":98},[84,145959,51784],{"class":52449},[84,145961,16742],{"class":154},[84,145963,145964,145966,145968,145970,145972,145974],{"class":86,"line":106},[84,145965,71772],{"class":94},[84,145967,52586],{"class":154},[84,145969,145714],{"class":94},[84,145971,1638],{"class":129},[84,145973,131538],{"class":154},[84,145975,145721],{"class":1378},[84,145977,145978],{"class":86,"line":112},[84,145979,2746],{"class":154},[84,145981,145982,145984],{"class":86,"line":425},[84,145983,131523],{"class":90},[84,145985,16742],{"class":154},[84,145987,145988,145990,145992,145994,145996,145998],{"class":86,"line":2395},[84,145989,71714],{"class":94},[84,145991,52586],{"class":154},[84,145993,1756],{"class":94},[84,145995,145742],{"class":129},[84,145997,131538],{"class":154},[84,145999,145747],{"class":1378},[84,146001,146002],{"class":86,"line":2401},[84,146003,2746],{"class":154},[19,146005,145689],{},[60,146007,146008],{"className":127675,"code":128079,"language":127677,"meta":66,"style":66},[39,146009,146010,146016,146028],{"__ignoreMap":66},[84,146011,146012,146014],{"class":86,"line":87},[84,146013,52949],{"class":52449},[84,146015,16742],{"class":154},[84,146017,146018,146020,146022,146024,146026],{"class":86,"line":98},[84,146019,71772],{"class":94},[84,146021,52586],{"class":154},[84,146023,1910],{"class":94},[84,146025,52641],{"class":129},[84,146027,2471],{"class":154},[84,146029,146030],{"class":86,"line":106},[84,146031,2746],{"class":154},[14,146033,146035],{"id":146034},"_214-响应式开发","21.4 响应式开发",[19,146037,146038],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2643,146040],{"style":127531,"src":146041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146043,146044],{},"做法：",[2315,146046,146047,146050],{},[29,146048,146049],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146051,146052],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2643,146054],{"style":127531,"src":146055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146057,146058],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[198,146060,146062],{"id":146061},"_2141-简单代码示范","21.4.1 简单代码示范",[60,146064,146065],{"className":127675,"code":145692,"language":127677,"meta":66,"style":66},[39,146066,146067,146071,146077,146091,146095,146101,146115],{"__ignoreMap":66},[84,146068,146069],{"class":86,"line":87},[84,146070,145699],{"class":1378},[84,146072,146073,146075],{"class":86,"line":98},[84,146074,51784],{"class":52449},[84,146076,16742],{"class":154},[84,146078,146079,146081,146083,146085,146087,146089],{"class":86,"line":106},[84,146080,71772],{"class":94},[84,146082,52586],{"class":154},[84,146084,145714],{"class":94},[84,146086,1638],{"class":129},[84,146088,131538],{"class":154},[84,146090,145721],{"class":1378},[84,146092,146093],{"class":86,"line":112},[84,146094,2746],{"class":154},[84,146096,146097,146099],{"class":86,"line":425},[84,146098,131523],{"class":90},[84,146100,16742],{"class":154},[84,146102,146103,146105,146107,146109,146111,146113],{"class":86,"line":2395},[84,146104,71714],{"class":94},[84,146106,52586],{"class":154},[84,146108,1756],{"class":94},[84,146110,145742],{"class":129},[84,146112,131538],{"class":154},[84,146114,145747],{"class":1378},[84,146116,146117],{"class":86,"line":2401},[84,146118,2746],{"class":154},[19,146120,146121],{},"父盒子一般命名为container",[198,146123,146125],{"id":146124},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146127,146128,146129],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1464,146130,146131],{},"使得 Web 开发更加快捷",[2315,146133,146134],{},[29,146135,146136,146137],{},"官网：",[1464,146138,146139],{},[208,146140,146141],{"href":146141,"rel":146142},"http:\u002F\u002Fgetbootstrap.com\u002F",[212],[19,146144,146145],{},"可以直接去官网拿现成的东西",[26,146147,146148],{},[29,146149,146150],{},"Bootstrap的使用",[19,146152,146153],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146155,146156],{},"Bootstrap 使用四步曲：",[19,146158,146159,146162],{},[1464,146160,146161],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2643,146164],{"style":127531,"src":146165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146167,146168],{},"打开Bootstrap官网，然后下载",[2643,146170],{"style":127531,"src":146171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2643,146173],{"style":127531,"src":146174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146176,146177],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146179,146180],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146182,146183],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2643,146185],{"style":127531,"src":146186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[60,146188,146190],{"className":127675,"code":146189,"language":127677,"meta":66,"style":66},".center {\n  color: red;\n}\n",[39,146191,146192,146198,146208],{"__ignoreMap":66},[84,146193,146194,146196],{"class":86,"line":87},[84,146195,127966],{"class":90},[84,146197,16742],{"class":154},[84,146199,146200,146202,146204,146206],{"class":86,"line":98},[84,146201,72051],{"class":94},[84,146203,52586],{"class":154},[84,146205,58568],{"class":94},[84,146207,2471],{"class":154},[84,146209,146210],{"class":86,"line":106},[84,146211,2746],{"class":154},[19,146213,146214,146217],{},[39,146215,146216],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2643,146219],{"style":127531,"src":146220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2643,146222],{"style":127531,"src":146223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2643,146225],{"style":127531,"src":146226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146228,146229],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2643,146231],{"style":127531,"src":146232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146234,146235],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146237,146238],{"start":98},[29,146239,146240],{},"布局容器",[2643,146242],{"style":127531,"src":146243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146245,146246],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146248,146249],{},"container-fluid用于移动式布局比较方便",[26,146251,146252],{"start":106},[29,146253,146254,146255],{},"bootstrap ",[1464,146256,146257],{},"栅格系统原理",[2643,146259],{"style":127531,"src":146260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146262,146263],{"start":112},[29,146264,146265],{},[1464,146266,146267],{},"栅格选项参数",[2643,146269],{"style":127531,"src":146270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146272,146273],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146275,15803],{},[60,146277,146278],{"className":127675,"code":146189,"language":127677,"meta":66,"style":66},[39,146279,146280,146286,146296],{"__ignoreMap":66},[84,146281,146282,146284],{"class":86,"line":87},[84,146283,127966],{"class":90},[84,146285,16742],{"class":154},[84,146287,146288,146290,146292,146294],{"class":86,"line":98},[84,146289,72051],{"class":94},[84,146291,52586],{"class":154},[84,146293,58568],{"class":94},[84,146295,2471],{"class":154},[84,146297,146298],{"class":86,"line":106},[84,146299,2746],{"class":154},[19,146301,136718],{},[2643,146303],{"style":127531,"src":146304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146306,146307],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146309,146310],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146312,146313],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146315,146316],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146318,146319],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146321,146322],{},"汇总展示说明：",[60,146324,146325],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,146326,146327,146331,146345,146349],{"__ignoreMap":66},[84,146328,146329],{"class":86,"line":87},[84,146330,131786],{"class":1378},[84,146332,146333,146335,146337,146339,146341,146343],{"class":86,"line":98},[84,146334,2218],{"class":154},[84,146336,52760],{"class":52449},[84,146338,54635],{"class":90},[84,146340,867],{"class":154},[84,146342,131799],{"class":158},[84,146344,52456],{"class":154},[84,146346,146347],{"class":86,"line":106},[84,146348,131806],{"class":154},[84,146350,146351,146353,146355],{"class":86,"line":112},[84,146352,52934],{"class":154},[84,146354,52760],{"class":52449},[84,146356,52456],{"class":154},[2643,146358],{"style":127531,"src":146359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146361,146362],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[60,146364,146365],{"className":128422,"code":131779,"language":128424,"meta":66,"style":66},[39,146366,146367,146371,146385,146389],{"__ignoreMap":66},[84,146368,146369],{"class":86,"line":87},[84,146370,131786],{"class":1378},[84,146372,146373,146375,146377,146379,146381,146383],{"class":86,"line":98},[84,146374,2218],{"class":154},[84,146376,52760],{"class":52449},[84,146378,54635],{"class":90},[84,146380,867],{"class":154},[84,146382,131799],{"class":158},[84,146384,52456],{"class":154},[84,146386,146387],{"class":86,"line":106},[84,146388,131806],{"class":154},[84,146390,146391,146393,146395],{"class":86,"line":112},[84,146392,52934],{"class":154},[84,146394,52760],{"class":52449},[84,146396,52456],{"class":154},[26,146398,146399],{"start":425},[29,146400,146401],{},[1464,146402,146403],{},"列嵌套",[2643,146405],{"style":127531,"src":146406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146408,146409],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146411,146412],{},"没加row内部这样：",[2643,146414],{"style":127531,"src":146415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146417,146418],{},"加上row之后内部为：",[2643,146420],{"style":127531,"src":146421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,146423,146424],{"start":2395},[29,146425,146426],{},[1464,146427,146428],{},"列偏移",[2643,146430],{"style":127531,"src":146431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146433,146434],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146436,146437],{},"要加偏移量，即偏移份数",[19,146439,146440],{},"偏移的份数=12-两个盒子的份数",[26,146442,146443],{"start":2401},[29,146444,146445],{},[1464,146446,146447],{},"列排序",[2643,146449],{"style":127531,"src":146450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146452,146453],{},"pull拉左；push推右",[26,146455,146456],{"start":2492},[29,146457,146458],{},[1464,146459,146460],{},"响应式工具",[2643,146462],{"style":127531,"src":146463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146465,146466],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[198,146468,146470],{"id":146469},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146472,146473],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146475,146476],{},"ul {",[19,146478,146479],{},"list-style: none;",[19,146481,146482],{},"margin:0;",[19,146484,146485],{},"padding:0; }",[2643,146487],{"style":127531,"src":146488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2643,146490],{"style":127531,"src":146491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146493,146494],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146496,70035],{},[60,146498,146499],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,146500,146501,146507,146517],{"__ignoreMap":66},[84,146502,146503,146505],{"class":86,"line":87},[84,146504,131523],{"class":90},[84,146506,16742],{"class":154},[84,146508,146509,146511,146513,146515],{"class":86,"line":98},[84,146510,132155],{"class":94},[84,146512,52586],{"class":154},[84,146514,24906],{"class":94},[84,146516,2471],{"class":154},[84,146518,146519],{"class":86,"line":106},[84,146520,2746],{"class":154},[19,146522,71599],{},[60,146524,146525],{"className":127675,"code":140345,"language":127677,"meta":66,"style":66},[39,146526,146527,146533,146543],{"__ignoreMap":66},[84,146528,146529,146531],{"class":86,"line":87},[84,146530,131523],{"class":90},[84,146532,16742],{"class":154},[84,146534,146535,146537,146539,146541],{"class":86,"line":98},[84,146536,132155],{"class":94},[84,146538,52586],{"class":154},[84,146540,24906],{"class":94},[84,146542,2471],{"class":154},[84,146544,146545],{"class":86,"line":106},[84,146546,2746],{"class":154},[14,146548,146550],{"id":146549},"_215-swiper-插件使用","21.5 swiper 插件使用",[2315,146552,146553,146556,146559],{},[29,146554,146555],{},"下载需要的css和js文件html页面中 引入相关文件",[29,146557,146558],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,146560,146561],{},"根据需求定制修改模块",[2643,146563],{"style":127531,"src":146564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146566,146567],{},"解压后将这两部分放到项目中",[2643,146569],{"style":127531,"src":146570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146572,146573],{},"这个插件可以帮助我们实现轮播图效果",[19,146575,146576],{},"用法：",[2643,146578],{"style":127531,"src":146579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146581,146582],{},"找到自己喜欢的",[2643,146584],{"style":127531,"src":146585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146587,146588],{},"右键，查看网页源代码",[2643,146590],{"style":127531,"src":146591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146593,146594],{},"复制人家的结构内容",[19,146596,146597],{},"然后去看API文档：",[2643,146599],{"style":127531,"src":146600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146602,146603],{},"可以看看如何修改样式",[19,146605,146606],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1222,146608,146609],{},"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":66,"searchDepth":98,"depth":98,"links":146611},[146612,146617,146621,146626,146631],{"id":145412,"depth":98,"text":145413,"children":146613},[146614,146615,146616],{"id":145416,"depth":106,"text":145417},{"id":145426,"depth":106,"text":145427},{"id":145521,"depth":106,"text":145522},{"id":145536,"depth":98,"text":145537,"children":146618},[146619,146620],{"id":145558,"depth":106,"text":145559},{"id":145574,"depth":106,"text":145575},{"id":145649,"depth":98,"text":145650,"children":146622},[146623,146624,146625],{"id":145662,"depth":106,"text":145663},{"id":145886,"depth":106,"text":145887},{"id":145893,"depth":106,"text":145894},{"id":146034,"depth":98,"text":146035,"children":146627},[146628,146629,146630],{"id":146061,"depth":106,"text":146062},{"id":146124,"depth":106,"text":146125},{"id":146469,"depth":106,"text":146470},{"id":146549,"depth":98,"text":146550},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145404,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146638,"title":146639,"body":146640,"description":1249,"extension":1250,"meta":146860,"navigation":1252,"path":146861,"seo":146862,"stem":146863,"__hash__":146864},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146641,"toc":146856},[146642,146645,146649,146652,146667,146672,146675,146680,146715,146720,146732,146737,146750,146755,146772,146777,146797,146802,146820,146823,146826,146829,146832,146836,146839,146842,146845,146848,146851,146854],[10,146643,146639],{"id":146644},"_22-代码提交与新型相对单位",[14,146646,146648],{"id":146647},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146650,146651],{},"法1：",[26,146653,146654,146661,146664],{},[29,146655,146656,146657],{},"登录网站注册：",[208,146658,146659],{"href":146659,"rel":146660},"https:\u002F\u002Fgitee.com\u002F",[212],[29,146662,146663],{},"码云创建新的仓库",[29,146665,146666],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2315,146668,146669],{},[29,146670,146671],{},"在网站根目录右键-- Git Bash Here",[2643,146673],{"style":127531,"src":146674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2315,146676,146677],{},[29,146678,146679],{},"如果是第一次利用git提交，请配置好全局选项",[60,146681,146683],{"className":118430,"code":146682,"language":118432,"meta":66,"style":66},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[39,146684,146685,146701],{"__ignoreMap":66},[84,146686,146687,146690,146692,146695,146698],{"class":86,"line":87},[84,146688,146689],{"class":90},"git",[84,146691,120848],{"class":158},[84,146693,146694],{"class":94}," --global",[84,146696,146697],{"class":158}," user.name",[84,146699,146700],{"class":158}," \"你的名字\"\n",[84,146702,146703,146705,146707,146709,146712],{"class":86,"line":98},[84,146704,146689],{"class":90},[84,146706,120848],{"class":158},[84,146708,146694],{"class":94},[84,146710,146711],{"class":158}," user.email",[84,146713,146714],{"class":158}," \"你的邮箱\"\n",[2315,146716,146717],{},[29,146718,146719],{},"初始化仓库",[60,146721,146723],{"className":118430,"code":146722,"language":118432,"meta":66,"style":66},"git init\n",[39,146724,146725],{"__ignoreMap":66},[84,146726,146727,146729],{"class":86,"line":87},[84,146728,146689],{"class":90},[84,146730,146731],{"class":158}," init\n",[2315,146733,146734],{},[29,146735,146736],{},"把本地文件放到暂存区",[60,146738,146740],{"className":118430,"code":146739,"language":118432,"meta":66,"style":66},"git add .\n",[39,146741,146742],{"__ignoreMap":66},[84,146743,146744,146746,146748],{"class":86,"line":87},[84,146745,146689],{"class":90},[84,146747,6384],{"class":158},[84,146749,29898],{"class":158},[2315,146751,146752],{},[29,146753,146754],{},"把本地文件放到本地仓库里面",[60,146756,146758],{"className":118430,"code":146757,"language":118432,"meta":66,"style":66},"git commit -m \"first commit\"\n",[39,146759,146760],{"__ignoreMap":66},[84,146761,146762,146764,146767,146769],{"class":86,"line":87},[84,146763,146689],{"class":90},[84,146765,146766],{"class":158}," commit",[84,146768,558],{"class":94},[84,146770,146771],{"class":158}," \"first commit\"\n",[2315,146773,146774],{},[29,146775,146776],{},"链接远程仓库",[60,146778,146780],{"className":118430,"code":146779,"language":118432,"meta":66,"style":66},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[39,146781,146782],{"__ignoreMap":66},[84,146783,146784,146786,146789,146791,146794],{"class":86,"line":87},[84,146785,146689],{"class":90},[84,146787,146788],{"class":158}," remote",[84,146790,6384],{"class":158},[84,146792,146793],{"class":158}," origin",[84,146795,146796],{"class":158}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2315,146798,146799],{},[29,146800,146801],{},"把本地仓库的文件推送到远程仓库 push",[60,146803,146805],{"className":118430,"code":146804,"language":118432,"meta":66,"style":66},"git push -u origin master\n",[39,146806,146807],{"__ignoreMap":66},[84,146808,146809,146811,146813,146815,146817],{"class":86,"line":87},[84,146810,146689],{"class":90},[84,146812,30173],{"class":158},[84,146814,29448],{"class":94},[84,146816,146793],{"class":158},[84,146818,146819],{"class":158}," master\n",[2643,146821],{"style":127531,"src":146822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146824,146825],{},"上方方法暂未实现，后边学完git后在整",[19,146827,146828],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2643,146830],{"style":127531,"src":146831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146833,146835],{"id":146834},"_222-新型相对单位","22.2 新型相对单位",[2643,146837],{"style":127531,"src":146838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2643,146840],{"style":127531,"src":146841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146843,146844],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146846,146847],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2643,146849],{"style":127531,"src":146850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146852,146853],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1222,146855,25123],{},{"title":66,"searchDepth":98,"depth":98,"links":146857},[146858,146859],{"id":146647,"depth":98,"text":146648},{"id":146834,"depth":98,"text":146835},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146639,"description":1249},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146866,"title":146867,"body":146868,"description":146872,"extension":1250,"meta":146873,"navigation":1252,"path":146874,"seo":146875,"stem":146876,"__hash__":146877},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146869,"toc":146870},[],{"title":66,"searchDepth":98,"depth":98,"links":146871},[],"自己正经开始学编程的第一门语言！",{"category":93985},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146867,"description":146872},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":4,"title":5,"body":146879,"description":1249,"extension":1250,"meta":147808,"navigation":1252,"path":1253,"seo":147809,"stem":1255,"__hash__":1256},{"type":7,"value":146880,"toc":147784},[146881,146883,146885,146887,146889,146907,146909,146914,146916,146918,146942,146944,146978,146980,146990,146992,146997,146999,147001,147020,147036,147040,147042,147044,147068,147070,147072,147074,147112,147114,147130,147134,147136,147140,147180,147182,147198,147200,147254,147256,147260,147262,147276,147278,147286,147288,147298,147300,147308,147310,147324,147326,147340,147342,147344,147346,147348,147362,147364,147366,147368,147376,147378,147383,147385,147389,147413,147415,147425,147427,147437,147439,147444,147446,147450,147498,147500,147534,147536,147566,147568,147600,147602,147604,147622,147624,147654,147656,147666,147668,147670,147675,147677,147687,147689,147691,147696,147698,147700,147702,147704,147744,147746,147758,147763,147769,147774,147782],[10,146882,5],{"id":12},[14,146884,17],{"id":16},[19,146886,21],{},[19,146888,24],{},[26,146890,146891,146893,146895],{},[29,146892,31],{},[29,146894,34],{},[29,146896,37,146897,42,146899,42,146901,42,146903,42,146905,55],{},[39,146898,41],{},[39,146900,45],{},[39,146902,48],{},[39,146904,51],{},[39,146906,54],{},[19,146908,58],{},[60,146910,146912],{"className":146911,"code":64,"language":65,"meta":66},[63],[39,146913,64],{"__ignoreMap":66},[14,146915,72],{"id":71},[19,146917,75],{},[60,146919,146920],{"className":78,"code":79,"language":80,"meta":66,"style":66},[39,146921,146922,146928,146934,146938],{"__ignoreMap":66},[84,146923,146924,146926],{"class":86,"line":87},[84,146925,91],{"class":90},[84,146927,95],{"class":94},[84,146929,146930,146932],{"class":86,"line":98},[84,146931,101],{"class":90},[84,146933,95],{"class":94},[84,146935,146936],{"class":86,"line":106},[84,146937,109],{"class":90},[84,146939,146940],{"class":86,"line":112},[84,146941,115],{"class":90},[19,146943,118],{},[60,146945,146946],{"className":121,"code":122,"language":91,"meta":66,"style":66},[39,146947,146948,146958,146962,146974],{"__ignoreMap":66},[84,146949,146950,146952,146954,146956],{"class":86,"line":87},[84,146951,130],{"class":129},[84,146953,133],{"class":94},[84,146955,136],{"class":129},[84,146957,139],{"class":94},[84,146959,146960],{"class":86,"line":98},[84,146961,144],{"class":94},[84,146963,146964,146966,146968,146970,146972],{"class":86,"line":106},[84,146965,130],{"class":129},[84,146967,151],{"class":94},[84,146969,155],{"class":154},[84,146971,159],{"class":158},[84,146973,162],{"class":154},[84,146975,146976],{"class":86,"line":112},[84,146977,167],{"class":154},[19,146979,170],{},[60,146981,146982],{"className":121,"code":173,"language":91,"meta":66,"style":66},[39,146983,146984],{"__ignoreMap":66},[84,146985,146986,146988],{"class":86,"line":87},[84,146987,180],{"class":94},[84,146989,183],{"class":154},[19,146991,186],{},[60,146993,146995],{"className":146994,"code":190,"language":65,"meta":66},[63],[39,146996,190],{"__ignoreMap":66},[14,146998,196],{"id":195},[198,147000,201],{"id":200},[26,147002,147003,147008,147010,147014,147018],{},[29,147004,206,147005],{},[208,147006,210],{"href":210,"rel":147007},[212],[29,147009,215],{},[29,147011,218,147012,55],{},[39,147013,221],{},[29,147015,224,147016,55],{},[39,147017,227],{},[29,147019,230],{},[60,147021,147022],{"className":78,"code":233,"language":80,"meta":66,"style":66},[39,147023,147024,147030],{"__ignoreMap":66},[84,147025,147026,147028],{"class":86,"line":87},[84,147027,91],{"class":90},[84,147029,95],{"class":94},[84,147031,147032,147034],{"class":86,"line":98},[84,147033,246],{"class":90},[84,147035,95],{"class":94},[19,147037,251,147038,255],{},[39,147039,254],{},[198,147041,259],{"id":258},[19,147043,262],{},[60,147045,147046],{"className":78,"code":265,"language":80,"meta":66,"style":66},[39,147047,147048,147056,147062],{"__ignoreMap":66},[84,147049,147050,147052,147054],{"class":86,"line":87},[84,147051,272],{"class":90},[84,147053,275],{"class":158},[84,147055,278],{"class":158},[84,147057,147058,147060],{"class":86,"line":98},[84,147059,101],{"class":90},[84,147061,95],{"class":94},[84,147063,147064,147066],{"class":86,"line":106},[84,147065,289],{"class":90},[84,147067,95],{"class":94},[19,147069,294],{},[198,147071,298],{"id":297},[19,147073,301],{},[60,147075,147076],{"className":78,"code":304,"language":80,"meta":66,"style":66},[39,147077,147078,147086,147100,147106],{"__ignoreMap":66},[84,147079,147080,147082,147084],{"class":86,"line":87},[84,147081,311],{"class":90},[84,147083,314],{"class":158},[84,147085,317],{"class":158},[84,147087,147088,147090,147092,147094,147096,147098],{"class":86,"line":98},[84,147089,311],{"class":90},[84,147091,314],{"class":158},[84,147093,275],{"class":158},[84,147095,328],{"class":158},[84,147097,331],{"class":158},[84,147099,334],{"class":158},[84,147101,147102,147104],{"class":86,"line":106},[84,147103,101],{"class":90},[84,147105,95],{"class":94},[84,147107,147108,147110],{"class":86,"line":112},[84,147109,289],{"class":90},[84,147111,95],{"class":94},[19,147113,349],{},[60,147115,147116],{"className":78,"code":352,"language":80,"meta":66,"style":66},[39,147117,147118],{"__ignoreMap":66},[84,147119,147120,147122,147124,147126,147128],{"class":86,"line":87},[84,147121,311],{"class":90},[84,147123,361],{"class":158},[84,147125,275],{"class":158},[84,147127,328],{"class":158},[84,147129,368],{"class":158},[19,147131,371,147132,374],{},[39,147133,101],{},[14,147135,378],{"id":377},[19,147137,147138,383],{},[39,147139,246],{},[60,147141,147142],{"className":78,"code":386,"language":80,"meta":66,"style":66},[39,147143,147144,147152,147160,147168,147174],{"__ignoreMap":66},[84,147145,147146,147148,147150],{"class":86,"line":87},[84,147147,246],{"class":90},[84,147149,275],{"class":158},[84,147151,397],{"class":158},[84,147153,147154,147156,147158],{"class":86,"line":98},[84,147155,246],{"class":90},[84,147157,404],{"class":158},[84,147159,397],{"class":158},[84,147161,147162,147164,147166],{"class":86,"line":106},[84,147163,246],{"class":90},[84,147165,413],{"class":158},[84,147167,397],{"class":158},[84,147169,147170,147172],{"class":86,"line":112},[84,147171,246],{"class":90},[84,147173,422],{"class":158},[84,147175,147176,147178],{"class":86,"line":425},[84,147177,246],{"class":90},[84,147179,430],{"class":158},[19,147181,433],{},[60,147183,147184],{"className":78,"code":436,"language":80,"meta":66,"style":66},[39,147185,147186],{"__ignoreMap":66},[84,147187,147188,147190,147192,147194,147196],{"class":86,"line":87},[84,147189,246],{"class":90},[84,147191,275],{"class":158},[84,147193,447],{"class":158},[84,147195,450],{"class":94},[84,147197,453],{"class":158},[19,147199,456],{},[458,147201,147202,147210],{},[461,147203,147204],{},[464,147205,147206,147208],{},[467,147207,469],{},[467,147209,472],{},[474,147211,147212,147218,147224,147230,147236,147242,147248],{},[464,147213,147214,147216],{},[479,147215,481],{},[479,147217,484],{},[464,147219,147220,147222],{},[479,147221,489],{},[479,147223,492],{},[464,147225,147226,147228],{},[479,147227,497],{},[479,147229,500],{},[464,147231,147232,147234],{},[479,147233,505],{},[479,147235,508],{},[464,147237,147238,147240],{},[479,147239,513],{},[479,147241,516],{},[464,147243,147244,147246],{},[479,147245,521],{},[479,147247,524],{},[464,147249,147250,147252],{},[479,147251,529],{},[479,147253,532],{},[14,147255,536],{"id":535},[19,147257,539,147258,543],{},[39,147259,542],{},[19,147261,546],{},[60,147263,147264],{"className":78,"code":549,"language":80,"meta":66,"style":66},[39,147265,147266],{"__ignoreMap":66},[84,147267,147268,147270,147272,147274],{"class":86,"line":87},[84,147269,91],{"class":90},[84,147271,558],{"class":94},[84,147273,561],{"class":158},[84,147275,564],{"class":158},[19,147277,567],{},[60,147279,147280],{"className":78,"code":570,"language":80,"meta":66,"style":66},[39,147281,147282],{"__ignoreMap":66},[84,147283,147284],{"class":86,"line":87},[84,147285,570],{"class":90},[19,147287,579],{},[60,147289,147290],{"className":78,"code":582,"language":80,"meta":66,"style":66},[39,147291,147292],{"__ignoreMap":66},[84,147293,147294,147296],{"class":86,"line":87},[84,147295,589],{"class":94},[84,147297,592],{"class":158},[19,147299,595],{},[60,147301,147302],{"className":78,"code":598,"language":80,"meta":66,"style":66},[39,147303,147304],{"__ignoreMap":66},[84,147305,147306],{"class":86,"line":87},[84,147307,598],{"class":90},[19,147309,607],{},[60,147311,147312],{"className":78,"code":610,"language":80,"meta":66,"style":66},[39,147313,147314],{"__ignoreMap":66},[84,147315,147316,147318,147320,147322],{"class":86,"line":87},[84,147317,246],{"class":90},[84,147319,619],{"class":158},[84,147321,622],{"class":129},[84,147323,625],{"class":158},[19,147325,628],{},[60,147327,147328],{"className":78,"code":631,"language":80,"meta":66,"style":66},[39,147329,147330],{"__ignoreMap":66},[84,147331,147332,147334,147336,147338],{"class":86,"line":87},[84,147333,246],{"class":90},[84,147335,275],{"class":158},[84,147337,642],{"class":94},[84,147339,625],{"class":158},[14,147341,648],{"id":647},[198,147343,652],{"id":651},[19,147345,655],{},[19,147347,658],{},[26,147349,147350,147352,147354,147358,147360],{},[29,147351,663],{},[29,147353,666],{},[29,147355,669,147356,673],{},[39,147357,672],{},[29,147359,676],{},[29,147361,679],{},[198,147363,683],{"id":682},[19,147365,686],{},[19,147367,689],{},[26,147369,147370,147372,147374],{},[29,147371,694],{},[29,147373,697],{},[29,147375,700],{},[19,147377,703],{},[60,147379,147381],{"className":147380,"code":707,"language":65,"meta":66},[63],[39,147382,707],{"__ignoreMap":66},[14,147384,713],{"id":712},[19,147386,716,147387,720],{},[39,147388,719],{},[60,147390,147391],{"className":121,"code":723,"language":91,"meta":66,"style":66},[39,147392,147393,147403],{"__ignoreMap":66},[84,147394,147395,147397,147399,147401],{"class":86,"line":87},[84,147396,730],{"class":94},[84,147398,155],{"class":154},[84,147400,735],{"class":158},[84,147402,162],{"class":154},[84,147404,147405,147407,147409,147411],{"class":86,"line":98},[84,147406,730],{"class":94},[84,147408,155],{"class":154},[84,147410,746],{"class":158},[84,147412,162],{"class":154},[19,147414,751],{},[60,147416,147417],{"className":78,"code":754,"language":80,"meta":66,"style":66},[39,147418,147419],{"__ignoreMap":66},[84,147420,147421,147423],{"class":86,"line":87},[84,147422,91],{"class":90},[84,147424,763],{"class":158},[19,147426,766],{},[60,147428,147429],{"className":78,"code":769,"language":80,"meta":66,"style":66},[39,147430,147431],{"__ignoreMap":66},[84,147432,147433,147435],{"class":86,"line":87},[84,147434,101],{"class":90},[84,147436,763],{"class":158},[19,147438,780],{},[60,147440,147442],{"className":147441,"code":784,"language":65,"meta":66},[63],[39,147443,784],{"__ignoreMap":66},[14,147445,790],{"id":789},[19,147447,147448,796],{},[39,147449,795],{},[60,147451,147452],{"className":121,"code":799,"language":91,"meta":66,"style":66},[39,147453,147454,147464,147474,147484],{"__ignoreMap":66},[84,147455,147456,147458,147460,147462],{"class":86,"line":87},[84,147457,730],{"class":94},[84,147459,155],{"class":154},[84,147461,810],{"class":158},[84,147463,162],{"class":154},[84,147465,147466,147468,147470,147472],{"class":86,"line":98},[84,147467,730],{"class":94},[84,147469,155],{"class":154},[84,147471,821],{"class":94},[84,147473,162],{"class":154},[84,147475,147476,147478,147480,147482],{"class":86,"line":106},[84,147477,730],{"class":94},[84,147479,155],{"class":154},[84,147481,832],{"class":94},[84,147483,162],{"class":154},[84,147485,147486,147488,147490,147492,147494,147496],{"class":86,"line":112},[84,147487,730],{"class":94},[84,147489,155],{"class":154},[84,147491,843],{"class":158},[84,147493,846],{"class":154},[84,147495,849],{"class":94},[84,147497,162],{"class":154},[19,147499,854],{},[60,147501,147502],{"className":121,"code":857,"language":91,"meta":66,"style":66},[39,147503,147504,147512,147520],{"__ignoreMap":66},[84,147505,147506,147508,147510],{"class":86,"line":87},[84,147507,864],{"class":154},[84,147509,867],{"class":129},[84,147511,870],{"class":158},[84,147513,147514,147516,147518],{"class":86,"line":98},[84,147515,875],{"class":154},[84,147517,867],{"class":129},[84,147519,880],{"class":94},[84,147521,147522,147524,147526,147528,147530,147532],{"class":86,"line":106},[84,147523,730],{"class":94},[84,147525,155],{"class":154},[84,147527,889],{"class":158},[84,147529,892],{"class":154},[84,147531,843],{"class":158},[84,147533,897],{"class":154},[19,147535,900],{},[60,147537,147538],{"className":121,"code":903,"language":91,"meta":66,"style":66},[39,147539,147540],{"__ignoreMap":66},[84,147541,147542,147544,147546,147548,147550,147552,147554,147556,147558,147560,147562,147564],{"class":86,"line":87},[84,147543,730],{"class":94},[84,147545,155],{"class":154},[84,147547,914],{"class":158},[84,147549,846],{"class":154},[84,147551,919],{"class":158},[84,147553,846],{"class":154},[84,147555,919],{"class":158},[84,147557,846],{"class":154},[84,147559,929],{"class":928},[84,147561,867],{"class":129},[84,147563,934],{"class":158},[84,147565,162],{"class":154},[19,147567,939],{},[60,147569,147570],{"className":121,"code":942,"language":91,"meta":66,"style":66},[39,147571,147572,147590],{"__ignoreMap":66},[84,147573,147574,147576,147578,147580,147582,147584,147586,147588],{"class":86,"line":87},[84,147575,730],{"class":94},[84,147577,155],{"class":154},[84,147579,810],{"class":158},[84,147581,846],{"class":154},[84,147583,957],{"class":928},[84,147585,867],{"class":129},[84,147587,962],{"class":158},[84,147589,162],{"class":154},[84,147591,147592,147594,147596,147598],{"class":86,"line":98},[84,147593,730],{"class":94},[84,147595,155],{"class":154},[84,147597,973],{"class":158},[84,147599,162],{"class":154},[14,147601,979],{"id":978},[19,147603,982],{},[60,147605,147606],{"className":121,"code":985,"language":91,"meta":66,"style":66},[39,147607,147608,147618],{"__ignoreMap":66},[84,147609,147610,147612,147614,147616],{"class":86,"line":87},[84,147611,130],{"class":129},[84,147613,994],{"class":94},[84,147615,997],{"class":129},[84,147617,1000],{"class":94},[84,147619,147620],{"class":86,"line":98},[84,147621,1005],{"class":94},[19,147623,1008],{},[60,147625,147626],{"className":121,"code":1011,"language":91,"meta":66,"style":66},[39,147627,147628,147636,147644],{"__ignoreMap":66},[84,147629,147630,147632,147634],{"class":86,"line":87},[84,147631,1018],{"class":154},[84,147633,867],{"class":129},[84,147635,1023],{"class":94},[84,147637,147638,147640,147642],{"class":86,"line":98},[84,147639,1028],{"class":154},[84,147641,867],{"class":129},[84,147643,1033],{"class":94},[84,147645,147646,147648,147650,147652],{"class":86,"line":106},[84,147647,730],{"class":94},[84,147649,1040],{"class":154},[84,147651,1043],{"class":129},[84,147653,1046],{"class":154},[19,147655,1049],{},[26,147657,147658,147660,147664],{},[29,147659,1054],{},[29,147661,1057,147662,673],{},[39,147663,672],{},[29,147665,1062],{},[14,147667,1066],{"id":1065},[198,147669,1070],{"id":1069},[60,147671,147673],{"className":147672,"code":1074,"language":65,"meta":66},[63],[39,147674,1074],{"__ignoreMap":66},[19,147676,1079],{},[26,147678,147679,147681,147683],{},[29,147680,1084],{},[29,147682,1087],{},[29,147684,1090,147685,55],{},[39,147686,101],{},[198,147688,1096],{"id":1095},[19,147690,1099],{},[60,147692,147694],{"className":147693,"code":1103,"language":65,"meta":66},[63],[39,147695,1103],{"__ignoreMap":66},[19,147697,1108],{},[198,147699,1112],{"id":1111},[19,147701,1115],{},[19,147703,1118],{},[60,147705,147706],{"className":121,"code":1121,"language":91,"meta":66,"style":66},[39,147707,147708,147736],{"__ignoreMap":66},[84,147709,147710,147712,147714,147716,147718,147720,147722,147724,147726,147728,147730,147732,147734],{"class":86,"line":87},[84,147711,1128],{"class":129},[84,147713,1131],{"class":94},[84,147715,155],{"class":154},[84,147717,1136],{"class":158},[84,147719,846],{"class":154},[84,147721,1141],{"class":158},[84,147723,846],{"class":154},[84,147725,1146],{"class":928},[84,147727,867],{"class":129},[84,147729,1151],{"class":158},[84,147731,1154],{"class":154},[84,147733,1157],{"class":129},[84,147735,1160],{"class":154},[84,147737,147738,147740,147742],{"class":86,"line":98},[84,147739,1165],{"class":154},[84,147741,867],{"class":129},[84,147743,1170],{"class":154},[14,147745,1174],{"id":1173},[26,147747,147748,147750,147754],{},[29,147749,1179],{},[29,147751,1182,147752,1185],{},[39,147753,719],{},[29,147755,1188,147756,1191],{},[39,147757,795],{},[60,147759,147761],{"className":147760,"code":1195,"language":65,"meta":66},[63],[39,147762,1195],{"__ignoreMap":66},[26,147764,147765],{"start":112},[29,147766,1188,147767,1204],{},[39,147768,929],{},[60,147770,147772],{"className":147771,"code":1208,"language":65,"meta":66},[63],[39,147773,1208],{"__ignoreMap":66},[26,147775,147776],{"start":425},[29,147777,1188,147778,1217,147780,1220],{},[39,147779,957],{},[39,147781,795],{},[1222,147783,1224],{},{"title":66,"searchDepth":98,"depth":98,"links":147785},[147786,147787,147788,147793,147794,147795,147799,147800,147801,147802,147807],{"id":16,"depth":98,"text":17},{"id":71,"depth":98,"text":72},{"id":195,"depth":98,"text":196,"children":147789},[147790,147791,147792],{"id":200,"depth":106,"text":201},{"id":258,"depth":106,"text":259},{"id":297,"depth":106,"text":298},{"id":377,"depth":98,"text":378},{"id":535,"depth":98,"text":536},{"id":647,"depth":98,"text":648,"children":147796},[147797,147798],{"id":651,"depth":106,"text":652},{"id":682,"depth":106,"text":683},{"id":712,"depth":98,"text":713},{"id":789,"depth":98,"text":790},{"id":978,"depth":98,"text":979},{"id":1065,"depth":98,"text":1066,"children":147803},[147804,147805,147806],{"id":1069,"depth":106,"text":1070},{"id":1095,"depth":106,"text":1096},{"id":1111,"depth":106,"text":1112},{"id":1173,"depth":98,"text":1174},{},{"title":5,"description":1249},{"id":147811,"title":147812,"body":147813,"description":1249,"extension":1250,"meta":150217,"navigation":1252,"path":150218,"seo":150219,"stem":150220,"__hash__":150221},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147814,"toc":150202},[147815,147818,147822,147825,147828,147845,147848,147890,147893,147897,147900,147903,147940,147943,147977,147980,148072,148076,148090,148093,148120,148123,148127,148230,148237,148240,148257,148261,148268,148457,148460,148533,148537,148540,148624,148627,148659,148663,148867,148870,148874,148880,148982,148985,149241,149245,149248,149251,149265,149267,149453,149457,149819,149825,149829,149832,149956,149959,150138,150141,150145,150178,150182,150199],[10,147816,147812],{"id":147817},"_10-json与pyecharts折线图",[14,147819,147821],{"id":147820},"_101-数据可视化","10.1 数据可视化",[19,147823,147824],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147826,147827],{},"常见图表：",[26,147829,147830,147833,147836,147839,147842],{},[29,147831,147832],{},"折线图：看趋势。",[29,147834,147835],{},"柱状图：看分类对比。",[29,147837,147838],{},"饼图：看占比。",[29,147840,147841],{},"地图：看地域分布。",[29,147843,147844],{},"散点图：看两个变量之间的关系。",[19,147846,147847],{},"Python 可视化常用库：",[458,147849,147850,147858],{},[461,147851,147852],{},[464,147853,147854,147856],{},[467,147855,469],{},[467,147857,24910],{},[474,147859,147860,147867,147875,147882],{},[464,147861,147862,147864],{},[479,147863,505],{},[479,147865,147866],{},"基础、经典、可定制",[464,147868,147869,147872],{},[479,147870,147871],{},"seaborn",[479,147873,147874],{},"统计图表更美观",[464,147876,147877,147879],{},[479,147878,513],{},[479,147880,147881],{},"生成交互式网页图表",[464,147883,147884,147887],{},[479,147885,147886],{},"plotly",[479,147888,147889],{},"交互图表能力强",[19,147891,147892],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147894,147896],{"id":147895},"_102-json回顾","10.2 JSON回顾",[19,147898,147899],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147901,147902],{},"Python 字典：",[60,147904,147906],{"className":121,"code":147905,"language":91,"meta":66,"style":66},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[39,147907,147908,147916,147927,147936],{"__ignoreMap":66},[84,147909,147910,147912,147914],{"class":86,"line":87},[84,147911,102796],{"class":154},[84,147913,867],{"class":129},[84,147915,16742],{"class":154},[84,147917,147918,147921,147923,147925],{"class":86,"line":98},[84,147919,147920],{"class":158},"    \"name\"",[84,147922,52586],{"class":154},[84,147924,70415],{"class":158},[84,147926,32619],{"class":154},[84,147928,147929,147932,147934],{"class":86,"line":106},[84,147930,147931],{"class":158},"    \"value\"",[84,147933,52586],{"class":154},[84,147935,98604],{"class":94},[84,147937,147938],{"class":86,"line":112},[84,147939,2746],{"class":154},[19,147941,147942],{},"JSON 字符串：",[60,147944,147947],{"className":147945,"code":147946,"language":48,"meta":66,"style":66},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[39,147948,147949,147953,147964,147973],{"__ignoreMap":66},[84,147950,147951],{"class":86,"line":87},[84,147952,2727],{"class":154},[84,147954,147955,147958,147960,147962],{"class":86,"line":98},[84,147956,147957],{"class":94},"  \"name\"",[84,147959,52586],{"class":154},[84,147961,70415],{"class":158},[84,147963,32619],{"class":154},[84,147965,147966,147969,147971],{"class":86,"line":106},[84,147967,147968],{"class":94},"  \"value\"",[84,147970,52586],{"class":154},[84,147972,98604],{"class":94},[84,147974,147975],{"class":86,"line":112},[84,147976,2746],{"class":154},[19,147978,147979],{},"Python 与 JSON 的转换：",[60,147981,147983],{"className":121,"code":147982,"language":91,"meta":66,"style":66},"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",[39,147984,147985,147992,147996,148021,148025,148044,148051,148055,148065],{"__ignoreMap":66},[84,147986,147987,147989],{"class":86,"line":87},[84,147988,31547],{"class":129},[84,147990,147991],{"class":154}," json\n",[84,147993,147994],{"class":86,"line":98},[84,147995,3578],{"emptyLinePlaceholder":1252},[84,147997,147998,148000,148002,148004,148006,148008,148010,148012,148015,148017,148019],{"class":86,"line":106},[84,147999,102796],{"class":154},[84,148001,867],{"class":129},[84,148003,5625],{"class":154},[84,148005,63825],{"class":158},[84,148007,52586],{"class":154},[84,148009,70415],{"class":158},[84,148011,846],{"class":154},[84,148013,148014],{"class":158},"\"value\"",[84,148016,52586],{"class":154},[84,148018,821],{"class":94},[84,148020,2746],{"class":154},[84,148022,148023],{"class":86,"line":112},[84,148024,3578],{"emptyLinePlaceholder":1252},[84,148026,148027,148030,148032,148035,148038,148040,148042],{"class":86,"line":425},[84,148028,148029],{"class":154},"json_text ",[84,148031,867],{"class":129},[84,148033,148034],{"class":154}," json.dumps(data, ",[84,148036,148037],{"class":928},"ensure_ascii",[84,148039,867],{"class":129},[84,148041,35139],{"class":94},[84,148043,162],{"class":154},[84,148045,148046,148048],{"class":86,"line":2395},[84,148047,730],{"class":94},[84,148049,148050],{"class":154},"(json_text)\n",[84,148052,148053],{"class":86,"line":2401},[84,148054,3578],{"emptyLinePlaceholder":1252},[84,148056,148057,148060,148062],{"class":86,"line":2492},[84,148058,148059],{"class":154},"new_data ",[84,148061,867],{"class":129},[84,148063,148064],{"class":154}," json.loads(json_text)\n",[84,148066,148067,148069],{"class":86,"line":2498},[84,148068,730],{"class":94},[84,148070,148071],{"class":154},"(new_data)\n",[14,148073,148075],{"id":148074},"_103-安装pyecharts","10.3 安装pyecharts",[60,148077,148079],{"className":78,"code":148078,"language":80,"meta":66,"style":66},"pip install pyecharts\n",[39,148080,148081],{"__ignoreMap":66},[84,148082,148083,148085,148087],{"class":86,"line":87},[84,148084,246],{"class":90},[84,148086,275],{"class":158},[84,148088,148089],{"class":158}," pyecharts\n",[19,148091,148092],{},"验证：",[60,148094,148096],{"className":121,"code":148095,"language":91,"meta":66,"style":66},"import pyecharts\n\nprint(pyecharts.__version__)\n",[39,148097,148098,148104,148108],{"__ignoreMap":66},[84,148099,148100,148102],{"class":86,"line":87},[84,148101,31547],{"class":129},[84,148103,148089],{"class":154},[84,148105,148106],{"class":86,"line":98},[84,148107,3578],{"emptyLinePlaceholder":1252},[84,148109,148110,148112,148115,148118],{"class":86,"line":106},[84,148111,730],{"class":94},[84,148113,148114],{"class":154},"(pyecharts.",[84,148116,148117],{"class":94},"__version__",[84,148119,162],{"class":154},[19,148121,148122],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148124,148126],{"id":148125},"_104-第一个折线图","10.4 第一个折线图",[60,148128,148130],{"className":121,"code":148129,"language":91,"meta":66,"style":66},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[39,148131,148132,148144,148148,148158,148188,148220],{"__ignoreMap":66},[84,148133,148134,148136,148139,148141],{"class":86,"line":87},[84,148135,31891],{"class":129},[84,148137,148138],{"class":154}," pyecharts.charts ",[84,148140,31547],{"class":129},[84,148142,148143],{"class":154}," Line\n",[84,148145,148146],{"class":86,"line":98},[84,148147,3578],{"emptyLinePlaceholder":1252},[84,148149,148150,148153,148155],{"class":86,"line":106},[84,148151,148152],{"class":154},"line ",[84,148154,867],{"class":129},[84,148156,148157],{"class":154}," Line()\n",[84,148159,148160,148163,148166,148168,148171,148173,148176,148178,148181,148183,148186],{"class":86,"line":112},[84,148161,148162],{"class":154},"line.add_xaxis([",[84,148164,148165],{"class":158},"\"周一\"",[84,148167,846],{"class":154},[84,148169,148170],{"class":158},"\"周二\"",[84,148172,846],{"class":154},[84,148174,148175],{"class":158},"\"周三\"",[84,148177,846],{"class":154},[84,148179,148180],{"class":158},"\"周四\"",[84,148182,846],{"class":154},[84,148184,148185],{"class":158},"\"周五\"",[84,148187,5834],{"class":154},[84,148189,148190,148193,148196,148198,148200,148202,148204,148206,148208,148210,148213,148215,148218],{"class":86,"line":425},[84,148191,148192],{"class":154},"line.add_yaxis(",[84,148194,148195],{"class":158},"\"销售额\"",[84,148197,78664],{"class":154},[84,148199,821],{"class":94},[84,148201,846],{"class":154},[84,148203,2125],{"class":94},[84,148205,846],{"class":154},[84,148207,2170],{"class":94},[84,148209,846],{"class":154},[84,148211,148212],{"class":94},"150",[84,148214,846],{"class":154},[84,148216,148217],{"class":94},"180",[84,148219,5834],{"class":154},[84,148221,148222,148225,148228],{"class":86,"line":2395},[84,148223,148224],{"class":154},"line.render(",[84,148226,148227],{"class":158},"\"line.html\"",[84,148229,162],{"class":154},[19,148231,148232,148233,148236],{},"运行后会生成 ",[39,148234,148235],{},"line.html","，用浏览器打开即可看到图表。",[19,148238,148239],{},"核心步骤：",[26,148241,148242,148245,148248,148251,148254],{},[29,148243,148244],{},"导入图表类。",[29,148246,148247],{},"创建图表对象。",[29,148249,148250],{},"添加 x 轴数据。",[29,148252,148253],{},"添加 y 轴数据。",[29,148255,148256],{},"渲染为 HTML。",[14,148258,148260],{"id":148259},"_105-全局配置","10.5 全局配置",[19,148262,148263,148264,148267],{},"常用配置在 ",[39,148265,148266],{},"pyecharts.options"," 中。",[60,148269,148271],{"className":121,"code":148270,"language":91,"meta":66,"style":66},"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",[39,148272,148273,148290,148300,148304,148312,148336,148364,148369,148388,148407,148425,148445,148449],{"__ignoreMap":66},[84,148274,148275,148277,148280,148282,148285,148287],{"class":86,"line":87},[84,148276,31891],{"class":129},[84,148278,148279],{"class":154}," pyecharts ",[84,148281,31547],{"class":129},[84,148283,148284],{"class":154}," options ",[84,148286,1157],{"class":129},[84,148288,148289],{"class":154}," opts\n",[84,148291,148292,148294,148296,148298],{"class":86,"line":98},[84,148293,31891],{"class":129},[84,148295,148138],{"class":154},[84,148297,31547],{"class":129},[84,148299,148143],{"class":154},[84,148301,148302],{"class":86,"line":106},[84,148303,3578],{"emptyLinePlaceholder":1252},[84,148305,148306,148308,148310],{"class":86,"line":112},[84,148307,148152],{"class":154},[84,148309,867],{"class":129},[84,148311,148157],{"class":154},[84,148313,148314,148316,148318,148320,148322,148324,148326,148328,148330,148332,148334],{"class":86,"line":425},[84,148315,148162],{"class":154},[84,148317,148165],{"class":158},[84,148319,846],{"class":154},[84,148321,148170],{"class":158},[84,148323,846],{"class":154},[84,148325,148175],{"class":158},[84,148327,846],{"class":154},[84,148329,148180],{"class":158},[84,148331,846],{"class":154},[84,148333,148185],{"class":158},[84,148335,5834],{"class":154},[84,148337,148338,148340,148342,148344,148346,148348,148350,148352,148354,148356,148358,148360,148362],{"class":86,"line":2395},[84,148339,148192],{"class":154},[84,148341,148195],{"class":158},[84,148343,78664],{"class":154},[84,148345,821],{"class":94},[84,148347,846],{"class":154},[84,148349,2125],{"class":94},[84,148351,846],{"class":154},[84,148353,2170],{"class":94},[84,148355,846],{"class":154},[84,148357,148212],{"class":94},[84,148359,846],{"class":154},[84,148361,148217],{"class":94},[84,148363,5834],{"class":154},[84,148365,148366],{"class":86,"line":2401},[84,148367,148368],{"class":154},"line.set_global_opts(\n",[84,148370,148371,148374,148376,148379,148381,148383,148386],{"class":86,"line":2492},[84,148372,148373],{"class":928},"    title_opts",[84,148375,867],{"class":129},[84,148377,148378],{"class":154},"opts.TitleOpts(",[84,148380,52556],{"class":928},[84,148382,867],{"class":129},[84,148384,148385],{"class":158},"\"一周销售额\"",[84,148387,39199],{"class":154},[84,148389,148390,148393,148395,148398,148400,148402,148405],{"class":86,"line":2498},[84,148391,148392],{"class":928},"    xaxis_opts",[84,148394,867],{"class":129},[84,148396,148397],{"class":154},"opts.AxisOpts(",[84,148399,80956],{"class":928},[84,148401,867],{"class":129},[84,148403,148404],{"class":158},"\"日期\"",[84,148406,39199],{"class":154},[84,148408,148409,148412,148414,148416,148418,148420,148423],{"class":86,"line":2510},[84,148410,148411],{"class":928},"    yaxis_opts",[84,148413,867],{"class":129},[84,148415,148397],{"class":154},[84,148417,80956],{"class":928},[84,148419,867],{"class":129},[84,148421,148422],{"class":158},"\"金额\"",[84,148424,39199],{"class":154},[84,148426,148427,148430,148432,148435,148438,148440,148443],{"class":86,"line":2793},[84,148428,148429],{"class":928},"    tooltip_opts",[84,148431,867],{"class":129},[84,148433,148434],{"class":154},"opts.TooltipOpts(",[84,148436,148437],{"class":928},"trigger",[84,148439,867],{"class":129},[84,148441,148442],{"class":158},"\"axis\"",[84,148444,39199],{"class":154},[84,148446,148447],{"class":86,"line":2798},[84,148448,162],{"class":154},[84,148450,148451,148453,148455],{"class":86,"line":2804},[84,148452,148224],{"class":154},[84,148454,148227],{"class":158},[84,148456,162],{"class":154},[19,148458,148459],{},"常见全局配置：",[458,148461,148462,148471],{},[461,148463,148464],{},[464,148465,148466,148469],{},[467,148467,148468],{},"配置",[467,148470,472],{},[474,148472,148473,148483,148493,148503,148513,148523],{},[464,148474,148475,148480],{},[479,148476,148477],{},[39,148478,148479],{},"TitleOpts",[479,148481,148482],{},"标题",[464,148484,148485,148490],{},[479,148486,148487],{},[39,148488,148489],{},"LegendOpts",[479,148491,148492],{},"图例",[464,148494,148495,148500],{},[479,148496,148497],{},[39,148498,148499],{},"TooltipOpts",[479,148501,148502],{},"提示框",[464,148504,148505,148510],{},[479,148506,148507],{},[39,148508,148509],{},"AxisOpts",[479,148511,148512],{},"坐标轴",[464,148514,148515,148520],{},[479,148516,148517],{},[39,148518,148519],{},"VisualMapOpts",[479,148521,148522],{},"视觉映射",[464,148524,148525,148530],{},[479,148526,148527],{},[39,148528,148529],{},"DataZoomOpts",[479,148531,148532],{},"区域缩放",[14,148534,148536],{"id":148535},"_106-系列配置","10.6 系列配置",[19,148538,148539],{},"系列配置作用于某一组数据。",[60,148541,148543],{"className":121,"code":148542,"language":91,"meta":66,"style":66},"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",[39,148544,148545,148550,148561,148590,148601,148620],{"__ignoreMap":66},[84,148546,148547],{"class":86,"line":87},[84,148548,148549],{"class":154},"line.add_yaxis(\n",[84,148551,148552,148555,148557,148559],{"class":86,"line":98},[84,148553,148554],{"class":928},"    series_name",[84,148556,867],{"class":129},[84,148558,148195],{"class":158},[84,148560,32619],{"class":154},[84,148562,148563,148566,148568,148570,148572,148574,148576,148578,148580,148582,148584,148586,148588],{"class":86,"line":106},[84,148564,148565],{"class":928},"    y_axis",[84,148567,867],{"class":129},[84,148569,2198],{"class":154},[84,148571,821],{"class":94},[84,148573,846],{"class":154},[84,148575,2125],{"class":94},[84,148577,846],{"class":154},[84,148579,2170],{"class":94},[84,148581,846],{"class":154},[84,148583,148212],{"class":94},[84,148585,846],{"class":154},[84,148587,148217],{"class":94},[84,148589,88982],{"class":154},[84,148591,148592,148595,148597,148599],{"class":86,"line":112},[84,148593,148594],{"class":928},"    is_smooth",[84,148596,867],{"class":129},[84,148598,32629],{"class":94},[84,148600,32619],{"class":154},[84,148602,148603,148606,148608,148611,148614,148616,148618],{"class":86,"line":425},[84,148604,148605],{"class":928},"    label_opts",[84,148607,867],{"class":129},[84,148609,148610],{"class":154},"opts.LabelOpts(",[84,148612,148613],{"class":928},"is_show",[84,148615,867],{"class":129},[84,148617,32629],{"class":94},[84,148619,39199],{"class":154},[84,148621,148622],{"class":86,"line":2395},[84,148623,162],{"class":154},[19,148625,148626],{},"常用参数：",[26,148628,148629,148635,148641,148647,148653],{},[29,148630,148631,148634],{},[39,148632,148633],{},"series_name","：系列名称。",[29,148636,148637,148640],{},[39,148638,148639],{},"y_axis","：y 轴数据。",[29,148642,148643,148646],{},[39,148644,148645],{},"is_smooth","：是否平滑曲线。",[29,148648,148649,148652],{},[39,148650,148651],{},"label_opts","：标签配置。",[29,148654,148655,148658],{},[39,148656,148657],{},"symbol_size","：标记点大小。",[14,148660,148662],{"id":148661},"_107-多条折线","10.7 多条折线",[60,148664,148666],{"className":121,"code":148665,"language":91,"meta":66,"style":66},"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",[39,148667,148668,148682,148692,148696,148725,148729,148737,148742,148780,148817,148821,148838,148854,148858],{"__ignoreMap":66},[84,148669,148670,148672,148674,148676,148678,148680],{"class":86,"line":87},[84,148671,31891],{"class":129},[84,148673,148279],{"class":154},[84,148675,31547],{"class":129},[84,148677,148284],{"class":154},[84,148679,1157],{"class":129},[84,148681,148289],{"class":154},[84,148683,148684,148686,148688,148690],{"class":86,"line":98},[84,148685,31891],{"class":129},[84,148687,148138],{"class":154},[84,148689,31547],{"class":129},[84,148691,148143],{"class":154},[84,148693,148694],{"class":86,"line":106},[84,148695,3578],{"emptyLinePlaceholder":1252},[84,148697,148698,148701,148703,148705,148707,148709,148711,148713,148715,148717,148719,148721,148723],{"class":86,"line":112},[84,148699,148700],{"class":154},"dates ",[84,148702,867],{"class":129},[84,148704,53375],{"class":154},[84,148706,148165],{"class":158},[84,148708,846],{"class":154},[84,148710,148170],{"class":158},[84,148712,846],{"class":154},[84,148714,148175],{"class":158},[84,148716,846],{"class":154},[84,148718,148180],{"class":158},[84,148720,846],{"class":154},[84,148722,148185],{"class":158},[84,148724,34398],{"class":154},[84,148726,148727],{"class":86,"line":425},[84,148728,3578],{"emptyLinePlaceholder":1252},[84,148730,148731,148733,148735],{"class":86,"line":2395},[84,148732,148152],{"class":154},[84,148734,867],{"class":129},[84,148736,148157],{"class":154},[84,148738,148739],{"class":86,"line":2401},[84,148740,148741],{"class":154},"line.add_xaxis(dates)\n",[84,148743,148744,148746,148749,148751,148753,148755,148758,148760,148762,148764,148766,148768,148770,148772,148774,148776,148778],{"class":86,"line":2492},[84,148745,148192],{"class":154},[84,148747,148748],{"class":158},"\"线上销售\"",[84,148750,78664],{"class":154},[84,148752,821],{"class":94},[84,148754,846],{"class":154},[84,148756,148757],{"class":94},"130",[84,148759,846],{"class":154},[84,148761,2125],{"class":94},[84,148763,846],{"class":154},[84,148765,22218],{"class":94},[84,148767,846],{"class":154},[84,148769,2903],{"class":94},[84,148771,113336],{"class":154},[84,148773,148645],{"class":928},[84,148775,867],{"class":129},[84,148777,32629],{"class":94},[84,148779,162],{"class":154},[84,148781,148782,148784,148787,148789,148791,148793,148795,148797,148799,148801,148803,148805,148807,148809,148811,148813,148815],{"class":86,"line":2498},[84,148783,148192],{"class":154},[84,148785,148786],{"class":158},"\"线下销售\"",[84,148788,78664],{"class":154},[84,148790,1921],{"class":94},[84,148792,846],{"class":154},[84,148794,2170],{"class":94},[84,148796,846],{"class":154},[84,148798,821],{"class":94},[84,148800,846],{"class":154},[84,148802,2125],{"class":94},[84,148804,846],{"class":154},[84,148806,148212],{"class":94},[84,148808,113336],{"class":154},[84,148810,148645],{"class":928},[84,148812,867],{"class":129},[84,148814,32629],{"class":94},[84,148816,162],{"class":154},[84,148818,148819],{"class":86,"line":2510},[84,148820,148368],{"class":154},[84,148822,148823,148825,148827,148829,148831,148833,148836],{"class":86,"line":2793},[84,148824,148373],{"class":928},[84,148826,867],{"class":129},[84,148828,148378],{"class":154},[84,148830,52556],{"class":928},[84,148832,867],{"class":129},[84,148834,148835],{"class":158},"\"线上线下销售趋势\"",[84,148837,39199],{"class":154},[84,148839,148840,148842,148844,148846,148848,148850,148852],{"class":86,"line":2798},[84,148841,148429],{"class":928},[84,148843,867],{"class":129},[84,148845,148434],{"class":154},[84,148847,148437],{"class":928},[84,148849,867],{"class":129},[84,148851,148442],{"class":158},[84,148853,39199],{"class":154},[84,148855,148856],{"class":86,"line":2804},[84,148857,162],{"class":154},[84,148859,148860,148862,148865],{"class":86,"line":2809},[84,148861,148224],{"class":154},[84,148863,148864],{"class":158},"\"sales.html\"",[84,148866,162],{"class":154},[19,148868,148869],{},"多条折线适合比较不同指标或不同地区。",[14,148871,148873],{"id":148872},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148875,148876,148877,720],{},"假设 ",[39,148878,148879],{},"sales.json",[60,148881,148883],{"className":147945,"code":148882,"language":48,"meta":66,"style":66},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[39,148884,148885,148890,148922,148950,148978],{"__ignoreMap":66},[84,148886,148887],{"class":86,"line":87},[84,148888,148889],{"class":154},"[\n",[84,148891,148892,148895,148898,148900,148902,148904,148907,148909,148911,148913,148916,148918,148920],{"class":86,"line":98},[84,148893,148894],{"class":154},"  {",[84,148896,148897],{"class":94},"\"date\"",[84,148899,52586],{"class":154},[84,148901,148165],{"class":158},[84,148903,846],{"class":154},[84,148905,148906],{"class":94},"\"online\"",[84,148908,52586],{"class":154},[84,148910,821],{"class":94},[84,148912,846],{"class":154},[84,148914,148915],{"class":94},"\"offline\"",[84,148917,52586],{"class":154},[84,148919,1921],{"class":94},[84,148921,6107],{"class":154},[84,148923,148924,148926,148928,148930,148932,148934,148936,148938,148940,148942,148944,148946,148948],{"class":86,"line":106},[84,148925,148894],{"class":154},[84,148927,148897],{"class":94},[84,148929,52586],{"class":154},[84,148931,148170],{"class":158},[84,148933,846],{"class":154},[84,148935,148906],{"class":94},[84,148937,52586],{"class":154},[84,148939,148757],{"class":94},[84,148941,846],{"class":154},[84,148943,148915],{"class":94},[84,148945,52586],{"class":154},[84,148947,2170],{"class":94},[84,148949,6107],{"class":154},[84,148951,148952,148954,148956,148958,148960,148962,148964,148966,148968,148970,148972,148974,148976],{"class":86,"line":112},[84,148953,148894],{"class":154},[84,148955,148897],{"class":94},[84,148957,52586],{"class":154},[84,148959,148175],{"class":158},[84,148961,846],{"class":154},[84,148963,148906],{"class":94},[84,148965,52586],{"class":154},[84,148967,2125],{"class":94},[84,148969,846],{"class":154},[84,148971,148915],{"class":94},[84,148973,52586],{"class":154},[84,148975,821],{"class":94},[84,148977,2746],{"class":154},[84,148979,148980],{"class":86,"line":425},[84,148981,34398],{"class":154},[19,148983,148984],{},"读取并绘图：",[60,148986,148988],{"className":121,"code":148987,"language":91,"meta":66,"style":66},"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",[39,148989,148990,148996,149010,149020,149024,149056,149069,149073,149081,149090,149099,149103,149115,149124,149133,149142,149146,149154,149158,149175,149192,149196,149213,149229,149233],{"__ignoreMap":66},[84,148991,148992,148994],{"class":86,"line":87},[84,148993,31547],{"class":129},[84,148995,147991],{"class":154},[84,148997,148998,149000,149002,149004,149006,149008],{"class":86,"line":98},[84,148999,31891],{"class":129},[84,149001,148279],{"class":154},[84,149003,31547],{"class":129},[84,149005,148284],{"class":154},[84,149007,1157],{"class":129},[84,149009,148289],{"class":154},[84,149011,149012,149014,149016,149018],{"class":86,"line":106},[84,149013,31891],{"class":129},[84,149015,148138],{"class":154},[84,149017,31547],{"class":129},[84,149019,148143],{"class":154},[84,149021,149022],{"class":86,"line":112},[84,149023,3578],{"emptyLinePlaceholder":1252},[84,149025,149026,149028,149030,149032,149035,149037,149039,149041,149043,149045,149047,149049,149051,149054],{"class":86,"line":425},[84,149027,1128],{"class":129},[84,149029,1131],{"class":94},[84,149031,155],{"class":154},[84,149033,149034],{"class":158},"\"sales.json\"",[84,149036,846],{"class":154},[84,149038,1141],{"class":158},[84,149040,846],{"class":154},[84,149042,1146],{"class":928},[84,149044,867],{"class":129},[84,149046,1151],{"class":158},[84,149048,1154],{"class":154},[84,149050,1157],{"class":129},[84,149052,149053],{"class":928}," file",[84,149055,4917],{"class":154},[84,149057,149058,149060,149062,149065,149067],{"class":86,"line":2395},[84,149059,102559],{"class":154},[84,149061,867],{"class":129},[84,149063,149064],{"class":154}," json.load(",[84,149066,46506],{"class":928},[84,149068,162],{"class":154},[84,149070,149071],{"class":86,"line":2401},[84,149072,3578],{"emptyLinePlaceholder":1252},[84,149074,149075,149077,149079],{"class":86,"line":2492},[84,149076,148700],{"class":154},[84,149078,867],{"class":129},[84,149080,52987],{"class":154},[84,149082,149083,149086,149088],{"class":86,"line":2498},[84,149084,149085],{"class":154},"online_sales ",[84,149087,867],{"class":129},[84,149089,52987],{"class":154},[84,149091,149092,149095,149097],{"class":86,"line":2510},[84,149093,149094],{"class":154},"offline_sales ",[84,149096,867],{"class":129},[84,149098,52987],{"class":154},[84,149100,149101],{"class":86,"line":2793},[84,149102,3578],{"emptyLinePlaceholder":1252},[84,149104,149105,149107,149110,149112],{"class":86,"line":2798},[84,149106,4203],{"class":129},[84,149108,149109],{"class":154}," item ",[84,149111,27206],{"class":129},[84,149113,149114],{"class":154}," data:\n",[84,149116,149117,149120,149122],{"class":86,"line":2804},[84,149118,149119],{"class":154},"    dates.append(item[",[84,149121,148897],{"class":158},[84,149123,5834],{"class":154},[84,149125,149126,149129,149131],{"class":86,"line":2809},[84,149127,149128],{"class":154},"    online_sales.append(item[",[84,149130,148906],{"class":158},[84,149132,5834],{"class":154},[84,149134,149135,149138,149140],{"class":86,"line":2823},[84,149136,149137],{"class":154},"    offline_sales.append(item[",[84,149139,148915],{"class":158},[84,149141,5834],{"class":154},[84,149143,149144],{"class":86,"line":2828},[84,149145,3578],{"emptyLinePlaceholder":1252},[84,149147,149148,149150,149152],{"class":86,"line":2834},[84,149149,148152],{"class":154},[84,149151,867],{"class":129},[84,149153,148157],{"class":154},[84,149155,149156],{"class":86,"line":2855},[84,149157,148741],{"class":154},[84,149159,149160,149162,149164,149167,149169,149171,149173],{"class":86,"line":2860},[84,149161,148192],{"class":154},[84,149163,148748],{"class":158},[84,149165,149166],{"class":154},", online_sales, ",[84,149168,148645],{"class":928},[84,149170,867],{"class":129},[84,149172,32629],{"class":94},[84,149174,162],{"class":154},[84,149176,149177,149179,149181,149184,149186,149188,149190],{"class":86,"line":2874},[84,149178,148192],{"class":154},[84,149180,148786],{"class":158},[84,149182,149183],{"class":154},", offline_sales, ",[84,149185,148645],{"class":928},[84,149187,867],{"class":129},[84,149189,32629],{"class":94},[84,149191,162],{"class":154},[84,149193,149194],{"class":86,"line":2879},[84,149195,148368],{"class":154},[84,149197,149198,149200,149202,149204,149206,149208,149211],{"class":86,"line":2908},[84,149199,148373],{"class":928},[84,149201,867],{"class":129},[84,149203,148378],{"class":154},[84,149205,52556],{"class":928},[84,149207,867],{"class":129},[84,149209,149210],{"class":158},"\"销售趋势\"",[84,149212,39199],{"class":154},[84,149214,149215,149217,149219,149221,149223,149225,149227],{"class":86,"line":2913},[84,149216,148429],{"class":928},[84,149218,867],{"class":129},[84,149220,148434],{"class":154},[84,149222,148437],{"class":928},[84,149224,867],{"class":129},[84,149226,148442],{"class":158},[84,149228,39199],{"class":154},[84,149230,149231],{"class":86,"line":2930},[84,149232,162],{"class":154},[84,149234,149235,149237,149239],{"class":86,"line":2935},[84,149236,148224],{"class":154},[84,149238,148864],{"class":158},[84,149240,162],{"class":154},[14,149242,149244],{"id":149243},"_109-数据清洗","10.9 数据清洗",[19,149246,149247],{},"真实数据经常不整齐，需要清洗。",[19,149249,149250],{},"常见问题：",[26,149252,149253,149256,149259,149262],{},[29,149254,149255],{},"数字是字符串。",[29,149257,149258],{},"字段缺失。",[29,149260,149261],{},"空值。",[29,149263,149264],{},"日期格式不统一。",[19,149266,16305],{},[60,149268,149270],{"className":121,"code":149269,"language":91,"meta":66,"style":66},"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",[39,149271,149272,149281,149304,149324,149345,149349,149353,149361,149370,149374,149385,149399,149408,149413,149417,149425,149435,149439,149446],{"__ignoreMap":66},[84,149273,149274,149277,149279],{"class":86,"line":87},[84,149275,149276],{"class":154},"raw_data ",[84,149278,867],{"class":129},[84,149280,56594],{"class":154},[84,149282,149283,149286,149288,149290,149292,149294,149297,149299,149302],{"class":86,"line":98},[84,149284,149285],{"class":154},"    {",[84,149287,148897],{"class":158},[84,149289,52586],{"class":154},[84,149291,148165],{"class":158},[84,149293,846],{"class":154},[84,149295,149296],{"class":158},"\"sales\"",[84,149298,52586],{"class":154},[84,149300,149301],{"class":158},"\"100\"",[84,149303,6107],{"class":154},[84,149305,149306,149308,149310,149312,149314,149316,149318,149320,149322],{"class":86,"line":106},[84,149307,149285],{"class":154},[84,149309,148897],{"class":158},[84,149311,52586],{"class":154},[84,149313,148170],{"class":158},[84,149315,846],{"class":154},[84,149317,149296],{"class":158},[84,149319,52586],{"class":154},[84,149321,8824],{"class":158},[84,149323,6107],{"class":154},[84,149325,149326,149328,149330,149332,149334,149336,149338,149340,149343],{"class":86,"line":112},[84,149327,149285],{"class":154},[84,149329,148897],{"class":158},[84,149331,52586],{"class":154},[84,149333,148175],{"class":158},[84,149335,846],{"class":154},[84,149337,149296],{"class":158},[84,149339,52586],{"class":154},[84,149341,149342],{"class":158},"\"120\"",[84,149344,6107],{"class":154},[84,149346,149347],{"class":86,"line":425},[84,149348,34398],{"class":154},[84,149350,149351],{"class":86,"line":2395},[84,149352,3578],{"emptyLinePlaceholder":1252},[84,149354,149355,149357,149359],{"class":86,"line":2401},[84,149356,148700],{"class":154},[84,149358,867],{"class":129},[84,149360,52987],{"class":154},[84,149362,149363,149366,149368],{"class":86,"line":2492},[84,149364,149365],{"class":154},"sales ",[84,149367,867],{"class":129},[84,149369,52987],{"class":154},[84,149371,149372],{"class":86,"line":2498},[84,149373,3578],{"emptyLinePlaceholder":1252},[84,149375,149376,149378,149380,149382],{"class":86,"line":2510},[84,149377,4203],{"class":129},[84,149379,149109],{"class":154},[84,149381,27206],{"class":129},[84,149383,149384],{"class":154}," raw_data:\n",[84,149386,149387,149390,149392,149395,149397],{"class":86,"line":2793},[84,149388,149389],{"class":154},"    value ",[84,149391,867],{"class":129},[84,149393,149394],{"class":154}," item.get(",[84,149396,149296],{"class":158},[84,149398,162],{"class":154},[84,149400,149401,149403,149405],{"class":86,"line":2798},[84,149402,4279],{"class":129},[84,149404,40082],{"class":129},[84,149406,149407],{"class":154}," value:\n",[84,149409,149410],{"class":86,"line":2804},[84,149411,149412],{"class":129},"        continue\n",[84,149414,149415],{"class":86,"line":2809},[84,149416,3578],{"emptyLinePlaceholder":1252},[84,149418,149419,149421,149423],{"class":86,"line":2823},[84,149420,149119],{"class":154},[84,149422,148897],{"class":158},[84,149424,5834],{"class":154},[84,149426,149427,149430,149432],{"class":86,"line":2828},[84,149428,149429],{"class":154},"    sales.append(",[84,149431,1327],{"class":94},[84,149433,149434],{"class":154},"(value))\n",[84,149436,149437],{"class":86,"line":2834},[84,149438,3578],{"emptyLinePlaceholder":1252},[84,149440,149441,149443],{"class":86,"line":2855},[84,149442,730],{"class":94},[84,149444,149445],{"class":154},"(dates)\n",[84,149447,149448,149450],{"class":86,"line":2860},[84,149449,730],{"class":94},[84,149451,149452],{"class":154},"(sales)\n",[14,149454,149456],{"id":149455},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[60,149458,149460],{"className":121,"code":149459,"language":91,"meta":66,"style":66},"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",[39,149461,149462,149476,149486,149490,149498,149519,149541,149563,149585,149607,149611,149615,149637,149658,149662,149670,149674,149678,149688,149697,149707,149723,149727,149731,149748,149764,149780,149796,149806,149810],{"__ignoreMap":66},[84,149463,149464,149466,149468,149470,149472,149474],{"class":86,"line":87},[84,149465,31891],{"class":129},[84,149467,148279],{"class":154},[84,149469,31547],{"class":129},[84,149471,148284],{"class":154},[84,149473,1157],{"class":129},[84,149475,148289],{"class":154},[84,149477,149478,149480,149482,149484],{"class":86,"line":98},[84,149479,31891],{"class":129},[84,149481,148138],{"class":154},[84,149483,31547],{"class":129},[84,149485,148143],{"class":154},[84,149487,149488],{"class":86,"line":106},[84,149489,3578],{"emptyLinePlaceholder":1252},[84,149491,149492,149494,149496],{"class":86,"line":112},[84,149493,149365],{"class":154},[84,149495,867],{"class":129},[84,149497,56594],{"class":154},[84,149499,149500,149502,149504,149506,149509,149511,149513,149515,149517],{"class":86,"line":425},[84,149501,149285],{"class":154},[84,149503,148897],{"class":158},[84,149505,52586],{"class":154},[84,149507,149508],{"class":158},"\"2024-10-01\"",[84,149510,846],{"class":154},[84,149512,85230],{"class":158},[84,149514,52586],{"class":154},[84,149516,93169],{"class":94},[84,149518,6107],{"class":154},[84,149520,149521,149523,149525,149527,149530,149532,149534,149536,149539],{"class":86,"line":2395},[84,149522,149285],{"class":154},[84,149524,148897],{"class":158},[84,149526,52586],{"class":154},[84,149528,149529],{"class":158},"\"2024-10-02\"",[84,149531,846],{"class":154},[84,149533,85230],{"class":158},[84,149535,52586],{"class":154},[84,149537,149538],{"class":94},"1800",[84,149540,6107],{"class":154},[84,149542,149543,149545,149547,149549,149552,149554,149556,149558,149561],{"class":86,"line":2401},[84,149544,149285],{"class":154},[84,149546,148897],{"class":158},[84,149548,52586],{"class":154},[84,149550,149551],{"class":158},"\"2024-10-03\"",[84,149553,846],{"class":154},[84,149555,85230],{"class":158},[84,149557,52586],{"class":154},[84,149559,149560],{"class":94},"1500",[84,149562,6107],{"class":154},[84,149564,149565,149567,149569,149571,149574,149576,149578,149580,149583],{"class":86,"line":2492},[84,149566,149285],{"class":154},[84,149568,148897],{"class":158},[84,149570,52586],{"class":154},[84,149572,149573],{"class":158},"\"2024-10-04\"",[84,149575,846],{"class":154},[84,149577,85230],{"class":158},[84,149579,52586],{"class":154},[84,149581,149582],{"class":94},"2100",[84,149584,6107],{"class":154},[84,149586,149587,149589,149591,149593,149596,149598,149600,149602,149605],{"class":86,"line":2498},[84,149588,149285],{"class":154},[84,149590,148897],{"class":158},[84,149592,52586],{"class":154},[84,149594,149595],{"class":158},"\"2024-10-05\"",[84,149597,846],{"class":154},[84,149599,85230],{"class":158},[84,149601,52586],{"class":154},[84,149603,149604],{"class":94},"2600",[84,149606,6107],{"class":154},[84,149608,149609],{"class":86,"line":2510},[84,149610,34398],{"class":154},[84,149612,149613],{"class":86,"line":2793},[84,149614,3578],{"emptyLinePlaceholder":1252},[84,149616,149617,149619,149621,149624,149626,149628,149630,149632,149634],{"class":86,"line":2798},[84,149618,148700],{"class":154},[84,149620,867],{"class":129},[84,149622,149623],{"class":154}," [item[",[84,149625,148897],{"class":158},[84,149627,5620],{"class":154},[84,149629,4203],{"class":129},[84,149631,149109],{"class":154},[84,149633,27206],{"class":129},[84,149635,149636],{"class":154}," sales]\n",[84,149638,149639,149642,149644,149646,149648,149650,149652,149654,149656],{"class":86,"line":2804},[84,149640,149641],{"class":154},"amounts ",[84,149643,867],{"class":129},[84,149645,149623],{"class":154},[84,149647,85230],{"class":158},[84,149649,5620],{"class":154},[84,149651,4203],{"class":129},[84,149653,149109],{"class":154},[84,149655,27206],{"class":129},[84,149657,149636],{"class":154},[84,149659,149660],{"class":86,"line":2809},[84,149661,3578],{"emptyLinePlaceholder":1252},[84,149663,149664,149666,149668],{"class":86,"line":2823},[84,149665,148152],{"class":154},[84,149667,867],{"class":129},[84,149669,148157],{"class":154},[84,149671,149672],{"class":86,"line":2828},[84,149673,148741],{"class":154},[84,149675,149676],{"class":86,"line":2834},[84,149677,148549],{"class":154},[84,149679,149680,149682,149684,149686],{"class":86,"line":2855},[84,149681,148554],{"class":928},[84,149683,867],{"class":129},[84,149685,148195],{"class":158},[84,149687,32619],{"class":154},[84,149689,149690,149692,149694],{"class":86,"line":2860},[84,149691,148565],{"class":928},[84,149693,867],{"class":129},[84,149695,149696],{"class":154},"amounts,\n",[84,149698,149699,149701,149703,149705],{"class":86,"line":2874},[84,149700,148594],{"class":928},[84,149702,867],{"class":129},[84,149704,32629],{"class":94},[84,149706,32619],{"class":154},[84,149708,149709,149711,149713,149715,149717,149719,149721],{"class":86,"line":2879},[84,149710,148605],{"class":928},[84,149712,867],{"class":129},[84,149714,148610],{"class":154},[84,149716,148613],{"class":928},[84,149718,867],{"class":129},[84,149720,32629],{"class":94},[84,149722,39199],{"class":154},[84,149724,149725],{"class":86,"line":2908},[84,149726,162],{"class":154},[84,149728,149729],{"class":86,"line":2913},[84,149730,148368],{"class":154},[84,149732,149733,149735,149737,149739,149741,149743,149746],{"class":86,"line":2930},[84,149734,148373],{"class":928},[84,149736,867],{"class":129},[84,149738,148378],{"class":154},[84,149740,52556],{"class":928},[84,149742,867],{"class":129},[84,149744,149745],{"class":158},"\"每日销售额\"",[84,149747,39199],{"class":154},[84,149749,149750,149752,149754,149756,149758,149760,149762],{"class":86,"line":2935},[84,149751,148392],{"class":928},[84,149753,867],{"class":129},[84,149755,148397],{"class":154},[84,149757,80956],{"class":928},[84,149759,867],{"class":129},[84,149761,148404],{"class":158},[84,149763,39199],{"class":154},[84,149765,149766,149768,149770,149772,149774,149776,149778],{"class":86,"line":2940},[84,149767,148411],{"class":928},[84,149769,867],{"class":129},[84,149771,148397],{"class":154},[84,149773,80956],{"class":928},[84,149775,867],{"class":129},[84,149777,148422],{"class":158},[84,149779,39199],{"class":154},[84,149781,149782,149784,149786,149788,149790,149792,149794],{"class":86,"line":2945},[84,149783,148429],{"class":928},[84,149785,867],{"class":129},[84,149787,148434],{"class":154},[84,149789,148437],{"class":928},[84,149791,867],{"class":129},[84,149793,148442],{"class":158},[84,149795,39199],{"class":154},[84,149797,149798,149801,149803],{"class":86,"line":2959},[84,149799,149800],{"class":928},"    datazoom_opts",[84,149802,867],{"class":129},[84,149804,149805],{"class":154},"[opts.DataZoomOpts()],\n",[84,149807,149808],{"class":86,"line":2964},[84,149809,162],{"class":154},[84,149811,149812,149814,149817],{"class":86,"line":3755},[84,149813,148224],{"class":154},[84,149815,149816],{"class":158},"\"daily_sales.html\"",[84,149818,162],{"class":154},[19,149820,149821,149824],{},[39,149822,149823],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149826,149828],{"id":149827},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149830,149831],{},"如果数据结构如下：",[60,149833,149835],{"className":121,"code":149834,"language":91,"meta":66,"style":66},"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",[39,149836,149837,149845,149853,149875,149896,149901,149908,149928,149948,149952],{"__ignoreMap":66},[84,149838,149839,149841,149843],{"class":86,"line":87},[84,149840,102796],{"class":154},[84,149842,867],{"class":129},[84,149844,16742],{"class":154},[84,149846,149847,149850],{"class":86,"line":98},[84,149848,149849],{"class":158},"    \"北京\"",[84,149851,149852],{"class":154},": [\n",[84,149854,149855,149857,149859,149861,149864,149866,149869,149871,149873],{"class":86,"line":106},[84,149856,6094],{"class":154},[84,149858,148897],{"class":158},[84,149860,52586],{"class":154},[84,149862,149863],{"class":158},"\"2024-01-01\"",[84,149865,846],{"class":154},[84,149867,149868],{"class":158},"\"confirm\"",[84,149870,52586],{"class":154},[84,149872,1756],{"class":94},[84,149874,6107],{"class":154},[84,149876,149877,149879,149881,149883,149886,149888,149890,149892,149894],{"class":86,"line":112},[84,149878,6094],{"class":154},[84,149880,148897],{"class":158},[84,149882,52586],{"class":154},[84,149884,149885],{"class":158},"\"2024-01-02\"",[84,149887,846],{"class":154},[84,149889,149868],{"class":158},[84,149891,52586],{"class":154},[84,149893,1807],{"class":94},[84,149895,6107],{"class":154},[84,149897,149898],{"class":86,"line":425},[84,149899,149900],{"class":154},"    ],\n",[84,149902,149903,149906],{"class":86,"line":2395},[84,149904,149905],{"class":158},"    \"上海\"",[84,149907,149852],{"class":154},[84,149909,149910,149912,149914,149916,149918,149920,149922,149924,149926],{"class":86,"line":2401},[84,149911,6094],{"class":154},[84,149913,148897],{"class":158},[84,149915,52586],{"class":154},[84,149917,149863],{"class":158},[84,149919,846],{"class":154},[84,149921,149868],{"class":158},[84,149923,52586],{"class":154},[84,149925,1705],{"class":94},[84,149927,6107],{"class":154},[84,149929,149930,149932,149934,149936,149938,149940,149942,149944,149946],{"class":86,"line":2492},[84,149931,6094],{"class":154},[84,149933,148897],{"class":158},[84,149935,52586],{"class":154},[84,149937,149885],{"class":158},[84,149939,846],{"class":154},[84,149941,149868],{"class":158},[84,149943,52586],{"class":154},[84,149945,1832],{"class":94},[84,149947,6107],{"class":154},[84,149949,149950],{"class":86,"line":2498},[84,149951,149900],{"class":154},[84,149953,149954],{"class":86,"line":2510},[84,149955,2746],{"class":154},[19,149957,149958],{},"绘制多地区趋势：",[60,149960,149962],{"className":121,"code":149961,"language":91,"meta":66,"style":66},"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",[39,149963,149964,149978,149988,149992,150017,150021,150029,150033,150037,150049,150071,150084,150088,150092,150109,150125,150129],{"__ignoreMap":66},[84,149965,149966,149968,149970,149972,149974,149976],{"class":86,"line":87},[84,149967,31891],{"class":129},[84,149969,148279],{"class":154},[84,149971,31547],{"class":129},[84,149973,148284],{"class":154},[84,149975,1157],{"class":129},[84,149977,148289],{"class":154},[84,149979,149980,149982,149984,149986],{"class":86,"line":98},[84,149981,31891],{"class":129},[84,149983,148138],{"class":154},[84,149985,31547],{"class":129},[84,149987,148143],{"class":154},[84,149989,149990],{"class":86,"line":106},[84,149991,3578],{"emptyLinePlaceholder":1252},[84,149993,149994,149996,149998,150000,150002,150004,150006,150008,150010,150013,150015],{"class":86,"line":112},[84,149995,148700],{"class":154},[84,149997,867],{"class":129},[84,149999,149623],{"class":154},[84,150001,148897],{"class":158},[84,150003,5620],{"class":154},[84,150005,4203],{"class":129},[84,150007,149109],{"class":154},[84,150009,27206],{"class":129},[84,150011,150012],{"class":154}," data[",[84,150014,70415],{"class":158},[84,150016,78673],{"class":154},[84,150018,150019],{"class":86,"line":425},[84,150020,3578],{"emptyLinePlaceholder":1252},[84,150022,150023,150025,150027],{"class":86,"line":2395},[84,150024,148152],{"class":154},[84,150026,867],{"class":129},[84,150028,148157],{"class":154},[84,150030,150031],{"class":86,"line":2401},[84,150032,148741],{"class":154},[84,150034,150035],{"class":86,"line":2492},[84,150036,3578],{"emptyLinePlaceholder":1252},[84,150038,150039,150041,150044,150046],{"class":86,"line":2498},[84,150040,4203],{"class":129},[84,150042,150043],{"class":154}," city, records ",[84,150045,27206],{"class":129},[84,150047,150048],{"class":154}," data.items():\n",[84,150050,150051,150054,150056,150058,150060,150062,150064,150066,150068],{"class":86,"line":2510},[84,150052,150053],{"class":154},"    values ",[84,150055,867],{"class":129},[84,150057,149623],{"class":154},[84,150059,149868],{"class":158},[84,150061,5620],{"class":154},[84,150063,4203],{"class":129},[84,150065,149109],{"class":154},[84,150067,27206],{"class":129},[84,150069,150070],{"class":154}," records]\n",[84,150072,150073,150076,150078,150080,150082],{"class":86,"line":2793},[84,150074,150075],{"class":154},"    line.add_yaxis(city, values, ",[84,150077,148645],{"class":928},[84,150079,867],{"class":129},[84,150081,32629],{"class":94},[84,150083,162],{"class":154},[84,150085,150086],{"class":86,"line":2798},[84,150087,3578],{"emptyLinePlaceholder":1252},[84,150089,150090],{"class":86,"line":2804},[84,150091,148368],{"class":154},[84,150093,150094,150096,150098,150100,150102,150104,150107],{"class":86,"line":2809},[84,150095,148373],{"class":928},[84,150097,867],{"class":129},[84,150099,148378],{"class":154},[84,150101,52556],{"class":928},[84,150103,867],{"class":129},[84,150105,150106],{"class":158},"\"多地区趋势图\"",[84,150108,39199],{"class":154},[84,150110,150111,150113,150115,150117,150119,150121,150123],{"class":86,"line":2823},[84,150112,148429],{"class":928},[84,150114,867],{"class":129},[84,150116,148434],{"class":154},[84,150118,148437],{"class":928},[84,150120,867],{"class":129},[84,150122,148442],{"class":158},[84,150124,39199],{"class":154},[84,150126,150127],{"class":86,"line":2828},[84,150128,162],{"class":154},[84,150130,150131,150133,150136],{"class":86,"line":2834},[84,150132,148224],{"class":154},[84,150134,150135],{"class":158},"\"trend.html\"",[84,150137,162],{"class":154},[19,150139,150140],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150142,150144],{"id":150143},"_1012-易错点","10.12 易错点",[26,150146,150147,150153,150159,150169,150175],{},[29,150148,150149,150152],{},[39,150150,150151],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150154,150155,150158],{},[39,150156,150157],{},"render()"," 生成的是 HTML，不是图片。",[29,150160,150161,150162,150165,150166,55],{},"JSON 字符串用 ",[39,150163,150164],{},"json.loads()","，JSON 文件用 ",[39,150167,150168],{},"json.load()",[29,150170,150171,150172,55],{},"中文 JSON 保存时加 ",[39,150173,150174],{},"ensure_ascii=False",[29,150176,150177],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150179,150181],{"id":150180},"_1013-本章练习","10.13 本章练习",[26,150183,150184,150187,150190,150193,150196],{},[29,150185,150186],{},"安装 pyecharts 并生成第一个折线图。",[29,150188,150189],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150191,150192],{},"绘制两条折线，对比线上和线下销售额。",[29,150194,150195],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150197,150198],{},"对含有空值的销售数据进行清洗后再绘图。",[1222,150200,150201],{},"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":66,"searchDepth":98,"depth":98,"links":150203},[150204,150205,150206,150207,150208,150209,150210,150211,150212,150213,150214,150215,150216],{"id":147820,"depth":98,"text":147821},{"id":147895,"depth":98,"text":147896},{"id":148074,"depth":98,"text":148075},{"id":148125,"depth":98,"text":148126},{"id":148259,"depth":98,"text":148260},{"id":148535,"depth":98,"text":148536},{"id":148661,"depth":98,"text":148662},{"id":148872,"depth":98,"text":148873},{"id":149243,"depth":98,"text":149244},{"id":149455,"depth":98,"text":149456},{"id":149827,"depth":98,"text":149828},{"id":150143,"depth":98,"text":150144},{"id":150180,"depth":98,"text":150181},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147812,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150223,"title":150224,"body":150225,"description":1249,"extension":1250,"meta":152585,"navigation":1252,"path":152586,"seo":152587,"stem":152588,"__hash__":152589},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150226,"toc":152562},[150227,150230,150234,150237,150240,150316,150319,150410,150413,150417,150420,150464,150477,150481,150484,150551,150554,150558,150561,150645,150653,150657,150662,150803,150806,150817,150823,150829,150943,150947,150950,150953,151206,151209,151213,151216,151320,151323,151327,151478,151482,151489,151602,151606,151609,151715,151718,151722,151725,151756,151759,151864,151867,151871,151875,151885,151953,151957,151964,152028,152031,152035,152041,152137,152146,152150,152474,152483,152487,152515,152519,152559],[10,150228,150224],{"id":150229},"_11-面向对象基础",[14,150231,150233],{"id":150232},"_111-什么是面向对象","11.1 什么是面向对象",[19,150235,150236],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150238,150239],{},"面向过程：",[60,150241,150243],{"className":121,"code":150242,"language":91,"meta":66,"style":66},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[39,150244,150245,150254,150262,150266,150276,150307,150311],{"__ignoreMap":66},[84,150246,150247,150249,150251],{"class":86,"line":87},[84,150248,864],{"class":154},[84,150250,867],{"class":129},[84,150252,150253],{"class":158}," \"小明\"\n",[84,150255,150256,150258,150260],{"class":86,"line":98},[84,150257,875],{"class":154},[84,150259,867],{"class":129},[84,150261,880],{"class":94},[84,150263,150264],{"class":86,"line":106},[84,150265,3578],{"emptyLinePlaceholder":1252},[84,150267,150268,150270,150273],{"class":86,"line":112},[84,150269,33100],{"class":129},[84,150271,150272],{"class":90}," introduce",[84,150274,150275],{"class":154},"(name, age):\n",[84,150277,150278,150280,150282,150284,150287,150289,150291,150293,150296,150298,150300,150302,150305],{"class":86,"line":425},[84,150279,32453],{"class":94},[84,150281,155],{"class":154},[84,150283,1372],{"class":129},[84,150285,150286],{"class":158},"\"我叫",[84,150288,2204],{"class":94},[84,150290,80956],{"class":154},[84,150292,2254],{"class":94},[84,150294,150295],{"class":158},"，今年",[84,150297,2204],{"class":94},[84,150299,71367],{"class":154},[84,150301,2254],{"class":94},[84,150303,150304],{"class":158},"岁\"",[84,150306,162],{"class":154},[84,150308,150309],{"class":86,"line":2395},[84,150310,3578],{"emptyLinePlaceholder":1252},[84,150312,150313],{"class":86,"line":2401},[84,150314,150315],{"class":154},"introduce(name, age)\n",[19,150317,150318],{},"面向对象：",[60,150320,150322],{"className":121,"code":150321,"language":91,"meta":66,"style":66},"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",[39,150323,150324,150332,150340,150369,150373,150377,150387,150396,150405],{"__ignoreMap":66},[84,150325,150326,150328,150330],{"class":86,"line":87},[84,150327,15864],{"class":129},[84,150329,9070],{"class":90},[84,150331,4917],{"class":154},[84,150333,150334,150336,150338],{"class":86,"line":98},[84,150335,31955],{"class":129},[84,150337,150272],{"class":90},[84,150339,31961],{"class":154},[84,150341,150342,150344,150346,150348,150350,150353,150355,150357,150359,150361,150363,150365,150367],{"class":86,"line":106},[84,150343,33604],{"class":94},[84,150345,155],{"class":154},[84,150347,1372],{"class":129},[84,150349,150286],{"class":158},[84,150351,150352],{"class":94},"{self",[84,150354,81447],{"class":154},[84,150356,2254],{"class":94},[84,150358,150295],{"class":158},[84,150360,150352],{"class":94},[84,150362,81459],{"class":154},[84,150364,2254],{"class":94},[84,150366,150304],{"class":158},[84,150368,162],{"class":154},[84,150370,150371],{"class":86,"line":112},[84,150372,3578],{"emptyLinePlaceholder":1252},[84,150374,150375],{"class":86,"line":425},[84,150376,3578],{"emptyLinePlaceholder":1252},[84,150378,150379,150382,150384],{"class":86,"line":2395},[84,150380,150381],{"class":154},"student ",[84,150383,867],{"class":129},[84,150385,150386],{"class":154}," Student()\n",[84,150388,150389,150392,150394],{"class":86,"line":2401},[84,150390,150391],{"class":154},"student.name ",[84,150393,867],{"class":129},[84,150395,150253],{"class":158},[84,150397,150398,150401,150403],{"class":86,"line":2492},[84,150399,150400],{"class":154},"student.age ",[84,150402,867],{"class":129},[84,150404,880],{"class":94},[84,150406,150407],{"class":86,"line":2498},[84,150408,150409],{"class":154},"student.introduce()\n",[19,150411,150412],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150414,150416],{"id":150415},"_112-类和对象","11.2 类和对象",[19,150418,150419],{},"类是模板，对象是根据模板创建出来的具体实例。",[60,150421,150423],{"className":121,"code":150422,"language":91,"meta":66,"style":66},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[39,150424,150425,150433,150438,150442,150446,150455],{"__ignoreMap":66},[84,150426,150427,150429,150431],{"class":86,"line":87},[84,150428,15864],{"class":129},[84,150430,9070],{"class":90},[84,150432,4917],{"class":154},[84,150434,150435],{"class":86,"line":98},[84,150436,150437],{"class":129},"    pass\n",[84,150439,150440],{"class":86,"line":106},[84,150441,3578],{"emptyLinePlaceholder":1252},[84,150443,150444],{"class":86,"line":112},[84,150445,3578],{"emptyLinePlaceholder":1252},[84,150447,150448,150451,150453],{"class":86,"line":425},[84,150449,150450],{"class":154},"student1 ",[84,150452,867],{"class":129},[84,150454,150386],{"class":154},[84,150456,150457,150460,150462],{"class":86,"line":2395},[84,150458,150459],{"class":154},"student2 ",[84,150461,867],{"class":129},[84,150463,150386],{"class":154},[19,150465,150466,150469,150470,102156,150473,150476],{},[39,150467,150468],{},"Student"," 是类，",[39,150471,150472],{},"student1",[39,150474,150475],{},"student2"," 是对象。",[14,150478,150480],{"id":150479},"_113-属性","11.3 属性",[19,150482,150483],{},"属性是对象保存的数据。",[60,150485,150487],{"className":121,"code":150486,"language":91,"meta":66,"style":66},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[39,150488,150489,150497,150501,150505,150509,150517,150525,150533,150537,150544],{"__ignoreMap":66},[84,150490,150491,150493,150495],{"class":86,"line":87},[84,150492,15864],{"class":129},[84,150494,9070],{"class":90},[84,150496,4917],{"class":154},[84,150498,150499],{"class":86,"line":98},[84,150500,150437],{"class":129},[84,150502,150503],{"class":86,"line":106},[84,150504,3578],{"emptyLinePlaceholder":1252},[84,150506,150507],{"class":86,"line":112},[84,150508,3578],{"emptyLinePlaceholder":1252},[84,150510,150511,150513,150515],{"class":86,"line":425},[84,150512,150381],{"class":154},[84,150514,867],{"class":129},[84,150516,150386],{"class":154},[84,150518,150519,150521,150523],{"class":86,"line":2395},[84,150520,150391],{"class":154},[84,150522,867],{"class":129},[84,150524,150253],{"class":158},[84,150526,150527,150529,150531],{"class":86,"line":2401},[84,150528,150400],{"class":154},[84,150530,867],{"class":129},[84,150532,880],{"class":94},[84,150534,150535],{"class":86,"line":2492},[84,150536,3578],{"emptyLinePlaceholder":1252},[84,150538,150539,150541],{"class":86,"line":2498},[84,150540,730],{"class":94},[84,150542,150543],{"class":154},"(student.name)\n",[84,150545,150546,150548],{"class":86,"line":2510},[84,150547,730],{"class":94},[84,150549,150550],{"class":154},"(student.age)\n",[19,150552,150553],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150555,150557],{"id":150556},"_114-方法","11.4 方法",[19,150559,150560],{},"类中的函数叫方法。",[60,150562,150563],{"className":121,"code":150321,"language":91,"meta":66,"style":66},[39,150564,150565,150573,150581,150609,150613,150617,150625,150633,150641],{"__ignoreMap":66},[84,150566,150567,150569,150571],{"class":86,"line":87},[84,150568,15864],{"class":129},[84,150570,9070],{"class":90},[84,150572,4917],{"class":154},[84,150574,150575,150577,150579],{"class":86,"line":98},[84,150576,31955],{"class":129},[84,150578,150272],{"class":90},[84,150580,31961],{"class":154},[84,150582,150583,150585,150587,150589,150591,150593,150595,150597,150599,150601,150603,150605,150607],{"class":86,"line":106},[84,150584,33604],{"class":94},[84,150586,155],{"class":154},[84,150588,1372],{"class":129},[84,150590,150286],{"class":158},[84,150592,150352],{"class":94},[84,150594,81447],{"class":154},[84,150596,2254],{"class":94},[84,150598,150295],{"class":158},[84,150600,150352],{"class":94},[84,150602,81459],{"class":154},[84,150604,2254],{"class":94},[84,150606,150304],{"class":158},[84,150608,162],{"class":154},[84,150610,150611],{"class":86,"line":112},[84,150612,3578],{"emptyLinePlaceholder":1252},[84,150614,150615],{"class":86,"line":425},[84,150616,3578],{"emptyLinePlaceholder":1252},[84,150618,150619,150621,150623],{"class":86,"line":2395},[84,150620,150381],{"class":154},[84,150622,867],{"class":129},[84,150624,150386],{"class":154},[84,150626,150627,150629,150631],{"class":86,"line":2401},[84,150628,150391],{"class":154},[84,150630,867],{"class":129},[84,150632,150253],{"class":158},[84,150634,150635,150637,150639],{"class":86,"line":2492},[84,150636,150400],{"class":154},[84,150638,867],{"class":129},[84,150640,880],{"class":94},[84,150642,150643],{"class":86,"line":2498},[84,150644,150409],{"class":154},[19,150646,150647,150649,150650,150652],{},[39,150648,31977],{}," 表示当前对象。调用方法时不需要手动传入 ",[39,150651,31977],{},"，Python 会自动传。",[14,150654,150656],{"id":150655},"_115-构造方法__init__","11.5 构造方法__init__",[19,150658,150659,150661],{},[39,150660,31983],{}," 在对象创建时自动执行，用于初始化属性。",[60,150663,150665],{"className":121,"code":150664,"language":91,"meta":66,"style":66},"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",[39,150666,150667,150675,150684,150696,150708,150719,150723,150731,150769,150773,150777,150799],{"__ignoreMap":66},[84,150668,150669,150671,150673],{"class":86,"line":87},[84,150670,15864],{"class":129},[84,150672,9070],{"class":90},[84,150674,4917],{"class":154},[84,150676,150677,150679,150681],{"class":86,"line":98},[84,150678,31955],{"class":129},[84,150680,31958],{"class":94},[84,150682,150683],{"class":154},"(self, name, age, score):\n",[84,150685,150686,150688,150691,150693],{"class":86,"line":106},[84,150687,31999],{"class":94},[84,150689,150690],{"class":154},".name ",[84,150692,867],{"class":129},[84,150694,150695],{"class":154}," name\n",[84,150697,150698,150700,150703,150705],{"class":86,"line":112},[84,150699,31999],{"class":94},[84,150701,150702],{"class":154},".age ",[84,150704,867],{"class":129},[84,150706,150707],{"class":154}," age\n",[84,150709,150710,150712,150715,150717],{"class":86,"line":425},[84,150711,31999],{"class":94},[84,150713,150714],{"class":154},".score ",[84,150716,867],{"class":129},[84,150718,2760],{"class":154},[84,150720,150721],{"class":86,"line":2395},[84,150722,3578],{"emptyLinePlaceholder":1252},[84,150724,150725,150727,150729],{"class":86,"line":2401},[84,150726,31955],{"class":129},[84,150728,150272],{"class":90},[84,150730,31961],{"class":154},[84,150732,150733,150735,150737,150739,150741,150743,150745,150747,150749,150751,150753,150755,150758,150760,150763,150765,150767],{"class":86,"line":2492},[84,150734,33604],{"class":94},[84,150736,155],{"class":154},[84,150738,1372],{"class":129},[84,150740,150286],{"class":158},[84,150742,150352],{"class":94},[84,150744,81447],{"class":154},[84,150746,2254],{"class":94},[84,150748,150295],{"class":158},[84,150750,150352],{"class":94},[84,150752,81459],{"class":154},[84,150754,2254],{"class":94},[84,150756,150757],{"class":158},"岁，成绩",[84,150759,150352],{"class":94},[84,150761,150762],{"class":154},".score",[84,150764,2254],{"class":94},[84,150766,1562],{"class":158},[84,150768,162],{"class":154},[84,150770,150771],{"class":86,"line":2498},[84,150772,3578],{"emptyLinePlaceholder":1252},[84,150774,150775],{"class":86,"line":2510},[84,150776,3578],{"emptyLinePlaceholder":1252},[84,150778,150779,150781,150783,150786,150789,150791,150793,150795,150797],{"class":86,"line":2793},[84,150780,150381],{"class":154},[84,150782,867],{"class":129},[84,150784,150785],{"class":154}," Student(",[84,150787,150788],{"class":158},"\"小明\"",[84,150790,846],{"class":154},[84,150792,849],{"class":94},[84,150794,846],{"class":154},[84,150796,2297],{"class":94},[84,150798,162],{"class":154},[84,150800,150801],{"class":86,"line":2798},[84,150802,150409],{"class":154},[19,150804,150805],{},"构造方法的好处：",[26,150807,150808,150811,150814],{},[29,150809,150810],{},"创建对象时必须提供必要数据。",[29,150812,150813],{},"属性初始化集中，不容易漏。",[29,150815,150816],{},"对象状态更完整。",[14,150818,150820,150821],{"id":150819},"_116-str","11.6 ",[1464,150822,2480],{},[19,150824,150825,150826,55],{},"直接打印对象时，默认输出不直观。可以定义 ",[39,150827,150828],{},"__str__",[60,150830,150832],{"className":121,"code":150831,"language":91,"meta":66,"style":66},"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",[39,150833,150834,150842,150851,150861,150871,150875,150884,150912,150916,150920,150936],{"__ignoreMap":66},[84,150835,150836,150838,150840],{"class":86,"line":87},[84,150837,15864],{"class":129},[84,150839,9070],{"class":90},[84,150841,4917],{"class":154},[84,150843,150844,150846,150848],{"class":86,"line":98},[84,150845,31955],{"class":129},[84,150847,31958],{"class":94},[84,150849,150850],{"class":154},"(self, name, age):\n",[84,150852,150853,150855,150857,150859],{"class":86,"line":106},[84,150854,31999],{"class":94},[84,150856,150690],{"class":154},[84,150858,867],{"class":129},[84,150860,150695],{"class":154},[84,150862,150863,150865,150867,150869],{"class":86,"line":112},[84,150864,31999],{"class":94},[84,150866,150702],{"class":154},[84,150868,867],{"class":129},[84,150870,150707],{"class":154},[84,150872,150873],{"class":86,"line":425},[84,150874,3578],{"emptyLinePlaceholder":1252},[84,150876,150877,150879,150882],{"class":86,"line":2395},[84,150878,31955],{"class":129},[84,150880,150881],{"class":94}," __str__",[84,150883,31961],{"class":154},[84,150885,150886,150888,150891,150894,150896,150898,150900,150903,150905,150907,150909],{"class":86,"line":2401},[84,150887,15922],{"class":129},[84,150889,150890],{"class":129}," f",[84,150892,150893],{"class":158},"\"Student(name=",[84,150895,150352],{"class":94},[84,150897,81447],{"class":154},[84,150899,2254],{"class":94},[84,150901,150902],{"class":158},", age=",[84,150904,150352],{"class":94},[84,150906,81459],{"class":154},[84,150908,2254],{"class":94},[84,150910,150911],{"class":158},")\"\n",[84,150913,150914],{"class":86,"line":2492},[84,150915,3578],{"emptyLinePlaceholder":1252},[84,150917,150918],{"class":86,"line":2498},[84,150919,3578],{"emptyLinePlaceholder":1252},[84,150921,150922,150924,150926,150928,150930,150932,150934],{"class":86,"line":2510},[84,150923,150381],{"class":154},[84,150925,867],{"class":129},[84,150927,150785],{"class":154},[84,150929,150788],{"class":158},[84,150931,846],{"class":154},[84,150933,849],{"class":94},[84,150935,162],{"class":154},[84,150937,150938,150940],{"class":86,"line":2793},[84,150939,730],{"class":94},[84,150941,150942],{"class":154},"(student)\n",[14,150944,150946],{"id":150945},"_117-封装","11.7 封装",[19,150948,150949],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150951,150952],{},"Python 中以双下划线开头的属性通常视为私有属性。",[60,150954,150956],{"className":121,"code":150955,"language":91,"meta":66,"style":66},"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",[39,150957,150958,150967,150976,150988,151000,151004,151013,151022,151026,151036,151049,151060,151065,151076,151080,151089,151101,151112,151116,151129,151140,151144,151155,151159,151163,151181,151190,151199],{"__ignoreMap":66},[84,150959,150960,150962,150965],{"class":86,"line":87},[84,150961,15864],{"class":129},[84,150963,150964],{"class":90}," Account",[84,150966,4917],{"class":154},[84,150968,150969,150971,150973],{"class":86,"line":98},[84,150970,31955],{"class":129},[84,150972,31958],{"class":94},[84,150974,150975],{"class":154},"(self, owner, balance):\n",[84,150977,150978,150980,150983,150985],{"class":86,"line":106},[84,150979,31999],{"class":94},[84,150981,150982],{"class":154},".owner ",[84,150984,867],{"class":129},[84,150986,150987],{"class":154}," owner\n",[84,150989,150990,150992,150995,150997],{"class":86,"line":112},[84,150991,31999],{"class":94},[84,150993,150994],{"class":154},".__balance ",[84,150996,867],{"class":129},[84,150998,150999],{"class":154}," balance\n",[84,151001,151002],{"class":86,"line":425},[84,151003,3578],{"emptyLinePlaceholder":1252},[84,151005,151006,151008,151011],{"class":86,"line":2395},[84,151007,31955],{"class":129},[84,151009,151010],{"class":90}," get_balance",[84,151012,31961],{"class":154},[84,151014,151015,151017,151019],{"class":86,"line":2401},[84,151016,15922],{"class":129},[84,151018,40025],{"class":94},[84,151020,151021],{"class":154},".__balance\n",[84,151023,151024],{"class":86,"line":2492},[84,151025,3578],{"emptyLinePlaceholder":1252},[84,151027,151028,151030,151033],{"class":86,"line":2498},[84,151029,31955],{"class":129},[84,151031,151032],{"class":90}," deposit",[84,151034,151035],{"class":154},"(self, money):\n",[84,151037,151038,151040,151043,151045,151047],{"class":86,"line":2510},[84,151039,3675],{"class":129},[84,151041,151042],{"class":154}," money ",[84,151044,2769],{"class":129},[84,151046,5271],{"class":94},[84,151048,4917],{"class":154},[84,151050,151051,151053,151055,151058],{"class":86,"line":2793},[84,151052,35802],{"class":94},[84,151054,155],{"class":154},[84,151056,151057],{"class":158},"\"存款金额必须大于0\"",[84,151059,162],{"class":154},[84,151061,151062],{"class":86,"line":2798},[84,151063,151064],{"class":129},"            return\n",[84,151066,151067,151069,151071,151073],{"class":86,"line":2804},[84,151068,31999],{"class":94},[84,151070,150994],{"class":154},[84,151072,10649],{"class":129},[84,151074,151075],{"class":154}," money\n",[84,151077,151078],{"class":86,"line":2809},[84,151079,3578],{"emptyLinePlaceholder":1252},[84,151081,151082,151084,151087],{"class":86,"line":2823},[84,151083,31955],{"class":129},[84,151085,151086],{"class":90}," withdraw",[84,151088,151035],{"class":154},[84,151090,151091,151093,151095,151097,151099],{"class":86,"line":2828},[84,151092,3675],{"class":129},[84,151094,151042],{"class":154},[84,151096,2769],{"class":129},[84,151098,5271],{"class":94},[84,151100,4917],{"class":154},[84,151102,151103,151105,151107,151110],{"class":86,"line":2834},[84,151104,35802],{"class":94},[84,151106,155],{"class":154},[84,151108,151109],{"class":158},"\"取款金额必须大于0\"",[84,151111,162],{"class":154},[84,151113,151114],{"class":86,"line":2855},[84,151115,151064],{"class":129},[84,151117,151118,151120,151122,151124,151126],{"class":86,"line":2860},[84,151119,3675],{"class":129},[84,151121,151042],{"class":154},[84,151123,2268],{"class":129},[84,151125,40025],{"class":94},[84,151127,151128],{"class":154},".__balance:\n",[84,151130,151131,151133,151135,151138],{"class":86,"line":2874},[84,151132,35802],{"class":94},[84,151134,155],{"class":154},[84,151136,151137],{"class":158},"\"余额不足\"",[84,151139,162],{"class":154},[84,151141,151142],{"class":86,"line":2879},[84,151143,151064],{"class":129},[84,151145,151146,151148,151150,151153],{"class":86,"line":2908},[84,151147,31999],{"class":94},[84,151149,150994],{"class":154},[84,151151,151152],{"class":129},"-=",[84,151154,151075],{"class":154},[84,151156,151157],{"class":86,"line":2913},[84,151158,3578],{"emptyLinePlaceholder":1252},[84,151160,151161],{"class":86,"line":2930},[84,151162,3578],{"emptyLinePlaceholder":1252},[84,151164,151165,151168,151170,151173,151175,151177,151179],{"class":86,"line":2935},[84,151166,151167],{"class":154},"account ",[84,151169,867],{"class":129},[84,151171,151172],{"class":154}," Account(",[84,151174,150788],{"class":158},[84,151176,846],{"class":154},[84,151178,7583],{"class":94},[84,151180,162],{"class":154},[84,151182,151183,151186,151188],{"class":86,"line":2940},[84,151184,151185],{"class":154},"account.deposit(",[84,151187,2903],{"class":94},[84,151189,162],{"class":154},[84,151191,151192,151195,151197],{"class":86,"line":2945},[84,151193,151194],{"class":154},"account.withdraw(",[84,151196,821],{"class":94},[84,151198,162],{"class":154},[84,151200,151201,151203],{"class":86,"line":2959},[84,151202,730],{"class":94},[84,151204,151205],{"class":154},"(account.get_balance())\n",[19,151207,151208],{},"封装的意义是避免外部随意修改内部状态。",[14,151210,151212],{"id":151211},"_118-继承","11.8 继承",[19,151214,151215],{},"继承可以让子类复用父类的属性和方法。",[60,151217,151219],{"className":121,"code":151218,"language":91,"meta":66,"style":66},"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",[39,151220,151221,151230,151239,151250,151254,151258,151272,151281,151292,151296,151300,151310,151315],{"__ignoreMap":66},[84,151222,151223,151225,151228],{"class":86,"line":87},[84,151224,15864],{"class":129},[84,151226,151227],{"class":90}," Animal",[84,151229,4917],{"class":154},[84,151231,151232,151234,151237],{"class":86,"line":98},[84,151233,31955],{"class":129},[84,151235,151236],{"class":90}," eat",[84,151238,31961],{"class":154},[84,151240,151241,151243,151245,151248],{"class":86,"line":106},[84,151242,33604],{"class":94},[84,151244,155],{"class":154},[84,151246,151247],{"class":158},"\"吃东西\"",[84,151249,162],{"class":154},[84,151251,151252],{"class":86,"line":112},[84,151253,3578],{"emptyLinePlaceholder":1252},[84,151255,151256],{"class":86,"line":425},[84,151257,3578],{"emptyLinePlaceholder":1252},[84,151259,151260,151262,151265,151267,151270],{"class":86,"line":2395},[84,151261,15864],{"class":129},[84,151263,151264],{"class":90}," Dog",[84,151266,155],{"class":154},[84,151268,151269],{"class":90},"Animal",[84,151271,31940],{"class":154},[84,151273,151274,151276,151279],{"class":86,"line":2401},[84,151275,31955],{"class":129},[84,151277,151278],{"class":90}," bark",[84,151280,31961],{"class":154},[84,151282,151283,151285,151287,151290],{"class":86,"line":2492},[84,151284,33604],{"class":94},[84,151286,155],{"class":154},[84,151288,151289],{"class":158},"\"汪汪\"",[84,151291,162],{"class":154},[84,151293,151294],{"class":86,"line":2498},[84,151295,3578],{"emptyLinePlaceholder":1252},[84,151297,151298],{"class":86,"line":2510},[84,151299,3578],{"emptyLinePlaceholder":1252},[84,151301,151302,151305,151307],{"class":86,"line":2793},[84,151303,151304],{"class":154},"dog ",[84,151306,867],{"class":129},[84,151308,151309],{"class":154}," Dog()\n",[84,151311,151312],{"class":86,"line":2798},[84,151313,151314],{"class":154},"dog.eat()\n",[84,151316,151317],{"class":86,"line":2804},[84,151318,151319],{"class":154},"dog.bark()\n",[19,151321,151322],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151324,151326],{"id":151325},"_119-方法重写","11.9 方法重写",[60,151328,151330],{"className":121,"code":151329,"language":91,"meta":66,"style":66},"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",[39,151331,151332,151340,151349,151360,151364,151368,151380,151388,151398,151402,151406,151419,151427,151438,151442,151446,151454,151464,151468,151473],{"__ignoreMap":66},[84,151333,151334,151336,151338],{"class":86,"line":87},[84,151335,15864],{"class":129},[84,151337,151227],{"class":90},[84,151339,4917],{"class":154},[84,151341,151342,151344,151347],{"class":86,"line":98},[84,151343,31955],{"class":129},[84,151345,151346],{"class":90}," speak",[84,151348,31961],{"class":154},[84,151350,151351,151353,151355,151358],{"class":86,"line":106},[84,151352,33604],{"class":94},[84,151354,155],{"class":154},[84,151356,151357],{"class":158},"\"动物叫\"",[84,151359,162],{"class":154},[84,151361,151362],{"class":86,"line":112},[84,151363,3578],{"emptyLinePlaceholder":1252},[84,151365,151366],{"class":86,"line":425},[84,151367,3578],{"emptyLinePlaceholder":1252},[84,151369,151370,151372,151374,151376,151378],{"class":86,"line":2395},[84,151371,15864],{"class":129},[84,151373,151264],{"class":90},[84,151375,155],{"class":154},[84,151377,151269],{"class":90},[84,151379,31940],{"class":154},[84,151381,151382,151384,151386],{"class":86,"line":2401},[84,151383,31955],{"class":129},[84,151385,151346],{"class":90},[84,151387,31961],{"class":154},[84,151389,151390,151392,151394,151396],{"class":86,"line":2492},[84,151391,33604],{"class":94},[84,151393,155],{"class":154},[84,151395,151289],{"class":158},[84,151397,162],{"class":154},[84,151399,151400],{"class":86,"line":2498},[84,151401,3578],{"emptyLinePlaceholder":1252},[84,151403,151404],{"class":86,"line":2510},[84,151405,3578],{"emptyLinePlaceholder":1252},[84,151407,151408,151410,151413,151415,151417],{"class":86,"line":2793},[84,151409,15864],{"class":129},[84,151411,151412],{"class":90}," Cat",[84,151414,155],{"class":154},[84,151416,151269],{"class":90},[84,151418,31940],{"class":154},[84,151420,151421,151423,151425],{"class":86,"line":2798},[84,151422,31955],{"class":129},[84,151424,151346],{"class":90},[84,151426,31961],{"class":154},[84,151428,151429,151431,151433,151436],{"class":86,"line":2804},[84,151430,33604],{"class":94},[84,151432,155],{"class":154},[84,151434,151435],{"class":158},"\"喵喵\"",[84,151437,162],{"class":154},[84,151439,151440],{"class":86,"line":2809},[84,151441,3578],{"emptyLinePlaceholder":1252},[84,151443,151444],{"class":86,"line":2823},[84,151445,3578],{"emptyLinePlaceholder":1252},[84,151447,151448,151450,151452],{"class":86,"line":2828},[84,151449,151304],{"class":154},[84,151451,867],{"class":129},[84,151453,151309],{"class":154},[84,151455,151456,151459,151461],{"class":86,"line":2834},[84,151457,151458],{"class":154},"cat ",[84,151460,867],{"class":129},[84,151462,151463],{"class":154}," Cat()\n",[84,151465,151466],{"class":86,"line":2855},[84,151467,3578],{"emptyLinePlaceholder":1252},[84,151469,151470],{"class":86,"line":2860},[84,151471,151472],{"class":154},"dog.speak()\n",[84,151474,151475],{"class":86,"line":2874},[84,151476,151477],{"class":154},"cat.speak()\n",[14,151479,151481],{"id":151480},"_1110-super","11.10 super",[19,151483,151484,151485,151488],{},"子类可以通过 ",[39,151486,151487],{},"super()"," 调用父类方法。",[60,151490,151492],{"className":121,"code":151491,"language":91,"meta":66,"style":66},"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",[39,151493,151494,151502,151511,151521,151525,151529,151541,151550,151561,151571,151575,151579,151595],{"__ignoreMap":66},[84,151495,151496,151498,151500],{"class":86,"line":87},[84,151497,15864],{"class":129},[84,151499,16739],{"class":90},[84,151501,4917],{"class":154},[84,151503,151504,151506,151508],{"class":86,"line":98},[84,151505,31955],{"class":129},[84,151507,31958],{"class":94},[84,151509,151510],{"class":154},"(self, name):\n",[84,151512,151513,151515,151517,151519],{"class":86,"line":106},[84,151514,31999],{"class":94},[84,151516,150690],{"class":154},[84,151518,867],{"class":129},[84,151520,150695],{"class":154},[84,151522,151523],{"class":86,"line":112},[84,151524,3578],{"emptyLinePlaceholder":1252},[84,151526,151527],{"class":86,"line":425},[84,151528,3578],{"emptyLinePlaceholder":1252},[84,151530,151531,151533,151535,151537,151539],{"class":86,"line":2395},[84,151532,15864],{"class":129},[84,151534,9070],{"class":90},[84,151536,155],{"class":154},[84,151538,20216],{"class":90},[84,151540,31940],{"class":154},[84,151542,151543,151545,151547],{"class":86,"line":2401},[84,151544,31955],{"class":129},[84,151546,31958],{"class":94},[84,151548,151549],{"class":154},"(self, name, score):\n",[84,151551,151552,151554,151556,151558],{"class":86,"line":2492},[84,151553,31971],{"class":94},[84,151555,18431],{"class":154},[84,151557,31983],{"class":94},[84,151559,151560],{"class":154},"(name)\n",[84,151562,151563,151565,151567,151569],{"class":86,"line":2498},[84,151564,31999],{"class":94},[84,151566,150714],{"class":154},[84,151568,867],{"class":129},[84,151570,2760],{"class":154},[84,151572,151573],{"class":86,"line":2510},[84,151574,3578],{"emptyLinePlaceholder":1252},[84,151576,151577],{"class":86,"line":2793},[84,151578,3578],{"emptyLinePlaceholder":1252},[84,151580,151581,151583,151585,151587,151589,151591,151593],{"class":86,"line":2798},[84,151582,150381],{"class":154},[84,151584,867],{"class":129},[84,151586,150785],{"class":154},[84,151588,150788],{"class":158},[84,151590,846],{"class":154},[84,151592,2297],{"class":94},[84,151594,162],{"class":154},[84,151596,151597,151599],{"class":86,"line":2804},[84,151598,730],{"class":94},[84,151600,151601],{"class":154},"(student.name, student.score)\n",[14,151603,151605],{"id":151604},"_1111-多态","11.11 多态",[19,151607,151608],{},"多态指不同对象响应同一个方法，表现出不同结果。",[60,151610,151612],{"className":121,"code":151611,"language":91,"meta":66,"style":66},"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",[39,151613,151614,151622,151630,151640,151644,151648,151656,151664,151674,151678,151682,151692,151697,151701,151705,151710],{"__ignoreMap":66},[84,151615,151616,151618,151620],{"class":86,"line":87},[84,151617,15864],{"class":129},[84,151619,151264],{"class":90},[84,151621,4917],{"class":154},[84,151623,151624,151626,151628],{"class":86,"line":98},[84,151625,31955],{"class":129},[84,151627,151346],{"class":90},[84,151629,31961],{"class":154},[84,151631,151632,151634,151636,151638],{"class":86,"line":106},[84,151633,33604],{"class":94},[84,151635,155],{"class":154},[84,151637,151289],{"class":158},[84,151639,162],{"class":154},[84,151641,151642],{"class":86,"line":112},[84,151643,3578],{"emptyLinePlaceholder":1252},[84,151645,151646],{"class":86,"line":425},[84,151647,3578],{"emptyLinePlaceholder":1252},[84,151649,151650,151652,151654],{"class":86,"line":2395},[84,151651,15864],{"class":129},[84,151653,151412],{"class":90},[84,151655,4917],{"class":154},[84,151657,151658,151660,151662],{"class":86,"line":2401},[84,151659,31955],{"class":129},[84,151661,151346],{"class":90},[84,151663,31961],{"class":154},[84,151665,151666,151668,151670,151672],{"class":86,"line":2492},[84,151667,33604],{"class":94},[84,151669,155],{"class":154},[84,151671,151435],{"class":158},[84,151673,162],{"class":154},[84,151675,151676],{"class":86,"line":2498},[84,151677,3578],{"emptyLinePlaceholder":1252},[84,151679,151680],{"class":86,"line":2510},[84,151681,3578],{"emptyLinePlaceholder":1252},[84,151683,151684,151686,151689],{"class":86,"line":2793},[84,151685,33100],{"class":129},[84,151687,151688],{"class":90}," make_sound",[84,151690,151691],{"class":154},"(animal):\n",[84,151693,151694],{"class":86,"line":2798},[84,151695,151696],{"class":154},"    animal.speak()\n",[84,151698,151699],{"class":86,"line":2804},[84,151700,3578],{"emptyLinePlaceholder":1252},[84,151702,151703],{"class":86,"line":2809},[84,151704,3578],{"emptyLinePlaceholder":1252},[84,151706,151707],{"class":86,"line":2823},[84,151708,151709],{"class":154},"make_sound(Dog())\n",[84,151711,151712],{"class":86,"line":2828},[84,151713,151714],{"class":154},"make_sound(Cat())\n",[19,151716,151717],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151719,151721],{"id":151720},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151723,151724],{},"实例属性属于对象：",[60,151726,151728],{"className":121,"code":151727,"language":91,"meta":66,"style":66},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[39,151729,151730,151738,151746],{"__ignoreMap":66},[84,151731,151732,151734,151736],{"class":86,"line":87},[84,151733,15864],{"class":129},[84,151735,9070],{"class":90},[84,151737,4917],{"class":154},[84,151739,151740,151742,151744],{"class":86,"line":98},[84,151741,31955],{"class":129},[84,151743,31958],{"class":94},[84,151745,151510],{"class":154},[84,151747,151748,151750,151752,151754],{"class":86,"line":106},[84,151749,31999],{"class":94},[84,151751,150690],{"class":154},[84,151753,867],{"class":129},[84,151755,150695],{"class":154},[19,151757,151758],{},"类属性属于类，所有对象共享：",[60,151760,151762],{"className":121,"code":151761,"language":91,"meta":66,"style":66},"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",[39,151763,151764,151772,151782,151786,151794,151804,151808,151812,151825,151839,151843,151850,151857],{"__ignoreMap":66},[84,151765,151766,151768,151770],{"class":86,"line":87},[84,151767,15864],{"class":129},[84,151769,9070],{"class":90},[84,151771,4917],{"class":154},[84,151773,151774,151777,151779],{"class":86,"line":98},[84,151775,151776],{"class":154},"    school ",[84,151778,867],{"class":129},[84,151780,151781],{"class":158}," \"黑马学校\"\n",[84,151783,151784],{"class":86,"line":106},[84,151785,3578],{"emptyLinePlaceholder":1252},[84,151787,151788,151790,151792],{"class":86,"line":112},[84,151789,31955],{"class":129},[84,151791,31958],{"class":94},[84,151793,151510],{"class":154},[84,151795,151796,151798,151800,151802],{"class":86,"line":425},[84,151797,31999],{"class":94},[84,151799,150690],{"class":154},[84,151801,867],{"class":129},[84,151803,150695],{"class":154},[84,151805,151806],{"class":86,"line":2395},[84,151807,3578],{"emptyLinePlaceholder":1252},[84,151809,151810],{"class":86,"line":2401},[84,151811,3578],{"emptyLinePlaceholder":1252},[84,151813,151814,151817,151819,151821,151823],{"class":86,"line":2492},[84,151815,151816],{"class":154},"s1 ",[84,151818,867],{"class":129},[84,151820,150785],{"class":154},[84,151822,150788],{"class":158},[84,151824,162],{"class":154},[84,151826,151827,151830,151832,151834,151837],{"class":86,"line":2498},[84,151828,151829],{"class":154},"s2 ",[84,151831,867],{"class":129},[84,151833,150785],{"class":154},[84,151835,151836],{"class":158},"\"小红\"",[84,151838,162],{"class":154},[84,151840,151841],{"class":86,"line":2510},[84,151842,3578],{"emptyLinePlaceholder":1252},[84,151844,151845,151847],{"class":86,"line":2793},[84,151846,730],{"class":94},[84,151848,151849],{"class":154},"(s1.school)\n",[84,151851,151852,151854],{"class":86,"line":2798},[84,151853,730],{"class":94},[84,151855,151856],{"class":154},"(s2.school)\n",[84,151858,151859,151861],{"class":86,"line":2804},[84,151860,730],{"class":94},[84,151862,151863],{"class":154},"(Student.school)\n",[19,151865,151866],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151868,151870],{"id":151869},"_1113-类方法和静态方法","11.13 类方法和静态方法",[198,151872,151874],{"id":151873},"_11131-类方法","11.13.1 类方法",[19,151876,151877,151878,151881,151882,55],{},"类方法使用 ",[39,151879,151880],{},"@classmethod","，第一个参数通常是 ",[39,151883,151884],{},"cls",[60,151886,151888],{"className":121,"code":151887,"language":91,"meta":66,"style":66},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[39,151889,151890,151898,151906,151910,151918,151928,151938,151942,151946],{"__ignoreMap":66},[84,151891,151892,151894,151896],{"class":86,"line":87},[84,151893,15864],{"class":129},[84,151895,9070],{"class":90},[84,151897,4917],{"class":154},[84,151899,151900,151902,151904],{"class":86,"line":98},[84,151901,151776],{"class":154},[84,151903,867],{"class":129},[84,151905,151781],{"class":158},[84,151907,151908],{"class":86,"line":106},[84,151909,3578],{"emptyLinePlaceholder":1252},[84,151911,151912,151915],{"class":86,"line":112},[84,151913,151914],{"class":90},"    @",[84,151916,151917],{"class":94},"classmethod\n",[84,151919,151920,151922,151925],{"class":86,"line":425},[84,151921,31955],{"class":129},[84,151923,151924],{"class":90}," get_school",[84,151926,151927],{"class":154},"(cls):\n",[84,151929,151930,151932,151935],{"class":86,"line":2395},[84,151931,15922],{"class":129},[84,151933,151934],{"class":94}," cls",[84,151936,151937],{"class":154},".school\n",[84,151939,151940],{"class":86,"line":2401},[84,151941,3578],{"emptyLinePlaceholder":1252},[84,151943,151944],{"class":86,"line":2492},[84,151945,3578],{"emptyLinePlaceholder":1252},[84,151947,151948,151950],{"class":86,"line":2498},[84,151949,730],{"class":94},[84,151951,151952],{"class":154},"(Student.get_school())\n",[198,151954,151956],{"id":151955},"_11132-静态方法","11.13.2 静态方法",[19,151958,151959,151960,151963],{},"静态方法使用 ",[39,151961,151962],{},"@staticmethod","，不需要访问实例和类。",[60,151965,151967],{"className":121,"code":151966,"language":91,"meta":66,"style":66},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[39,151968,151969,151978,151985,151994,152005,152009,152013],{"__ignoreMap":66},[84,151970,151971,151973,151976],{"class":86,"line":87},[84,151972,15864],{"class":129},[84,151974,151975],{"class":90}," MathUtils",[84,151977,4917],{"class":154},[84,151979,151980,151982],{"class":86,"line":98},[84,151981,151914],{"class":90},[84,151983,151984],{"class":94},"staticmethod\n",[84,151986,151987,151989,151991],{"class":86,"line":106},[84,151988,31955],{"class":129},[84,151990,6384],{"class":90},[84,151992,151993],{"class":154},"(a, b):\n",[84,151995,151996,151998,152000,152002],{"class":86,"line":112},[84,151997,15922],{"class":129},[84,151999,12041],{"class":154},[84,152001,1790],{"class":129},[84,152003,152004],{"class":154}," b\n",[84,152006,152007],{"class":86,"line":425},[84,152008,3578],{"emptyLinePlaceholder":1252},[84,152010,152011],{"class":86,"line":2395},[84,152012,3578],{"emptyLinePlaceholder":1252},[84,152014,152015,152017,152020,152022,152024,152026],{"class":86,"line":2401},[84,152016,730],{"class":94},[84,152018,152019],{"class":154},"(MathUtils.add(",[84,152021,1529],{"class":94},[84,152023,846],{"class":154},[84,152025,1397],{"class":94},[84,152027,31651],{"class":154},[19,152029,152030],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152032,152034],{"id":152033},"_1114-dataclass","11.14 dataclass",[19,152036,152037,152040],{},[39,152038,152039],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[60,152042,152044],{"className":121,"code":152043,"language":91,"meta":66,"style":66},"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",[39,152045,152046,152058,152062,152066,152071,152079,152087,152095,152103,152107,152111,152131],{"__ignoreMap":66},[84,152047,152048,152050,152053,152055],{"class":86,"line":87},[84,152049,31891],{"class":129},[84,152051,152052],{"class":154}," dataclasses ",[84,152054,31547],{"class":129},[84,152056,152057],{"class":154}," dataclass\n",[84,152059,152060],{"class":86,"line":98},[84,152061,3578],{"emptyLinePlaceholder":1252},[84,152063,152064],{"class":86,"line":106},[84,152065,3578],{"emptyLinePlaceholder":1252},[84,152067,152068],{"class":86,"line":112},[84,152069,152070],{"class":90},"@dataclass\n",[84,152072,152073,152075,152077],{"class":86,"line":425},[84,152074,15864],{"class":129},[84,152076,9070],{"class":90},[84,152078,4917],{"class":154},[84,152080,152081,152084],{"class":86,"line":2395},[84,152082,152083],{"class":154},"    name: ",[84,152085,152086],{"class":94},"str\n",[84,152088,152089,152092],{"class":86,"line":2401},[84,152090,152091],{"class":154},"    age: ",[84,152093,152094],{"class":94},"int\n",[84,152096,152097,152100],{"class":86,"line":2492},[84,152098,152099],{"class":154},"    score: ",[84,152101,152102],{"class":94},"float\n",[84,152104,152105],{"class":86,"line":2498},[84,152106,3578],{"emptyLinePlaceholder":1252},[84,152108,152109],{"class":86,"line":2510},[84,152110,3578],{"emptyLinePlaceholder":1252},[84,152112,152113,152115,152117,152119,152121,152123,152125,152127,152129],{"class":86,"line":2793},[84,152114,150381],{"class":154},[84,152116,867],{"class":129},[84,152118,150785],{"class":154},[84,152120,150788],{"class":158},[84,152122,846],{"class":154},[84,152124,849],{"class":94},[84,152126,846],{"class":154},[84,152128,2297],{"class":94},[84,152130,162],{"class":154},[84,152132,152133,152135],{"class":86,"line":2798},[84,152134,730],{"class":94},[84,152136,150942],{"class":154},[19,152138,152139,152140,42,152142,152145],{},"它会自动生成 ",[39,152141,31983],{},[39,152143,152144],{},"__repr__"," 等方法。适合数据模型类。",[14,152147,152149],{"id":152148},"_1115-小案例学生类","11.15 小案例：学生类",[60,152151,152153],{"className":121,"code":152152,"language":91,"meta":66,"style":66},"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",[39,152154,152155,152163,152172,152184,152194,152204,152214,152218,152227,152240,152244,152253,152259,152271,152283,152295,152307,152311,152315,152321,152331,152340,152350,152358,152366,152375,152379,152383,152391,152427,152431,152435,152460,152467],{"__ignoreMap":66},[84,152156,152157,152159,152161],{"class":86,"line":87},[84,152158,15864],{"class":129},[84,152160,9070],{"class":90},[84,152162,4917],{"class":154},[84,152164,152165,152167,152169],{"class":86,"line":98},[84,152166,31955],{"class":129},[84,152168,31958],{"class":94},[84,152170,152171],{"class":154},"(self, student_id, name, age, score):\n",[84,152173,152174,152176,152179,152181],{"class":86,"line":106},[84,152175,31999],{"class":94},[84,152177,152178],{"class":154},".student_id ",[84,152180,867],{"class":129},[84,152182,152183],{"class":154}," student_id\n",[84,152185,152186,152188,152190,152192],{"class":86,"line":112},[84,152187,31999],{"class":94},[84,152189,150690],{"class":154},[84,152191,867],{"class":129},[84,152193,150695],{"class":154},[84,152195,152196,152198,152200,152202],{"class":86,"line":425},[84,152197,31999],{"class":94},[84,152199,150702],{"class":154},[84,152201,867],{"class":129},[84,152203,150707],{"class":154},[84,152205,152206,152208,152210,152212],{"class":86,"line":2395},[84,152207,31999],{"class":94},[84,152209,150714],{"class":154},[84,152211,867],{"class":129},[84,152213,2760],{"class":154},[84,152215,152216],{"class":86,"line":2401},[84,152217,3578],{"emptyLinePlaceholder":1252},[84,152219,152220,152222,152225],{"class":86,"line":2492},[84,152221,31955],{"class":129},[84,152223,152224],{"class":90}," is_passed",[84,152226,31961],{"class":154},[84,152228,152229,152231,152233,152235,152237],{"class":86,"line":2498},[84,152230,15922],{"class":129},[84,152232,40025],{"class":94},[84,152234,150714],{"class":154},[84,152236,2891],{"class":129},[84,152238,152239],{"class":94}," 60\n",[84,152241,152242],{"class":86,"line":2510},[84,152243,3578],{"emptyLinePlaceholder":1252},[84,152245,152246,152248,152251],{"class":86,"line":2793},[84,152247,31955],{"class":129},[84,152249,152250],{"class":90}," to_dict",[84,152252,31961],{"class":154},[84,152254,152255,152257],{"class":86,"line":2798},[84,152256,15922],{"class":129},[84,152258,16742],{"class":154},[84,152260,152261,152264,152266,152268],{"class":86,"line":2804},[84,152262,152263],{"class":158},"            \"student_id\"",[84,152265,52586],{"class":154},[84,152267,31977],{"class":94},[84,152269,152270],{"class":154},".student_id,\n",[84,152272,152273,152276,152278,152280],{"class":86,"line":2809},[84,152274,152275],{"class":158},"            \"name\"",[84,152277,52586],{"class":154},[84,152279,31977],{"class":94},[84,152281,152282],{"class":154},".name,\n",[84,152284,152285,152288,152290,152292],{"class":86,"line":2823},[84,152286,152287],{"class":158},"            \"age\"",[84,152289,52586],{"class":154},[84,152291,31977],{"class":94},[84,152293,152294],{"class":154},".age,\n",[84,152296,152297,152300,152302,152304],{"class":86,"line":2828},[84,152298,152299],{"class":158},"            \"score\"",[84,152301,52586],{"class":154},[84,152303,31977],{"class":94},[84,152305,152306],{"class":154},".score,\n",[84,152308,152309],{"class":86,"line":2834},[84,152310,3707],{"class":154},[84,152312,152313],{"class":86,"line":2855},[84,152314,3578],{"emptyLinePlaceholder":1252},[84,152316,152317,152319],{"class":86,"line":2860},[84,152318,151914],{"class":90},[84,152320,151917],{"class":94},[84,152322,152323,152325,152328],{"class":86,"line":2874},[84,152324,31955],{"class":129},[84,152326,152327],{"class":90}," from_dict",[84,152329,152330],{"class":154},"(cls, data):\n",[84,152332,152333,152335,152337],{"class":86,"line":2879},[84,152334,15922],{"class":129},[84,152336,151934],{"class":94},[84,152338,152339],{"class":154},"(\n",[84,152341,152342,152345,152348],{"class":86,"line":2908},[84,152343,152344],{"class":154},"            data[",[84,152346,152347],{"class":158},"\"student_id\"",[84,152349,88982],{"class":154},[84,152351,152352,152354,152356],{"class":86,"line":2913},[84,152353,152344],{"class":154},[84,152355,63825],{"class":158},[84,152357,88982],{"class":154},[84,152359,152360,152362,152364],{"class":86,"line":2930},[84,152361,152344],{"class":154},[84,152363,70270],{"class":158},[84,152365,88982],{"class":154},[84,152367,152368,152370,152373],{"class":86,"line":2935},[84,152369,152344],{"class":154},[84,152371,152372],{"class":158},"\"score\"",[84,152374,88982],{"class":154},[84,152376,152377],{"class":86,"line":2940},[84,152378,39278],{"class":154},[84,152380,152381],{"class":86,"line":2945},[84,152382,3578],{"emptyLinePlaceholder":1252},[84,152384,152385,152387,152389],{"class":86,"line":2959},[84,152386,31955],{"class":129},[84,152388,150881],{"class":94},[84,152390,31961],{"class":154},[84,152392,152393,152395,152397,152399,152401,152404,152406,152409,152411,152413,152415,152417,152419,152421,152423,152425],{"class":86,"line":2964},[84,152394,15922],{"class":129},[84,152396,150890],{"class":129},[84,152398,1562],{"class":158},[84,152400,150352],{"class":94},[84,152402,152403],{"class":154},".student_id",[84,152405,2254],{"class":94},[84,152407,152408],{"class":94}," {self",[84,152410,81447],{"class":154},[84,152412,2254],{"class":94},[84,152414,152408],{"class":94},[84,152416,81459],{"class":154},[84,152418,2254],{"class":94},[84,152420,152408],{"class":94},[84,152422,150762],{"class":154},[84,152424,2254],{"class":94},[84,152426,26296],{"class":158},[84,152428,152429],{"class":86,"line":3755},[84,152430,3578],{"emptyLinePlaceholder":1252},[84,152432,152433],{"class":86,"line":3769},[84,152434,3578],{"emptyLinePlaceholder":1252},[84,152436,152437,152439,152441,152443,152446,152448,152450,152452,152454,152456,152458],{"class":86,"line":3777},[84,152438,150381],{"class":154},[84,152440,867],{"class":129},[84,152442,150785],{"class":154},[84,152444,152445],{"class":158},"\"001\"",[84,152447,846],{"class":154},[84,152449,150788],{"class":158},[84,152451,846],{"class":154},[84,152453,849],{"class":94},[84,152455,846],{"class":154},[84,152457,2297],{"class":94},[84,152459,162],{"class":154},[84,152461,152462,152464],{"class":86,"line":3782},[84,152463,730],{"class":94},[84,152465,152466],{"class":154},"(student.is_passed())\n",[84,152468,152469,152471],{"class":86,"line":3788},[84,152470,730],{"class":94},[84,152472,152473],{"class":154},"(student.to_dict())\n",[19,152475,152476,102156,152479,152482],{},[39,152477,152478],{},"to_dict()",[39,152480,152481],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152484,152486],{"id":152485},"_1116-易错点","11.16 易错点",[26,152488,152489,152495,152501,152506,152509,152512],{},[29,152490,152491,152492,55],{},"类名推荐使用大驼峰，如 ",[39,152493,152494],{},"StudentManager",[29,152496,152497,152498,152500],{},"方法第一个参数必须写 ",[39,152499,31977],{},"，调用时不用传。",[29,152502,152503,152505],{},[39,152504,31983],{}," 不是普通方法，它在创建对象时自动执行。",[29,152507,152508],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,152510,152511],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,152513,152514],{},"类中方法太多时，说明职责可能过重。",[14,152516,152518],{"id":152517},"_1117-本章练习","11.17 本章练习",[26,152520,152521,152527,152533,152538,152551],{},[29,152522,152523,152524,152526],{},"定义 ",[39,152525,150468],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,152528,152523,152529,152532],{},[39,152530,152531],{},"Account"," 类，实现存款、取款、查询余额。",[29,152534,152523,152535,152537],{},[39,152536,18396],{}," 类，计算圆的周长和面积。",[29,152539,152523,152540,42,152543,152546,152547,152550],{},[39,152541,152542],{},"Dog",[39,152544,152545],{},"Cat"," 类，并用同一个函数调用它们的 ",[39,152548,152549],{},"speak()"," 方法。",[29,152552,1188,152553,152555,152556,55],{},[39,152554,152039],{}," 定义一个商品类 ",[39,152557,152558],{},"Product",[1222,152560,152561],{},"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":66,"searchDepth":98,"depth":98,"links":152563},[152564,152565,152566,152567,152568,152569,152571,152572,152573,152574,152575,152576,152577,152581,152582,152583,152584],{"id":150232,"depth":98,"text":150233},{"id":150415,"depth":98,"text":150416},{"id":150479,"depth":98,"text":150480},{"id":150556,"depth":98,"text":150557},{"id":150655,"depth":98,"text":150656},{"id":150819,"depth":98,"text":152570},"11.6 str",{"id":150945,"depth":98,"text":150946},{"id":151211,"depth":98,"text":151212},{"id":151325,"depth":98,"text":151326},{"id":151480,"depth":98,"text":151481},{"id":151604,"depth":98,"text":151605},{"id":151720,"depth":98,"text":151721},{"id":151869,"depth":98,"text":151870,"children":152578},[152579,152580],{"id":151873,"depth":106,"text":151874},{"id":151955,"depth":106,"text":151956},{"id":152033,"depth":98,"text":152034},{"id":152148,"depth":98,"text":152149},{"id":152485,"depth":98,"text":152486},{"id":152517,"depth":98,"text":152518},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150224,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152591,"title":152592,"body":152593,"description":1249,"extension":1250,"meta":155906,"navigation":1252,"path":155907,"seo":155908,"stem":155909,"__hash__":155910},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152594,"toc":155882},[152595,152598,152602,152605,152608,152637,152640,152648,152652,152656,152659,152682,152685,152691,152695,154141,154144,154165,154169,154172,154184,154187,154371,154374,154500,154503,154507,154511,154647,154651,154737,154741,154823,154827,154864,154868,155057,155061,155064,155294,155298,155301,155482,155485,155489,155492,155498,155501,155527,155531,155534,155548,155551,155576,155579,155593,155596,155613,155616,155633,155636,155653,155657,155683,155687,155710,155714,155717,155719,155725,155727,155748,155751,155757,155763,155767,155770,155846,155849,155853,155879],[10,152596,152592],{"id":152597},"_12-综合案例与复习路线",[14,152599,152601],{"id":152600},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152603,152604],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152606,152607],{},"一个合格的入门综合项目最好覆盖：",[26,152609,152610,152613,152616,152619,152622,152625,152628,152631,152634],{},[29,152611,152612],{},"输入输出。",[29,152614,152615],{},"判断和循环。",[29,152617,152618],{},"函数拆分。",[29,152620,152621],{},"列表、字典等容器。",[29,152623,152624],{},"文件持久化。",[29,152626,152627],{},"异常处理。",[29,152629,152630],{},"模块拆分。",[29,152632,152633],{},"可选：面向对象。",[29,152635,152636],{},"可选：数据可视化。",[19,152638,152639],{},"本章整理两个方向：",[26,152641,152642,152645],{},[29,152643,152644],{},"学生管理系统。",[29,152646,152647],{},"销售数据统计和可视化。",[14,152649,152651],{"id":152650},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[198,152653,152655],{"id":152654},"_1221-需求","12.2.1 需求",[19,152657,152658],{},"实现一个命令行学生管理系统：",[26,152660,152661,152664,152667,152670,152673,152676,152679],{},[29,152662,152663],{},"添加学生。",[29,152665,152666],{},"删除学生。",[29,152668,152669],{},"修改学生。",[29,152671,152672],{},"查询学生。",[29,152674,152675],{},"显示所有学生。",[29,152677,152678],{},"保存到 JSON 文件。",[29,152680,152681],{},"程序启动时自动读取 JSON 文件。",[19,152683,152684],{},"学生字段：",[60,152686,152689],{"className":152687,"code":152688,"language":65,"meta":66},[63],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[39,152690,152688],{"__ignoreMap":66},[14,152692,152694],{"id":152693},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[60,152696,152698],{"className":121,"code":152697,"language":91,"meta":66,"style":66},"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",[39,152699,152700,152706,152716,152720,152734,152738,152742,152751,152763,152769,152773,152779,152810,152820,152827,152838,152844,152848,152852,152862,152893,152919,152923,152927,152936,152947,152958,152969,152980,152991,153002,153013,153017,153021,153031,153043,153059,153066,153073,153077,153081,153091,153099,153106,153119,153129,153140,153144,153148,153157,153165,153171,153183,153191,153202,153206,153210,153219,153235,153239,153246,153257,153262,153266,153282,153297,153312,153316,153321,153329,153337,153345,153353,153357,153362,153373,153377,153381,153390,153405,153415,153419,153431,153442,153446,153450,153455,153459,153470,153474,153478,153487,153502,153510,153514,153526,153536,153540,153544,153559,153572,153585,153589,153602,153614,153626,153630,153634,153645,153649,153653,153662,153677,153685,153689,153701,153711,153715,153719,153724,153728,153732,153742,153748,153770,153789,153808,153827,153832,153836,153840,153849,153857,153868,153872,153876,153902,153912,153917,153921,153925,153933,153943,153947,153955,153960,153976,153980,153994,153999,154013,154018,154031,154036,154049,154054,154067,154072,154085,154096,154100,154106,154117,154121,154125,154137],{"__ignoreMap":66},[84,152701,152702,152704],{"class":86,"line":87},[84,152703,31547],{"class":129},[84,152705,147991],{"class":154},[84,152707,152708,152710,152712,152714],{"class":86,"line":98},[84,152709,31891],{"class":129},[84,152711,109445],{"class":154},[84,152713,31547],{"class":129},[84,152715,109450],{"class":154},[84,152717,152718],{"class":86,"line":106},[84,152719,3578],{"emptyLinePlaceholder":1252},[84,152721,152722,152725,152727,152729,152732],{"class":86,"line":112},[84,152723,152724],{"class":94},"DATA_FILE",[84,152726,14735],{"class":129},[84,152728,109679],{"class":154},[84,152730,152731],{"class":158},"\"students.json\"",[84,152733,162],{"class":154},[84,152735,152736],{"class":86,"line":425},[84,152737,3578],{"emptyLinePlaceholder":1252},[84,152739,152740],{"class":86,"line":2395},[84,152741,3578],{"emptyLinePlaceholder":1252},[84,152743,152744,152746,152749],{"class":86,"line":2401},[84,152745,33100],{"class":129},[84,152747,152748],{"class":90}," load_students",[84,152750,33106],{"class":154},[84,152752,152753,152755,152757,152760],{"class":86,"line":2492},[84,152754,4279],{"class":129},[84,152756,40082],{"class":129},[84,152758,152759],{"class":94}," DATA_FILE",[84,152761,152762],{"class":154},".exists():\n",[84,152764,152765,152767],{"class":86,"line":2498},[84,152766,15922],{"class":129},[84,152768,52987],{"class":154},[84,152770,152771],{"class":86,"line":2510},[84,152772,3578],{"emptyLinePlaceholder":1252},[84,152774,152775,152777],{"class":86,"line":2793},[84,152776,126908],{"class":129},[84,152778,4917],{"class":154},[84,152780,152781,152784,152786,152788,152790,152792,152794,152796,152798,152800,152802,152804,152806,152808],{"class":86,"line":2798},[84,152782,152783],{"class":129},"        with",[84,152785,1131],{"class":94},[84,152787,155],{"class":154},[84,152789,152724],{"class":94},[84,152791,846],{"class":154},[84,152793,1141],{"class":158},[84,152795,846],{"class":154},[84,152797,1146],{"class":928},[84,152799,867],{"class":129},[84,152801,1151],{"class":158},[84,152803,1154],{"class":154},[84,152805,1157],{"class":129},[84,152807,149053],{"class":928},[84,152809,4917],{"class":154},[84,152811,152812,152814,152816,152818],{"class":86,"line":2804},[84,152813,16902],{"class":129},[84,152815,149064],{"class":154},[84,152817,46506],{"class":928},[84,152819,162],{"class":154},[84,152821,152822,152824],{"class":86,"line":2809},[84,152823,126936],{"class":129},[84,152825,152826],{"class":154}," json.JSONDecodeError:\n",[84,152828,152829,152831,152833,152836],{"class":86,"line":2823},[84,152830,33604],{"class":94},[84,152832,155],{"class":154},[84,152834,152835],{"class":158},"\"数据文件格式错误，已使用空数据启动\"",[84,152837,162],{"class":154},[84,152839,152840,152842],{"class":86,"line":2828},[84,152841,15922],{"class":129},[84,152843,52987],{"class":154},[84,152845,152846],{"class":86,"line":2834},[84,152847,3578],{"emptyLinePlaceholder":1252},[84,152849,152850],{"class":86,"line":2855},[84,152851,3578],{"emptyLinePlaceholder":1252},[84,152853,152854,152856,152859],{"class":86,"line":2860},[84,152855,33100],{"class":129},[84,152857,152858],{"class":90}," save_students",[84,152860,152861],{"class":154},"(students):\n",[84,152863,152864,152866,152868,152870,152872,152874,152877,152879,152881,152883,152885,152887,152889,152891],{"class":86,"line":2874},[84,152865,35330],{"class":129},[84,152867,1131],{"class":94},[84,152869,155],{"class":154},[84,152871,152724],{"class":94},[84,152873,846],{"class":154},[84,152875,152876],{"class":158},"\"w\"",[84,152878,846],{"class":154},[84,152880,1146],{"class":928},[84,152882,867],{"class":129},[84,152884,1151],{"class":158},[84,152886,1154],{"class":154},[84,152888,1157],{"class":129},[84,152890,149053],{"class":928},[84,152892,4917],{"class":154},[84,152894,152895,152898,152900,152902,152904,152906,152908,152910,152913,152915,152917],{"class":86,"line":2879},[84,152896,152897],{"class":154},"        json.dump(students, ",[84,152899,46506],{"class":928},[84,152901,846],{"class":154},[84,152903,148037],{"class":928},[84,152905,867],{"class":129},[84,152907,35139],{"class":94},[84,152909,846],{"class":154},[84,152911,152912],{"class":928},"indent",[84,152914,867],{"class":129},[84,152916,1397],{"class":94},[84,152918,162],{"class":154},[84,152920,152921],{"class":86,"line":2908},[84,152922,3578],{"emptyLinePlaceholder":1252},[84,152924,152925],{"class":86,"line":2913},[84,152926,3578],{"emptyLinePlaceholder":1252},[84,152928,152929,152931,152934],{"class":86,"line":2930},[84,152930,33100],{"class":129},[84,152932,152933],{"class":90}," show_menu",[84,152935,33106],{"class":154},[84,152937,152938,152940,152942,152945],{"class":86,"line":2935},[84,152939,32453],{"class":94},[84,152941,155],{"class":154},[84,152943,152944],{"class":158},"\"====== 学生管理系统 ======\"",[84,152946,162],{"class":154},[84,152948,152949,152951,152953,152956],{"class":86,"line":2940},[84,152950,32453],{"class":94},[84,152952,155],{"class":154},[84,152954,152955],{"class":158},"\"1. 添加学生\"",[84,152957,162],{"class":154},[84,152959,152960,152962,152964,152967],{"class":86,"line":2945},[84,152961,32453],{"class":94},[84,152963,155],{"class":154},[84,152965,152966],{"class":158},"\"2. 删除学生\"",[84,152968,162],{"class":154},[84,152970,152971,152973,152975,152978],{"class":86,"line":2959},[84,152972,32453],{"class":94},[84,152974,155],{"class":154},[84,152976,152977],{"class":158},"\"3. 修改学生\"",[84,152979,162],{"class":154},[84,152981,152982,152984,152986,152989],{"class":86,"line":2964},[84,152983,32453],{"class":94},[84,152985,155],{"class":154},[84,152987,152988],{"class":158},"\"4. 查询学生\"",[84,152990,162],{"class":154},[84,152992,152993,152995,152997,153000],{"class":86,"line":3755},[84,152994,32453],{"class":94},[84,152996,155],{"class":154},[84,152998,152999],{"class":158},"\"5. 显示所有学生\"",[84,153001,162],{"class":154},[84,153003,153004,153006,153008,153011],{"class":86,"line":3769},[84,153005,32453],{"class":94},[84,153007,155],{"class":154},[84,153009,153010],{"class":158},"\"0. 退出系统\"",[84,153012,162],{"class":154},[84,153014,153015],{"class":86,"line":3777},[84,153016,3578],{"emptyLinePlaceholder":1252},[84,153018,153019],{"class":86,"line":3782},[84,153020,3578],{"emptyLinePlaceholder":1252},[84,153022,153023,153025,153028],{"class":86,"line":3788},[84,153024,33100],{"class":129},[84,153026,153027],{"class":90}," find_student",[84,153029,153030],{"class":154},"(students, student_id):\n",[84,153032,153033,153035,153038,153040],{"class":86,"line":3794},[84,153034,4379],{"class":129},[84,153036,153037],{"class":154}," student ",[84,153039,27206],{"class":129},[84,153041,153042],{"class":154}," students:\n",[84,153044,153045,153047,153050,153052,153054,153056],{"class":86,"line":3799},[84,153046,3675],{"class":129},[84,153048,153049],{"class":154}," student[",[84,153051,152347],{"class":158},[84,153053,5620],{"class":154},[84,153055,4127],{"class":129},[84,153057,153058],{"class":154}," student_id:\n",[84,153060,153061,153063],{"class":86,"line":9120},[84,153062,16902],{"class":129},[84,153064,153065],{"class":154}," student\n",[84,153067,153068,153070],{"class":86,"line":9144},[84,153069,5268],{"class":129},[84,153071,153072],{"class":94}," None\n",[84,153074,153075],{"class":86,"line":9149},[84,153076,3578],{"emptyLinePlaceholder":1252},[84,153078,153079],{"class":86,"line":9155},[84,153080,3578],{"emptyLinePlaceholder":1252},[84,153082,153083,153085,153088],{"class":86,"line":9182},[84,153084,33100],{"class":129},[84,153086,153087],{"class":90}," input_int",[84,153089,153090],{"class":154},"(prompt):\n",[84,153092,153093,153095,153097],{"class":86,"line":9187},[84,153094,3429],{"class":129},[84,153096,96438],{"class":94},[84,153098,4917],{"class":154},[84,153100,153101,153104],{"class":86,"line":9193},[84,153102,153103],{"class":129},"        try",[84,153105,4917],{"class":154},[84,153107,153108,153110,153112,153114,153116],{"class":86,"line":9205},[84,153109,16902],{"class":129},[84,153111,3560],{"class":94},[84,153113,155],{"class":154},[84,153115,54970],{"class":94},[84,153117,153118],{"class":154},"(prompt))\n",[84,153120,153121,153124,153127],{"class":86,"line":9217},[84,153122,153123],{"class":129},"        except",[84,153125,153126],{"class":94}," ValueError",[84,153128,4917],{"class":154},[84,153130,153131,153133,153135,153138],{"class":86,"line":9229},[84,153132,35802],{"class":94},[84,153134,155],{"class":154},[84,153136,153137],{"class":158},"\"请输入整数\"",[84,153139,162],{"class":154},[84,153141,153142],{"class":86,"line":10888},[84,153143,3578],{"emptyLinePlaceholder":1252},[84,153145,153146],{"class":86,"line":10913},[84,153147,3578],{"emptyLinePlaceholder":1252},[84,153149,153150,153152,153155],{"class":86,"line":10936},[84,153151,33100],{"class":129},[84,153153,153154],{"class":90}," input_float",[84,153156,153090],{"class":154},[84,153158,153159,153161,153163],{"class":86,"line":10960},[84,153160,3429],{"class":129},[84,153162,96438],{"class":94},[84,153164,4917],{"class":154},[84,153166,153167,153169],{"class":86,"line":10965},[84,153168,153103],{"class":129},[84,153170,4917],{"class":154},[84,153172,153173,153175,153177,153179,153181],{"class":86,"line":10970},[84,153174,16902],{"class":129},[84,153176,110931],{"class":94},[84,153178,155],{"class":154},[84,153180,54970],{"class":94},[84,153182,153118],{"class":154},[84,153184,153185,153187,153189],{"class":86,"line":10975},[84,153186,153123],{"class":129},[84,153188,153126],{"class":94},[84,153190,4917],{"class":154},[84,153192,153193,153195,153197,153200],{"class":86,"line":10984},[84,153194,35802],{"class":94},[84,153196,155],{"class":154},[84,153198,153199],{"class":158},"\"请输入数字\"",[84,153201,162],{"class":154},[84,153203,153204],{"class":86,"line":10989},[84,153205,3578],{"emptyLinePlaceholder":1252},[84,153207,153208],{"class":86,"line":10995},[84,153209,3578],{"emptyLinePlaceholder":1252},[84,153211,153212,153214,153217],{"class":86,"line":11016},[84,153213,33100],{"class":129},[84,153215,153216],{"class":90}," add_student",[84,153218,152861],{"class":154},[84,153220,153221,153224,153226,153228,153230,153233],{"class":86,"line":11022},[84,153222,153223],{"class":154},"    student_id ",[84,153225,867],{"class":129},[84,153227,61751],{"class":94},[84,153229,155],{"class":154},[84,153231,153232],{"class":158},"\"请输入学号:\"",[84,153234,162],{"class":154},[84,153236,153237],{"class":86,"line":11036},[84,153238,3578],{"emptyLinePlaceholder":1252},[84,153240,153241,153243],{"class":86,"line":11042},[84,153242,4279],{"class":129},[84,153244,153245],{"class":154}," find_student(students, student_id):\n",[84,153247,153248,153250,153252,153255],{"class":86,"line":11069},[84,153249,33604],{"class":94},[84,153251,155],{"class":154},[84,153253,153254],{"class":158},"\"学号已存在\"",[84,153256,162],{"class":154},[84,153258,153259],{"class":86,"line":11078},[84,153260,153261],{"class":129},"        return\n",[84,153263,153264],{"class":86,"line":11084},[84,153265,3578],{"emptyLinePlaceholder":1252},[84,153267,153268,153271,153273,153275,153277,153280],{"class":86,"line":11092},[84,153269,153270],{"class":154},"    name ",[84,153272,867],{"class":129},[84,153274,61751],{"class":94},[84,153276,155],{"class":154},[84,153278,153279],{"class":158},"\"请输入姓名:\"",[84,153281,162],{"class":154},[84,153283,153284,153287,153289,153292,153295],{"class":86,"line":11097},[84,153285,153286],{"class":154},"    age ",[84,153288,867],{"class":129},[84,153290,153291],{"class":154}," input_int(",[84,153293,153294],{"class":158},"\"请输入年龄:\"",[84,153296,162],{"class":154},[84,153298,153299,153302,153304,153307,153310],{"class":86,"line":17774},[84,153300,153301],{"class":154},"    score ",[84,153303,867],{"class":129},[84,153305,153306],{"class":154}," input_float(",[84,153308,153309],{"class":158},"\"请输入成绩:\"",[84,153311,162],{"class":154},[84,153313,153314],{"class":86,"line":17780},[84,153315,3578],{"emptyLinePlaceholder":1252},[84,153317,153318],{"class":86,"line":17803},[84,153319,153320],{"class":154},"    students.append({\n",[84,153322,153323,153326],{"class":86,"line":17809},[84,153324,153325],{"class":158},"        \"student_id\"",[84,153327,153328],{"class":154},": student_id,\n",[84,153330,153331,153334],{"class":86,"line":17832},[84,153332,153333],{"class":158},"        \"name\"",[84,153335,153336],{"class":154},": name,\n",[84,153338,153339,153342],{"class":86,"line":17846},[84,153340,153341],{"class":158},"        \"age\"",[84,153343,153344],{"class":154},": age,\n",[84,153346,153347,153350],{"class":86,"line":17866},[84,153348,153349],{"class":158},"        \"score\"",[84,153351,153352],{"class":154},": score,\n",[84,153354,153355],{"class":86,"line":17872},[84,153356,34613],{"class":154},[84,153358,153359],{"class":86,"line":17883},[84,153360,153361],{"class":154},"    save_students(students)\n",[84,153363,153364,153366,153368,153371],{"class":86,"line":17906},[84,153365,32453],{"class":94},[84,153367,155],{"class":154},[84,153369,153370],{"class":158},"\"添加成功\"",[84,153372,162],{"class":154},[84,153374,153375],{"class":86,"line":17928},[84,153376,3578],{"emptyLinePlaceholder":1252},[84,153378,153379],{"class":86,"line":17933},[84,153380,3578],{"emptyLinePlaceholder":1252},[84,153382,153383,153385,153388],{"class":86,"line":17939},[84,153384,33100],{"class":129},[84,153386,153387],{"class":90}," delete_student",[84,153389,152861],{"class":154},[84,153391,153392,153394,153396,153398,153400,153403],{"class":86,"line":17953},[84,153393,153223],{"class":154},[84,153395,867],{"class":129},[84,153397,61751],{"class":94},[84,153399,155],{"class":154},[84,153401,153402],{"class":158},"\"请输入要删除的学号:\"",[84,153404,162],{"class":154},[84,153406,153407,153410,153412],{"class":86,"line":17966},[84,153408,153409],{"class":154},"    student ",[84,153411,867],{"class":129},[84,153413,153414],{"class":154}," find_student(students, student_id)\n",[84,153416,153417],{"class":86,"line":17971},[84,153418,3578],{"emptyLinePlaceholder":1252},[84,153420,153421,153423,153425,153427,153429],{"class":86,"line":17985},[84,153422,4279],{"class":129},[84,153424,153037],{"class":154},[84,153426,40079],{"class":129},[84,153428,40085],{"class":94},[84,153430,4917],{"class":154},[84,153432,153433,153435,153437,153440],{"class":86,"line":17990},[84,153434,33604],{"class":94},[84,153436,155],{"class":154},[84,153438,153439],{"class":158},"\"学生不存在\"",[84,153441,162],{"class":154},[84,153443,153444],{"class":86,"line":17996},[84,153445,153261],{"class":129},[84,153447,153448],{"class":86,"line":18001},[84,153449,3578],{"emptyLinePlaceholder":1252},[84,153451,153452],{"class":86,"line":18015},[84,153453,153454],{"class":154},"    students.remove(student)\n",[84,153456,153457],{"class":86,"line":18020},[84,153458,153361],{"class":154},[84,153460,153461,153463,153465,153468],{"class":86,"line":18025},[84,153462,32453],{"class":94},[84,153464,155],{"class":154},[84,153466,153467],{"class":158},"\"删除成功\"",[84,153469,162],{"class":154},[84,153471,153472],{"class":86,"line":18039},[84,153473,3578],{"emptyLinePlaceholder":1252},[84,153475,153476],{"class":86,"line":18051},[84,153477,3578],{"emptyLinePlaceholder":1252},[84,153479,153480,153482,153485],{"class":86,"line":18056},[84,153481,33100],{"class":129},[84,153483,153484],{"class":90}," update_student",[84,153486,152861],{"class":154},[84,153488,153489,153491,153493,153495,153497,153500],{"class":86,"line":18069},[84,153490,153223],{"class":154},[84,153492,867],{"class":129},[84,153494,61751],{"class":94},[84,153496,155],{"class":154},[84,153498,153499],{"class":158},"\"请输入要修改的学号:\"",[84,153501,162],{"class":154},[84,153503,153504,153506,153508],{"class":86,"line":18074},[84,153505,153409],{"class":154},[84,153507,867],{"class":129},[84,153509,153414],{"class":154},[84,153511,153512],{"class":86,"line":18079},[84,153513,3578],{"emptyLinePlaceholder":1252},[84,153515,153516,153518,153520,153522,153524],{"class":86,"line":18084},[84,153517,4279],{"class":129},[84,153519,153037],{"class":154},[84,153521,40079],{"class":129},[84,153523,40085],{"class":94},[84,153525,4917],{"class":154},[84,153527,153528,153530,153532,153534],{"class":86,"line":18097},[84,153529,33604],{"class":94},[84,153531,155],{"class":154},[84,153533,153439],{"class":158},[84,153535,162],{"class":154},[84,153537,153538],{"class":86,"line":18102},[84,153539,153261],{"class":129},[84,153541,153542],{"class":86,"line":33785},[84,153543,3578],{"emptyLinePlaceholder":1252},[84,153545,153546,153548,153550,153552,153554,153557],{"class":86,"line":33791},[84,153547,153270],{"class":154},[84,153549,867],{"class":129},[84,153551,61751],{"class":94},[84,153553,155],{"class":154},[84,153555,153556],{"class":158},"\"请输入新姓名:\"",[84,153558,162],{"class":154},[84,153560,153561,153563,153565,153567,153570],{"class":86,"line":33797},[84,153562,153286],{"class":154},[84,153564,867],{"class":129},[84,153566,153291],{"class":154},[84,153568,153569],{"class":158},"\"请输入新年龄:\"",[84,153571,162],{"class":154},[84,153573,153574,153576,153578,153580,153583],{"class":86,"line":33803},[84,153575,153301],{"class":154},[84,153577,867],{"class":129},[84,153579,153306],{"class":154},[84,153581,153582],{"class":158},"\"请输入新成绩:\"",[84,153584,162],{"class":154},[84,153586,153587],{"class":86,"line":33809},[84,153588,3578],{"emptyLinePlaceholder":1252},[84,153590,153591,153594,153596,153598,153600],{"class":86,"line":33820},[84,153592,153593],{"class":154},"    student[",[84,153595,63825],{"class":158},[84,153597,5620],{"class":154},[84,153599,867],{"class":129},[84,153601,150695],{"class":154},[84,153603,153604,153606,153608,153610,153612],{"class":86,"line":33826},[84,153605,153593],{"class":154},[84,153607,70270],{"class":158},[84,153609,5620],{"class":154},[84,153611,867],{"class":129},[84,153613,150707],{"class":154},[84,153615,153616,153618,153620,153622,153624],{"class":86,"line":33846},[84,153617,153593],{"class":154},[84,153619,152372],{"class":158},[84,153621,5620],{"class":154},[84,153623,867],{"class":129},[84,153625,2760],{"class":154},[84,153627,153628],{"class":86,"line":33852},[84,153629,3578],{"emptyLinePlaceholder":1252},[84,153631,153632],{"class":86,"line":33863},[84,153633,153361],{"class":154},[84,153635,153636,153638,153640,153643],{"class":86,"line":33869},[84,153637,32453],{"class":94},[84,153639,155],{"class":154},[84,153641,153642],{"class":158},"\"修改成功\"",[84,153644,162],{"class":154},[84,153646,153647],{"class":86,"line":33875},[84,153648,3578],{"emptyLinePlaceholder":1252},[84,153650,153651],{"class":86,"line":33881},[84,153652,3578],{"emptyLinePlaceholder":1252},[84,153654,153655,153657,153660],{"class":86,"line":33887},[84,153656,33100],{"class":129},[84,153658,153659],{"class":90}," query_student",[84,153661,152861],{"class":154},[84,153663,153664,153666,153668,153670,153672,153675],{"class":86,"line":33893},[84,153665,153223],{"class":154},[84,153667,867],{"class":129},[84,153669,61751],{"class":94},[84,153671,155],{"class":154},[84,153673,153674],{"class":158},"\"请输入要查询的学号:\"",[84,153676,162],{"class":154},[84,153678,153679,153681,153683],{"class":86,"line":33899},[84,153680,153409],{"class":154},[84,153682,867],{"class":129},[84,153684,153414],{"class":154},[84,153686,153687],{"class":86,"line":33905},[84,153688,3578],{"emptyLinePlaceholder":1252},[84,153690,153691,153693,153695,153697,153699],{"class":86,"line":33925},[84,153692,4279],{"class":129},[84,153694,153037],{"class":154},[84,153696,40079],{"class":129},[84,153698,40085],{"class":94},[84,153700,4917],{"class":154},[84,153702,153703,153705,153707,153709],{"class":86,"line":33931},[84,153704,33604],{"class":94},[84,153706,155],{"class":154},[84,153708,153439],{"class":158},[84,153710,162],{"class":154},[84,153712,153713],{"class":86,"line":33947},[84,153714,153261],{"class":129},[84,153716,153717],{"class":86,"line":33953},[84,153718,3578],{"emptyLinePlaceholder":1252},[84,153720,153721],{"class":86,"line":33967},[84,153722,153723],{"class":154},"    print_student(student)\n",[84,153725,153726],{"class":86,"line":33973},[84,153727,3578],{"emptyLinePlaceholder":1252},[84,153729,153730],{"class":86,"line":33988},[84,153731,3578],{"emptyLinePlaceholder":1252},[84,153733,153734,153736,153739],{"class":86,"line":33994},[84,153735,33100],{"class":129},[84,153737,153738],{"class":90}," print_student",[84,153740,153741],{"class":154},"(student):\n",[84,153743,153744,153746],{"class":86,"line":34003},[84,153745,32453],{"class":94},[84,153747,152339],{"class":154},[84,153749,153750,153753,153755,153757,153760,153763,153765,153768],{"class":86,"line":34009},[84,153751,153752],{"class":129},"        f",[84,153754,1562],{"class":158},[84,153756,2204],{"class":94},[84,153758,153759],{"class":154},"student[",[84,153761,153762],{"class":158},"'student_id'",[84,153764,2248],{"class":154},[84,153766,153767],{"class":94},"}\\t",[84,153769,26296],{"class":158},[84,153771,153772,153774,153776,153778,153780,153783,153785,153787],{"class":86,"line":34018},[84,153773,153752],{"class":129},[84,153775,1562],{"class":158},[84,153777,2204],{"class":94},[84,153779,153759],{"class":154},[84,153781,153782],{"class":158},"'name'",[84,153784,2248],{"class":154},[84,153786,153767],{"class":94},[84,153788,26296],{"class":158},[84,153790,153791,153793,153795,153797,153799,153802,153804,153806],{"class":86,"line":34024},[84,153792,153752],{"class":129},[84,153794,1562],{"class":158},[84,153796,2204],{"class":94},[84,153798,153759],{"class":154},[84,153800,153801],{"class":158},"'age'",[84,153803,2248],{"class":154},[84,153805,153767],{"class":94},[84,153807,26296],{"class":158},[84,153809,153810,153812,153814,153816,153818,153821,153823,153825],{"class":86,"line":34030},[84,153811,153752],{"class":129},[84,153813,1562],{"class":158},[84,153815,2204],{"class":94},[84,153817,153759],{"class":154},[84,153819,153820],{"class":158},"'score'",[84,153822,2248],{"class":154},[84,153824,2254],{"class":94},[84,153826,26296],{"class":158},[84,153828,153829],{"class":86,"line":34039},[84,153830,153831],{"class":154},"    )\n",[84,153833,153834],{"class":86,"line":34045},[84,153835,3578],{"emptyLinePlaceholder":1252},[84,153837,153838],{"class":86,"line":34056},[84,153839,3578],{"emptyLinePlaceholder":1252},[84,153841,153842,153844,153847],{"class":86,"line":34062},[84,153843,33100],{"class":129},[84,153845,153846],{"class":90}," show_all_students",[84,153848,152861],{"class":154},[84,153850,153851,153853,153855],{"class":86,"line":34081},[84,153852,4279],{"class":129},[84,153854,40082],{"class":129},[84,153856,153042],{"class":154},[84,153858,153859,153861,153863,153866],{"class":86,"line":34087},[84,153860,33604],{"class":94},[84,153862,155],{"class":154},[84,153864,153865],{"class":158},"\"暂无学生\"",[84,153867,162],{"class":154},[84,153869,153870],{"class":86,"line":34098},[84,153871,153261],{"class":129},[84,153873,153874],{"class":86,"line":34104},[84,153875,3578],{"emptyLinePlaceholder":1252},[84,153877,153878,153880,153882,153885,153887,153890,153892,153895,153897,153900],{"class":86,"line":34124},[84,153879,32453],{"class":94},[84,153881,155],{"class":154},[84,153883,153884],{"class":158},"\"学号",[84,153886,2411],{"class":94},[84,153888,153889],{"class":158},"姓名",[84,153891,2411],{"class":94},[84,153893,153894],{"class":158},"年龄",[84,153896,2411],{"class":94},[84,153898,153899],{"class":158},"成绩\"",[84,153901,162],{"class":154},[84,153903,153904,153906,153908,153910],{"class":86,"line":34140},[84,153905,4379],{"class":129},[84,153907,153037],{"class":154},[84,153909,27206],{"class":129},[84,153911,153042],{"class":154},[84,153913,153914],{"class":86,"line":34146},[84,153915,153916],{"class":154},"        print_student(student)\n",[84,153918,153919],{"class":86,"line":34160},[84,153920,3578],{"emptyLinePlaceholder":1252},[84,153922,153923],{"class":86,"line":34166},[84,153924,3578],{"emptyLinePlaceholder":1252},[84,153926,153927,153929,153931],{"class":86,"line":34172},[84,153928,33100],{"class":129},[84,153930,3153],{"class":90},[84,153932,33106],{"class":154},[84,153934,153935,153938,153940],{"class":86,"line":34183},[84,153936,153937],{"class":154},"    students ",[84,153939,867],{"class":129},[84,153941,153942],{"class":154}," load_students()\n",[84,153944,153945],{"class":86,"line":34189},[84,153946,3578],{"emptyLinePlaceholder":1252},[84,153948,153949,153951,153953],{"class":86,"line":34195},[84,153950,3429],{"class":129},[84,153952,96438],{"class":94},[84,153954,4917],{"class":154},[84,153956,153957],{"class":86,"line":34205},[84,153958,153959],{"class":154},"        show_menu()\n",[84,153961,153962,153965,153967,153969,153971,153974],{"class":86,"line":34211},[84,153963,153964],{"class":154},"        choice ",[84,153966,867],{"class":129},[84,153968,61751],{"class":94},[84,153970,155],{"class":154},[84,153972,153973],{"class":158},"\"请输入操作:\"",[84,153975,162],{"class":154},[84,153977,153978],{"class":86,"line":34222},[84,153979,3578],{"emptyLinePlaceholder":1252},[84,153981,153982,153984,153987,153989,153992],{"class":86,"line":34228},[84,153983,3675],{"class":129},[84,153985,153986],{"class":154}," choice ",[84,153988,4127],{"class":129},[84,153990,153991],{"class":158}," \"1\"",[84,153993,4917],{"class":154},[84,153995,153996],{"class":86,"line":34238},[84,153997,153998],{"class":154},"            add_student(students)\n",[84,154000,154001,154004,154006,154008,154011],{"class":86,"line":34243},[84,154002,154003],{"class":129},"        elif",[84,154005,153986],{"class":154},[84,154007,4127],{"class":129},[84,154009,154010],{"class":158}," \"2\"",[84,154012,4917],{"class":154},[84,154014,154015],{"class":86,"line":34249},[84,154016,154017],{"class":154},"            delete_student(students)\n",[84,154019,154020,154022,154024,154026,154029],{"class":86,"line":34298},[84,154021,154003],{"class":129},[84,154023,153986],{"class":154},[84,154025,4127],{"class":129},[84,154027,154028],{"class":158}," \"3\"",[84,154030,4917],{"class":154},[84,154032,154033],{"class":86,"line":34345},[84,154034,154035],{"class":154},"            update_student(students)\n",[84,154037,154038,154040,154042,154044,154047],{"class":86,"line":34350},[84,154039,154003],{"class":129},[84,154041,153986],{"class":154},[84,154043,4127],{"class":129},[84,154045,154046],{"class":158}," \"4\"",[84,154048,4917],{"class":154},[84,154050,154051],{"class":86,"line":34356},[84,154052,154053],{"class":154},"            query_student(students)\n",[84,154055,154056,154058,154060,154062,154065],{"class":86,"line":34375},[84,154057,154003],{"class":129},[84,154059,153986],{"class":154},[84,154061,4127],{"class":129},[84,154063,154064],{"class":158}," \"5\"",[84,154066,4917],{"class":154},[84,154068,154069],{"class":86,"line":34381},[84,154070,154071],{"class":154},"            show_all_students(students)\n",[84,154073,154074,154076,154078,154080,154083],{"class":86,"line":34401},[84,154075,154003],{"class":129},[84,154077,153986],{"class":154},[84,154079,4127],{"class":129},[84,154081,154082],{"class":158}," \"0\"",[84,154084,4917],{"class":154},[84,154086,154087,154089,154091,154094],{"class":86,"line":34407},[84,154088,35802],{"class":94},[84,154090,155],{"class":154},[84,154092,154093],{"class":158},"\"退出系统\"",[84,154095,162],{"class":154},[84,154097,154098],{"class":86,"line":34413},[84,154099,116232],{"class":129},[84,154101,154102,154104],{"class":86,"line":34423},[84,154103,3712],{"class":129},[84,154105,4917],{"class":154},[84,154107,154108,154110,154112,154115],{"class":86,"line":34428},[84,154109,35802],{"class":94},[84,154111,155],{"class":154},[84,154113,154114],{"class":158},"\"输入错误\"",[84,154116,162],{"class":154},[84,154118,154119],{"class":86,"line":34434},[84,154120,3578],{"emptyLinePlaceholder":1252},[84,154122,154123],{"class":86,"line":34450},[84,154124,3578],{"emptyLinePlaceholder":1252},[84,154126,154127,154129,154131,154133,154135],{"class":86,"line":34495},[84,154128,2712],{"class":129},[84,154130,32374],{"class":94},[84,154132,102697],{"class":129},[84,154134,102700],{"class":158},[84,154136,4917],{"class":154},[84,154138,154139],{"class":86,"line":34501},[84,154140,102707],{"class":154},[19,154142,154143],{},"这个项目串联了：",[26,154145,154146,154149,154152,154155,154158,154160],{},[29,154147,154148],{},"菜单循环。",[29,154150,154151],{},"函数封装。",[29,154153,154154],{},"列表字典。",[29,154156,154157],{},"JSON 读写。",[29,154159,152627],{},[29,154161,154162,55],{},[39,154163,154164],{},"if __name__ == \"__main__\"",[14,154166,154168],{"id":154167},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154170,154171],{},"可以进一步拆成两个类：",[26,154173,154174,154179],{},[29,154175,154176,154178],{},[39,154177,150468],{},"：表示单个学生。",[29,154180,154181,154183],{},[39,154182,152494],{},"：负责学生增删改查和文件保存。",[19,154185,154186],{},"示意代码：",[60,154188,154190],{"className":121,"code":154189,"language":91,"meta":66,"style":66},"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",[39,154191,154192,154202,154206,154210,154214,154222,154229,154235,154241,154247,154251,154259,154265,154275,154285,154295,154305,154309,154313,154319,154327,154335,154343,154351,154359,154367],{"__ignoreMap":66},[84,154193,154194,154196,154198,154200],{"class":86,"line":87},[84,154195,31891],{"class":129},[84,154197,152052],{"class":154},[84,154199,31547],{"class":129},[84,154201,152057],{"class":154},[84,154203,154204],{"class":86,"line":98},[84,154205,3578],{"emptyLinePlaceholder":1252},[84,154207,154208],{"class":86,"line":106},[84,154209,3578],{"emptyLinePlaceholder":1252},[84,154211,154212],{"class":86,"line":112},[84,154213,152070],{"class":90},[84,154215,154216,154218,154220],{"class":86,"line":425},[84,154217,15864],{"class":129},[84,154219,9070],{"class":90},[84,154221,4917],{"class":154},[84,154223,154224,154227],{"class":86,"line":2395},[84,154225,154226],{"class":154},"    student_id: ",[84,154228,152086],{"class":94},[84,154230,154231,154233],{"class":86,"line":2401},[84,154232,152083],{"class":154},[84,154234,152086],{"class":94},[84,154236,154237,154239],{"class":86,"line":2492},[84,154238,152091],{"class":154},[84,154240,152094],{"class":94},[84,154242,154243,154245],{"class":86,"line":2498},[84,154244,152099],{"class":154},[84,154246,152102],{"class":94},[84,154248,154249],{"class":86,"line":2510},[84,154250,3578],{"emptyLinePlaceholder":1252},[84,154252,154253,154255,154257],{"class":86,"line":2793},[84,154254,31955],{"class":129},[84,154256,152250],{"class":90},[84,154258,31961],{"class":154},[84,154260,154261,154263],{"class":86,"line":2798},[84,154262,15922],{"class":129},[84,154264,16742],{"class":154},[84,154266,154267,154269,154271,154273],{"class":86,"line":2804},[84,154268,152263],{"class":158},[84,154270,52586],{"class":154},[84,154272,31977],{"class":94},[84,154274,152270],{"class":154},[84,154276,154277,154279,154281,154283],{"class":86,"line":2809},[84,154278,152275],{"class":158},[84,154280,52586],{"class":154},[84,154282,31977],{"class":94},[84,154284,152282],{"class":154},[84,154286,154287,154289,154291,154293],{"class":86,"line":2823},[84,154288,152287],{"class":158},[84,154290,52586],{"class":154},[84,154292,31977],{"class":94},[84,154294,152294],{"class":154},[84,154296,154297,154299,154301,154303],{"class":86,"line":2828},[84,154298,152299],{"class":158},[84,154300,52586],{"class":154},[84,154302,31977],{"class":94},[84,154304,152306],{"class":154},[84,154306,154307],{"class":86,"line":2834},[84,154308,3707],{"class":154},[84,154310,154311],{"class":86,"line":2855},[84,154312,3578],{"emptyLinePlaceholder":1252},[84,154314,154315,154317],{"class":86,"line":2860},[84,154316,151914],{"class":90},[84,154318,151917],{"class":94},[84,154320,154321,154323,154325],{"class":86,"line":2874},[84,154322,31955],{"class":129},[84,154324,152327],{"class":90},[84,154326,152330],{"class":154},[84,154328,154329,154331,154333],{"class":86,"line":2879},[84,154330,15922],{"class":129},[84,154332,151934],{"class":94},[84,154334,152339],{"class":154},[84,154336,154337,154339,154341],{"class":86,"line":2908},[84,154338,152344],{"class":154},[84,154340,152347],{"class":158},[84,154342,88982],{"class":154},[84,154344,154345,154347,154349],{"class":86,"line":2913},[84,154346,152344],{"class":154},[84,154348,63825],{"class":158},[84,154350,88982],{"class":154},[84,154352,154353,154355,154357],{"class":86,"line":2930},[84,154354,152344],{"class":154},[84,154356,70270],{"class":158},[84,154358,88982],{"class":154},[84,154360,154361,154363,154365],{"class":86,"line":2935},[84,154362,152344],{"class":154},[84,154364,152372],{"class":158},[84,154366,88982],{"class":154},[84,154368,154369],{"class":86,"line":2940},[84,154370,39278],{"class":154},[19,154372,154373],{},"管理器示意：",[60,154375,154377],{"className":121,"code":154376,"language":91,"meta":66,"style":66},"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",[39,154378,154379,154388,154396,154407,154411,154421,154434,154445,154452,154458,154462,154471,154480,154486,154493],{"__ignoreMap":66},[84,154380,154381,154383,154386],{"class":86,"line":87},[84,154382,15864],{"class":129},[84,154384,154385],{"class":90}," StudentManager",[84,154387,4917],{"class":154},[84,154389,154390,154392,154394],{"class":86,"line":98},[84,154391,31955],{"class":129},[84,154393,31958],{"class":94},[84,154395,31961],{"class":154},[84,154397,154398,154400,154403,154405],{"class":86,"line":106},[84,154399,31999],{"class":94},[84,154401,154402],{"class":154},".students ",[84,154404,867],{"class":129},[84,154406,52987],{"class":154},[84,154408,154409],{"class":86,"line":112},[84,154410,3578],{"emptyLinePlaceholder":1252},[84,154412,154413,154415,154418],{"class":86,"line":425},[84,154414,31955],{"class":129},[84,154416,154417],{"class":90}," find_by_id",[84,154419,154420],{"class":154},"(self, student_id):\n",[84,154422,154423,154425,154427,154429,154431],{"class":86,"line":2395},[84,154424,4581],{"class":129},[84,154426,153037],{"class":154},[84,154428,27206],{"class":129},[84,154430,40025],{"class":94},[84,154432,154433],{"class":154},".students:\n",[84,154435,154436,154438,154441,154443],{"class":86,"line":2401},[84,154437,5819],{"class":129},[84,154439,154440],{"class":154}," student.student_id ",[84,154442,4127],{"class":129},[84,154444,153058],{"class":154},[84,154446,154447,154450],{"class":86,"line":2492},[84,154448,154449],{"class":129},"                return",[84,154451,153065],{"class":154},[84,154453,154454,154456],{"class":86,"line":2498},[84,154455,15922],{"class":129},[84,154457,153072],{"class":94},[84,154459,154460],{"class":86,"line":2510},[84,154461,3578],{"emptyLinePlaceholder":1252},[84,154463,154464,154466,154468],{"class":86,"line":2793},[84,154465,31955],{"class":129},[84,154467,6384],{"class":90},[84,154469,154470],{"class":154},"(self, student):\n",[84,154472,154473,154475,154477],{"class":86,"line":2798},[84,154474,3675],{"class":129},[84,154476,40025],{"class":94},[84,154478,154479],{"class":154},".find_by_id(student.student_id):\n",[84,154481,154482,154484],{"class":86,"line":2804},[84,154483,16902],{"class":129},[84,154485,126931],{"class":94},[84,154487,154488,154490],{"class":86,"line":2809},[84,154489,31999],{"class":94},[84,154491,154492],{"class":154},".students.append(student)\n",[84,154494,154495,154497],{"class":86,"line":2823},[84,154496,15922],{"class":129},[84,154498,154499],{"class":94}," True\n",[19,154501,154502],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154504,154506],{"id":154505},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[198,154508,154510],{"id":154509},"_1251-数据结构","12.5.1 数据结构",[60,154512,154514],{"className":121,"code":154513,"language":91,"meta":66,"style":66},"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",[39,154515,154516,154524,154555,154585,154614,154643],{"__ignoreMap":66},[84,154517,154518,154520,154522],{"class":86,"line":87},[84,154519,149365],{"class":154},[84,154521,867],{"class":129},[84,154523,56594],{"class":154},[84,154525,154526,154528,154530,154532,154534,154536,154539,154541,154544,154546,154548,154550,154553],{"class":86,"line":98},[84,154527,149285],{"class":154},[84,154529,148897],{"class":158},[84,154531,52586],{"class":154},[84,154533,149508],{"class":158},[84,154535,846],{"class":154},[84,154537,154538],{"class":158},"\"category\"",[84,154540,52586],{"class":154},[84,154542,154543],{"class":158},"\"手机\"",[84,154545,846],{"class":154},[84,154547,85230],{"class":158},[84,154549,52586],{"class":154},[84,154551,154552],{"class":94},"12000",[84,154554,6107],{"class":154},[84,154556,154557,154559,154561,154563,154565,154567,154569,154571,154574,154576,154578,154580,154583],{"class":86,"line":106},[84,154558,149285],{"class":154},[84,154560,148897],{"class":158},[84,154562,52586],{"class":154},[84,154564,149508],{"class":158},[84,154566,846],{"class":154},[84,154568,154538],{"class":158},[84,154570,52586],{"class":154},[84,154572,154573],{"class":158},"\"电脑\"",[84,154575,846],{"class":154},[84,154577,85230],{"class":158},[84,154579,52586],{"class":154},[84,154581,154582],{"class":94},"18000",[84,154584,6107],{"class":154},[84,154586,154587,154589,154591,154593,154595,154597,154599,154601,154603,154605,154607,154609,154612],{"class":86,"line":112},[84,154588,149285],{"class":154},[84,154590,148897],{"class":158},[84,154592,52586],{"class":154},[84,154594,149529],{"class":158},[84,154596,846],{"class":154},[84,154598,154538],{"class":158},[84,154600,52586],{"class":154},[84,154602,154543],{"class":158},[84,154604,846],{"class":154},[84,154606,85230],{"class":158},[84,154608,52586],{"class":154},[84,154610,154611],{"class":94},"15000",[84,154613,6107],{"class":154},[84,154615,154616,154618,154620,154622,154624,154626,154628,154630,154632,154634,154636,154638,154641],{"class":86,"line":425},[84,154617,149285],{"class":154},[84,154619,148897],{"class":158},[84,154621,52586],{"class":154},[84,154623,149529],{"class":158},[84,154625,846],{"class":154},[84,154627,154538],{"class":158},[84,154629,52586],{"class":154},[84,154631,154573],{"class":158},[84,154633,846],{"class":154},[84,154635,85230],{"class":158},[84,154637,52586],{"class":154},[84,154639,154640],{"class":94},"16000",[84,154642,6107],{"class":154},[84,154644,154645],{"class":86,"line":2395},[84,154646,34398],{"class":154},[198,154648,154650],{"id":154649},"_1252-按日期统计","12.5.2 按日期统计",[60,154652,154654],{"className":121,"code":154653,"language":91,"meta":66,"style":66},"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",[39,154655,154656,154665,154669,154680,154694,154707,154726,154730],{"__ignoreMap":66},[84,154657,154658,154661,154663],{"class":86,"line":87},[84,154659,154660],{"class":154},"daily_total ",[84,154662,867],{"class":129},[84,154664,89014],{"class":154},[84,154666,154667],{"class":86,"line":98},[84,154668,3578],{"emptyLinePlaceholder":1252},[84,154670,154671,154673,154675,154677],{"class":86,"line":106},[84,154672,4203],{"class":129},[84,154674,149109],{"class":154},[84,154676,27206],{"class":129},[84,154678,154679],{"class":154}," sales:\n",[84,154681,154682,154685,154687,154690,154692],{"class":86,"line":112},[84,154683,154684],{"class":154},"    date ",[84,154686,867],{"class":129},[84,154688,154689],{"class":154}," item[",[84,154691,148897],{"class":158},[84,154693,34398],{"class":154},[84,154695,154696,154699,154701,154703,154705],{"class":86,"line":425},[84,154697,154698],{"class":154},"    amount ",[84,154700,867],{"class":129},[84,154702,154689],{"class":154},[84,154704,85230],{"class":158},[84,154706,34398],{"class":154},[84,154708,154709,154712,154714,154717,154719,154721,154723],{"class":86,"line":2395},[84,154710,154711],{"class":154},"    daily_total[date] ",[84,154713,867],{"class":129},[84,154715,154716],{"class":154}," daily_total.get(date, ",[84,154718,1504],{"class":94},[84,154720,1154],{"class":154},[84,154722,1790],{"class":129},[84,154724,154725],{"class":154}," amount\n",[84,154727,154728],{"class":86,"line":2401},[84,154729,3578],{"emptyLinePlaceholder":1252},[84,154731,154732,154734],{"class":86,"line":2492},[84,154733,730],{"class":94},[84,154735,154736],{"class":154},"(daily_total)\n",[198,154738,154740],{"id":154739},"_1253-按类别统计","12.5.3 按类别统计",[60,154742,154744],{"className":121,"code":154743,"language":91,"meta":66,"style":66},"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",[39,154745,154746,154755,154759,154769,154782,154794,154812,154816],{"__ignoreMap":66},[84,154747,154748,154751,154753],{"class":86,"line":87},[84,154749,154750],{"class":154},"category_total ",[84,154752,867],{"class":129},[84,154754,89014],{"class":154},[84,154756,154757],{"class":86,"line":98},[84,154758,3578],{"emptyLinePlaceholder":1252},[84,154760,154761,154763,154765,154767],{"class":86,"line":106},[84,154762,4203],{"class":129},[84,154764,149109],{"class":154},[84,154766,27206],{"class":129},[84,154768,154679],{"class":154},[84,154770,154771,154774,154776,154778,154780],{"class":86,"line":112},[84,154772,154773],{"class":154},"    category ",[84,154775,867],{"class":129},[84,154777,154689],{"class":154},[84,154779,154538],{"class":158},[84,154781,34398],{"class":154},[84,154783,154784,154786,154788,154790,154792],{"class":86,"line":425},[84,154785,154698],{"class":154},[84,154787,867],{"class":129},[84,154789,154689],{"class":154},[84,154791,85230],{"class":158},[84,154793,34398],{"class":154},[84,154795,154796,154799,154801,154804,154806,154808,154810],{"class":86,"line":2395},[84,154797,154798],{"class":154},"    category_total[category] ",[84,154800,867],{"class":129},[84,154802,154803],{"class":154}," category_total.get(category, ",[84,154805,1504],{"class":94},[84,154807,1154],{"class":154},[84,154809,1790],{"class":129},[84,154811,154725],{"class":154},[84,154813,154814],{"class":86,"line":2401},[84,154815,3578],{"emptyLinePlaceholder":1252},[84,154817,154818,154820],{"class":86,"line":2492},[84,154819,730],{"class":94},[84,154821,154822],{"class":154},"(category_total)\n",[198,154824,154826],{"id":154825},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[60,154828,154830],{"className":121,"code":154829,"language":91,"meta":66,"style":66},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[39,154831,154832,154857],{"__ignoreMap":66},[84,154833,154834,154837,154839,154841,154844,154847,154850,154853,154855],{"class":86,"line":87},[84,154835,154836],{"class":154},"top_date, top_amount ",[84,154838,867],{"class":129},[84,154840,7124],{"class":94},[84,154842,154843],{"class":154},"(daily_total.items(), ",[84,154845,154846],{"class":928},"key",[84,154848,154849],{"class":129},"=lambda",[84,154851,154852],{"class":154}," item: item[",[84,154854,1529],{"class":94},[84,154856,5834],{"class":154},[84,154858,154859,154861],{"class":86,"line":98},[84,154860,730],{"class":94},[84,154862,154863],{"class":154},"(top_date, top_amount)\n",[14,154865,154867],{"id":154866},"_126-绘制柱状图","12.6 绘制柱状图",[60,154869,154871],{"className":121,"code":154870,"language":91,"meta":66,"style":66},"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",[39,154872,154873,154887,154898,154902,154910,154922,154934,154945,154949,154953,154963,154974,154988,154993,155010,155027,155043,155047],{"__ignoreMap":66},[84,154874,154875,154877,154879,154881,154883,154885],{"class":86,"line":87},[84,154876,31891],{"class":129},[84,154878,148279],{"class":154},[84,154880,31547],{"class":129},[84,154882,148284],{"class":154},[84,154884,1157],{"class":129},[84,154886,148289],{"class":154},[84,154888,154889,154891,154893,154895],{"class":86,"line":98},[84,154890,31891],{"class":129},[84,154892,148138],{"class":154},[84,154894,31547],{"class":129},[84,154896,154897],{"class":154}," Bar\n",[84,154899,154900],{"class":86,"line":106},[84,154901,3578],{"emptyLinePlaceholder":1252},[84,154903,154904,154906,154908],{"class":86,"line":112},[84,154905,154750],{"class":154},[84,154907,867],{"class":129},[84,154909,16742],{"class":154},[84,154911,154912,154915,154917,154920],{"class":86,"line":425},[84,154913,154914],{"class":158},"    \"手机\"",[84,154916,52586],{"class":154},[84,154918,154919],{"class":94},"27000",[84,154921,32619],{"class":154},[84,154923,154924,154927,154929,154932],{"class":86,"line":2395},[84,154925,154926],{"class":158},"    \"电脑\"",[84,154928,52586],{"class":154},[84,154930,154931],{"class":94},"34000",[84,154933,32619],{"class":154},[84,154935,154936,154939,154941,154943],{"class":86,"line":2401},[84,154937,154938],{"class":158},"    \"耳机\"",[84,154940,52586],{"class":154},[84,154942,125523],{"class":94},[84,154944,32619],{"class":154},[84,154946,154947],{"class":86,"line":2492},[84,154948,2746],{"class":154},[84,154950,154951],{"class":86,"line":2498},[84,154952,3578],{"emptyLinePlaceholder":1252},[84,154954,154955,154958,154960],{"class":86,"line":2510},[84,154956,154957],{"class":154},"bar ",[84,154959,867],{"class":129},[84,154961,154962],{"class":154}," Bar()\n",[84,154964,154965,154968,154971],{"class":86,"line":2793},[84,154966,154967],{"class":154},"bar.add_xaxis(",[84,154969,154970],{"class":94},"list",[84,154972,154973],{"class":154},"(category_total.keys()))\n",[84,154975,154976,154979,154981,154983,154985],{"class":86,"line":2798},[84,154977,154978],{"class":154},"bar.add_yaxis(",[84,154980,148195],{"class":158},[84,154982,846],{"class":154},[84,154984,154970],{"class":94},[84,154986,154987],{"class":154},"(category_total.values()))\n",[84,154989,154990],{"class":86,"line":2804},[84,154991,154992],{"class":154},"bar.set_global_opts(\n",[84,154994,154995,154997,154999,155001,155003,155005,155008],{"class":86,"line":2809},[84,154996,148373],{"class":928},[84,154998,867],{"class":129},[84,155000,148378],{"class":154},[84,155002,52556],{"class":928},[84,155004,867],{"class":129},[84,155006,155007],{"class":158},"\"品类销售额\"",[84,155009,39199],{"class":154},[84,155011,155012,155014,155016,155018,155020,155022,155025],{"class":86,"line":2823},[84,155013,148392],{"class":928},[84,155015,867],{"class":129},[84,155017,148397],{"class":154},[84,155019,80956],{"class":928},[84,155021,867],{"class":129},[84,155023,155024],{"class":158},"\"品类\"",[84,155026,39199],{"class":154},[84,155028,155029,155031,155033,155035,155037,155039,155041],{"class":86,"line":2828},[84,155030,148411],{"class":928},[84,155032,867],{"class":129},[84,155034,148397],{"class":154},[84,155036,80956],{"class":928},[84,155038,867],{"class":129},[84,155040,148195],{"class":158},[84,155042,39199],{"class":154},[84,155044,155045],{"class":86,"line":2834},[84,155046,162],{"class":154},[84,155048,155049,155052,155055],{"class":86,"line":2855},[84,155050,155051],{"class":154},"bar.render(",[84,155053,155054],{"class":158},"\"category_sales.html\"",[84,155056,162],{"class":154},[14,155058,155060],{"id":155059},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155062,155063],{},"时间线适合展示不同日期、月份、年份的数据变化。",[60,155065,155067],{"className":121,"code":155066,"language":91,"meta":66,"style":66},"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",[39,155068,155069,155083,155094,155098,155106,155130,155153,155178,155182,155186,155196,155200,155211,155220,155230,155244,155275,155280,155284],{"__ignoreMap":66},[84,155070,155071,155073,155075,155077,155079,155081],{"class":86,"line":87},[84,155072,31891],{"class":129},[84,155074,148279],{"class":154},[84,155076,31547],{"class":129},[84,155078,148284],{"class":154},[84,155080,1157],{"class":129},[84,155082,148289],{"class":154},[84,155084,155085,155087,155089,155091],{"class":86,"line":98},[84,155086,31891],{"class":129},[84,155088,148138],{"class":154},[84,155090,31547],{"class":129},[84,155092,155093],{"class":154}," Bar, Timeline\n",[84,155095,155096],{"class":86,"line":106},[84,155097,3578],{"emptyLinePlaceholder":1252},[84,155099,155100,155102,155104],{"class":86,"line":112},[84,155101,102796],{"class":154},[84,155103,867],{"class":129},[84,155105,16742],{"class":154},[84,155107,155108,155111,155114,155116,155118,155120,155122,155124,155126,155128],{"class":86,"line":425},[84,155109,155110],{"class":158},"    \"2024-10-01\"",[84,155112,155113],{"class":154},": {",[84,155115,154543],{"class":158},[84,155117,52586],{"class":154},[84,155119,154552],{"class":94},[84,155121,846],{"class":154},[84,155123,154573],{"class":158},[84,155125,52586],{"class":154},[84,155127,154582],{"class":94},[84,155129,6107],{"class":154},[84,155131,155132,155135,155137,155139,155141,155143,155145,155147,155149,155151],{"class":86,"line":2395},[84,155133,155134],{"class":158},"    \"2024-10-02\"",[84,155136,155113],{"class":154},[84,155138,154543],{"class":158},[84,155140,52586],{"class":154},[84,155142,154611],{"class":94},[84,155144,846],{"class":154},[84,155146,154573],{"class":158},[84,155148,52586],{"class":154},[84,155150,154640],{"class":94},[84,155152,6107],{"class":154},[84,155154,155155,155158,155160,155162,155164,155167,155169,155171,155173,155176],{"class":86,"line":2401},[84,155156,155157],{"class":158},"    \"2024-10-03\"",[84,155159,155113],{"class":154},[84,155161,154543],{"class":158},[84,155163,52586],{"class":154},[84,155165,155166],{"class":94},"17000",[84,155168,846],{"class":154},[84,155170,154573],{"class":158},[84,155172,52586],{"class":154},[84,155174,155175],{"class":94},"19000",[84,155177,6107],{"class":154},[84,155179,155180],{"class":86,"line":2492},[84,155181,2746],{"class":154},[84,155183,155184],{"class":86,"line":2498},[84,155185,3578],{"emptyLinePlaceholder":1252},[84,155187,155188,155191,155193],{"class":86,"line":2510},[84,155189,155190],{"class":154},"timeline ",[84,155192,867],{"class":129},[84,155194,155195],{"class":154}," Timeline()\n",[84,155197,155198],{"class":86,"line":2793},[84,155199,3578],{"emptyLinePlaceholder":1252},[84,155201,155202,155204,155207,155209],{"class":86,"line":2798},[84,155203,4203],{"class":129},[84,155205,155206],{"class":154}," date, category_data ",[84,155208,27206],{"class":129},[84,155210,150048],{"class":154},[84,155212,155213,155216,155218],{"class":86,"line":2804},[84,155214,155215],{"class":154},"    bar ",[84,155217,867],{"class":129},[84,155219,154962],{"class":154},[84,155221,155222,155225,155227],{"class":86,"line":2809},[84,155223,155224],{"class":154},"    bar.add_xaxis(",[84,155226,154970],{"class":94},[84,155228,155229],{"class":154},"(category_data.keys()))\n",[84,155231,155232,155235,155237,155239,155241],{"class":86,"line":2823},[84,155233,155234],{"class":154},"    bar.add_yaxis(",[84,155236,148195],{"class":158},[84,155238,846],{"class":154},[84,155240,154970],{"class":94},[84,155242,155243],{"class":154},"(category_data.values()))\n",[84,155245,155246,155249,155252,155254,155256,155258,155260,155262,155264,155266,155268,155270,155273],{"class":86,"line":2828},[84,155247,155248],{"class":154},"    bar.set_global_opts(",[84,155250,155251],{"class":928},"title_opts",[84,155253,867],{"class":129},[84,155255,148378],{"class":154},[84,155257,52556],{"class":928},[84,155259,867],{"class":129},[84,155261,1372],{"class":129},[84,155263,1562],{"class":158},[84,155265,2204],{"class":94},[84,155267,75072],{"class":154},[84,155269,2254],{"class":94},[84,155271,155272],{"class":158},"销售额\"",[84,155274,31651],{"class":154},[84,155276,155277],{"class":86,"line":2834},[84,155278,155279],{"class":154},"    timeline.add(bar, date)\n",[84,155281,155282],{"class":86,"line":2855},[84,155283,3578],{"emptyLinePlaceholder":1252},[84,155285,155286,155289,155292],{"class":86,"line":2860},[84,155287,155288],{"class":154},"timeline.render(",[84,155290,155291],{"class":158},"\"timeline_sales.html\"",[84,155293,162],{"class":154},[14,155295,155297],{"id":155296},"_128-绘制地图","12.8 绘制地图",[19,155299,155300],{},"地图适合展示地区数据。",[60,155302,155304],{"className":121,"code":155303,"language":91,"meta":66,"style":66},"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",[39,155305,155306,155320,155331,155335,155343,155356,155368,155381,155394,155398,155402,155412,155427,155432,155449,155468,155472],{"__ignoreMap":66},[84,155307,155308,155310,155312,155314,155316,155318],{"class":86,"line":87},[84,155309,31891],{"class":129},[84,155311,148279],{"class":154},[84,155313,31547],{"class":129},[84,155315,148284],{"class":154},[84,155317,1157],{"class":129},[84,155319,148289],{"class":154},[84,155321,155322,155324,155326,155328],{"class":86,"line":98},[84,155323,31891],{"class":129},[84,155325,148138],{"class":154},[84,155327,31547],{"class":129},[84,155329,155330],{"class":154}," Map\n",[84,155332,155333],{"class":86,"line":106},[84,155334,3578],{"emptyLinePlaceholder":1252},[84,155336,155337,155339,155341],{"class":86,"line":112},[84,155338,102796],{"class":154},[84,155340,867],{"class":129},[84,155342,56594],{"class":154},[84,155344,155345,155348,155350,155352,155354],{"class":86,"line":425},[84,155346,155347],{"class":154},"    (",[84,155349,70415],{"class":158},[84,155351,846],{"class":154},[84,155353,2125],{"class":94},[84,155355,39199],{"class":154},[84,155357,155358,155360,155362,155364,155366],{"class":86,"line":2395},[84,155359,155347],{"class":154},[84,155361,70435],{"class":158},[84,155363,846],{"class":154},[84,155365,148212],{"class":94},[84,155367,39199],{"class":154},[84,155369,155370,155372,155375,155377,155379],{"class":86,"line":2401},[84,155371,155347],{"class":154},[84,155373,155374],{"class":158},"\"广东\"",[84,155376,846],{"class":154},[84,155378,2903],{"class":94},[84,155380,39199],{"class":154},[84,155382,155383,155385,155388,155390,155392],{"class":86,"line":2492},[84,155384,155347],{"class":154},[84,155386,155387],{"class":158},"\"浙江\"",[84,155389,846],{"class":154},[84,155391,148217],{"class":94},[84,155393,39199],{"class":154},[84,155395,155396],{"class":86,"line":2498},[84,155397,34398],{"class":154},[84,155399,155400],{"class":86,"line":2510},[84,155401,3578],{"emptyLinePlaceholder":1252},[84,155403,155404,155407,155409],{"class":86,"line":2793},[84,155405,155406],{"class":154},"map_chart ",[84,155408,867],{"class":129},[84,155410,155411],{"class":154}," Map()\n",[84,155413,155414,155417,155419,155422,155425],{"class":86,"line":2798},[84,155415,155416],{"class":154},"map_chart.add(",[84,155418,148195],{"class":158},[84,155420,155421],{"class":154},", data, ",[84,155423,155424],{"class":158},"\"china\"",[84,155426,162],{"class":154},[84,155428,155429],{"class":86,"line":2804},[84,155430,155431],{"class":154},"map_chart.set_global_opts(\n",[84,155433,155434,155436,155438,155440,155442,155444,155447],{"class":86,"line":2809},[84,155435,148373],{"class":928},[84,155437,867],{"class":129},[84,155439,148378],{"class":154},[84,155441,52556],{"class":928},[84,155443,867],{"class":129},[84,155445,155446],{"class":158},"\"地区销售额\"",[84,155448,39199],{"class":154},[84,155450,155451,155454,155456,155459,155462,155464,155466],{"class":86,"line":2823},[84,155452,155453],{"class":928},"    visualmap_opts",[84,155455,867],{"class":129},[84,155457,155458],{"class":154},"opts.VisualMapOpts(",[84,155460,155461],{"class":928},"max_",[84,155463,867],{"class":129},[84,155465,2903],{"class":94},[84,155467,39199],{"class":154},[84,155469,155470],{"class":86,"line":2828},[84,155471,162],{"class":154},[84,155473,155474,155477,155480],{"class":86,"line":2834},[84,155475,155476],{"class":154},"map_chart.render(",[84,155478,155479],{"class":158},"\"map_sales.html\"",[84,155481,162],{"class":154},[19,155483,155484],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155486,155488],{"id":155487},"_129-项目拆分建议","12.9 项目拆分建议",[19,155490,155491],{},"当代码超过一个文件时，可以这样组织：",[60,155493,155496],{"className":155494,"code":155495,"language":65,"meta":66},[63],"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",[39,155497,155495],{"__ignoreMap":66},[19,155499,155500],{},"职责：",[26,155502,155503,155509,155515,155521],{},[29,155504,155505,155508],{},[39,155506,155507],{},"main.py","：程序入口。",[29,155510,155511,155514],{},[39,155512,155513],{},"file_utils.py","：读写 JSON。",[29,155516,155517,155520],{},[39,155518,155519],{},"sales_service.py","：统计销售数据。",[29,155522,155523,155526],{},[39,155524,155525],{},"chart_builder.py","：生成图表。",[14,155528,155530],{"id":155529},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155532,155533],{},"语法基础：",[26,155535,155536,155539,155542,155545],{},[29,155537,155538],{},"会写变量、注释、输入输出。",[29,155540,155541],{},"会使用 int、float、str、bool。",[29,155543,155544],{},"会做类型转换。",[29,155546,155547],{},"会使用 f-string 格式化输出。",[19,155549,155550],{},"流程控制：",[26,155552,155553,155559,155565,155573],{},[29,155554,155555,155556,55],{},"会写 ",[39,155557,155558],{},"if elif else",[29,155560,155555,155561,102156,155563,55],{},[39,155562,109797],{},[39,155564,4203],{},[29,155566,155567,155568,102156,155570,55],{},"理解 ",[39,155569,3231],{},[39,155571,155572],{},"continue",[29,155574,155575],{},"能写嵌套循环。",[19,155577,155578],{},"函数：",[26,155580,155581,155584,155587,155590],{},[29,155582,155583],{},"会定义和调用函数。",[29,155585,155586],{},"理解参数和返回值。",[29,155588,155589],{},"知道局部变量和全局变量。",[29,155591,155592],{},"会使用默认参数、关键字参数、不定长参数。",[19,155594,155595],{},"容器：",[26,155597,155598,155601,155604,155607,155610],{},[29,155599,155600],{},"会使用列表增删改查。",[29,155602,155603],{},"会遍历列表、字典。",[29,155605,155606],{},"会使用切片。",[29,155608,155609],{},"会用集合去重。",[29,155611,155612],{},"会处理列表嵌套字典。",[19,155614,155615],{},"文件和模块：",[26,155617,155618,155621,155624,155627,155630],{},[29,155619,155620],{},"会读写文本文件。",[29,155622,155623],{},"会读写 JSON。",[29,155625,155626],{},"会捕获常见异常。",[29,155628,155629],{},"会导入模块和第三方包。",[29,155631,155632],{},"会创建简单包结构。",[19,155634,155635],{},"项目能力：",[26,155637,155638,155641,155644,155647,155650],{},[29,155639,155640],{},"能把代码拆成函数。",[29,155642,155643],{},"能把数据保存到文件。",[29,155645,155646],{},"能处理用户输入错误。",[29,155648,155649],{},"能写一个完整菜单程序。",[29,155651,155652],{},"能用 pyecharts 生成图表。",[14,155654,155656],{"id":155655},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,155658,155659,155662,155665,155668,155671,155674,155677,155680],{},[29,155660,155661],{},"猜数字游戏。",[29,155663,155664],{},"ATM 菜单程序。",[29,155666,155667],{},"学生成绩统计。",[29,155669,155670],{},"学生管理系统函数版。",[29,155672,155673],{},"学生管理系统文件持久化版。",[29,155675,155676],{},"学生管理系统面向对象版。",[29,155678,155679],{},"销售数据统计。",[29,155681,155682],{},"销售数据可视化。",[14,155684,155686],{"id":155685},"_1212-常见学习误区","12.12 常见学习误区",[26,155688,155689,155692,155695,155698,155701,155704,155707],{},[29,155690,155691],{},"只看视频不敲代码。",[29,155693,155694],{},"一报错就复制错误去搜，不先读报错位置。",[29,155696,155697],{},"变量名随便写，后续自己看不懂。",[29,155699,155700],{},"所有代码都写在一个文件一个函数里。",[29,155702,155703],{},"不保存练习代码，复习时没有材料。",[29,155705,155706],{},"还没掌握列表字典就急着学框架。",[29,155708,155709],{},"不会读官方文档，只依赖教程。",[14,155711,155713],{"id":155712},"_1213-如何读报错","12.13 如何读报错",[19,155715,155716],{},"报错通常从下往上看最后几行。",[19,155718,16305],{},[60,155720,155723],{"className":155721,"code":155722,"language":65,"meta":66},[63],"ValueError: invalid literal for int() with base 10: 'abc'\n",[39,155724,155722],{"__ignoreMap":66},[19,155726,25764],{},[26,155728,155729,155735,155745],{},[29,155730,155731,155732,55],{},"异常类型是 ",[39,155733,155734],{},"ValueError",[29,155736,108480,155737,155740,155741,155744],{},[39,155738,155739],{},"int()"," 无法把 ",[39,155742,155743],{},"'abc'"," 转成整数。",[29,155746,155747],{},"应该检查输入内容或增加异常处理。",[19,155749,155750],{},"再看文件名和行号：",[60,155752,155755],{"className":155753,"code":155754,"language":65,"meta":66},[63],"File \"main.py\", line 10, in \u003Cmodule>\n",[39,155756,155754],{"__ignoreMap":66},[19,155758,155759,155760,155762],{},"表示错误发生在 ",[39,155761,155507],{}," 第 10 行。",[14,155764,155766],{"id":155765},"_1214-后续学习方向","12.14 后续学习方向",[19,155768,155769],{},"Python 基础完成后，可以按兴趣选择方向：",[26,155771,155772,155784,155793,155805,155816,155825,155835],{},[29,155773,155774,155775,42,155778,42,155781,55],{},"自动化办公：",[39,155776,155777],{},"openpyxl",[39,155779,155780],{},"python-docx",[39,155782,155783],{},"pdfplumber",[29,155785,155786,155787,42,155789,42,155791,55],{},"数据分析：",[39,155788,489],{},[39,155790,497],{},[39,155792,505],{},[29,155794,155795,155796,42,155799,42,155802,55],{},"Web 后端：",[39,155797,155798],{},"Flask",[39,155800,155801],{},"FastAPI",[39,155803,155804],{},"Django",[29,155806,155807,155808,42,155810,42,155813,55],{},"爬虫：",[39,155809,481],{},[39,155811,155812],{},"BeautifulSoup",[39,155814,155815],{},"Scrapy",[29,155817,155818,155819,42,155821,155824],{},"测试开发：",[39,155820,529],{},[39,155822,155823],{},"selenium","、接口测试。",[29,155826,155827,155828,42,155830,42,155832,55],{},"人工智能：",[39,155829,489],{},[39,155831,497],{},[39,155833,155834],{},"pytorch",[29,155836,155837,155838,42,155840,42,155843,55],{},"运维脚本：",[39,155839,41],{},[39,155841,155842],{},"subprocess",[39,155844,155845],{},"paramiko",[19,155847,155848],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155850,155852],{"id":155851},"_1215-结课练习","12.15 结课练习",[26,155854,155855,155858,155861,155864,155867,155870,155873,155876],{},[29,155856,155857],{},"完成函数版学生管理系统。",[29,155859,155860],{},"给学生管理系统增加 JSON 持久化。",[29,155862,155863],{},"给学生管理系统增加异常处理。",[29,155865,155866],{},"把学生管理系统改成面向对象版。",[29,155868,155869],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,155871,155872],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,155874,155875],{},"按品类统计销售额并绘制柱状图。",[29,155877,155878],{},"写一份自己的 Python 学习路线图。",[1222,155880,155881],{},"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":66,"searchDepth":98,"depth":98,"links":155883},[155884,155885,155888,155889,155890,155896,155897,155898,155899,155900,155901,155902,155903,155904,155905],{"id":152600,"depth":98,"text":152601},{"id":152650,"depth":98,"text":152651,"children":155886},[155887],{"id":152654,"depth":106,"text":152655},{"id":152693,"depth":98,"text":152694},{"id":154167,"depth":98,"text":154168},{"id":154505,"depth":98,"text":154506,"children":155891},[155892,155893,155894,155895],{"id":154509,"depth":106,"text":154510},{"id":154649,"depth":106,"text":154650},{"id":154739,"depth":106,"text":154740},{"id":154825,"depth":106,"text":154826},{"id":154866,"depth":98,"text":154867},{"id":155059,"depth":98,"text":155060},{"id":155296,"depth":98,"text":155297},{"id":155487,"depth":98,"text":155488},{"id":155529,"depth":98,"text":155530},{"id":155655,"depth":98,"text":155656},{"id":155685,"depth":98,"text":155686},{"id":155712,"depth":98,"text":155713},{"id":155765,"depth":98,"text":155766},{"id":155851,"depth":98,"text":155852},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152592,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155912,"title":155913,"body":155914,"description":1249,"extension":1250,"meta":158383,"navigation":1252,"path":158384,"seo":158385,"stem":158386,"__hash__":158387},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155915,"toc":158358},[155916,155919,155923,155926,155929,155949,155952,155975,155978,155981,156003,156006,156028,156032,156035,156075,156078,156199,156203,156206,156246,156249,156273,156276,156280,156283,156297,156330,156333,156368,156371,156394,156397,156430,156433,156435,156441,156516,156519,156525,156542,156582,156586,156589,156635,156637,156675,156678,156713,156716,156751,156754,156786,156789,156808,156812,156816,156929,156931,157006,157010,157056,157059,157085,157094,157098,157101,157164,157172,157200,157204,157244,157309,157313,157316,157355,157358,157403,157406,157467,157471,157498,157501,157529,157532,157536,157540,157605,157608,157646,157649,157681,157685,157784,157788,157791,157864,157867,157915,157919,157925,157965,157968,158015,158018,158067,158071,158073,158087,158089,158270,158274,158301,158321,158328,158332,158349,158355],[10,155917,155913],{"id":155918},"_2-基础语法变量与字符串",[14,155920,155922],{"id":155921},"_21-注释","2.1 注释",[19,155924,155925],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155927,155928],{},"单行注释：",[60,155930,155932],{"className":121,"code":155931,"language":91,"meta":66,"style":66},"# 这是单行注释\nprint(\"hello\")\n",[39,155933,155934,155939],{"__ignoreMap":66},[84,155935,155936],{"class":86,"line":87},[84,155937,155938],{"class":1378},"# 这是单行注释\n",[84,155940,155941,155943,155945,155947],{"class":86,"line":98},[84,155942,730],{"class":94},[84,155944,155],{"class":154},[84,155946,810],{"class":158},[84,155948,162],{"class":154},[19,155950,155951],{},"多行说明常用三引号：",[60,155953,155955],{"className":121,"code":155954,"language":91,"meta":66,"style":66},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[39,155956,155957,155961,155966,155971],{"__ignoreMap":66},[84,155958,155959],{"class":86,"line":87},[84,155960,96844],{"class":158},[84,155962,155963],{"class":86,"line":98},[84,155964,155965],{"class":158},"这是多行说明。\n",[84,155967,155968],{"class":86,"line":106},[84,155969,155970],{"class":158},"常用于文件顶部说明、函数说明等。\n",[84,155972,155973],{"class":86,"line":112},[84,155974,96844],{"class":158},[19,155976,155977],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155979,155980],{},"不好：",[60,155982,155984],{"className":121,"code":155983,"language":91,"meta":66,"style":66},"# age 加 1\nage = age + 1\n",[39,155985,155986,155991],{"__ignoreMap":66},[84,155987,155988],{"class":86,"line":87},[84,155989,155990],{"class":1378},"# age 加 1\n",[84,155992,155993,155995,155997,155999,156001],{"class":86,"line":98},[84,155994,875],{"class":154},[84,155996,867],{"class":129},[84,155998,16877],{"class":154},[84,156000,1790],{"class":129},[84,156002,56846],{"class":94},[19,156004,156005],{},"较好：",[60,156007,156009],{"className":121,"code":156008,"language":91,"meta":66,"style":66},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[39,156010,156011,156016],{"__ignoreMap":66},[84,156012,156013],{"class":86,"line":87},[84,156014,156015],{"class":1378},"# 用户过完生日后，年龄增加一岁\n",[84,156017,156018,156020,156022,156024,156026],{"class":86,"line":98},[84,156019,875],{"class":154},[84,156021,867],{"class":129},[84,156023,16877],{"class":154},[84,156025,1790],{"class":129},[84,156027,56846],{"class":94},[14,156029,156031],{"id":156030},"_22-字面量","2.2 字面量",[19,156033,156034],{},"字面量就是代码中直接写出来的数据。",[60,156036,156038],{"className":121,"code":156037,"language":91,"meta":66,"style":66},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[39,156039,156040,156047,156054,156061,156068],{"__ignoreMap":66},[84,156041,156042,156044],{"class":86,"line":87},[84,156043,821],{"class":94},[84,156045,156046],{"class":1378},"          # 整数\n",[84,156048,156049,156051],{"class":86,"line":98},[84,156050,832],{"class":94},[84,156052,156053],{"class":1378},"         # 小数\n",[84,156055,156056,156058],{"class":86,"line":106},[84,156057,810],{"class":158},[84,156059,156060],{"class":1378},"      # 字符串\n",[84,156062,156063,156065],{"class":86,"line":112},[84,156064,32629],{"class":94},[84,156066,156067],{"class":1378},"         # 布尔值\n",[84,156069,156070,156072],{"class":86,"line":425},[84,156071,96832],{"class":94},[84,156073,156074],{"class":1378},"         # 空值\n",[19,156076,156077],{},"常见字面量类型：",[458,156079,156080,156090],{},[461,156081,156082],{},[464,156083,156084,156086,156088],{},[467,156085,24907],{},[467,156087,28650],{},[467,156089,27032],{},[474,156091,156092,156103,156114,156125,156137,156149,156161,156174,156186],{},[464,156093,156094,156096,156100],{},[479,156095,1327],{},[479,156097,156098],{},[39,156099,821],{},[479,156101,156102],{},"整数",[464,156104,156105,156107,156111],{},[479,156106,1362],{},[479,156108,156109],{},[39,156110,832],{},[479,156112,156113],{},"浮点数",[464,156115,156116,156118,156122],{},[479,156117,2480],{},[479,156119,156120],{},[39,156121,810],{},[479,156123,156124],{},"字符串",[464,156126,156127,156129,156135],{},[479,156128,2535],{},[479,156130,156131,42,156133],{},[39,156132,32629],{},[39,156134,35139],{},[479,156136,67161],{},[464,156138,156139,156142,156146],{},[479,156140,156141],{},"NoneType",[479,156143,156144],{},[39,156145,96832],{},[479,156147,156148],{},"空值",[464,156150,156151,156153,156158],{},[479,156152,154970],{},[479,156154,156155],{},[39,156156,156157],{},"[1, 2, 3]",[479,156159,156160],{},"列表",[464,156162,156163,156166,156171],{},[479,156164,156165],{},"tuple",[479,156167,156168],{},[39,156169,156170],{},"(1, 2, 3)",[479,156172,156173],{},"元组",[464,156175,156176,156178,156183],{},[479,156177,115680],{},[479,156179,156180],{},[39,156181,156182],{},"{\"name\": \"张三\"}",[479,156184,156185],{},"字典",[464,156187,156188,156191,156196],{},[479,156189,156190],{},"set",[479,156192,156193],{},[39,156194,156195],{},"{1, 2, 3}",[479,156197,156198],{},"集合",[14,156200,156202],{"id":156201},"_23-变量","2.3 变量",[19,156204,156205],{},"变量是保存数据的名字。",[60,156207,156209],{"className":121,"code":156208,"language":91,"meta":66,"style":66},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[39,156210,156211,156219,156227,156237],{"__ignoreMap":66},[84,156212,156213,156215,156217],{"class":86,"line":87},[84,156214,864],{"class":154},[84,156216,867],{"class":129},[84,156218,150253],{"class":158},[84,156220,156221,156223,156225],{"class":86,"line":98},[84,156222,875],{"class":154},[84,156224,867],{"class":129},[84,156226,880],{"class":94},[84,156228,156229,156232,156234],{"class":86,"line":106},[84,156230,156231],{"class":154},"height ",[84,156233,867],{"class":129},[84,156235,156236],{"class":94}," 1.75\n",[84,156238,156239,156242,156244],{"class":86,"line":112},[84,156240,156241],{"class":154},"is_student ",[84,156243,867],{"class":129},[84,156245,154499],{"class":94},[19,156247,156248],{},"Python 的变量不需要提前声明类型：",[60,156250,156252],{"className":121,"code":156251,"language":91,"meta":66,"style":66},"score = 100\nscore = \"满分\"\n",[39,156253,156254,156264],{"__ignoreMap":66},[84,156255,156256,156259,156261],{"class":86,"line":87},[84,156257,156258],{"class":154},"score ",[84,156260,867],{"class":129},[84,156262,156263],{"class":94}," 100\n",[84,156265,156266,156268,156270],{"class":86,"line":98},[84,156267,156258],{"class":154},[84,156269,867],{"class":129},[84,156271,156272],{"class":158}," \"满分\"\n",[19,156274,156275],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156277,156279],{"id":156278},"_24-变量命名规则","2.4 变量命名规则",[19,156281,156282],{},"硬性规则：",[26,156284,156285,156288,156291,156294],{},[29,156286,156287],{},"只能由字母、数字、下划线组成。",[29,156289,156290],{},"不能以数字开头。",[29,156292,156293],{},"不能使用 Python 关键字。",[29,156295,156296],{},"区分大小写。",[60,156298,156300],{"className":121,"code":156299,"language":91,"meta":66,"style":66},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[39,156301,156302,156311,156320],{"__ignoreMap":66},[84,156303,156304,156307,156309],{"class":86,"line":87},[84,156305,156306],{"class":154},"user_name ",[84,156308,867],{"class":129},[84,156310,870],{"class":158},[84,156312,156313,156316,156318],{"class":86,"line":98},[84,156314,156315],{"class":154},"age2 ",[84,156317,867],{"class":129},[84,156319,880],{"class":94},[84,156321,156322,156325,156327],{"class":86,"line":106},[84,156323,156324],{"class":154},"_token ",[84,156326,867],{"class":129},[84,156328,156329],{"class":158}," \"abc\"\n",[19,156331,156332],{},"错误写法：",[60,156334,156336],{"className":121,"code":156335,"language":91,"meta":66,"style":66},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[39,156337,156338,156347,156359],{"__ignoreMap":66},[84,156339,156340,156343,156345],{"class":86,"line":87},[84,156341,156342],{"class":78549},"2age",[84,156344,14735],{"class":129},[84,156346,880],{"class":94},[84,156348,156349,156351,156353,156355,156357],{"class":86,"line":98},[84,156350,132707],{"class":154},[84,156352,1841],{"class":129},[84,156354,864],{"class":154},[84,156356,867],{"class":129},[84,156358,870],{"class":158},[84,156360,156361,156363,156365],{"class":86,"line":106},[84,156362,15864],{"class":129},[84,156364,14735],{"class":129},[84,156366,156367],{"class":158}," \"一班\"\n",[19,156369,156370],{},"查看关键字：",[60,156372,156374],{"className":121,"code":156373,"language":91,"meta":66,"style":66},"import keyword\n\nprint(keyword.kwlist)\n",[39,156375,156376,156383,156387],{"__ignoreMap":66},[84,156377,156378,156380],{"class":86,"line":87},[84,156379,31547],{"class":129},[84,156381,156382],{"class":154}," keyword\n",[84,156384,156385],{"class":86,"line":98},[84,156386,3578],{"emptyLinePlaceholder":1252},[84,156388,156389,156391],{"class":86,"line":106},[84,156390,730],{"class":94},[84,156392,156393],{"class":154},"(keyword.kwlist)\n",[19,156395,156396],{},"推荐命名风格：",[60,156398,156400],{"className":121,"code":156399,"language":91,"meta":66,"style":66},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[39,156401,156402,156411,156421],{"__ignoreMap":66},[84,156403,156404,156407,156409],{"class":86,"line":87},[84,156405,156406],{"class":154},"student_name ",[84,156408,867],{"class":129},[84,156410,150253],{"class":158},[84,156412,156413,156416,156418],{"class":86,"line":98},[84,156414,156415],{"class":154},"total_price ",[84,156417,867],{"class":129},[84,156419,156420],{"class":94}," 99.8\n",[84,156422,156423,156426,156428],{"class":86,"line":106},[84,156424,156425],{"class":154},"is_finished ",[84,156427,867],{"class":129},[84,156429,126931],{"class":94},[19,156431,156432],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156434,51881],{"id":51880},[19,156436,1188,156437,156440],{},[39,156438,156439],{},"type()"," 查看数据类型：",[60,156442,156444],{"className":121,"code":156443,"language":91,"meta":66,"style":66},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[39,156445,156446,156460,156474,156488,156502],{"__ignoreMap":66},[84,156447,156448,156450,156452,156454,156456,156458],{"class":86,"line":87},[84,156449,730],{"class":94},[84,156451,155],{"class":154},[84,156453,104244],{"class":94},[84,156455,155],{"class":154},[84,156457,821],{"class":94},[84,156459,31651],{"class":154},[84,156461,156462,156464,156466,156468,156470,156472],{"class":86,"line":98},[84,156463,730],{"class":94},[84,156465,155],{"class":154},[84,156467,104244],{"class":94},[84,156469,155],{"class":154},[84,156471,832],{"class":94},[84,156473,31651],{"class":154},[84,156475,156476,156478,156480,156482,156484,156486],{"class":86,"line":106},[84,156477,730],{"class":94},[84,156479,155],{"class":154},[84,156481,104244],{"class":94},[84,156483,155],{"class":154},[84,156485,810],{"class":158},[84,156487,31651],{"class":154},[84,156489,156490,156492,156494,156496,156498,156500],{"class":86,"line":112},[84,156491,730],{"class":94},[84,156493,155],{"class":154},[84,156495,104244],{"class":94},[84,156497,155],{"class":154},[84,156499,32629],{"class":94},[84,156501,31651],{"class":154},[84,156503,156504,156506,156508,156510,156512,156514],{"class":86,"line":425},[84,156505,730],{"class":94},[84,156507,155],{"class":154},[84,156509,104244],{"class":94},[84,156511,155],{"class":154},[84,156513,96832],{"class":94},[84,156515,31651],{"class":154},[19,156517,156518],{},"输出类似：",[60,156520,156523],{"className":156521,"code":156522,"language":65,"meta":66},[63],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[39,156524,156522],{"__ignoreMap":66},[19,156526,10197,156527,108418,156529,156531,156532,156534,156535,22670,156537,156534,156539,156541],{},[39,156528,2535],{},[39,156530,1327],{}," 的子类，",[39,156533,32629],{}," 可以当作 ",[39,156536,1529],{},[39,156538,35139],{},[39,156540,1504],{},"，但业务代码中不要滥用。",[60,156543,156545],{"className":121,"code":156544,"language":91,"meta":66,"style":66},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[39,156546,156547,156565],{"__ignoreMap":66},[84,156548,156549,156551,156553,156555,156557,156559,156562],{"class":86,"line":87},[84,156550,730],{"class":94},[84,156552,155],{"class":154},[84,156554,32629],{"class":94},[84,156556,136],{"class":129},[84,156558,133],{"class":94},[84,156560,156561],{"class":154},")   ",[84,156563,156564],{"class":1378},"# 2\n",[84,156566,156567,156569,156571,156573,156575,156577,156579],{"class":86,"line":98},[84,156568,730],{"class":94},[84,156570,155],{"class":154},[84,156572,35139],{"class":94},[84,156574,136],{"class":129},[84,156576,133],{"class":94},[84,156578,46958],{"class":154},[84,156580,156581],{"class":1378},"# 1\n",[14,156583,156585],{"id":156584},"_26-类型转换","2.6 类型转换",[19,156587,156588],{},"常用转换函数：",[60,156590,156592],{"className":121,"code":156591,"language":91,"meta":66,"style":66},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[39,156593,156594,156604,156615,156625],{"__ignoreMap":66},[84,156595,156596,156598,156600,156602],{"class":86,"line":87},[84,156597,1327],{"class":94},[84,156599,155],{"class":154},[84,156601,919],{"class":158},[84,156603,162],{"class":154},[84,156605,156606,156608,156610,156613],{"class":86,"line":98},[84,156607,1362],{"class":94},[84,156609,155],{"class":154},[84,156611,156612],{"class":158},"\"3.14\"",[84,156614,162],{"class":154},[84,156616,156617,156619,156621,156623],{"class":86,"line":106},[84,156618,2480],{"class":94},[84,156620,155],{"class":154},[84,156622,821],{"class":94},[84,156624,162],{"class":154},[84,156626,156627,156629,156631,156633],{"class":86,"line":112},[84,156628,2535],{"class":94},[84,156630,155],{"class":154},[84,156632,1529],{"class":94},[84,156634,162],{"class":154},[19,156636,16305],{},[60,156638,156640],{"className":121,"code":156639,"language":91,"meta":66,"style":66},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[39,156641,156642,156651,156662],{"__ignoreMap":66},[84,156643,156644,156646,156648],{"class":86,"line":87},[84,156645,875],{"class":154},[84,156647,867],{"class":129},[84,156649,156650],{"class":158}," \"18\"\n",[84,156652,156653,156655,156657,156659],{"class":86,"line":98},[84,156654,875],{"class":154},[84,156656,867],{"class":129},[84,156658,3560],{"class":94},[84,156660,156661],{"class":154},"(age)\n",[84,156663,156664,156666,156669,156671,156673],{"class":86,"line":106},[84,156665,730],{"class":94},[84,156667,156668],{"class":154},"(age ",[84,156670,1790],{"class":129},[84,156672,133],{"class":94},[84,156674,162],{"class":154},[19,156676,156677],{},"输入得到的内容永远是字符串：",[60,156679,156681],{"className":121,"code":156680,"language":91,"meta":66,"style":66},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[39,156682,156683,156699],{"__ignoreMap":66},[84,156684,156685,156688,156690,156692,156694,156697],{"class":86,"line":87},[84,156686,156687],{"class":154},"num ",[84,156689,867],{"class":129},[84,156691,61751],{"class":94},[84,156693,155],{"class":154},[84,156695,156696],{"class":158},"\"请输入数字:\"",[84,156698,162],{"class":154},[84,156700,156701,156703,156705,156707,156710],{"class":86,"line":98},[84,156702,730],{"class":94},[84,156704,155],{"class":154},[84,156706,104244],{"class":94},[84,156708,156709],{"class":154},"(num))  ",[84,156711,156712],{"class":1378},"# str\n",[19,156714,156715],{},"如果要做数学运算，必须转换：",[60,156717,156719],{"className":121,"code":156718,"language":91,"meta":66,"style":66},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[39,156720,156721,156739],{"__ignoreMap":66},[84,156722,156723,156725,156727,156729,156731,156733,156735,156737],{"class":86,"line":87},[84,156724,156687],{"class":154},[84,156726,867],{"class":129},[84,156728,3560],{"class":94},[84,156730,155],{"class":154},[84,156732,54970],{"class":94},[84,156734,155],{"class":154},[84,156736,156696],{"class":158},[84,156738,31651],{"class":154},[84,156740,156741,156743,156745,156747,156749],{"class":86,"line":98},[84,156742,730],{"class":94},[84,156744,46770],{"class":154},[84,156746,1790],{"class":129},[84,156748,994],{"class":94},[84,156750,162],{"class":154},[19,156752,156753],{},"常见错误：",[60,156755,156757],{"className":121,"code":156756,"language":91,"meta":66,"style":66},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[39,156758,156759,156772],{"__ignoreMap":66},[84,156760,156761,156763,156765,156767,156769],{"class":86,"line":87},[84,156762,1327],{"class":94},[84,156764,155],{"class":154},[84,156766,156612],{"class":158},[84,156768,156561],{"class":154},[84,156770,156771],{"class":1378},"# 错误\n",[84,156773,156774,156776,156778,156781,156784],{"class":86,"line":98},[84,156775,1327],{"class":94},[84,156777,155],{"class":154},[84,156779,156780],{"class":158},"\"abc\"",[84,156782,156783],{"class":154},")    ",[84,156785,156771],{"class":1378},[19,156787,156788],{},"正确写法：",[60,156790,156792],{"className":121,"code":156791,"language":91,"meta":66,"style":66},"num = float(\"3.14\")\n",[39,156793,156794],{"__ignoreMap":66},[84,156795,156796,156798,156800,156802,156804,156806],{"class":86,"line":87},[84,156797,156687],{"class":154},[84,156799,867],{"class":129},[84,156801,110931],{"class":94},[84,156803,155],{"class":154},[84,156805,156612],{"class":158},[84,156807,162],{"class":154},[14,156809,156811],{"id":156810},"_27-运算符","2.7 运算符",[198,156813,156815],{"id":156814},"_271-算术运算符","2.7.1 算术运算符",[458,156817,156818,156829],{},[461,156819,156820],{},[464,156821,156822,156825,156827],{},[467,156823,156824],{},"运算符",[467,156826,27032],{},[467,156828,28650],{},[474,156830,156831,156845,156859,156873,156887,156901,156915],{},[464,156832,156833,156837,156840],{},[479,156834,156835],{},[39,156836,1790],{},[479,156838,156839],{},"加法",[479,156841,156842],{},[39,156843,156844],{},"1 + 2",[464,156846,156847,156851,156854],{},[479,156848,156849],{},[39,156850,1841],{},[479,156852,156853],{},"减法",[479,156855,156856],{},[39,156857,156858],{},"5 - 3",[464,156860,156861,156865,156868],{},[479,156862,156863],{},[39,156864,1043],{},[479,156866,156867],{},"乘法",[479,156869,156870],{},[39,156871,156872],{},"2 * 3",[464,156874,156875,156879,156882],{},[479,156876,156877],{},[39,156878,1893],{},[479,156880,156881],{},"除法，结果是浮点数",[479,156883,156884],{},[39,156885,156886],{},"5 \u002F 2",[464,156888,156889,156893,156896],{},[479,156890,156891],{},[39,156892,34481],{},[479,156894,156895],{},"整除",[479,156897,156898],{},[39,156899,156900],{},"5 \u002F\u002F 2",[464,156902,156903,156907,156910],{},[479,156904,156905],{},[39,156906,1638],{},[479,156908,156909],{},"取余",[479,156911,156912],{},[39,156913,156914],{},"5 % 2",[464,156916,156917,156921,156924],{},[479,156918,156919],{},[39,156920,11833],{},[479,156922,156923],{},"幂运算",[479,156925,156926],{},[39,156927,156928],{},"2 ** 3",[19,156930,16305],{},[60,156932,156934],{"className":121,"code":156933,"language":91,"meta":66,"style":66},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[39,156935,156936,156954,156971,156988],{"__ignoreMap":66},[84,156937,156938,156940,156942,156944,156947,156949,156951],{"class":86,"line":87},[84,156939,730],{"class":94},[84,156941,155],{"class":154},[84,156943,1629],{"class":94},[84,156945,156946],{"class":129}," \u002F",[84,156948,15925],{"class":94},[84,156950,156561],{"class":154},[84,156952,156953],{"class":1378},"# 2.5\n",[84,156955,156956,156958,156960,156962,156965,156967,156969],{"class":86,"line":98},[84,156957,730],{"class":94},[84,156959,155],{"class":154},[84,156961,1629],{"class":94},[84,156963,156964],{"class":129}," \u002F\u002F",[84,156966,15925],{"class":94},[84,156968,46958],{"class":154},[84,156970,156564],{"class":1378},[84,156972,156973,156975,156977,156979,156982,156984,156986],{"class":86,"line":106},[84,156974,730],{"class":94},[84,156976,155],{"class":154},[84,156978,1629],{"class":94},[84,156980,156981],{"class":129}," %",[84,156983,15925],{"class":94},[84,156985,156561],{"class":154},[84,156987,156581],{"class":1378},[84,156989,156990,156992,156994,156996,156999,157001,157003],{"class":86,"line":112},[84,156991,730],{"class":94},[84,156993,155],{"class":154},[84,156995,1397],{"class":94},[84,156997,156998],{"class":129}," **",[84,157000,79216],{"class":94},[84,157002,46958],{"class":154},[84,157004,157005],{"class":1378},"# 8\n",[198,157007,157009],{"id":157008},"_272-赋值运算符","2.7.2 赋值运算符",[60,157011,157013],{"className":121,"code":157012,"language":91,"meta":66,"style":66},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[39,157014,157015,157023,157031,157039,157047],{"__ignoreMap":66},[84,157016,157017,157019,157021],{"class":86,"line":87},[84,157018,156687],{"class":154},[84,157020,867],{"class":129},[84,157022,59574],{"class":94},[84,157024,157025,157027,157029],{"class":86,"line":98},[84,157026,156687],{"class":154},[84,157028,10649],{"class":129},[84,157030,1033],{"class":94},[84,157032,157033,157035,157037],{"class":86,"line":106},[84,157034,156687],{"class":154},[84,157036,151152],{"class":129},[84,157038,139],{"class":94},[84,157040,157041,157043,157045],{"class":86,"line":112},[84,157042,156687],{"class":154},[84,157044,138271],{"class":129},[84,157046,1000],{"class":94},[84,157048,157049,157051,157054],{"class":86,"line":425},[84,157050,156687],{"class":154},[84,157052,157053],{"class":129},"\u002F=",[84,157055,139],{"class":94},[19,157057,157058],{},"等价关系：",[60,157060,157062],{"className":121,"code":157061,"language":91,"meta":66,"style":66},"num += 1\nnum = num + 1\n",[39,157063,157064,157072],{"__ignoreMap":66},[84,157065,157066,157068,157070],{"class":86,"line":87},[84,157067,156687],{"class":154},[84,157069,10649],{"class":129},[84,157071,56846],{"class":94},[84,157073,157074,157076,157078,157081,157083],{"class":86,"line":98},[84,157075,156687],{"class":154},[84,157077,867],{"class":129},[84,157079,157080],{"class":154}," num ",[84,157082,1790],{"class":129},[84,157084,56846],{"class":94},[19,157086,157087,157088,102156,157091,55],{},"Python 没有 ",[39,157089,157090],{},"num++",[39,157092,157093],{},"num--",[198,157095,157097],{"id":157096},"_273-比较运算符","2.7.3 比较运算符",[19,157099,157100],{},"比较运算结果是布尔值。",[60,157102,157104],{"className":121,"code":157103,"language":91,"meta":66,"style":66},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[39,157105,157106,157120,157135,157149],{"__ignoreMap":66},[84,157107,157108,157110,157112,157114,157116,157118],{"class":86,"line":87},[84,157109,730],{"class":94},[84,157111,155],{"class":154},[84,157113,1756],{"class":94},[84,157115,622],{"class":129},[84,157117,3326],{"class":94},[84,157119,162],{"class":154},[84,157121,157122,157124,157126,157128,157131,157133],{"class":86,"line":98},[84,157123,730],{"class":94},[84,157125,155],{"class":154},[84,157127,1756],{"class":94},[84,157129,157130],{"class":129}," >=",[84,157132,994],{"class":94},[84,157134,162],{"class":154},[84,157136,157137,157139,157141,157143,157145,157147],{"class":86,"line":106},[84,157138,730],{"class":94},[84,157140,155],{"class":154},[84,157142,1756],{"class":94},[84,157144,102697],{"class":129},[84,157146,3261],{"class":94},[84,157148,162],{"class":154},[84,157150,157151,157153,157155,157157,157160,157162],{"class":86,"line":112},[84,157152,730],{"class":94},[84,157154,155],{"class":154},[84,157156,1756],{"class":94},[84,157158,157159],{"class":129}," !=",[84,157161,3261],{"class":94},[84,157163,162],{"class":154},[19,157165,157166,157167,157169,157170,55],{},"注意：判断相等用 ",[39,157168,4127],{},"，赋值用 ",[39,157171,867],{},[60,157173,157175],{"className":121,"code":157174,"language":91,"meta":66,"style":66},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[39,157176,157177,157189],{"__ignoreMap":66},[84,157178,157179,157181,157183,157186],{"class":86,"line":87},[84,157180,875],{"class":154},[84,157182,867],{"class":129},[84,157184,157185],{"class":94}," 18",[84,157187,157188],{"class":1378},"       # 赋值\n",[84,157190,157191,157193,157195,157197],{"class":86,"line":98},[84,157192,875],{"class":154},[84,157194,4127],{"class":129},[84,157196,157185],{"class":94},[84,157198,157199],{"class":1378},"      # 判断是否相等\n",[198,157201,157203],{"id":157202},"_274-逻辑运算符","2.7.4 逻辑运算符",[458,157205,157206,157214],{},[461,157207,157208],{},[464,157209,157210,157212],{},[467,157211,156824],{},[467,157213,27032],{},[474,157215,157216,157225,157234],{},[464,157217,157218,157222],{},[479,157219,157220],{},[39,157221,31616],{},[479,157223,157224],{},"并且",[464,157226,157227,157231],{},[479,157228,157229],{},[39,157230,116224],{},[479,157232,157233],{},"或者",[464,157235,157236,157241],{},[479,157237,157238],{},[39,157239,157240],{},"not",[479,157242,157243],{},"取反",[60,157245,157247],{"className":121,"code":157246,"language":91,"meta":66,"style":66},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[39,157248,157249,157257,157266,157270,157285,157299],{"__ignoreMap":66},[84,157250,157251,157253,157255],{"class":86,"line":87},[84,157252,875],{"class":154},[84,157254,867],{"class":129},[84,157256,89211],{"class":94},[84,157258,157259,157262,157264],{"class":86,"line":98},[84,157260,157261],{"class":154},"has_ticket ",[84,157263,867],{"class":129},[84,157265,154499],{"class":94},[84,157267,157268],{"class":86,"line":106},[84,157269,3578],{"emptyLinePlaceholder":1252},[84,157271,157272,157274,157276,157278,157280,157282],{"class":86,"line":112},[84,157273,730],{"class":94},[84,157275,156668],{"class":154},[84,157277,2891],{"class":129},[84,157279,157185],{"class":94},[84,157281,121555],{"class":129},[84,157283,157284],{"class":154}," has_ticket)\n",[84,157286,157287,157289,157291,157293,157295,157297],{"class":86,"line":425},[84,157288,730],{"class":94},[84,157290,156668],{"class":154},[84,157292,2218],{"class":129},[84,157294,157185],{"class":94},[84,157296,115335],{"class":129},[84,157298,157284],{"class":154},[84,157300,157301,157303,157305,157307],{"class":86,"line":2395},[84,157302,730],{"class":94},[84,157304,155],{"class":154},[84,157306,157240],{"class":129},[84,157308,157284],{"class":154},[14,157310,157312],{"id":157311},"_28-字符串定义","2.8 字符串定义",[19,157314,157315],{},"三种常见写法：",[60,157317,157319],{"className":121,"code":157318,"language":91,"meta":66,"style":66},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[39,157320,157321,157331,157340,157350],{"__ignoreMap":66},[84,157322,157323,157326,157328],{"class":86,"line":87},[84,157324,157325],{"class":154},"name1 ",[84,157327,867],{"class":129},[84,157329,157330],{"class":158}," '小明'\n",[84,157332,157333,157336,157338],{"class":86,"line":98},[84,157334,157335],{"class":154},"name2 ",[84,157337,867],{"class":129},[84,157339,150253],{"class":158},[84,157341,157342,157345,157347],{"class":86,"line":106},[84,157343,157344],{"class":154},"text ",[84,157346,867],{"class":129},[84,157348,157349],{"class":158}," \"\"\"这是多行字符串\n",[84,157351,157352],{"class":86,"line":112},[84,157353,157354],{"class":158},"可以换行\"\"\"\n",[19,157356,157357],{},"字符串中包含引号：",[60,157359,157361],{"className":121,"code":157360,"language":91,"meta":66,"style":66},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[39,157362,157363,157373,157383],{"__ignoreMap":66},[84,157364,157365,157368,157370],{"class":86,"line":87},[84,157366,157367],{"class":154},"msg ",[84,157369,867],{"class":129},[84,157371,157372],{"class":158}," \"他说:'你好'\"\n",[84,157374,157375,157378,157380],{"class":86,"line":98},[84,157376,157377],{"class":154},"msg2 ",[84,157379,867],{"class":129},[84,157381,157382],{"class":158}," '他说:\"你好\"'\n",[84,157384,157385,157388,157390,157393,157396,157399,157401],{"class":86,"line":106},[84,157386,157387],{"class":154},"msg3 ",[84,157389,867],{"class":129},[84,157391,157392],{"class":158}," \"他说:",[84,157394,157395],{"class":94},"\\\"",[84,157397,157398],{"class":158},"你好",[84,157400,157395],{"class":94},[84,157402,26296],{"class":158},[19,157404,157405],{},"常见转义字符：",[458,157407,157408,157417],{},[461,157409,157410],{},[464,157411,157412,157415],{},[467,157413,157414],{},"写法",[467,157416,101845],{},[474,157418,157419,157429,157438,157448,157457],{},[464,157420,157421,157426],{},[479,157422,157423],{},[39,157424,157425],{},"\\n",[479,157427,157428],{},"换行",[464,157430,157431,157435],{},[479,157432,157433],{},[39,157434,2411],{},[479,157436,157437],{},"制表符",[464,157439,157440,157445],{},[479,157441,157442],{},[39,157443,157444],{},"\\\\",[479,157446,157447],{},"反斜杠",[464,157449,157450,157454],{},[479,157451,157452],{},[39,157453,157395],{},[479,157455,157456],{},"双引号",[464,157458,157459,157464],{},[479,157460,157461],{},[39,157462,157463],{},"\\'",[479,157465,157466],{},"单引号",[14,157468,157470],{"id":157469},"_29-字符串拼接","2.9 字符串拼接",[60,157472,157474],{"className":121,"code":157473,"language":91,"meta":66,"style":66},"name = \"小明\"\nprint(\"你好，\" + name)\n",[39,157475,157476,157484],{"__ignoreMap":66},[84,157477,157478,157480,157482],{"class":86,"line":87},[84,157479,864],{"class":154},[84,157481,867],{"class":129},[84,157483,150253],{"class":158},[84,157485,157486,157488,157490,157493,157495],{"class":86,"line":98},[84,157487,730],{"class":94},[84,157489,155],{"class":154},[84,157491,157492],{"class":158},"\"你好，\"",[84,157494,136],{"class":129},[84,157496,157497],{"class":154}," name)\n",[19,157499,157500],{},"字符串只能和字符串拼接：",[60,157502,157504],{"className":121,"code":157503,"language":91,"meta":66,"style":66},"age = 18\nprint(\"年龄:\" + str(age))\n",[39,157505,157506,157514],{"__ignoreMap":66},[84,157507,157508,157510,157512],{"class":86,"line":87},[84,157509,875],{"class":154},[84,157511,867],{"class":129},[84,157513,880],{"class":94},[84,157515,157516,157518,157520,157522,157524,157526],{"class":86,"line":98},[84,157517,730],{"class":94},[84,157519,155],{"class":154},[84,157521,843],{"class":158},[84,157523,136],{"class":129},[84,157525,75065],{"class":94},[84,157527,157528],{"class":154},"(age))\n",[19,157530,157531],{},"更推荐使用格式化字符串。",[14,157533,157535],{"id":157534},"_210-字符串格式化","2.10 字符串格式化",[198,157537,157539],{"id":157538},"_2101-百分号格式化","2.10.1 百分号格式化",[60,157541,157543],{"className":121,"code":157542,"language":91,"meta":66,"style":66},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[39,157544,157545,157553,157561,157570,157574],{"__ignoreMap":66},[84,157546,157547,157549,157551],{"class":86,"line":87},[84,157548,864],{"class":154},[84,157550,867],{"class":129},[84,157552,150253],{"class":158},[84,157554,157555,157557,157559],{"class":86,"line":98},[84,157556,875],{"class":154},[84,157558,867],{"class":129},[84,157560,880],{"class":94},[84,157562,157563,157565,157567],{"class":86,"line":106},[84,157564,156258],{"class":154},[84,157566,867],{"class":129},[84,157568,157569],{"class":94}," 95.5\n",[84,157571,157572],{"class":86,"line":112},[84,157573,3578],{"emptyLinePlaceholder":1252},[84,157575,157576,157578,157580,157583,157586,157589,157592,157595,157598,157600,157602],{"class":86,"line":425},[84,157577,730],{"class":94},[84,157579,155],{"class":154},[84,157581,157582],{"class":158},"\"姓名:",[84,157584,157585],{"class":94},"%s",[84,157587,157588],{"class":158}," 年龄:",[84,157590,157591],{"class":94},"%d",[84,157593,157594],{"class":158}," 分数:",[84,157596,157597],{"class":94},"%.1f",[84,157599,1562],{"class":158},[84,157601,156981],{"class":129},[84,157603,157604],{"class":154}," (name, age, score))\n",[19,157606,157607],{},"常用占位符：",[458,157609,157610,157619],{},[461,157611,157612],{},[464,157613,157614,157617],{},[467,157615,157616],{},"占位符",[467,157618,27032],{},[474,157620,157621,157629,157637],{},[464,157622,157623,157627],{},[479,157624,157625],{},[39,157626,157585],{},[479,157628,156124],{},[464,157630,157631,157635],{},[479,157632,157633],{},[39,157634,157591],{},[479,157636,156102],{},[464,157638,157639,157644],{},[479,157640,157641],{},[39,157642,157643],{},"%f",[479,157645,156113],{},[19,157647,157648],{},"精度控制：",[60,157650,157652],{"className":121,"code":157651,"language":91,"meta":66,"style":66},"price = 12.3456\nprint(\"%.2f\" % price)\n",[39,157653,157654,157663],{"__ignoreMap":66},[84,157655,157656,157658,157660],{"class":86,"line":87},[84,157657,1018],{"class":154},[84,157659,867],{"class":129},[84,157661,157662],{"class":94}," 12.3456\n",[84,157664,157665,157667,157669,157671,157674,157676,157678],{"class":86,"line":98},[84,157666,730],{"class":94},[84,157668,155],{"class":154},[84,157670,1562],{"class":158},[84,157672,157673],{"class":94},"%.2f",[84,157675,1562],{"class":158},[84,157677,156981],{"class":129},[84,157679,157680],{"class":154}," price)\n",[198,157682,157684],{"id":157683},"_2102-format方法","2.10.2 format方法",[60,157686,157688],{"className":121,"code":157687,"language":91,"meta":66,"style":66},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[39,157689,157690,157698,157706,157710,157729,157749],{"__ignoreMap":66},[84,157691,157692,157694,157696],{"class":86,"line":87},[84,157693,864],{"class":154},[84,157695,867],{"class":129},[84,157697,150253],{"class":158},[84,157699,157700,157702,157704],{"class":86,"line":98},[84,157701,875],{"class":154},[84,157703,867],{"class":129},[84,157705,880],{"class":94},[84,157707,157708],{"class":86,"line":106},[84,157709,3578],{"emptyLinePlaceholder":1252},[84,157711,157712,157714,157716,157718,157720,157722,157724,157726],{"class":86,"line":112},[84,157713,730],{"class":94},[84,157715,155],{"class":154},[84,157717,157582],{"class":158},[84,157719,33612],{"class":94},[84,157721,157588],{"class":158},[84,157723,33612],{"class":94},[84,157725,1562],{"class":158},[84,157727,157728],{"class":154},".format(name, age))\n",[84,157730,157731,157733,157735,157737,157740,157742,157745,157747],{"class":86,"line":425},[84,157732,730],{"class":94},[84,157734,155],{"class":154},[84,157736,157582],{"class":158},[84,157738,157739],{"class":94},"{0}",[84,157741,157588],{"class":158},[84,157743,157744],{"class":94},"{1}",[84,157746,1562],{"class":158},[84,157748,157728],{"class":154},[84,157750,157751,157753,157755,157757,157760,157762,157765,157767,157770,157772,157774,157777,157779,157781],{"class":86,"line":2395},[84,157752,730],{"class":94},[84,157754,155],{"class":154},[84,157756,157582],{"class":158},[84,157758,157759],{"class":94},"{name}",[84,157761,157588],{"class":158},[84,157763,157764],{"class":94},"{age}",[84,157766,1562],{"class":158},[84,157768,157769],{"class":154},".format(",[84,157771,80956],{"class":928},[84,157773,867],{"class":129},[84,157775,157776],{"class":154},"name, ",[84,157778,71367],{"class":928},[84,157780,867],{"class":129},[84,157782,157783],{"class":154},"age))\n",[198,157785,157787],{"id":157786},"_2103-f-string","2.10.3 f-string",[19,157789,157790],{},"推荐写法：",[60,157792,157794],{"className":121,"code":157793,"language":91,"meta":66,"style":66},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[39,157795,157796,157804,157812,157820,157824],{"__ignoreMap":66},[84,157797,157798,157800,157802],{"class":86,"line":87},[84,157799,864],{"class":154},[84,157801,867],{"class":129},[84,157803,150253],{"class":158},[84,157805,157806,157808,157810],{"class":86,"line":98},[84,157807,875],{"class":154},[84,157809,867],{"class":129},[84,157811,880],{"class":94},[84,157813,157814,157816,157818],{"class":86,"line":106},[84,157815,156258],{"class":154},[84,157817,867],{"class":129},[84,157819,157569],{"class":94},[84,157821,157822],{"class":86,"line":112},[84,157823,3578],{"emptyLinePlaceholder":1252},[84,157825,157826,157828,157830,157832,157834,157836,157838,157840,157842,157844,157846,157848,157850,157852,157855,157858,157860,157862],{"class":86,"line":425},[84,157827,730],{"class":94},[84,157829,155],{"class":154},[84,157831,1372],{"class":129},[84,157833,157582],{"class":158},[84,157835,2204],{"class":94},[84,157837,80956],{"class":154},[84,157839,2254],{"class":94},[84,157841,157588],{"class":158},[84,157843,2204],{"class":94},[84,157845,71367],{"class":154},[84,157847,2254],{"class":94},[84,157849,157594],{"class":158},[84,157851,2204],{"class":94},[84,157853,157854],{"class":154},"score",[84,157856,157857],{"class":129},":.1f",[84,157859,2254],{"class":94},[84,157861,1562],{"class":158},[84,157863,162],{"class":154},[19,157865,157866],{},"表达式也可以放进去：",[60,157868,157870],{"className":121,"code":157869,"language":91,"meta":66,"style":66},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[39,157871,157872,157880,157888],{"__ignoreMap":66},[84,157873,157874,157876,157878],{"class":86,"line":87},[84,157875,1018],{"class":154},[84,157877,867],{"class":129},[84,157879,1023],{"class":94},[84,157881,157882,157884,157886],{"class":86,"line":98},[84,157883,1028],{"class":154},[84,157885,867],{"class":129},[84,157887,1033],{"class":94},[84,157889,157890,157892,157894,157896,157899,157901,157903,157905,157908,157910,157913],{"class":86,"line":106},[84,157891,730],{"class":94},[84,157893,155],{"class":154},[84,157895,1372],{"class":129},[84,157897,157898],{"class":158},"\"总价:",[84,157900,2204],{"class":94},[84,157902,1018],{"class":154},[84,157904,1043],{"class":129},[84,157906,157907],{"class":154}," count",[84,157909,2254],{"class":94},[84,157911,157912],{"class":158},"元\"",[84,157914,162],{"class":154},[14,157916,157918],{"id":157917},"_211-input输入","2.11 input输入",[19,157920,157921,157924],{},[39,157922,157923],{},"input()"," 会暂停程序，等待用户输入。",[60,157926,157928],{"className":121,"code":157927,"language":91,"meta":66,"style":66},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[39,157929,157930,157944],{"__ignoreMap":66},[84,157931,157932,157934,157936,157938,157940,157942],{"class":86,"line":87},[84,157933,864],{"class":154},[84,157935,867],{"class":129},[84,157937,61751],{"class":94},[84,157939,155],{"class":154},[84,157941,153279],{"class":158},[84,157943,162],{"class":154},[84,157945,157946,157948,157950,157952,157955,157957,157959,157961,157963],{"class":86,"line":98},[84,157947,730],{"class":94},[84,157949,155],{"class":154},[84,157951,1372],{"class":129},[84,157953,157954],{"class":158},"\"你好，",[84,157956,2204],{"class":94},[84,157958,80956],{"class":154},[84,157960,2254],{"class":94},[84,157962,1562],{"class":158},[84,157964,162],{"class":154},[19,157966,157967],{},"输入整数：",[60,157969,157971],{"className":121,"code":157970,"language":91,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[39,157972,157973,157991],{"__ignoreMap":66},[84,157974,157975,157977,157979,157981,157983,157985,157987,157989],{"class":86,"line":87},[84,157976,875],{"class":154},[84,157978,867],{"class":129},[84,157980,3560],{"class":94},[84,157982,155],{"class":154},[84,157984,54970],{"class":94},[84,157986,155],{"class":154},[84,157988,153294],{"class":158},[84,157990,31651],{"class":154},[84,157992,157993,157995,157997,157999,158002,158004,158006,158008,158011,158013],{"class":86,"line":98},[84,157994,730],{"class":94},[84,157996,155],{"class":154},[84,157998,1372],{"class":129},[84,158000,158001],{"class":158},"\"明年你",[84,158003,2204],{"class":94},[84,158005,875],{"class":154},[84,158007,1790],{"class":129},[84,158009,158010],{"class":94}," 1}",[84,158012,150304],{"class":158},[84,158014,162],{"class":154},[19,158016,158017],{},"输入小数：",[60,158019,158021],{"className":121,"code":158020,"language":91,"meta":66,"style":66},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[39,158022,158023,158042],{"__ignoreMap":66},[84,158024,158025,158027,158029,158031,158033,158035,158037,158040],{"class":86,"line":87},[84,158026,156231],{"class":154},[84,158028,867],{"class":129},[84,158030,110931],{"class":94},[84,158032,155],{"class":154},[84,158034,54970],{"class":94},[84,158036,155],{"class":154},[84,158038,158039],{"class":158},"\"请输入身高:\"",[84,158041,31651],{"class":154},[84,158043,158044,158046,158048,158050,158053,158055,158057,158060,158062,158065],{"class":86,"line":98},[84,158045,730],{"class":94},[84,158047,155],{"class":154},[84,158049,1372],{"class":129},[84,158051,158052],{"class":158},"\"身高:",[84,158054,2204],{"class":94},[84,158056,26145],{"class":154},[84,158058,158059],{"class":129},":.2f",[84,158061,2254],{"class":94},[84,158063,158064],{"class":158},"米\"",[84,158066,162],{"class":154},[14,158068,158070],{"id":158069},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158072,124417],{},[26,158074,158075,158078,158081,158084],{},[29,158076,158077],{},"输入商品单价。",[29,158079,158080],{},"输入购买数量。",[29,158082,158083],{},"输入折扣，例如 0.8 表示八折。",[29,158085,158086],{},"输出最终金额，保留两位小数。",[19,158088,11207],{},[60,158090,158092],{"className":121,"code":158091,"language":91,"meta":66,"style":66},"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",[39,158093,158094,158113,158132,158152,158156,158176,158180,158203,158224,158246],{"__ignoreMap":66},[84,158095,158096,158098,158100,158102,158104,158106,158108,158111],{"class":86,"line":87},[84,158097,1018],{"class":154},[84,158099,867],{"class":129},[84,158101,110931],{"class":94},[84,158103,155],{"class":154},[84,158105,54970],{"class":94},[84,158107,155],{"class":154},[84,158109,158110],{"class":158},"\"请输入商品单价:\"",[84,158112,31651],{"class":154},[84,158114,158115,158117,158119,158121,158123,158125,158127,158130],{"class":86,"line":98},[84,158116,1028],{"class":154},[84,158118,867],{"class":129},[84,158120,3560],{"class":94},[84,158122,155],{"class":154},[84,158124,54970],{"class":94},[84,158126,155],{"class":154},[84,158128,158129],{"class":158},"\"请输入购买数量:\"",[84,158131,31651],{"class":154},[84,158133,158134,158137,158139,158141,158143,158145,158147,158150],{"class":86,"line":106},[84,158135,158136],{"class":154},"discount ",[84,158138,867],{"class":129},[84,158140,110931],{"class":94},[84,158142,155],{"class":154},[84,158144,54970],{"class":94},[84,158146,155],{"class":154},[84,158148,158149],{"class":158},"\"请输入折扣:\"",[84,158151,31651],{"class":154},[84,158153,158154],{"class":86,"line":112},[84,158155,3578],{"emptyLinePlaceholder":1252},[84,158157,158158,158161,158163,158166,158168,158171,158173],{"class":86,"line":425},[84,158159,158160],{"class":154},"total ",[84,158162,867],{"class":129},[84,158164,158165],{"class":154}," price ",[84,158167,1043],{"class":129},[84,158169,158170],{"class":154}," count ",[84,158172,1043],{"class":129},[84,158174,158175],{"class":154}," discount\n",[84,158177,158178],{"class":86,"line":2395},[84,158179,3578],{"emptyLinePlaceholder":1252},[84,158181,158182,158184,158186,158188,158191,158193,158195,158197,158199,158201],{"class":86,"line":2401},[84,158183,730],{"class":94},[84,158185,155],{"class":154},[84,158187,1372],{"class":129},[84,158189,158190],{"class":158},"\"商品单价:",[84,158192,2204],{"class":94},[84,158194,80961],{"class":154},[84,158196,158059],{"class":129},[84,158198,2254],{"class":94},[84,158200,1562],{"class":158},[84,158202,162],{"class":154},[84,158204,158205,158207,158209,158211,158214,158216,158218,158220,158222],{"class":86,"line":2492},[84,158206,730],{"class":94},[84,158208,155],{"class":154},[84,158210,1372],{"class":129},[84,158212,158213],{"class":158},"\"购买数量:",[84,158215,2204],{"class":94},[84,158217,85580],{"class":154},[84,158219,2254],{"class":94},[84,158221,1562],{"class":158},[84,158223,162],{"class":154},[84,158225,158226,158228,158230,158232,158235,158237,158240,158242,158244],{"class":86,"line":2498},[84,158227,730],{"class":94},[84,158229,155],{"class":154},[84,158231,1372],{"class":129},[84,158233,158234],{"class":158},"\"折扣:",[84,158236,2204],{"class":94},[84,158238,158239],{"class":154},"discount",[84,158241,2254],{"class":94},[84,158243,1562],{"class":158},[84,158245,162],{"class":154},[84,158247,158248,158250,158252,158254,158257,158259,158262,158264,158266,158268],{"class":86,"line":2510},[84,158249,730],{"class":94},[84,158251,155],{"class":154},[84,158253,1372],{"class":129},[84,158255,158256],{"class":158},"\"应付金额:",[84,158258,2204],{"class":94},[84,158260,158261],{"class":154},"total",[84,158263,158059],{"class":129},[84,158265,2254],{"class":94},[84,158267,157912],{"class":158},[84,158269,162],{"class":154},[14,158271,158273],{"id":158272},"_213-易错点","2.13 易错点",[26,158275,158276,158281,158287,158295,158298],{},[29,158277,158278,158280],{},[39,158279,157923],{}," 的结果是字符串，做运算前要转换。",[29,158282,158283,158284,55],{},"字符串拼接时，数字要先 ",[39,158285,158286],{},"str()",[29,158288,158289,158291,158292,158294],{},[39,158290,867],{}," 是赋值，",[39,158293,4127],{}," 是比较。",[29,158296,158297],{},"Python 没有自增自减运算符。",[29,158299,158300],{},"浮点数计算可能有精度误差：",[60,158302,158304],{"className":121,"code":158303,"language":91,"meta":66,"style":66},"print(0.1 + 0.2)\n",[39,158305,158306],{"__ignoreMap":66},[84,158307,158308,158310,158312,158314,158316,158319],{"class":86,"line":87},[84,158309,730],{"class":94},[84,158311,155],{"class":154},[84,158313,87356],{"class":94},[84,158315,136],{"class":129},[84,158317,158318],{"class":94}," 0.2",[84,158320,162],{"class":154},[19,158322,158323,158324,158327],{},"金额计算如果要求严格，可以后续学习 ",[39,158325,158326],{},"decimal"," 模块。",[14,158329,158331],{"id":158330},"_214-本章练习","2.14 本章练习",[26,158333,158334,158337,158340,158343,158346],{},[29,158335,158336],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,158338,158339],{},"输入圆的半径，计算面积，保留两位小数。",[29,158341,158342],{},"输入工资和奖金，计算总收入。",[29,158344,158345],{},"输入摄氏温度，转换为华氏温度。",[29,158347,158348],{},"写一个 BMI 计算程序：",[60,158350,158353],{"className":158351,"code":158352,"language":65,"meta":66},[63],"BMI = 体重kg \u002F 身高m ** 2\n",[39,158354,158352],{"__ignoreMap":66},[1222,158356,158357],{},"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":66,"searchDepth":98,"depth":98,"links":158359},[158360,158361,158362,158363,158364,158365,158366,158372,158373,158374,158379,158380,158381,158382],{"id":155921,"depth":98,"text":155922},{"id":156030,"depth":98,"text":156031},{"id":156201,"depth":98,"text":156202},{"id":156278,"depth":98,"text":156279},{"id":51880,"depth":98,"text":51881},{"id":156584,"depth":98,"text":156585},{"id":156810,"depth":98,"text":156811,"children":158367},[158368,158369,158370,158371],{"id":156814,"depth":106,"text":156815},{"id":157008,"depth":106,"text":157009},{"id":157096,"depth":106,"text":157097},{"id":157202,"depth":106,"text":157203},{"id":157311,"depth":98,"text":157312},{"id":157469,"depth":98,"text":157470},{"id":157534,"depth":98,"text":157535,"children":158375},[158376,158377,158378],{"id":157538,"depth":106,"text":157539},{"id":157683,"depth":106,"text":157684},{"id":157786,"depth":106,"text":157787},{"id":157917,"depth":98,"text":157918},{"id":158069,"depth":98,"text":158070},{"id":158272,"depth":98,"text":158273},{"id":158330,"depth":98,"text":158331},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155913,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158389,"title":158390,"body":158391,"description":1249,"extension":1250,"meta":160027,"navigation":1252,"path":160028,"seo":160029,"stem":160030,"__hash__":160031},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158392,"toc":160008},[158393,158396,158400,158403,158418,158421,158449,158453,158503,158505,158521,158524,158550,158553,158557,158624,158627,158643,158647,158650,158768,158771,158778,158827,158833,158837,158840,158953,158956,158960,158964,158967,159017,159021,159024,159074,159078,159081,159119,159123,159126,159172,159175,159210,159214,159219,159222,159268,159270,159337,159341,159347,159458,159467,159471,159473,159484,159486,159652,159656,159658,159672,159674,159888,159892,159911,159928,159931,159977,159981,160005],[10,158394,158390],{"id":158395},"_3-判断语句",[14,158397,158399],{"id":158398},"_31-布尔值","3.1 布尔值",[19,158401,158402],{},"判断语句依赖布尔值：",[60,158404,158406],{"className":121,"code":158405,"language":91,"meta":66,"style":66},"True\nFalse\n",[39,158407,158408,158413],{"__ignoreMap":66},[84,158409,158410],{"class":86,"line":87},[84,158411,158412],{"class":94},"True\n",[84,158414,158415],{"class":86,"line":98},[84,158416,158417],{"class":94},"False\n",[19,158419,158420],{},"比较表达式会产生布尔值：",[60,158422,158424],{"className":121,"code":158423,"language":91,"meta":66,"style":66},"age = 18\nprint(age >= 18)  # True\n",[39,158425,158426,158434],{"__ignoreMap":66},[84,158427,158428,158430,158432],{"class":86,"line":87},[84,158429,875],{"class":154},[84,158431,867],{"class":129},[84,158433,880],{"class":94},[84,158435,158436,158438,158440,158442,158444,158446],{"class":86,"line":98},[84,158437,730],{"class":94},[84,158439,156668],{"class":154},[84,158441,2891],{"class":129},[84,158443,157185],{"class":94},[84,158445,46958],{"class":154},[84,158447,158448],{"class":1378},"# True\n",[14,158450,158452],{"id":158451},"_32-if基础语法","3.2 if基础语法",[60,158454,158456],{"className":121,"code":158455,"language":91,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[39,158457,158458,158476,158480,158492],{"__ignoreMap":66},[84,158459,158460,158462,158464,158466,158468,158470,158472,158474],{"class":86,"line":87},[84,158461,875],{"class":154},[84,158463,867],{"class":129},[84,158465,3560],{"class":94},[84,158467,155],{"class":154},[84,158469,54970],{"class":94},[84,158471,155],{"class":154},[84,158473,153294],{"class":158},[84,158475,31651],{"class":154},[84,158477,158478],{"class":86,"line":98},[84,158479,3578],{"emptyLinePlaceholder":1252},[84,158481,158482,158484,158486,158488,158490],{"class":86,"line":106},[84,158483,2712],{"class":129},[84,158485,16877],{"class":154},[84,158487,2891],{"class":129},[84,158489,157185],{"class":94},[84,158491,4917],{"class":154},[84,158493,158494,158496,158498,158501],{"class":86,"line":112},[84,158495,32453],{"class":94},[84,158497,155],{"class":154},[84,158499,158500],{"class":158},"\"可以进入网吧\"",[84,158502,162],{"class":154},[19,158504,10197],{},[26,158506,158507,158512,158515,158518],{},[29,158508,158509,158511],{},[39,158510,2712],{}," 后面是条件表达式。",[29,158513,158514],{},"条件后面必须写冒号。",[29,158516,158517],{},"条件成立时执行缩进代码块。",[29,158519,158520],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158522,158523],{},"错误示例：",[60,158525,158527],{"className":121,"code":158526,"language":91,"meta":66,"style":66},"if age >= 18\n    print(\"可以进入\")\n",[39,158528,158529,158539],{"__ignoreMap":66},[84,158530,158531,158533,158535,158537],{"class":86,"line":87},[84,158532,2712],{"class":129},[84,158534,16877],{"class":154},[84,158536,2891],{"class":129},[84,158538,880],{"class":94},[84,158540,158541,158543,158545,158548],{"class":86,"line":98},[84,158542,32453],{"class":94},[84,158544,155],{"class":154},[84,158546,158547],{"class":158},"\"可以进入\"",[84,158549,162],{"class":154},[19,158551,158552],{},"缺少冒号。",[14,158554,158556],{"id":158555},"_33-if-else","3.3 if else",[60,158558,158560],{"className":121,"code":158559,"language":91,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[39,158561,158562,158580,158584,158596,158607,158613],{"__ignoreMap":66},[84,158563,158564,158566,158568,158570,158572,158574,158576,158578],{"class":86,"line":87},[84,158565,875],{"class":154},[84,158567,867],{"class":129},[84,158569,3560],{"class":94},[84,158571,155],{"class":154},[84,158573,54970],{"class":94},[84,158575,155],{"class":154},[84,158577,153294],{"class":158},[84,158579,31651],{"class":154},[84,158581,158582],{"class":86,"line":98},[84,158583,3578],{"emptyLinePlaceholder":1252},[84,158585,158586,158588,158590,158592,158594],{"class":86,"line":106},[84,158587,2712],{"class":129},[84,158589,16877],{"class":154},[84,158591,2891],{"class":129},[84,158593,157185],{"class":94},[84,158595,4917],{"class":154},[84,158597,158598,158600,158602,158605],{"class":86,"line":112},[84,158599,32453],{"class":94},[84,158601,155],{"class":154},[84,158603,158604],{"class":158},"\"成年人\"",[84,158606,162],{"class":154},[84,158608,158609,158611],{"class":86,"line":425},[84,158610,2882],{"class":129},[84,158612,4917],{"class":154},[84,158614,158615,158617,158619,158622],{"class":86,"line":2395},[84,158616,32453],{"class":94},[84,158618,155],{"class":154},[84,158620,158621],{"class":158},"\"未成年人\"",[84,158623,162],{"class":154},[19,158625,158626],{},"执行逻辑：",[26,158628,158629,158635,158640],{},[29,158630,158631,158632,158634],{},"条件成立，执行 ",[39,158633,2712],{}," 代码块。",[29,158636,158637,158638,158634],{},"条件不成立，执行 ",[39,158639,2882],{},[29,158641,158642],{},"两个代码块只会执行其中一个。",[14,158644,158646],{"id":158645},"_34-if-elif-else","3.4 if elif else",[19,158648,158649],{},"多条件判断：",[60,158651,158653],{"className":121,"code":158652,"language":91,"meta":66,"style":66},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[39,158654,158655,158673,158677,158691,158702,158716,158727,158740,158751,158757],{"__ignoreMap":66},[84,158656,158657,158659,158661,158663,158665,158667,158669,158671],{"class":86,"line":87},[84,158658,156258],{"class":154},[84,158660,867],{"class":129},[84,158662,3560],{"class":94},[84,158664,155],{"class":154},[84,158666,54970],{"class":94},[84,158668,155],{"class":154},[84,158670,153309],{"class":158},[84,158672,31651],{"class":154},[84,158674,158675],{"class":86,"line":98},[84,158676,3578],{"emptyLinePlaceholder":1252},[84,158678,158679,158681,158684,158686,158689],{"class":86,"line":106},[84,158680,2712],{"class":129},[84,158682,158683],{"class":154}," score ",[84,158685,2891],{"class":129},[84,158687,158688],{"class":94}," 90",[84,158690,4917],{"class":154},[84,158692,158693,158695,158697,158700],{"class":86,"line":112},[84,158694,32453],{"class":94},[84,158696,155],{"class":154},[84,158698,158699],{"class":158},"\"优秀\"",[84,158701,162],{"class":154},[84,158703,158704,158707,158709,158711,158714],{"class":86,"line":425},[84,158705,158706],{"class":129},"elif",[84,158708,158683],{"class":154},[84,158710,2891],{"class":129},[84,158712,158713],{"class":94}," 80",[84,158715,4917],{"class":154},[84,158717,158718,158720,158722,158725],{"class":86,"line":2395},[84,158719,32453],{"class":94},[84,158721,155],{"class":154},[84,158723,158724],{"class":158},"\"良好\"",[84,158726,162],{"class":154},[84,158728,158729,158731,158733,158735,158738],{"class":86,"line":2401},[84,158730,158706],{"class":129},[84,158732,158683],{"class":154},[84,158734,2891],{"class":129},[84,158736,158737],{"class":94}," 60",[84,158739,4917],{"class":154},[84,158741,158742,158744,158746,158749],{"class":86,"line":2492},[84,158743,32453],{"class":94},[84,158745,155],{"class":154},[84,158747,158748],{"class":158},"\"及格\"",[84,158750,162],{"class":154},[84,158752,158753,158755],{"class":86,"line":2498},[84,158754,2882],{"class":129},[84,158756,4917],{"class":154},[84,158758,158759,158761,158763,158766],{"class":86,"line":2510},[84,158760,32453],{"class":94},[84,158762,155],{"class":154},[84,158764,158765],{"class":158},"\"不及格\"",[84,158767,162],{"class":154},[19,158769,158770],{},"注意判断顺序很重要。",[19,158772,158773,158774,158777],{},"如果把 ",[39,158775,158776],{},"score >= 60"," 放在最前面：",[60,158779,158781],{"className":121,"code":158780,"language":91,"meta":66,"style":66},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[39,158782,158783,158795,158805,158817],{"__ignoreMap":66},[84,158784,158785,158787,158789,158791,158793],{"class":86,"line":87},[84,158786,2712],{"class":129},[84,158788,158683],{"class":154},[84,158790,2891],{"class":129},[84,158792,158737],{"class":94},[84,158794,4917],{"class":154},[84,158796,158797,158799,158801,158803],{"class":86,"line":98},[84,158798,32453],{"class":94},[84,158800,155],{"class":154},[84,158802,158748],{"class":158},[84,158804,162],{"class":154},[84,158806,158807,158809,158811,158813,158815],{"class":86,"line":106},[84,158808,158706],{"class":129},[84,158810,158683],{"class":154},[84,158812,2891],{"class":129},[84,158814,158688],{"class":94},[84,158816,4917],{"class":154},[84,158818,158819,158821,158823,158825],{"class":86,"line":112},[84,158820,32453],{"class":94},[84,158822,155],{"class":154},[84,158824,158699],{"class":158},[84,158826,162],{"class":154},[19,158828,158829,158830,158832],{},"成绩 95 会先满足 ",[39,158831,158776],{},"，后面的优秀分支就不会执行。",[14,158834,158836],{"id":158835},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158838,158839],{},"嵌套判断就是在一个判断内部再写判断。",[60,158841,158843],{"className":121,"code":158842,"language":91,"meta":66,"style":66},"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",[39,158844,158845,158863,158878,158882,158894,158908,158918,158925,158936,158942],{"__ignoreMap":66},[84,158846,158847,158849,158851,158853,158855,158857,158859,158861],{"class":86,"line":87},[84,158848,875],{"class":154},[84,158850,867],{"class":129},[84,158852,3560],{"class":94},[84,158854,155],{"class":154},[84,158856,54970],{"class":94},[84,158858,155],{"class":154},[84,158860,153294],{"class":158},[84,158862,31651],{"class":154},[84,158864,158865,158867,158869,158871,158873,158876],{"class":86,"line":98},[84,158866,157261],{"class":154},[84,158868,867],{"class":129},[84,158870,61751],{"class":94},[84,158872,155],{"class":154},[84,158874,158875],{"class":158},"\"是否有票(y\u002Fn):\"",[84,158877,162],{"class":154},[84,158879,158880],{"class":86,"line":106},[84,158881,3578],{"emptyLinePlaceholder":1252},[84,158883,158884,158886,158888,158890,158892],{"class":86,"line":112},[84,158885,2712],{"class":129},[84,158887,16877],{"class":154},[84,158889,2891],{"class":129},[84,158891,157185],{"class":94},[84,158893,4917],{"class":154},[84,158895,158896,158898,158901,158903,158906],{"class":86,"line":425},[84,158897,4279],{"class":129},[84,158899,158900],{"class":154}," has_ticket ",[84,158902,4127],{"class":129},[84,158904,158905],{"class":158}," \"y\"",[84,158907,4917],{"class":154},[84,158909,158910,158912,158914,158916],{"class":86,"line":2395},[84,158911,33604],{"class":94},[84,158913,155],{"class":154},[84,158915,158547],{"class":158},[84,158917,162],{"class":154},[84,158919,158920,158923],{"class":86,"line":2401},[84,158921,158922],{"class":129},"    else",[84,158924,4917],{"class":154},[84,158926,158927,158929,158931,158934],{"class":86,"line":2492},[84,158928,33604],{"class":94},[84,158930,155],{"class":154},[84,158932,158933],{"class":158},"\"请先买票\"",[84,158935,162],{"class":154},[84,158937,158938,158940],{"class":86,"line":2498},[84,158939,2882],{"class":129},[84,158941,4917],{"class":154},[84,158943,158944,158946,158948,158951],{"class":86,"line":2510},[84,158945,32453],{"class":94},[84,158947,155],{"class":154},[84,158949,158950],{"class":158},"\"未成年人禁止进入\"",[84,158952,162],{"class":154},[19,158954,158955],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158957,158959],{"id":158958},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[198,158961,158963],{"id":158962},"_361-and","3.6.1 and",[19,158965,158966],{},"两个条件都成立才成立。",[60,158968,158970],{"className":121,"code":158969,"language":91,"meta":66,"style":66},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[39,158971,158972,158980,158988,158992,159007],{"__ignoreMap":66},[84,158973,158974,158976,158978],{"class":86,"line":87},[84,158975,875],{"class":154},[84,158977,867],{"class":129},[84,158979,89211],{"class":94},[84,158981,158982,158984,158986],{"class":86,"line":98},[84,158983,157261],{"class":154},[84,158985,867],{"class":129},[84,158987,154499],{"class":94},[84,158989,158990],{"class":86,"line":106},[84,158991,3578],{"emptyLinePlaceholder":1252},[84,158993,158994,158996,158998,159000,159002,159004],{"class":86,"line":112},[84,158995,2712],{"class":129},[84,158997,16877],{"class":154},[84,158999,2891],{"class":129},[84,159001,157185],{"class":94},[84,159003,121555],{"class":129},[84,159005,159006],{"class":154}," has_ticket:\n",[84,159008,159009,159011,159013,159015],{"class":86,"line":425},[84,159010,32453],{"class":94},[84,159012,155],{"class":154},[84,159014,158547],{"class":158},[84,159016,162],{"class":154},[198,159018,159020],{"id":159019},"_362-or","3.6.2 or",[19,159022,159023],{},"只要一个条件成立就成立。",[60,159025,159027],{"className":121,"code":159026,"language":91,"meta":66,"style":66},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[39,159028,159029,159038,159047,159051,159063],{"__ignoreMap":66},[84,159030,159031,159034,159036],{"class":86,"line":87},[84,159032,159033],{"class":154},"is_vip ",[84,159035,867],{"class":129},[84,159037,126931],{"class":94},[84,159039,159040,159043,159045],{"class":86,"line":98},[84,159041,159042],{"class":154},"coupon ",[84,159044,867],{"class":129},[84,159046,154499],{"class":94},[84,159048,159049],{"class":86,"line":106},[84,159050,3578],{"emptyLinePlaceholder":1252},[84,159052,159053,159055,159058,159060],{"class":86,"line":112},[84,159054,2712],{"class":129},[84,159056,159057],{"class":154}," is_vip ",[84,159059,116224],{"class":129},[84,159061,159062],{"class":154}," coupon:\n",[84,159064,159065,159067,159069,159072],{"class":86,"line":425},[84,159066,32453],{"class":94},[84,159068,155],{"class":154},[84,159070,159071],{"class":158},"\"可以享受优惠\"",[84,159073,162],{"class":154},[198,159075,159077],{"id":159076},"_363-not","3.6.3 not",[19,159079,159080],{},"取反。",[60,159082,159084],{"className":121,"code":159083,"language":91,"meta":66,"style":66},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[39,159085,159086,159095,159099,159108],{"__ignoreMap":66},[84,159087,159088,159091,159093],{"class":86,"line":87},[84,159089,159090],{"class":154},"is_closed ",[84,159092,867],{"class":129},[84,159094,126931],{"class":94},[84,159096,159097],{"class":86,"line":98},[84,159098,3578],{"emptyLinePlaceholder":1252},[84,159100,159101,159103,159105],{"class":86,"line":106},[84,159102,2712],{"class":129},[84,159104,40082],{"class":129},[84,159106,159107],{"class":154}," is_closed:\n",[84,159109,159110,159112,159114,159117],{"class":86,"line":112},[84,159111,32453],{"class":94},[84,159113,155],{"class":154},[84,159115,159116],{"class":158},"\"店铺营业中\"",[84,159118,162],{"class":154},[14,159120,159122],{"id":159121},"_37-链式比较","3.7 链式比较",[19,159124,159125],{},"Python 支持链式比较：",[60,159127,159129],{"className":121,"code":159128,"language":91,"meta":66,"style":66},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[39,159130,159131,159140,159144,159161],{"__ignoreMap":66},[84,159132,159133,159135,159137],{"class":86,"line":87},[84,159134,156258],{"class":154},[84,159136,867],{"class":129},[84,159138,159139],{"class":94}," 85\n",[84,159141,159142],{"class":86,"line":98},[84,159143,3578],{"emptyLinePlaceholder":1252},[84,159145,159146,159148,159150,159153,159155,159157,159159],{"class":86,"line":106},[84,159147,2712],{"class":129},[84,159149,5271],{"class":94},[84,159151,159152],{"class":129}," \u003C=",[84,159154,158683],{"class":154},[84,159156,2769],{"class":129},[84,159158,6928],{"class":94},[84,159160,4917],{"class":154},[84,159162,159163,159165,159167,159170],{"class":86,"line":112},[84,159164,32453],{"class":94},[84,159166,155],{"class":154},[84,159168,159169],{"class":158},"\"成绩合法\"",[84,159171,162],{"class":154},[19,159173,159174],{},"等价于：",[60,159176,159178],{"className":121,"code":159177,"language":91,"meta":66,"style":66},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[39,159179,159180,159200],{"__ignoreMap":66},[84,159181,159182,159184,159186,159188,159190,159192,159194,159196,159198],{"class":86,"line":87},[84,159183,2712],{"class":129},[84,159185,158683],{"class":154},[84,159187,2891],{"class":129},[84,159189,5271],{"class":94},[84,159191,121555],{"class":129},[84,159193,158683],{"class":154},[84,159195,2769],{"class":129},[84,159197,6928],{"class":94},[84,159199,4917],{"class":154},[84,159201,159202,159204,159206,159208],{"class":86,"line":98},[84,159203,32453],{"class":94},[84,159205,155],{"class":154},[84,159207,159169],{"class":158},[84,159209,162],{"class":154},[14,159211,159213],{"id":159212},"_38-真值和假值","3.8 真值和假值",[19,159215,117601,159216,159218],{},[39,159217,2712],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159220,159221],{},"假值：",[60,159223,159225],{"className":121,"code":159224,"language":91,"meta":66,"style":66},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[39,159226,159227,159231,159236,159240,159244,159249,159253,159257,159262],{"__ignoreMap":66},[84,159228,159229],{"class":86,"line":87},[84,159230,158417],{"class":94},[84,159232,159233],{"class":86,"line":98},[84,159234,159235],{"class":94},"None\n",[84,159237,159238],{"class":86,"line":106},[84,159239,4263],{"class":94},[84,159241,159242],{"class":86,"line":112},[84,159243,33495],{"class":94},[84,159245,159246],{"class":86,"line":425},[84,159247,159248],{"class":158},"\"\"\n",[84,159250,159251],{"class":86,"line":2395},[84,159252,33510],{"class":154},[84,159254,159255],{"class":86,"line":2401},[84,159256,183],{"class":154},[84,159258,159259],{"class":86,"line":2492},[84,159260,159261],{"class":154},"{}\n",[84,159263,159264,159266],{"class":86,"line":2498},[84,159265,156190],{"class":94},[84,159267,183],{"class":154},[19,159269,16305],{},[60,159271,159273],{"className":121,"code":159272,"language":91,"meta":66,"style":66},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[39,159274,159275,159289,159293,159300,159320,159326],{"__ignoreMap":66},[84,159276,159277,159279,159281,159283,159285,159287],{"class":86,"line":87},[84,159278,864],{"class":154},[84,159280,867],{"class":129},[84,159282,61751],{"class":94},[84,159284,155],{"class":154},[84,159286,153279],{"class":158},[84,159288,162],{"class":154},[84,159290,159291],{"class":86,"line":98},[84,159292,3578],{"emptyLinePlaceholder":1252},[84,159294,159295,159297],{"class":86,"line":106},[84,159296,2712],{"class":129},[84,159298,159299],{"class":154}," name:\n",[84,159301,159302,159304,159306,159308,159310,159312,159314,159316,159318],{"class":86,"line":112},[84,159303,32453],{"class":94},[84,159305,155],{"class":154},[84,159307,1372],{"class":129},[84,159309,157954],{"class":158},[84,159311,2204],{"class":94},[84,159313,80956],{"class":154},[84,159315,2254],{"class":94},[84,159317,1562],{"class":158},[84,159319,162],{"class":154},[84,159321,159322,159324],{"class":86,"line":425},[84,159323,2882],{"class":129},[84,159325,4917],{"class":154},[84,159327,159328,159330,159332,159335],{"class":86,"line":2395},[84,159329,32453],{"class":94},[84,159331,155],{"class":154},[84,159333,159334],{"class":158},"\"姓名不能为空\"",[84,159336,162],{"class":154},[14,159338,159340],{"id":159339},"_39-match语句","3.9 match语句",[19,159342,159343,159344,159346],{},"Python 3.10 开始支持 ",[39,159345,72411],{},"。它适合处理固定选项。",[60,159348,159350],{"className":121,"code":159349,"language":91,"meta":66,"style":66},"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",[39,159351,159352,159368,159372,159379,159389,159400,159409,159420,159429,159440,159447],{"__ignoreMap":66},[84,159353,159354,159357,159359,159361,159363,159366],{"class":86,"line":87},[84,159355,159356],{"class":154},"command ",[84,159358,867],{"class":129},[84,159360,61751],{"class":94},[84,159362,155],{"class":154},[84,159364,159365],{"class":158},"\"请输入命令:\"",[84,159367,162],{"class":154},[84,159369,159370],{"class":86,"line":98},[84,159371,3578],{"emptyLinePlaceholder":1252},[84,159373,159374,159376],{"class":86,"line":106},[84,159375,72411],{"class":129},[84,159377,159378],{"class":154}," command:\n",[84,159380,159381,159384,159387],{"class":86,"line":112},[84,159382,159383],{"class":129},"    case",[84,159385,159386],{"class":158}," \"start\"",[84,159388,4917],{"class":154},[84,159390,159391,159393,159395,159398],{"class":86,"line":425},[84,159392,33604],{"class":94},[84,159394,155],{"class":154},[84,159396,159397],{"class":158},"\"启动\"",[84,159399,162],{"class":154},[84,159401,159402,159404,159407],{"class":86,"line":2395},[84,159403,159383],{"class":129},[84,159405,159406],{"class":158}," \"stop\"",[84,159408,4917],{"class":154},[84,159410,159411,159413,159415,159418],{"class":86,"line":2401},[84,159412,33604],{"class":94},[84,159414,155],{"class":154},[84,159416,159417],{"class":158},"\"停止\"",[84,159419,162],{"class":154},[84,159421,159422,159424,159427],{"class":86,"line":2492},[84,159423,159383],{"class":129},[84,159425,159426],{"class":158}," \"restart\"",[84,159428,4917],{"class":154},[84,159430,159431,159433,159435,159438],{"class":86,"line":2498},[84,159432,33604],{"class":94},[84,159434,155],{"class":154},[84,159436,159437],{"class":158},"\"重启\"",[84,159439,162],{"class":154},[84,159441,159442,159444],{"class":86,"line":2510},[84,159443,159383],{"class":129},[84,159445,159446],{"class":154}," _:\n",[84,159448,159449,159451,159453,159456],{"class":86,"line":2793},[84,159450,33604],{"class":94},[84,159452,155],{"class":154},[84,159454,159455],{"class":158},"\"未知命令\"",[84,159457,162],{"class":154},[19,159459,159460,159461,159463,159464,159466],{},"入门阶段掌握 ",[39,159462,155558],{}," 更重要，",[39,159465,72411],{}," 可以作为补充。",[14,159468,159470],{"id":159469},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159472,124417],{},[26,159474,159475,159478,159481],{},[29,159476,159477],{},"输入成绩。",[29,159479,159480],{},"判断成绩是否合法。",[29,159482,159483],{},"输出等级。",[19,159485,11207],{},[60,159487,159489],{"className":121,"code":159488,"language":91,"meta":66,"style":66},"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",[39,159490,159491,159509,159513,159531,159542,159554,159565,159577,159588,159601,159612,159624,159635,159641],{"__ignoreMap":66},[84,159492,159493,159495,159497,159499,159501,159503,159505,159507],{"class":86,"line":87},[84,159494,156258],{"class":154},[84,159496,867],{"class":129},[84,159498,110931],{"class":94},[84,159500,155],{"class":154},[84,159502,54970],{"class":94},[84,159504,155],{"class":154},[84,159506,153309],{"class":158},[84,159508,31651],{"class":154},[84,159510,159511],{"class":86,"line":98},[84,159512,3578],{"emptyLinePlaceholder":1252},[84,159514,159515,159517,159519,159521,159523,159525,159527,159529],{"class":86,"line":106},[84,159516,2712],{"class":129},[84,159518,40082],{"class":129},[84,159520,5271],{"class":94},[84,159522,159152],{"class":129},[84,159524,158683],{"class":154},[84,159526,2769],{"class":129},[84,159528,6928],{"class":94},[84,159530,4917],{"class":154},[84,159532,159533,159535,159537,159540],{"class":86,"line":112},[84,159534,32453],{"class":94},[84,159536,155],{"class":154},[84,159538,159539],{"class":158},"\"成绩不合法\"",[84,159541,162],{"class":154},[84,159543,159544,159546,159548,159550,159552],{"class":86,"line":425},[84,159545,158706],{"class":129},[84,159547,158683],{"class":154},[84,159549,2891],{"class":129},[84,159551,158688],{"class":94},[84,159553,4917],{"class":154},[84,159555,159556,159558,159560,159563],{"class":86,"line":2395},[84,159557,32453],{"class":94},[84,159559,155],{"class":154},[84,159561,159562],{"class":158},"\"等级:A\"",[84,159564,162],{"class":154},[84,159566,159567,159569,159571,159573,159575],{"class":86,"line":2401},[84,159568,158706],{"class":129},[84,159570,158683],{"class":154},[84,159572,2891],{"class":129},[84,159574,158713],{"class":94},[84,159576,4917],{"class":154},[84,159578,159579,159581,159583,159586],{"class":86,"line":2492},[84,159580,32453],{"class":94},[84,159582,155],{"class":154},[84,159584,159585],{"class":158},"\"等级:B\"",[84,159587,162],{"class":154},[84,159589,159590,159592,159594,159596,159599],{"class":86,"line":2498},[84,159591,158706],{"class":129},[84,159593,158683],{"class":154},[84,159595,2891],{"class":129},[84,159597,159598],{"class":94}," 70",[84,159600,4917],{"class":154},[84,159602,159603,159605,159607,159610],{"class":86,"line":2510},[84,159604,32453],{"class":94},[84,159606,155],{"class":154},[84,159608,159609],{"class":158},"\"等级:C\"",[84,159611,162],{"class":154},[84,159613,159614,159616,159618,159620,159622],{"class":86,"line":2793},[84,159615,158706],{"class":129},[84,159617,158683],{"class":154},[84,159619,2891],{"class":129},[84,159621,158737],{"class":94},[84,159623,4917],{"class":154},[84,159625,159626,159628,159630,159633],{"class":86,"line":2798},[84,159627,32453],{"class":94},[84,159629,155],{"class":154},[84,159631,159632],{"class":158},"\"等级:D\"",[84,159634,162],{"class":154},[84,159636,159637,159639],{"class":86,"line":2804},[84,159638,2882],{"class":129},[84,159640,4917],{"class":154},[84,159642,159643,159645,159647,159650],{"class":86,"line":2809},[84,159644,32453],{"class":94},[84,159646,155],{"class":154},[84,159648,159649],{"class":158},"\"等级:E\"",[84,159651,162],{"class":154},[14,159653,159655],{"id":159654},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159657,124417],{},[26,159659,159660,159663,159666,159669],{},[29,159661,159662],{},"输入消费金额。",[29,159664,159665],{},"输入会员等级，普通、银卡、金卡。",[29,159667,159668],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,159670,159671],{},"满 500 再减 50。",[19,159673,11207],{},[60,159675,159677],{"className":121,"code":159676,"language":91,"meta":66,"style":66},"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",[39,159678,159679,159699,159715,159719,159727,159731,159745,159755,159768,159777,159790,159798,159804,159815,159819,159833,159837,159851,159861,159865],{"__ignoreMap":66},[84,159680,159681,159684,159686,159688,159690,159692,159694,159697],{"class":86,"line":87},[84,159682,159683],{"class":154},"amount ",[84,159685,867],{"class":129},[84,159687,110931],{"class":94},[84,159689,155],{"class":154},[84,159691,54970],{"class":94},[84,159693,155],{"class":154},[84,159695,159696],{"class":158},"\"请输入消费金额:\"",[84,159698,31651],{"class":154},[84,159700,159701,159704,159706,159708,159710,159713],{"class":86,"line":98},[84,159702,159703],{"class":154},"level ",[84,159705,867],{"class":129},[84,159707,61751],{"class":94},[84,159709,155],{"class":154},[84,159711,159712],{"class":158},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[84,159714,162],{"class":154},[84,159716,159717],{"class":86,"line":106},[84,159718,3578],{"emptyLinePlaceholder":1252},[84,159720,159721,159723,159725],{"class":86,"line":112},[84,159722,158136],{"class":154},[84,159724,867],{"class":129},[84,159726,56846],{"class":94},[84,159728,159729],{"class":86,"line":425},[84,159730,3578],{"emptyLinePlaceholder":1252},[84,159732,159733,159735,159738,159740,159743],{"class":86,"line":2395},[84,159734,2712],{"class":129},[84,159736,159737],{"class":154}," level ",[84,159739,4127],{"class":129},[84,159741,159742],{"class":158}," \"银卡\"",[84,159744,4917],{"class":154},[84,159746,159747,159750,159752],{"class":86,"line":2401},[84,159748,159749],{"class":154},"    discount ",[84,159751,867],{"class":129},[84,159753,159754],{"class":94}," 0.9\n",[84,159756,159757,159759,159761,159763,159766],{"class":86,"line":2492},[84,159758,158706],{"class":129},[84,159760,159737],{"class":154},[84,159762,4127],{"class":129},[84,159764,159765],{"class":158}," \"金卡\"",[84,159767,4917],{"class":154},[84,159769,159770,159772,159774],{"class":86,"line":2498},[84,159771,159749],{"class":154},[84,159773,867],{"class":129},[84,159775,159776],{"class":94}," 0.8\n",[84,159778,159779,159781,159783,159785,159788],{"class":86,"line":2510},[84,159780,158706],{"class":129},[84,159782,159737],{"class":154},[84,159784,4127],{"class":129},[84,159786,159787],{"class":158}," \"普通\"",[84,159789,4917],{"class":154},[84,159791,159792,159794,159796],{"class":86,"line":2793},[84,159793,159749],{"class":154},[84,159795,867],{"class":129},[84,159797,56846],{"class":94},[84,159799,159800,159802],{"class":86,"line":2798},[84,159801,2882],{"class":129},[84,159803,4917],{"class":154},[84,159805,159806,159808,159810,159813],{"class":86,"line":2804},[84,159807,32453],{"class":94},[84,159809,155],{"class":154},[84,159811,159812],{"class":158},"\"会员等级输入错误，按普通会员计算\"",[84,159814,162],{"class":154},[84,159816,159817],{"class":86,"line":2809},[84,159818,3578],{"emptyLinePlaceholder":1252},[84,159820,159821,159824,159826,159829,159831],{"class":86,"line":2823},[84,159822,159823],{"class":154},"pay ",[84,159825,867],{"class":129},[84,159827,159828],{"class":154}," amount ",[84,159830,1043],{"class":129},[84,159832,158175],{"class":154},[84,159834,159835],{"class":86,"line":2828},[84,159836,3578],{"emptyLinePlaceholder":1252},[84,159838,159839,159841,159844,159846,159849],{"class":86,"line":2834},[84,159840,2712],{"class":129},[84,159842,159843],{"class":154}," pay ",[84,159845,2891],{"class":129},[84,159847,159848],{"class":94}," 500",[84,159850,4917],{"class":154},[84,159852,159853,159856,159858],{"class":86,"line":2855},[84,159854,159855],{"class":154},"    pay ",[84,159857,151152],{"class":129},[84,159859,159860],{"class":94}," 50\n",[84,159862,159863],{"class":86,"line":2860},[84,159864,3578],{"emptyLinePlaceholder":1252},[84,159866,159867,159869,159871,159873,159875,159877,159880,159882,159884,159886],{"class":86,"line":2874},[84,159868,730],{"class":94},[84,159870,155],{"class":154},[84,159872,1372],{"class":129},[84,159874,158256],{"class":158},[84,159876,2204],{"class":94},[84,159878,159879],{"class":154},"pay",[84,159881,158059],{"class":129},[84,159883,2254],{"class":94},[84,159885,157912],{"class":158},[84,159887,162],{"class":154},[14,159889,159891],{"id":159890},"_312-易错点","3.12 易错点",[26,159893,159894,159897,159900,159903,159908],{},[29,159895,159896],{},"冒号不能漏。",[29,159898,159899],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,159901,159902],{},"多分支判断要注意顺序。",[29,159904,159905,159906,55],{},"判断相等用 ",[39,159907,4127],{},[29,159909,159910],{},"字符串比较区分大小写：",[60,159912,159914],{"className":121,"code":159913,"language":91,"meta":66,"style":66},"\"Y\" == \"y\"  # False\n",[39,159915,159916],{"__ignoreMap":66},[84,159917,159918,159921,159923,159925],{"class":86,"line":87},[84,159919,159920],{"class":158},"\"Y\"",[84,159922,102697],{"class":129},[84,159924,158905],{"class":158},[84,159926,159927],{"class":1378},"  # False\n",[19,159929,159930],{},"可转换后再判断：",[60,159932,159934],{"className":121,"code":159933,"language":91,"meta":66,"style":66},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[39,159935,159936,159953,159966],{"__ignoreMap":66},[84,159937,159938,159941,159943,159945,159947,159950],{"class":86,"line":87},[84,159939,159940],{"class":154},"answer ",[84,159942,867],{"class":129},[84,159944,61751],{"class":94},[84,159946,155],{"class":154},[84,159948,159949],{"class":158},"\"是否继续(y\u002Fn):\"",[84,159951,159952],{"class":154},").lower()\n",[84,159954,159955,159957,159960,159962,159964],{"class":86,"line":98},[84,159956,2712],{"class":129},[84,159958,159959],{"class":154}," answer ",[84,159961,4127],{"class":129},[84,159963,158905],{"class":158},[84,159965,4917],{"class":154},[84,159967,159968,159970,159972,159975],{"class":86,"line":106},[84,159969,32453],{"class":94},[84,159971,155],{"class":154},[84,159973,159974],{"class":158},"\"继续\"",[84,159976,162],{"class":154},[14,159978,159980],{"id":159979},"_313-本章练习","3.13 本章练习",[26,159982,159983,159986,159989,159992,160002],{},[29,159984,159985],{},"输入年龄，判断是否成年。",[29,159987,159988],{},"输入年份，判断是否为闰年。",[29,159990,159991],{},"输入三个数字，输出最大值。",[29,159993,159994,159995,159998,159999,160001],{},"写登录判断：用户名是 ",[39,159996,159997],{},"admin"," 且密码是 ",[39,160000,16254],{}," 才登录成功。",[29,160003,160004],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1222,160006,160007],{},"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":66,"searchDepth":98,"depth":98,"links":160009},[160010,160011,160012,160013,160014,160015,160020,160021,160022,160023,160024,160025,160026],{"id":158398,"depth":98,"text":158399},{"id":158451,"depth":98,"text":158452},{"id":158555,"depth":98,"text":158556},{"id":158645,"depth":98,"text":158646},{"id":158835,"depth":98,"text":158836},{"id":158958,"depth":98,"text":158959,"children":160016},[160017,160018,160019],{"id":158962,"depth":106,"text":158963},{"id":159019,"depth":106,"text":159020},{"id":159076,"depth":106,"text":159077},{"id":159121,"depth":98,"text":159122},{"id":159212,"depth":98,"text":159213},{"id":159339,"depth":98,"text":159340},{"id":159469,"depth":98,"text":159470},{"id":159654,"depth":98,"text":159655},{"id":159890,"depth":98,"text":159891},{"id":159979,"depth":98,"text":159980},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158390,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160033,"title":160034,"body":160035,"description":1249,"extension":1250,"meta":161804,"navigation":1252,"path":161805,"seo":161806,"stem":161807,"__hash__":161808},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160036,"toc":161784},[160037,160040,160044,160050,160053,160070,160074,160076,160093,160095,160140,160142,160159,160163,160166,160232,160235,160253,160257,160418,160427,160431,160435,160440,160487,160489,160495,160499,160504,160551,160553,160559,160563,160568,160604,160607,160654,160658,160664,160722,160727,160758,160763,160767,160822,160825,160897,160900,160959,160963,160966,161041,161044,161048,161154,161157,161183,161187,161199,161268,161271,161363,161367,161369,161380,161382,161512,161516,161718,161726,161730,161760,161764,161781],[10,160038,160034],{"id":160039},"_4-循环语句",[14,160041,160043],{"id":160042},"_41-为什么需要循环","4.1 为什么需要循环",[19,160045,160046,160047,160049],{},"如果要输出 1 到 100，不应该写 100 行 ",[39,160048,795],{},"，而应该用循环。",[19,160051,160052],{},"循环适合处理重复任务：",[26,160054,160055,160058,160061,160064,160067],{},[29,160056,160057],{},"重复输出。",[29,160059,160060],{},"重复输入。",[29,160062,160063],{},"遍历数据。",[29,160065,160066],{},"持续执行菜单。",[29,160068,160069],{},"批量处理文件或数据。",[14,160071,160073],{"id":160072},"_42-while循环","4.2 while循环",[19,160075,6358],{},[60,160077,160079],{"className":121,"code":160078,"language":91,"meta":66,"style":66},"while 条件:\n    循环体\n",[39,160080,160081,160088],{"__ignoreMap":66},[84,160082,160083,160085],{"class":86,"line":87},[84,160084,109797],{"class":129},[84,160086,160087],{"class":154}," 条件:\n",[84,160089,160090],{"class":86,"line":98},[84,160091,160092],{"class":154},"    循环体\n",[19,160094,16305],{},[60,160096,160098],{"className":121,"code":160097,"language":91,"meta":66,"style":66},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[39,160099,160100,160108,160112,160124,160131],{"__ignoreMap":66},[84,160101,160102,160104,160106],{"class":86,"line":87},[84,160103,101294],{"class":154},[84,160105,867],{"class":129},[84,160107,56846],{"class":94},[84,160109,160110],{"class":86,"line":98},[84,160111,3578],{"emptyLinePlaceholder":1252},[84,160113,160114,160116,160118,160120,160122],{"class":86,"line":106},[84,160115,109797],{"class":129},[84,160117,10610],{"class":154},[84,160119,2769],{"class":129},[84,160121,3326],{"class":94},[84,160123,4917],{"class":154},[84,160125,160126,160128],{"class":86,"line":112},[84,160127,32453],{"class":94},[84,160129,160130],{"class":154},"(i)\n",[84,160132,160133,160136,160138],{"class":86,"line":425},[84,160134,160135],{"class":154},"    i ",[84,160137,10649],{"class":129},[84,160139,56846],{"class":94},[19,160141,82075],{},[26,160143,160144,160150,160153,160156],{},[29,160145,160146,160147,55],{},"判断条件 ",[39,160148,160149],{},"i \u003C= 5",[29,160151,160152],{},"条件成立，执行循环体。",[29,160154,160155],{},"执行完后回到条件判断。",[29,160157,160158],{},"条件不成立，退出循环。",[14,160160,160162],{"id":160161},"_43-while累加","4.3 while累加",[19,160164,160165],{},"计算 1 到 100 的和：",[60,160167,160169],{"className":121,"code":160168,"language":91,"meta":66,"style":66},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[39,160170,160171,160179,160187,160191,160203,160213,160221,160225],{"__ignoreMap":66},[84,160172,160173,160175,160177],{"class":86,"line":87},[84,160174,101294],{"class":154},[84,160176,867],{"class":129},[84,160178,56846],{"class":94},[84,160180,160181,160183,160185],{"class":86,"line":98},[84,160182,158160],{"class":154},[84,160184,867],{"class":129},[84,160186,48483],{"class":94},[84,160188,160189],{"class":86,"line":106},[84,160190,3578],{"emptyLinePlaceholder":1252},[84,160192,160193,160195,160197,160199,160201],{"class":86,"line":112},[84,160194,109797],{"class":129},[84,160196,10610],{"class":154},[84,160198,2769],{"class":129},[84,160200,6928],{"class":94},[84,160202,4917],{"class":154},[84,160204,160205,160208,160210],{"class":86,"line":425},[84,160206,160207],{"class":154},"    total ",[84,160209,10649],{"class":129},[84,160211,160212],{"class":154}," i\n",[84,160214,160215,160217,160219],{"class":86,"line":2395},[84,160216,160135],{"class":154},[84,160218,10649],{"class":129},[84,160220,56846],{"class":94},[84,160222,160223],{"class":86,"line":2401},[84,160224,3578],{"emptyLinePlaceholder":1252},[84,160226,160227,160229],{"class":86,"line":2492},[84,160228,730],{"class":94},[84,160230,160231],{"class":154},"(total)\n",[19,160233,160234],{},"核心思想：",[26,160236,160237,160242,160247],{},[29,160238,160239,160241],{},[39,160240,1751],{}," 控制循环次数。",[29,160243,160244,160246],{},[39,160245,158261],{}," 保存累加结果。",[29,160248,160249,160250,160252],{},"每轮循环都要更新 ",[39,160251,1751],{},"，否则可能死循环。",[14,160254,160256],{"id":160255},"_44-while猜数字","4.4 while猜数字",[60,160258,160260],{"className":121,"code":160259,"language":91,"meta":66,"style":66},"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",[39,160261,160262,160268,160272,160289,160297,160301,160309,160329,160338,160342,160354,160365,160375,160386,160392,160414],{"__ignoreMap":66},[84,160263,160264,160266],{"class":86,"line":87},[84,160265,31547],{"class":129},[84,160267,46480],{"class":154},[84,160269,160270],{"class":86,"line":98},[84,160271,3578],{"emptyLinePlaceholder":1252},[84,160273,160274,160276,160278,160281,160283,160285,160287],{"class":86,"line":106},[84,160275,159940],{"class":154},[84,160277,867],{"class":129},[84,160279,160280],{"class":154}," random.randint(",[84,160282,1529],{"class":94},[84,160284,846],{"class":154},[84,160286,821],{"class":94},[84,160288,162],{"class":154},[84,160290,160291,160293,160295],{"class":86,"line":112},[84,160292,1028],{"class":154},[84,160294,867],{"class":129},[84,160296,48483],{"class":94},[84,160298,160299],{"class":86,"line":425},[84,160300,3578],{"emptyLinePlaceholder":1252},[84,160302,160303,160305,160307],{"class":86,"line":2395},[84,160304,109797],{"class":129},[84,160306,96438],{"class":94},[84,160308,4917],{"class":154},[84,160310,160311,160314,160316,160318,160320,160322,160324,160327],{"class":86,"line":2401},[84,160312,160313],{"class":154},"    guess ",[84,160315,867],{"class":129},[84,160317,3560],{"class":94},[84,160319,155],{"class":154},[84,160321,54970],{"class":94},[84,160323,155],{"class":154},[84,160325,160326],{"class":158},"\"请输入1到100之间的数字:\"",[84,160328,31651],{"class":154},[84,160330,160331,160334,160336],{"class":86,"line":2492},[84,160332,160333],{"class":154},"    count ",[84,160335,10649],{"class":129},[84,160337,56846],{"class":94},[84,160339,160340],{"class":86,"line":2498},[84,160341,3578],{"emptyLinePlaceholder":1252},[84,160343,160344,160346,160349,160351],{"class":86,"line":2510},[84,160345,4279],{"class":129},[84,160347,160348],{"class":154}," guess ",[84,160350,2268],{"class":129},[84,160352,160353],{"class":154}," answer:\n",[84,160355,160356,160358,160360,160363],{"class":86,"line":2793},[84,160357,33604],{"class":94},[84,160359,155],{"class":154},[84,160361,160362],{"class":158},"\"猜大了\"",[84,160364,162],{"class":154},[84,160366,160367,160369,160371,160373],{"class":86,"line":2798},[84,160368,40445],{"class":129},[84,160370,160348],{"class":154},[84,160372,2218],{"class":129},[84,160374,160353],{"class":154},[84,160376,160377,160379,160381,160384],{"class":86,"line":2804},[84,160378,33604],{"class":94},[84,160380,155],{"class":154},[84,160382,160383],{"class":158},"\"猜小了\"",[84,160385,162],{"class":154},[84,160387,160388,160390],{"class":86,"line":2809},[84,160389,158922],{"class":129},[84,160391,4917],{"class":154},[84,160393,160394,160396,160398,160400,160403,160405,160407,160409,160412],{"class":86,"line":2823},[84,160395,33604],{"class":94},[84,160397,155],{"class":154},[84,160399,1372],{"class":129},[84,160401,160402],{"class":158},"\"猜对了，一共猜了",[84,160404,2204],{"class":94},[84,160406,85580],{"class":154},[84,160408,2254],{"class":94},[84,160410,160411],{"class":158},"次\"",[84,160413,162],{"class":154},[84,160415,160416],{"class":86,"line":2828},[84,160417,32780],{"class":129},[19,160419,160420,160423,160424,160426],{},[39,160421,160422],{},"while True"," 表示无限循环，通常配合 ",[39,160425,3231],{}," 使用。",[14,160428,160430],{"id":160429},"_45-break和continue","4.5 break和continue",[198,160432,160434],{"id":160433},"_451-break","4.5.1 break",[19,160436,160437,160439],{},[39,160438,3231],{}," 直接结束整个循环。",[60,160441,160443],{"className":121,"code":160442,"language":91,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[39,160444,160445,160465,160477,160481],{"__ignoreMap":66},[84,160446,160447,160449,160451,160453,160455,160457,160459,160461,160463],{"class":86,"line":87},[84,160448,4203],{"class":129},[84,160450,10610],{"class":154},[84,160452,27206],{"class":129},[84,160454,33596],{"class":94},[84,160456,155],{"class":154},[84,160458,1529],{"class":94},[84,160460,846],{"class":154},[84,160462,1654],{"class":94},[84,160464,31940],{"class":154},[84,160466,160467,160469,160471,160473,160475],{"class":86,"line":98},[84,160468,4279],{"class":129},[84,160470,10610],{"class":154},[84,160472,4127],{"class":129},[84,160474,79216],{"class":94},[84,160476,4917],{"class":154},[84,160478,160479],{"class":86,"line":106},[84,160480,32780],{"class":129},[84,160482,160483,160485],{"class":86,"line":112},[84,160484,32453],{"class":94},[84,160486,160130],{"class":154},[19,160488,780],{},[60,160490,160493],{"className":160491,"code":160492,"language":65,"meta":66},[63],"1\n2\n",[39,160494,160492],{"__ignoreMap":66},[198,160496,160498],{"id":160497},"_452-continue","4.5.2 continue",[19,160500,160501,160503],{},[39,160502,155572],{}," 跳过本轮剩余代码，进入下一轮循环。",[60,160505,160507],{"className":121,"code":160506,"language":91,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[39,160508,160509,160529,160541,160545],{"__ignoreMap":66},[84,160510,160511,160513,160515,160517,160519,160521,160523,160525,160527],{"class":86,"line":87},[84,160512,4203],{"class":129},[84,160514,10610],{"class":154},[84,160516,27206],{"class":129},[84,160518,33596],{"class":94},[84,160520,155],{"class":154},[84,160522,1529],{"class":94},[84,160524,846],{"class":154},[84,160526,1654],{"class":94},[84,160528,31940],{"class":154},[84,160530,160531,160533,160535,160537,160539],{"class":86,"line":98},[84,160532,4279],{"class":129},[84,160534,10610],{"class":154},[84,160536,4127],{"class":129},[84,160538,79216],{"class":94},[84,160540,4917],{"class":154},[84,160542,160543],{"class":86,"line":106},[84,160544,149412],{"class":129},[84,160546,160547,160549],{"class":86,"line":112},[84,160548,32453],{"class":94},[84,160550,160130],{"class":154},[19,160552,780],{},[60,160554,160557],{"className":160555,"code":160556,"language":65,"meta":66},[63],"1\n2\n4\n5\n",[39,160558,160556],{"__ignoreMap":66},[14,160560,160562],{"id":160561},"_46-for循环","4.6 for循环",[19,160564,160565,160567],{},[39,160566,4203],{}," 常用于遍历序列。",[60,160569,160571],{"className":121,"code":160570,"language":91,"meta":66,"style":66},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[39,160572,160573,160582,160586,160597],{"__ignoreMap":66},[84,160574,160575,160577,160579],{"class":86,"line":87},[84,160576,864],{"class":154},[84,160578,867],{"class":129},[84,160580,160581],{"class":158}," \"python\"\n",[84,160583,160584],{"class":86,"line":98},[84,160585,3578],{"emptyLinePlaceholder":1252},[84,160587,160588,160590,160593,160595],{"class":86,"line":106},[84,160589,4203],{"class":129},[84,160591,160592],{"class":154}," ch ",[84,160594,27206],{"class":129},[84,160596,159299],{"class":154},[84,160598,160599,160601],{"class":86,"line":112},[84,160600,32453],{"class":94},[84,160602,160603],{"class":154},"(ch)\n",[19,160605,160606],{},"遍历列表：",[60,160608,160610],{"className":121,"code":160609,"language":91,"meta":66,"style":66},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[39,160611,160612,160634,160638,160648],{"__ignoreMap":66},[84,160613,160614,160617,160619,160621,160623,160625,160627,160629,160632],{"class":86,"line":87},[84,160615,160616],{"class":154},"students ",[84,160618,867],{"class":129},[84,160620,53375],{"class":154},[84,160622,150788],{"class":158},[84,160624,846],{"class":154},[84,160626,151836],{"class":158},[84,160628,846],{"class":154},[84,160630,160631],{"class":158},"\"小刚\"",[84,160633,34398],{"class":154},[84,160635,160636],{"class":86,"line":98},[84,160637,3578],{"emptyLinePlaceholder":1252},[84,160639,160640,160642,160644,160646],{"class":86,"line":106},[84,160641,4203],{"class":129},[84,160643,153037],{"class":154},[84,160645,27206],{"class":129},[84,160647,153042],{"class":154},[84,160649,160650,160652],{"class":86,"line":112},[84,160651,32453],{"class":94},[84,160653,150942],{"class":154},[14,160655,160657],{"id":160656},"_47-range函数","4.7 range函数",[19,160659,160660,160663],{},[39,160661,160662],{},"range()"," 用于生成整数序列。",[60,160665,160667],{"className":121,"code":160666,"language":91,"meta":66,"style":66},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[39,160668,160669,160683,160701],{"__ignoreMap":66},[84,160670,160671,160673,160675,160677,160680],{"class":86,"line":87},[84,160672,34568],{"class":94},[84,160674,155],{"class":154},[84,160676,1629],{"class":94},[84,160678,160679],{"class":154},")          ",[84,160681,160682],{"class":1378},"# 0,1,2,3,4\n",[84,160684,160685,160687,160689,160691,160693,160695,160698],{"class":86,"line":98},[84,160686,34568],{"class":94},[84,160688,155],{"class":154},[84,160690,1529],{"class":94},[84,160692,846],{"class":154},[84,160694,1629],{"class":94},[84,160696,160697],{"class":154},")       ",[84,160699,160700],{"class":1378},"# 1,2,3,4\n",[84,160702,160703,160705,160707,160709,160711,160713,160715,160717,160719],{"class":86,"line":106},[84,160704,34568],{"class":94},[84,160706,155],{"class":154},[84,160708,1529],{"class":94},[84,160710,846],{"class":154},[84,160712,1756],{"class":94},[84,160714,846],{"class":154},[84,160716,1397],{"class":94},[84,160718,156561],{"class":154},[84,160720,160721],{"class":1378},"# 1,3,5,7,9\n",[19,160723,160724,160725,720],{},"配合 ",[39,160726,4203],{},[60,160728,160730],{"className":121,"code":160729,"language":91,"meta":66,"style":66},"for i in range(1, 6):\n    print(i)\n",[39,160731,160732,160752],{"__ignoreMap":66},[84,160733,160734,160736,160738,160740,160742,160744,160746,160748,160750],{"class":86,"line":87},[84,160735,4203],{"class":129},[84,160737,10610],{"class":154},[84,160739,27206],{"class":129},[84,160741,33596],{"class":94},[84,160743,155],{"class":154},[84,160745,1529],{"class":94},[84,160747,846],{"class":154},[84,160749,1654],{"class":94},[84,160751,31940],{"class":154},[84,160753,160754,160756],{"class":86,"line":98},[84,160755,32453],{"class":94},[84,160757,160130],{"class":154},[19,160759,10197,160760,160762],{},[39,160761,34568],{}," 的结束值不包含在内。",[14,160764,160766],{"id":160765},"_48-for循环求和","4.8 for循环求和",[60,160768,160770],{"className":121,"code":160769,"language":91,"meta":66,"style":66},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[39,160771,160772,160780,160784,160804,160812,160816],{"__ignoreMap":66},[84,160773,160774,160776,160778],{"class":86,"line":87},[84,160775,158160],{"class":154},[84,160777,867],{"class":129},[84,160779,48483],{"class":94},[84,160781,160782],{"class":86,"line":98},[84,160783,3578],{"emptyLinePlaceholder":1252},[84,160785,160786,160788,160790,160792,160794,160796,160798,160800,160802],{"class":86,"line":106},[84,160787,4203],{"class":129},[84,160789,10610],{"class":154},[84,160791,27206],{"class":129},[84,160793,33596],{"class":94},[84,160795,155],{"class":154},[84,160797,1529],{"class":94},[84,160799,846],{"class":154},[84,160801,1647],{"class":94},[84,160803,31940],{"class":154},[84,160805,160806,160808,160810],{"class":86,"line":112},[84,160807,160207],{"class":154},[84,160809,10649],{"class":129},[84,160811,160212],{"class":154},[84,160813,160814],{"class":86,"line":425},[84,160815,3578],{"emptyLinePlaceholder":1252},[84,160817,160818,160820],{"class":86,"line":2395},[84,160819,730],{"class":94},[84,160821,160231],{"class":154},[19,160823,160824],{},"求偶数和：",[60,160826,160828],{"className":121,"code":160827,"language":91,"meta":66,"style":66},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[39,160829,160830,160838,160842,160862,160878,160887,160891],{"__ignoreMap":66},[84,160831,160832,160834,160836],{"class":86,"line":87},[84,160833,158160],{"class":154},[84,160835,867],{"class":129},[84,160837,48483],{"class":94},[84,160839,160840],{"class":86,"line":98},[84,160841,3578],{"emptyLinePlaceholder":1252},[84,160843,160844,160846,160848,160850,160852,160854,160856,160858,160860],{"class":86,"line":106},[84,160845,4203],{"class":129},[84,160847,10610],{"class":154},[84,160849,27206],{"class":129},[84,160851,33596],{"class":94},[84,160853,155],{"class":154},[84,160855,1529],{"class":94},[84,160857,846],{"class":154},[84,160859,1647],{"class":94},[84,160861,31940],{"class":154},[84,160863,160864,160866,160868,160870,160872,160874,160876],{"class":86,"line":112},[84,160865,4279],{"class":129},[84,160867,10610],{"class":154},[84,160869,1638],{"class":129},[84,160871,15925],{"class":94},[84,160873,102697],{"class":129},[84,160875,5271],{"class":94},[84,160877,4917],{"class":154},[84,160879,160880,160883,160885],{"class":86,"line":425},[84,160881,160882],{"class":154},"        total ",[84,160884,10649],{"class":129},[84,160886,160212],{"class":154},[84,160888,160889],{"class":86,"line":2395},[84,160890,3578],{"emptyLinePlaceholder":1252},[84,160892,160893,160895],{"class":86,"line":2401},[84,160894,730],{"class":94},[84,160896,160231],{"class":154},[19,160898,160899],{},"也可以：",[60,160901,160903],{"className":121,"code":160902,"language":91,"meta":66,"style":66},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[39,160904,160905,160913,160917,160941,160949,160953],{"__ignoreMap":66},[84,160906,160907,160909,160911],{"class":86,"line":87},[84,160908,158160],{"class":154},[84,160910,867],{"class":129},[84,160912,48483],{"class":94},[84,160914,160915],{"class":86,"line":98},[84,160916,3578],{"emptyLinePlaceholder":1252},[84,160918,160919,160921,160923,160925,160927,160929,160931,160933,160935,160937,160939],{"class":86,"line":106},[84,160920,4203],{"class":129},[84,160922,10610],{"class":154},[84,160924,27206],{"class":129},[84,160926,33596],{"class":94},[84,160928,155],{"class":154},[84,160930,1397],{"class":94},[84,160932,846],{"class":154},[84,160934,1647],{"class":94},[84,160936,846],{"class":154},[84,160938,1397],{"class":94},[84,160940,31940],{"class":154},[84,160942,160943,160945,160947],{"class":86,"line":112},[84,160944,160207],{"class":154},[84,160946,10649],{"class":129},[84,160948,160212],{"class":154},[84,160950,160951],{"class":86,"line":425},[84,160952,3578],{"emptyLinePlaceholder":1252},[84,160954,160955,160957],{"class":86,"line":2395},[84,160956,730],{"class":94},[84,160958,160231],{"class":154},[14,160960,160962],{"id":160961},"_49-循环嵌套","4.9 循环嵌套",[19,160964,160965],{},"嵌套循环就是循环里面再写循环。",[60,160967,160969],{"className":121,"code":160968,"language":91,"meta":66,"style":66},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[39,160970,160971,160991,161011],{"__ignoreMap":66},[84,160972,160973,160975,160977,160979,160981,160983,160985,160987,160989],{"class":86,"line":87},[84,160974,4203],{"class":129},[84,160976,10610],{"class":154},[84,160978,27206],{"class":129},[84,160980,33596],{"class":94},[84,160982,155],{"class":154},[84,160984,1529],{"class":94},[84,160986,846],{"class":154},[84,160988,1604],{"class":94},[84,160990,31940],{"class":154},[84,160992,160993,160995,160997,160999,161001,161003,161005,161007,161009],{"class":86,"line":98},[84,160994,4379],{"class":129},[84,160996,10672],{"class":154},[84,160998,27206],{"class":129},[84,161000,33596],{"class":94},[84,161002,155],{"class":154},[84,161004,1529],{"class":94},[84,161006,846],{"class":154},[84,161008,1604],{"class":94},[84,161010,31940],{"class":154},[84,161012,161013,161015,161017,161019,161022,161024,161026,161028,161031,161033,161035,161037,161039],{"class":86,"line":106},[84,161014,33604],{"class":94},[84,161016,155],{"class":154},[84,161018,1372],{"class":129},[84,161020,161021],{"class":158},"\"i=",[84,161023,2204],{"class":94},[84,161025,1751],{"class":154},[84,161027,2254],{"class":94},[84,161029,161030],{"class":158},", j=",[84,161032,2204],{"class":94},[84,161034,1776],{"class":154},[84,161036,2254],{"class":94},[84,161038,1562],{"class":158},[84,161040,162],{"class":154},[19,161042,161043],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161045,161047],{"id":161046},"_410-九九乘法表","4.10 九九乘法表",[60,161049,161051],{"className":121,"code":161050,"language":91,"meta":66,"style":66},"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",[39,161052,161053,161073,161096,161148],{"__ignoreMap":66},[84,161054,161055,161057,161059,161061,161063,161065,161067,161069,161071],{"class":86,"line":87},[84,161056,4203],{"class":129},[84,161058,10610],{"class":154},[84,161060,27206],{"class":129},[84,161062,33596],{"class":94},[84,161064,155],{"class":154},[84,161066,1529],{"class":94},[84,161068,846],{"class":154},[84,161070,1756],{"class":94},[84,161072,31940],{"class":154},[84,161074,161075,161077,161079,161081,161083,161085,161087,161090,161092,161094],{"class":86,"line":98},[84,161076,4379],{"class":129},[84,161078,10672],{"class":154},[84,161080,27206],{"class":129},[84,161082,33596],{"class":94},[84,161084,155],{"class":154},[84,161086,1529],{"class":94},[84,161088,161089],{"class":154},", i ",[84,161091,1790],{"class":129},[84,161093,133],{"class":94},[84,161095,31940],{"class":154},[84,161097,161098,161100,161102,161104,161106,161108,161110,161112,161114,161116,161118,161120,161122,161124,161126,161128,161130,161132,161134,161136,161138,161140,161142,161144,161146],{"class":86,"line":106},[84,161099,33604],{"class":94},[84,161101,155],{"class":154},[84,161103,1372],{"class":129},[84,161105,1562],{"class":158},[84,161107,2204],{"class":94},[84,161109,1776],{"class":154},[84,161111,2254],{"class":94},[84,161113,1043],{"class":158},[84,161115,2204],{"class":94},[84,161117,1751],{"class":154},[84,161119,2254],{"class":94},[84,161121,867],{"class":158},[84,161123,2204],{"class":94},[84,161125,101294],{"class":154},[84,161127,1043],{"class":129},[84,161129,4588],{"class":154},[84,161131,2254],{"class":94},[84,161133,1562],{"class":158},[84,161135,846],{"class":154},[84,161137,957],{"class":928},[84,161139,867],{"class":129},[84,161141,1562],{"class":158},[84,161143,2411],{"class":94},[84,161145,1562],{"class":158},[84,161147,162],{"class":154},[84,161149,161150,161152],{"class":86,"line":112},[84,161151,32453],{"class":94},[84,161153,183],{"class":154},[19,161155,161156],{},"关键点：",[26,161158,161159,161165,161171,161177],{},[29,161160,161161,161162,161164],{},"外层 ",[39,161163,1751],{}," 控制行。",[29,161166,161167,161168,161170],{},"内层 ",[39,161169,1776],{}," 控制列。",[29,161172,161173,161174,161176],{},"每行结束后用 ",[39,161175,795],{}," 换行。",[29,161178,161179,161182],{},[39,161180,161181],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161184,161186],{"id":161185},"_411-循环else","4.11 循环else",[19,161188,161189,161190,161192,161193,161195,161196,161198],{},"Python 的循环可以带 ",[39,161191,2882],{},"。当循环正常结束时执行 ",[39,161194,2882],{},"，如果被 ",[39,161197,3231],{}," 打断，则不执行。",[60,161200,161202],{"className":121,"code":161201,"language":91,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[39,161203,161204,161224,161236,161247,161251,161257],{"__ignoreMap":66},[84,161205,161206,161208,161210,161212,161214,161216,161218,161220,161222],{"class":86,"line":87},[84,161207,4203],{"class":129},[84,161209,10610],{"class":154},[84,161211,27206],{"class":129},[84,161213,33596],{"class":94},[84,161215,155],{"class":154},[84,161217,1529],{"class":94},[84,161219,846],{"class":154},[84,161221,1654],{"class":94},[84,161223,31940],{"class":154},[84,161225,161226,161228,161230,161232,161234],{"class":86,"line":98},[84,161227,4279],{"class":129},[84,161229,10610],{"class":154},[84,161231,4127],{"class":129},[84,161233,994],{"class":94},[84,161235,4917],{"class":154},[84,161237,161238,161240,161242,161245],{"class":86,"line":106},[84,161239,33604],{"class":94},[84,161241,155],{"class":154},[84,161243,161244],{"class":158},"\"找到了\"",[84,161246,162],{"class":154},[84,161248,161249],{"class":86,"line":112},[84,161250,32780],{"class":129},[84,161252,161253,161255],{"class":86,"line":425},[84,161254,2882],{"class":129},[84,161256,4917],{"class":154},[84,161258,161259,161261,161263,161266],{"class":86,"line":2395},[84,161260,32453],{"class":94},[84,161262,155],{"class":154},[84,161264,161265],{"class":158},"\"没找到\"",[84,161267,162],{"class":154},[19,161269,161270],{},"常用于搜索。",[60,161272,161274],{"className":121,"code":161273,"language":91,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[39,161275,161276,161297,161306,161310,161322,161333,161343,161347,161353],{"__ignoreMap":66},[84,161277,161278,161281,161283,161285,161287,161289,161291,161293,161295],{"class":86,"line":87},[84,161279,161280],{"class":154},"names ",[84,161282,867],{"class":129},[84,161284,53375],{"class":154},[84,161286,150788],{"class":158},[84,161288,846],{"class":154},[84,161290,151836],{"class":158},[84,161292,846],{"class":154},[84,161294,160631],{"class":158},[84,161296,34398],{"class":154},[84,161298,161299,161301,161303],{"class":86,"line":98},[84,161300,112712],{"class":154},[84,161302,867],{"class":129},[84,161304,161305],{"class":158}," \"小李\"\n",[84,161307,161308],{"class":86,"line":106},[84,161309,3578],{"emptyLinePlaceholder":1252},[84,161311,161312,161314,161317,161319],{"class":86,"line":112},[84,161313,4203],{"class":129},[84,161315,161316],{"class":154}," name ",[84,161318,27206],{"class":129},[84,161320,161321],{"class":154}," names:\n",[84,161323,161324,161326,161328,161330],{"class":86,"line":425},[84,161325,4279],{"class":129},[84,161327,161316],{"class":154},[84,161329,4127],{"class":129},[84,161331,161332],{"class":154}," target:\n",[84,161334,161335,161337,161339,161341],{"class":86,"line":2395},[84,161336,33604],{"class":94},[84,161338,155],{"class":154},[84,161340,161244],{"class":158},[84,161342,162],{"class":154},[84,161344,161345],{"class":86,"line":2401},[84,161346,32780],{"class":129},[84,161348,161349,161351],{"class":86,"line":2492},[84,161350,2882],{"class":129},[84,161352,4917],{"class":154},[84,161354,161355,161357,161359,161361],{"class":86,"line":2498},[84,161356,32453],{"class":94},[84,161358,155],{"class":154},[84,161360,161265],{"class":158},[84,161362,162],{"class":154},[14,161364,161366],{"id":161365},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161368,124417],{},[26,161370,161371,161374,161377],{},[29,161372,161373],{},"用户最多输入 3 次密码。",[29,161375,161376],{},"密码正确则登录成功。",[29,161378,161379],{},"3 次都错误则锁定账号。",[19,161381,11207],{},[60,161383,161385],{"className":121,"code":161384,"language":91,"meta":66,"style":66},"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",[39,161386,161387,161397,161401,161417,161433,161437,161449,161460,161464,161470,161495,161501],{"__ignoreMap":66},[84,161388,161389,161392,161394],{"class":86,"line":87},[84,161390,161391],{"class":154},"password ",[84,161393,867],{"class":129},[84,161395,161396],{"class":158}," \"123456\"\n",[84,161398,161399],{"class":86,"line":98},[84,161400,3578],{"emptyLinePlaceholder":1252},[84,161402,161403,161405,161407,161409,161411,161413,161415],{"class":86,"line":106},[84,161404,4203],{"class":129},[84,161406,10610],{"class":154},[84,161408,27206],{"class":129},[84,161410,33596],{"class":94},[84,161412,155],{"class":154},[84,161414,1391],{"class":94},[84,161416,31940],{"class":154},[84,161418,161419,161422,161424,161426,161428,161431],{"class":86,"line":112},[84,161420,161421],{"class":154},"    user_password ",[84,161423,867],{"class":129},[84,161425,61751],{"class":94},[84,161427,155],{"class":154},[84,161429,161430],{"class":158},"\"请输入密码:\"",[84,161432,162],{"class":154},[84,161434,161435],{"class":86,"line":425},[84,161436,3578],{"emptyLinePlaceholder":1252},[84,161438,161439,161441,161444,161446],{"class":86,"line":2395},[84,161440,4279],{"class":129},[84,161442,161443],{"class":154}," user_password ",[84,161445,4127],{"class":129},[84,161447,161448],{"class":154}," password:\n",[84,161450,161451,161453,161455,161458],{"class":86,"line":2401},[84,161452,33604],{"class":94},[84,161454,155],{"class":154},[84,161456,161457],{"class":158},"\"登录成功\"",[84,161459,162],{"class":154},[84,161461,161462],{"class":86,"line":2492},[84,161463,32780],{"class":129},[84,161465,161466,161468],{"class":86,"line":2498},[84,161467,158922],{"class":129},[84,161469,4917],{"class":154},[84,161471,161472,161474,161476,161478,161481,161484,161486,161488,161490,161493],{"class":86,"line":2510},[84,161473,33604],{"class":94},[84,161475,155],{"class":154},[84,161477,1372],{"class":129},[84,161479,161480],{"class":158},"\"密码错误，还剩",[84,161482,161483],{"class":94},"{2",[84,161485,53420],{"class":129},[84,161487,4210],{"class":154},[84,161489,2254],{"class":94},[84,161491,161492],{"class":158},"次机会\"",[84,161494,162],{"class":154},[84,161496,161497,161499],{"class":86,"line":2793},[84,161498,2882],{"class":129},[84,161500,4917],{"class":154},[84,161502,161503,161505,161507,161510],{"class":86,"line":2798},[84,161504,32453],{"class":94},[84,161506,155],{"class":154},[84,161508,161509],{"class":158},"\"账号已锁定\"",[84,161511,162],{"class":154},[14,161513,161515],{"id":161514},"_413-小案例菜单程序","4.13 小案例：菜单程序",[60,161517,161519],{"className":121,"code":161518,"language":91,"meta":66,"style":66},"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",[39,161520,161521,161529,161540,161551,161562,161573,161584,161588,161603,161607,161619,161630,161642,161653,161665,161676,161688,161698,161702,161708],{"__ignoreMap":66},[84,161522,161523,161525,161527],{"class":86,"line":87},[84,161524,109797],{"class":129},[84,161526,96438],{"class":94},[84,161528,4917],{"class":154},[84,161530,161531,161533,161535,161538],{"class":86,"line":98},[84,161532,32453],{"class":94},[84,161534,155],{"class":154},[84,161536,161537],{"class":158},"\"====== 菜单 ======\"",[84,161539,162],{"class":154},[84,161541,161542,161544,161546,161549],{"class":86,"line":106},[84,161543,32453],{"class":94},[84,161545,155],{"class":154},[84,161547,161548],{"class":158},"\"1. 查询余额\"",[84,161550,162],{"class":154},[84,161552,161553,161555,161557,161560],{"class":86,"line":112},[84,161554,32453],{"class":94},[84,161556,155],{"class":154},[84,161558,161559],{"class":158},"\"2. 存款\"",[84,161561,162],{"class":154},[84,161563,161564,161566,161568,161571],{"class":86,"line":425},[84,161565,32453],{"class":94},[84,161567,155],{"class":154},[84,161569,161570],{"class":158},"\"3. 取款\"",[84,161572,162],{"class":154},[84,161574,161575,161577,161579,161582],{"class":86,"line":2395},[84,161576,32453],{"class":94},[84,161578,155],{"class":154},[84,161580,161581],{"class":158},"\"0. 退出\"",[84,161583,162],{"class":154},[84,161585,161586],{"class":86,"line":2401},[84,161587,3578],{"emptyLinePlaceholder":1252},[84,161589,161590,161593,161595,161597,161599,161601],{"class":86,"line":2492},[84,161591,161592],{"class":154},"    choice ",[84,161594,867],{"class":129},[84,161596,61751],{"class":94},[84,161598,155],{"class":154},[84,161600,153973],{"class":158},[84,161602,162],{"class":154},[84,161604,161605],{"class":86,"line":2498},[84,161606,3578],{"emptyLinePlaceholder":1252},[84,161608,161609,161611,161613,161615,161617],{"class":86,"line":2510},[84,161610,4279],{"class":129},[84,161612,153986],{"class":154},[84,161614,4127],{"class":129},[84,161616,153991],{"class":158},[84,161618,4917],{"class":154},[84,161620,161621,161623,161625,161628],{"class":86,"line":2793},[84,161622,33604],{"class":94},[84,161624,155],{"class":154},[84,161626,161627],{"class":158},"\"余额为1000元\"",[84,161629,162],{"class":154},[84,161631,161632,161634,161636,161638,161640],{"class":86,"line":2798},[84,161633,40445],{"class":129},[84,161635,153986],{"class":154},[84,161637,4127],{"class":129},[84,161639,154010],{"class":158},[84,161641,4917],{"class":154},[84,161643,161644,161646,161648,161651],{"class":86,"line":2804},[84,161645,33604],{"class":94},[84,161647,155],{"class":154},[84,161649,161650],{"class":158},"\"存款功能\"",[84,161652,162],{"class":154},[84,161654,161655,161657,161659,161661,161663],{"class":86,"line":2809},[84,161656,40445],{"class":129},[84,161658,153986],{"class":154},[84,161660,4127],{"class":129},[84,161662,154028],{"class":158},[84,161664,4917],{"class":154},[84,161666,161667,161669,161671,161674],{"class":86,"line":2823},[84,161668,33604],{"class":94},[84,161670,155],{"class":154},[84,161672,161673],{"class":158},"\"取款功能\"",[84,161675,162],{"class":154},[84,161677,161678,161680,161682,161684,161686],{"class":86,"line":2828},[84,161679,40445],{"class":129},[84,161681,153986],{"class":154},[84,161683,4127],{"class":129},[84,161685,154082],{"class":158},[84,161687,4917],{"class":154},[84,161689,161690,161692,161694,161696],{"class":86,"line":2834},[84,161691,33604],{"class":94},[84,161693,155],{"class":154},[84,161695,154093],{"class":158},[84,161697,162],{"class":154},[84,161699,161700],{"class":86,"line":2855},[84,161701,32780],{"class":129},[84,161703,161704,161706],{"class":86,"line":2860},[84,161705,158922],{"class":129},[84,161707,4917],{"class":154},[84,161709,161710,161712,161714,161716],{"class":86,"line":2874},[84,161711,33604],{"class":94},[84,161713,155],{"class":154},[84,161715,154114],{"class":158},[84,161717,162],{"class":154},[19,161719,161720,161721,161723,161724,55],{},"菜单类程序通常使用 ",[39,161722,160422],{},"，用户选择退出时 ",[39,161725,3231],{},[14,161727,161729],{"id":161728},"_414-易错点","4.14 易错点",[26,161731,161732,161737,161743,161751,161757],{},[29,161733,161734,161736],{},[39,161735,109797],{}," 循环必须更新控制变量。",[29,161738,161739,161742],{},[39,161740,161741],{},"range(1, 10)"," 不包含 10。",[29,161744,161745,161747,161748,161750],{},[39,161746,3231],{}," 结束整个循环，",[39,161749,155572],{}," 只跳过本轮。",[29,161752,161753,161754,161756],{},"嵌套循环中，",[39,161755,3231],{}," 只跳出当前所在的一层循环。",[29,161758,161759],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161761,161763],{"id":161762},"_415-本章练习","4.15 本章练习",[26,161765,161766,161769,161772,161775,161778],{},[29,161767,161768],{},"输出 1 到 100。",[29,161770,161771],{},"计算 1 到 100 的偶数和。",[29,161773,161774],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,161776,161777],{},"编写猜数字游戏，限制最多猜 7 次。",[29,161779,161780],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1222,161782,161783],{},"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":66,"searchDepth":98,"depth":98,"links":161785},[161786,161787,161788,161789,161790,161794,161795,161796,161797,161798,161799,161800,161801,161802,161803],{"id":160042,"depth":98,"text":160043},{"id":160072,"depth":98,"text":160073},{"id":160161,"depth":98,"text":160162},{"id":160255,"depth":98,"text":160256},{"id":160429,"depth":98,"text":160430,"children":161791},[161792,161793],{"id":160433,"depth":106,"text":160434},{"id":160497,"depth":106,"text":160498},{"id":160561,"depth":98,"text":160562},{"id":160656,"depth":98,"text":160657},{"id":160765,"depth":98,"text":160766},{"id":160961,"depth":98,"text":160962},{"id":161046,"depth":98,"text":161047},{"id":161185,"depth":98,"text":161186},{"id":161365,"depth":98,"text":161366},{"id":161514,"depth":98,"text":161515},{"id":161728,"depth":98,"text":161729},{"id":161762,"depth":98,"text":161763},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160034,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161810,"title":161811,"body":161812,"description":1249,"extension":1250,"meta":163817,"navigation":1252,"path":163818,"seo":163819,"stem":163820,"__hash__":163821},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161813,"toc":163797},[161814,161817,161821,161824,161827,161841,161844,161858,161862,161864,161883,161885,161932,161934,161948,161952,162026,162029,162033,162036,162095,162103,162106,162159,162162,162166,162171,162226,162234,162284,162288,162293,162301,162400,162406,162410,162415,162418,162429,162470,162483,162487,162490,162526,162529,162542,162545,162605,162609,162613,162616,162667,162671,162674,162721,162727,162793,162796,162800,162803,162919,162922,162926,162929,163035,163039,163042,163080,163083,163125,163128,163188,163191,163195,163659,163662,163666,163693,163699,163760,163764,163794],[10,161815,161811],{"id":161816},"_5-函数基础",[14,161818,161820],{"id":161819},"_51-为什么需要函数","5.1 为什么需要函数",[19,161822,161823],{},"函数用于封装一段可以重复使用的代码。",[19,161825,161826],{},"不使用函数的问题：",[26,161828,161829,161832,161835,161838],{},[29,161830,161831],{},"重复代码多。",[29,161833,161834],{},"修改逻辑时容易漏改。",[29,161836,161837],{},"主流程不清晰。",[29,161839,161840],{},"程序越写越长，难以维护。",[19,161842,161843],{},"使用函数后的好处：",[26,161845,161846,161849,161852,161855],{},[29,161847,161848],{},"提高复用性。",[29,161850,161851],{},"提高可读性。",[29,161853,161854],{},"便于调试。",[29,161856,161857],{},"便于分工。",[14,161859,161861],{"id":161860},"_52-函数定义","5.2 函数定义",[19,161863,6358],{},[60,161865,161867],{"className":121,"code":161866,"language":91,"meta":66,"style":66},"def 函数名():\n    函数体\n",[39,161868,161869,161878],{"__ignoreMap":66},[84,161870,161871,161873,161876],{"class":86,"line":87},[84,161872,33100],{"class":129},[84,161874,161875],{"class":90}," 函数名",[84,161877,33106],{"class":154},[84,161879,161880],{"class":86,"line":98},[84,161881,161882],{"class":154},"    函数体\n",[19,161884,16305],{},[60,161886,161888],{"className":121,"code":161887,"language":91,"meta":66,"style":66},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[39,161889,161890,161899,161909,161919,161923,161927],{"__ignoreMap":66},[84,161891,161892,161894,161897],{"class":86,"line":87},[84,161893,33100],{"class":129},[84,161895,161896],{"class":90}," say_hello",[84,161898,33106],{"class":154},[84,161900,161901,161903,161905,161907],{"class":86,"line":98},[84,161902,32453],{"class":94},[84,161904,155],{"class":154},[84,161906,810],{"class":158},[84,161908,162],{"class":154},[84,161910,161911,161913,161915,161917],{"class":86,"line":106},[84,161912,32453],{"class":94},[84,161914,155],{"class":154},[84,161916,973],{"class":158},[84,161918,162],{"class":154},[84,161920,161921],{"class":86,"line":112},[84,161922,3578],{"emptyLinePlaceholder":1252},[84,161924,161925],{"class":86,"line":425},[84,161926,3578],{"emptyLinePlaceholder":1252},[84,161928,161929],{"class":86,"line":2395},[84,161930,161931],{"class":154},"say_hello()\n",[19,161933,10197],{},[26,161935,161936,161939,161942,161945],{},[29,161937,161938],{},"函数必须先定义，再调用。",[29,161940,161941],{},"函数名遵循变量命名规则。",[29,161943,161944],{},"函数体需要缩进。",[29,161946,161947],{},"函数不调用就不会执行。",[14,161949,161951],{"id":161950},"_53-函数调用","5.3 函数调用",[60,161953,161955],{"className":121,"code":161954,"language":91,"meta":66,"style":66},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[39,161956,161957,161966,161977,161988,161999,162009,162013,162017,162022],{"__ignoreMap":66},[84,161958,161959,161961,161964],{"class":86,"line":87},[84,161960,33100],{"class":129},[84,161962,161963],{"class":90}," print_menu",[84,161965,33106],{"class":154},[84,161967,161968,161970,161972,161975],{"class":86,"line":98},[84,161969,32453],{"class":94},[84,161971,155],{"class":154},[84,161973,161974],{"class":158},"\"1. 查询\"",[84,161976,162],{"class":154},[84,161978,161979,161981,161983,161986],{"class":86,"line":106},[84,161980,32453],{"class":94},[84,161982,155],{"class":154},[84,161984,161985],{"class":158},"\"2. 添加\"",[84,161987,162],{"class":154},[84,161989,161990,161992,161994,161997],{"class":86,"line":112},[84,161991,32453],{"class":94},[84,161993,155],{"class":154},[84,161995,161996],{"class":158},"\"3. 删除\"",[84,161998,162],{"class":154},[84,162000,162001,162003,162005,162007],{"class":86,"line":425},[84,162002,32453],{"class":94},[84,162004,155],{"class":154},[84,162006,161581],{"class":158},[84,162008,162],{"class":154},[84,162010,162011],{"class":86,"line":2395},[84,162012,3578],{"emptyLinePlaceholder":1252},[84,162014,162015],{"class":86,"line":2401},[84,162016,3578],{"emptyLinePlaceholder":1252},[84,162018,162019],{"class":86,"line":2492},[84,162020,162021],{"class":154},"print_menu()\n",[84,162023,162024],{"class":86,"line":2498},[84,162025,162021],{"class":154},[19,162027,162028],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162030,162032],{"id":162031},"_54-参数","5.4 参数",[19,162034,162035],{},"参数用于向函数传递数据。",[60,162037,162039],{"className":121,"code":162038,"language":91,"meta":66,"style":66},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[39,162040,162041,162050,162070,162074,162078,162087],{"__ignoreMap":66},[84,162042,162043,162045,162047],{"class":86,"line":87},[84,162044,33100],{"class":129},[84,162046,161896],{"class":90},[84,162048,162049],{"class":154},"(name):\n",[84,162051,162052,162054,162056,162058,162060,162062,162064,162066,162068],{"class":86,"line":98},[84,162053,32453],{"class":94},[84,162055,155],{"class":154},[84,162057,1372],{"class":129},[84,162059,157954],{"class":158},[84,162061,2204],{"class":94},[84,162063,80956],{"class":154},[84,162065,2254],{"class":94},[84,162067,1562],{"class":158},[84,162069,162],{"class":154},[84,162071,162072],{"class":86,"line":106},[84,162073,3578],{"emptyLinePlaceholder":1252},[84,162075,162076],{"class":86,"line":112},[84,162077,3578],{"emptyLinePlaceholder":1252},[84,162079,162080,162083,162085],{"class":86,"line":425},[84,162081,162082],{"class":154},"say_hello(",[84,162084,150788],{"class":158},[84,162086,162],{"class":154},[84,162088,162089,162091,162093],{"class":86,"line":2395},[84,162090,162082],{"class":154},[84,162092,151836],{"class":158},[84,162094,162],{"class":154},[19,162096,162097,162099,162100,162102],{},[39,162098,80956],{}," 是形参，",[39,162101,150788],{}," 是实参。",[19,162104,162105],{},"多个参数：",[60,162107,162109],{"className":121,"code":162108,"language":91,"meta":66,"style":66},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[39,162110,162111,162119,162132,162138,162142,162146],{"__ignoreMap":66},[84,162112,162113,162115,162117],{"class":86,"line":87},[84,162114,33100],{"class":129},[84,162116,6384],{"class":90},[84,162118,151993],{"class":154},[84,162120,162121,162124,162126,162128,162130],{"class":86,"line":98},[84,162122,162123],{"class":154},"    result ",[84,162125,867],{"class":129},[84,162127,12041],{"class":154},[84,162129,1790],{"class":129},[84,162131,152004],{"class":154},[84,162133,162134,162136],{"class":86,"line":106},[84,162135,32453],{"class":94},[84,162137,77731],{"class":154},[84,162139,162140],{"class":86,"line":112},[84,162141,3578],{"emptyLinePlaceholder":1252},[84,162143,162144],{"class":86,"line":425},[84,162145,3578],{"emptyLinePlaceholder":1252},[84,162147,162148,162151,162153,162155,162157],{"class":86,"line":2395},[84,162149,162150],{"class":154},"add(",[84,162152,1756],{"class":94},[84,162154,846],{"class":154},[84,162156,2008],{"class":94},[84,162158,162],{"class":154},[19,162160,162161],{},"调用时参数数量必须匹配。",[14,162163,162165],{"id":162164},"_55-返回值","5.5 返回值",[19,162167,162168,162170],{},[39,162169,18216],{}," 用于把函数内部的结果返回给调用者。",[60,162172,162174],{"className":121,"code":162173,"language":91,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[39,162175,162176,162184,162194,162198,162202,162220],{"__ignoreMap":66},[84,162177,162178,162180,162182],{"class":86,"line":87},[84,162179,33100],{"class":129},[84,162181,6384],{"class":90},[84,162183,151993],{"class":154},[84,162185,162186,162188,162190,162192],{"class":86,"line":98},[84,162187,5268],{"class":129},[84,162189,12041],{"class":154},[84,162191,1790],{"class":129},[84,162193,152004],{"class":154},[84,162195,162196],{"class":86,"line":106},[84,162197,3578],{"emptyLinePlaceholder":1252},[84,162199,162200],{"class":86,"line":112},[84,162201,3578],{"emptyLinePlaceholder":1252},[84,162203,162204,162207,162209,162212,162214,162216,162218],{"class":86,"line":425},[84,162205,162206],{"class":154},"result ",[84,162208,867],{"class":129},[84,162210,162211],{"class":154}," add(",[84,162213,1756],{"class":94},[84,162215,846],{"class":154},[84,162217,2008],{"class":94},[84,162219,162],{"class":154},[84,162221,162222,162224],{"class":86,"line":2395},[84,162223,730],{"class":94},[84,162225,77731],{"class":154},[19,162227,162228,162229,162231,162232,55],{},"如果函数没有写 ",[39,162230,18216],{},"，默认返回 ",[39,162233,96832],{},[60,162235,162237],{"className":121,"code":162236,"language":91,"meta":66,"style":66},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[39,162238,162239,162247,162257,162261,162265,162274],{"__ignoreMap":66},[84,162240,162241,162243,162245],{"class":86,"line":87},[84,162242,33100],{"class":129},[84,162244,161896],{"class":90},[84,162246,33106],{"class":154},[84,162248,162249,162251,162253,162255],{"class":86,"line":98},[84,162250,32453],{"class":94},[84,162252,155],{"class":154},[84,162254,810],{"class":158},[84,162256,162],{"class":154},[84,162258,162259],{"class":86,"line":106},[84,162260,3578],{"emptyLinePlaceholder":1252},[84,162262,162263],{"class":86,"line":112},[84,162264,3578],{"emptyLinePlaceholder":1252},[84,162266,162267,162269,162271],{"class":86,"line":425},[84,162268,162206],{"class":154},[84,162270,867],{"class":129},[84,162272,162273],{"class":154}," say_hello()\n",[84,162275,162276,162278,162281],{"class":86,"line":2395},[84,162277,730],{"class":94},[84,162279,162280],{"class":154},"(result)  ",[84,162282,162283],{"class":1378},"# None\n",[14,162285,162287],{"id":162286},"_56-return的作用","5.6 return的作用",[19,162289,162290,162292],{},[39,162291,18216],{}," 有两个作用：",[26,162294,162295,162298],{},[29,162296,162297],{},"返回结果。",[29,162299,162300],{},"结束函数。",[60,162302,162304],{"className":121,"code":162303,"language":91,"meta":66,"style":66},"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",[39,162305,162306,162316,162328,162335,162339,162351,162358,162362,162369,162373,162377,162388],{"__ignoreMap":66},[84,162307,162308,162310,162313],{"class":86,"line":87},[84,162309,33100],{"class":129},[84,162311,162312],{"class":90}," check_age",[84,162314,162315],{"class":154},"(age):\n",[84,162317,162318,162320,162322,162324,162326],{"class":86,"line":98},[84,162319,4279],{"class":129},[84,162321,16877],{"class":154},[84,162323,2218],{"class":129},[84,162325,5271],{"class":94},[84,162327,4917],{"class":154},[84,162329,162330,162332],{"class":86,"line":106},[84,162331,15922],{"class":129},[84,162333,162334],{"class":158}," \"年龄不合法\"\n",[84,162336,162337],{"class":86,"line":112},[84,162338,3578],{"emptyLinePlaceholder":1252},[84,162340,162341,162343,162345,162347,162349],{"class":86,"line":425},[84,162342,4279],{"class":129},[84,162344,16877],{"class":154},[84,162346,2891],{"class":129},[84,162348,157185],{"class":94},[84,162350,4917],{"class":154},[84,162352,162353,162355],{"class":86,"line":2395},[84,162354,15922],{"class":129},[84,162356,162357],{"class":158}," \"成年人\"\n",[84,162359,162360],{"class":86,"line":2401},[84,162361,3578],{"emptyLinePlaceholder":1252},[84,162363,162364,162366],{"class":86,"line":2492},[84,162365,5268],{"class":129},[84,162367,162368],{"class":158}," \"未成年人\"\n",[84,162370,162371],{"class":86,"line":2498},[84,162372,3578],{"emptyLinePlaceholder":1252},[84,162374,162375],{"class":86,"line":2510},[84,162376,3578],{"emptyLinePlaceholder":1252},[84,162378,162379,162381,162384,162386],{"class":86,"line":2793},[84,162380,730],{"class":94},[84,162382,162383],{"class":154},"(check_age(",[84,162385,2008],{"class":94},[84,162387,31651],{"class":154},[84,162389,162390,162392,162394,162396,162398],{"class":86,"line":2798},[84,162391,730],{"class":94},[84,162393,162383],{"class":154},[84,162395,1841],{"class":129},[84,162397,1529],{"class":94},[84,162399,31651],{"class":154},[19,162401,162402,162403,162405],{},"函数执行到 ",[39,162404,18216],{}," 后，后面的代码不会继续执行。",[14,162407,162409],{"id":162408},"_57-none","5.7 None",[19,162411,162412,162414],{},[39,162413,96832],{}," 表示空值或没有结果。",[19,162416,162417],{},"常见使用场景：",[26,162419,162420,162423,162426],{},[29,162421,162422],{},"函数没有返回值。",[29,162424,162425],{},"变量暂时没有具体值。",[29,162427,162428],{},"表示查询不到结果。",[60,162430,162432],{"className":121,"code":162431,"language":91,"meta":66,"style":66},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[39,162433,162434,162442,162446,162459],{"__ignoreMap":66},[84,162435,162436,162438,162440],{"class":86,"line":87},[84,162437,162206],{"class":154},[84,162439,867],{"class":129},[84,162441,153072],{"class":94},[84,162443,162444],{"class":86,"line":98},[84,162445,3578],{"emptyLinePlaceholder":1252},[84,162447,162448,162450,162453,162455,162457],{"class":86,"line":106},[84,162449,2712],{"class":129},[84,162451,162452],{"class":154}," result ",[84,162454,40079],{"class":129},[84,162456,40085],{"class":94},[84,162458,4917],{"class":154},[84,162460,162461,162463,162465,162468],{"class":86,"line":112},[84,162462,32453],{"class":94},[84,162464,155],{"class":154},[84,162466,162467],{"class":158},"\"没有数据\"",[84,162469,162],{"class":154},[19,162471,162472,162473,162475,162476,162479,162480,55],{},"判断 ",[39,162474,96832],{}," 推荐使用 ",[39,162477,162478],{},"is None","，不要写成 ",[39,162481,162482],{},"== None",[14,162484,162486],{"id":162485},"_58-函数文档字符串","5.8 函数文档字符串",[19,162488,162489],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[60,162491,162493],{"className":121,"code":162492,"language":91,"meta":66,"style":66},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[39,162494,162495,162505,162510],{"__ignoreMap":66},[84,162496,162497,162499,162502],{"class":86,"line":87},[84,162498,33100],{"class":129},[84,162500,162501],{"class":90}," calculate_bmi",[84,162503,162504],{"class":154},"(weight, height):\n",[84,162506,162507],{"class":86,"line":98},[84,162508,162509],{"class":158},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[84,162511,162512,162514,162517,162519,162522,162524],{"class":86,"line":106},[84,162513,5268],{"class":129},[84,162515,162516],{"class":154}," weight ",[84,162518,1893],{"class":129},[84,162520,162521],{"class":154}," height ",[84,162523,11833],{"class":129},[84,162525,139],{"class":94},[19,162527,162528],{},"查看说明：",[60,162530,162532],{"className":121,"code":162531,"language":91,"meta":66,"style":66},"help(calculate_bmi)\n",[39,162533,162534],{"__ignoreMap":66},[84,162535,162536,162539],{"class":86,"line":87},[84,162537,162538],{"class":94},"help",[84,162540,162541],{"class":154},"(calculate_bmi)\n",[19,162543,162544],{},"较完整的写法：",[60,162546,162548],{"className":121,"code":162547,"language":91,"meta":66,"style":66},"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",[39,162549,162550,162558,162563,162568,162572,162577,162582,162587,162591],{"__ignoreMap":66},[84,162551,162552,162554,162556],{"class":86,"line":87},[84,162553,33100],{"class":129},[84,162555,162501],{"class":90},[84,162557,162504],{"class":154},[84,162559,162560],{"class":86,"line":98},[84,162561,162562],{"class":158},"    \"\"\"\n",[84,162564,162565],{"class":86,"line":106},[84,162566,162567],{"class":158},"    计算BMI。\n",[84,162569,162570],{"class":86,"line":112},[84,162571,3578],{"emptyLinePlaceholder":1252},[84,162573,162574],{"class":86,"line":425},[84,162575,162576],{"class":158},"    :param weight: 体重，单位kg\n",[84,162578,162579],{"class":86,"line":2395},[84,162580,162581],{"class":158},"    :param height: 身高，单位m\n",[84,162583,162584],{"class":86,"line":2401},[84,162585,162586],{"class":158},"    :return: BMI数值\n",[84,162588,162589],{"class":86,"line":2492},[84,162590,162562],{"class":158},[84,162592,162593,162595,162597,162599,162601,162603],{"class":86,"line":2498},[84,162594,5268],{"class":129},[84,162596,162516],{"class":154},[84,162598,1893],{"class":129},[84,162600,162521],{"class":154},[84,162602,11833],{"class":129},[84,162604,139],{"class":94},[14,162606,162608],{"id":162607},"_59-变量作用域","5.9 变量作用域",[198,162610,162612],{"id":162611},"_591-局部变量","5.9.1 局部变量",[19,162614,162615],{},"在函数内部定义的变量，只能在函数内部使用。",[60,162617,162619],{"className":121,"code":162618,"language":91,"meta":66,"style":66},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[39,162620,162621,162630,162638,162644,162648,162652,162657],{"__ignoreMap":66},[84,162622,162623,162625,162628],{"class":86,"line":87},[84,162624,33100],{"class":129},[84,162626,162627],{"class":90}," test",[84,162629,33106],{"class":154},[84,162631,162632,162634,162636],{"class":86,"line":98},[84,162633,46744],{"class":154},[84,162635,867],{"class":129},[84,162637,59574],{"class":94},[84,162639,162640,162642],{"class":86,"line":106},[84,162641,32453],{"class":94},[84,162643,1336],{"class":154},[84,162645,162646],{"class":86,"line":112},[84,162647,3578],{"emptyLinePlaceholder":1252},[84,162649,162650],{"class":86,"line":425},[84,162651,3578],{"emptyLinePlaceholder":1252},[84,162653,162654],{"class":86,"line":2395},[84,162655,162656],{"class":154},"test()\n",[84,162658,162659,162661,162664],{"class":86,"line":2401},[84,162660,730],{"class":94},[84,162662,162663],{"class":154},"(num)  ",[84,162665,162666],{"class":1378},"# 报错\n",[198,162668,162670],{"id":162669},"_592-全局变量","5.9.2 全局变量",[19,162672,162673],{},"在函数外部定义的变量，可以在函数内部读取。",[60,162675,162677],{"className":121,"code":162676,"language":91,"meta":66,"style":66},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[39,162678,162679,162687,162691,162695,162703,162709,162713,162717],{"__ignoreMap":66},[84,162680,162681,162683,162685],{"class":86,"line":87},[84,162682,864],{"class":154},[84,162684,867],{"class":129},[84,162686,150253],{"class":158},[84,162688,162689],{"class":86,"line":98},[84,162690,3578],{"emptyLinePlaceholder":1252},[84,162692,162693],{"class":86,"line":106},[84,162694,3578],{"emptyLinePlaceholder":1252},[84,162696,162697,162699,162701],{"class":86,"line":112},[84,162698,33100],{"class":129},[84,162700,161896],{"class":90},[84,162702,33106],{"class":154},[84,162704,162705,162707],{"class":86,"line":425},[84,162706,32453],{"class":94},[84,162708,151560],{"class":154},[84,162710,162711],{"class":86,"line":2395},[84,162712,3578],{"emptyLinePlaceholder":1252},[84,162714,162715],{"class":86,"line":2401},[84,162716,3578],{"emptyLinePlaceholder":1252},[84,162718,162719],{"class":86,"line":2492},[84,162720,161931],{"class":154},[19,162722,162723,162724,55],{},"如果要在函数内部修改全局变量，需要 ",[39,162725,162726],{},"global",[60,162728,162730],{"className":121,"code":162729,"language":91,"meta":66,"style":66},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[39,162731,162732,162740,162744,162748,162757,162765,162773,162777,162781,162786],{"__ignoreMap":66},[84,162733,162734,162736,162738],{"class":86,"line":87},[84,162735,1028],{"class":154},[84,162737,867],{"class":129},[84,162739,48483],{"class":94},[84,162741,162742],{"class":86,"line":98},[84,162743,3578],{"emptyLinePlaceholder":1252},[84,162745,162746],{"class":86,"line":106},[84,162747,3578],{"emptyLinePlaceholder":1252},[84,162749,162750,162752,162755],{"class":86,"line":112},[84,162751,33100],{"class":129},[84,162753,162754],{"class":90}," add_count",[84,162756,33106],{"class":154},[84,162758,162759,162762],{"class":86,"line":425},[84,162760,162761],{"class":129},"    global",[84,162763,162764],{"class":154}," count\n",[84,162766,162767,162769,162771],{"class":86,"line":2395},[84,162768,160333],{"class":154},[84,162770,10649],{"class":129},[84,162772,56846],{"class":94},[84,162774,162775],{"class":86,"line":2401},[84,162776,3578],{"emptyLinePlaceholder":1252},[84,162778,162779],{"class":86,"line":2492},[84,162780,3578],{"emptyLinePlaceholder":1252},[84,162782,162783],{"class":86,"line":2498},[84,162784,162785],{"class":154},"add_count()\n",[84,162787,162788,162790],{"class":86,"line":2510},[84,162789,730],{"class":94},[84,162791,162792],{"class":154},"(count)\n",[19,162794,162795],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162797,162799],{"id":162798},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162801,162802],{},"一个函数中可以调用另一个函数。",[60,162804,162806],{"className":121,"code":162805,"language":91,"meta":66,"style":66},"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",[39,162807,162808,162817,162831,162835,162839,162848,162853,162873,162894,162898,162902,162906],{"__ignoreMap":66},[84,162809,162810,162812,162815],{"class":86,"line":87},[84,162811,33100],{"class":129},[84,162813,162814],{"class":90}," print_line",[84,162816,33106],{"class":154},[84,162818,162819,162821,162823,162825,162827,162829],{"class":86,"line":98},[84,162820,32453],{"class":94},[84,162822,155],{"class":154},[84,162824,934],{"class":158},[84,162826,997],{"class":129},[84,162828,79811],{"class":94},[84,162830,162],{"class":154},[84,162832,162833],{"class":86,"line":106},[84,162834,3578],{"emptyLinePlaceholder":1252},[84,162836,162837],{"class":86,"line":112},[84,162838,3578],{"emptyLinePlaceholder":1252},[84,162840,162841,162843,162846],{"class":86,"line":425},[84,162842,33100],{"class":129},[84,162844,162845],{"class":90}," print_info",[84,162847,150275],{"class":154},[84,162849,162850],{"class":86,"line":2395},[84,162851,162852],{"class":154},"    print_line()\n",[84,162854,162855,162857,162859,162861,162863,162865,162867,162869,162871],{"class":86,"line":2401},[84,162856,32453],{"class":94},[84,162858,155],{"class":154},[84,162860,1372],{"class":129},[84,162862,157582],{"class":158},[84,162864,2204],{"class":94},[84,162866,80956],{"class":154},[84,162868,2254],{"class":94},[84,162870,1562],{"class":158},[84,162872,162],{"class":154},[84,162874,162875,162877,162879,162881,162884,162886,162888,162890,162892],{"class":86,"line":2492},[84,162876,32453],{"class":94},[84,162878,155],{"class":154},[84,162880,1372],{"class":129},[84,162882,162883],{"class":158},"\"年龄:",[84,162885,2204],{"class":94},[84,162887,71367],{"class":154},[84,162889,2254],{"class":94},[84,162891,1562],{"class":158},[84,162893,162],{"class":154},[84,162895,162896],{"class":86,"line":2498},[84,162897,162852],{"class":154},[84,162899,162900],{"class":86,"line":2510},[84,162901,3578],{"emptyLinePlaceholder":1252},[84,162903,162904],{"class":86,"line":2793},[84,162905,3578],{"emptyLinePlaceholder":1252},[84,162907,162908,162911,162913,162915,162917],{"class":86,"line":2798},[84,162909,162910],{"class":154},"print_info(",[84,162912,150788],{"class":158},[84,162914,846],{"class":154},[84,162916,849],{"class":94},[84,162918,162],{"class":154},[19,162920,162921],{},"这种方式可以把小功能组合成大功能。",[14,162923,162925],{"id":162924},"_511-参数检查","5.11 参数检查",[19,162927,162928],{},"函数内部可以检查参数是否合法。",[60,162930,162932],{"className":121,"code":162931,"language":91,"meta":66,"style":66},"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",[39,162933,162934,162943,162955,162961,162971,162975,162979,162996,163000,163012,163023,163029],{"__ignoreMap":66},[84,162935,162936,162938,162941],{"class":86,"line":87},[84,162937,33100],{"class":129},[84,162939,162940],{"class":90}," divide",[84,162942,151993],{"class":154},[84,162944,162945,162947,162949,162951,162953],{"class":86,"line":98},[84,162946,4279],{"class":129},[84,162948,12054],{"class":154},[84,162950,4127],{"class":129},[84,162952,5271],{"class":94},[84,162954,4917],{"class":154},[84,162956,162957,162959],{"class":86,"line":106},[84,162958,15922],{"class":129},[84,162960,153072],{"class":94},[84,162962,162963,162965,162967,162969],{"class":86,"line":112},[84,162964,5268],{"class":129},[84,162966,12041],{"class":154},[84,162968,1893],{"class":129},[84,162970,152004],{"class":154},[84,162972,162973],{"class":86,"line":425},[84,162974,3578],{"emptyLinePlaceholder":1252},[84,162976,162977],{"class":86,"line":2395},[84,162978,3578],{"emptyLinePlaceholder":1252},[84,162980,162981,162983,162985,162988,162990,162992,162994],{"class":86,"line":2401},[84,162982,162206],{"class":154},[84,162984,867],{"class":129},[84,162986,162987],{"class":154}," divide(",[84,162989,1756],{"class":94},[84,162991,846],{"class":154},[84,162993,1504],{"class":94},[84,162995,162],{"class":154},[84,162997,162998],{"class":86,"line":2492},[84,162999,3578],{"emptyLinePlaceholder":1252},[84,163001,163002,163004,163006,163008,163010],{"class":86,"line":2498},[84,163003,2712],{"class":129},[84,163005,162452],{"class":154},[84,163007,40079],{"class":129},[84,163009,40085],{"class":94},[84,163011,4917],{"class":154},[84,163013,163014,163016,163018,163021],{"class":86,"line":2510},[84,163015,32453],{"class":94},[84,163017,155],{"class":154},[84,163019,163020],{"class":158},"\"除数不能为0\"",[84,163022,162],{"class":154},[84,163024,163025,163027],{"class":86,"line":2793},[84,163026,2882],{"class":129},[84,163028,4917],{"class":154},[84,163030,163031,163033],{"class":86,"line":2798},[84,163032,32453],{"class":94},[84,163034,77731],{"class":154},[14,163036,163038],{"id":163037},"_512-类型提示","5.12 类型提示",[19,163040,163041],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[60,163043,163045],{"className":121,"code":163044,"language":91,"meta":66,"style":66},"def add(a: int, b: int) -> int:\n    return a + b\n",[39,163046,163047,163070],{"__ignoreMap":66},[84,163048,163049,163051,163053,163056,163058,163061,163063,163066,163068],{"class":86,"line":87},[84,163050,33100],{"class":129},[84,163052,6384],{"class":90},[84,163054,163055],{"class":154},"(a: ",[84,163057,1327],{"class":94},[84,163059,163060],{"class":154},", b: ",[84,163062,1327],{"class":94},[84,163064,163065],{"class":154},") -> ",[84,163067,1327],{"class":94},[84,163069,4917],{"class":154},[84,163071,163072,163074,163076,163078],{"class":86,"line":98},[84,163073,5268],{"class":129},[84,163075,12041],{"class":154},[84,163077,1790],{"class":129},[84,163079,152004],{"class":154},[19,163081,163082],{},"字符串参数：",[60,163084,163086],{"className":121,"code":163085,"language":91,"meta":66,"style":66},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[39,163087,163088,163105],{"__ignoreMap":66},[84,163089,163090,163092,163094,163097,163099,163101,163103],{"class":86,"line":87},[84,163091,33100],{"class":129},[84,163093,161896],{"class":90},[84,163095,163096],{"class":154},"(name: ",[84,163098,2480],{"class":94},[84,163100,163065],{"class":154},[84,163102,96832],{"class":94},[84,163104,4917],{"class":154},[84,163106,163107,163109,163111,163113,163115,163117,163119,163121,163123],{"class":86,"line":98},[84,163108,32453],{"class":94},[84,163110,155],{"class":154},[84,163112,1372],{"class":129},[84,163114,157954],{"class":158},[84,163116,2204],{"class":94},[84,163118,80956],{"class":154},[84,163120,2254],{"class":94},[84,163122,1562],{"class":158},[84,163124,162],{"class":154},[19,163126,163127],{},"列表参数：",[60,163129,163131],{"className":121,"code":163130,"language":91,"meta":66,"style":66},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[39,163132,163133,163152,163160,163172,163181],{"__ignoreMap":66},[84,163134,163135,163137,163140,163143,163145,163148,163150],{"class":86,"line":87},[84,163136,33100],{"class":129},[84,163138,163139],{"class":90}," get_total",[84,163141,163142],{"class":154},"(numbers: list[",[84,163144,1327],{"class":94},[84,163146,163147],{"class":154},"]) -> ",[84,163149,1327],{"class":94},[84,163151,4917],{"class":154},[84,163153,163154,163156,163158],{"class":86,"line":98},[84,163155,160207],{"class":154},[84,163157,867],{"class":129},[84,163159,48483],{"class":94},[84,163161,163162,163164,163167,163169],{"class":86,"line":106},[84,163163,4379],{"class":129},[84,163165,163166],{"class":154}," number ",[84,163168,27206],{"class":129},[84,163170,163171],{"class":154}," numbers:\n",[84,163173,163174,163176,163178],{"class":86,"line":112},[84,163175,160882],{"class":154},[84,163177,10649],{"class":129},[84,163179,163180],{"class":154}," number\n",[84,163182,163183,163185],{"class":86,"line":425},[84,163184,5268],{"class":129},[84,163186,163187],{"class":154}," total\n",[19,163189,163190],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163192,163194],{"id":163193},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[60,163196,163198],{"className":121,"code":163197,"language":91,"meta":66,"style":66},"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",[39,163199,163200,163210,163214,163218,163226,163237,163247,163257,163267,163277,163281,163285,163294,163316,163320,163324,163333,163339,163359,163371,163382,163386,163395,163406,163411,163415,163419,163428,163434,163453,163465,163475,163479,163490,163500,163504,163512,163523,163527,163531,163535,163543,163548,163562,163566,163578,163583,163595,163600,163612,163617,163629,163639,163643,163649],{"__ignoreMap":66},[84,163201,163202,163205,163207],{"class":86,"line":87},[84,163203,163204],{"class":154},"balance ",[84,163206,867],{"class":129},[84,163208,163209],{"class":94}," 1000\n",[84,163211,163212],{"class":86,"line":98},[84,163213,3578],{"emptyLinePlaceholder":1252},[84,163215,163216],{"class":86,"line":106},[84,163217,3578],{"emptyLinePlaceholder":1252},[84,163219,163220,163222,163224],{"class":86,"line":112},[84,163221,33100],{"class":129},[84,163223,152933],{"class":90},[84,163225,33106],{"class":154},[84,163227,163228,163230,163232,163235],{"class":86,"line":425},[84,163229,32453],{"class":94},[84,163231,155],{"class":154},[84,163233,163234],{"class":158},"\"====== ATM ======\"",[84,163236,162],{"class":154},[84,163238,163239,163241,163243,163245],{"class":86,"line":2395},[84,163240,32453],{"class":94},[84,163242,155],{"class":154},[84,163244,161548],{"class":158},[84,163246,162],{"class":154},[84,163248,163249,163251,163253,163255],{"class":86,"line":2401},[84,163250,32453],{"class":94},[84,163252,155],{"class":154},[84,163254,161559],{"class":158},[84,163256,162],{"class":154},[84,163258,163259,163261,163263,163265],{"class":86,"line":2492},[84,163260,32453],{"class":94},[84,163262,155],{"class":154},[84,163264,161570],{"class":158},[84,163266,162],{"class":154},[84,163268,163269,163271,163273,163275],{"class":86,"line":2498},[84,163270,32453],{"class":94},[84,163272,155],{"class":154},[84,163274,161581],{"class":158},[84,163276,162],{"class":154},[84,163278,163279],{"class":86,"line":2510},[84,163280,3578],{"emptyLinePlaceholder":1252},[84,163282,163283],{"class":86,"line":2793},[84,163284,3578],{"emptyLinePlaceholder":1252},[84,163286,163287,163289,163292],{"class":86,"line":2798},[84,163288,33100],{"class":129},[84,163290,163291],{"class":90}," show_balance",[84,163293,33106],{"class":154},[84,163295,163296,163298,163300,163302,163305,163307,163310,163312,163314],{"class":86,"line":2804},[84,163297,32453],{"class":94},[84,163299,155],{"class":154},[84,163301,1372],{"class":129},[84,163303,163304],{"class":158},"\"当前余额:",[84,163306,2204],{"class":94},[84,163308,163309],{"class":154},"balance",[84,163311,2254],{"class":94},[84,163313,157912],{"class":158},[84,163315,162],{"class":154},[84,163317,163318],{"class":86,"line":2809},[84,163319,3578],{"emptyLinePlaceholder":1252},[84,163321,163322],{"class":86,"line":2823},[84,163323,3578],{"emptyLinePlaceholder":1252},[84,163325,163326,163328,163331],{"class":86,"line":2828},[84,163327,33100],{"class":129},[84,163329,163330],{"class":90}," save_money",[84,163332,33106],{"class":154},[84,163334,163335,163337],{"class":86,"line":2834},[84,163336,162761],{"class":129},[84,163338,150999],{"class":154},[84,163340,163341,163344,163346,163348,163350,163352,163354,163357],{"class":86,"line":2855},[84,163342,163343],{"class":154},"    money ",[84,163345,867],{"class":129},[84,163347,110931],{"class":94},[84,163349,155],{"class":154},[84,163351,54970],{"class":94},[84,163353,155],{"class":154},[84,163355,163356],{"class":158},"\"请输入存款金额:\"",[84,163358,31651],{"class":154},[84,163360,163361,163363,163365,163367,163369],{"class":86,"line":2860},[84,163362,4279],{"class":129},[84,163364,151042],{"class":154},[84,163366,2769],{"class":129},[84,163368,5271],{"class":94},[84,163370,4917],{"class":154},[84,163372,163373,163375,163377,163380],{"class":86,"line":2874},[84,163374,33604],{"class":94},[84,163376,155],{"class":154},[84,163378,163379],{"class":158},"\"金额必须大于0\"",[84,163381,162],{"class":154},[84,163383,163384],{"class":86,"line":2879},[84,163385,153261],{"class":129},[84,163387,163388,163391,163393],{"class":86,"line":2908},[84,163389,163390],{"class":154},"    balance ",[84,163392,10649],{"class":129},[84,163394,151075],{"class":154},[84,163396,163397,163399,163401,163404],{"class":86,"line":2913},[84,163398,32453],{"class":94},[84,163400,155],{"class":154},[84,163402,163403],{"class":158},"\"存款成功\"",[84,163405,162],{"class":154},[84,163407,163408],{"class":86,"line":2930},[84,163409,163410],{"class":154},"    show_balance()\n",[84,163412,163413],{"class":86,"line":2935},[84,163414,3578],{"emptyLinePlaceholder":1252},[84,163416,163417],{"class":86,"line":2940},[84,163418,3578],{"emptyLinePlaceholder":1252},[84,163420,163421,163423,163426],{"class":86,"line":2945},[84,163422,33100],{"class":129},[84,163424,163425],{"class":90}," withdraw_money",[84,163427,33106],{"class":154},[84,163429,163430,163432],{"class":86,"line":2959},[84,163431,162761],{"class":129},[84,163433,150999],{"class":154},[84,163435,163436,163438,163440,163442,163444,163446,163448,163451],{"class":86,"line":2964},[84,163437,163343],{"class":154},[84,163439,867],{"class":129},[84,163441,110931],{"class":94},[84,163443,155],{"class":154},[84,163445,54970],{"class":94},[84,163447,155],{"class":154},[84,163449,163450],{"class":158},"\"请输入取款金额:\"",[84,163452,31651],{"class":154},[84,163454,163455,163457,163459,163461,163463],{"class":86,"line":3755},[84,163456,4279],{"class":129},[84,163458,151042],{"class":154},[84,163460,2769],{"class":129},[84,163462,5271],{"class":94},[84,163464,4917],{"class":154},[84,163466,163467,163469,163471,163473],{"class":86,"line":3769},[84,163468,33604],{"class":94},[84,163470,155],{"class":154},[84,163472,163379],{"class":158},[84,163474,162],{"class":154},[84,163476,163477],{"class":86,"line":3777},[84,163478,153261],{"class":129},[84,163480,163481,163483,163485,163487],{"class":86,"line":3782},[84,163482,4279],{"class":129},[84,163484,151042],{"class":154},[84,163486,2268],{"class":129},[84,163488,163489],{"class":154}," balance:\n",[84,163491,163492,163494,163496,163498],{"class":86,"line":3788},[84,163493,33604],{"class":94},[84,163495,155],{"class":154},[84,163497,151137],{"class":158},[84,163499,162],{"class":154},[84,163501,163502],{"class":86,"line":3794},[84,163503,153261],{"class":129},[84,163505,163506,163508,163510],{"class":86,"line":3799},[84,163507,163390],{"class":154},[84,163509,151152],{"class":129},[84,163511,151075],{"class":154},[84,163513,163514,163516,163518,163521],{"class":86,"line":9120},[84,163515,32453],{"class":94},[84,163517,155],{"class":154},[84,163519,163520],{"class":158},"\"取款成功\"",[84,163522,162],{"class":154},[84,163524,163525],{"class":86,"line":9144},[84,163526,163410],{"class":154},[84,163528,163529],{"class":86,"line":9149},[84,163530,3578],{"emptyLinePlaceholder":1252},[84,163532,163533],{"class":86,"line":9155},[84,163534,3578],{"emptyLinePlaceholder":1252},[84,163536,163537,163539,163541],{"class":86,"line":9182},[84,163538,109797],{"class":129},[84,163540,96438],{"class":94},[84,163542,4917],{"class":154},[84,163544,163545],{"class":86,"line":9187},[84,163546,163547],{"class":154},"    show_menu()\n",[84,163549,163550,163552,163554,163556,163558,163560],{"class":86,"line":9193},[84,163551,161592],{"class":154},[84,163553,867],{"class":129},[84,163555,61751],{"class":94},[84,163557,155],{"class":154},[84,163559,153973],{"class":158},[84,163561,162],{"class":154},[84,163563,163564],{"class":86,"line":9205},[84,163565,3578],{"emptyLinePlaceholder":1252},[84,163567,163568,163570,163572,163574,163576],{"class":86,"line":9217},[84,163569,4279],{"class":129},[84,163571,153986],{"class":154},[84,163573,4127],{"class":129},[84,163575,153991],{"class":158},[84,163577,4917],{"class":154},[84,163579,163580],{"class":86,"line":9229},[84,163581,163582],{"class":154},"        show_balance()\n",[84,163584,163585,163587,163589,163591,163593],{"class":86,"line":10888},[84,163586,40445],{"class":129},[84,163588,153986],{"class":154},[84,163590,4127],{"class":129},[84,163592,154010],{"class":158},[84,163594,4917],{"class":154},[84,163596,163597],{"class":86,"line":10913},[84,163598,163599],{"class":154},"        save_money()\n",[84,163601,163602,163604,163606,163608,163610],{"class":86,"line":10936},[84,163603,40445],{"class":129},[84,163605,153986],{"class":154},[84,163607,4127],{"class":129},[84,163609,154028],{"class":158},[84,163611,4917],{"class":154},[84,163613,163614],{"class":86,"line":10960},[84,163615,163616],{"class":154},"        withdraw_money()\n",[84,163618,163619,163621,163623,163625,163627],{"class":86,"line":10965},[84,163620,40445],{"class":129},[84,163622,153986],{"class":154},[84,163624,4127],{"class":129},[84,163626,154082],{"class":158},[84,163628,4917],{"class":154},[84,163630,163631,163633,163635,163637],{"class":86,"line":10970},[84,163632,33604],{"class":94},[84,163634,155],{"class":154},[84,163636,154093],{"class":158},[84,163638,162],{"class":154},[84,163640,163641],{"class":86,"line":10975},[84,163642,32780],{"class":129},[84,163644,163645,163647],{"class":86,"line":10984},[84,163646,158922],{"class":129},[84,163648,4917],{"class":154},[84,163650,163651,163653,163655,163657],{"class":86,"line":10989},[84,163652,33604],{"class":94},[84,163654,155],{"class":154},[84,163656,154114],{"class":158},[84,163658,162],{"class":154},[19,163660,163661],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163663,163665],{"id":163664},"_514-易错点","5.14 易错点",[26,163667,163668,163671,163674,163679,163684,163687],{},[29,163669,163670],{},"函数定义后必须调用才会执行。",[29,163672,163673],{},"函数名后面有括号才是调用。",[29,163675,163676,163678],{},[39,163677,18216],{}," 后面的代码不会执行。",[29,163680,163681,163682,55],{},"没有返回值的函数默认返回 ",[39,163683,96832],{},[29,163685,163686],{},"局部变量不能在函数外部访问。",[29,163688,163689,163690,163692],{},"不要滥用 ",[39,163691,162726],{},"，更好的方式是让函数返回新值。",[19,163694,163695,163696,163698],{},"例如不用 ",[39,163697,162726],{}," 改写存款：",[60,163700,163702],{"className":121,"code":163701,"language":91,"meta":66,"style":66},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[39,163703,163704,163713,163724,163728,163732,163740,163753],{"__ignoreMap":66},[84,163705,163706,163708,163710],{"class":86,"line":87},[84,163707,33100],{"class":129},[84,163709,163330],{"class":90},[84,163711,163712],{"class":154},"(balance, money):\n",[84,163714,163715,163717,163720,163722],{"class":86,"line":98},[84,163716,5268],{"class":129},[84,163718,163719],{"class":154}," balance ",[84,163721,1790],{"class":129},[84,163723,151075],{"class":154},[84,163725,163726],{"class":86,"line":106},[84,163727,3578],{"emptyLinePlaceholder":1252},[84,163729,163730],{"class":86,"line":112},[84,163731,3578],{"emptyLinePlaceholder":1252},[84,163733,163734,163736,163738],{"class":86,"line":425},[84,163735,163204],{"class":154},[84,163737,867],{"class":129},[84,163739,163209],{"class":94},[84,163741,163742,163744,163746,163749,163751],{"class":86,"line":2395},[84,163743,163204],{"class":154},[84,163745,867],{"class":129},[84,163747,163748],{"class":154}," save_money(balance, ",[84,163750,2903],{"class":94},[84,163752,162],{"class":154},[84,163754,163755,163757],{"class":86,"line":2401},[84,163756,730],{"class":94},[84,163758,163759],{"class":154},"(balance)\n",[14,163761,163763],{"id":163762},"_515-本章练习","5.15 本章练习",[26,163765,163766,163773,163779,163785,163791],{},[29,163767,163768,163769,163772],{},"定义函数 ",[39,163770,163771],{},"print_student(name, age)","，输出学生信息。",[29,163774,163768,163775,163778],{},[39,163776,163777],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,163780,163768,163781,163784],{},[39,163782,163783],{},"is_even(num)","，判断一个数是否为偶数。",[29,163786,163768,163787,163790],{},[39,163788,163789],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,163792,163793],{},"把第 4 章的菜单程序拆分成多个函数。",[1222,163795,163796],{},"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":66,"searchDepth":98,"depth":98,"links":163798},[163799,163800,163801,163802,163803,163804,163805,163806,163807,163811,163812,163813,163814,163815,163816],{"id":161819,"depth":98,"text":161820},{"id":161860,"depth":98,"text":161861},{"id":161950,"depth":98,"text":161951},{"id":162031,"depth":98,"text":162032},{"id":162164,"depth":98,"text":162165},{"id":162286,"depth":98,"text":162287},{"id":162408,"depth":98,"text":162409},{"id":162485,"depth":98,"text":162486},{"id":162607,"depth":98,"text":162608,"children":163808},[163809,163810],{"id":162611,"depth":106,"text":162612},{"id":162669,"depth":106,"text":162670},{"id":162798,"depth":98,"text":162799},{"id":162924,"depth":98,"text":162925},{"id":163037,"depth":98,"text":163038},{"id":163193,"depth":98,"text":163194},{"id":163664,"depth":98,"text":163665},{"id":163762,"depth":98,"text":163763},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161811,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163823,"title":163824,"body":163825,"description":1249,"extension":1250,"meta":166869,"navigation":1252,"path":166870,"seo":166871,"stem":166872,"__hash__":166873},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163826,"toc":166850},[163827,163830,163834,163837,163840,163944,163947,163951,163954,164034,164037,164041,164044,164104,164107,164143,164146,164161,164165,164238,164241,164296,164299,164369,164372,164456,164466,164524,164528,164573,164576,164602,164605,164711,164715,164718,164760,164763,164827,164830,164834,164837,164898,164901,164931,164934,164972,164976,164979,164988,164991,165115,165118,165159,165163,165166,165177,165217,165220,165235,165240,165243,165310,165313,165403,165407,165410,165458,165461,165488,165490,165520,165523,165543,165546,165577,165580,165613,165617,165620,165644,165647,165671,165674,165698,165702,165705,165835,165838,165918,165921,165996,166000,166003,166053,166056,166098,166101,166125,166127,166151,166154,166209,166212,166278,166282,166285,166288,166326,166329,166382,166385,166431,166434,166467,166470,166474,166793,166797,166826,166830,166847],[10,163828,163824],{"id":163829},"_6-数据容器",[14,163831,163833],{"id":163832},"_61-什么是数据容器","6.1 什么是数据容器",[19,163835,163836],{},"数据容器用于一次保存多个数据。",[19,163838,163839],{},"常见容器：",[458,163841,163842,163859],{},[461,163843,163844],{},[464,163845,163846,163848,163851,163854,163857],{},[467,163847,26934],{},[467,163849,163850],{},"是否有序",[467,163852,163853],{},"是否可变",[467,163855,163856],{},"是否允许重复",[467,163858,28650],{},[474,163860,163861,163879,163895,163910,163927],{},[464,163862,163863,163866,163869,163872,163875],{},[479,163864,163865],{},"list列表",[479,163867,163868],{},"有序",[479,163870,163871],{},"可变",[479,163873,163874],{},"允许",[479,163876,163877],{},[39,163878,156157],{},[464,163880,163881,163884,163886,163889,163891],{},[479,163882,163883],{},"tuple元组",[479,163885,163868],{},[479,163887,163888],{},"不可变",[479,163890,163874],{},[479,163892,163893],{},[39,163894,156170],{},[464,163896,163897,163900,163902,163904,163906],{},[479,163898,163899],{},"str字符串",[479,163901,163868],{},[479,163903,163888],{},[479,163905,163874],{},[479,163907,163908],{},[39,163909,156780],{},[464,163911,163912,163915,163918,163920,163923],{},[479,163913,163914],{},"set集合",[479,163916,163917],{},"无序",[479,163919,163871],{},[479,163921,163922],{},"不允许",[479,163924,163925],{},[39,163926,156195],{},[464,163928,163929,163932,163934,163936,163939],{},[479,163930,163931],{},"dict字典",[479,163933,163868],{},[479,163935,163871],{},[479,163937,163938],{},"key不允许重复",[479,163940,163941],{},[39,163942,163943],{},"{\"name\": \"小明\"}",[19,163945,163946],{},"Python 3.7 之后，字典保持插入顺序。",[14,163948,163950],{"id":163949},"_62-列表list","6.2 列表list",[19,163952,163953],{},"列表用于保存一组有顺序的数据。",[60,163955,163957],{"className":121,"code":163956,"language":91,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[39,163958,163959,163979,164004,164025],{"__ignoreMap":66},[84,163960,163961,163963,163965,163967,163969,163971,163973,163975,163977],{"class":86,"line":87},[84,163962,161280],{"class":154},[84,163964,867],{"class":129},[84,163966,53375],{"class":154},[84,163968,150788],{"class":158},[84,163970,846],{"class":154},[84,163972,151836],{"class":158},[84,163974,846],{"class":154},[84,163976,160631],{"class":158},[84,163978,34398],{"class":154},[84,163980,163981,163984,163986,163988,163990,163992,163994,163996,163998,164000,164002],{"class":86,"line":98},[84,163982,163983],{"class":154},"numbers ",[84,163985,867],{"class":129},[84,163987,53375],{"class":154},[84,163989,1529],{"class":94},[84,163991,846],{"class":154},[84,163993,1397],{"class":94},[84,163995,846],{"class":154},[84,163997,1391],{"class":94},[84,163999,846],{"class":154},[84,164001,1604],{"class":94},[84,164003,34398],{"class":154},[84,164005,164006,164009,164011,164013,164015,164017,164019,164021,164023],{"class":86,"line":106},[84,164007,164008],{"class":154},"mixed ",[84,164010,867],{"class":129},[84,164012,53375],{"class":154},[84,164014,150788],{"class":158},[84,164016,846],{"class":154},[84,164018,849],{"class":94},[84,164020,846],{"class":154},[84,164022,32629],{"class":94},[84,164024,34398],{"class":154},[84,164026,164027,164030,164032],{"class":86,"line":112},[84,164028,164029],{"class":154},"empty ",[84,164031,867],{"class":129},[84,164033,52987],{"class":154},[19,164035,164036],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164038,164040],{"id":164039},"_63-列表索引","6.3 列表索引",[19,164042,164043],{},"正向索引从 0 开始：",[60,164045,164047],{"className":121,"code":164046,"language":91,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[39,164048,164049,164069,164073,164084,164094],{"__ignoreMap":66},[84,164050,164051,164053,164055,164057,164059,164061,164063,164065,164067],{"class":86,"line":87},[84,164052,161280],{"class":154},[84,164054,867],{"class":129},[84,164056,53375],{"class":154},[84,164058,150788],{"class":158},[84,164060,846],{"class":154},[84,164062,151836],{"class":158},[84,164064,846],{"class":154},[84,164066,160631],{"class":158},[84,164068,34398],{"class":154},[84,164070,164071],{"class":86,"line":98},[84,164072,3578],{"emptyLinePlaceholder":1252},[84,164074,164075,164077,164080,164082],{"class":86,"line":106},[84,164076,730],{"class":94},[84,164078,164079],{"class":154},"(names[",[84,164081,1504],{"class":94},[84,164083,5834],{"class":154},[84,164085,164086,164088,164090,164092],{"class":86,"line":112},[84,164087,730],{"class":94},[84,164089,164079],{"class":154},[84,164091,1529],{"class":94},[84,164093,5834],{"class":154},[84,164095,164096,164098,164100,164102],{"class":86,"line":425},[84,164097,730],{"class":94},[84,164099,164079],{"class":154},[84,164101,1397],{"class":94},[84,164103,5834],{"class":154},[19,164105,164106],{},"反向索引从 -1 开始：",[60,164108,164110],{"className":121,"code":164109,"language":91,"meta":66,"style":66},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[39,164111,164112,164128],{"__ignoreMap":66},[84,164113,164114,164116,164118,164120,164122,164125],{"class":86,"line":87},[84,164115,730],{"class":94},[84,164117,164079],{"class":154},[84,164119,1841],{"class":129},[84,164121,1529],{"class":94},[84,164123,164124],{"class":154},"])  ",[84,164126,164127],{"class":1378},"# 小刚\n",[84,164129,164130,164132,164134,164136,164138,164140],{"class":86,"line":98},[84,164131,730],{"class":94},[84,164133,164079],{"class":154},[84,164135,1841],{"class":129},[84,164137,1397],{"class":94},[84,164139,164124],{"class":154},[84,164141,164142],{"class":1378},"# 小红\n",[19,164144,164145],{},"索引越界会报错：",[60,164147,164149],{"className":121,"code":164148,"language":91,"meta":66,"style":66},"print(names[3])\n",[39,164150,164151],{"__ignoreMap":66},[84,164152,164153,164155,164157,164159],{"class":86,"line":87},[84,164154,730],{"class":94},[84,164156,164079],{"class":154},[84,164158,1391],{"class":94},[84,164160,5834],{"class":154},[14,164162,164164],{"id":164163},"_64-列表常用方法","6.4 列表常用方法",[60,164166,164168],{"className":121,"code":164167,"language":91,"meta":66,"style":66},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[39,164169,164170,164186,164190,164199,164213,164227,164231],{"__ignoreMap":66},[84,164171,164172,164174,164176,164178,164180,164182,164184],{"class":86,"line":87},[84,164173,161280],{"class":154},[84,164175,867],{"class":129},[84,164177,53375],{"class":154},[84,164179,150788],{"class":158},[84,164181,846],{"class":154},[84,164183,151836],{"class":158},[84,164185,34398],{"class":154},[84,164187,164188],{"class":86,"line":98},[84,164189,3578],{"emptyLinePlaceholder":1252},[84,164191,164192,164195,164197],{"class":86,"line":106},[84,164193,164194],{"class":154},"names.append(",[84,164196,160631],{"class":158},[84,164198,162],{"class":154},[84,164200,164201,164204,164206,164208,164211],{"class":86,"line":112},[84,164202,164203],{"class":154},"names.insert(",[84,164205,1529],{"class":94},[84,164207,846],{"class":154},[84,164209,164210],{"class":158},"\"小李\"",[84,164212,162],{"class":154},[84,164214,164215,164218,164220,164222,164225],{"class":86,"line":425},[84,164216,164217],{"class":154},"names.extend([",[84,164219,9855],{"class":158},[84,164221,846],{"class":154},[84,164223,164224],{"class":158},"\"小赵\"",[84,164226,5834],{"class":154},[84,164228,164229],{"class":86,"line":2395},[84,164230,3578],{"emptyLinePlaceholder":1252},[84,164232,164233,164235],{"class":86,"line":2401},[84,164234,730],{"class":94},[84,164236,164237],{"class":154},"(names)\n",[19,164239,164240],{},"删除元素：",[60,164242,164244],{"className":121,"code":164243,"language":91,"meta":66,"style":66},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[39,164245,164246,164255,164265,164279,164291],{"__ignoreMap":66},[84,164247,164248,164251,164253],{"class":86,"line":87},[84,164249,164250],{"class":154},"names.remove(",[84,164252,151836],{"class":158},[84,164254,162],{"class":154},[84,164256,164257,164260,164262],{"class":86,"line":98},[84,164258,164259],{"class":154},"last ",[84,164261,867],{"class":129},[84,164263,164264],{"class":154}," names.pop()\n",[84,164266,164267,164270,164272,164275,164277],{"class":86,"line":106},[84,164268,164269],{"class":154},"first ",[84,164271,867],{"class":129},[84,164273,164274],{"class":154}," names.pop(",[84,164276,1504],{"class":94},[84,164278,162],{"class":154},[84,164280,164281,164284,164287,164289],{"class":86,"line":112},[84,164282,164283],{"class":129},"del",[84,164285,164286],{"class":154}," names[",[84,164288,1504],{"class":94},[84,164290,34398],{"class":154},[84,164292,164293],{"class":86,"line":425},[84,164294,164295],{"class":154},"names.clear()\n",[19,164297,164298],{},"查询和统计：",[60,164300,164302],{"className":121,"code":164301,"language":91,"meta":66,"style":66},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[39,164303,164304,164332,164336,164347,164358],{"__ignoreMap":66},[84,164305,164306,164308,164310,164312,164314,164316,164318,164320,164322,164324,164326,164328,164330],{"class":86,"line":87},[84,164307,163983],{"class":154},[84,164309,867],{"class":129},[84,164311,53375],{"class":154},[84,164313,1529],{"class":94},[84,164315,846],{"class":154},[84,164317,1397],{"class":94},[84,164319,846],{"class":154},[84,164321,1391],{"class":94},[84,164323,846],{"class":154},[84,164325,1397],{"class":94},[84,164327,846],{"class":154},[84,164329,1604],{"class":94},[84,164331,34398],{"class":154},[84,164333,164334],{"class":86,"line":98},[84,164335,3578],{"emptyLinePlaceholder":1252},[84,164337,164338,164340,164343,164345],{"class":86,"line":106},[84,164339,730],{"class":94},[84,164341,164342],{"class":154},"(numbers.index(",[84,164344,1391],{"class":94},[84,164346,31651],{"class":154},[84,164348,164349,164351,164354,164356],{"class":86,"line":112},[84,164350,730],{"class":94},[84,164352,164353],{"class":154},"(numbers.count(",[84,164355,1397],{"class":94},[84,164357,31651],{"class":154},[84,164359,164360,164362,164364,164366],{"class":86,"line":425},[84,164361,730],{"class":94},[84,164363,155],{"class":154},[84,164365,8530],{"class":94},[84,164367,164368],{"class":154},"(numbers))\n",[19,164370,164371],{},"排序：",[60,164373,164375],{"className":121,"code":164374,"language":91,"meta":66,"style":66},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[39,164376,164377,164401,164405,164410,164417,164421,164435,164441,164445,164450],{"__ignoreMap":66},[84,164378,164379,164381,164383,164385,164387,164389,164391,164393,164395,164397,164399],{"class":86,"line":87},[84,164380,163983],{"class":154},[84,164382,867],{"class":129},[84,164384,53375],{"class":154},[84,164386,1391],{"class":94},[84,164388,846],{"class":154},[84,164390,1529],{"class":94},[84,164392,846],{"class":154},[84,164394,1629],{"class":94},[84,164396,846],{"class":154},[84,164398,1397],{"class":94},[84,164400,34398],{"class":154},[84,164402,164403],{"class":86,"line":98},[84,164404,3578],{"emptyLinePlaceholder":1252},[84,164406,164407],{"class":86,"line":106},[84,164408,164409],{"class":154},"numbers.sort()\n",[84,164411,164412,164414],{"class":86,"line":112},[84,164413,730],{"class":94},[84,164415,164416],{"class":154},"(numbers)\n",[84,164418,164419],{"class":86,"line":425},[84,164420,3578],{"emptyLinePlaceholder":1252},[84,164422,164423,164426,164429,164431,164433],{"class":86,"line":2395},[84,164424,164425],{"class":154},"numbers.sort(",[84,164427,164428],{"class":928},"reverse",[84,164430,867],{"class":129},[84,164432,32629],{"class":94},[84,164434,162],{"class":154},[84,164436,164437,164439],{"class":86,"line":2401},[84,164438,730],{"class":94},[84,164440,164416],{"class":154},[84,164442,164443],{"class":86,"line":2492},[84,164444,3578],{"emptyLinePlaceholder":1252},[84,164446,164447],{"class":86,"line":2498},[84,164448,164449],{"class":154},"numbers.reverse()\n",[84,164451,164452,164454],{"class":86,"line":2510},[84,164453,730],{"class":94},[84,164455,164416],{"class":154},[19,164457,164458,164461,164462,164465],{},[39,164459,164460],{},"sort()"," 会修改原列表，",[39,164463,164464],{},"sorted()"," 返回新列表。",[60,164467,164469],{"className":121,"code":164468,"language":91,"meta":66,"style":66},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[39,164470,164471,164495,164507,164511,164517],{"__ignoreMap":66},[84,164472,164473,164475,164477,164479,164481,164483,164485,164487,164489,164491,164493],{"class":86,"line":87},[84,164474,163983],{"class":154},[84,164476,867],{"class":129},[84,164478,53375],{"class":154},[84,164480,1391],{"class":94},[84,164482,846],{"class":154},[84,164484,1529],{"class":94},[84,164486,846],{"class":154},[84,164488,1629],{"class":94},[84,164490,846],{"class":154},[84,164492,1397],{"class":94},[84,164494,34398],{"class":154},[84,164496,164497,164500,164502,164505],{"class":86,"line":98},[84,164498,164499],{"class":154},"new_numbers ",[84,164501,867],{"class":129},[84,164503,164504],{"class":94}," sorted",[84,164506,164416],{"class":154},[84,164508,164509],{"class":86,"line":106},[84,164510,3578],{"emptyLinePlaceholder":1252},[84,164512,164513,164515],{"class":86,"line":112},[84,164514,730],{"class":94},[84,164516,164416],{"class":154},[84,164518,164519,164521],{"class":86,"line":425},[84,164520,730],{"class":94},[84,164522,164523],{"class":154},"(new_numbers)\n",[14,164525,164527],{"id":164526},"_65-列表遍历","6.5 列表遍历",[60,164529,164531],{"className":121,"code":164530,"language":91,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[39,164532,164533,164553,164557,164567],{"__ignoreMap":66},[84,164534,164535,164537,164539,164541,164543,164545,164547,164549,164551],{"class":86,"line":87},[84,164536,161280],{"class":154},[84,164538,867],{"class":129},[84,164540,53375],{"class":154},[84,164542,150788],{"class":158},[84,164544,846],{"class":154},[84,164546,151836],{"class":158},[84,164548,846],{"class":154},[84,164550,160631],{"class":158},[84,164552,34398],{"class":154},[84,164554,164555],{"class":86,"line":98},[84,164556,3578],{"emptyLinePlaceholder":1252},[84,164558,164559,164561,164563,164565],{"class":86,"line":106},[84,164560,4203],{"class":129},[84,164562,161316],{"class":154},[84,164564,27206],{"class":129},[84,164566,161321],{"class":154},[84,164568,164569,164571],{"class":86,"line":112},[84,164570,32453],{"class":94},[84,164572,151560],{"class":154},[19,164574,164575],{},"需要索引时：",[60,164577,164579],{"className":121,"code":164578,"language":91,"meta":66,"style":66},"for index, name in enumerate(names):\n    print(index, name)\n",[39,164580,164581,164595],{"__ignoreMap":66},[84,164582,164583,164585,164588,164590,164592],{"class":86,"line":87},[84,164584,4203],{"class":129},[84,164586,164587],{"class":154}," index, name ",[84,164589,27206],{"class":129},[84,164591,32759],{"class":94},[84,164593,164594],{"class":154},"(names):\n",[84,164596,164597,164599],{"class":86,"line":98},[84,164598,32453],{"class":94},[84,164600,164601],{"class":154},"(index, name)\n",[19,164603,164604],{},"统计总分：",[60,164606,164608],{"className":121,"code":164607,"language":91,"meta":66,"style":66},"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",[39,164609,164610,164635,164643,164647,164658,164666,164670,164687],{"__ignoreMap":66},[84,164611,164612,164615,164617,164619,164621,164623,164625,164627,164629,164631,164633],{"class":86,"line":87},[84,164613,164614],{"class":154},"scores ",[84,164616,867],{"class":129},[84,164618,53375],{"class":154},[84,164620,2170],{"class":94},[84,164622,846],{"class":154},[84,164624,2044],{"class":94},[84,164626,846],{"class":154},[84,164628,1565],{"class":94},[84,164630,846],{"class":154},[84,164632,1870],{"class":94},[84,164634,34398],{"class":154},[84,164636,164637,164639,164641],{"class":86,"line":98},[84,164638,158160],{"class":154},[84,164640,867],{"class":129},[84,164642,48483],{"class":94},[84,164644,164645],{"class":86,"line":106},[84,164646,3578],{"emptyLinePlaceholder":1252},[84,164648,164649,164651,164653,164655],{"class":86,"line":112},[84,164650,4203],{"class":129},[84,164652,158683],{"class":154},[84,164654,27206],{"class":129},[84,164656,164657],{"class":154}," scores:\n",[84,164659,164660,164662,164664],{"class":86,"line":425},[84,164661,160207],{"class":154},[84,164663,10649],{"class":129},[84,164665,2760],{"class":154},[84,164667,164668],{"class":86,"line":2395},[84,164669,3578],{"emptyLinePlaceholder":1252},[84,164671,164672,164675,164677,164680,164682,164684],{"class":86,"line":2401},[84,164673,164674],{"class":154},"avg ",[84,164676,867],{"class":129},[84,164678,164679],{"class":154}," total ",[84,164681,1893],{"class":129},[84,164683,8503],{"class":94},[84,164685,164686],{"class":154},"(scores)\n",[84,164688,164689,164691,164693,164695,164698,164700,164703,164705,164707,164709],{"class":86,"line":2492},[84,164690,730],{"class":94},[84,164692,155],{"class":154},[84,164694,1372],{"class":129},[84,164696,164697],{"class":158},"\"平均分:",[84,164699,2204],{"class":94},[84,164701,164702],{"class":154},"avg",[84,164704,158059],{"class":129},[84,164706,2254],{"class":94},[84,164708,1562],{"class":158},[84,164710,162],{"class":154},[14,164712,164714],{"id":164713},"_66-元组tuple","6.6 元组tuple",[19,164716,164717],{},"元组和列表类似，但不可修改。",[60,164719,164721],{"className":121,"code":164720,"language":91,"meta":66,"style":66},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[39,164722,164723,164740],{"__ignoreMap":66},[84,164724,164725,164728,164730,164732,164734,164736,164738],{"class":86,"line":87},[84,164726,164727],{"class":154},"point ",[84,164729,867],{"class":129},[84,164731,2839],{"class":154},[84,164733,1756],{"class":94},[84,164735,846],{"class":154},[84,164737,2008],{"class":94},[84,164739,162],{"class":154},[84,164741,164742,164744,164746,164748,164750,164752,164754,164756,164758],{"class":86,"line":98},[84,164743,117448],{"class":154},[84,164745,867],{"class":129},[84,164747,2839],{"class":154},[84,164749,150788],{"class":158},[84,164751,846],{"class":154},[84,164753,849],{"class":94},[84,164755,846],{"class":154},[84,164757,70415],{"class":158},[84,164759,162],{"class":154},[19,164761,164762],{},"单元素元组必须加逗号：",[60,164764,164766],{"className":121,"code":164765,"language":91,"meta":66,"style":66},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[39,164767,164768,164782,164795,164799,164813],{"__ignoreMap":66},[84,164769,164770,164773,164775,164777,164779],{"class":86,"line":87},[84,164771,164772],{"class":154},"t1 ",[84,164774,867],{"class":129},[84,164776,2839],{"class":154},[84,164778,1756],{"class":94},[84,164780,164781],{"class":154},",)\n",[84,164783,164784,164787,164789,164791,164793],{"class":86,"line":98},[84,164785,164786],{"class":154},"t2 ",[84,164788,867],{"class":129},[84,164790,2839],{"class":154},[84,164792,1756],{"class":94},[84,164794,162],{"class":154},[84,164796,164797],{"class":86,"line":106},[84,164798,3578],{"emptyLinePlaceholder":1252},[84,164800,164801,164803,164805,164807,164810],{"class":86,"line":112},[84,164802,730],{"class":94},[84,164804,155],{"class":154},[84,164806,104244],{"class":94},[84,164808,164809],{"class":154},"(t1))  ",[84,164811,164812],{"class":1378},"# tuple\n",[84,164814,164815,164817,164819,164821,164824],{"class":86,"line":425},[84,164816,730],{"class":94},[84,164818,155],{"class":154},[84,164820,104244],{"class":94},[84,164822,164823],{"class":154},"(t2))  ",[84,164825,164826],{"class":1378},"# int\n",[19,164828,164829],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164831,164833],{"id":164832},"_67-字符串str","6.7 字符串str",[19,164835,164836],{},"字符串也是序列，可以索引、切片和遍历。",[60,164838,164840],{"className":121,"code":164839,"language":91,"meta":66,"style":66},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[39,164841,164842,164850,164854,164865,164877,164881,164892],{"__ignoreMap":66},[84,164843,164844,164846,164848],{"class":86,"line":87},[84,164845,157344],{"class":154},[84,164847,867],{"class":129},[84,164849,160581],{"class":158},[84,164851,164852],{"class":86,"line":98},[84,164853,3578],{"emptyLinePlaceholder":1252},[84,164855,164856,164858,164861,164863],{"class":86,"line":106},[84,164857,730],{"class":94},[84,164859,164860],{"class":154},"(text[",[84,164862,1504],{"class":94},[84,164864,5834],{"class":154},[84,164866,164867,164869,164871,164873,164875],{"class":86,"line":112},[84,164868,730],{"class":94},[84,164870,164860],{"class":154},[84,164872,1841],{"class":129},[84,164874,1529],{"class":94},[84,164876,5834],{"class":154},[84,164878,164879],{"class":86,"line":425},[84,164880,3578],{"emptyLinePlaceholder":1252},[84,164882,164883,164885,164887,164889],{"class":86,"line":2395},[84,164884,4203],{"class":129},[84,164886,160592],{"class":154},[84,164888,27206],{"class":129},[84,164890,164891],{"class":154}," text:\n",[84,164893,164894,164896],{"class":86,"line":2401},[84,164895,32453],{"class":94},[84,164897,160603],{"class":154},[19,164899,164900],{},"字符串不可变：",[60,164902,164904],{"className":121,"code":164903,"language":91,"meta":66,"style":66},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[39,164905,164906,164914],{"__ignoreMap":66},[84,164907,164908,164910,164912],{"class":86,"line":87},[84,164909,157344],{"class":154},[84,164911,867],{"class":129},[84,164913,160581],{"class":158},[84,164915,164916,164919,164921,164923,164925,164928],{"class":86,"line":98},[84,164917,164918],{"class":154},"text[",[84,164920,1504],{"class":94},[84,164922,5620],{"class":154},[84,164924,867],{"class":129},[84,164926,164927],{"class":158}," \"P\"",[84,164929,164930],{"class":1378},"  # 报错\n",[19,164932,164933],{},"如果要得到新字符串：",[60,164935,164937],{"className":121,"code":164936,"language":91,"meta":66,"style":66},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[39,164938,164939,164947,164965],{"__ignoreMap":66},[84,164940,164941,164943,164945],{"class":86,"line":87},[84,164942,157344],{"class":154},[84,164944,867],{"class":129},[84,164946,160581],{"class":158},[84,164948,164949,164951,164953,164955,164957,164960,164962],{"class":86,"line":98},[84,164950,157344],{"class":154},[84,164952,867],{"class":129},[84,164954,164927],{"class":158},[84,164956,136],{"class":129},[84,164958,164959],{"class":154}," text[",[84,164961,1529],{"class":94},[84,164963,164964],{"class":154},":]\n",[84,164966,164967,164969],{"class":86,"line":106},[84,164968,730],{"class":94},[84,164970,164971],{"class":154},"(text)\n",[14,164973,164975],{"id":164974},"_68-切片","6.8 切片",[19,164977,164978],{},"切片用于从序列中取一部分。",[60,164980,164982],{"className":121,"code":164981,"language":91,"meta":66,"style":66},"序列[开始:结束:步长]\n",[39,164983,164984],{"__ignoreMap":66},[84,164985,164986],{"class":86,"line":87},[84,164987,164981],{"class":154},[19,164989,164990],{},"结束位置不包含。",[60,164992,164994],{"className":121,"code":164993,"language":91,"meta":66,"style":66},"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",[39,164995,164996,165033,165037,165056,165071,165085,165099],{"__ignoreMap":66},[84,164997,164998,165001,165003,165005,165007,165009,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029,165031],{"class":86,"line":87},[84,164999,165000],{"class":154},"nums ",[84,165002,867],{"class":129},[84,165004,53375],{"class":154},[84,165006,1504],{"class":94},[84,165008,846],{"class":154},[84,165010,1529],{"class":94},[84,165012,846],{"class":154},[84,165014,1397],{"class":94},[84,165016,846],{"class":154},[84,165018,1391],{"class":94},[84,165020,846],{"class":154},[84,165022,1604],{"class":94},[84,165024,846],{"class":154},[84,165026,1629],{"class":94},[84,165028,846],{"class":154},[84,165030,1654],{"class":94},[84,165032,34398],{"class":154},[84,165034,165035],{"class":86,"line":98},[84,165036,3578],{"emptyLinePlaceholder":1252},[84,165038,165039,165041,165044,165046,165048,165050,165053],{"class":86,"line":106},[84,165040,730],{"class":94},[84,165042,165043],{"class":154},"(nums[",[84,165045,1529],{"class":94},[84,165047,2167],{"class":154},[84,165049,1604],{"class":94},[84,165051,165052],{"class":154},"])    ",[84,165054,165055],{"class":1378},"# [1, 2, 3]\n",[84,165057,165058,165060,165063,165065,165068],{"class":86,"line":112},[84,165059,730],{"class":94},[84,165061,165062],{"class":154},"(nums[:",[84,165064,1391],{"class":94},[84,165066,165067],{"class":154},"])     ",[84,165069,165070],{"class":1378},"# [0, 1, 2]\n",[84,165072,165073,165075,165077,165079,165082],{"class":86,"line":425},[84,165074,730],{"class":94},[84,165076,165043],{"class":154},[84,165078,1391],{"class":94},[84,165080,165081],{"class":154},":])     ",[84,165083,165084],{"class":1378},"# [3, 4, 5, 6]\n",[84,165086,165087,165089,165092,165094,165096],{"class":86,"line":2395},[84,165088,730],{"class":94},[84,165090,165091],{"class":154},"(nums[::",[84,165093,1397],{"class":94},[84,165095,165052],{"class":154},[84,165097,165098],{"class":1378},"# [0, 2, 4, 6]\n",[84,165100,165101,165103,165105,165107,165109,165112],{"class":86,"line":2401},[84,165102,730],{"class":94},[84,165104,165091],{"class":154},[84,165106,1841],{"class":129},[84,165108,1529],{"class":94},[84,165110,165111],{"class":154},"])   ",[84,165113,165114],{"class":1378},"# 反转\n",[19,165116,165117],{},"字符串切片：",[60,165119,165121],{"className":121,"code":165120,"language":91,"meta":66,"style":66},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[39,165122,165123,165132,165146],{"__ignoreMap":66},[84,165124,165125,165127,165129],{"class":86,"line":87},[84,165126,157344],{"class":154},[84,165128,867],{"class":129},[84,165130,165131],{"class":158}," \"abcdef\"\n",[84,165133,165134,165136,165138,165140,165142,165144],{"class":86,"line":98},[84,165135,730],{"class":94},[84,165137,164860],{"class":154},[84,165139,1529],{"class":94},[84,165141,2167],{"class":154},[84,165143,1604],{"class":94},[84,165145,5834],{"class":154},[84,165147,165148,165150,165153,165155,165157],{"class":86,"line":106},[84,165149,730],{"class":94},[84,165151,165152],{"class":154},"(text[::",[84,165154,1841],{"class":129},[84,165156,1529],{"class":94},[84,165158,5834],{"class":154},[14,165160,165162],{"id":165161},"_69-集合set","6.9 集合set",[19,165164,165165],{},"集合特点：",[26,165167,165168,165171,165174],{},[29,165169,165170],{},"无序。",[29,165172,165173],{},"元素不重复。",[29,165175,165176],{},"可以做交集、并集、差集。",[60,165178,165180],{"className":121,"code":165179,"language":91,"meta":66,"style":66},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[39,165181,165182,165210],{"__ignoreMap":66},[84,165183,165184,165186,165188,165190,165192,165194,165196,165198,165200,165202,165204,165206,165208],{"class":86,"line":87},[84,165185,165000],{"class":154},[84,165187,867],{"class":129},[84,165189,5625],{"class":154},[84,165191,1529],{"class":94},[84,165193,846],{"class":154},[84,165195,1397],{"class":94},[84,165197,846],{"class":154},[84,165199,1391],{"class":94},[84,165201,846],{"class":154},[84,165203,1391],{"class":94},[84,165205,846],{"class":154},[84,165207,1604],{"class":94},[84,165209,2746],{"class":154},[84,165211,165212,165214],{"class":86,"line":98},[84,165213,730],{"class":94},[84,165215,165216],{"class":154},"(nums)\n",[19,165218,165219],{},"创建空集合：",[60,165221,165223],{"className":121,"code":165222,"language":91,"meta":66,"style":66},"s = set()\n",[39,165224,165225],{"__ignoreMap":66},[84,165226,165227,165229,165231,165233],{"class":86,"line":87},[84,165228,11751],{"class":154},[84,165230,867],{"class":129},[84,165232,120851],{"class":94},[84,165234,183],{"class":154},[19,165236,10197,165237,165239],{},[39,165238,33612],{}," 是空字典，不是空集合。",[19,165241,165242],{},"集合常用操作：",[60,165244,165246],{"className":121,"code":165245,"language":91,"meta":66,"style":66},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[39,165247,165248,165268,165272,165281,165290,165299],{"__ignoreMap":66},[84,165249,165250,165252,165254,165256,165258,165260,165262,165264,165266],{"class":86,"line":87},[84,165251,11751],{"class":154},[84,165253,867],{"class":129},[84,165255,5625],{"class":154},[84,165257,1529],{"class":94},[84,165259,846],{"class":154},[84,165261,1397],{"class":94},[84,165263,846],{"class":154},[84,165265,1391],{"class":94},[84,165267,2746],{"class":154},[84,165269,165270],{"class":86,"line":98},[84,165271,3578],{"emptyLinePlaceholder":1252},[84,165273,165274,165277,165279],{"class":86,"line":106},[84,165275,165276],{"class":154},"s.add(",[84,165278,1604],{"class":94},[84,165280,162],{"class":154},[84,165282,165283,165286,165288],{"class":86,"line":112},[84,165284,165285],{"class":154},"s.remove(",[84,165287,1397],{"class":94},[84,165289,162],{"class":154},[84,165291,165292,165295,165297],{"class":86,"line":425},[84,165293,165294],{"class":154},"s.discard(",[84,165296,1756],{"class":94},[84,165298,162],{"class":154},[84,165300,165301,165303,165305,165307],{"class":86,"line":2395},[84,165302,730],{"class":94},[84,165304,155],{"class":154},[84,165306,8530],{"class":94},[84,165308,165309],{"class":154},"(s))\n",[19,165311,165312],{},"交并差：",[60,165314,165316],{"className":121,"code":165315,"language":91,"meta":66,"style":66},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[39,165317,165318,165338,165358,165362,165377,165390],{"__ignoreMap":66},[84,165319,165320,165322,165324,165326,165328,165330,165332,165334,165336],{"class":86,"line":87},[84,165321,12091],{"class":154},[84,165323,867],{"class":129},[84,165325,5625],{"class":154},[84,165327,1529],{"class":94},[84,165329,846],{"class":154},[84,165331,1397],{"class":94},[84,165333,846],{"class":154},[84,165335,1391],{"class":94},[84,165337,2746],{"class":154},[84,165339,165340,165342,165344,165346,165348,165350,165352,165354,165356],{"class":86,"line":98},[84,165341,12117],{"class":154},[84,165343,867],{"class":129},[84,165345,5625],{"class":154},[84,165347,1391],{"class":94},[84,165349,846],{"class":154},[84,165351,1604],{"class":94},[84,165353,846],{"class":154},[84,165355,1629],{"class":94},[84,165357,2746],{"class":154},[84,165359,165360],{"class":86,"line":106},[84,165361,3578],{"emptyLinePlaceholder":1252},[84,165363,165364,165366,165369,165371,165374],{"class":86,"line":112},[84,165365,730],{"class":94},[84,165367,165368],{"class":154},"(a ",[84,165370,1663],{"class":129},[84,165372,165373],{"class":154}," b)  ",[84,165375,165376],{"class":1378},"# 交集\n",[84,165378,165379,165381,165383,165385,165387],{"class":86,"line":425},[84,165380,730],{"class":94},[84,165382,165368],{"class":154},[84,165384,2229],{"class":129},[84,165386,165373],{"class":154},[84,165388,165389],{"class":1378},"# 并集\n",[84,165391,165392,165394,165396,165398,165400],{"class":86,"line":2395},[84,165393,730],{"class":94},[84,165395,165368],{"class":154},[84,165397,1841],{"class":129},[84,165399,165373],{"class":154},[84,165401,165402],{"class":1378},"# 差集\n",[14,165404,165406],{"id":165405},"_610-字典dict","6.10 字典dict",[19,165408,165409],{},"字典通过 key-value 保存数据。",[60,165411,165413],{"className":121,"code":165412,"language":91,"meta":66,"style":66},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[39,165414,165415,165423,165433,165444,165454],{"__ignoreMap":66},[84,165416,165417,165419,165421],{"class":86,"line":87},[84,165418,150381],{"class":154},[84,165420,867],{"class":129},[84,165422,16742],{"class":154},[84,165424,165425,165427,165429,165431],{"class":86,"line":98},[84,165426,147920],{"class":158},[84,165428,52586],{"class":154},[84,165430,150788],{"class":158},[84,165432,32619],{"class":154},[84,165434,165435,165438,165440,165442],{"class":86,"line":106},[84,165436,165437],{"class":158},"    \"age\"",[84,165439,52586],{"class":154},[84,165441,849],{"class":94},[84,165443,32619],{"class":154},[84,165445,165446,165449,165451],{"class":86,"line":112},[84,165447,165448],{"class":158},"    \"score\"",[84,165450,52586],{"class":154},[84,165452,165453],{"class":94},"95\n",[84,165455,165456],{"class":86,"line":425},[84,165457,2746],{"class":154},[19,165459,165460],{},"获取值：",[60,165462,165464],{"className":121,"code":165463,"language":91,"meta":66,"style":66},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[39,165465,165466,165477],{"__ignoreMap":66},[84,165467,165468,165470,165473,165475],{"class":86,"line":87},[84,165469,730],{"class":94},[84,165471,165472],{"class":154},"(student[",[84,165474,63825],{"class":158},[84,165476,5834],{"class":154},[84,165478,165479,165481,165484,165486],{"class":86,"line":98},[84,165480,730],{"class":94},[84,165482,165483],{"class":154},"(student.get(",[84,165485,63825],{"class":158},[84,165487,31651],{"class":154},[19,165489,16558],{},[60,165491,165493],{"className":121,"code":165492,"language":91,"meta":66,"style":66},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[39,165494,165495,165508],{"__ignoreMap":66},[84,165496,165497,165499,165502,165505],{"class":86,"line":87},[84,165498,153759],{"class":154},[84,165500,165501],{"class":158},"\"address\"",[84,165503,165504],{"class":154},"]     ",[84,165506,165507],{"class":1378},"# key不存在会报错\n",[84,165509,165510,165513,165515,165517],{"class":86,"line":98},[84,165511,165512],{"class":154},"student.get(",[84,165514,165501],{"class":158},[84,165516,1154],{"class":154},[84,165518,165519],{"class":1378},"# key不存在返回None\n",[19,165521,165522],{},"设置默认值：",[60,165524,165526],{"className":121,"code":165525,"language":91,"meta":66,"style":66},"print(student.get(\"address\", \"未知\"))\n",[39,165527,165528],{"__ignoreMap":66},[84,165529,165530,165532,165534,165536,165538,165541],{"class":86,"line":87},[84,165531,730],{"class":94},[84,165533,165483],{"class":154},[84,165535,165501],{"class":158},[84,165537,846],{"class":154},[84,165539,165540],{"class":158},"\"未知\"",[84,165542,31651],{"class":154},[19,165544,165545],{},"新增和修改：",[60,165547,165549],{"className":121,"code":165548,"language":91,"meta":66,"style":66},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[39,165550,165551,165564],{"__ignoreMap":66},[84,165552,165553,165555,165557,165559,165561],{"class":86,"line":87},[84,165554,153759],{"class":154},[84,165556,70270],{"class":158},[84,165558,5620],{"class":154},[84,165560,867],{"class":129},[84,165562,165563],{"class":94}," 19\n",[84,165565,165566,165568,165570,165572,165574],{"class":86,"line":98},[84,165567,153759],{"class":154},[84,165569,165501],{"class":158},[84,165571,5620],{"class":154},[84,165573,867],{"class":129},[84,165575,165576],{"class":158}," \"北京\"\n",[19,165578,165579],{},"删除：",[60,165581,165583],{"className":121,"code":165582,"language":91,"meta":66,"style":66},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[39,165584,165585,165598,165608],{"__ignoreMap":66},[84,165586,165587,165589,165591,165594,165596],{"class":86,"line":87},[84,165588,156258],{"class":154},[84,165590,867],{"class":129},[84,165592,165593],{"class":154}," student.pop(",[84,165595,152372],{"class":158},[84,165597,162],{"class":154},[84,165599,165600,165602,165604,165606],{"class":86,"line":98},[84,165601,164283],{"class":129},[84,165603,153049],{"class":154},[84,165605,70270],{"class":158},[84,165607,34398],{"class":154},[84,165609,165610],{"class":86,"line":106},[84,165611,165612],{"class":154},"student.clear()\n",[14,165614,165616],{"id":165615},"_611-字典遍历","6.11 字典遍历",[19,165618,165619],{},"遍历 key：",[60,165621,165623],{"className":121,"code":165622,"language":91,"meta":66,"style":66},"for key in student:\n    print(key, student[key])\n",[39,165624,165625,165637],{"__ignoreMap":66},[84,165626,165627,165629,165632,165634],{"class":86,"line":87},[84,165628,4203],{"class":129},[84,165630,165631],{"class":154}," key ",[84,165633,27206],{"class":129},[84,165635,165636],{"class":154}," student:\n",[84,165638,165639,165641],{"class":86,"line":98},[84,165640,32453],{"class":94},[84,165642,165643],{"class":154},"(key, student[key])\n",[19,165645,165646],{},"遍历 value：",[60,165648,165650],{"className":121,"code":165649,"language":91,"meta":66,"style":66},"for value in student.values():\n    print(value)\n",[39,165651,165652,165664],{"__ignoreMap":66},[84,165653,165654,165656,165659,165661],{"class":86,"line":87},[84,165655,4203],{"class":129},[84,165657,165658],{"class":154}," value ",[84,165660,27206],{"class":129},[84,165662,165663],{"class":154}," student.values():\n",[84,165665,165666,165668],{"class":86,"line":98},[84,165667,32453],{"class":94},[84,165669,165670],{"class":154},"(value)\n",[19,165672,165673],{},"遍历 key 和 value：",[60,165675,165677],{"className":121,"code":165676,"language":91,"meta":66,"style":66},"for key, value in student.items():\n    print(key, value)\n",[39,165678,165679,165691],{"__ignoreMap":66},[84,165680,165681,165683,165686,165688],{"class":86,"line":87},[84,165682,4203],{"class":129},[84,165684,165685],{"class":154}," key, value ",[84,165687,27206],{"class":129},[84,165689,165690],{"class":154}," student.items():\n",[84,165692,165693,165695],{"class":86,"line":98},[84,165694,32453],{"class":94},[84,165696,165697],{"class":154},"(key, value)\n",[14,165699,165701],{"id":165700},"_612-嵌套容器","6.12 嵌套容器",[19,165703,165704],{},"列表中保存字典，是项目中最常见的结构之一。",[60,165706,165708],{"className":121,"code":165707,"language":91,"meta":66,"style":66},"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",[39,165709,165710,165718,165746,165774,165802,165806,165810,165820],{"__ignoreMap":66},[84,165711,165712,165714,165716],{"class":86,"line":87},[84,165713,160616],{"class":154},[84,165715,867],{"class":129},[84,165717,56594],{"class":154},[84,165719,165720,165722,165724,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744],{"class":86,"line":98},[84,165721,149285],{"class":154},[84,165723,63825],{"class":158},[84,165725,52586],{"class":154},[84,165727,150788],{"class":158},[84,165729,846],{"class":154},[84,165731,70270],{"class":158},[84,165733,52586],{"class":154},[84,165735,849],{"class":94},[84,165737,846],{"class":154},[84,165739,152372],{"class":158},[84,165741,52586],{"class":154},[84,165743,2297],{"class":94},[84,165745,6107],{"class":154},[84,165747,165748,165750,165752,165754,165756,165758,165760,165762,165764,165766,165768,165770,165772],{"class":86,"line":106},[84,165749,149285],{"class":154},[84,165751,63825],{"class":158},[84,165753,52586],{"class":154},[84,165755,151836],{"class":158},[84,165757,846],{"class":154},[84,165759,70270],{"class":158},[84,165761,52586],{"class":154},[84,165763,1934],{"class":94},[84,165765,846],{"class":154},[84,165767,152372],{"class":158},[84,165769,52586],{"class":154},[84,165771,2119],{"class":94},[84,165773,6107],{"class":154},[84,165775,165776,165778,165780,165782,165784,165786,165788,165790,165792,165794,165796,165798,165800],{"class":86,"line":112},[84,165777,149285],{"class":154},[84,165779,63825],{"class":158},[84,165781,52586],{"class":154},[84,165783,160631],{"class":158},[84,165785,846],{"class":154},[84,165787,70270],{"class":158},[84,165789,52586],{"class":154},[84,165791,1983],{"class":94},[84,165793,846],{"class":154},[84,165795,152372],{"class":158},[84,165797,52586],{"class":154},[84,165799,1716],{"class":94},[84,165801,6107],{"class":154},[84,165803,165804],{"class":86,"line":425},[84,165805,34398],{"class":154},[84,165807,165808],{"class":86,"line":2395},[84,165809,3578],{"emptyLinePlaceholder":1252},[84,165811,165812,165814,165816,165818],{"class":86,"line":2401},[84,165813,4203],{"class":129},[84,165815,153037],{"class":154},[84,165817,27206],{"class":129},[84,165819,153042],{"class":154},[84,165821,165822,165824,165826,165828,165831,165833],{"class":86,"line":2492},[84,165823,32453],{"class":94},[84,165825,165472],{"class":154},[84,165827,63825],{"class":158},[84,165829,165830],{"class":154},"], student[",[84,165832,152372],{"class":158},[84,165834,5834],{"class":154},[19,165836,165837],{},"统计平均分：",[60,165839,165841],{"className":121,"code":165840,"language":91,"meta":66,"style":66},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[39,165842,165843,165851,165855,165865,165877,165881,165896],{"__ignoreMap":66},[84,165844,165845,165847,165849],{"class":86,"line":87},[84,165846,158160],{"class":154},[84,165848,867],{"class":129},[84,165850,48483],{"class":94},[84,165852,165853],{"class":86,"line":98},[84,165854,3578],{"emptyLinePlaceholder":1252},[84,165856,165857,165859,165861,165863],{"class":86,"line":106},[84,165858,4203],{"class":129},[84,165860,153037],{"class":154},[84,165862,27206],{"class":129},[84,165864,153042],{"class":154},[84,165866,165867,165869,165871,165873,165875],{"class":86,"line":112},[84,165868,160207],{"class":154},[84,165870,10649],{"class":129},[84,165872,153049],{"class":154},[84,165874,152372],{"class":158},[84,165876,34398],{"class":154},[84,165878,165879],{"class":86,"line":425},[84,165880,3578],{"emptyLinePlaceholder":1252},[84,165882,165883,165885,165887,165889,165891,165893],{"class":86,"line":2395},[84,165884,164674],{"class":154},[84,165886,867],{"class":129},[84,165888,164679],{"class":154},[84,165890,1893],{"class":129},[84,165892,8503],{"class":94},[84,165894,165895],{"class":154},"(students)\n",[84,165897,165898,165900,165902,165904,165906,165908,165910,165912,165914,165916],{"class":86,"line":2401},[84,165899,730],{"class":94},[84,165901,155],{"class":154},[84,165903,1372],{"class":129},[84,165905,164697],{"class":158},[84,165907,2204],{"class":94},[84,165909,164702],{"class":154},[84,165911,158059],{"class":129},[84,165913,2254],{"class":94},[84,165915,1562],{"class":158},[84,165917,162],{"class":154},[19,165919,165920],{},"查找学生：",[60,165922,165924],{"className":121,"code":165923,"language":91,"meta":66,"style":66},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[39,165925,165926,165941,165945,165955,165969,165975,165979,165985],{"__ignoreMap":66},[84,165927,165928,165930,165932,165934,165936,165939],{"class":86,"line":87},[84,165929,112712],{"class":154},[84,165931,867],{"class":129},[84,165933,61751],{"class":94},[84,165935,155],{"class":154},[84,165937,165938],{"class":158},"\"请输入学生姓名:\"",[84,165940,162],{"class":154},[84,165942,165943],{"class":86,"line":98},[84,165944,3578],{"emptyLinePlaceholder":1252},[84,165946,165947,165949,165951,165953],{"class":86,"line":106},[84,165948,4203],{"class":129},[84,165950,153037],{"class":154},[84,165952,27206],{"class":129},[84,165954,153042],{"class":154},[84,165956,165957,165959,165961,165963,165965,165967],{"class":86,"line":112},[84,165958,4279],{"class":129},[84,165960,153049],{"class":154},[84,165962,63825],{"class":158},[84,165964,5620],{"class":154},[84,165966,4127],{"class":129},[84,165968,161332],{"class":154},[84,165970,165971,165973],{"class":86,"line":425},[84,165972,33604],{"class":94},[84,165974,150942],{"class":154},[84,165976,165977],{"class":86,"line":2395},[84,165978,32780],{"class":129},[84,165980,165981,165983],{"class":86,"line":2401},[84,165982,2882],{"class":129},[84,165984,4917],{"class":154},[84,165986,165987,165989,165991,165994],{"class":86,"line":2492},[84,165988,32453],{"class":94},[84,165990,155],{"class":154},[84,165992,165993],{"class":158},"\"没有找到\"",[84,165995,162],{"class":154},[14,165997,165999],{"id":165998},"_613-容器通用操作","6.13 容器通用操作",[19,166001,166002],{},"长度：",[60,166004,166006],{"className":121,"code":166005,"language":91,"meta":66,"style":66},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[39,166007,166008,166027,166037],{"__ignoreMap":66},[84,166009,166010,166012,166015,166017,166019,166021,166023,166025],{"class":86,"line":87},[84,166011,8530],{"class":94},[84,166013,166014],{"class":154},"([",[84,166016,1529],{"class":94},[84,166018,846],{"class":154},[84,166020,1397],{"class":94},[84,166022,846],{"class":154},[84,166024,1391],{"class":94},[84,166026,5834],{"class":154},[84,166028,166029,166031,166033,166035],{"class":86,"line":98},[84,166030,8530],{"class":94},[84,166032,155],{"class":154},[84,166034,156780],{"class":158},[84,166036,162],{"class":154},[84,166038,166039,166041,166044,166046,166048,166050],{"class":86,"line":106},[84,166040,8530],{"class":94},[84,166042,166043],{"class":154},"({",[84,166045,63825],{"class":158},[84,166047,52586],{"class":154},[84,166049,150788],{"class":158},[84,166051,166052],{"class":154},"})\n",[19,166054,166055],{},"最大最小：",[60,166057,166059],{"className":121,"code":166058,"language":91,"meta":66,"style":66},"max([1, 2, 3])\nmin([1, 2, 3])\n",[39,166060,166061,166079],{"__ignoreMap":66},[84,166062,166063,166065,166067,166069,166071,166073,166075,166077],{"class":86,"line":87},[84,166064,7188],{"class":94},[84,166066,166014],{"class":154},[84,166068,1529],{"class":94},[84,166070,846],{"class":154},[84,166072,1397],{"class":94},[84,166074,846],{"class":154},[84,166076,1391],{"class":94},[84,166078,5834],{"class":154},[84,166080,166081,166084,166086,166088,166090,166092,166094,166096],{"class":86,"line":98},[84,166082,166083],{"class":94},"min",[84,166085,166014],{"class":154},[84,166087,1529],{"class":94},[84,166089,846],{"class":154},[84,166091,1397],{"class":94},[84,166093,846],{"class":154},[84,166095,1391],{"class":94},[84,166097,5834],{"class":154},[19,166099,166100],{},"求和：",[60,166102,166104],{"className":121,"code":166103,"language":91,"meta":66,"style":66},"sum([1, 2, 3])\n",[39,166105,166106],{"__ignoreMap":66},[84,166107,166108,166111,166113,166115,166117,166119,166121,166123],{"class":86,"line":87},[84,166109,166110],{"class":94},"sum",[84,166112,166014],{"class":154},[84,166114,1529],{"class":94},[84,166116,846],{"class":154},[84,166118,1397],{"class":94},[84,166120,846],{"class":154},[84,166122,1391],{"class":94},[84,166124,5834],{"class":154},[19,166126,164371],{},[60,166128,166130],{"className":121,"code":166129,"language":91,"meta":66,"style":66},"sorted([3, 1, 2])\n",[39,166131,166132],{"__ignoreMap":66},[84,166133,166134,166137,166139,166141,166143,166145,166147,166149],{"class":86,"line":87},[84,166135,166136],{"class":94},"sorted",[84,166138,166014],{"class":154},[84,166140,1391],{"class":94},[84,166142,846],{"class":154},[84,166144,1529],{"class":94},[84,166146,846],{"class":154},[84,166148,1397],{"class":94},[84,166150,5834],{"class":154},[19,166152,166153],{},"类型转换：",[60,166155,166157],{"className":121,"code":166156,"language":91,"meta":66,"style":66},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[39,166158,166159,166169,166187],{"__ignoreMap":66},[84,166160,166161,166163,166165,166167],{"class":86,"line":87},[84,166162,154970],{"class":94},[84,166164,155],{"class":154},[84,166166,156780],{"class":158},[84,166168,162],{"class":154},[84,166170,166171,166173,166175,166177,166179,166181,166183,166185],{"class":86,"line":98},[84,166172,156165],{"class":94},[84,166174,166014],{"class":154},[84,166176,1529],{"class":94},[84,166178,846],{"class":154},[84,166180,1397],{"class":94},[84,166182,846],{"class":154},[84,166184,1391],{"class":94},[84,166186,5834],{"class":154},[84,166188,166189,166191,166193,166195,166197,166199,166201,166203,166205,166207],{"class":86,"line":106},[84,166190,156190],{"class":94},[84,166192,166014],{"class":154},[84,166194,1529],{"class":94},[84,166196,846],{"class":154},[84,166198,1529],{"class":94},[84,166200,846],{"class":154},[84,166202,1397],{"class":94},[84,166204,846],{"class":154},[84,166206,1391],{"class":94},[84,166208,5834],{"class":154},[19,166210,166211],{},"成员判断：",[60,166213,166215],{"className":121,"code":166214,"language":91,"meta":66,"style":66},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[39,166216,166217,166234,166258],{"__ignoreMap":66},[84,166218,166219,166221,166223,166226,166229,166232],{"class":86,"line":87},[84,166220,730],{"class":94},[84,166222,155],{"class":154},[84,166224,166225],{"class":158},"\"a\"",[84,166227,166228],{"class":129}," in",[84,166230,166231],{"class":158}," \"abc\"",[84,166233,162],{"class":154},[84,166235,166236,166238,166240,166242,166244,166246,166248,166250,166252,166254,166256],{"class":86,"line":98},[84,166237,730],{"class":94},[84,166239,155],{"class":154},[84,166241,1529],{"class":94},[84,166243,166228],{"class":129},[84,166245,53375],{"class":154},[84,166247,1529],{"class":94},[84,166249,846],{"class":154},[84,166251,1397],{"class":94},[84,166253,846],{"class":154},[84,166255,1391],{"class":94},[84,166257,5834],{"class":154},[84,166259,166260,166262,166264,166266,166268,166270,166272,166274,166276],{"class":86,"line":106},[84,166261,730],{"class":94},[84,166263,155],{"class":154},[84,166265,63825],{"class":158},[84,166267,166228],{"class":129},[84,166269,5625],{"class":154},[84,166271,63825],{"class":158},[84,166273,52586],{"class":154},[84,166275,150788],{"class":158},[84,166277,166052],{"class":154},[14,166279,166281],{"id":166280},"_614-推导式","6.14 推导式",[19,166283,166284],{},"推导式用于快速生成容器。",[19,166286,166287],{},"列表推导式：",[60,166289,166291],{"className":121,"code":166290,"language":91,"meta":66,"style":66},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[39,166292,166293,166320],{"__ignoreMap":66},[84,166294,166295,166297,166299,166302,166304,166306,166308,166310,166312,166314,166316,166318],{"class":86,"line":87},[84,166296,165000],{"class":154},[84,166298,867],{"class":129},[84,166300,166301],{"class":154}," [i ",[84,166303,4203],{"class":129},[84,166305,10610],{"class":154},[84,166307,27206],{"class":129},[84,166309,33596],{"class":94},[84,166311,155],{"class":154},[84,166313,1529],{"class":94},[84,166315,846],{"class":154},[84,166317,1654],{"class":94},[84,166319,98446],{"class":154},[84,166321,166322,166324],{"class":86,"line":98},[84,166323,730],{"class":94},[84,166325,165216],{"class":154},[19,166327,166328],{},"带条件：",[60,166330,166332],{"className":121,"code":166331,"language":91,"meta":66,"style":66},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[39,166333,166334,166375],{"__ignoreMap":66},[84,166335,166336,166339,166341,166343,166345,166347,166349,166351,166353,166355,166357,166359,166361,166363,166365,166367,166369,166371,166373],{"class":86,"line":87},[84,166337,166338],{"class":154},"even_nums ",[84,166340,867],{"class":129},[84,166342,166301],{"class":154},[84,166344,4203],{"class":129},[84,166346,10610],{"class":154},[84,166348,27206],{"class":129},[84,166350,33596],{"class":94},[84,166352,155],{"class":154},[84,166354,1529],{"class":94},[84,166356,846],{"class":154},[84,166358,1647],{"class":94},[84,166360,1154],{"class":154},[84,166362,2712],{"class":129},[84,166364,10610],{"class":154},[84,166366,1638],{"class":129},[84,166368,15925],{"class":94},[84,166370,102697],{"class":129},[84,166372,5271],{"class":94},[84,166374,34398],{"class":154},[84,166376,166377,166379],{"class":86,"line":98},[84,166378,730],{"class":94},[84,166380,166381],{"class":154},"(even_nums)\n",[19,166383,166384],{},"字典推导式：",[60,166386,166388],{"className":121,"code":166387,"language":91,"meta":66,"style":66},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[39,166389,166390,166424],{"__ignoreMap":66},[84,166391,166392,166395,166397,166400,166402,166404,166407,166409,166411,166413,166415,166417,166419,166421],{"class":86,"line":87},[84,166393,166394],{"class":154},"squares ",[84,166396,867],{"class":129},[84,166398,166399],{"class":154}," {i: i ",[84,166401,11833],{"class":129},[84,166403,15925],{"class":94},[84,166405,166406],{"class":129}," for",[84,166408,10610],{"class":154},[84,166410,27206],{"class":129},[84,166412,33596],{"class":94},[84,166414,155],{"class":154},[84,166416,1529],{"class":94},[84,166418,846],{"class":154},[84,166420,1654],{"class":94},[84,166422,166423],{"class":154},")}\n",[84,166425,166426,166428],{"class":86,"line":98},[84,166427,730],{"class":94},[84,166429,166430],{"class":154},"(squares)\n",[19,166432,166433],{},"集合推导式：",[60,166435,166437],{"className":121,"code":166436,"language":91,"meta":66,"style":66},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[39,166438,166439,166460],{"__ignoreMap":66},[84,166440,166441,166444,166446,166449,166451,166453,166455,166458],{"class":86,"line":87},[84,166442,166443],{"class":154},"chars ",[84,166445,867],{"class":129},[84,166447,166448],{"class":154}," {ch ",[84,166450,4203],{"class":129},[84,166452,160592],{"class":154},[84,166454,27206],{"class":129},[84,166456,166457],{"class":158}," \"hello\"",[84,166459,2746],{"class":154},[84,166461,166462,166464],{"class":86,"line":98},[84,166463,730],{"class":94},[84,166465,166466],{"class":154},"(chars)\n",[19,166468,166469],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166471,166473],{"id":166472},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[60,166475,166477],{"className":121,"code":166476,"language":91,"meta":66,"style":66},"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",[39,166478,166479,166487,166507,166527,166547,166567,166571,166575,166583,166597,166606,166610,166620,166632,166636,166656,166665,166669,166685,166690,166694,166708,166712,166734,166770],{"__ignoreMap":66},[84,166480,166481,166483,166485],{"class":86,"line":87},[84,166482,160616],{"class":154},[84,166484,867],{"class":129},[84,166486,56594],{"class":154},[84,166488,166489,166491,166493,166495,166497,166499,166501,166503,166505],{"class":86,"line":98},[84,166490,149285],{"class":154},[84,166492,63825],{"class":158},[84,166494,52586],{"class":154},[84,166496,150788],{"class":158},[84,166498,846],{"class":154},[84,166500,152372],{"class":158},[84,166502,52586],{"class":154},[84,166504,2297],{"class":94},[84,166506,6107],{"class":154},[84,166508,166509,166511,166513,166515,166517,166519,166521,166523,166525],{"class":86,"line":106},[84,166510,149285],{"class":154},[84,166512,63825],{"class":158},[84,166514,52586],{"class":154},[84,166516,151836],{"class":158},[84,166518,846],{"class":154},[84,166520,152372],{"class":158},[84,166522,52586],{"class":154},[84,166524,2119],{"class":94},[84,166526,6107],{"class":154},[84,166528,166529,166531,166533,166535,166537,166539,166541,166543,166545],{"class":86,"line":112},[84,166530,149285],{"class":154},[84,166532,63825],{"class":158},[84,166534,52586],{"class":154},[84,166536,160631],{"class":158},[84,166538,846],{"class":154},[84,166540,152372],{"class":158},[84,166542,52586],{"class":154},[84,166544,1716],{"class":94},[84,166546,6107],{"class":154},[84,166548,166549,166551,166553,166555,166557,166559,166561,166563,166565],{"class":86,"line":425},[84,166550,149285],{"class":154},[84,166552,63825],{"class":158},[84,166554,52586],{"class":154},[84,166556,164210],{"class":158},[84,166558,846],{"class":154},[84,166560,152372],{"class":158},[84,166562,52586],{"class":154},[84,166564,2190],{"class":94},[84,166566,6107],{"class":154},[84,166568,166569],{"class":86,"line":2395},[84,166570,34398],{"class":154},[84,166572,166573],{"class":86,"line":2401},[84,166574,3578],{"emptyLinePlaceholder":1252},[84,166576,166577,166579,166581],{"class":86,"line":2492},[84,166578,158160],{"class":154},[84,166580,867],{"class":129},[84,166582,48483],{"class":94},[84,166584,166585,166588,166590,166593,166595],{"class":86,"line":2498},[84,166586,166587],{"class":154},"max_student ",[84,166589,867],{"class":129},[84,166591,166592],{"class":154}," students[",[84,166594,1504],{"class":94},[84,166596,34398],{"class":154},[84,166598,166599,166602,166604],{"class":86,"line":2510},[84,166600,166601],{"class":154},"passed ",[84,166603,867],{"class":129},[84,166605,52987],{"class":154},[84,166607,166608],{"class":86,"line":2793},[84,166609,3578],{"emptyLinePlaceholder":1252},[84,166611,166612,166614,166616,166618],{"class":86,"line":2798},[84,166613,4203],{"class":129},[84,166615,153037],{"class":154},[84,166617,27206],{"class":129},[84,166619,153042],{"class":154},[84,166621,166622,166624,166626,166628,166630],{"class":86,"line":2804},[84,166623,160207],{"class":154},[84,166625,10649],{"class":129},[84,166627,153049],{"class":154},[84,166629,152372],{"class":158},[84,166631,34398],{"class":154},[84,166633,166634],{"class":86,"line":2809},[84,166635,3578],{"emptyLinePlaceholder":1252},[84,166637,166638,166640,166642,166644,166646,166648,166651,166653],{"class":86,"line":2823},[84,166639,4279],{"class":129},[84,166641,153049],{"class":154},[84,166643,152372],{"class":158},[84,166645,5620],{"class":154},[84,166647,2268],{"class":129},[84,166649,166650],{"class":154}," max_student[",[84,166652,152372],{"class":158},[84,166654,166655],{"class":154},"]:\n",[84,166657,166658,166661,166663],{"class":86,"line":2828},[84,166659,166660],{"class":154},"        max_student ",[84,166662,867],{"class":129},[84,166664,153065],{"class":154},[84,166666,166667],{"class":86,"line":2834},[84,166668,3578],{"emptyLinePlaceholder":1252},[84,166670,166671,166673,166675,166677,166679,166681,166683],{"class":86,"line":2855},[84,166672,4279],{"class":129},[84,166674,153049],{"class":154},[84,166676,152372],{"class":158},[84,166678,5620],{"class":154},[84,166680,2891],{"class":129},[84,166682,158737],{"class":94},[84,166684,4917],{"class":154},[84,166686,166687],{"class":86,"line":2860},[84,166688,166689],{"class":154},"        passed.append(student)\n",[84,166691,166692],{"class":86,"line":2874},[84,166693,3578],{"emptyLinePlaceholder":1252},[84,166695,166696,166698,166700,166702,166704,166706],{"class":86,"line":2879},[84,166697,164674],{"class":154},[84,166699,867],{"class":129},[84,166701,164679],{"class":154},[84,166703,1893],{"class":129},[84,166705,8503],{"class":94},[84,166707,165895],{"class":154},[84,166709,166710],{"class":86,"line":2908},[84,166711,3578],{"emptyLinePlaceholder":1252},[84,166713,166714,166716,166718,166720,166722,166724,166726,166728,166730,166732],{"class":86,"line":2913},[84,166715,730],{"class":94},[84,166717,155],{"class":154},[84,166719,1372],{"class":129},[84,166721,164697],{"class":158},[84,166723,2204],{"class":94},[84,166725,164702],{"class":154},[84,166727,158059],{"class":129},[84,166729,2254],{"class":94},[84,166731,1562],{"class":158},[84,166733,162],{"class":154},[84,166735,166736,166738,166740,166742,166745,166747,166750,166752,166754,166756,166758,166760,166762,166764,166766,166768],{"class":86,"line":2930},[84,166737,730],{"class":94},[84,166739,155],{"class":154},[84,166741,1372],{"class":129},[84,166743,166744],{"class":158},"\"最高分学生:",[84,166746,2204],{"class":94},[84,166748,166749],{"class":154},"max_student[",[84,166751,153782],{"class":158},[84,166753,2248],{"class":154},[84,166755,2254],{"class":94},[84,166757,5625],{"class":94},[84,166759,166749],{"class":154},[84,166761,153820],{"class":158},[84,166763,2248],{"class":154},[84,166765,2254],{"class":94},[84,166767,1562],{"class":158},[84,166769,162],{"class":154},[84,166771,166772,166774,166776,166778,166781,166784,166787,166789,166791],{"class":86,"line":2935},[84,166773,730],{"class":94},[84,166775,155],{"class":154},[84,166777,1372],{"class":129},[84,166779,166780],{"class":158},"\"及格人数:",[84,166782,166783],{"class":94},"{len",[84,166785,166786],{"class":154},"(passed)",[84,166788,2254],{"class":94},[84,166790,1562],{"class":158},[84,166792,162],{"class":154},[14,166794,166796],{"id":166795},"_616-易错点","6.16 易错点",[26,166798,166799,166802,166805,166808,166814,166823],{},[29,166800,166801],{},"列表可变，元组和字符串不可变。",[29,166803,166804],{},"切片结束位置不包含。",[29,166806,166807],{},"字典通过 key 取值，不是通过索引。",[29,166809,166810,166811,55],{},"空集合要用 ",[39,166812,166813],{},"set()",[29,166815,1188,166816,166819,166820,55],{},[39,166817,166818],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[39,166821,166822],{},"get()",[29,166824,166825],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166827,166829],{"id":166828},"_617-本章练习","6.17 本章练习",[26,166831,166832,166835,166838,166841,166844],{},[29,166833,166834],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,166836,166837],{},"输入一句话，统计每个字符出现次数。",[29,166839,166840],{},"使用集合去除列表中的重复元素。",[29,166842,166843],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,166845,166846],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1222,166848,166849],{},"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":66,"searchDepth":98,"depth":98,"links":166851},[166852,166853,166854,166855,166856,166857,166858,166859,166860,166861,166862,166863,166864,166865,166866,166867,166868],{"id":163832,"depth":98,"text":163833},{"id":163949,"depth":98,"text":163950},{"id":164039,"depth":98,"text":164040},{"id":164163,"depth":98,"text":164164},{"id":164526,"depth":98,"text":164527},{"id":164713,"depth":98,"text":164714},{"id":164832,"depth":98,"text":164833},{"id":164974,"depth":98,"text":164975},{"id":165161,"depth":98,"text":165162},{"id":165405,"depth":98,"text":165406},{"id":165615,"depth":98,"text":165616},{"id":165700,"depth":98,"text":165701},{"id":165998,"depth":98,"text":165999},{"id":166280,"depth":98,"text":166281},{"id":166472,"depth":98,"text":166473},{"id":166795,"depth":98,"text":166796},{"id":166828,"depth":98,"text":166829},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163824,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166875,"title":166876,"body":166877,"description":1249,"extension":1250,"meta":169049,"navigation":1252,"path":169050,"seo":169051,"stem":169052,"__hash__":169053},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166878,"toc":169024},[166879,166882,166886,166889,166969,166972,166993,166996,167000,167003,167065,167068,167085,167089,167092,167137,167139,167147,167151,167154,167236,167239,167242,167267,167270,167293,167297,167300,167302,167364,167367,167369,167420,167424,167428,167434,167539,167543,167549,167620,167624,167627,167695,167698,167778,167782,167788,167824,167827,167830,167940,167946,167950,167953,168025,168028,168032,168036,168041,168103,168107,168112,168180,168184,168189,168305,168309,168312,168392,168395,168399,168402,168506,168508,168523,168526,168530,168668,168676,168680,168682,168693,168695,168953,168957,168989,168993,169021],[10,166880,166876],{"id":166881},"_7-函数进阶",[14,166883,166885],{"id":166884},"_71-多返回值","7.1 多返回值",[19,166887,166888],{},"Python 函数可以返回多个值，本质上返回的是元组。",[60,166890,166892],{"className":121,"code":166891,"language":91,"meta":66,"style":66},"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",[39,166893,166894,166903,166911,166919,166928,166935,166939,166943,166952,166958],{"__ignoreMap":66},[84,166895,166896,166898,166901],{"class":86,"line":87},[84,166897,33100],{"class":129},[84,166899,166900],{"class":90}," get_info",[84,166902,33106],{"class":154},[84,166904,166905,166907,166909],{"class":86,"line":98},[84,166906,153270],{"class":154},[84,166908,867],{"class":129},[84,166910,150253],{"class":158},[84,166912,166913,166915,166917],{"class":86,"line":106},[84,166914,153286],{"class":154},[84,166916,867],{"class":129},[84,166918,880],{"class":94},[84,166920,166921,166923,166925],{"class":86,"line":112},[84,166922,153301],{"class":154},[84,166924,867],{"class":129},[84,166926,166927],{"class":94}," 95\n",[84,166929,166930,166932],{"class":86,"line":425},[84,166931,5268],{"class":129},[84,166933,166934],{"class":154}," name, age, score\n",[84,166936,166937],{"class":86,"line":2395},[84,166938,3578],{"emptyLinePlaceholder":1252},[84,166940,166941],{"class":86,"line":2401},[84,166942,3578],{"emptyLinePlaceholder":1252},[84,166944,166945,166947,166949],{"class":86,"line":2492},[84,166946,162206],{"class":154},[84,166948,867],{"class":129},[84,166950,166951],{"class":154}," get_info()\n",[84,166953,166954,166956],{"class":86,"line":2498},[84,166955,730],{"class":94},[84,166957,77731],{"class":154},[84,166959,166960,166962,166964,166966],{"class":86,"line":2510},[84,166961,730],{"class":94},[84,166963,155],{"class":154},[84,166965,104244],{"class":94},[84,166967,166968],{"class":154},"(result))\n",[19,166970,166971],{},"可以直接解包：",[60,166973,166975],{"className":121,"code":166974,"language":91,"meta":66,"style":66},"name, age, score = get_info()\nprint(name, age, score)\n",[39,166976,166977,166986],{"__ignoreMap":66},[84,166978,166979,166982,166984],{"class":86,"line":87},[84,166980,166981],{"class":154},"name, age, score ",[84,166983,867],{"class":129},[84,166985,166951],{"class":154},[84,166987,166988,166990],{"class":86,"line":98},[84,166989,730],{"class":94},[84,166991,166992],{"class":154},"(name, age, score)\n",[19,166994,166995],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166997,166999],{"id":166998},"_72-位置参数","7.2 位置参数",[19,167001,167002],{},"位置参数按顺序传递。",[60,167004,167006],{"className":121,"code":167005,"language":91,"meta":66,"style":66},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[39,167007,167008,167016,167044,167048,167052],{"__ignoreMap":66},[84,167009,167010,167012,167014],{"class":86,"line":87},[84,167011,33100],{"class":129},[84,167013,150272],{"class":90},[84,167015,150275],{"class":154},[84,167017,167018,167020,167022,167024,167026,167028,167030,167032,167034,167036,167038,167040,167042],{"class":86,"line":98},[84,167019,32453],{"class":94},[84,167021,155],{"class":154},[84,167023,1372],{"class":129},[84,167025,150286],{"class":158},[84,167027,2204],{"class":94},[84,167029,80956],{"class":154},[84,167031,2254],{"class":94},[84,167033,150295],{"class":158},[84,167035,2204],{"class":94},[84,167037,71367],{"class":154},[84,167039,2254],{"class":94},[84,167041,150304],{"class":158},[84,167043,162],{"class":154},[84,167045,167046],{"class":86,"line":106},[84,167047,3578],{"emptyLinePlaceholder":1252},[84,167049,167050],{"class":86,"line":112},[84,167051,3578],{"emptyLinePlaceholder":1252},[84,167053,167054,167057,167059,167061,167063],{"class":86,"line":425},[84,167055,167056],{"class":154},"introduce(",[84,167058,150788],{"class":158},[84,167060,846],{"class":154},[84,167062,849],{"class":94},[84,167064,162],{"class":154},[19,167066,167067],{},"顺序错了就会得到错误含义：",[60,167069,167071],{"className":121,"code":167070,"language":91,"meta":66,"style":66},"introduce(18, \"小明\")\n",[39,167072,167073],{"__ignoreMap":66},[84,167074,167075,167077,167079,167081,167083],{"class":86,"line":87},[84,167076,167056],{"class":154},[84,167078,849],{"class":94},[84,167080,846],{"class":154},[84,167082,150788],{"class":158},[84,167084,162],{"class":154},[14,167086,167088],{"id":167087},"_73-关键字参数","7.3 关键字参数",[19,167090,167091],{},"关键字参数按参数名传递。",[60,167093,167095],{"className":121,"code":167094,"language":91,"meta":66,"style":66},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[39,167096,167097,167117],{"__ignoreMap":66},[84,167098,167099,167101,167103,167105,167107,167109,167111,167113,167115],{"class":86,"line":87},[84,167100,167056],{"class":154},[84,167102,80956],{"class":928},[84,167104,867],{"class":129},[84,167106,150788],{"class":158},[84,167108,846],{"class":154},[84,167110,71367],{"class":928},[84,167112,867],{"class":129},[84,167114,849],{"class":94},[84,167116,162],{"class":154},[84,167118,167119,167121,167123,167125,167127,167129,167131,167133,167135],{"class":86,"line":98},[84,167120,167056],{"class":154},[84,167122,71367],{"class":928},[84,167124,867],{"class":129},[84,167126,849],{"class":94},[84,167128,846],{"class":154},[84,167130,80956],{"class":928},[84,167132,867],{"class":129},[84,167134,150788],{"class":158},[84,167136,162],{"class":154},[19,167138,119066],{},[26,167140,167141,167144],{},[29,167142,167143],{},"顺序不容易错。",[29,167145,167146],{},"调用时可读性更强。",[14,167148,167150],{"id":167149},"_74-默认参数","7.4 默认参数",[19,167152,167153],{},"默认参数给参数设置默认值。",[60,167155,167157],{"className":121,"code":167156,"language":91,"meta":66,"style":66},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[39,167158,167159,167175,167205,167209,167213,167223],{"__ignoreMap":66},[84,167160,167161,167163,167165,167168,167170,167173],{"class":86,"line":87},[84,167162,33100],{"class":129},[84,167164,123218],{"class":90},[84,167166,167167],{"class":154},"(host, port",[84,167169,867],{"class":129},[84,167171,167172],{"class":94},"3306",[84,167174,31940],{"class":154},[84,167176,167177,167179,167181,167183,167186,167188,167190,167192,167194,167196,167199,167201,167203],{"class":86,"line":98},[84,167178,32453],{"class":94},[84,167180,155],{"class":154},[84,167182,1372],{"class":129},[84,167184,167185],{"class":158},"\"连接",[84,167187,2204],{"class":94},[84,167189,28553],{"class":154},[84,167191,2254],{"class":94},[84,167193,2167],{"class":158},[84,167195,2204],{"class":94},[84,167197,167198],{"class":154},"port",[84,167200,2254],{"class":94},[84,167202,1562],{"class":158},[84,167204,162],{"class":154},[84,167206,167207],{"class":86,"line":106},[84,167208,3578],{"emptyLinePlaceholder":1252},[84,167210,167211],{"class":86,"line":112},[84,167212,3578],{"emptyLinePlaceholder":1252},[84,167214,167215,167218,167221],{"class":86,"line":425},[84,167216,167217],{"class":154},"connect(",[84,167219,167220],{"class":158},"\"localhost\"",[84,167222,162],{"class":154},[84,167224,167225,167227,167229,167231,167234],{"class":86,"line":2395},[84,167226,167217],{"class":154},[84,167228,167220],{"class":158},[84,167230,846],{"class":154},[84,167232,167233],{"class":94},"6379",[84,167235,162],{"class":154},[19,167237,167238],{},"注意：默认参数必须放在非默认参数后面。",[19,167240,167241],{},"错误：",[60,167243,167245],{"className":121,"code":167244,"language":91,"meta":66,"style":66},"def connect(port=3306, host):\n    pass\n",[39,167246,167247,167263],{"__ignoreMap":66},[84,167248,167249,167251,167253,167256,167258,167260],{"class":86,"line":87},[84,167250,33100],{"class":129},[84,167252,123218],{"class":90},[84,167254,167255],{"class":154},"(port",[84,167257,867],{"class":129},[84,167259,167172],{"class":94},[84,167261,167262],{"class":154},", host):\n",[84,167264,167265],{"class":86,"line":98},[84,167266,150437],{"class":129},[19,167268,167269],{},"正确：",[60,167271,167273],{"className":121,"code":167272,"language":91,"meta":66,"style":66},"def connect(host, port=3306):\n    pass\n",[39,167274,167275,167289],{"__ignoreMap":66},[84,167276,167277,167279,167281,167283,167285,167287],{"class":86,"line":87},[84,167278,33100],{"class":129},[84,167280,123218],{"class":90},[84,167282,167167],{"class":154},[84,167284,867],{"class":129},[84,167286,167172],{"class":94},[84,167288,31940],{"class":154},[84,167290,167291],{"class":86,"line":98},[84,167292,150437],{"class":129},[14,167294,167296],{"id":167295},"_75-默认参数的坑","7.5 默认参数的坑",[19,167298,167299],{},"不要使用可变对象作为默认参数。",[19,167301,158523],{},[60,167303,167305],{"className":121,"code":167304,"language":91,"meta":66,"style":66},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[39,167306,167307,167322,167327,167334,167338,167342,167353],{"__ignoreMap":66},[84,167308,167309,167311,167314,167317,167319],{"class":86,"line":87},[84,167310,33100],{"class":129},[84,167312,167313],{"class":90}," add_item",[84,167315,167316],{"class":154},"(item, items",[84,167318,867],{"class":129},[84,167320,167321],{"class":154},"[]):\n",[84,167323,167324],{"class":86,"line":98},[84,167325,167326],{"class":154},"    items.append(item)\n",[84,167328,167329,167331],{"class":86,"line":106},[84,167330,5268],{"class":129},[84,167332,167333],{"class":154}," items\n",[84,167335,167336],{"class":86,"line":112},[84,167337,3578],{"emptyLinePlaceholder":1252},[84,167339,167340],{"class":86,"line":425},[84,167341,3578],{"emptyLinePlaceholder":1252},[84,167343,167344,167346,167349,167351],{"class":86,"line":2395},[84,167345,730],{"class":94},[84,167347,167348],{"class":154},"(add_item(",[84,167350,166225],{"class":158},[84,167352,31651],{"class":154},[84,167354,167355,167357,167359,167362],{"class":86,"line":2401},[84,167356,730],{"class":94},[84,167358,167348],{"class":154},[84,167360,167361],{"class":158},"\"b\"",[84,167363,31651],{"class":154},[19,167365,167366],{},"第二次调用会复用第一次的列表。",[19,167368,156788],{},[60,167370,167372],{"className":121,"code":167371,"language":91,"meta":66,"style":66},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[39,167373,167374,167388,167401,167410,167414],{"__ignoreMap":66},[84,167375,167376,167378,167380,167382,167384,167386],{"class":86,"line":87},[84,167377,33100],{"class":129},[84,167379,167313],{"class":90},[84,167381,167316],{"class":154},[84,167383,867],{"class":129},[84,167385,96832],{"class":94},[84,167387,31940],{"class":154},[84,167389,167390,167392,167395,167397,167399],{"class":86,"line":98},[84,167391,4279],{"class":129},[84,167393,167394],{"class":154}," items ",[84,167396,40079],{"class":129},[84,167398,40085],{"class":94},[84,167400,4917],{"class":154},[84,167402,167403,167406,167408],{"class":86,"line":106},[84,167404,167405],{"class":154},"        items ",[84,167407,867],{"class":129},[84,167409,52987],{"class":154},[84,167411,167412],{"class":86,"line":112},[84,167413,167326],{"class":154},[84,167415,167416,167418],{"class":86,"line":425},[84,167417,5268],{"class":129},[84,167419,167333],{"class":154},[14,167421,167423],{"id":167422},"_76-不定长参数","7.6 不定长参数",[198,167425,167427],{"id":167426},"_761-args","7.6.1 *args",[19,167429,167430,167433],{},[39,167431,167432],{},"*args"," 接收任意数量的位置参数，得到元组。",[60,167435,167437],{"className":121,"code":167436,"language":91,"meta":66,"style":66},"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",[39,167438,167439,167452,167460,167471,167480,167486,167490,167494,167513],{"__ignoreMap":66},[84,167440,167441,167443,167445,167447,167449],{"class":86,"line":87},[84,167442,33100],{"class":129},[84,167444,6384],{"class":90},[84,167446,155],{"class":154},[84,167448,1043],{"class":129},[84,167450,167451],{"class":154},"args):\n",[84,167453,167454,167456,167458],{"class":86,"line":98},[84,167455,160207],{"class":154},[84,167457,867],{"class":129},[84,167459,48483],{"class":94},[84,167461,167462,167464,167466,167468],{"class":86,"line":106},[84,167463,4379],{"class":129},[84,167465,157080],{"class":154},[84,167467,27206],{"class":129},[84,167469,167470],{"class":154}," args:\n",[84,167472,167473,167475,167477],{"class":86,"line":112},[84,167474,160882],{"class":154},[84,167476,10649],{"class":129},[84,167478,167479],{"class":154}," num\n",[84,167481,167482,167484],{"class":86,"line":425},[84,167483,5268],{"class":129},[84,167485,163187],{"class":154},[84,167487,167488],{"class":86,"line":2395},[84,167489,3578],{"emptyLinePlaceholder":1252},[84,167491,167492],{"class":86,"line":2401},[84,167493,3578],{"emptyLinePlaceholder":1252},[84,167495,167496,167498,167501,167503,167505,167507,167509,167511],{"class":86,"line":2492},[84,167497,730],{"class":94},[84,167499,167500],{"class":154},"(add(",[84,167502,1529],{"class":94},[84,167504,846],{"class":154},[84,167506,1397],{"class":94},[84,167508,846],{"class":154},[84,167510,1391],{"class":94},[84,167512,31651],{"class":154},[84,167514,167515,167517,167519,167521,167523,167525,167527,167529,167531,167533,167535,167537],{"class":86,"line":2498},[84,167516,730],{"class":94},[84,167518,167500],{"class":154},[84,167520,1529],{"class":94},[84,167522,846],{"class":154},[84,167524,1397],{"class":94},[84,167526,846],{"class":154},[84,167528,1391],{"class":94},[84,167530,846],{"class":154},[84,167532,1604],{"class":94},[84,167534,846],{"class":154},[84,167536,1629],{"class":94},[84,167538,31651],{"class":154},[198,167540,167542],{"id":167541},"_762-kwargs","7.6.2 **kwargs",[19,167544,167545,167548],{},[39,167546,167547],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[60,167550,167552],{"className":121,"code":167551,"language":91,"meta":66,"style":66},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[39,167553,167554,167567,167578,167584,167588,167592],{"__ignoreMap":66},[84,167555,167556,167558,167560,167562,167564],{"class":86,"line":87},[84,167557,33100],{"class":129},[84,167559,162845],{"class":90},[84,167561,155],{"class":154},[84,167563,11833],{"class":129},[84,167565,167566],{"class":154},"kwargs):\n",[84,167568,167569,167571,167573,167575],{"class":86,"line":98},[84,167570,4379],{"class":129},[84,167572,165685],{"class":154},[84,167574,27206],{"class":129},[84,167576,167577],{"class":154}," kwargs.items():\n",[84,167579,167580,167582],{"class":86,"line":106},[84,167581,33604],{"class":94},[84,167583,165697],{"class":154},[84,167585,167586],{"class":86,"line":112},[84,167587,3578],{"emptyLinePlaceholder":1252},[84,167589,167590],{"class":86,"line":425},[84,167591,3578],{"emptyLinePlaceholder":1252},[84,167593,167594,167596,167598,167600,167602,167604,167606,167608,167610,167612,167614,167616,167618],{"class":86,"line":2395},[84,167595,162910],{"class":154},[84,167597,80956],{"class":928},[84,167599,867],{"class":129},[84,167601,150788],{"class":158},[84,167603,846],{"class":154},[84,167605,71367],{"class":928},[84,167607,867],{"class":129},[84,167609,849],{"class":94},[84,167611,846],{"class":154},[84,167613,71418],{"class":928},[84,167615,867],{"class":129},[84,167617,70415],{"class":158},[84,167619,162],{"class":154},[14,167621,167623],{"id":167622},"_77-参数解包","7.7 参数解包",[19,167625,167626],{},"列表或元组解包为位置参数：",[60,167628,167630],{"className":121,"code":167629,"language":91,"meta":66,"style":66},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[39,167631,167632,167641,167656,167660,167664,167684],{"__ignoreMap":66},[84,167633,167634,167636,167638],{"class":86,"line":87},[84,167635,33100],{"class":129},[84,167637,6384],{"class":90},[84,167639,167640],{"class":154},"(a, b, c):\n",[84,167642,167643,167645,167647,167649,167651,167653],{"class":86,"line":98},[84,167644,5268],{"class":129},[84,167646,12041],{"class":154},[84,167648,1790],{"class":129},[84,167650,12054],{"class":154},[84,167652,1790],{"class":129},[84,167654,167655],{"class":154}," c\n",[84,167657,167658],{"class":86,"line":106},[84,167659,3578],{"emptyLinePlaceholder":1252},[84,167661,167662],{"class":86,"line":112},[84,167663,3578],{"emptyLinePlaceholder":1252},[84,167665,167666,167668,167670,167672,167674,167676,167678,167680,167682],{"class":86,"line":425},[84,167667,165000],{"class":154},[84,167669,867],{"class":129},[84,167671,53375],{"class":154},[84,167673,1529],{"class":94},[84,167675,846],{"class":154},[84,167677,1397],{"class":94},[84,167679,846],{"class":154},[84,167681,1391],{"class":94},[84,167683,34398],{"class":154},[84,167685,167686,167688,167690,167692],{"class":86,"line":2395},[84,167687,730],{"class":94},[84,167689,167500],{"class":154},[84,167691,1043],{"class":129},[84,167693,167694],{"class":154},"nums))\n",[19,167696,167697],{},"字典解包为关键字参数：",[60,167699,167701],{"className":121,"code":167700,"language":91,"meta":66,"style":66},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[39,167702,167703,167711,167737,167741,167745,167769],{"__ignoreMap":66},[84,167704,167705,167707,167709],{"class":86,"line":87},[84,167706,33100],{"class":129},[84,167708,150272],{"class":90},[84,167710,150275],{"class":154},[84,167712,167713,167715,167717,167719,167721,167723,167725,167727,167729,167731,167733,167735],{"class":86,"line":98},[84,167714,32453],{"class":94},[84,167716,155],{"class":154},[84,167718,1372],{"class":129},[84,167720,1562],{"class":158},[84,167722,2204],{"class":94},[84,167724,80956],{"class":154},[84,167726,2254],{"class":94},[84,167728,5625],{"class":94},[84,167730,71367],{"class":154},[84,167732,2254],{"class":94},[84,167734,1562],{"class":158},[84,167736,162],{"class":154},[84,167738,167739],{"class":86,"line":106},[84,167740,3578],{"emptyLinePlaceholder":1252},[84,167742,167743],{"class":86,"line":112},[84,167744,3578],{"emptyLinePlaceholder":1252},[84,167746,167747,167749,167751,167753,167755,167757,167759,167761,167763,167765,167767],{"class":86,"line":425},[84,167748,117448],{"class":154},[84,167750,867],{"class":129},[84,167752,5625],{"class":154},[84,167754,63825],{"class":158},[84,167756,52586],{"class":154},[84,167758,150788],{"class":158},[84,167760,846],{"class":154},[84,167762,70270],{"class":158},[84,167764,52586],{"class":154},[84,167766,849],{"class":94},[84,167768,2746],{"class":154},[84,167770,167771,167773,167775],{"class":86,"line":2395},[84,167772,167056],{"class":154},[84,167774,11833],{"class":129},[84,167776,167777],{"class":154},"info)\n",[14,167779,167781],{"id":167780},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167783,167784,167787],{},[39,167785,167786],{},"lambda"," 用于定义简单匿名函数。",[60,167789,167791],{"className":121,"code":167790,"language":91,"meta":66,"style":66},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[39,167792,167793,167810],{"__ignoreMap":66},[84,167794,167795,167798,167800,167803,167806,167808],{"class":86,"line":87},[84,167796,167797],{"class":154},"add ",[84,167799,867],{"class":129},[84,167801,167802],{"class":129}," lambda",[84,167804,167805],{"class":154}," a, b: a ",[84,167807,1790],{"class":129},[84,167809,152004],{"class":154},[84,167811,167812,167814,167816,167818,167820,167822],{"class":86,"line":98},[84,167813,730],{"class":94},[84,167815,167500],{"class":154},[84,167817,1529],{"class":94},[84,167819,846],{"class":154},[84,167821,1397],{"class":94},[84,167823,31651],{"class":154},[19,167825,167826],{},"常和排序、过滤等函数一起使用。",[19,167828,167829],{},"按分数排序：",[60,167831,167833],{"className":121,"code":167832,"language":91,"meta":66,"style":66},"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",[39,167834,167835,167843,167863,167883,167903,167907,167911,167934],{"__ignoreMap":66},[84,167836,167837,167839,167841],{"class":86,"line":87},[84,167838,160616],{"class":154},[84,167840,867],{"class":129},[84,167842,56594],{"class":154},[84,167844,167845,167847,167849,167851,167853,167855,167857,167859,167861],{"class":86,"line":98},[84,167846,149285],{"class":154},[84,167848,63825],{"class":158},[84,167850,52586],{"class":154},[84,167852,150788],{"class":158},[84,167854,846],{"class":154},[84,167856,152372],{"class":158},[84,167858,52586],{"class":154},[84,167860,2297],{"class":94},[84,167862,6107],{"class":154},[84,167864,167865,167867,167869,167871,167873,167875,167877,167879,167881],{"class":86,"line":106},[84,167866,149285],{"class":154},[84,167868,63825],{"class":158},[84,167870,52586],{"class":154},[84,167872,151836],{"class":158},[84,167874,846],{"class":154},[84,167876,152372],{"class":158},[84,167878,52586],{"class":154},[84,167880,2119],{"class":94},[84,167882,6107],{"class":154},[84,167884,167885,167887,167889,167891,167893,167895,167897,167899,167901],{"class":86,"line":112},[84,167886,149285],{"class":154},[84,167888,63825],{"class":158},[84,167890,52586],{"class":154},[84,167892,160631],{"class":158},[84,167894,846],{"class":154},[84,167896,152372],{"class":158},[84,167898,52586],{"class":154},[84,167900,1716],{"class":94},[84,167902,6107],{"class":154},[84,167904,167905],{"class":86,"line":425},[84,167906,34398],{"class":154},[84,167908,167909],{"class":86,"line":2395},[84,167910,3578],{"emptyLinePlaceholder":1252},[84,167912,167913,167916,167918,167920,167922,167924,167926,167928,167930,167932],{"class":86,"line":2401},[84,167914,167915],{"class":154},"students.sort(",[84,167917,154846],{"class":928},[84,167919,154849],{"class":129},[84,167921,154852],{"class":154},[84,167923,152372],{"class":158},[84,167925,113336],{"class":154},[84,167927,164428],{"class":928},[84,167929,867],{"class":129},[84,167931,32629],{"class":94},[84,167933,162],{"class":154},[84,167935,167936,167938],{"class":86,"line":2492},[84,167937,730],{"class":94},[84,167939,165895],{"class":154},[19,167941,167942,167943,167945],{},"如果逻辑复杂，不要硬写 ",[39,167944,167786],{},"，定义普通函数更清晰。",[14,167947,167949],{"id":167948},"_79-函数作为参数","7.9 函数作为参数",[19,167951,167952],{},"函数可以作为参数传给另一个函数。",[60,167954,167956],{"className":121,"code":167955,"language":91,"meta":66,"style":66},"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",[39,167957,167958,167966,167976,167980,167984,167994,168001,168005,168009],{"__ignoreMap":66},[84,167959,167960,167962,167964],{"class":86,"line":87},[84,167961,33100],{"class":129},[84,167963,6384],{"class":90},[84,167965,151993],{"class":154},[84,167967,167968,167970,167972,167974],{"class":86,"line":98},[84,167969,5268],{"class":129},[84,167971,12041],{"class":154},[84,167973,1790],{"class":129},[84,167975,152004],{"class":154},[84,167977,167978],{"class":86,"line":106},[84,167979,3578],{"emptyLinePlaceholder":1252},[84,167981,167982],{"class":86,"line":112},[84,167983,3578],{"emptyLinePlaceholder":1252},[84,167985,167986,167988,167991],{"class":86,"line":425},[84,167987,33100],{"class":129},[84,167989,167990],{"class":90}," calculate",[84,167992,167993],{"class":154},"(a, b, func):\n",[84,167995,167996,167998],{"class":86,"line":2395},[84,167997,5268],{"class":129},[84,167999,168000],{"class":154}," func(a, b)\n",[84,168002,168003],{"class":86,"line":2401},[84,168004,3578],{"emptyLinePlaceholder":1252},[84,168006,168007],{"class":86,"line":2492},[84,168008,3578],{"emptyLinePlaceholder":1252},[84,168010,168011,168013,168016,168018,168020,168022],{"class":86,"line":2498},[84,168012,730],{"class":94},[84,168014,168015],{"class":154},"(calculate(",[84,168017,1756],{"class":94},[84,168019,846],{"class":154},[84,168021,2008],{"class":94},[84,168023,168024],{"class":154},", add))\n",[19,168026,168027],{},"这种思想在排序、回调、框架中经常出现。",[14,168029,168031],{"id":168030},"_710-mapfiltersorted","7.10 map、filter、sorted",[198,168033,168035],{"id":168034},"_7101-map","7.10.1 map",[19,168037,168038,168040],{},[39,168039,75190],{}," 对每个元素执行函数。",[60,168042,168044],{"className":121,"code":168043,"language":91,"meta":66,"style":66},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[39,168045,168046,168070,168093],{"__ignoreMap":66},[84,168047,168048,168050,168052,168054,168056,168058,168060,168062,168064,168066,168068],{"class":86,"line":87},[84,168049,165000],{"class":154},[84,168051,867],{"class":129},[84,168053,53375],{"class":154},[84,168055,1529],{"class":94},[84,168057,846],{"class":154},[84,168059,1397],{"class":94},[84,168061,846],{"class":154},[84,168063,1391],{"class":94},[84,168065,846],{"class":154},[84,168067,1604],{"class":94},[84,168069,34398],{"class":154},[84,168071,168072,168074,168076,168079,168081,168083,168086,168088,168090],{"class":86,"line":98},[84,168073,162206],{"class":154},[84,168075,867],{"class":129},[84,168077,168078],{"class":94}," map",[84,168080,155],{"class":154},[84,168082,167786],{"class":129},[84,168084,168085],{"class":154}," x: x ",[84,168087,1043],{"class":129},[84,168089,15925],{"class":94},[84,168091,168092],{"class":154},", nums)\n",[84,168094,168095,168097,168099,168101],{"class":86,"line":106},[84,168096,730],{"class":94},[84,168098,155],{"class":154},[84,168100,154970],{"class":94},[84,168102,166968],{"class":154},[198,168104,168106],{"id":168105},"_7102-filter","7.10.2 filter",[19,168108,168109,168111],{},[39,168110,81197],{}," 保留满足条件的元素。",[60,168113,168115],{"className":121,"code":168114,"language":91,"meta":66,"style":66},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[39,168116,168117,168145,168170],{"__ignoreMap":66},[84,168118,168119,168121,168123,168125,168127,168129,168131,168133,168135,168137,168139,168141,168143],{"class":86,"line":87},[84,168120,165000],{"class":154},[84,168122,867],{"class":129},[84,168124,53375],{"class":154},[84,168126,1529],{"class":94},[84,168128,846],{"class":154},[84,168130,1397],{"class":94},[84,168132,846],{"class":154},[84,168134,1391],{"class":94},[84,168136,846],{"class":154},[84,168138,1604],{"class":94},[84,168140,846],{"class":154},[84,168142,1629],{"class":94},[84,168144,34398],{"class":154},[84,168146,168147,168149,168151,168154,168156,168158,168160,168162,168164,168166,168168],{"class":86,"line":98},[84,168148,162206],{"class":154},[84,168150,867],{"class":129},[84,168152,168153],{"class":94}," filter",[84,168155,155],{"class":154},[84,168157,167786],{"class":129},[84,168159,168085],{"class":154},[84,168161,1638],{"class":129},[84,168163,15925],{"class":94},[84,168165,102697],{"class":129},[84,168167,5271],{"class":94},[84,168169,168092],{"class":154},[84,168171,168172,168174,168176,168178],{"class":86,"line":106},[84,168173,730],{"class":94},[84,168175,155],{"class":154},[84,168177,154970],{"class":94},[84,168179,166968],{"class":154},[198,168181,168183],{"id":168182},"_7103-sorted","7.10.3 sorted",[19,168185,168186,168188],{},[39,168187,166136],{}," 返回排序后的新列表。",[60,168190,168192],{"className":121,"code":168191,"language":91,"meta":66,"style":66},"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",[39,168193,168194,168202,168222,168242,168262,168266,168270,168299],{"__ignoreMap":66},[84,168195,168196,168198,168200],{"class":86,"line":87},[84,168197,160616],{"class":154},[84,168199,867],{"class":129},[84,168201,56594],{"class":154},[84,168203,168204,168206,168208,168210,168212,168214,168216,168218,168220],{"class":86,"line":98},[84,168205,149285],{"class":154},[84,168207,63825],{"class":158},[84,168209,52586],{"class":154},[84,168211,150788],{"class":158},[84,168213,846],{"class":154},[84,168215,152372],{"class":158},[84,168217,52586],{"class":154},[84,168219,2297],{"class":94},[84,168221,6107],{"class":154},[84,168223,168224,168226,168228,168230,168232,168234,168236,168238,168240],{"class":86,"line":106},[84,168225,149285],{"class":154},[84,168227,63825],{"class":158},[84,168229,52586],{"class":154},[84,168231,151836],{"class":158},[84,168233,846],{"class":154},[84,168235,152372],{"class":158},[84,168237,52586],{"class":154},[84,168239,2119],{"class":94},[84,168241,6107],{"class":154},[84,168243,168244,168246,168248,168250,168252,168254,168256,168258,168260],{"class":86,"line":112},[84,168245,149285],{"class":154},[84,168247,63825],{"class":158},[84,168249,52586],{"class":154},[84,168251,160631],{"class":158},[84,168253,846],{"class":154},[84,168255,152372],{"class":158},[84,168257,52586],{"class":154},[84,168259,1716],{"class":94},[84,168261,6107],{"class":154},[84,168263,168264],{"class":86,"line":425},[84,168265,34398],{"class":154},[84,168267,168268],{"class":86,"line":2395},[84,168269,3578],{"emptyLinePlaceholder":1252},[84,168271,168272,168274,168276,168278,168281,168283,168285,168287,168289,168291,168293,168295,168297],{"class":86,"line":2401},[84,168273,162206],{"class":154},[84,168275,867],{"class":129},[84,168277,164504],{"class":94},[84,168279,168280],{"class":154},"(students, ",[84,168282,154846],{"class":928},[84,168284,154849],{"class":129},[84,168286,154852],{"class":154},[84,168288,152372],{"class":158},[84,168290,113336],{"class":154},[84,168292,164428],{"class":928},[84,168294,867],{"class":129},[84,168296,32629],{"class":94},[84,168298,162],{"class":154},[84,168300,168301,168303],{"class":86,"line":2492},[84,168302,730],{"class":94},[84,168304,77731],{"class":154},[14,168306,168308],{"id":168307},"_711-闭包入门","7.11 闭包入门",[19,168310,168311],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[60,168313,168315],{"className":121,"code":168314,"language":91,"meta":66,"style":66},"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",[39,168316,168317,168327,168337,168348,168352,168359,168363,168367,168381],{"__ignoreMap":66},[84,168318,168319,168321,168324],{"class":86,"line":87},[84,168320,33100],{"class":129},[84,168322,168323],{"class":90}," outer",[84,168325,168326],{"class":154},"(base):\n",[84,168328,168329,168331,168334],{"class":86,"line":98},[84,168330,31955],{"class":129},[84,168332,168333],{"class":90}," inner",[84,168335,168336],{"class":154},"(num):\n",[84,168338,168339,168341,168344,168346],{"class":86,"line":106},[84,168340,15922],{"class":129},[84,168342,168343],{"class":154}," base ",[84,168345,1790],{"class":129},[84,168347,167479],{"class":154},[84,168349,168350],{"class":86,"line":112},[84,168351,3578],{"emptyLinePlaceholder":1252},[84,168353,168354,168356],{"class":86,"line":425},[84,168355,5268],{"class":129},[84,168357,168358],{"class":154}," inner\n",[84,168360,168361],{"class":86,"line":2395},[84,168362,3578],{"emptyLinePlaceholder":1252},[84,168364,168365],{"class":86,"line":2401},[84,168366,3578],{"emptyLinePlaceholder":1252},[84,168368,168369,168372,168374,168377,168379],{"class":86,"line":2492},[84,168370,168371],{"class":154},"add_10 ",[84,168373,867],{"class":129},[84,168375,168376],{"class":154}," outer(",[84,168378,1756],{"class":94},[84,168380,162],{"class":154},[84,168382,168383,168385,168388,168390],{"class":86,"line":2498},[84,168384,730],{"class":94},[84,168386,168387],{"class":154},"(add_10(",[84,168389,1629],{"class":94},[84,168391,31651],{"class":154},[19,168393,168394],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168396,168398],{"id":168397},"_712-装饰器入门","7.12 装饰器入门",[19,168400,168401],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[60,168403,168405],{"className":121,"code":168404,"language":91,"meta":66,"style":66},"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",[39,168406,168407,168416,168425,168436,168441,168452,168456,168463,168467,168471,168476,168484,168494,168498,168502],{"__ignoreMap":66},[84,168408,168409,168411,168413],{"class":86,"line":87},[84,168410,33100],{"class":129},[84,168412,88337],{"class":90},[84,168414,168415],{"class":154},"(func):\n",[84,168417,168418,168420,168423],{"class":86,"line":98},[84,168419,31955],{"class":129},[84,168421,168422],{"class":90}," wrapper",[84,168424,33106],{"class":154},[84,168426,168427,168429,168431,168434],{"class":86,"line":106},[84,168428,33604],{"class":94},[84,168430,155],{"class":154},[84,168432,168433],{"class":158},"\"函数开始执行\"",[84,168435,162],{"class":154},[84,168437,168438],{"class":86,"line":112},[84,168439,168440],{"class":154},"        func()\n",[84,168442,168443,168445,168447,168450],{"class":86,"line":425},[84,168444,33604],{"class":94},[84,168446,155],{"class":154},[84,168448,168449],{"class":158},"\"函数执行结束\"",[84,168451,162],{"class":154},[84,168453,168454],{"class":86,"line":2395},[84,168455,3578],{"emptyLinePlaceholder":1252},[84,168457,168458,168460],{"class":86,"line":2401},[84,168459,5268],{"class":129},[84,168461,168462],{"class":154}," wrapper\n",[84,168464,168465],{"class":86,"line":2492},[84,168466,3578],{"emptyLinePlaceholder":1252},[84,168468,168469],{"class":86,"line":2498},[84,168470,3578],{"emptyLinePlaceholder":1252},[84,168472,168473],{"class":86,"line":2510},[84,168474,168475],{"class":90},"@log\n",[84,168477,168478,168480,168482],{"class":86,"line":2793},[84,168479,33100],{"class":129},[84,168481,161896],{"class":90},[84,168483,33106],{"class":154},[84,168485,168486,168488,168490,168492],{"class":86,"line":2798},[84,168487,32453],{"class":94},[84,168489,155],{"class":154},[84,168491,810],{"class":158},[84,168493,162],{"class":154},[84,168495,168496],{"class":86,"line":2804},[84,168497,3578],{"emptyLinePlaceholder":1252},[84,168499,168500],{"class":86,"line":2809},[84,168501,3578],{"emptyLinePlaceholder":1252},[84,168503,168504],{"class":86,"line":2823},[84,168505,161931],{"class":154},[19,168507,159174],{},[60,168509,168511],{"className":121,"code":168510,"language":91,"meta":66,"style":66},"say_hello = log(say_hello)\n",[39,168512,168513],{"__ignoreMap":66},[84,168514,168515,168518,168520],{"class":86,"line":87},[84,168516,168517],{"class":154},"say_hello ",[84,168519,867],{"class":129},[84,168521,168522],{"class":154}," log(say_hello)\n",[19,168524,168525],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168527,168529],{"id":168528},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[60,168531,168533],{"className":121,"code":168532,"language":91,"meta":66,"style":66},"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",[39,168534,168535,168543,168560,168570,168589,168599,168606,168610,168616,168620,168624,168628,168636,168646,168650,168654],{"__ignoreMap":66},[84,168536,168537,168539,168541],{"class":86,"line":87},[84,168538,33100],{"class":129},[84,168540,88337],{"class":90},[84,168542,168415],{"class":154},[84,168544,168545,168547,168549,168551,168553,168556,168558],{"class":86,"line":98},[84,168546,31955],{"class":129},[84,168548,168422],{"class":90},[84,168550,155],{"class":154},[84,168552,1043],{"class":129},[84,168554,168555],{"class":154},"args, ",[84,168557,11833],{"class":129},[84,168559,167566],{"class":154},[84,168561,168562,168564,168566,168568],{"class":86,"line":106},[84,168563,33604],{"class":94},[84,168565,155],{"class":154},[84,168567,168433],{"class":158},[84,168569,162],{"class":154},[84,168571,168572,168575,168577,168580,168582,168584,168586],{"class":86,"line":112},[84,168573,168574],{"class":154},"        result ",[84,168576,867],{"class":129},[84,168578,168579],{"class":154}," func(",[84,168581,1043],{"class":129},[84,168583,168555],{"class":154},[84,168585,11833],{"class":129},[84,168587,168588],{"class":154},"kwargs)\n",[84,168590,168591,168593,168595,168597],{"class":86,"line":425},[84,168592,33604],{"class":94},[84,168594,155],{"class":154},[84,168596,168449],{"class":158},[84,168598,162],{"class":154},[84,168600,168601,168603],{"class":86,"line":2395},[84,168602,15922],{"class":129},[84,168604,168605],{"class":154}," result\n",[84,168607,168608],{"class":86,"line":2401},[84,168609,3578],{"emptyLinePlaceholder":1252},[84,168611,168612,168614],{"class":86,"line":2492},[84,168613,5268],{"class":129},[84,168615,168462],{"class":154},[84,168617,168618],{"class":86,"line":2498},[84,168619,3578],{"emptyLinePlaceholder":1252},[84,168621,168622],{"class":86,"line":2510},[84,168623,3578],{"emptyLinePlaceholder":1252},[84,168625,168626],{"class":86,"line":2793},[84,168627,168475],{"class":90},[84,168629,168630,168632,168634],{"class":86,"line":2798},[84,168631,33100],{"class":129},[84,168633,6384],{"class":90},[84,168635,151993],{"class":154},[84,168637,168638,168640,168642,168644],{"class":86,"line":2804},[84,168639,5268],{"class":129},[84,168641,12041],{"class":154},[84,168643,1790],{"class":129},[84,168645,152004],{"class":154},[84,168647,168648],{"class":86,"line":2809},[84,168649,3578],{"emptyLinePlaceholder":1252},[84,168651,168652],{"class":86,"line":2823},[84,168653,3578],{"emptyLinePlaceholder":1252},[84,168655,168656,168658,168660,168662,168664,168666],{"class":86,"line":2828},[84,168657,730],{"class":94},[84,168659,167500],{"class":154},[84,168661,1756],{"class":94},[84,168663,846],{"class":154},[84,168665,2008],{"class":94},[84,168667,31651],{"class":154},[19,168669,168670,168671,102156,168673,168675],{},"这个写法使用 ",[39,168672,167432],{},[39,168674,167547],{}," 接收原函数的所有参数。",[14,168677,168679],{"id":168678},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168681,124417],{},[26,168683,168684,168687,168690],{},[29,168685,168686],{},"给定一组学生数据。",[29,168688,168689],{},"封装函数，根据传入规则筛选学生。",[29,168691,168692],{},"筛选及格、优秀、未成年学生。",[19,168694,11207],{},[60,168696,168698],{"className":121,"code":168697,"language":91,"meta":66,"style":66},"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",[39,168699,168700,168708,168736,168764,168792,168796,168800,168804,168814,168822,168832,168839,168844,168850,168854,168858,168882,168905,168928,168932,168939,168946],{"__ignoreMap":66},[84,168701,168702,168704,168706],{"class":86,"line":87},[84,168703,160616],{"class":154},[84,168705,867],{"class":129},[84,168707,56594],{"class":154},[84,168709,168710,168712,168714,168716,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":86,"line":98},[84,168711,149285],{"class":154},[84,168713,63825],{"class":158},[84,168715,52586],{"class":154},[84,168717,150788],{"class":158},[84,168719,846],{"class":154},[84,168721,70270],{"class":158},[84,168723,52586],{"class":154},[84,168725,849],{"class":94},[84,168727,846],{"class":154},[84,168729,152372],{"class":158},[84,168731,52586],{"class":154},[84,168733,2297],{"class":94},[84,168735,6107],{"class":154},[84,168737,168738,168740,168742,168744,168746,168748,168750,168752,168754,168756,168758,168760,168762],{"class":86,"line":106},[84,168739,149285],{"class":154},[84,168741,63825],{"class":158},[84,168743,52586],{"class":154},[84,168745,151836],{"class":158},[84,168747,846],{"class":154},[84,168749,70270],{"class":158},[84,168751,52586],{"class":154},[84,168753,1934],{"class":94},[84,168755,846],{"class":154},[84,168757,152372],{"class":158},[84,168759,52586],{"class":154},[84,168761,2119],{"class":94},[84,168763,6107],{"class":154},[84,168765,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":86,"line":112},[84,168767,149285],{"class":154},[84,168769,63825],{"class":158},[84,168771,52586],{"class":154},[84,168773,160631],{"class":158},[84,168775,846],{"class":154},[84,168777,70270],{"class":158},[84,168779,52586],{"class":154},[84,168781,1983],{"class":94},[84,168783,846],{"class":154},[84,168785,152372],{"class":158},[84,168787,52586],{"class":154},[84,168789,2190],{"class":94},[84,168791,6107],{"class":154},[84,168793,168794],{"class":86,"line":425},[84,168795,34398],{"class":154},[84,168797,168798],{"class":86,"line":2395},[84,168799,3578],{"emptyLinePlaceholder":1252},[84,168801,168802],{"class":86,"line":2401},[84,168803,3578],{"emptyLinePlaceholder":1252},[84,168805,168806,168808,168811],{"class":86,"line":2492},[84,168807,33100],{"class":129},[84,168809,168810],{"class":90}," filter_students",[84,168812,168813],{"class":154},"(students, condition):\n",[84,168815,168816,168818,168820],{"class":86,"line":2498},[84,168817,162123],{"class":154},[84,168819,867],{"class":129},[84,168821,52987],{"class":154},[84,168823,168824,168826,168828,168830],{"class":86,"line":2510},[84,168825,4379],{"class":129},[84,168827,153037],{"class":154},[84,168829,27206],{"class":129},[84,168831,153042],{"class":154},[84,168833,168834,168836],{"class":86,"line":2793},[84,168835,3675],{"class":129},[84,168837,168838],{"class":154}," condition(student):\n",[84,168840,168841],{"class":86,"line":2798},[84,168842,168843],{"class":154},"            result.append(student)\n",[84,168845,168846,168848],{"class":86,"line":2804},[84,168847,5268],{"class":129},[84,168849,168605],{"class":154},[84,168851,168852],{"class":86,"line":2809},[84,168853,3578],{"emptyLinePlaceholder":1252},[84,168855,168856],{"class":86,"line":2823},[84,168857,3578],{"emptyLinePlaceholder":1252},[84,168859,168860,168862,168864,168867,168869,168872,168874,168876,168878,168880],{"class":86,"line":2828},[84,168861,166601],{"class":154},[84,168863,867],{"class":129},[84,168865,168866],{"class":154}," filter_students(students, ",[84,168868,167786],{"class":129},[84,168870,168871],{"class":154}," s: s[",[84,168873,152372],{"class":158},[84,168875,5620],{"class":154},[84,168877,2891],{"class":129},[84,168879,158737],{"class":94},[84,168881,162],{"class":154},[84,168883,168884,168887,168889,168891,168893,168895,168897,168899,168901,168903],{"class":86,"line":2834},[84,168885,168886],{"class":154},"excellent ",[84,168888,867],{"class":129},[84,168890,168866],{"class":154},[84,168892,167786],{"class":129},[84,168894,168871],{"class":154},[84,168896,152372],{"class":158},[84,168898,5620],{"class":154},[84,168900,2891],{"class":129},[84,168902,158688],{"class":94},[84,168904,162],{"class":154},[84,168906,168907,168910,168912,168914,168916,168918,168920,168922,168924,168926],{"class":86,"line":2855},[84,168908,168909],{"class":154},"under_age ",[84,168911,867],{"class":129},[84,168913,168866],{"class":154},[84,168915,167786],{"class":129},[84,168917,168871],{"class":154},[84,168919,70270],{"class":158},[84,168921,5620],{"class":154},[84,168923,2218],{"class":129},[84,168925,157185],{"class":94},[84,168927,162],{"class":154},[84,168929,168930],{"class":86,"line":2860},[84,168931,3578],{"emptyLinePlaceholder":1252},[84,168933,168934,168936],{"class":86,"line":2874},[84,168935,730],{"class":94},[84,168937,168938],{"class":154},"(passed)\n",[84,168940,168941,168943],{"class":86,"line":2879},[84,168942,730],{"class":94},[84,168944,168945],{"class":154},"(excellent)\n",[84,168947,168948,168950],{"class":86,"line":2908},[84,168949,730],{"class":94},[84,168951,168952],{"class":154},"(under_age)\n",[14,168954,168956],{"id":168955},"_715-易错点","7.15 易错点",[26,168958,168959,168962,168970,168975,168986],{},[29,168960,168961],{},"默认参数不要写可变对象。",[29,168963,168964,168966,168967,168969],{},[39,168965,167432],{}," 是元组，",[39,168968,167547],{}," 是字典。",[29,168971,168972,168974],{},[39,168973,167786],{}," 只适合简单表达式。",[29,168976,168977,102156,168979,168981,168982,168985],{},[39,168978,75190],{},[39,168980,81197],{}," 的结果是迭代器，常用 ",[39,168983,168984],{},"list()"," 转换查看。",[29,168987,168988],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168990,168992],{"id":168991},"_716-本章练习","7.16 本章练习",[26,168994,168995,169002,169008,169013,169018],{},[29,168996,168997,168998,169001],{},"写函数 ",[39,168999,169000],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169003,168997,169004,169007],{},[39,169005,169006],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169009,1188,169010,169012],{},[39,169011,167786],{}," 对学生列表按年龄排序。",[29,169014,1188,169015,169017],{},[39,169016,81197],{}," 找出成绩不及格的学生。",[29,169019,169020],{},"写一个装饰器，统计函数执行前后的提示信息。",[1222,169022,169023],{},"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":66,"searchDepth":98,"depth":98,"links":169025},[169026,169027,169028,169029,169030,169031,169035,169036,169037,169038,169043,169044,169045,169046,169047,169048],{"id":166884,"depth":98,"text":166885},{"id":166998,"depth":98,"text":166999},{"id":167087,"depth":98,"text":167088},{"id":167149,"depth":98,"text":167150},{"id":167295,"depth":98,"text":167296},{"id":167422,"depth":98,"text":167423,"children":169032},[169033,169034],{"id":167426,"depth":106,"text":167427},{"id":167541,"depth":106,"text":167542},{"id":167622,"depth":98,"text":167623},{"id":167780,"depth":98,"text":167781},{"id":167948,"depth":98,"text":167949},{"id":168030,"depth":98,"text":168031,"children":169039},[169040,169041,169042],{"id":168034,"depth":106,"text":168035},{"id":168105,"depth":106,"text":168106},{"id":168182,"depth":106,"text":168183},{"id":168307,"depth":98,"text":168308},{"id":168397,"depth":98,"text":168398},{"id":168528,"depth":98,"text":168529},{"id":168678,"depth":98,"text":168679},{"id":168955,"depth":98,"text":168956},{"id":168991,"depth":98,"text":168992},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166876,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169055,"title":169056,"body":169057,"description":1249,"extension":1250,"meta":171576,"navigation":1252,"path":171577,"seo":171578,"stem":171579,"__hash__":171580},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169058,"toc":171551},[169059,169062,169066,169069,169072,169103,169107,169111,169114,169141,169145,169148,169199,169202,169217,169220,169255,169259,169261,169285,169288,169348,169352,169356,169359,169416,169419,169439,169443,169446,169509,169513,169516,169572,169579,169603,169607,169610,169673,169677,169682,169733,169736,169740,169745,169812,169815,169897,169901,169906,169957,169960,169964,169967,169970,169978,169981,170027,170030,170076,170080,170086,170130,170133,170179,170182,170222,170225,170286,170290,170293,170383,170386,170528,170531,170598,170602,170605,170608,170749,170752,170830,170833,171009,171013,171015,171026,171028,171227,171231,171475,171479,171513,171517,171548],[10,169060,169056],{"id":169061},"_8-文件操作",[14,169063,169065],{"id":169064},"_81-文件操作的意义","8.1 文件操作的意义",[19,169067,169068],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169070,169071],{},"常见文件类型：",[26,169073,169074,169080,169086,169092,169098],{},[29,169075,169076,169079],{},[39,169077,169078],{},".txt","：普通文本。",[29,169081,169082,169085],{},[39,169083,169084],{},".csv","：表格文本。",[29,169087,169088,169091],{},[39,169089,169090],{},".json","：结构化数据。",[29,169093,169094,169097],{},[39,169095,169096],{},".log","：日志文件。",[29,169099,169100,169102],{},[39,169101,672],{},"：Python 源代码。",[14,169104,169106],{"id":169105},"_82-路径","8.2 路径",[198,169108,169110],{"id":169109},"_821-相对路径","8.2.1 相对路径",[19,169112,169113],{},"相对当前运行目录：",[60,169115,169117],{"className":121,"code":169116,"language":91,"meta":66,"style":66},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[39,169118,169119],{"__ignoreMap":66},[84,169120,169121,169123,169125,169127,169129,169131,169133,169135,169137,169139],{"class":86,"line":87},[84,169122,88061],{"class":94},[84,169124,155],{"class":154},[84,169126,1136],{"class":158},[84,169128,846],{"class":154},[84,169130,1141],{"class":158},[84,169132,846],{"class":154},[84,169134,1146],{"class":928},[84,169136,867],{"class":129},[84,169138,1151],{"class":158},[84,169140,162],{"class":154},[198,169142,169144],{"id":169143},"_822-绝对路径","8.2.2 绝对路径",[19,169146,169147],{},"从根目录或盘符开始：",[60,169149,169151],{"className":121,"code":169150,"language":91,"meta":66,"style":66},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[39,169152,169153,169176],{"__ignoreMap":66},[84,169154,169155,169157,169159,169162,169164,169166,169168,169170,169172,169174],{"class":86,"line":87},[84,169156,88061],{"class":94},[84,169158,155],{"class":154},[84,169160,169161],{"class":158},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[84,169163,846],{"class":154},[84,169165,1141],{"class":158},[84,169167,846],{"class":154},[84,169169,1146],{"class":928},[84,169171,867],{"class":129},[84,169173,1151],{"class":158},[84,169175,162],{"class":154},[84,169177,169178,169180,169182,169185,169187,169189,169191,169193,169195,169197],{"class":86,"line":98},[84,169179,88061],{"class":94},[84,169181,155],{"class":154},[84,169183,169184],{"class":158},"\"D:\u002Fdata\u002Fdata.txt\"",[84,169186,846],{"class":154},[84,169188,1141],{"class":158},[84,169190,846],{"class":154},[84,169192,1146],{"class":928},[84,169194,867],{"class":129},[84,169196,1151],{"class":158},[84,169198,162],{"class":154},[19,169200,169201],{},"Windows 路径建议写成：",[60,169203,169205],{"className":121,"code":169204,"language":91,"meta":66,"style":66},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[39,169206,169207],{"__ignoreMap":66},[84,169208,169209,169212,169214],{"class":86,"line":87},[84,169210,169211],{"class":154},"path ",[84,169213,867],{"class":129},[84,169215,169216],{"class":158}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169218,169219],{},"或原始字符串：",[60,169221,169223],{"className":121,"code":169222,"language":91,"meta":66,"style":66},"path = r\"D:\\data\\data.txt\"\n",[39,169224,169225],{"__ignoreMap":66},[84,169226,169227,169229,169231,169233,169235,169238,169241,169244,169246,169248,169250,169253],{"class":86,"line":87},[84,169228,169211],{"class":154},[84,169230,867],{"class":129},[84,169232,18291],{"class":129},[84,169234,1562],{"class":158},[84,169236,169237],{"class":49126},"D:",[84,169239,169240],{"class":94},"\\d",[84,169242,169243],{"class":49126},"ata",[84,169245,169240],{"class":94},[84,169247,169243],{"class":49126},[84,169249,1867],{"class":94},[84,169251,169252],{"class":49126},"txt",[84,169254,26296],{"class":158},[14,169256,169258],{"id":169257},"_83-open函数","8.3 open函数",[19,169260,6358],{},[60,169262,169264],{"className":121,"code":169263,"language":91,"meta":66,"style":66},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[39,169265,169266],{"__ignoreMap":66},[84,169267,169268,169270,169272,169274,169277,169279,169281,169283],{"class":86,"line":87},[84,169269,46506],{"class":928},[84,169271,14735],{"class":129},[84,169273,1131],{"class":94},[84,169275,169276],{"class":154},"(文件路径, 打开模式, ",[84,169278,1146],{"class":928},[84,169280,867],{"class":129},[84,169282,1151],{"class":158},[84,169284,162],{"class":154},[19,169286,169287],{},"常见模式：",[458,169289,169290,169299],{},[461,169291,169292],{},[464,169293,169294,169297],{},[467,169295,169296],{},"模式",[467,169298,27032],{},[474,169300,169301,169310,169319,169328,169338],{},[464,169302,169303,169307],{},[479,169304,169305],{},[39,169306,1978],{},[479,169308,169309],{},"只读，文件不存在会报错",[464,169311,169312,169316],{},[479,169313,169314],{},[39,169315,2103],{},[479,169317,169318],{},"只写，文件不存在会创建，存在会清空",[464,169320,169321,169325],{},[479,169322,169323],{},[39,169324,208],{},[479,169326,169327],{},"追加，文件不存在会创建",[464,169329,169330,169335],{},[479,169331,169332],{},[39,169333,169334],{},"rb",[479,169336,169337],{},"二进制只读",[464,169339,169340,169345],{},[479,169341,169342],{},[39,169343,169344],{},"wb",[479,169346,169347],{},"二进制只写",[14,169349,169351],{"id":169350},"_84-读取文件","8.4 读取文件",[198,169353,169355],{"id":169354},"_841-read","8.4.1 read",[19,169357,169358],{},"一次读取全部内容：",[60,169360,169362],{"className":121,"code":169361,"language":91,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[39,169363,169364,169390,169402,169409],{"__ignoreMap":66},[84,169365,169366,169368,169370,169372,169374,169376,169378,169380,169382,169384,169386,169388],{"class":86,"line":87},[84,169367,46506],{"class":928},[84,169369,14735],{"class":129},[84,169371,1131],{"class":94},[84,169373,155],{"class":154},[84,169375,1136],{"class":158},[84,169377,846],{"class":154},[84,169379,1141],{"class":158},[84,169381,846],{"class":154},[84,169383,1146],{"class":928},[84,169385,867],{"class":129},[84,169387,1151],{"class":158},[84,169389,162],{"class":154},[84,169391,169392,169395,169397,169399],{"class":86,"line":98},[84,169393,169394],{"class":154},"content ",[84,169396,867],{"class":129},[84,169398,149053],{"class":928},[84,169400,169401],{"class":154},".read()\n",[84,169403,169404,169406],{"class":86,"line":106},[84,169405,730],{"class":94},[84,169407,169408],{"class":154},"(content)\n",[84,169410,169411,169413],{"class":86,"line":112},[84,169412,46506],{"class":928},[84,169414,169415],{"class":154},".close()\n",[19,169417,169418],{},"可以指定读取字符数：",[60,169420,169422],{"className":121,"code":169421,"language":91,"meta":66,"style":66},"content = file.read(10)\n",[39,169423,169424],{"__ignoreMap":66},[84,169425,169426,169428,169430,169432,169435,169437],{"class":86,"line":87},[84,169427,169394],{"class":154},[84,169429,867],{"class":129},[84,169431,149053],{"class":928},[84,169433,169434],{"class":154},".read(",[84,169436,1756],{"class":94},[84,169438,162],{"class":154},[198,169440,169442],{"id":169441},"_842-readline","8.4.2 readline",[19,169444,169445],{},"一次读取一行：",[60,169447,169449],{"className":121,"code":169448,"language":91,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[39,169450,169451,169477,169481,169492,169499,169503],{"__ignoreMap":66},[84,169452,169453,169455,169457,169459,169461,169463,169465,169467,169469,169471,169473,169475],{"class":86,"line":87},[84,169454,46506],{"class":928},[84,169456,14735],{"class":129},[84,169458,1131],{"class":94},[84,169460,155],{"class":154},[84,169462,1136],{"class":158},[84,169464,846],{"class":154},[84,169466,1141],{"class":158},[84,169468,846],{"class":154},[84,169470,1146],{"class":928},[84,169472,867],{"class":129},[84,169474,1151],{"class":158},[84,169476,162],{"class":154},[84,169478,169479],{"class":86,"line":98},[84,169480,3578],{"emptyLinePlaceholder":1252},[84,169482,169483,169485,169487,169489],{"class":86,"line":106},[84,169484,148152],{"class":154},[84,169486,867],{"class":129},[84,169488,149053],{"class":928},[84,169490,169491],{"class":154},".readline()\n",[84,169493,169494,169496],{"class":86,"line":112},[84,169495,730],{"class":94},[84,169497,169498],{"class":154},"(line)\n",[84,169500,169501],{"class":86,"line":425},[84,169502,3578],{"emptyLinePlaceholder":1252},[84,169504,169505,169507],{"class":86,"line":2395},[84,169506,46506],{"class":928},[84,169508,169415],{"class":154},[198,169510,169512],{"id":169511},"_843-readlines","8.4.3 readlines",[19,169514,169515],{},"读取所有行，返回列表：",[60,169517,169519],{"className":121,"code":169518,"language":91,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[39,169520,169521,169547,169559,169566],{"__ignoreMap":66},[84,169522,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541,169543,169545],{"class":86,"line":87},[84,169524,46506],{"class":928},[84,169526,14735],{"class":129},[84,169528,1131],{"class":94},[84,169530,155],{"class":154},[84,169532,1136],{"class":158},[84,169534,846],{"class":154},[84,169536,1141],{"class":158},[84,169538,846],{"class":154},[84,169540,1146],{"class":928},[84,169542,867],{"class":129},[84,169544,1151],{"class":158},[84,169546,162],{"class":154},[84,169548,169549,169552,169554,169556],{"class":86,"line":98},[84,169550,169551],{"class":154},"lines ",[84,169553,867],{"class":129},[84,169555,149053],{"class":928},[84,169557,169558],{"class":154},".readlines()\n",[84,169560,169561,169563],{"class":86,"line":106},[84,169562,730],{"class":94},[84,169564,169565],{"class":154},"(lines)\n",[84,169567,169568,169570],{"class":86,"line":112},[84,169569,46506],{"class":928},[84,169571,169415],{"class":154},[19,169573,169574,169575,169578],{},"每一行通常带有换行符，可以用 ",[39,169576,169577],{},"strip()"," 去掉：",[60,169580,169582],{"className":121,"code":169581,"language":91,"meta":66,"style":66},"for line in lines:\n    print(line.strip())\n",[39,169583,169584,169596],{"__ignoreMap":66},[84,169585,169586,169588,169591,169593],{"class":86,"line":87},[84,169587,4203],{"class":129},[84,169589,169590],{"class":154}," line ",[84,169592,27206],{"class":129},[84,169594,169595],{"class":154}," lines:\n",[84,169597,169598,169600],{"class":86,"line":98},[84,169599,32453],{"class":94},[84,169601,169602],{"class":154},"(line.strip())\n",[198,169604,169606],{"id":169605},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169608,169609],{},"推荐读取大文件时使用：",[60,169611,169613],{"className":121,"code":169612,"language":91,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[39,169614,169615,169641,169645,169657,169663,169667],{"__ignoreMap":66},[84,169616,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639],{"class":86,"line":87},[84,169618,46506],{"class":928},[84,169620,14735],{"class":129},[84,169622,1131],{"class":94},[84,169624,155],{"class":154},[84,169626,1136],{"class":158},[84,169628,846],{"class":154},[84,169630,1141],{"class":158},[84,169632,846],{"class":154},[84,169634,1146],{"class":928},[84,169636,867],{"class":129},[84,169638,1151],{"class":158},[84,169640,162],{"class":154},[84,169642,169643],{"class":86,"line":98},[84,169644,3578],{"emptyLinePlaceholder":1252},[84,169646,169647,169649,169651,169653,169655],{"class":86,"line":106},[84,169648,4203],{"class":129},[84,169650,169590],{"class":154},[84,169652,27206],{"class":129},[84,169654,149053],{"class":928},[84,169656,4917],{"class":154},[84,169658,169659,169661],{"class":86,"line":112},[84,169660,32453],{"class":94},[84,169662,169602],{"class":154},[84,169664,169665],{"class":86,"line":425},[84,169666,3578],{"emptyLinePlaceholder":1252},[84,169668,169669,169671],{"class":86,"line":2395},[84,169670,46506],{"class":928},[84,169672,169415],{"class":154},[14,169674,169676],{"id":169675},"_85-with语句","8.5 with语句",[19,169678,169679,169681],{},[39,169680,1128],{}," 会自动关闭文件，推荐使用。",[60,169683,169685],{"className":121,"code":169684,"language":91,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[39,169686,169687,169717,169727],{"__ignoreMap":66},[84,169688,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715],{"class":86,"line":87},[84,169690,1128],{"class":129},[84,169692,1131],{"class":94},[84,169694,155],{"class":154},[84,169696,1136],{"class":158},[84,169698,846],{"class":154},[84,169700,1141],{"class":158},[84,169702,846],{"class":154},[84,169704,1146],{"class":928},[84,169706,867],{"class":129},[84,169708,1151],{"class":158},[84,169710,1154],{"class":154},[84,169712,1157],{"class":129},[84,169714,149053],{"class":928},[84,169716,4917],{"class":154},[84,169718,169719,169721,169723,169725],{"class":86,"line":98},[84,169720,1165],{"class":154},[84,169722,867],{"class":129},[84,169724,149053],{"class":928},[84,169726,169401],{"class":154},[84,169728,169729,169731],{"class":86,"line":106},[84,169730,32453],{"class":94},[84,169732,169408],{"class":154},[19,169734,169735],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169737,169739],{"id":169738},"_86-写入文件","8.6 写入文件",[19,169741,169742,169744],{},[39,169743,2103],{}," 模式会清空原文件。",[60,169746,169748],{"className":121,"code":169747,"language":91,"meta":66,"style":66},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[39,169749,169750,169780,169797],{"__ignoreMap":66},[84,169751,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770,169772,169774,169776,169778],{"class":86,"line":87},[84,169753,1128],{"class":129},[84,169755,1131],{"class":94},[84,169757,155],{"class":154},[84,169759,1136],{"class":158},[84,169761,846],{"class":154},[84,169763,152876],{"class":158},[84,169765,846],{"class":154},[84,169767,1146],{"class":928},[84,169769,867],{"class":129},[84,169771,1151],{"class":158},[84,169773,1154],{"class":154},[84,169775,1157],{"class":129},[84,169777,149053],{"class":928},[84,169779,4917],{"class":154},[84,169781,169782,169785,169788,169791,169793,169795],{"class":86,"line":98},[84,169783,169784],{"class":928},"    file",[84,169786,169787],{"class":154},".write(",[84,169789,169790],{"class":158},"\"hello",[84,169792,157425],{"class":94},[84,169794,1562],{"class":158},[84,169796,162],{"class":154},[84,169798,169799,169801,169803,169806,169808,169810],{"class":86,"line":106},[84,169800,169784],{"class":928},[84,169802,169787],{"class":154},[84,169804,169805],{"class":158},"\"python",[84,169807,157425],{"class":94},[84,169809,1562],{"class":158},[84,169811,162],{"class":154},[19,169813,169814],{},"写入多行：",[60,169816,169818],{"className":121,"code":169817,"language":91,"meta":66,"style":66},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[39,169819,169820,169855,169859,169890],{"__ignoreMap":66},[84,169821,169822,169824,169826,169828,169831,169833,169835,169837,169840,169842,169844,169846,169849,169851,169853],{"class":86,"line":87},[84,169823,169551],{"class":154},[84,169825,867],{"class":129},[84,169827,53375],{"class":154},[84,169829,169830],{"class":158},"\"小明,18",[84,169832,157425],{"class":94},[84,169834,1562],{"class":158},[84,169836,846],{"class":154},[84,169838,169839],{"class":158},"\"小红,17",[84,169841,157425],{"class":94},[84,169843,1562],{"class":158},[84,169845,846],{"class":154},[84,169847,169848],{"class":158},"\"小刚,19",[84,169850,157425],{"class":94},[84,169852,1562],{"class":158},[84,169854,34398],{"class":154},[84,169856,169857],{"class":86,"line":98},[84,169858,3578],{"emptyLinePlaceholder":1252},[84,169860,169861,169863,169865,169867,169870,169872,169874,169876,169878,169880,169882,169884,169886,169888],{"class":86,"line":106},[84,169862,1128],{"class":129},[84,169864,1131],{"class":94},[84,169866,155],{"class":154},[84,169868,169869],{"class":158},"\"students.txt\"",[84,169871,846],{"class":154},[84,169873,152876],{"class":158},[84,169875,846],{"class":154},[84,169877,1146],{"class":928},[84,169879,867],{"class":129},[84,169881,1151],{"class":158},[84,169883,1154],{"class":154},[84,169885,1157],{"class":129},[84,169887,149053],{"class":928},[84,169889,4917],{"class":154},[84,169891,169892,169894],{"class":86,"line":112},[84,169893,169784],{"class":928},[84,169895,169896],{"class":154},".writelines(lines)\n",[14,169898,169900],{"id":169899},"_87-追加文件","8.7 追加文件",[19,169902,169903,169905],{},[39,169904,208],{}," 模式不会清空原内容，而是在末尾追加。",[60,169907,169909],{"className":121,"code":169908,"language":91,"meta":66,"style":66},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[39,169910,169911,169942],{"__ignoreMap":66},[84,169912,169913,169915,169917,169919,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940],{"class":86,"line":87},[84,169914,1128],{"class":129},[84,169916,1131],{"class":94},[84,169918,155],{"class":154},[84,169920,169921],{"class":158},"\"log.txt\"",[84,169923,846],{"class":154},[84,169925,166225],{"class":158},[84,169927,846],{"class":154},[84,169929,1146],{"class":928},[84,169931,867],{"class":129},[84,169933,1151],{"class":158},[84,169935,1154],{"class":154},[84,169937,1157],{"class":129},[84,169939,149053],{"class":928},[84,169941,4917],{"class":154},[84,169943,169944,169946,169948,169951,169953,169955],{"class":86,"line":98},[84,169945,169784],{"class":928},[84,169947,169787],{"class":154},[84,169949,169950],{"class":158},"\"程序启动",[84,169952,157425],{"class":94},[84,169954,1562],{"class":158},[84,169956,162],{"class":154},[19,169958,169959],{},"日志类文件常用追加模式。",[14,169961,169963],{"id":169962},"_88-文件编码","8.8 文件编码",[19,169965,169966],{},"编码决定文字如何保存为字节。",[19,169968,169969],{},"常见编码：",[26,169971,169972,169975],{},[29,169973,169974],{},"UTF-8：推荐。",[29,169976,169977],{},"GBK：部分 Windows 中文文件常见。",[19,169979,169980],{},"读取文件乱码时，可以尝试：",[60,169982,169984],{"className":121,"code":169983,"language":91,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[39,169985,169986,170017],{"__ignoreMap":66},[84,169987,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006,170009,170011,170013,170015],{"class":86,"line":87},[84,169989,1128],{"class":129},[84,169991,1131],{"class":94},[84,169993,155],{"class":154},[84,169995,1136],{"class":158},[84,169997,846],{"class":154},[84,169999,1141],{"class":158},[84,170001,846],{"class":154},[84,170003,1146],{"class":928},[84,170005,867],{"class":129},[84,170007,170008],{"class":158},"\"gbk\"",[84,170010,1154],{"class":154},[84,170012,1157],{"class":129},[84,170014,149053],{"class":928},[84,170016,4917],{"class":154},[84,170018,170019,170021,170023,170025],{"class":86,"line":98},[84,170020,1165],{"class":154},[84,170022,867],{"class":129},[84,170024,149053],{"class":928},[84,170026,169401],{"class":154},[19,170028,170029],{},"写文件时建议统一 UTF-8：",[60,170031,170033],{"className":121,"code":170032,"language":91,"meta":66,"style":66},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[39,170034,170035,170065],{"__ignoreMap":66},[84,170036,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063],{"class":86,"line":87},[84,170038,1128],{"class":129},[84,170040,1131],{"class":94},[84,170042,155],{"class":154},[84,170044,1136],{"class":158},[84,170046,846],{"class":154},[84,170048,152876],{"class":158},[84,170050,846],{"class":154},[84,170052,1146],{"class":928},[84,170054,867],{"class":129},[84,170056,1151],{"class":158},[84,170058,1154],{"class":154},[84,170060,1157],{"class":129},[84,170062,149053],{"class":928},[84,170064,4917],{"class":154},[84,170066,170067,170069,170071,170074],{"class":86,"line":98},[84,170068,169784],{"class":928},[84,170070,169787],{"class":154},[84,170072,170073],{"class":158},"\"中文内容\"",[84,170075,162],{"class":154},[14,170077,170079],{"id":170078},"_89-pathlib","8.9 pathlib",[19,170081,170082,170085],{},[39,170083,170084],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[60,170087,170089],{"className":121,"code":170088,"language":91,"meta":66,"style":66},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[39,170090,170091,170101,170105,170123],{"__ignoreMap":66},[84,170092,170093,170095,170097,170099],{"class":86,"line":87},[84,170094,31891],{"class":129},[84,170096,109445],{"class":154},[84,170098,31547],{"class":129},[84,170100,109450],{"class":154},[84,170102,170103],{"class":86,"line":98},[84,170104,3578],{"emptyLinePlaceholder":1252},[84,170106,170107,170109,170111,170113,170116,170118,170120],{"class":86,"line":106},[84,170108,169211],{"class":154},[84,170110,867],{"class":129},[84,170112,109679],{"class":154},[84,170114,170115],{"class":158},"\"data\"",[84,170117,1154],{"class":154},[84,170119,1893],{"class":129},[84,170121,170122],{"class":158}," \"students.txt\"\n",[84,170124,170125,170127],{"class":86,"line":112},[84,170126,730],{"class":94},[84,170128,170129],{"class":154},"(path)\n",[19,170131,170132],{},"创建目录：",[60,170134,170136],{"className":121,"code":170135,"language":91,"meta":66,"style":66},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[39,170137,170138,170148,170152,170165],{"__ignoreMap":66},[84,170139,170140,170142,170144,170146],{"class":86,"line":87},[84,170141,31891],{"class":129},[84,170143,109445],{"class":154},[84,170145,31547],{"class":129},[84,170147,109450],{"class":154},[84,170149,170150],{"class":86,"line":98},[84,170151,3578],{"emptyLinePlaceholder":1252},[84,170153,170154,170157,170159,170161,170163],{"class":86,"line":106},[84,170155,170156],{"class":154},"data_dir ",[84,170158,867],{"class":129},[84,170160,109679],{"class":154},[84,170162,170115],{"class":158},[84,170164,162],{"class":154},[84,170166,170167,170170,170173,170175,170177],{"class":86,"line":112},[84,170168,170169],{"class":154},"data_dir.mkdir(",[84,170171,170172],{"class":928},"exist_ok",[84,170174,867],{"class":129},[84,170176,32629],{"class":94},[84,170178,162],{"class":154},[19,170180,170181],{},"判断文件是否存在：",[60,170183,170185],{"className":121,"code":170184,"language":91,"meta":66,"style":66},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[39,170186,170187,170200,170204,170211],{"__ignoreMap":66},[84,170188,170189,170191,170193,170195,170198],{"class":86,"line":87},[84,170190,169211],{"class":154},[84,170192,867],{"class":129},[84,170194,109679],{"class":154},[84,170196,170197],{"class":158},"\"data\u002Fstudents.txt\"",[84,170199,162],{"class":154},[84,170201,170202],{"class":86,"line":98},[84,170203,3578],{"emptyLinePlaceholder":1252},[84,170205,170206,170208],{"class":86,"line":106},[84,170207,2712],{"class":129},[84,170209,170210],{"class":154}," path.exists():\n",[84,170212,170213,170215,170217,170220],{"class":86,"line":112},[84,170214,32453],{"class":94},[84,170216,155],{"class":154},[84,170218,170219],{"class":158},"\"文件存在\"",[84,170221,162],{"class":154},[19,170223,170224],{},"读写文本：",[60,170226,170228],{"className":121,"code":170227,"language":91,"meta":66,"style":66},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[39,170229,170230,170242,170246,170263,170280],{"__ignoreMap":66},[84,170231,170232,170234,170236,170238,170240],{"class":86,"line":87},[84,170233,169211],{"class":154},[84,170235,867],{"class":129},[84,170237,109679],{"class":154},[84,170239,1136],{"class":158},[84,170241,162],{"class":154},[84,170243,170244],{"class":86,"line":98},[84,170245,3578],{"emptyLinePlaceholder":1252},[84,170247,170248,170251,170253,170255,170257,170259,170261],{"class":86,"line":106},[84,170249,170250],{"class":154},"path.write_text(",[84,170252,159],{"class":158},[84,170254,846],{"class":154},[84,170256,1146],{"class":928},[84,170258,867],{"class":129},[84,170260,1151],{"class":158},[84,170262,162],{"class":154},[84,170264,170265,170267,170269,170272,170274,170276,170278],{"class":86,"line":112},[84,170266,169394],{"class":154},[84,170268,867],{"class":129},[84,170270,170271],{"class":154}," path.read_text(",[84,170273,1146],{"class":928},[84,170275,867],{"class":129},[84,170277,1151],{"class":158},[84,170279,162],{"class":154},[84,170281,170282,170284],{"class":86,"line":425},[84,170283,730],{"class":94},[84,170285,169408],{"class":154},[14,170287,170289],{"id":170288},"_810-json文件","8.10 JSON文件",[19,170291,170292],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[60,170294,170296],{"className":121,"code":170295,"language":91,"meta":66,"style":66},"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",[39,170297,170298,170304,170308,170316,170326,170336,170344,170348,170352,170377],{"__ignoreMap":66},[84,170299,170300,170302],{"class":86,"line":87},[84,170301,31547],{"class":129},[84,170303,147991],{"class":154},[84,170305,170306],{"class":86,"line":98},[84,170307,3578],{"emptyLinePlaceholder":1252},[84,170309,170310,170312,170314],{"class":86,"line":106},[84,170311,150381],{"class":154},[84,170313,867],{"class":129},[84,170315,16742],{"class":154},[84,170317,170318,170320,170322,170324],{"class":86,"line":112},[84,170319,147920],{"class":158},[84,170321,52586],{"class":154},[84,170323,150788],{"class":158},[84,170325,32619],{"class":154},[84,170327,170328,170330,170332,170334],{"class":86,"line":425},[84,170329,165437],{"class":158},[84,170331,52586],{"class":154},[84,170333,849],{"class":94},[84,170335,32619],{"class":154},[84,170337,170338,170340,170342],{"class":86,"line":2395},[84,170339,165448],{"class":158},[84,170341,52586],{"class":154},[84,170343,165453],{"class":94},[84,170345,170346],{"class":86,"line":2401},[84,170347,2746],{"class":154},[84,170349,170350],{"class":86,"line":2492},[84,170351,3578],{"emptyLinePlaceholder":1252},[84,170353,170354,170356,170358,170361,170363,170365,170367,170369,170371,170373,170375],{"class":86,"line":2498},[84,170355,157344],{"class":154},[84,170357,867],{"class":129},[84,170359,170360],{"class":154}," json.dumps(student, ",[84,170362,148037],{"class":928},[84,170364,867],{"class":129},[84,170366,35139],{"class":94},[84,170368,846],{"class":154},[84,170370,152912],{"class":928},[84,170372,867],{"class":129},[84,170374,1397],{"class":94},[84,170376,162],{"class":154},[84,170378,170379,170381],{"class":86,"line":2510},[84,170380,730],{"class":94},[84,170382,164971],{"class":154},[19,170384,170385],{},"写入 JSON 文件：",[60,170387,170389],{"className":121,"code":170388,"language":91,"meta":66,"style":66},"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",[39,170390,170391,170397,170401,170409,170437,170465,170469,170473,170503],{"__ignoreMap":66},[84,170392,170393,170395],{"class":86,"line":87},[84,170394,31547],{"class":129},[84,170396,147991],{"class":154},[84,170398,170399],{"class":86,"line":98},[84,170400,3578],{"emptyLinePlaceholder":1252},[84,170402,170403,170405,170407],{"class":86,"line":106},[84,170404,160616],{"class":154},[84,170406,867],{"class":129},[84,170408,56594],{"class":154},[84,170410,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435],{"class":86,"line":112},[84,170412,149285],{"class":154},[84,170414,63825],{"class":158},[84,170416,52586],{"class":154},[84,170418,150788],{"class":158},[84,170420,846],{"class":154},[84,170422,70270],{"class":158},[84,170424,52586],{"class":154},[84,170426,849],{"class":94},[84,170428,846],{"class":154},[84,170430,152372],{"class":158},[84,170432,52586],{"class":154},[84,170434,2297],{"class":94},[84,170436,6107],{"class":154},[84,170438,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463],{"class":86,"line":425},[84,170440,149285],{"class":154},[84,170442,63825],{"class":158},[84,170444,52586],{"class":154},[84,170446,151836],{"class":158},[84,170448,846],{"class":154},[84,170450,70270],{"class":158},[84,170452,52586],{"class":154},[84,170454,1934],{"class":94},[84,170456,846],{"class":154},[84,170458,152372],{"class":158},[84,170460,52586],{"class":154},[84,170462,2119],{"class":94},[84,170464,6107],{"class":154},[84,170466,170467],{"class":86,"line":2395},[84,170468,34398],{"class":154},[84,170470,170471],{"class":86,"line":2401},[84,170472,3578],{"emptyLinePlaceholder":1252},[84,170474,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497,170499,170501],{"class":86,"line":2492},[84,170476,1128],{"class":129},[84,170478,1131],{"class":94},[84,170480,155],{"class":154},[84,170482,152731],{"class":158},[84,170484,846],{"class":154},[84,170486,152876],{"class":158},[84,170488,846],{"class":154},[84,170490,1146],{"class":928},[84,170492,867],{"class":129},[84,170494,1151],{"class":158},[84,170496,1154],{"class":154},[84,170498,1157],{"class":129},[84,170500,149053],{"class":928},[84,170502,4917],{"class":154},[84,170504,170505,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526],{"class":86,"line":2498},[84,170506,170507],{"class":154},"    json.dump(students, ",[84,170509,46506],{"class":928},[84,170511,846],{"class":154},[84,170513,148037],{"class":928},[84,170515,867],{"class":129},[84,170517,35139],{"class":94},[84,170519,846],{"class":154},[84,170521,152912],{"class":928},[84,170523,867],{"class":129},[84,170525,1397],{"class":94},[84,170527,162],{"class":154},[19,170529,170530],{},"读取 JSON 文件：",[60,170532,170534],{"className":121,"code":170533,"language":91,"meta":66,"style":66},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[39,170535,170536,170542,170546,170576,170588,170592],{"__ignoreMap":66},[84,170537,170538,170540],{"class":86,"line":87},[84,170539,31547],{"class":129},[84,170541,147991],{"class":154},[84,170543,170544],{"class":86,"line":98},[84,170545,3578],{"emptyLinePlaceholder":1252},[84,170547,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570,170572,170574],{"class":86,"line":106},[84,170549,1128],{"class":129},[84,170551,1131],{"class":94},[84,170553,155],{"class":154},[84,170555,152731],{"class":158},[84,170557,846],{"class":154},[84,170559,1141],{"class":158},[84,170561,846],{"class":154},[84,170563,1146],{"class":928},[84,170565,867],{"class":129},[84,170567,1151],{"class":158},[84,170569,1154],{"class":154},[84,170571,1157],{"class":129},[84,170573,149053],{"class":928},[84,170575,4917],{"class":154},[84,170577,170578,170580,170582,170584,170586],{"class":86,"line":112},[84,170579,153937],{"class":154},[84,170581,867],{"class":129},[84,170583,149064],{"class":154},[84,170585,46506],{"class":928},[84,170587,162],{"class":154},[84,170589,170590],{"class":86,"line":425},[84,170591,3578],{"emptyLinePlaceholder":1252},[84,170593,170594,170596],{"class":86,"line":2395},[84,170595,730],{"class":94},[84,170597,165895],{"class":154},[14,170599,170601],{"id":170600},"_811-csv文件","8.11 CSV文件",[19,170603,170604],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170606,170607],{},"写入 CSV：",[60,170609,170611],{"className":121,"code":170610,"language":91,"meta":66,"style":66},"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",[39,170612,170613,170620,170624,170632,170650,170666,170682,170686,170690,170730,170744],{"__ignoreMap":66},[84,170614,170615,170617],{"class":86,"line":87},[84,170616,31547],{"class":129},[84,170618,170619],{"class":154}," csv\n",[84,170621,170622],{"class":86,"line":98},[84,170623,3578],{"emptyLinePlaceholder":1252},[84,170625,170626,170628,170630],{"class":86,"line":106},[84,170627,160616],{"class":154},[84,170629,867],{"class":129},[84,170631,56594],{"class":154},[84,170633,170634,170637,170639,170641,170643,170645,170648],{"class":86,"line":112},[84,170635,170636],{"class":154},"    [",[84,170638,74245],{"class":158},[84,170640,846],{"class":154},[84,170642,74278],{"class":158},[84,170644,846],{"class":154},[84,170646,170647],{"class":158},"\"成绩\"",[84,170649,88982],{"class":154},[84,170651,170652,170654,170656,170658,170660,170662,170664],{"class":86,"line":425},[84,170653,170636],{"class":154},[84,170655,150788],{"class":158},[84,170657,846],{"class":154},[84,170659,849],{"class":94},[84,170661,846],{"class":154},[84,170663,2297],{"class":94},[84,170665,88982],{"class":154},[84,170667,170668,170670,170672,170674,170676,170678,170680],{"class":86,"line":2395},[84,170669,170636],{"class":154},[84,170671,151836],{"class":158},[84,170673,846],{"class":154},[84,170675,1934],{"class":94},[84,170677,846],{"class":154},[84,170679,2119],{"class":94},[84,170681,88982],{"class":154},[84,170683,170684],{"class":86,"line":2401},[84,170685,34398],{"class":154},[84,170687,170688],{"class":86,"line":2492},[84,170689,3578],{"emptyLinePlaceholder":1252},[84,170691,170692,170694,170696,170698,170701,170703,170705,170707,170709,170711,170713,170715,170718,170720,170722,170724,170726,170728],{"class":86,"line":2498},[84,170693,1128],{"class":129},[84,170695,1131],{"class":94},[84,170697,155],{"class":154},[84,170699,170700],{"class":158},"\"students.csv\"",[84,170702,846],{"class":154},[84,170704,152876],{"class":158},[84,170706,846],{"class":154},[84,170708,1146],{"class":928},[84,170710,867],{"class":129},[84,170712,1151],{"class":158},[84,170714,846],{"class":154},[84,170716,170717],{"class":928},"newline",[84,170719,867],{"class":129},[84,170721,8824],{"class":158},[84,170723,1154],{"class":154},[84,170725,1157],{"class":129},[84,170727,149053],{"class":928},[84,170729,4917],{"class":154},[84,170731,170732,170735,170737,170740,170742],{"class":86,"line":2510},[84,170733,170734],{"class":154},"    writer ",[84,170736,867],{"class":129},[84,170738,170739],{"class":154}," csv.writer(",[84,170741,46506],{"class":928},[84,170743,162],{"class":154},[84,170745,170746],{"class":86,"line":2793},[84,170747,170748],{"class":154},"    writer.writerows(students)\n",[19,170750,170751],{},"读取 CSV：",[60,170753,170755],{"className":121,"code":170754,"language":91,"meta":66,"style":66},"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",[39,170756,170757,170763,170767,170797,170811,170823],{"__ignoreMap":66},[84,170758,170759,170761],{"class":86,"line":87},[84,170760,31547],{"class":129},[84,170762,170619],{"class":154},[84,170764,170765],{"class":86,"line":98},[84,170766,3578],{"emptyLinePlaceholder":1252},[84,170768,170769,170771,170773,170775,170777,170779,170781,170783,170785,170787,170789,170791,170793,170795],{"class":86,"line":106},[84,170770,1128],{"class":129},[84,170772,1131],{"class":94},[84,170774,155],{"class":154},[84,170776,170700],{"class":158},[84,170778,846],{"class":154},[84,170780,1141],{"class":158},[84,170782,846],{"class":154},[84,170784,1146],{"class":928},[84,170786,867],{"class":129},[84,170788,1151],{"class":158},[84,170790,1154],{"class":154},[84,170792,1157],{"class":129},[84,170794,149053],{"class":928},[84,170796,4917],{"class":154},[84,170798,170799,170802,170804,170807,170809],{"class":86,"line":112},[84,170800,170801],{"class":154},"    reader ",[84,170803,867],{"class":129},[84,170805,170806],{"class":154}," csv.reader(",[84,170808,46506],{"class":928},[84,170810,162],{"class":154},[84,170812,170813,170815,170818,170820],{"class":86,"line":425},[84,170814,4379],{"class":129},[84,170816,170817],{"class":154}," row ",[84,170819,27206],{"class":129},[84,170821,170822],{"class":154}," reader:\n",[84,170824,170825,170827],{"class":86,"line":2395},[84,170826,33604],{"class":94},[84,170828,170829],{"class":154},"(row)\n",[19,170831,170832],{},"使用字典写入：",[60,170834,170836],{"className":121,"code":170835,"language":91,"meta":66,"style":66},"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",[39,170837,170838,170844,170848,170856,170884,170912,170916,170920,170958,170979,171000,171005],{"__ignoreMap":66},[84,170839,170840,170842],{"class":86,"line":87},[84,170841,31547],{"class":129},[84,170843,170619],{"class":154},[84,170845,170846],{"class":86,"line":98},[84,170847,3578],{"emptyLinePlaceholder":1252},[84,170849,170850,170852,170854],{"class":86,"line":106},[84,170851,160616],{"class":154},[84,170853,867],{"class":129},[84,170855,56594],{"class":154},[84,170857,170858,170860,170862,170864,170866,170868,170870,170872,170874,170876,170878,170880,170882],{"class":86,"line":112},[84,170859,149285],{"class":154},[84,170861,63825],{"class":158},[84,170863,52586],{"class":154},[84,170865,150788],{"class":158},[84,170867,846],{"class":154},[84,170869,70270],{"class":158},[84,170871,52586],{"class":154},[84,170873,849],{"class":94},[84,170875,846],{"class":154},[84,170877,152372],{"class":158},[84,170879,52586],{"class":154},[84,170881,2297],{"class":94},[84,170883,6107],{"class":154},[84,170885,170886,170888,170890,170892,170894,170896,170898,170900,170902,170904,170906,170908,170910],{"class":86,"line":425},[84,170887,149285],{"class":154},[84,170889,63825],{"class":158},[84,170891,52586],{"class":154},[84,170893,151836],{"class":158},[84,170895,846],{"class":154},[84,170897,70270],{"class":158},[84,170899,52586],{"class":154},[84,170901,1934],{"class":94},[84,170903,846],{"class":154},[84,170905,152372],{"class":158},[84,170907,52586],{"class":154},[84,170909,2119],{"class":94},[84,170911,6107],{"class":154},[84,170913,170914],{"class":86,"line":2395},[84,170915,34398],{"class":154},[84,170917,170918],{"class":86,"line":2401},[84,170919,3578],{"emptyLinePlaceholder":1252},[84,170921,170922,170924,170926,170928,170930,170932,170934,170936,170938,170940,170942,170944,170946,170948,170950,170952,170954,170956],{"class":86,"line":2492},[84,170923,1128],{"class":129},[84,170925,1131],{"class":94},[84,170927,155],{"class":154},[84,170929,170700],{"class":158},[84,170931,846],{"class":154},[84,170933,152876],{"class":158},[84,170935,846],{"class":154},[84,170937,1146],{"class":928},[84,170939,867],{"class":129},[84,170941,1151],{"class":158},[84,170943,846],{"class":154},[84,170945,170717],{"class":928},[84,170947,867],{"class":129},[84,170949,8824],{"class":158},[84,170951,1154],{"class":154},[84,170953,1157],{"class":129},[84,170955,149053],{"class":928},[84,170957,4917],{"class":154},[84,170959,170960,170963,170965,170967,170969,170971,170973,170975,170977],{"class":86,"line":2498},[84,170961,170962],{"class":154},"    fieldnames ",[84,170964,867],{"class":129},[84,170966,53375],{"class":154},[84,170968,63825],{"class":158},[84,170970,846],{"class":154},[84,170972,70270],{"class":158},[84,170974,846],{"class":154},[84,170976,152372],{"class":158},[84,170978,34398],{"class":154},[84,170980,170981,170983,170985,170988,170990,170992,170995,170997],{"class":86,"line":2510},[84,170982,170734],{"class":154},[84,170984,867],{"class":129},[84,170986,170987],{"class":154}," csv.DictWriter(",[84,170989,46506],{"class":928},[84,170991,846],{"class":154},[84,170993,170994],{"class":928},"fieldnames",[84,170996,867],{"class":129},[84,170998,170999],{"class":154},"fieldnames)\n",[84,171001,171002],{"class":86,"line":2793},[84,171003,171004],{"class":154},"    writer.writeheader()\n",[84,171006,171007],{"class":86,"line":2798},[84,171008,170748],{"class":154},[14,171010,171012],{"id":171011},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171014,124417],{},[26,171016,171017,171020,171023],{},[29,171018,171019],{},"读取文本文件。",[29,171021,171022],{},"统计每个单词出现次数。",[29,171024,171025],{},"输出出现次数最多的前 10 个单词。",[19,171027,11207],{},[60,171029,171031],{"className":121,"code":171030,"language":91,"meta":66,"style":66},"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",[39,171032,171033,171043,171047,171060,171076,171080,171090,171099,171103,171115,171135,171144,171148,171166,171170,171200,171204,171220],{"__ignoreMap":66},[84,171034,171035,171037,171039,171041],{"class":86,"line":87},[84,171036,31891],{"class":129},[84,171038,109445],{"class":154},[84,171040,31547],{"class":129},[84,171042,109450],{"class":154},[84,171044,171045],{"class":86,"line":98},[84,171046,3578],{"emptyLinePlaceholder":1252},[84,171048,171049,171051,171053,171055,171058],{"class":86,"line":106},[84,171050,169211],{"class":154},[84,171052,867],{"class":129},[84,171054,109679],{"class":154},[84,171056,171057],{"class":158},"\"article.txt\"",[84,171059,162],{"class":154},[84,171061,171062,171064,171066,171068,171070,171072,171074],{"class":86,"line":112},[84,171063,169394],{"class":154},[84,171065,867],{"class":129},[84,171067,170271],{"class":154},[84,171069,1146],{"class":928},[84,171071,867],{"class":129},[84,171073,1151],{"class":158},[84,171075,162],{"class":154},[84,171077,171078],{"class":86,"line":425},[84,171079,3578],{"emptyLinePlaceholder":1252},[84,171081,171082,171085,171087],{"class":86,"line":2395},[84,171083,171084],{"class":154},"words ",[84,171086,867],{"class":129},[84,171088,171089],{"class":154}," content.lower().split()\n",[84,171091,171092,171095,171097],{"class":86,"line":2401},[84,171093,171094],{"class":154},"counter ",[84,171096,867],{"class":129},[84,171098,89014],{"class":154},[84,171100,171101],{"class":86,"line":2492},[84,171102,3578],{"emptyLinePlaceholder":1252},[84,171104,171105,171107,171110,171112],{"class":86,"line":2498},[84,171106,4203],{"class":129},[84,171108,171109],{"class":154}," word ",[84,171111,27206],{"class":129},[84,171113,171114],{"class":154}," words:\n",[84,171116,171117,171120,171122,171125,171128,171130,171133],{"class":86,"line":2510},[84,171118,171119],{"class":154},"    word ",[84,171121,867],{"class":129},[84,171123,171124],{"class":154}," word.strip(",[84,171126,171127],{"class":158},"\".,!?;:",[84,171129,157395],{"class":94},[84,171131,171132],{"class":158},"'()[]\"",[84,171134,162],{"class":154},[84,171136,171137,171139,171141],{"class":86,"line":2793},[84,171138,4279],{"class":129},[84,171140,40082],{"class":129},[84,171142,171143],{"class":154}," word:\n",[84,171145,171146],{"class":86,"line":2798},[84,171147,149412],{"class":129},[84,171149,171150,171153,171155,171158,171160,171162,171164],{"class":86,"line":2804},[84,171151,171152],{"class":154},"    counter[word] ",[84,171154,867],{"class":129},[84,171156,171157],{"class":154}," counter.get(word, ",[84,171159,1504],{"class":94},[84,171161,1154],{"class":154},[84,171163,1790],{"class":129},[84,171165,56846],{"class":94},[84,171167,171168],{"class":86,"line":2809},[84,171169,3578],{"emptyLinePlaceholder":1252},[84,171171,171172,171175,171177,171179,171182,171184,171186,171188,171190,171192,171194,171196,171198],{"class":86,"line":2823},[84,171173,171174],{"class":154},"items ",[84,171176,867],{"class":129},[84,171178,164504],{"class":94},[84,171180,171181],{"class":154},"(counter.items(), ",[84,171183,154846],{"class":928},[84,171185,154849],{"class":129},[84,171187,154852],{"class":154},[84,171189,1529],{"class":94},[84,171191,113336],{"class":154},[84,171193,164428],{"class":928},[84,171195,867],{"class":129},[84,171197,32629],{"class":94},[84,171199,162],{"class":154},[84,171201,171202],{"class":86,"line":2828},[84,171203,3578],{"emptyLinePlaceholder":1252},[84,171205,171206,171208,171211,171213,171216,171218],{"class":86,"line":2834},[84,171207,4203],{"class":129},[84,171209,171210],{"class":154}," word, count ",[84,171212,27206],{"class":129},[84,171214,171215],{"class":154}," items[:",[84,171217,1756],{"class":94},[84,171219,166655],{"class":154},[84,171221,171222,171224],{"class":86,"line":2855},[84,171223,32453],{"class":94},[84,171225,171226],{"class":154},"(word, count)\n",[14,171228,171230],{"id":171229},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[60,171232,171234],{"className":121,"code":171233,"language":91,"meta":66,"style":66},"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",[39,171235,171236,171242,171252,171256,171268,171272,171276,171284,171294,171300,171304,171334,171344,171348,171352,171360,171390,171414,171418,171422,171430,171459,171464],{"__ignoreMap":66},[84,171237,171238,171240],{"class":86,"line":87},[84,171239,31547],{"class":129},[84,171241,147991],{"class":154},[84,171243,171244,171246,171248,171250],{"class":86,"line":98},[84,171245,31891],{"class":129},[84,171247,109445],{"class":154},[84,171249,31547],{"class":129},[84,171251,109450],{"class":154},[84,171253,171254],{"class":86,"line":106},[84,171255,3578],{"emptyLinePlaceholder":1252},[84,171257,171258,171260,171262,171264,171266],{"class":86,"line":112},[84,171259,152724],{"class":94},[84,171261,14735],{"class":129},[84,171263,109679],{"class":154},[84,171265,152731],{"class":158},[84,171267,162],{"class":154},[84,171269,171270],{"class":86,"line":425},[84,171271,3578],{"emptyLinePlaceholder":1252},[84,171273,171274],{"class":86,"line":2395},[84,171275,3578],{"emptyLinePlaceholder":1252},[84,171277,171278,171280,171282],{"class":86,"line":2401},[84,171279,33100],{"class":129},[84,171281,152748],{"class":90},[84,171283,33106],{"class":154},[84,171285,171286,171288,171290,171292],{"class":86,"line":2492},[84,171287,4279],{"class":129},[84,171289,40082],{"class":129},[84,171291,152759],{"class":94},[84,171293,152762],{"class":154},[84,171295,171296,171298],{"class":86,"line":2498},[84,171297,15922],{"class":129},[84,171299,52987],{"class":154},[84,171301,171302],{"class":86,"line":2510},[84,171303,3578],{"emptyLinePlaceholder":1252},[84,171305,171306,171308,171310,171312,171314,171316,171318,171320,171322,171324,171326,171328,171330,171332],{"class":86,"line":2793},[84,171307,35330],{"class":129},[84,171309,1131],{"class":94},[84,171311,155],{"class":154},[84,171313,152724],{"class":94},[84,171315,846],{"class":154},[84,171317,1141],{"class":158},[84,171319,846],{"class":154},[84,171321,1146],{"class":928},[84,171323,867],{"class":129},[84,171325,1151],{"class":158},[84,171327,1154],{"class":154},[84,171329,1157],{"class":129},[84,171331,149053],{"class":928},[84,171333,4917],{"class":154},[84,171335,171336,171338,171340,171342],{"class":86,"line":2798},[84,171337,15922],{"class":129},[84,171339,149064],{"class":154},[84,171341,46506],{"class":928},[84,171343,162],{"class":154},[84,171345,171346],{"class":86,"line":2804},[84,171347,3578],{"emptyLinePlaceholder":1252},[84,171349,171350],{"class":86,"line":2809},[84,171351,3578],{"emptyLinePlaceholder":1252},[84,171353,171354,171356,171358],{"class":86,"line":2823},[84,171355,33100],{"class":129},[84,171357,152858],{"class":90},[84,171359,152861],{"class":154},[84,171361,171362,171364,171366,171368,171370,171372,171374,171376,171378,171380,171382,171384,171386,171388],{"class":86,"line":2828},[84,171363,35330],{"class":129},[84,171365,1131],{"class":94},[84,171367,155],{"class":154},[84,171369,152724],{"class":94},[84,171371,846],{"class":154},[84,171373,152876],{"class":158},[84,171375,846],{"class":154},[84,171377,1146],{"class":928},[84,171379,867],{"class":129},[84,171381,1151],{"class":158},[84,171383,1154],{"class":154},[84,171385,1157],{"class":129},[84,171387,149053],{"class":928},[84,171389,4917],{"class":154},[84,171391,171392,171394,171396,171398,171400,171402,171404,171406,171408,171410,171412],{"class":86,"line":2834},[84,171393,152897],{"class":154},[84,171395,46506],{"class":928},[84,171397,846],{"class":154},[84,171399,148037],{"class":928},[84,171401,867],{"class":129},[84,171403,35139],{"class":94},[84,171405,846],{"class":154},[84,171407,152912],{"class":928},[84,171409,867],{"class":129},[84,171411,1397],{"class":94},[84,171413,162],{"class":154},[84,171415,171416],{"class":86,"line":2855},[84,171417,3578],{"emptyLinePlaceholder":1252},[84,171419,171420],{"class":86,"line":2860},[84,171421,3578],{"emptyLinePlaceholder":1252},[84,171423,171424,171426,171428],{"class":86,"line":2874},[84,171425,160616],{"class":154},[84,171427,867],{"class":129},[84,171429,153942],{"class":154},[84,171431,171432,171435,171437,171439,171441,171443,171445,171447,171449,171451,171453,171455,171457],{"class":86,"line":2879},[84,171433,171434],{"class":154},"students.append({",[84,171436,63825],{"class":158},[84,171438,52586],{"class":154},[84,171440,150788],{"class":158},[84,171442,846],{"class":154},[84,171444,70270],{"class":158},[84,171446,52586],{"class":154},[84,171448,849],{"class":94},[84,171450,846],{"class":154},[84,171452,152372],{"class":158},[84,171454,52586],{"class":154},[84,171456,2297],{"class":94},[84,171458,166052],{"class":154},[84,171460,171461],{"class":86,"line":2908},[84,171462,171463],{"class":154},"save_students(students)\n",[84,171465,171466,171468,171470,171473],{"class":86,"line":2913},[84,171467,730],{"class":94},[84,171469,155],{"class":154},[84,171471,171472],{"class":158},"\"保存成功\"",[84,171474,162],{"class":154},[14,171476,171478],{"id":171477},"_814-易错点","8.14 易错点",[26,171480,171481,171485,171491,171496,171503,171510],{},[29,171482,171483,169744],{},[39,171484,2103],{},[29,171486,171487,171488,55],{},"读写中文要指定 ",[39,171489,171490],{},"encoding=\"utf-8\"",[29,171492,171493,171494,55],{},"打开文件后要关闭，推荐使用 ",[39,171495,1128],{},[29,171497,171498,171499,171502],{},"读取大文件不要直接 ",[39,171500,171501],{},"read()"," 全部内容。",[29,171504,171505,171506,171509],{},"Windows 写 CSV 时建议加 ",[39,171507,171508],{},"newline=\"\"","，避免空行。",[29,171511,171512],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171514,171516],{"id":171515},"_815-本章练习","8.15 本章练习",[26,171518,171519,171526,171531,171534,171537],{},[29,171520,171521,171522,171525],{},"写入一个 ",[39,171523,171524],{},"students.txt","，每行保存一个学生姓名。",[29,171527,105492,171528,171530],{},[39,171529,171524],{}," 并输出所有学生。",[29,171532,171533],{},"把学生列表保存为 JSON 文件。",[29,171535,171536],{},"从 JSON 文件读取学生数据，计算平均分。",[29,171538,171539,171540,171543,171544,171547],{},"写一个日志函数 ",[39,171541,171542],{},"write_log(message)","，每次调用向 ",[39,171545,171546],{},"app.log"," 追加一行。",[1222,171549,171550],{},"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":66,"searchDepth":98,"depth":98,"links":171552},[171553,171554,171558,171559,171565,171566,171567,171568,171569,171570,171571,171572,171573,171574,171575],{"id":169064,"depth":98,"text":169065},{"id":169105,"depth":98,"text":169106,"children":171555},[171556,171557],{"id":169109,"depth":106,"text":169110},{"id":169143,"depth":106,"text":169144},{"id":169257,"depth":98,"text":169258},{"id":169350,"depth":98,"text":169351,"children":171560},[171561,171562,171563,171564],{"id":169354,"depth":106,"text":169355},{"id":169441,"depth":106,"text":169442},{"id":169511,"depth":106,"text":169512},{"id":169605,"depth":106,"text":169606},{"id":169675,"depth":98,"text":169676},{"id":169738,"depth":98,"text":169739},{"id":169899,"depth":98,"text":169900},{"id":169962,"depth":98,"text":169963},{"id":170078,"depth":98,"text":170079},{"id":170288,"depth":98,"text":170289},{"id":170600,"depth":98,"text":170601},{"id":171011,"depth":98,"text":171012},{"id":171229,"depth":98,"text":171230},{"id":171477,"depth":98,"text":171478},{"id":171515,"depth":98,"text":171516},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169056,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171582,"title":171583,"body":171584,"description":1249,"extension":1250,"meta":173770,"navigation":1252,"path":173771,"seo":173772,"stem":173773,"__hash__":173774},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171585,"toc":173737},[171586,171589,171593,171596,171599,171691,171693,171712,171717,171721,171724,171727,171756,171763,171766,171770,171773,171802,171804,171856,171862,171915,171919,172017,172020,172087,172091,172148,172150,172156,172160,172165,172171,172262,172267,172271,172274,172352,172355,172393,172397,172515,172518,172522,172525,172570,172573,172577,172582,172588,172638,172641,172672,172676,172680,172710,172714,172749,172753,172788,172828,172832,172848,172851,172855,172859,172938,172942,172983,172987,173042,173046,173080,173084,173114,173123,173130,173136,173193,173196,173204,173207,173211,173218,173221,173227,173230,173247,173252,173256,173262,173275,173278,173315,173318,173329,173332,173346,173349,173363,173367,173374,173407,173410,173412,173418,173421,173425,173427,173433,173438,173611,173615,173678,173682,173706,173710,173734],[10,171587,171583],{"id":171588},"_9-异常模块与包",[14,171590,171592],{"id":171591},"_91-什么是异常","9.1 什么是异常",[19,171594,171595],{},"异常是程序运行过程中出现的错误。",[19,171597,171598],{},"常见异常：",[458,171600,171601,171610],{},[461,171602,171603],{},[464,171604,171605,171608],{},[467,171606,171607],{},"异常",[467,171609,27032],{},[474,171611,171612,171622,171632,171641,171651,171661,171671,171681],{},[464,171613,171614,171619],{},[479,171615,171616],{},[39,171617,171618],{},"NameError",[479,171620,171621],{},"使用了未定义变量",[464,171623,171624,171629],{},[479,171625,171626],{},[39,171627,171628],{},"TypeError",[479,171630,171631],{},"类型不匹配",[464,171633,171634,171638],{},[479,171635,171636],{},[39,171637,155734],{},[479,171639,171640],{},"值不合法",[464,171642,171643,171648],{},[479,171644,171645],{},[39,171646,171647],{},"IndexError",[479,171649,171650],{},"列表索引越界",[464,171652,171653,171658],{},[479,171654,171655],{},[39,171656,171657],{},"KeyError",[479,171659,171660],{},"字典 key 不存在",[464,171662,171663,171668],{},[479,171664,171665],{},[39,171666,171667],{},"FileNotFoundError",[479,171669,171670],{},"文件不存在",[464,171672,171673,171678],{},[479,171674,171675],{},[39,171676,171677],{},"ZeroDivisionError",[479,171679,171680],{},"除数为 0",[464,171682,171683,171688],{},[479,171684,171685],{},[39,171686,171687],{},"ImportError",[479,171689,171690],{},"导入失败",[19,171692,16305],{},[60,171694,171696],{"className":121,"code":171695,"language":91,"meta":66,"style":66},"num = int(\"abc\")\n",[39,171697,171698],{"__ignoreMap":66},[84,171699,171700,171702,171704,171706,171708,171710],{"class":86,"line":87},[84,171701,156687],{"class":154},[84,171703,867],{"class":129},[84,171705,3560],{"class":94},[84,171707,155],{"class":154},[84,171709,156780],{"class":158},[84,171711,162],{"class":154},[19,171713,171714,171715,55],{},"会触发 ",[39,171716,155734],{},[14,171718,171720],{"id":171719},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171722,171723],{},"如果不处理异常，程序会直接终止。",[19,171725,171726],{},"例如用户输入年龄：",[60,171728,171730],{"className":121,"code":171729,"language":91,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[39,171731,171732,171750],{"__ignoreMap":66},[84,171733,171734,171736,171738,171740,171742,171744,171746,171748],{"class":86,"line":87},[84,171735,875],{"class":154},[84,171737,867],{"class":129},[84,171739,3560],{"class":94},[84,171741,155],{"class":154},[84,171743,54970],{"class":94},[84,171745,155],{"class":154},[84,171747,153294],{"class":158},[84,171749,31651],{"class":154},[84,171751,171752,171754],{"class":86,"line":98},[84,171753,730],{"class":94},[84,171755,156661],{"class":154},[19,171757,171758,171759,171762],{},"用户输入 ",[39,171760,171761],{},"abc","，程序就会报错退出。",[19,171764,171765],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171767,171769],{"id":171768},"_93-try-except","9.3 try except",[19,171771,171772],{},"基础语法：",[60,171774,171776],{"className":121,"code":171775,"language":91,"meta":66,"style":66},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[39,171777,171778,171785,171790,171797],{"__ignoreMap":66},[84,171779,171780,171783],{"class":86,"line":87},[84,171781,171782],{"class":129},"try",[84,171784,4917],{"class":154},[84,171786,171787],{"class":86,"line":98},[84,171788,171789],{"class":154},"    可能出错的代码\n",[84,171791,171792,171795],{"class":86,"line":106},[84,171793,171794],{"class":129},"except",[84,171796,4917],{"class":154},[84,171798,171799],{"class":86,"line":112},[84,171800,171801],{"class":154},"    出错后的处理代码\n",[19,171803,16305],{},[60,171805,171807],{"className":121,"code":171806,"language":91,"meta":66,"style":66},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[39,171808,171809,171815,171833,171839,171845],{"__ignoreMap":66},[84,171810,171811,171813],{"class":86,"line":87},[84,171812,171782],{"class":129},[84,171814,4917],{"class":154},[84,171816,171817,171819,171821,171823,171825,171827,171829,171831],{"class":86,"line":98},[84,171818,153286],{"class":154},[84,171820,867],{"class":129},[84,171822,3560],{"class":94},[84,171824,155],{"class":154},[84,171826,54970],{"class":94},[84,171828,155],{"class":154},[84,171830,153294],{"class":158},[84,171832,31651],{"class":154},[84,171834,171835,171837],{"class":86,"line":106},[84,171836,32453],{"class":94},[84,171838,156661],{"class":154},[84,171840,171841,171843],{"class":86,"line":112},[84,171842,171794],{"class":129},[84,171844,4917],{"class":154},[84,171846,171847,171849,171851,171854],{"class":86,"line":425},[84,171848,32453],{"class":94},[84,171850,155],{"class":154},[84,171852,171853],{"class":158},"\"年龄必须是数字\"",[84,171855,162],{"class":154},[19,171857,171858,171859,171861],{},"不建议裸写 ",[39,171860,171794],{},"，最好指定异常类型。",[60,171863,171865],{"className":121,"code":171864,"language":91,"meta":66,"style":66},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[39,171866,171867,171873,171891,171897,171905],{"__ignoreMap":66},[84,171868,171869,171871],{"class":86,"line":87},[84,171870,171782],{"class":129},[84,171872,4917],{"class":154},[84,171874,171875,171877,171879,171881,171883,171885,171887,171889],{"class":86,"line":98},[84,171876,153286],{"class":154},[84,171878,867],{"class":129},[84,171880,3560],{"class":94},[84,171882,155],{"class":154},[84,171884,54970],{"class":94},[84,171886,155],{"class":154},[84,171888,153294],{"class":158},[84,171890,31651],{"class":154},[84,171892,171893,171895],{"class":86,"line":106},[84,171894,32453],{"class":94},[84,171896,156661],{"class":154},[84,171898,171899,171901,171903],{"class":86,"line":112},[84,171900,171794],{"class":129},[84,171902,153126],{"class":94},[84,171904,4917],{"class":154},[84,171906,171907,171909,171911,171913],{"class":86,"line":425},[84,171908,32453],{"class":94},[84,171910,155],{"class":154},[84,171912,171853],{"class":158},[84,171914,162],{"class":154},[14,171916,171918],{"id":171917},"_94-捕获多个异常","9.4 捕获多个异常",[60,171920,171922],{"className":121,"code":171921,"language":91,"meta":66,"style":66},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[39,171923,171924,171930,171951,171971,171978,171986,171997,172006],{"__ignoreMap":66},[84,171925,171926,171928],{"class":86,"line":87},[84,171927,171782],{"class":129},[84,171929,4917],{"class":154},[84,171931,171932,171935,171937,171939,171941,171943,171945,171947,171949],{"class":86,"line":98},[84,171933,171934],{"class":154},"    nums ",[84,171936,867],{"class":129},[84,171938,53375],{"class":154},[84,171940,1529],{"class":94},[84,171942,846],{"class":154},[84,171944,1397],{"class":94},[84,171946,846],{"class":154},[84,171948,1391],{"class":94},[84,171950,34398],{"class":154},[84,171952,171953,171956,171958,171960,171962,171964,171966,171969],{"class":86,"line":106},[84,171954,171955],{"class":154},"    index ",[84,171957,867],{"class":129},[84,171959,3560],{"class":94},[84,171961,155],{"class":154},[84,171963,54970],{"class":94},[84,171965,155],{"class":154},[84,171967,171968],{"class":158},"\"请输入索引:\"",[84,171970,31651],{"class":154},[84,171972,171973,171975],{"class":86,"line":112},[84,171974,32453],{"class":94},[84,171976,171977],{"class":154},"(nums[index])\n",[84,171979,171980,171982,171984],{"class":86,"line":425},[84,171981,171794],{"class":129},[84,171983,153126],{"class":94},[84,171985,4917],{"class":154},[84,171987,171988,171990,171992,171995],{"class":86,"line":2395},[84,171989,32453],{"class":94},[84,171991,155],{"class":154},[84,171993,171994],{"class":158},"\"索引必须是整数\"",[84,171996,162],{"class":154},[84,171998,171999,172001,172004],{"class":86,"line":2401},[84,172000,171794],{"class":129},[84,172002,172003],{"class":94}," IndexError",[84,172005,4917],{"class":154},[84,172007,172008,172010,172012,172015],{"class":86,"line":2492},[84,172009,32453],{"class":94},[84,172011,155],{"class":154},[84,172013,172014],{"class":158},"\"索引越界\"",[84,172016,162],{"class":154},[19,172018,172019],{},"多个异常使用相同处理逻辑：",[60,172021,172023],{"className":121,"code":172022,"language":91,"meta":66,"style":66},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[39,172024,172025,172031,172049,172062,172076],{"__ignoreMap":66},[84,172026,172027,172029],{"class":86,"line":87},[84,172028,171782],{"class":129},[84,172030,4917],{"class":154},[84,172032,172033,172035,172037,172039,172041,172043,172045,172047],{"class":86,"line":98},[84,172034,46744],{"class":154},[84,172036,867],{"class":129},[84,172038,3560],{"class":94},[84,172040,155],{"class":154},[84,172042,54970],{"class":94},[84,172044,155],{"class":154},[84,172046,156696],{"class":158},[84,172048,31651],{"class":154},[84,172050,172051,172053,172055,172057,172059],{"class":86,"line":106},[84,172052,32453],{"class":94},[84,172054,155],{"class":154},[84,172056,1756],{"class":94},[84,172058,156946],{"class":129},[84,172060,172061],{"class":154}," num)\n",[84,172063,172064,172066,172068,172070,172072,172074],{"class":86,"line":112},[84,172065,171794],{"class":129},[84,172067,2839],{"class":154},[84,172069,155734],{"class":94},[84,172071,846],{"class":154},[84,172073,171677],{"class":94},[84,172075,31940],{"class":154},[84,172077,172078,172080,172082,172085],{"class":86,"line":425},[84,172079,32453],{"class":94},[84,172081,155],{"class":154},[84,172083,172084],{"class":158},"\"输入不合法\"",[84,172086,162],{"class":154},[14,172088,172090],{"id":172089},"_95-获取异常信息","9.5 获取异常信息",[60,172092,172094],{"className":121,"code":172093,"language":91,"meta":66,"style":66},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[39,172095,172096,172102,172116,172127],{"__ignoreMap":66},[84,172097,172098,172100],{"class":86,"line":87},[84,172099,171782],{"class":129},[84,172101,4917],{"class":154},[84,172103,172104,172106,172108,172110,172112,172114],{"class":86,"line":98},[84,172105,46744],{"class":154},[84,172107,867],{"class":129},[84,172109,3560],{"class":94},[84,172111,155],{"class":154},[84,172113,156780],{"class":158},[84,172115,162],{"class":154},[84,172117,172118,172120,172122,172124],{"class":86,"line":106},[84,172119,171794],{"class":129},[84,172121,153126],{"class":94},[84,172123,65750],{"class":129},[84,172125,172126],{"class":154}," e:\n",[84,172128,172129,172131,172133,172135,172138,172140,172142,172144,172146],{"class":86,"line":112},[84,172130,32453],{"class":94},[84,172132,155],{"class":154},[84,172134,1372],{"class":129},[84,172136,172137],{"class":158},"\"出错了:",[84,172139,2204],{"class":94},[84,172141,1394],{"class":154},[84,172143,2254],{"class":94},[84,172145,1562],{"class":158},[84,172147,162],{"class":154},[19,172149,780],{},[60,172151,172154],{"className":172152,"code":172153,"language":65,"meta":66},[63],"出错了:invalid literal for int() with base 10: 'abc'\n",[39,172155,172153],{"__ignoreMap":66},[14,172157,172159],{"id":172158},"_96-else和finally","9.6 else和finally",[19,172161,172162,172164],{},[39,172163,2882],{},"：没有异常时执行。",[19,172166,172167,172170],{},[39,172168,172169],{},"finally","：无论是否异常都会执行。",[60,172172,172174],{"className":121,"code":172173,"language":91,"meta":66,"style":66},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[39,172175,172176,172182,172200,172208,172218,172224,172245,172251],{"__ignoreMap":66},[84,172177,172178,172180],{"class":86,"line":87},[84,172179,171782],{"class":129},[84,172181,4917],{"class":154},[84,172183,172184,172186,172188,172190,172192,172194,172196,172198],{"class":86,"line":98},[84,172185,46744],{"class":154},[84,172187,867],{"class":129},[84,172189,3560],{"class":94},[84,172191,155],{"class":154},[84,172193,54970],{"class":94},[84,172195,155],{"class":154},[84,172197,156696],{"class":158},[84,172199,31651],{"class":154},[84,172201,172202,172204,172206],{"class":86,"line":106},[84,172203,171794],{"class":129},[84,172205,153126],{"class":94},[84,172207,4917],{"class":154},[84,172209,172210,172212,172214,172216],{"class":86,"line":112},[84,172211,32453],{"class":94},[84,172213,155],{"class":154},[84,172215,154114],{"class":158},[84,172217,162],{"class":154},[84,172219,172220,172222],{"class":86,"line":425},[84,172221,2882],{"class":129},[84,172223,4917],{"class":154},[84,172225,172226,172228,172230,172232,172235,172237,172239,172241,172243],{"class":86,"line":2395},[84,172227,32453],{"class":94},[84,172229,155],{"class":154},[84,172231,1372],{"class":129},[84,172233,172234],{"class":158},"\"输入正确:",[84,172236,2204],{"class":94},[84,172238,2846],{"class":154},[84,172240,2254],{"class":94},[84,172242,1562],{"class":158},[84,172244,162],{"class":154},[84,172246,172247,172249],{"class":86,"line":2401},[84,172248,172169],{"class":129},[84,172250,4917],{"class":154},[84,172252,172253,172255,172257,172260],{"class":86,"line":2492},[84,172254,32453],{"class":94},[84,172256,155],{"class":154},[84,172258,172259],{"class":158},"\"程序结束\"",[84,172261,162],{"class":154},[19,172263,172264,172266],{},[39,172265,172169],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172268,172270],{"id":172269},"_97-抛出异常","9.7 抛出异常",[19,172272,172273],{},"程序可以主动抛出异常。",[60,172275,172277],{"className":121,"code":172276,"language":91,"meta":66,"style":66},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[39,172278,172279,172288,172300,172313,172333,172337,172341],{"__ignoreMap":66},[84,172280,172281,172283,172286],{"class":86,"line":87},[84,172282,33100],{"class":129},[84,172284,172285],{"class":90}," set_age",[84,172287,162315],{"class":154},[84,172289,172290,172292,172294,172296,172298],{"class":86,"line":98},[84,172291,4279],{"class":129},[84,172293,16877],{"class":154},[84,172295,2218],{"class":129},[84,172297,5271],{"class":94},[84,172299,4917],{"class":154},[84,172301,172302,172304,172306,172308,172311],{"class":86,"line":106},[84,172303,104569],{"class":129},[84,172305,153126],{"class":94},[84,172307,155],{"class":154},[84,172309,172310],{"class":158},"\"年龄不能为负数\"",[84,172312,162],{"class":154},[84,172314,172315,172317,172319,172321,172323,172325,172327,172329,172331],{"class":86,"line":112},[84,172316,32453],{"class":94},[84,172318,155],{"class":154},[84,172320,1372],{"class":129},[84,172322,162883],{"class":158},[84,172324,2204],{"class":94},[84,172326,71367],{"class":154},[84,172328,2254],{"class":94},[84,172330,1562],{"class":158},[84,172332,162],{"class":154},[84,172334,172335],{"class":86,"line":425},[84,172336,3578],{"emptyLinePlaceholder":1252},[84,172338,172339],{"class":86,"line":2395},[84,172340,3578],{"emptyLinePlaceholder":1252},[84,172342,172343,172346,172348,172350],{"class":86,"line":2401},[84,172344,172345],{"class":154},"set_age(",[84,172347,1841],{"class":129},[84,172349,1529],{"class":94},[84,172351,162],{"class":154},[19,172353,172354],{},"调用者可以捕获：",[60,172356,172358],{"className":121,"code":172357,"language":91,"meta":66,"style":66},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[39,172359,172360,172366,172377,172387],{"__ignoreMap":66},[84,172361,172362,172364],{"class":86,"line":87},[84,172363,171782],{"class":129},[84,172365,4917],{"class":154},[84,172367,172368,172371,172373,172375],{"class":86,"line":98},[84,172369,172370],{"class":154},"    set_age(",[84,172372,1841],{"class":129},[84,172374,1529],{"class":94},[84,172376,162],{"class":154},[84,172378,172379,172381,172383,172385],{"class":86,"line":106},[84,172380,171794],{"class":129},[84,172382,153126],{"class":94},[84,172384,65750],{"class":129},[84,172386,172126],{"class":154},[84,172388,172389,172391],{"class":86,"line":112},[84,172390,32453],{"class":94},[84,172392,68145],{"class":154},[14,172394,172396],{"id":172395},"_98-自定义异常","9.8 自定义异常",[60,172398,172400],{"className":121,"code":172399,"language":91,"meta":66,"style":66},"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",[39,172401,172402,172416,172420,172424,172428,172436,172446,172457,172467,172471,172475,172481,172498,172509],{"__ignoreMap":66},[84,172403,172404,172406,172409,172411,172414],{"class":86,"line":87},[84,172405,15864],{"class":129},[84,172407,172408],{"class":90}," BalanceNotEnoughError",[84,172410,155],{"class":154},[84,172412,172413],{"class":94},"Exception",[84,172415,31940],{"class":154},[84,172417,172418],{"class":86,"line":98},[84,172419,150437],{"class":129},[84,172421,172422],{"class":86,"line":106},[84,172423,3578],{"emptyLinePlaceholder":1252},[84,172425,172426],{"class":86,"line":112},[84,172427,3578],{"emptyLinePlaceholder":1252},[84,172429,172430,172432,172434],{"class":86,"line":425},[84,172431,33100],{"class":129},[84,172433,151086],{"class":90},[84,172435,163712],{"class":154},[84,172437,172438,172440,172442,172444],{"class":86,"line":2395},[84,172439,4279],{"class":129},[84,172441,151042],{"class":154},[84,172443,2268],{"class":129},[84,172445,163489],{"class":154},[84,172447,172448,172450,172453,172455],{"class":86,"line":2401},[84,172449,104569],{"class":129},[84,172451,172452],{"class":154}," BalanceNotEnoughError(",[84,172454,151137],{"class":158},[84,172456,162],{"class":154},[84,172458,172459,172461,172463,172465],{"class":86,"line":2492},[84,172460,5268],{"class":129},[84,172462,163719],{"class":154},[84,172464,1841],{"class":129},[84,172466,151075],{"class":154},[84,172468,172469],{"class":86,"line":2498},[84,172470,3578],{"emptyLinePlaceholder":1252},[84,172472,172473],{"class":86,"line":2510},[84,172474,3578],{"emptyLinePlaceholder":1252},[84,172476,172477,172479],{"class":86,"line":2793},[84,172478,171782],{"class":129},[84,172480,4917],{"class":154},[84,172482,172483,172485,172487,172490,172492,172494,172496],{"class":86,"line":2798},[84,172484,163390],{"class":154},[84,172486,867],{"class":129},[84,172488,172489],{"class":154}," withdraw(",[84,172491,821],{"class":94},[84,172493,846],{"class":154},[84,172495,2903],{"class":94},[84,172497,162],{"class":154},[84,172499,172500,172502,172505,172507],{"class":86,"line":2804},[84,172501,171794],{"class":129},[84,172503,172504],{"class":154}," BalanceNotEnoughError ",[84,172506,1157],{"class":129},[84,172508,172126],{"class":154},[84,172510,172511,172513],{"class":86,"line":2809},[84,172512,32453],{"class":94},[84,172514,68145],{"class":154},[19,172516,172517],{},"入门阶段大多数情况使用内置异常即可。",[14,172519,172521],{"id":172520},"_99-traceback","9.9 traceback",[19,172523,172524],{},"调试时可以输出完整异常堆栈。",[60,172526,172528],{"className":121,"code":172527,"language":91,"meta":66,"style":66},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[39,172529,172530,172537,172541,172547,172557,172565],{"__ignoreMap":66},[84,172531,172532,172534],{"class":86,"line":87},[84,172533,31547],{"class":129},[84,172535,172536],{"class":154}," traceback\n",[84,172538,172539],{"class":86,"line":98},[84,172540,3578],{"emptyLinePlaceholder":1252},[84,172542,172543,172545],{"class":86,"line":106},[84,172544,171782],{"class":129},[84,172546,4917],{"class":154},[84,172548,172549,172551,172553,172555],{"class":86,"line":112},[84,172550,3164],{"class":94},[84,172552,155],{"class":154},[84,172554,156780],{"class":158},[84,172556,162],{"class":154},[84,172558,172559,172561,172563],{"class":86,"line":425},[84,172560,171794],{"class":129},[84,172562,153126],{"class":94},[84,172564,4917],{"class":154},[84,172566,172567],{"class":86,"line":2395},[84,172568,172569],{"class":154},"    traceback.print_exc()\n",[19,172571,172572],{},"日志系统中常把异常堆栈记录到文件。",[14,172574,172576],{"id":172575},"_910-什么是模块","9.10 什么是模块",[19,172578,172579,172580,673],{},"模块就是一个 ",[39,172581,672],{},[19,172583,172584,172585,720],{},"例如创建 ",[39,172586,172587],{},"my_math.py",[60,172589,172591],{"className":121,"code":172590,"language":91,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[39,172592,172593,172601,172611,172615,172619,172628],{"__ignoreMap":66},[84,172594,172595,172597,172599],{"class":86,"line":87},[84,172596,33100],{"class":129},[84,172598,6384],{"class":90},[84,172600,151993],{"class":154},[84,172602,172603,172605,172607,172609],{"class":86,"line":98},[84,172604,5268],{"class":129},[84,172606,12041],{"class":154},[84,172608,1790],{"class":129},[84,172610,152004],{"class":154},[84,172612,172613],{"class":86,"line":106},[84,172614,3578],{"emptyLinePlaceholder":1252},[84,172616,172617],{"class":86,"line":112},[84,172618,3578],{"emptyLinePlaceholder":1252},[84,172620,172621,172623,172626],{"class":86,"line":425},[84,172622,33100],{"class":129},[84,172624,172625],{"class":90}," sub",[84,172627,151993],{"class":154},[84,172629,172630,172632,172634,172636],{"class":86,"line":2395},[84,172631,5268],{"class":129},[84,172633,12041],{"class":154},[84,172635,1841],{"class":129},[84,172637,152004],{"class":154},[19,172639,172640],{},"在另一个文件中导入：",[60,172642,172644],{"className":121,"code":172643,"language":91,"meta":66,"style":66},"import my_math\n\nprint(my_math.add(1, 2))\n",[39,172645,172646,172653,172657],{"__ignoreMap":66},[84,172647,172648,172650],{"class":86,"line":87},[84,172649,31547],{"class":129},[84,172651,172652],{"class":154}," my_math\n",[84,172654,172655],{"class":86,"line":98},[84,172656,3578],{"emptyLinePlaceholder":1252},[84,172658,172659,172661,172664,172666,172668,172670],{"class":86,"line":106},[84,172660,730],{"class":94},[84,172662,172663],{"class":154},"(my_math.add(",[84,172665,1529],{"class":94},[84,172667,846],{"class":154},[84,172669,1397],{"class":94},[84,172671,31651],{"class":154},[14,172673,172675],{"id":172674},"_911-import导入","9.11 import导入",[198,172677,172679],{"id":172678},"_9111-导入模块","9.11.1 导入模块",[60,172681,172683],{"className":121,"code":172682,"language":91,"meta":66,"style":66},"import random\n\nprint(random.randint(1, 10))\n",[39,172684,172685,172691,172695],{"__ignoreMap":66},[84,172686,172687,172689],{"class":86,"line":87},[84,172688,31547],{"class":129},[84,172690,46480],{"class":154},[84,172692,172693],{"class":86,"line":98},[84,172694,3578],{"emptyLinePlaceholder":1252},[84,172696,172697,172699,172702,172704,172706,172708],{"class":86,"line":106},[84,172698,730],{"class":94},[84,172700,172701],{"class":154},"(random.randint(",[84,172703,1529],{"class":94},[84,172705,846],{"class":154},[84,172707,1756],{"class":94},[84,172709,31651],{"class":154},[198,172711,172713],{"id":172712},"_9112-导入指定内容","9.11.2 导入指定内容",[60,172715,172717],{"className":121,"code":172716,"language":91,"meta":66,"style":66},"from random import randint\n\nprint(randint(1, 10))\n",[39,172718,172719,172730,172734],{"__ignoreMap":66},[84,172720,172721,172723,172725,172727],{"class":86,"line":87},[84,172722,31891],{"class":129},[84,172724,58943],{"class":154},[84,172726,31547],{"class":129},[84,172728,172729],{"class":154}," randint\n",[84,172731,172732],{"class":86,"line":98},[84,172733,3578],{"emptyLinePlaceholder":1252},[84,172735,172736,172738,172741,172743,172745,172747],{"class":86,"line":106},[84,172737,730],{"class":94},[84,172739,172740],{"class":154},"(randint(",[84,172742,1529],{"class":94},[84,172744,846],{"class":154},[84,172746,1756],{"class":94},[84,172748,31651],{"class":154},[198,172750,172752],{"id":172751},"_9113-起别名","9.11.3 起别名",[60,172754,172756],{"className":121,"code":172755,"language":91,"meta":66,"style":66},"import random as rd\n\nprint(rd.randint(1, 10))\n",[39,172757,172758,172769,172773],{"__ignoreMap":66},[84,172759,172760,172762,172764,172766],{"class":86,"line":87},[84,172761,31547],{"class":129},[84,172763,58943],{"class":154},[84,172765,1157],{"class":129},[84,172767,172768],{"class":154}," rd\n",[84,172770,172771],{"class":86,"line":98},[84,172772,3578],{"emptyLinePlaceholder":1252},[84,172774,172775,172777,172780,172782,172784,172786],{"class":86,"line":106},[84,172776,730],{"class":94},[84,172778,172779],{"class":154},"(rd.randint(",[84,172781,1529],{"class":94},[84,172783,846],{"class":154},[84,172785,1756],{"class":94},[84,172787,31651],{"class":154},[60,172789,172791],{"className":121,"code":172790,"language":91,"meta":66,"style":66},"from random import randint as rint\n\nprint(rint(1, 10))\n",[39,172792,172793,172809,172813],{"__ignoreMap":66},[84,172794,172795,172797,172799,172801,172804,172806],{"class":86,"line":87},[84,172796,31891],{"class":129},[84,172798,58943],{"class":154},[84,172800,31547],{"class":129},[84,172802,172803],{"class":154}," randint ",[84,172805,1157],{"class":129},[84,172807,172808],{"class":154}," rint\n",[84,172810,172811],{"class":86,"line":98},[84,172812,3578],{"emptyLinePlaceholder":1252},[84,172814,172815,172817,172820,172822,172824,172826],{"class":86,"line":106},[84,172816,730],{"class":94},[84,172818,172819],{"class":154},"(rint(",[84,172821,1529],{"class":94},[84,172823,846],{"class":154},[84,172825,1756],{"class":94},[84,172827,31651],{"class":154},[198,172829,172831],{"id":172830},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[60,172833,172835],{"className":121,"code":172834,"language":91,"meta":66,"style":66},"from random import *\n",[39,172836,172837],{"__ignoreMap":66},[84,172838,172839,172841,172843,172845],{"class":86,"line":87},[84,172840,31891],{"class":129},[84,172842,58943],{"class":154},[84,172844,31547],{"class":129},[84,172846,172847],{"class":129}," *\n",[19,172849,172850],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172852,172854],{"id":172853},"_912-常用内置模块","9.12 常用内置模块",[198,172856,172858],{"id":172857},"_9121-random","9.12.1 random",[60,172860,172862],{"className":121,"code":172861,"language":91,"meta":66,"style":66},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[39,172863,172864,172870,172874,172888,172907],{"__ignoreMap":66},[84,172865,172866,172868],{"class":86,"line":87},[84,172867,31547],{"class":129},[84,172869,46480],{"class":154},[84,172871,172872],{"class":86,"line":98},[84,172873,3578],{"emptyLinePlaceholder":1252},[84,172875,172876,172878,172880,172882,172884,172886],{"class":86,"line":106},[84,172877,730],{"class":94},[84,172879,172701],{"class":154},[84,172881,1529],{"class":94},[84,172883,846],{"class":154},[84,172885,1756],{"class":94},[84,172887,31651],{"class":154},[84,172889,172890,172892,172895,172897,172899,172901,172903,172905],{"class":86,"line":112},[84,172891,730],{"class":94},[84,172893,172894],{"class":154},"(random.choice([",[84,172896,150788],{"class":158},[84,172898,846],{"class":154},[84,172900,151836],{"class":158},[84,172902,846],{"class":154},[84,172904,160631],{"class":158},[84,172906,34295],{"class":154},[84,172908,172909,172911,172914,172916,172918,172920,172922,172924,172926,172928,172930,172932,172934,172936],{"class":86,"line":425},[84,172910,730],{"class":94},[84,172912,172913],{"class":154},"(random.sample([",[84,172915,1529],{"class":94},[84,172917,846],{"class":154},[84,172919,1397],{"class":94},[84,172921,846],{"class":154},[84,172923,1391],{"class":94},[84,172925,846],{"class":154},[84,172927,1604],{"class":94},[84,172929,846],{"class":154},[84,172931,1629],{"class":94},[84,172933,113336],{"class":154},[84,172935,1397],{"class":94},[84,172937,31651],{"class":154},[198,172939,172941],{"id":172940},"_9122-time","9.12.2 time",[60,172943,172945],{"className":121,"code":172944,"language":91,"meta":66,"style":66},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[39,172946,172947,172953,172957,172964,172972],{"__ignoreMap":66},[84,172948,172949,172951],{"class":86,"line":87},[84,172950,31547],{"class":129},[84,172952,32982],{"class":154},[84,172954,172955],{"class":86,"line":98},[84,172956,3578],{"emptyLinePlaceholder":1252},[84,172958,172959,172961],{"class":86,"line":106},[84,172960,730],{"class":94},[84,172962,172963],{"class":154},"(time.time())\n",[84,172965,172966,172968,172970],{"class":86,"line":112},[84,172967,96217],{"class":154},[84,172969,1529],{"class":94},[84,172971,162],{"class":154},[84,172973,172974,172976,172978,172981],{"class":86,"line":425},[84,172975,730],{"class":94},[84,172977,155],{"class":154},[84,172979,172980],{"class":158},"\"1秒后执行\"",[84,172982,162],{"class":154},[198,172984,172986],{"id":172985},"_9123-datetime","9.12.3 datetime",[60,172988,172990],{"className":121,"code":172989,"language":91,"meta":66,"style":66},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[39,172991,172992,173004,173008,173018,173025],{"__ignoreMap":66},[84,172993,172994,172996,172999,173001],{"class":86,"line":87},[84,172995,31891],{"class":129},[84,172997,172998],{"class":154}," datetime ",[84,173000,31547],{"class":129},[84,173002,173003],{"class":154}," datetime\n",[84,173005,173006],{"class":86,"line":98},[84,173007,3578],{"emptyLinePlaceholder":1252},[84,173009,173010,173013,173015],{"class":86,"line":106},[84,173011,173012],{"class":154},"now ",[84,173014,867],{"class":129},[84,173016,173017],{"class":154}," datetime.now()\n",[84,173019,173020,173022],{"class":86,"line":112},[84,173021,730],{"class":94},[84,173023,173024],{"class":154},"(now)\n",[84,173026,173027,173029,173032,173035,173037,173040],{"class":86,"line":425},[84,173028,730],{"class":94},[84,173030,173031],{"class":154},"(now.strftime(",[84,173033,173034],{"class":158},"\"%Y-%m-",[84,173036,157591],{"class":94},[84,173038,173039],{"class":158}," %H:%M:%S\"",[84,173041,31651],{"class":154},[198,173043,173045],{"id":173044},"_9124-os","9.12.4 os",[60,173047,173049],{"className":121,"code":173048,"language":91,"meta":66,"style":66},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[39,173050,173051,173057,173061,173068],{"__ignoreMap":66},[84,173052,173053,173055],{"class":86,"line":87},[84,173054,31547],{"class":129},[84,173056,46457],{"class":154},[84,173058,173059],{"class":86,"line":98},[84,173060,3578],{"emptyLinePlaceholder":1252},[84,173062,173063,173065],{"class":86,"line":106},[84,173064,730],{"class":94},[84,173066,173067],{"class":154},"(os.getcwd())\n",[84,173069,173070,173072,173075,173078],{"class":86,"line":112},[84,173071,730],{"class":94},[84,173073,173074],{"class":154},"(os.listdir(",[84,173076,173077],{"class":158},"\".\"",[84,173079,31651],{"class":154},[198,173081,173083],{"id":173082},"_9125-sys","9.12.5 sys",[60,173085,173087],{"className":121,"code":173086,"language":91,"meta":66,"style":66},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[39,173088,173089,173096,173100,173107],{"__ignoreMap":66},[84,173090,173091,173093],{"class":86,"line":87},[84,173092,31547],{"class":129},[84,173094,173095],{"class":154}," sys\n",[84,173097,173098],{"class":86,"line":98},[84,173099,3578],{"emptyLinePlaceholder":1252},[84,173101,173102,173104],{"class":86,"line":106},[84,173103,730],{"class":94},[84,173105,173106],{"class":154},"(sys.version)\n",[84,173108,173109,173111],{"class":86,"line":112},[84,173110,730],{"class":94},[84,173112,173113],{"class":154},"(sys.path)\n",[14,173115,173117,173118,173120,173121,1562],{"id":173116},"_913-if-name-main","9.13 if ",[1464,173119,80956],{}," == \"",[1464,173122,103196],{},[19,173124,173125,173126,173129],{},"模块被直接运行和被导入时，",[39,173127,173128],{},"__name__"," 的值不同。",[19,173131,173132,173133,720],{},"创建 ",[39,173134,173135],{},"my_module.py",[60,173137,173139],{"className":121,"code":173138,"language":91,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[39,173140,173141,173149,173159,173163,173167,173179],{"__ignoreMap":66},[84,173142,173143,173145,173147],{"class":86,"line":87},[84,173144,33100],{"class":129},[84,173146,6384],{"class":90},[84,173148,151993],{"class":154},[84,173150,173151,173153,173155,173157],{"class":86,"line":98},[84,173152,5268],{"class":129},[84,173154,12041],{"class":154},[84,173156,1790],{"class":129},[84,173158,152004],{"class":154},[84,173160,173161],{"class":86,"line":106},[84,173162,3578],{"emptyLinePlaceholder":1252},[84,173164,173165],{"class":86,"line":112},[84,173166,3578],{"emptyLinePlaceholder":1252},[84,173168,173169,173171,173173,173175,173177],{"class":86,"line":425},[84,173170,2712],{"class":129},[84,173172,32374],{"class":94},[84,173174,102697],{"class":129},[84,173176,102700],{"class":158},[84,173178,4917],{"class":154},[84,173180,173181,173183,173185,173187,173189,173191],{"class":86,"line":2395},[84,173182,32453],{"class":94},[84,173184,167500],{"class":154},[84,173186,1529],{"class":94},[84,173188,846],{"class":154},[84,173190,1397],{"class":94},[84,173192,31651],{"class":154},[19,173194,173195],{},"作用：",[26,173197,173198,173201],{},[29,173199,173200],{},"直接运行该文件时，执行测试代码。",[29,173202,173203],{},"被其他文件导入时，不执行测试代码。",[19,173205,173206],{},"这是写模块时很常用的习惯。",[14,173208,173210],{"id":173209},"_914-包","9.14 包",[19,173212,173213,173214,173217],{},"包是包含 ",[39,173215,173216],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173219,173220],{},"目录结构：",[60,173222,173225],{"className":173223,"code":173224,"language":65,"meta":66},[63],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[39,173226,173224],{"__ignoreMap":66},[19,173228,173229],{},"导入：",[60,173231,173233],{"className":121,"code":173232,"language":91,"meta":66,"style":66},"from utils.file_utils import read_file\n",[39,173234,173235],{"__ignoreMap":66},[84,173236,173237,173239,173242,173244],{"class":86,"line":87},[84,173238,31891],{"class":129},[84,173240,173241],{"class":154}," utils.file_utils ",[84,173243,31547],{"class":129},[84,173245,173246],{"class":154}," read_file\n",[19,173248,173249,173251],{},[39,173250,173216],{}," 可以为空，也可以写包初始化逻辑。",[14,173253,173255],{"id":173254},"_915-第三方包","9.15 第三方包",[19,173257,173258,173259,173261],{},"第三方包通过 ",[39,173260,246],{}," 安装。",[60,173263,173265],{"className":78,"code":173264,"language":80,"meta":66,"style":66},"pip install requests\n",[39,173266,173267],{"__ignoreMap":66},[84,173268,173269,173271,173273],{"class":86,"line":87},[84,173270,246],{"class":90},[84,173272,275],{"class":158},[84,173274,397],{"class":158},[19,173276,173277],{},"使用：",[60,173279,173281],{"className":121,"code":173280,"language":91,"meta":66,"style":66},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[39,173282,173283,173289,173293,173308],{"__ignoreMap":66},[84,173284,173285,173287],{"class":86,"line":87},[84,173286,31547],{"class":129},[84,173288,397],{"class":154},[84,173290,173291],{"class":86,"line":98},[84,173292,3578],{"emptyLinePlaceholder":1252},[84,173294,173295,173298,173300,173303,173306],{"class":86,"line":106},[84,173296,173297],{"class":154},"response ",[84,173299,867],{"class":129},[84,173301,173302],{"class":154}," requests.get(",[84,173304,173305],{"class":158},"\"https:\u002F\u002Fwww.example.com\"",[84,173307,162],{"class":154},[84,173309,173310,173312],{"class":86,"line":112},[84,173311,730],{"class":94},[84,173313,173314],{"class":154},"(response.status_code)\n",[19,173316,173317],{},"查看已安装包：",[60,173319,173321],{"className":78,"code":173320,"language":80,"meta":66,"style":66},"pip list\n",[39,173322,173323],{"__ignoreMap":66},[84,173324,173325,173327],{"class":86,"line":87},[84,173326,246],{"class":90},[84,173328,422],{"class":158},[19,173330,173331],{},"导出项目依赖：",[60,173333,173334],{"className":78,"code":610,"language":80,"meta":66,"style":66},[39,173335,173336],{"__ignoreMap":66},[84,173337,173338,173340,173342,173344],{"class":86,"line":87},[84,173339,246],{"class":90},[84,173341,619],{"class":158},[84,173343,622],{"class":129},[84,173345,625],{"class":158},[19,173347,173348],{},"安装项目依赖：",[60,173350,173351],{"className":78,"code":631,"language":80,"meta":66,"style":66},[39,173352,173353],{"__ignoreMap":66},[84,173354,173355,173357,173359,173361],{"class":86,"line":87},[84,173356,246],{"class":90},[84,173358,275],{"class":158},[84,173360,642],{"class":94},[84,173362,625],{"class":158},[14,173364,173366],{"id":173365},"_916-模块搜索路径","9.16 模块搜索路径",[19,173368,173369,173370,173373],{},"Python 导入模块时会在 ",[39,173371,173372],{},"sys.path"," 中查找。",[60,173375,173377],{"className":121,"code":173376,"language":91,"meta":66,"style":66},"import sys\n\nfor path in sys.path:\n    print(path)\n",[39,173378,173379,173385,173389,173401],{"__ignoreMap":66},[84,173380,173381,173383],{"class":86,"line":87},[84,173382,31547],{"class":129},[84,173384,173095],{"class":154},[84,173386,173387],{"class":86,"line":98},[84,173388,3578],{"emptyLinePlaceholder":1252},[84,173390,173391,173393,173396,173398],{"class":86,"line":106},[84,173392,4203],{"class":129},[84,173394,173395],{"class":154}," path ",[84,173397,27206],{"class":129},[84,173399,173400],{"class":154}," sys.path:\n",[84,173402,173403,173405],{"class":86,"line":112},[84,173404,32453],{"class":94},[84,173406,170129],{"class":154},[19,173408,173409],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173411,158523],{},[60,173413,173416],{"className":173414,"code":173415,"language":65,"meta":66},[63],"random.py\njson.py\ntime.py\n",[39,173417,173415],{"__ignoreMap":66},[19,173419,173420],{},"这些文件名可能导致导入异常。",[14,173422,173424],{"id":173423},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173426,173220],{},[60,173428,173431],{"className":173429,"code":173430,"language":65,"meta":66},[63],"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",[39,173432,173430],{"__ignoreMap":66},[19,173434,173435,720],{},[39,173436,173437],{},"utils\u002Ffile_utils.py",[60,173439,173441],{"className":121,"code":173440,"language":91,"meta":66,"style":66},"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",[39,173442,173443,173449,173459,173463,173467,173477,173487,173495,173501,173505,173532,173542,173546,173550,173560,173586],{"__ignoreMap":66},[84,173444,173445,173447],{"class":86,"line":87},[84,173446,31547],{"class":129},[84,173448,147991],{"class":154},[84,173450,173451,173453,173455,173457],{"class":86,"line":98},[84,173452,31891],{"class":129},[84,173454,109445],{"class":154},[84,173456,31547],{"class":129},[84,173458,109450],{"class":154},[84,173460,173461],{"class":86,"line":106},[84,173462,3578],{"emptyLinePlaceholder":1252},[84,173464,173465],{"class":86,"line":112},[84,173466,3578],{"emptyLinePlaceholder":1252},[84,173468,173469,173471,173474],{"class":86,"line":425},[84,173470,33100],{"class":129},[84,173472,173473],{"class":90}," read_json",[84,173475,173476],{"class":154},"(path):\n",[84,173478,173479,173482,173484],{"class":86,"line":2395},[84,173480,173481],{"class":154},"    path ",[84,173483,867],{"class":129},[84,173485,173486],{"class":154}," Path(path)\n",[84,173488,173489,173491,173493],{"class":86,"line":2401},[84,173490,4279],{"class":129},[84,173492,40082],{"class":129},[84,173494,170210],{"class":154},[84,173496,173497,173499],{"class":86,"line":2492},[84,173498,15922],{"class":129},[84,173500,52987],{"class":154},[84,173502,173503],{"class":86,"line":2498},[84,173504,3578],{"emptyLinePlaceholder":1252},[84,173506,173507,173509,173511,173514,173516,173518,173520,173522,173524,173526,173528,173530],{"class":86,"line":2510},[84,173508,35330],{"class":129},[84,173510,1131],{"class":94},[84,173512,173513],{"class":154},"(path, ",[84,173515,1141],{"class":158},[84,173517,846],{"class":154},[84,173519,1146],{"class":928},[84,173521,867],{"class":129},[84,173523,1151],{"class":158},[84,173525,1154],{"class":154},[84,173527,1157],{"class":129},[84,173529,149053],{"class":928},[84,173531,4917],{"class":154},[84,173533,173534,173536,173538,173540],{"class":86,"line":2793},[84,173535,15922],{"class":129},[84,173537,149064],{"class":154},[84,173539,46506],{"class":928},[84,173541,162],{"class":154},[84,173543,173544],{"class":86,"line":2798},[84,173545,3578],{"emptyLinePlaceholder":1252},[84,173547,173548],{"class":86,"line":2804},[84,173549,3578],{"emptyLinePlaceholder":1252},[84,173551,173552,173554,173557],{"class":86,"line":2809},[84,173553,33100],{"class":129},[84,173555,173556],{"class":90}," write_json",[84,173558,173559],{"class":154},"(path, data):\n",[84,173561,173562,173564,173566,173568,173570,173572,173574,173576,173578,173580,173582,173584],{"class":86,"line":2823},[84,173563,35330],{"class":129},[84,173565,1131],{"class":94},[84,173567,173513],{"class":154},[84,173569,152876],{"class":158},[84,173571,846],{"class":154},[84,173573,1146],{"class":928},[84,173575,867],{"class":129},[84,173577,1151],{"class":158},[84,173579,1154],{"class":154},[84,173581,1157],{"class":129},[84,173583,149053],{"class":928},[84,173585,4917],{"class":154},[84,173587,173588,173591,173593,173595,173597,173599,173601,173603,173605,173607,173609],{"class":86,"line":2828},[84,173589,173590],{"class":154},"        json.dump(data, ",[84,173592,46506],{"class":928},[84,173594,846],{"class":154},[84,173596,148037],{"class":928},[84,173598,867],{"class":129},[84,173600,35139],{"class":94},[84,173602,846],{"class":154},[84,173604,152912],{"class":928},[84,173606,867],{"class":129},[84,173608,1397],{"class":94},[84,173610,162],{"class":154},[19,173612,173613,720],{},[39,173614,155507],{},[60,173616,173618],{"className":121,"code":173617,"language":91,"meta":66,"style":66},"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",[39,173619,173620,173631,173635,173648,173668],{"__ignoreMap":66},[84,173621,173622,173624,173626,173628],{"class":86,"line":87},[84,173623,31891],{"class":129},[84,173625,173241],{"class":154},[84,173627,31547],{"class":129},[84,173629,173630],{"class":154}," read_json, write_json\n",[84,173632,173633],{"class":86,"line":98},[84,173634,3578],{"emptyLinePlaceholder":1252},[84,173636,173637,173639,173641,173644,173646],{"class":86,"line":106},[84,173638,160616],{"class":154},[84,173640,867],{"class":129},[84,173642,173643],{"class":154}," read_json(",[84,173645,152731],{"class":158},[84,173647,162],{"class":154},[84,173649,173650,173652,173654,173656,173658,173660,173662,173664,173666],{"class":86,"line":112},[84,173651,171434],{"class":154},[84,173653,63825],{"class":158},[84,173655,52586],{"class":154},[84,173657,150788],{"class":158},[84,173659,846],{"class":154},[84,173661,152372],{"class":158},[84,173663,52586],{"class":154},[84,173665,2297],{"class":94},[84,173667,166052],{"class":154},[84,173669,173670,173673,173675],{"class":86,"line":425},[84,173671,173672],{"class":154},"write_json(",[84,173674,152731],{"class":158},[84,173676,173677],{"class":154},", students)\n",[14,173679,173681],{"id":173680},"_918-易错点","9.18 易错点",[26,173683,173684,173687,173692,173697,173700,173703],{},[29,173685,173686],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,173688,173689,173690,55],{},"能指定异常类型就不要裸写 ",[39,173691,171794],{},[29,173693,173694,173696],{},[39,173695,172169],{}," 无论是否出错都会执行。",[29,173698,173699],{},"模块文件名不要和标准库重名。",[29,173701,173702],{},"导入自己写的模块时，要注意运行目录。",[29,173704,173705],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173707,173709],{"id":173708},"_919-本章练习","9.19 本章练习",[26,173711,173712,173715,173718,173724,173731],{},[29,173713,173714],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,173716,173717],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,173719,173132,173720,173723],{},[39,173721,173722],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,173725,173726,173727,173730],{},"创建一个 ",[39,173728,173729],{},"utils"," 包，把 JSON 读写函数放进去。",[29,173732,173733],{},"写一个程序，捕获除零异常和输入格式异常。",[1222,173735,173736],{},"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":66,"searchDepth":98,"depth":98,"links":173738},[173739,173740,173741,173742,173743,173744,173745,173746,173747,173748,173749,173755,173762,173764,173765,173766,173767,173768,173769],{"id":171591,"depth":98,"text":171592},{"id":171719,"depth":98,"text":171720},{"id":171768,"depth":98,"text":171769},{"id":171917,"depth":98,"text":171918},{"id":172089,"depth":98,"text":172090},{"id":172158,"depth":98,"text":172159},{"id":172269,"depth":98,"text":172270},{"id":172395,"depth":98,"text":172396},{"id":172520,"depth":98,"text":172521},{"id":172575,"depth":98,"text":172576},{"id":172674,"depth":98,"text":172675,"children":173750},[173751,173752,173753,173754],{"id":172678,"depth":106,"text":172679},{"id":172712,"depth":106,"text":172713},{"id":172751,"depth":106,"text":172752},{"id":172830,"depth":106,"text":172831},{"id":172853,"depth":98,"text":172854,"children":173756},[173757,173758,173759,173760,173761],{"id":172857,"depth":106,"text":172858},{"id":172940,"depth":106,"text":172941},{"id":172985,"depth":106,"text":172986},{"id":173044,"depth":106,"text":173045},{"id":173082,"depth":106,"text":173083},{"id":173116,"depth":98,"text":173763},"9.13 if name == \"main\"",{"id":173209,"depth":98,"text":173210},{"id":173254,"depth":98,"text":173255},{"id":173365,"depth":98,"text":173366},{"id":173423,"depth":98,"text":173424},{"id":173680,"depth":98,"text":173681},{"id":173708,"depth":98,"text":173709},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171583,"description":1249},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173776,"title":173777,"body":173778,"description":173941,"extension":1250,"meta":173942,"navigation":1252,"path":173943,"seo":173944,"stem":173945,"__hash__":173946},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173779,"toc":173936},[173780,173783,173786,173789,173800,173802,173876,173879,173882,173885,173888,173891,173894,173897,173900,173903,173906],[10,173781,173777],{"id":173782},"python教程",[19,173784,173785],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173787,173788],{},"建议学习环境：",[26,173790,173791,173794,173797],{},[29,173792,173793],{},"Python 版本：Python 3.10 及以上。",[29,173795,173796],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,173798,173799],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173801,118212],{"id":118212},[26,173803,173804,173810,173816,173822,173828,173834,173840,173846,173852,173858,173864,173870],{},[29,173805,173806],{},[208,173807,173809],{"href":173808},".\u002Fch1-Python","Python环境与第一个程序",[29,173811,173812],{},[208,173813,173815],{"href":173814},".\u002Fch2","基础语法、变量与字符串",[29,173817,173818],{},[208,173819,173821],{"href":173820},".\u002Fch3","判断语句",[29,173823,173824],{},[208,173825,173827],{"href":173826},".\u002Fch4","循环语句",[29,173829,173830],{},[208,173831,173833],{"href":173832},".\u002Fch5","函数基础",[29,173835,173836],{},[208,173837,173839],{"href":173838},".\u002Fch6","数据容器",[29,173841,173842],{},[208,173843,173845],{"href":173844},".\u002Fch7","函数进阶",[29,173847,173848],{},[208,173849,173851],{"href":173850},".\u002Fch8","文件操作",[29,173853,173854],{},[208,173855,173857],{"href":173856},".\u002Fch9","异常、模块与包",[29,173859,173860],{},[208,173861,173863],{"href":173862},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,173865,173866],{},[208,173867,173869],{"href":173868},".\u002Fch11","面向对象基础",[29,173871,173872],{},[208,173873,173875],{"href":173874},".\u002Fch12","综合案例与复习路线",[14,173877,173878],{"id":173878},"学习路线",[19,173880,173881],{},"第一阶段：能运行程序。",[19,173883,173884],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173886,173887],{},"第二阶段：能组织数据。",[19,173889,173890],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173892,173893],{},"第三阶段：能封装逻辑。",[19,173895,173896],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173898,173899],{},"第四阶段：能做小项目。",[19,173901,173902],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173904,173905],{"id":173905},"参考资料",[26,173907,173908,173915,173922,173929],{},[29,173909,173910,173911],{},"黑马程序员 Python 入门教程推荐：",[208,173912,173913],{"href":173913,"rel":173914},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[212],[29,173916,173917,173918],{},"Python 官方中文教程：",[208,173919,173920],{"href":173920,"rel":173921},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[212],[29,173923,173924,173925],{},"Python 标准库文档：",[208,173926,173927],{"href":173927,"rel":173928},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[212],[29,173930,173931,173932],{},"pyecharts 文档：",[208,173933,173934],{"href":173934,"rel":173935},"https:\u002F\u002Fpyecharts.org\u002F",[212],{"title":66,"searchDepth":98,"depth":98,"links":173937},[173938,173939,173940],{"id":118212,"depth":98,"text":118212},{"id":173878,"depth":98,"text":173878},{"id":173905,"depth":98,"text":173905},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24548},"\u002Fwiki\u002F2024-10-10-python",{"title":173777,"description":173941},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331475650]