[{"data":1,"prerenderedAt":174638},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu":3,"wiki-doc-nav":2146},{"id":4,"title":5,"body":6,"description":32,"extension":2140,"meta":2141,"navigation":740,"path":2142,"seo":2143,"stem":2144,"__hash__":2145},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":8,"toc":2116},"minimark",[9,13,18,22,25,36,39,64,67,108,111,152,156,159,271,274,319,322,340,343,358,361,364,412,415,454,458,461,467,472,493,498,501,580,583,602,606,609,639,650,656,660,663,669,680,684,687,718,721,1053,1056,1059,1070,1073,1076,1098,1105,1108,1126,1129,1132,1146,1156,1159,1186,1192,1195,1198,1208,1220,1240,1249,1269,1279,1303,1316,1330,1335,1377,1395,1420,1432,1452,1458,1504,1523,1540,1553,1569,1576,1588,1597,1633,1654,1679,1692,1716,1732,1757,1760,1781,1790,1793,1804,1808,1811,1817,1829,1836,1840,1843,1855,1858,1872,1875,1885,1895,1898,1939,1942,1946,1952,1955,1969,1973,1976,2009,2013,2016,2039,2047,2050,2056,2062,2065,2068,2096,2100,2103,2109,2112],[10,11,5],"h1",{"id":12},"_1环境安装与第一个-mujoco-程序",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,23,24],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,27,33],"pre",{"className":28,"code":30,"language":31,"meta":32},[29],"language-text","写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n","text","",[34,35,30],"code",{"__ignoreMap":32},[19,37,38],{},"需要掌握:",[40,41,42,46,49,54,59],"ol",{},[43,44,45],"li",{},"Fedora 44 下 MuJoCo 的系统依赖",[43,47,48],{},"Python 虚拟环境创建",[43,50,51],{},[34,52,53],{},"mujoco.MjModel",[43,55,56],{},[34,57,58],{},"mujoco.MjData",[43,60,61],{},[34,62,63],{},"mujoco.mj_step(model, data)",[19,65,66],{},"MuJoCo 中最重要的两个对象:",[68,69,70,84],"table",{},[71,72,73],"thead",{},[74,75,76,81],"tr",{},[77,78,80],"th",{"align":79},"left","对象",[77,82,83],{"align":79},"含义",[85,86,87,98],"tbody",{},[74,88,89,95],{},[90,91,92],"td",{"align":79},[34,93,94],{},"MjModel",[90,96,97],{"align":79},"模型结构，来自 XML，基本不随时间变化",[74,99,100,105],{},[90,101,102],{"align":79},[34,103,104],{},"MjData",[90,106,107],{"align":79},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,109,110],{},"可以先用一个类比理解：",[68,112,113,123],{},[71,114,115],{},[74,116,117,120],{},[77,118,119],{"align":79},"类比",[77,121,122],{"align":79},"MuJoCo 对象",[85,124,125,134,143],{},[74,126,127,130],{},[90,128,129],{"align":79},"游戏地图和角色配置",[90,131,132],{"align":79},[34,133,94],{},[74,135,136,139],{},[90,137,138],{"align":79},"游戏运行到当前帧的状态",[90,140,141],{"align":79},[34,142,104],{},[74,144,145,148],{},[90,146,147],{"align":79},"前进一帧",[90,149,150],{"align":79},[34,151,63],{},[14,153,155],{"id":154},"_2环境与依赖安装","2.环境与依赖安装",[19,157,158],{},"Fedora 44 系统依赖:",[26,160,164],{"className":161,"code":162,"language":163,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","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","bash",[34,165,166,189,203,217,228,239,259],{"__ignoreMap":32},[167,168,171,175,179,182,186],"span",{"class":169,"line":170},"line",1,[167,172,174],{"class":173},"sScJk","sudo",[167,176,178],{"class":177},"sZZnC"," dnf",[167,180,181],{"class":177}," install",[167,183,185],{"class":184},"sj4cs"," -y",[167,187,188],{"class":184}," \\\n",[167,190,192,195,198,201],{"class":169,"line":191},2,[167,193,194],{"class":177},"  python3",[167,196,197],{"class":177}," python3-pip",[167,199,200],{"class":177}," python3-virtualenv",[167,202,188],{"class":184},[167,204,206,209,212,215],{"class":169,"line":205},3,[167,207,208],{"class":177},"  mesa-libGL",[167,210,211],{"class":177}," mesa-libGLU",[167,213,214],{"class":177}," mesa-dri-drivers",[167,216,188],{"class":184},[167,218,220,223,226],{"class":169,"line":219},4,[167,221,222],{"class":177},"  libglvnd-glx",[167,224,225],{"class":177}," libglvnd-opengl",[167,227,188],{"class":184},[167,229,231,234,237],{"class":169,"line":230},5,[167,232,233],{"class":177},"  glfw",[167,235,236],{"class":177}," glfw-devel",[167,238,188],{"class":184},[167,240,242,245,248,251,254,257],{"class":169,"line":241},6,[167,243,244],{"class":177},"  libX11",[167,246,247],{"class":177}," libXcursor",[167,249,250],{"class":177}," libXi",[167,252,253],{"class":177}," libXinerama",[167,255,256],{"class":177}," libXrandr",[167,258,188],{"class":184},[167,260,262,265,268],{"class":169,"line":261},7,[167,263,264],{"class":177},"  gcc",[167,266,267],{"class":177}," gcc-c++",[167,269,270],{"class":177}," make\n",[19,272,273],{},"创建 Python 环境:",[26,275,277],{"className":161,"code":276,"language":163,"meta":32,"style":32},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[34,278,279,293,301],{"__ignoreMap":32},[167,280,281,284,287,290],{"class":169,"line":170},[167,282,283],{"class":173},"python3",[167,285,286],{"class":184}," -m",[167,288,289],{"class":177}," venv",[167,291,292],{"class":177}," .venv\n",[167,294,295,298],{"class":169,"line":191},[167,296,297],{"class":184},"source",[167,299,300],{"class":177}," .venv\u002Fbin\u002Factivate\n",[167,302,303,306,308,311,313,316],{"class":169,"line":205},[167,304,305],{"class":173},"python",[167,307,286],{"class":184},[167,309,310],{"class":177}," pip",[167,312,181],{"class":177},[167,314,315],{"class":184}," --upgrade",[167,317,318],{"class":177}," pip\n",[19,320,321],{},"pip 安装:",[26,323,325],{"className":161,"code":324,"language":163,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy\n",[34,326,327],{"__ignoreMap":32},[167,328,329,332,334,337],{"class":169,"line":170},[167,330,331],{"class":173},"pip",[167,333,181],{"class":177},[167,335,336],{"class":177}," \"mujoco>=2.3\"",[167,338,339],{"class":177}," numpy\n",[19,341,342],{},"安装完成后，先做最小检查：",[26,344,346],{"className":161,"code":345,"language":163,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[34,347,348],{"__ignoreMap":32},[167,349,350,352,355],{"class":169,"line":170},[167,351,305],{"class":173},[167,353,354],{"class":184}," -c",[167,356,357],{"class":177}," \"import mujoco; print(mujoco.__version__)\"\n",[19,359,360],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,362,363],{},"conda 安装:",[26,365,367],{"className":161,"code":366,"language":163,"meta":32,"style":32},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[34,368,369,392,402],{"__ignoreMap":32},[167,370,371,374,377,380,383,386,389],{"class":169,"line":170},[167,372,373],{"class":173},"conda",[167,375,376],{"class":177}," create",[167,378,379],{"class":184}," -n",[167,381,382],{"class":177}," mujoco-study",[167,384,385],{"class":177}," python=",[167,387,388],{"class":184},"3.10",[167,390,391],{"class":184}," -y\n",[167,393,394,396,399],{"class":169,"line":191},[167,395,373],{"class":173},[167,397,398],{"class":177}," activate",[167,400,401],{"class":177}," mujoco-study\n",[167,403,404,406,408,410],{"class":169,"line":205},[167,405,331],{"class":173},[167,407,181],{"class":177},[167,409,336],{"class":177},[167,411,339],{"class":177},[19,413,414],{},"版本冲突说明:",[40,416,417,424,434,443],{},[43,418,419,420,423],{},"不要安装 ",[34,421,422],{},"mujoco-py","。",[43,425,426,427,429,430,433],{},"如果旧项目里同时安装了 ",[34,428,422],{}," 和 ",[34,431,432],{},"mujoco","，建议新建干净虚拟环境。",[43,435,436,439,440,423],{},[34,437,438],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[34,441,442],{},"~\u002F.mujoco\u002Fmujoco210",[43,444,445,446,449,450,453],{},"离屏渲染可能涉及 OpenGL 后端，",[34,447,448],{},"MUJOCO_GL=egl"," 或 ",[34,451,452],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,455,457],{"id":456},"_3核心概念解释","3.核心概念解释",[19,459,460],{},"MuJoCo 的基本执行流程:",[26,462,465],{"className":463,"code":464,"language":31,"meta":32},[29],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[34,466,464],{"__ignoreMap":32},[19,468,469,471],{},[34,470,94],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,473,474,476,477,480,481,480,484,480,487,480,490,423],{},[34,475,104],{}," 存放仿真运行时状态，例如 ",[34,478,479],{},"data.time","、",[34,482,483],{},"data.qpos",[34,485,486],{},"data.qvel",[34,488,489],{},"data.ctrl",[34,491,492],{},"data.xpos",[494,495,497],"h3",{"id":496},"xml-是什么","XML 是什么",[19,499,500],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,502,506],{"className":503,"code":504,"language":505,"meta":32,"style":32},"language-xml shiki shiki-themes github-light github-dark","\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","xml",[34,507,508,538,571],{"__ignoreMap":32},[167,509,510,514,518,521,524,527,530,532,535],{"class":169,"line":170},[167,511,513],{"class":512},"sVt8B","\u003C",[167,515,517],{"class":516},"s9eBZ","body",[167,519,520],{"class":173}," name",[167,522,523],{"class":512},"=",[167,525,526],{"class":177},"\"box\"",[167,528,529],{"class":173}," pos",[167,531,523],{"class":512},[167,533,534],{"class":177},"\"0 0 1\"",[167,536,537],{"class":512},">\n",[167,539,540,543,546,548,550,553,556,558,560,563,565,568],{"class":169,"line":191},[167,541,542],{"class":512},"  \u003C",[167,544,545],{"class":516},"geom",[167,547,520],{"class":173},[167,549,523],{"class":512},[167,551,552],{"class":177},"\"box_geom\"",[167,554,555],{"class":173}," type",[167,557,523],{"class":512},[167,559,526],{"class":177},[167,561,562],{"class":173}," size",[167,564,523],{"class":512},[167,566,567],{"class":177},"\"0.1 0.1 0.1\"",[167,569,570],{"class":512},"\u002F>\n",[167,572,573,576,578],{"class":169,"line":205},[167,574,575],{"class":512},"\u003C\u002F",[167,577,517],{"class":516},[167,579,537],{"class":512},[19,581,582],{},"这段意思是：",[40,584,585,592,599],{},[43,586,587,588,591],{},"创建一个叫 ",[34,589,590],{},"box"," 的刚体。",[43,593,594,595,598],{},"它初始放在 ",[34,596,597],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[43,600,601],{},"它里面有一个盒子形状的几何体。",[494,603,605],{"id":604},"timestep-是什么","timestep 是什么",[19,607,608],{},"XML 里的：",[26,610,612],{"className":503,"code":611,"language":505,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,613,614],{"__ignoreMap":32},[167,615,616,618,621,624,626,629,632,634,637],{"class":169,"line":170},[167,617,513],{"class":512},[167,619,620],{"class":516},"option",[167,622,623],{"class":173}," timestep",[167,625,523],{"class":512},[167,627,628],{"class":177},"\"0.01\"",[167,630,631],{"class":173}," gravity",[167,633,523],{"class":512},[167,635,636],{"class":177},"\"0 0 -9.81\"",[167,638,570],{"class":512},[19,640,641,642,645,646,649],{},"表示每调用一次 ",[34,643,644],{},"mj_step","，仿真时间前进 ",[34,647,648],{},"0.01"," 秒。循环 100 次，大约就是 1 秒：",[26,651,654],{"className":652,"code":653,"language":31,"meta":32},[29],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[34,655,653],{"__ignoreMap":32},[494,657,659],{"id":658},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,661,662],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,664,667],{"className":665,"code":666,"language":31,"meta":32},[29],"x y z qw qx qy qz\n",[34,668,666],{"__ignoreMap":32},[19,670,671,672,675,676,679],{},"表示一个自由刚体的位置和姿态。其中 ",[34,673,674],{},"x y z"," 是位置，",[34,677,678],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,681,683],{"id":682},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,685,686],{},"新建文件:",[26,688,690],{"className":161,"code":689,"language":163,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[34,691,692,703,710],{"__ignoreMap":32},[167,693,694,697,700],{"class":169,"line":170},[167,695,696],{"class":173},"mkdir",[167,698,699],{"class":184}," -p",[167,701,702],{"class":177}," mujoco_tutorial\n",[167,704,705,708],{"class":169,"line":191},[167,706,707],{"class":184},"cd",[167,709,702],{"class":177},[167,711,712,715],{"class":169,"line":205},[167,713,714],{"class":173},"touch",[167,716,717],{"class":177}," ch1_first_sim.py\n",[19,719,720],{},"写入:",[26,722,725],{"className":723,"code":724,"language":305,"meta":32,"style":32},"language-python shiki shiki-themes github-light github-dark","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",[34,726,727,736,742,746,757,762,767,771,777,783,788,794,800,806,812,818,824,830,835,840,858,874,885,890,905,918,931,944,957,962,985,991,996,1008,1020,1025,1030,1047],{"__ignoreMap":32},[167,728,729,733],{"class":169,"line":170},[167,730,732],{"class":731},"szBVR","import",[167,734,735],{"class":512}," mujoco\n",[167,737,738],{"class":169,"line":191},[167,739,741],{"emptyLinePlaceholder":740},true,"\n",[167,743,744],{"class":169,"line":205},[167,745,741],{"emptyLinePlaceholder":740},[167,747,748,751,754],{"class":169,"line":219},[167,749,750],{"class":184},"XML",[167,752,753],{"class":731}," =",[167,755,756],{"class":177}," \"\"\"\n",[167,758,759],{"class":169,"line":230},[167,760,761],{"class":177},"\u003Cmujoco model=\"first_sim\">\n",[167,763,764],{"class":169,"line":241},[167,765,766],{"class":177},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[167,768,769],{"class":169,"line":261},[167,770,741],{"emptyLinePlaceholder":740},[167,772,774],{"class":169,"line":773},8,[167,775,776],{"class":177},"  \u003Cworldbody>\n",[167,778,780],{"class":169,"line":779},9,[167,781,782],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[167,784,786],{"class":169,"line":785},10,[167,787,741],{"emptyLinePlaceholder":740},[167,789,791],{"class":169,"line":790},11,[167,792,793],{"class":177},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[167,795,797],{"class":169,"line":796},12,[167,798,799],{"class":177},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[167,801,803],{"class":169,"line":802},13,[167,804,805],{"class":177},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[167,807,809],{"class":169,"line":808},14,[167,810,811],{"class":177},"    \u003C\u002Fbody>\n",[167,813,815],{"class":169,"line":814},15,[167,816,817],{"class":177},"  \u003C\u002Fworldbody>\n",[167,819,821],{"class":169,"line":820},16,[167,822,823],{"class":177},"\u003C\u002Fmujoco>\n",[167,825,827],{"class":169,"line":826},17,[167,828,829],{"class":177},"\"\"\"\n",[167,831,833],{"class":169,"line":832},18,[167,834,741],{"emptyLinePlaceholder":740},[167,836,838],{"class":169,"line":837},19,[167,839,741],{"emptyLinePlaceholder":740},[167,841,843,846,849,852,855],{"class":169,"line":842},20,[167,844,845],{"class":731},"def",[167,847,848],{"class":173}," main",[167,850,851],{"class":512},"() -> ",[167,853,854],{"class":184},"None",[167,856,857],{"class":512},":\n",[167,859,861,864,866,869,871],{"class":169,"line":860},21,[167,862,863],{"class":512},"    model ",[167,865,523],{"class":731},[167,867,868],{"class":512}," mujoco.MjModel.from_xml_string(",[167,870,750],{"class":184},[167,872,873],{"class":512},")\n",[167,875,877,880,882],{"class":169,"line":876},22,[167,878,879],{"class":512},"    data ",[167,881,523],{"class":731},[167,883,884],{"class":512}," mujoco.MjData(model)\n",[167,886,888],{"class":169,"line":887},23,[167,889,741],{"emptyLinePlaceholder":740},[167,891,893,896,899,902],{"class":169,"line":892},24,[167,894,895],{"class":184},"    print",[167,897,898],{"class":512},"(",[167,900,901],{"class":177},"\"nq:\"",[167,903,904],{"class":512},", model.nq)\n",[167,906,908,910,912,915],{"class":169,"line":907},25,[167,909,895],{"class":184},[167,911,898],{"class":512},[167,913,914],{"class":177},"\"nv:\"",[167,916,917],{"class":512},", model.nv)\n",[167,919,921,923,925,928],{"class":169,"line":920},26,[167,922,895],{"class":184},[167,924,898],{"class":512},[167,926,927],{"class":177},"\"nu:\"",[167,929,930],{"class":512},", model.nu)\n",[167,932,934,936,938,941],{"class":169,"line":933},27,[167,935,895],{"class":184},[167,937,898],{"class":512},[167,939,940],{"class":177},"\"initial time:\"",[167,942,943],{"class":512},", data.time)\n",[167,945,947,949,951,954],{"class":169,"line":946},28,[167,948,895],{"class":184},[167,950,898],{"class":512},[167,952,953],{"class":177},"\"initial qpos:\"",[167,955,956],{"class":512},", data.qpos.copy())\n",[167,958,960],{"class":169,"line":959},29,[167,961,741],{"emptyLinePlaceholder":740},[167,963,965,968,971,974,977,979,982],{"class":169,"line":964},30,[167,966,967],{"class":731},"    for",[167,969,970],{"class":512}," _ ",[167,972,973],{"class":731},"in",[167,975,976],{"class":184}," range",[167,978,898],{"class":512},[167,980,981],{"class":184},"100",[167,983,984],{"class":512},"):\n",[167,986,988],{"class":169,"line":987},31,[167,989,990],{"class":512},"        mujoco.mj_step(model, data)\n",[167,992,994],{"class":169,"line":993},32,[167,995,741],{"emptyLinePlaceholder":740},[167,997,999,1001,1003,1006],{"class":169,"line":998},33,[167,1000,895],{"class":184},[167,1002,898],{"class":512},[167,1004,1005],{"class":177},"\"final time:\"",[167,1007,943],{"class":512},[167,1009,1011,1013,1015,1018],{"class":169,"line":1010},34,[167,1012,895],{"class":184},[167,1014,898],{"class":512},[167,1016,1017],{"class":177},"\"final qpos:\"",[167,1019,956],{"class":512},[167,1021,1023],{"class":169,"line":1022},35,[167,1024,741],{"emptyLinePlaceholder":740},[167,1026,1028],{"class":169,"line":1027},36,[167,1029,741],{"emptyLinePlaceholder":740},[167,1031,1033,1036,1039,1042,1045],{"class":169,"line":1032},37,[167,1034,1035],{"class":731},"if",[167,1037,1038],{"class":184}," __name__",[167,1040,1041],{"class":731}," ==",[167,1043,1044],{"class":177}," \"__main__\"",[167,1046,857],{"class":512},[167,1048,1050],{"class":169,"line":1049},38,[167,1051,1052],{"class":512},"    main()\n",[494,1054,1055],{"id":1055},"代码逐段解释",[19,1057,1058],{},"导入库：",[26,1060,1062],{"className":723,"code":1061,"language":305,"meta":32,"style":32},"import mujoco\n",[34,1063,1064],{"__ignoreMap":32},[167,1065,1066,1068],{"class":169,"line":170},[167,1067,732],{"class":731},[167,1069,735],{"class":512},[19,1071,1072],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,1074,1075],{},"定义 XML：",[26,1077,1079],{"className":723,"code":1078,"language":305,"meta":32,"style":32},"XML = \"\"\"\n...\n\"\"\"\n",[34,1080,1081,1089,1094],{"__ignoreMap":32},[167,1082,1083,1085,1087],{"class":169,"line":170},[167,1084,750],{"class":184},[167,1086,753],{"class":731},[167,1088,756],{"class":177},[167,1090,1091],{"class":169,"line":191},[167,1092,1093],{"class":177},"...\n",[167,1095,1096],{"class":169,"line":205},[167,1097,829],{"class":177},[19,1099,1100,1101,1104],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[34,1102,1103],{},"freejoint"," 的方块。",[19,1106,1107],{},"编译模型：",[26,1109,1111],{"className":723,"code":1110,"language":305,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\n",[34,1112,1113],{"__ignoreMap":32},[167,1114,1115,1118,1120,1122,1124],{"class":169,"line":170},[167,1116,1117],{"class":512},"model ",[167,1119,523],{"class":731},[167,1121,868],{"class":512},[167,1123,750],{"class":184},[167,1125,873],{"class":512},[19,1127,1128],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,1130,1131],{},"创建数据：",[26,1133,1135],{"className":723,"code":1134,"language":305,"meta":32,"style":32},"data = mujoco.MjData(model)\n",[34,1136,1137],{"__ignoreMap":32},[167,1138,1139,1142,1144],{"class":169,"line":170},[167,1140,1141],{"class":512},"data ",[167,1143,523],{"class":731},[167,1145,884],{"class":512},[19,1147,1148,1151,1152,1155],{},[34,1149,1150],{},"data"," 会保存仿真当前状态。刚创建时，时间是 ",[34,1153,1154],{},"0","，方块还在初始位置。",[19,1157,1158],{},"推进仿真：",[26,1160,1162],{"className":723,"code":1161,"language":305,"meta":32,"style":32},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[34,1163,1164,1181],{"__ignoreMap":32},[167,1165,1166,1169,1171,1173,1175,1177,1179],{"class":169,"line":170},[167,1167,1168],{"class":731},"for",[167,1170,970],{"class":512},[167,1172,973],{"class":731},[167,1174,976],{"class":184},[167,1176,898],{"class":512},[167,1178,981],{"class":184},[167,1180,984],{"class":512},[167,1182,1183],{"class":169,"line":191},[167,1184,1185],{"class":512},"    mujoco.mj_step(model, data)\n",[19,1187,1188,1189,1191],{},"每次 ",[34,1190,644],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[494,1193,1194],{"id":1194},"代码逐行细讲",[19,1196,1197],{},"下面把完整代码按新手视角拆开讲。",[26,1199,1200],{"className":723,"code":1061,"language":305,"meta":32,"style":32},[34,1201,1202],{"__ignoreMap":32},[167,1203,1204,1206],{"class":169,"line":170},[167,1205,732],{"class":731},[167,1207,735],{"class":512},[19,1209,1210,1212,1213,480,1215,480,1217,423],{},[34,1211,732],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[34,1214,53],{},[34,1216,58],{},[34,1218,1219],{},"mujoco.mj_step",[26,1221,1222],{"className":723,"code":1078,"language":305,"meta":32,"style":32},[34,1223,1224,1232,1236],{"__ignoreMap":32},[167,1225,1226,1228,1230],{"class":169,"line":170},[167,1227,750],{"class":184},[167,1229,753],{"class":731},[167,1231,756],{"class":177},[167,1233,1234],{"class":169,"line":191},[167,1235,1093],{"class":177},[167,1237,1238],{"class":169,"line":205},[167,1239,829],{"class":177},[19,1241,1242,1244,1245,1248],{},[34,1243,750],{}," 是一个变量名。右边的三引号 ",[34,1246,1247],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,1250,1251],{"className":503,"code":761,"language":505,"meta":32,"style":32},[34,1252,1253],{"__ignoreMap":32},[167,1254,1255,1257,1259,1262,1264,1267],{"class":169,"line":170},[167,1256,513],{"class":512},[167,1258,432],{"class":516},[167,1260,1261],{"class":173}," model",[167,1263,523],{"class":512},[167,1265,1266],{"class":177},"\"first_sim\"",[167,1268,537],{"class":512},[19,1270,1271,1272,1275,1276,423],{},"这是 XML 的根标签。",[34,1273,1274],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[34,1277,1278],{},"first_sim",[26,1280,1281],{"className":503,"code":611,"language":505,"meta":32,"style":32},[34,1282,1283],{"__ignoreMap":32},[167,1284,1285,1287,1289,1291,1293,1295,1297,1299,1301],{"class":169,"line":170},[167,1286,513],{"class":512},[167,1288,620],{"class":516},[167,1290,623],{"class":173},[167,1292,523],{"class":512},[167,1294,628],{"class":177},[167,1296,631],{"class":173},[167,1298,523],{"class":512},[167,1300,636],{"class":177},[167,1302,570],{"class":512},[19,1304,1305,1307,1308,1311,1312,1315],{},[34,1306,620],{}," 用来设置仿真参数。",[34,1309,1310],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[34,1313,1314],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,1317,1319],{"className":503,"code":1318,"language":505,"meta":32,"style":32},"\u003Cworldbody>\n",[34,1320,1321],{"__ignoreMap":32},[167,1322,1323,1325,1328],{"class":169,"line":170},[167,1324,513],{"class":512},[167,1326,1327],{"class":516},"worldbody",[167,1329,537],{"class":512},[19,1331,1332,1334],{},[34,1333,1327],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,1336,1338],{"className":503,"code":1337,"language":505,"meta":32,"style":32},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,1339,1340],{"__ignoreMap":32},[167,1341,1342,1344,1346,1348,1350,1353,1355,1357,1360,1362,1364,1367,1370,1372,1375],{"class":169,"line":170},[167,1343,513],{"class":512},[167,1345,545],{"class":516},[167,1347,520],{"class":173},[167,1349,523],{"class":512},[167,1351,1352],{"class":177},"\"floor\"",[167,1354,555],{"class":173},[167,1356,523],{"class":512},[167,1358,1359],{"class":177},"\"plane\"",[167,1361,562],{"class":173},[167,1363,523],{"class":512},[167,1365,1366],{"class":177},"\"2 2 0.1\"",[167,1368,1369],{"class":173}," rgba",[167,1371,523],{"class":512},[167,1373,1374],{"class":177},"\"0.8 0.8 0.8 1\"",[167,1376,570],{"class":512},[19,1378,1379,1380,1382,1383,1386,1387,1390,1391,1394],{},"这行创建地面。",[34,1381,545],{}," 是几何体。",[34,1384,1385],{},"name=\"floor\""," 是名字。",[34,1388,1389],{},"type=\"plane\""," 表示平面。",[34,1392,1393],{},"rgba"," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,1396,1398],{"className":503,"code":1397,"language":505,"meta":32,"style":32},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,1399,1400],{"__ignoreMap":32},[167,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418],{"class":169,"line":170},[167,1403,513],{"class":512},[167,1405,517],{"class":516},[167,1407,520],{"class":173},[167,1409,523],{"class":512},[167,1411,526],{"class":177},[167,1413,529],{"class":173},[167,1415,523],{"class":512},[167,1417,534],{"class":177},[167,1419,537],{"class":512},[19,1421,1422,1423,423,1425,1428,1429,1431],{},"这行创建一个刚体，名字叫 ",[34,1424,590],{},[34,1426,1427],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[34,1430,597],{},"，也就是离地面 1 米高。",[26,1433,1435],{"className":503,"code":1434,"language":505,"meta":32,"style":32},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[34,1436,1437],{"__ignoreMap":32},[167,1438,1439,1441,1443,1445,1447,1450],{"class":169,"line":170},[167,1440,513],{"class":512},[167,1442,1103],{"class":516},[167,1444,520],{"class":173},[167,1446,523],{"class":512},[167,1448,1449],{"class":177},"\"box_free\"",[167,1451,570],{"class":512},[19,1453,1454,1455,1457],{},"这行很重要。",[34,1456,1103],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,1459,1461],{"className":503,"code":1460,"language":505,"meta":32,"style":32},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,1462,1463],{"__ignoreMap":32},[167,1464,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1490,1492,1495,1497,1499,1502],{"class":169,"line":170},[167,1466,513],{"class":512},[167,1468,545],{"class":516},[167,1470,520],{"class":173},[167,1472,523],{"class":512},[167,1474,552],{"class":177},[167,1476,555],{"class":173},[167,1478,523],{"class":512},[167,1480,526],{"class":177},[167,1482,562],{"class":173},[167,1484,523],{"class":512},[167,1486,567],{"class":177},[167,1488,1489],{"class":173}," mass",[167,1491,523],{"class":512},[167,1493,1494],{"class":177},"\"1\"",[167,1496,1369],{"class":173},[167,1498,523],{"class":512},[167,1500,1501],{"class":177},"\"1 0 0 1\"",[167,1503,570],{"class":512},[19,1505,1506,1507,1510,1511,1514,1515,1518,1519,1522],{},"这行给 box body 添加一个盒子形状。",[34,1508,1509],{},"type=\"box\""," 表示形状是盒子。",[34,1512,1513],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[34,1516,1517],{},"mass=\"1\""," 表示质量是 1。",[34,1520,1521],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,1524,1526],{"className":723,"code":1525,"language":305,"meta":32,"style":32},"def main() -> None:\n",[34,1527,1528],{"__ignoreMap":32},[167,1529,1530,1532,1534,1536,1538],{"class":169,"line":170},[167,1531,845],{"class":731},[167,1533,848],{"class":173},[167,1535,851],{"class":512},[167,1537,854],{"class":184},[167,1539,857],{"class":512},[19,1541,1542,1544,1545,1548,1549,1552],{},[34,1543,845],{}," 用来定义函数。这里定义了一个叫 ",[34,1546,1547],{},"main"," 的函数。",[34,1550,1551],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,1554,1555],{"className":723,"code":1110,"language":305,"meta":32,"style":32},[34,1556,1557],{"__ignoreMap":32},[167,1558,1559,1561,1563,1565,1567],{"class":169,"line":170},[167,1560,1117],{"class":512},[167,1562,523],{"class":731},[167,1564,868],{"class":512},[167,1566,750],{"class":184},[167,1568,873],{"class":512},[19,1570,1571,1572,1575],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[34,1573,1574],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,1577,1578],{"className":723,"code":1134,"language":305,"meta":32,"style":32},[34,1579,1580],{"__ignoreMap":32},[167,1581,1582,1584,1586],{"class":169,"line":170},[167,1583,1141],{"class":512},[167,1585,523],{"class":731},[167,1587,884],{"class":512},[19,1589,1590,1591,1593,1594,1596],{},"这行创建仿真数据。",[34,1592,1150],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[34,1595,1150],{}," 都会变化。",[26,1598,1600],{"className":723,"code":1599,"language":305,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[34,1601,1602,1613,1623],{"__ignoreMap":32},[167,1603,1604,1607,1609,1611],{"class":169,"line":170},[167,1605,1606],{"class":184},"print",[167,1608,898],{"class":512},[167,1610,901],{"class":177},[167,1612,904],{"class":512},[167,1614,1615,1617,1619,1621],{"class":169,"line":191},[167,1616,1606],{"class":184},[167,1618,898],{"class":512},[167,1620,914],{"class":177},[167,1622,917],{"class":512},[167,1624,1625,1627,1629,1631],{"class":169,"line":205},[167,1626,1606],{"class":184},[167,1628,898],{"class":512},[167,1630,927],{"class":177},[167,1632,930],{"class":512},[19,1634,1635,1637,1638,1641,1642,1645,1646,1649,1650,1653],{},[34,1636,1606],{}," 用来输出信息。",[34,1639,1640],{},"model.nq"," 是位置变量数量，",[34,1643,1644],{},"model.nv"," 是速度变量数量，",[34,1647,1648],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[34,1651,1652],{},"nu"," 是 0。",[26,1655,1657],{"className":723,"code":1656,"language":305,"meta":32,"style":32},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[34,1658,1659,1669],{"__ignoreMap":32},[167,1660,1661,1663,1665,1667],{"class":169,"line":170},[167,1662,1606],{"class":184},[167,1664,898],{"class":512},[167,1666,940],{"class":177},[167,1668,943],{"class":512},[167,1670,1671,1673,1675,1677],{"class":169,"line":191},[167,1672,1606],{"class":184},[167,1674,898],{"class":512},[167,1676,953],{"class":177},[167,1678,956],{"class":512},[19,1680,1681,1682,1684,1685,1687,1688,1691],{},"这里打印初始时间和初始位置。",[34,1683,479],{}," 一开始是 0。",[34,1686,483],{}," 是位置数组。",[34,1689,1690],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,1693,1694],{"className":723,"code":1161,"language":305,"meta":32,"style":32},[34,1695,1696,1712],{"__ignoreMap":32},[167,1697,1698,1700,1702,1704,1706,1708,1710],{"class":169,"line":170},[167,1699,1168],{"class":731},[167,1701,970],{"class":512},[167,1703,973],{"class":731},[167,1705,976],{"class":184},[167,1707,898],{"class":512},[167,1709,981],{"class":184},[167,1711,984],{"class":512},[167,1713,1714],{"class":169,"line":191},[167,1715,1185],{"class":512},[19,1717,1718,1720,1721,1724,1725,1728,1729,1731],{},[34,1719,1168],{}," 是循环。",[34,1722,1723],{},"range(100)"," 表示循环 100 次。",[34,1726,1727],{},"_"," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[34,1730,644],{},"，仿真就前进一步。",[26,1733,1735],{"className":723,"code":1734,"language":305,"meta":32,"style":32},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[34,1736,1737,1747],{"__ignoreMap":32},[167,1738,1739,1741,1743,1745],{"class":169,"line":170},[167,1740,1606],{"class":184},[167,1742,898],{"class":512},[167,1744,1005],{"class":177},[167,1746,943],{"class":512},[167,1748,1749,1751,1753,1755],{"class":169,"line":191},[167,1750,1606],{"class":184},[167,1752,898],{"class":512},[167,1754,1017],{"class":177},[167,1756,956],{"class":512},[19,1758,1759],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,1761,1763],{"className":723,"code":1762,"language":305,"meta":32,"style":32},"if __name__ == \"__main__\":\n    main()\n",[34,1764,1765,1777],{"__ignoreMap":32},[167,1766,1767,1769,1771,1773,1775],{"class":169,"line":170},[167,1768,1035],{"class":731},[167,1770,1038],{"class":184},[167,1772,1041],{"class":731},[167,1774,1044],{"class":177},[167,1776,857],{"class":512},[167,1778,1779],{"class":169,"line":191},[167,1780,1052],{"class":512},[19,1782,1783,1784,1787,1788,423],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[34,1785,1786],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[34,1789,1786],{},[19,1791,1792],{},"运行:",[26,1794,1796],{"className":161,"code":1795,"language":163,"meta":32,"style":32},"python ch1_first_sim.py\n",[34,1797,1798],{"__ignoreMap":32},[167,1799,1800,1802],{"class":169,"line":170},[167,1801,305],{"class":173},[167,1803,717],{"class":177},[14,1805,1807],{"id":1806},"_5运行结果说明","5.运行结果说明",[19,1809,1810],{},"你应该看到类似输出:",[26,1812,1815],{"className":1813,"code":1814,"language":31,"meta":32},[29],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[34,1816,1814],{"__ignoreMap":32},[19,1818,1819,1821,1822,1825,1826,423],{},[34,1820,1103],{}," 有 7 个位置变量: ",[34,1823,1824],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[34,1827,1828],{},"vx vy vz wx wy wz",[19,1830,1831,1832,1835],{},"你还会看到 ",[34,1833,1834],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,1837,1839],{"id":1838},"_6验证步骤","6.验证步骤",[19,1841,1842],{},"确认版本:",[26,1844,1845],{"className":161,"code":345,"language":163,"meta":32,"style":32},[34,1846,1847],{"__ignoreMap":32},[167,1848,1849,1851,1853],{"class":169,"line":170},[167,1850,305],{"class":173},[167,1852,354],{"class":184},[167,1854,357],{"class":177},[19,1856,1857],{},"确认导入的是官方 bindings:",[26,1859,1861],{"className":161,"code":1860,"language":163,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco)\"\n",[34,1862,1863],{"__ignoreMap":32},[167,1864,1865,1867,1869],{"class":169,"line":170},[167,1866,305],{"class":173},[167,1868,354],{"class":184},[167,1870,1871],{"class":177}," \"import mujoco; print(mujoco)\"\n",[19,1873,1874],{},"运行程序:",[26,1876,1877],{"className":161,"code":1795,"language":163,"meta":32,"style":32},[34,1878,1879],{"__ignoreMap":32},[167,1880,1881,1883],{"class":169,"line":170},[167,1882,305],{"class":173},[167,1884,717],{"class":177},[19,1886,1887,1888,1891,1892,423],{},"检查 ",[34,1889,1890],{},"final time"," 是否约等于 ",[34,1893,1894],{},"1.0",[19,1896,1897],{},"再做几个小实验：",[40,1899,1900,1910,1918,1932],{},[43,1901,1902,1903,1905,1906,1909],{},"把 ",[34,1904,1427],{}," 改成 ",[34,1907,1908],{},"pos=\"0 0 2\"","，观察初始高度变化。",[43,1911,1902,1912,1905,1914,1917],{},[34,1913,1314],{},[34,1915,1916],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[43,1919,1902,1920,1905,1922,1925,1926,1928,1929,423],{},[34,1921,1310],{},[34,1923,1924],{},"timestep=\"0.005\"","，观察 100 步后的 ",[34,1927,1890],{}," 是否变成约 ",[34,1930,1931],{},"0.5",[43,1933,1934,1935,1938],{},"删除 ",[34,1936,1937],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,1940,1941],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,1943,1945],{"id":1944},"_7常见错误与解决方案","7.常见错误与解决方案",[494,1947,1949],{"id":1948},"modulenotfounderror-no-module-named-mujoco",[34,1950,1951],{},"ModuleNotFoundError: No module named 'mujoco'",[19,1953,1954],{},"解决:",[26,1956,1958],{"className":161,"code":1957,"language":163,"meta":32,"style":32},"pip install \"mujoco>=2.3\"\n",[34,1959,1960],{"__ignoreMap":32},[167,1961,1962,1964,1966],{"class":169,"line":170},[167,1963,331],{"class":173},[167,1965,181],{"class":177},[167,1967,1968],{"class":177}," \"mujoco>=2.3\"\n",[494,1970,1972],{"id":1971},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,1974,1975],{},"先安装系统依赖:",[26,1977,1979],{"className":161,"code":1978,"language":163,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[34,1980,1981],{"__ignoreMap":32},[167,1982,1983,1985,1987,1989,1991,1994,1996,1999,2001,2004,2006],{"class":169,"line":170},[167,1984,174],{"class":173},[167,1986,178],{"class":177},[167,1988,181],{"class":177},[167,1990,185],{"class":184},[167,1992,1993],{"class":177}," mesa-libGL",[167,1995,214],{"class":177},[167,1997,1998],{"class":177}," glfw",[167,2000,236],{"class":177},[167,2002,2003],{"class":177}," libX11",[167,2005,250],{"class":177},[167,2007,2008],{"class":177}," libXrandr\n",[494,2010,2012],{"id":2011},"xml-解析失败","XML 解析失败",[19,2014,2015],{},"检查:",[40,2017,2018,2021,2024,2030],{},[43,2019,2020],{},"标签是否闭合",[43,2022,2023],{},"属性是否带引号",[43,2025,2026,2027],{},"根节点是否是 ",[34,2028,2029],{},"\u003Cmujoco>",[43,2031,2032,2034,2035,2038],{},[34,2033,517],{}," 是否放在 ",[34,2036,2037],{},"\u003Cworldbody>"," 内部",[494,2040,2042,2044,2045],{"id":2041},"final-time-不是严格等于-10",[34,2043,1890],{}," 不是严格等于 ",[34,2046,1894],{},[19,2048,2049],{},"这通常不是错误。浮点数计算可能得到：",[26,2051,2054],{"className":2052,"code":2053,"language":31,"meta":32},[29],"1.0000000000000007\n",[34,2055,2053],{"__ignoreMap":32},[19,2057,2058,2059,2061],{},"只要接近 ",[34,2060,1894],{}," 就正常。",[494,2063,2064],{"id":2064},"方块没有掉下来",[19,2066,2067],{},"检查：",[40,2069,2070,2076,2082,2087],{},[43,2071,2072,2073],{},"方块 body 里是否有 ",[34,2074,2075],{},"\u003Cfreejoint\u002F>",[43,2077,2078,2079],{},"重力是否是 ",[34,2080,2081],{},"0 0 -9.81",[43,2083,2084,2085],{},"是否真的调用了 ",[34,2086,63],{},[43,2088,2089,2090,2092,2093],{},"你看的是否是 ",[34,2091,1834],{},"，不是 ",[34,2094,2095],{},"initial qpos",[14,2097,2099],{"id":2098},"_8本章小结","8.本章小结",[19,2101,2102],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,2104,2107],{"className":2105,"code":2106,"language":31,"meta":32},[29],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[34,2108,2106],{"__ignoreMap":32},[19,2110,2111],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2113,2114,2115],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":32,"searchDepth":191,"depth":191,"links":2117},[2118,2119,2120,2125,2129,2130,2131,2139],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":2121},[2122,2123,2124],{"id":496,"depth":205,"text":497},{"id":604,"depth":205,"text":605},{"id":658,"depth":205,"text":659},{"id":682,"depth":191,"text":683,"children":2126},[2127,2128],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":2132},[2133,2134,2135,2136,2138],{"id":1948,"depth":205,"text":1951},{"id":1971,"depth":205,"text":1972},{"id":2011,"depth":205,"text":2012},{"id":2041,"depth":205,"text":2137},"final time 不是严格等于 1.0",{"id":2064,"depth":205,"text":2064},{"id":2098,"depth":191,"text":2099},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":5,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",[2147,7194,8300,9720,12707,14058,15547,16635,25397,25410,26004,26030,26154,26395,26460,26478,26491,26538,26661,26829,27028,27207,27412,27548,27643,27680,27693,28003,28741,29449,29470,30489,32118,32269,32282,32294,32589,52393,52408,52425,52458,55323,78666,94809,94830,94943,95064,95834,96497,96858,96896,97002,97102,97145,97171,97232,98884,98985,99010,99501,100001,101081,101364,102106,102608,102620,104243,105907,107410,109108,111025,112944,114966,118436,118868,119331,120080,123024,123372,123394,123750,127057,127069,127472,127495,127642,127809,128014,128315,128872,129529,131460,133058,133707,135201,136632,137867,139561,141313,143723,143839,144774,144985,145870,147105,147333,147346,148501,150913,153281,156602,159079,160723,162500,164513,167565,169745,172272,174466],{"id":2148,"title":2149,"body":2150,"description":32,"extension":2140,"meta":7189,"navigation":740,"path":7190,"seo":7191,"stem":7192,"__hash__":7193},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2151,"toc":7161},[2152,2155,2159,2162,2166,2177,2181,2185,2188,2191,2194,2197,2200,2226,2230,2233,2236,2239,2242,2293,2297,2315,2317,2331,2334,2342,2345,3197,3204,3221,3225,3311,3315,3321,3407,3411,3449,3453,3517,3521,3525,3532,3543,3547,3552,3556,3561,3565,3570,3574,3578,3583,3833,3838,3976,3981,4236,4239,4247,4251,4256,4359,4362,4660,4669,4770,4773,4776,4779,4782,5042,5047,5186,5189,5367,5370,5498,5501,5653,5657,5662,5665,5676,5684,5687,5792,5796,5800,5805,5855,5860,5865,5889,5894,5947,5950,5955,6132,6137,6422,6427,6824,6828,6833,6890,6895,6903,6906,7046,7049,7158],[10,2153,2149],{"id":2154},"_1基础入门",[14,2156,2158],{"id":2157},"_11注释","1.1注释",[19,2160,2161],{},"\u002F\u002F或者\u002F* *\u002F",[14,2163,2165],{"id":2164},"_12命名","1.2命名",[40,2167,2168,2171,2174],{},[43,2169,2170],{},"字母数字下划线",[43,2172,2173],{},"开头必须是字母或_",[43,2175,2176],{},"不能使用关键词",[14,2178,2180],{"id":2179},"_13数据类型","1.3数据类型",[494,2182,2184],{"id":2183},"_131整形","1.3.1整形",[19,2186,2187],{},"short 短整形 2",[19,2189,2190],{},"int 整形 4",[19,2192,2193],{},"long 长整形 win4 linux32位4 linux64位8",[19,2195,2196],{},"long long 长长整形 8",[19,2198,2199],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,2201,2205],{"className":2202,"code":2203,"language":2204,"meta":32,"style":32},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[34,2206,2207,2219],{"__ignoreMap":32},[167,2208,2209,2212,2214,2217],{"class":169,"line":170},[167,2210,2211],{"class":731},"sizeof",[167,2213,898],{"class":512},[167,2215,2216],{"class":731},"int",[167,2218,873],{"class":512},[167,2220,2221,2223],{"class":169,"line":191},[167,2222,2211],{"class":731},[167,2224,2225],{"class":512},"(num)\n",[494,2227,2229],{"id":2228},"_132浮点型","1.3.2浮点型",[19,2231,2232],{},"float 单精度 4节 7位有效数字",[19,2234,2235],{},"double 双精度 8节 15-16有效数字",[19,2237,2238],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2240,2241],{},"注意点：",[26,2243,2245],{"className":2202,"code":2244,"language":2204,"meta":32,"style":32},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[34,2246,2247,2270],{"__ignoreMap":32},[167,2248,2249,2252,2255,2257,2260,2263,2266],{"class":169,"line":170},[167,2250,2251],{"class":731},"float",[167,2253,2254],{"class":512}," f1",[167,2256,523],{"class":731},[167,2258,2259],{"class":184},"3.14",[167,2261,2262],{"class":731},"f",[167,2264,2265],{"class":512},";",[167,2267,2269],{"class":2268},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[167,2271,2272,2274,2277,2279,2282,2285,2288,2290],{"class":169,"line":191},[167,2273,2251],{"class":731},[167,2275,2276],{"class":512}," f2",[167,2278,523],{"class":731},[167,2280,2281],{"class":184},"3",[167,2283,2284],{"class":731},"e",[167,2286,2287],{"class":184},"2",[167,2289,2265],{"class":512},[167,2291,2292],{"class":2268}," \u002F\u002F科学记数法\n",[494,2294,2296],{"id":2295},"_133字符型","1.3.3字符型",[26,2298,2300],{"className":2202,"code":2299,"language":2204,"meta":32,"style":32},"char ch='a'\n",[34,2301,2302],{"__ignoreMap":32},[167,2303,2304,2307,2310,2312],{"class":169,"line":170},[167,2305,2306],{"class":731},"char",[167,2308,2309],{"class":512}," ch",[167,2311,523],{"class":731},[167,2313,2314],{"class":177},"'a'\n",[19,2316,2241],{},[40,2318,2319,2322,2325,2328],{},[43,2320,2321],{},"在显示字符型变量时，只能单引号，双引号x",[43,2323,2324],{},"单引号内只能一个字符，不能字符串",[43,2326,2327],{},"c和c++字符型变量只占用一个字符",[43,2329,2330],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2332,2333],{},"ASCII码大致由以下两部分组成：",[40,2335,2336,2339],{},[43,2337,2338],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[43,2340,2341],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2343,2344],{},"ASCII码表格：",[68,2346,2347,2388],{},[71,2348,2349],{},[74,2350,2351,2358,2363,2367,2372,2376,2380,2384],{},[77,2352,2353,2357],{},[2354,2355,2356],"strong",{},"ASCII","值",[77,2359,2360],{},[2354,2361,2362],{},"控制字符",[77,2364,2365,2357],{},[2354,2366,2356],{},[77,2368,2369],{},[2354,2370,2371],{},"字符",[77,2373,2374,2357],{},[2354,2375,2356],{},[77,2377,2378],{},[2354,2379,2371],{},[77,2381,2382,2357],{},[2354,2383,2356],{},[77,2385,2386],{},[2354,2387,2371],{},[85,2389,2390,2414,2440,2465,2490,2515,2540,2565,2591,2616,2642,2668,2694,2719,2745,2771,2797,2821,2846,2871,2896,2921,2946,2971,2996,3021,3046,3072,3097,3121,3146,3172],{},[74,2391,2392,2394,2397,2400,2403,2406,2409,2412],{},[90,2393,1154],{},[90,2395,2396],{},"NUT",[90,2398,2399],{},"32",[90,2401,2402],{},"(space)",[90,2404,2405],{},"64",[90,2407,2408],{},"@",[90,2410,2411],{},"96",[90,2413,480],{},[74,2415,2416,2419,2422,2425,2428,2431,2434,2437],{},[90,2417,2418],{},"1",[90,2420,2421],{},"SOH",[90,2423,2424],{},"33",[90,2426,2427],{},"!",[90,2429,2430],{},"65",[90,2432,2433],{},"A",[90,2435,2436],{},"97",[90,2438,2439],{},"a",[74,2441,2442,2444,2447,2450,2453,2456,2459,2462],{},[90,2443,2287],{},[90,2445,2446],{},"STX",[90,2448,2449],{},"34",[90,2451,2452],{},"\"",[90,2454,2455],{},"66",[90,2457,2458],{},"B",[90,2460,2461],{},"98",[90,2463,2464],{},"b",[74,2466,2467,2469,2472,2475,2478,2481,2484,2487],{},[90,2468,2281],{},[90,2470,2471],{},"ETX",[90,2473,2474],{},"35",[90,2476,2477],{},"#",[90,2479,2480],{},"67",[90,2482,2483],{},"C",[90,2485,2486],{},"99",[90,2488,2489],{},"c",[74,2491,2492,2495,2498,2501,2504,2507,2510,2512],{},[90,2493,2494],{},"4",[90,2496,2497],{},"EOT",[90,2499,2500],{},"36",[90,2502,2503],{},"$",[90,2505,2506],{},"68",[90,2508,2509],{},"D",[90,2511,981],{},[90,2513,2514],{},"d",[74,2516,2517,2520,2523,2526,2529,2532,2535,2538],{},[90,2518,2519],{},"5",[90,2521,2522],{},"ENQ",[90,2524,2525],{},"37",[90,2527,2528],{},"%",[90,2530,2531],{},"69",[90,2533,2534],{},"E",[90,2536,2537],{},"101",[90,2539,2284],{},[74,2541,2542,2545,2548,2551,2554,2557,2560,2563],{},[90,2543,2544],{},"6",[90,2546,2547],{},"ACK",[90,2549,2550],{},"38",[90,2552,2553],{},"&",[90,2555,2556],{},"70",[90,2558,2559],{},"F",[90,2561,2562],{},"102",[90,2564,2262],{},[74,2566,2567,2570,2573,2576,2579,2582,2585,2588],{},[90,2568,2569],{},"7",[90,2571,2572],{},"BEL",[90,2574,2575],{},"39",[90,2577,2578],{},",",[90,2580,2581],{},"71",[90,2583,2584],{},"G",[90,2586,2587],{},"103",[90,2589,2590],{},"g",[74,2592,2593,2596,2599,2602,2604,2607,2610,2613],{},[90,2594,2595],{},"8",[90,2597,2598],{},"BS",[90,2600,2601],{},"40",[90,2603,898],{},[90,2605,2606],{},"72",[90,2608,2609],{},"H",[90,2611,2612],{},"104",[90,2614,2615],{},"h",[74,2617,2618,2621,2624,2627,2630,2633,2636,2639],{},[90,2619,2620],{},"9",[90,2622,2623],{},"HT",[90,2625,2626],{},"41",[90,2628,2629],{},")",[90,2631,2632],{},"73",[90,2634,2635],{},"I",[90,2637,2638],{},"105",[90,2640,2641],{},"i",[74,2643,2644,2647,2650,2653,2656,2659,2662,2665],{},[90,2645,2646],{},"10",[90,2648,2649],{},"LF",[90,2651,2652],{},"42",[90,2654,2655],{},"*",[90,2657,2658],{},"74",[90,2660,2661],{},"J",[90,2663,2664],{},"106",[90,2666,2667],{},"j",[74,2669,2670,2673,2676,2679,2682,2685,2688,2691],{},[90,2671,2672],{},"11",[90,2674,2675],{},"VT",[90,2677,2678],{},"43",[90,2680,2681],{},"+",[90,2683,2684],{},"75",[90,2686,2687],{},"K",[90,2689,2690],{},"107",[90,2692,2693],{},"k",[74,2695,2696,2699,2702,2705,2707,2710,2713,2716],{},[90,2697,2698],{},"12",[90,2700,2701],{},"FF",[90,2703,2704],{},"44",[90,2706,2578],{},[90,2708,2709],{},"76",[90,2711,2712],{},"L",[90,2714,2715],{},"108",[90,2717,2718],{},"l",[74,2720,2721,2724,2727,2730,2733,2736,2739,2742],{},[90,2722,2723],{},"13",[90,2725,2726],{},"CR",[90,2728,2729],{},"45",[90,2731,2732],{},"-",[90,2734,2735],{},"77",[90,2737,2738],{},"M",[90,2740,2741],{},"109",[90,2743,2744],{},"m",[74,2746,2747,2750,2753,2756,2759,2762,2765,2768],{},[90,2748,2749],{},"14",[90,2751,2752],{},"SO",[90,2754,2755],{},"46",[90,2757,2758],{},".",[90,2760,2761],{},"78",[90,2763,2764],{},"N",[90,2766,2767],{},"110",[90,2769,2770],{},"n",[74,2772,2773,2776,2779,2782,2785,2788,2791,2794],{},[90,2774,2775],{},"15",[90,2777,2778],{},"SI",[90,2780,2781],{},"47",[90,2783,2784],{},"\u002F",[90,2786,2787],{},"79",[90,2789,2790],{},"O",[90,2792,2793],{},"111",[90,2795,2796],{},"o",[74,2798,2799,2802,2805,2808,2810,2813,2816,2819],{},[90,2800,2801],{},"16",[90,2803,2804],{},"DLE",[90,2806,2807],{},"48",[90,2809,1154],{},[90,2811,2812],{},"80",[90,2814,2815],{},"P",[90,2817,2818],{},"112",[90,2820,19],{},[74,2822,2823,2826,2829,2832,2834,2837,2840,2843],{},[90,2824,2825],{},"17",[90,2827,2828],{},"DCI",[90,2830,2831],{},"49",[90,2833,2418],{},[90,2835,2836],{},"81",[90,2838,2839],{},"Q",[90,2841,2842],{},"113",[90,2844,2845],{},"q",[74,2847,2848,2851,2854,2857,2859,2862,2865,2868],{},[90,2849,2850],{},"18",[90,2852,2853],{},"DC2",[90,2855,2856],{},"50",[90,2858,2287],{},[90,2860,2861],{},"82",[90,2863,2864],{},"R",[90,2866,2867],{},"114",[90,2869,2870],{},"r",[74,2872,2873,2876,2879,2882,2884,2887,2890,2893],{},[90,2874,2875],{},"19",[90,2877,2878],{},"DC3",[90,2880,2881],{},"51",[90,2883,2281],{},[90,2885,2886],{},"83",[90,2888,2889],{},"S",[90,2891,2892],{},"115",[90,2894,2895],{},"s",[74,2897,2898,2901,2904,2907,2909,2912,2915,2918],{},[90,2899,2900],{},"20",[90,2902,2903],{},"DC4",[90,2905,2906],{},"52",[90,2908,2494],{},[90,2910,2911],{},"84",[90,2913,2914],{},"T",[90,2916,2917],{},"116",[90,2919,2920],{},"t",[74,2922,2923,2926,2929,2932,2934,2937,2940,2943],{},[90,2924,2925],{},"21",[90,2927,2928],{},"NAK",[90,2930,2931],{},"53",[90,2933,2519],{},[90,2935,2936],{},"85",[90,2938,2939],{},"U",[90,2941,2942],{},"117",[90,2944,2945],{},"u",[74,2947,2948,2951,2954,2957,2959,2962,2965,2968],{},[90,2949,2950],{},"22",[90,2952,2953],{},"SYN",[90,2955,2956],{},"54",[90,2958,2544],{},[90,2960,2961],{},"86",[90,2963,2964],{},"V",[90,2966,2967],{},"118",[90,2969,2970],{},"v",[74,2972,2973,2976,2979,2982,2984,2987,2990,2993],{},[90,2974,2975],{},"23",[90,2977,2978],{},"TB",[90,2980,2981],{},"55",[90,2983,2569],{},[90,2985,2986],{},"87",[90,2988,2989],{},"W",[90,2991,2992],{},"119",[90,2994,2995],{},"w",[74,2997,2998,3001,3004,3007,3009,3012,3015,3018],{},[90,2999,3000],{},"24",[90,3002,3003],{},"CAN",[90,3005,3006],{},"56",[90,3008,2595],{},[90,3010,3011],{},"88",[90,3013,3014],{},"X",[90,3016,3017],{},"120",[90,3019,3020],{},"x",[74,3022,3023,3026,3029,3032,3034,3037,3040,3043],{},[90,3024,3025],{},"25",[90,3027,3028],{},"EM",[90,3030,3031],{},"57",[90,3033,2620],{},[90,3035,3036],{},"89",[90,3038,3039],{},"Y",[90,3041,3042],{},"121",[90,3044,3045],{},"y",[74,3047,3048,3051,3054,3057,3060,3063,3066,3069],{},[90,3049,3050],{},"26",[90,3052,3053],{},"SUB",[90,3055,3056],{},"58",[90,3058,3059],{},":",[90,3061,3062],{},"90",[90,3064,3065],{},"Z",[90,3067,3068],{},"122",[90,3070,3071],{},"z",[74,3073,3074,3077,3080,3083,3085,3088,3091,3094],{},[90,3075,3076],{},"27",[90,3078,3079],{},"ESC",[90,3081,3082],{},"59",[90,3084,2265],{},[90,3086,3087],{},"91",[90,3089,3090],{},"[",[90,3092,3093],{},"123",[90,3095,3096],{},"{",[74,3098,3099,3102,3105,3108,3110,3113,3115,3118],{},[90,3100,3101],{},"28",[90,3103,3104],{},"FS",[90,3106,3107],{},"60",[90,3109,513],{},[90,3111,3112],{},"92",[90,3114,2784],{},[90,3116,3117],{},"124",[90,3119,3120],{},"|",[74,3122,3123,3126,3129,3132,3134,3137,3140,3143],{},[90,3124,3125],{},"29",[90,3127,3128],{},"GS",[90,3130,3131],{},"61",[90,3133,523],{},[90,3135,3136],{},"93",[90,3138,3139],{},"]",[90,3141,3142],{},"125",[90,3144,3145],{},"}",[74,3147,3148,3151,3154,3157,3160,3163,3166,3169],{},[90,3149,3150],{},"30",[90,3152,3153],{},"RS",[90,3155,3156],{},"62",[90,3158,3159],{},">",[90,3161,3162],{},"94",[90,3164,3165],{},"^",[90,3167,3168],{},"126",[90,3170,3171],{},"`",[74,3173,3174,3177,3180,3183,3186,3189,3191,3194],{},[90,3175,3176],{},"31",[90,3178,3179],{},"US",[90,3181,3182],{},"63",[90,3184,3185],{},"?",[90,3187,3188],{},"95",[90,3190,1727],{},[90,3192,3193],{},"127",[90,3195,3196],{},"DEL",[19,3198,3199,3200,3203],{},"ASCII 码大致由以下",[2354,3201,3202],{},"两部分组","成：",[3205,3206,3207,3214],"ul",{},[43,3208,3209,3210,3213],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2354,3211,3212],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[43,3215,3216,3217,3220],{},"ASCII 打印字符：数字 ",[2354,3218,3219],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[494,3222,3224],{"id":3223},"_134转义字符","1.3.4转义字符",[26,3226,3228],{"className":2202,"code":3227,"language":2204,"meta":32,"style":32},"\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",[34,3229,3230,3235,3251,3265,3270,3283,3288],{"__ignoreMap":32},[167,3231,3232],{"class":169,"line":170},[167,3233,3234],{"class":2268},"\u002F\u002F换行符\n",[167,3236,3237,3240,3243,3246,3248],{"class":169,"line":191},[167,3238,3239],{"class":512},"cout ",[167,3241,3242],{"class":731},"\u003C\u003C",[167,3244,3245],{"class":177},"\"hello world\u002Fn\"",[167,3247,2265],{"class":512},[167,3249,3250],{"class":2268}," \u002F\u002F就等同于如下：\n",[167,3252,3253,3255,3257,3260,3262],{"class":169,"line":205},[167,3254,3239],{"class":512},[167,3256,3242],{"class":731},[167,3258,3259],{"class":177},"\"hello world\"",[167,3261,3242],{"class":731},[167,3263,3264],{"class":512},"endl;\n",[167,3266,3267],{"class":169,"line":219},[167,3268,3269],{"class":2268},"\u002F\u002F反斜杠\n",[167,3271,3272,3274,3276,3279,3281],{"class":169,"line":230},[167,3273,3239],{"class":512},[167,3275,3242],{"class":731},[167,3277,3278],{"class":177},"\"\u002F\u002F\"",[167,3280,3242],{"class":731},[167,3282,3264],{"class":512},[167,3284,3285],{"class":169,"line":241},[167,3286,3287],{"class":2268},"\u002F\u002F水平制表符\n",[167,3289,3290,3292,3294,3297,3300,3303,3305,3308],{"class":169,"line":261},[167,3291,3239],{"class":512},[167,3293,3242],{"class":731},[167,3295,3296],{"class":177},"\"aaaa",[167,3298,3299],{"class":184},"\\t",[167,3301,3302],{"class":177},"helloworld\"",[167,3304,3242],{"class":731},[167,3306,3307],{"class":512},"endl;",[167,3309,3310],{"class":2268}," \u002F\u002F输出窗口时有对齐效果\n",[494,3312,3314],{"id":3313},"_135字符串型","1.3.5字符串型",[19,3316,3317,3318,3320],{},"char 变量名",[167,3319],{},"=\"字符串值\"",[26,3322,3324],{"className":2202,"code":3323,"language":2204,"meta":32,"style":32},"\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",[34,3325,3326,3331,3336,3341,3346,3360,3373,3378,3383,3394],{"__ignoreMap":32},[167,3327,3328],{"class":169,"line":170},[167,3329,3330],{"class":2268},"\u002F\u002Fc风格字符串\n",[167,3332,3333],{"class":169,"line":191},[167,3334,3335],{"class":2268},"\u002F\u002F注意事项：\n",[167,3337,3338],{"class":169,"line":205},[167,3339,3340],{"class":2268},"\u002F\u002F1.char字符串名[]\n",[167,3342,3343],{"class":169,"line":219},[167,3344,3345],{"class":2268},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[167,3347,3348,3350,3353,3355,3357],{"class":169,"line":230},[167,3349,2306],{"class":731},[167,3351,3352],{"class":512}," str[]",[167,3354,523],{"class":731},[167,3356,3259],{"class":177},[167,3358,3359],{"class":512},";\n",[167,3361,3362,3364,3366,3369,3371],{"class":169,"line":241},[167,3363,3239],{"class":512},[167,3365,3242],{"class":731},[167,3367,3368],{"class":512},"str",[167,3370,3242],{"class":731},[167,3372,3264],{"class":512},[167,3374,3375],{"class":169,"line":261},[167,3376,3377],{"class":2268},"\u002F\u002Fc++风格字符串\n",[167,3379,3380],{"class":169,"line":773},[167,3381,3382],{"class":2268},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[167,3384,3385,3388,3390,3392],{"class":169,"line":779},[167,3386,3387],{"class":512},"string str2",[167,3389,523],{"class":731},[167,3391,3259],{"class":177},[167,3393,3359],{"class":512},[167,3395,3396,3398,3400,3403,3405],{"class":169,"line":785},[167,3397,3239],{"class":512},[167,3399,3242],{"class":731},[167,3401,3402],{"class":512},"str2",[167,3404,3242],{"class":731},[167,3406,3264],{"class":512},[494,3408,3410],{"id":3409},"_136布尔类型bool","1.3.6布尔类型bool",[26,3412,3414],{"className":2202,"code":3413,"language":2204,"meta":32,"style":32},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[34,3415,3416,3431],{"__ignoreMap":32},[167,3417,3418,3421,3424,3426,3429],{"class":169,"line":170},[167,3419,3420],{"class":731},"bool",[167,3422,3423],{"class":512}," flag",[167,3425,523],{"class":731},[167,3427,3428],{"class":184},"true",[167,3430,3359],{"class":512},[167,3432,3433,3436,3439,3442,3444,3446],{"class":169,"line":191},[167,3434,3435],{"class":512},"cout",[167,3437,3438],{"class":731},"\u003C\u003Csizeof",[167,3440,3441],{"class":512},"(flag)",[167,3443,3242],{"class":731},[167,3445,3307],{"class":512},[167,3447,3448],{"class":2268}," \u002F\u002F查看布尔占内存空间\n",[14,3450,3452],{"id":3451},"_14键盘输入cin","1.4键盘输入cin",[26,3454,3456],{"className":2202,"code":3455,"language":2204,"meta":32,"style":32},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[34,3457,3458,3471,3488,3499],{"__ignoreMap":32},[167,3459,3460,3462,3465,3467,3469],{"class":169,"line":170},[167,3461,2216],{"class":731},[167,3463,3464],{"class":512}," a",[167,3466,523],{"class":731},[167,3468,1154],{"class":184},[167,3470,3359],{"class":512},[167,3472,3473,3475,3477,3480,3482,3484,3486],{"class":169,"line":191},[167,3474,3435],{"class":512},[167,3476,3242],{"class":731},[167,3478,3479],{"class":177},"\"请给整型变量a赋值\"",[167,3481,3242],{"class":731},[167,3483,2439],{"class":512},[167,3485,3242],{"class":731},[167,3487,3264],{"class":512},[167,3489,3490,3493,3496],{"class":169,"line":205},[167,3491,3492],{"class":512},"cin ",[167,3494,3495],{"class":731},">>",[167,3497,3498],{"class":512}," a;\n",[167,3500,3501,3503,3505,3508,3511,3513,3515],{"class":169,"line":219},[167,3502,3239],{"class":512},[167,3504,3242],{"class":731},[167,3506,3507],{"class":177}," \"整型变量a=\"",[167,3509,3510],{"class":731}," \u003C\u003C",[167,3512,2439],{"class":512},[167,3514,3242],{"class":731},[167,3516,3264],{"class":512},[14,3518,3520],{"id":3519},"_15运算符","1.5运算符",[494,3522,3524],{"id":3523},"_151算术运算符","1.5.1算术运算符",[19,3526,3527,3531],{},[3528,3529],"img",{"alt":32,"src":3530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[40,3533,3534,3537,3540],{},[43,3535,3536],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[43,3538,3539],{},"两个小数不可以做取模运算",[43,3541,3542],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[494,3544,3546],{"id":3545},"_152赋值运算符","1.5.2赋值运算符",[19,3548,3549],{},[3528,3550],{"alt":32,"src":3551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[494,3553,3555],{"id":3554},"_153比较运算符","1.5.3比较运算符",[19,3557,3558],{},[3528,3559],{"alt":32,"src":3560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[494,3562,3564],{"id":3563},"_154逻辑运算符","1.5.4逻辑运算符",[19,3566,3567],{},[3528,3568],{"alt":32,"src":3569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3571,3573],{"id":3572},"_16程序流程结构","1.6程序流程结构",[494,3575,3577],{"id":3576},"_161选择结构","1.6.1选择结构",[40,3579,3580],{},[43,3581,3582],{},"if语句\n单行、多行、多条件if语句",[26,3584,3586],{"className":2202,"code":3585,"language":2204,"meta":32,"style":32},"\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",[34,3587,3588,3593,3607,3612,3626,3631,3636,3645,3658,3662,3675,3679,3684,3688,3701,3705,3710,3730,3734,3747,3751,3779,3783,3799,3803,3807,3811,3824,3828],{"__ignoreMap":32},[167,3589,3590],{"class":169,"line":170},[167,3591,3592],{"class":2268},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[167,3594,3595,3597,3600,3602,3605],{"class":169,"line":191},[167,3596,1035],{"class":731},[167,3598,3599],{"class":512},"(score",[167,3601,3159],{"class":731},[167,3603,3604],{"class":184},"600",[167,3606,873],{"class":512},[167,3608,3609],{"class":169,"line":205},[167,3610,3611],{"class":512},"{\n",[167,3613,3614,3617,3619,3622,3624],{"class":169,"line":219},[167,3615,3616],{"class":512},"    cout",[167,3618,3242],{"class":731},[167,3620,3621],{"class":177},"'这是单行if语句'",[167,3623,3242],{"class":731},[167,3625,3264],{"class":512},[167,3627,3628],{"class":169,"line":230},[167,3629,3630],{"class":512},"}\n",[167,3632,3633],{"class":169,"line":241},[167,3634,3635],{"class":2268},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[167,3637,3638,3640,3642],{"class":169,"line":261},[167,3639,3492],{"class":512},[167,3641,3495],{"class":731},[167,3643,3644],{"class":512}," score\n",[167,3646,3647,3649,3651,3654,3656],{"class":169,"line":773},[167,3648,1035],{"class":731},[167,3650,3599],{"class":512},[167,3652,3653],{"class":731},"\u003C=",[167,3655,3604],{"class":184},[167,3657,873],{"class":512},[167,3659,3660],{"class":169,"line":779},[167,3661,3611],{"class":512},[167,3663,3664,3666,3668,3671,3673],{"class":169,"line":785},[167,3665,3616],{"class":512},[167,3667,3495],{"class":731},[167,3669,3670],{"class":177},"\"小于等于600\"",[167,3672,3242],{"class":731},[167,3674,3264],{"class":512},[167,3676,3677],{"class":169,"line":790},[167,3678,3630],{"class":512},[167,3680,3681],{"class":169,"line":796},[167,3682,3683],{"class":731},"else\n",[167,3685,3686],{"class":169,"line":802},[167,3687,3611],{"class":512},[167,3689,3690,3692,3694,3697,3699],{"class":169,"line":808},[167,3691,3616],{"class":512},[167,3693,3495],{"class":731},[167,3695,3696],{"class":177},"\"大于600\"",[167,3698,3495],{"class":731},[167,3700,3264],{"class":512},[167,3702,3703],{"class":169,"line":814},[167,3704,3630],{"class":512},[167,3706,3707],{"class":169,"line":820},[167,3708,3709],{"class":2268},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[167,3711,3712,3714,3717,3719,3721,3724,3726,3728],{"class":169,"line":826},[167,3713,1035],{"class":731},[167,3715,3716],{"class":512}," (",[167,3718,1154],{"class":184},[167,3720,513],{"class":731},[167,3722,3723],{"class":512},"num",[167,3725,513],{"class":731},[167,3727,981],{"class":184},[167,3729,873],{"class":512},[167,3731,3732],{"class":169,"line":832},[167,3733,3611],{"class":512},[167,3735,3736,3738,3740,3743,3745],{"class":169,"line":837},[167,3737,3616],{"class":512},[167,3739,3242],{"class":731},[167,3741,3742],{"class":177},"\"小于100\"",[167,3744,3242],{"class":731},[167,3746,3264],{"class":512},[167,3748,3749],{"class":169,"line":842},[167,3750,3630],{"class":512},[167,3752,3753,3756,3759,3762,3765,3767,3770,3772,3774,3777],{"class":169,"line":860},[167,3754,3755],{"class":731},"else",[167,3757,3758],{"class":731}," if",[167,3760,3761],{"class":512}," (nmu",[167,3763,3764],{"class":731},">=",[167,3766,981],{"class":184},[167,3768,3769],{"class":731},"&&",[167,3771,3723],{"class":512},[167,3773,513],{"class":731},[167,3775,3776],{"class":184},"200",[167,3778,873],{"class":512},[167,3780,3781],{"class":169,"line":876},[167,3782,3611],{"class":512},[167,3784,3785,3787,3789,3792,3794,3796],{"class":169,"line":887},[167,3786,3616],{"class":512},[167,3788,3242],{"class":731},[167,3790,3791],{"class":177},"\"不小于100且小于200\"",[167,3793,3242],{"class":731},[167,3795,3307],{"class":512},[167,3797,3798],{"class":2268}," \u002F\u002F可以无限else if,python中是elif：\n",[167,3800,3801],{"class":169,"line":892},[167,3802,3630],{"class":512},[167,3804,3805],{"class":169,"line":907},[167,3806,3683],{"class":731},[167,3808,3809],{"class":169,"line":920},[167,3810,3611],{"class":512},[167,3812,3813,3815,3817,3820,3822],{"class":169,"line":933},[167,3814,3616],{"class":512},[167,3816,3242],{"class":731},[167,3818,3819],{"class":177},"\"不小于200\"",[167,3821,3242],{"class":731},[167,3823,3264],{"class":512},[167,3825,3826],{"class":169,"line":946},[167,3827,3630],{"class":512},[167,3829,3830],{"class":169,"line":959},[167,3831,3832],{"class":2268},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[40,3834,3835],{"start":191},[43,3836,3837],{},"三目运算符",[26,3839,3841],{"className":2202,"code":3840,"language":2204,"meta":32,"style":32},"\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",[34,3842,3843,3848,3853,3879,3901,3918,3923,3946,3961],{"__ignoreMap":32},[167,3844,3845],{"class":169,"line":170},[167,3846,3847],{"class":2268},"\u002F\u002F创建三个变量a,b,c\n",[167,3849,3850],{"class":169,"line":191},[167,3851,3852],{"class":2268},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[167,3854,3855,3857,3859,3861,3863,3866,3868,3870,3873,3875,3877],{"class":169,"line":205},[167,3856,2216],{"class":731},[167,3858,3464],{"class":512},[167,3860,523],{"class":731},[167,3862,2900],{"class":184},[167,3864,3865],{"class":512},",b",[167,3867,523],{"class":731},[167,3869,2646],{"class":184},[167,3871,3872],{"class":512},",c",[167,3874,523],{"class":731},[167,3876,1154],{"class":184},[167,3878,3359],{"class":512},[167,3880,3881,3883,3885,3888,3890,3892,3894,3896,3898],{"class":169,"line":219},[167,3882,2489],{"class":512},[167,3884,523],{"class":731},[167,3886,3887],{"class":512},"(a",[167,3889,3159],{"class":731},[167,3891,2464],{"class":512},[167,3893,3185],{"class":731},[167,3895,2439],{"class":512},[167,3897,3059],{"class":731},[167,3899,3900],{"class":512},"b)\n",[167,3902,3903,3905,3907,3910,3912,3914,3916],{"class":169,"line":230},[167,3904,3435],{"class":512},[167,3906,3242],{"class":731},[167,3908,3909],{"class":177},"\"c=\"",[167,3911,3242],{"class":731},[167,3913,2489],{"class":512},[167,3915,3242],{"class":731},[167,3917,3264],{"class":512},[167,3919,3920],{"class":169,"line":241},[167,3921,3922],{"class":2268},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[167,3924,3925,3927,3929,3931,3933,3935,3937,3940,3942,3944],{"class":169,"line":261},[167,3926,3887],{"class":512},[167,3928,3159],{"class":731},[167,3930,2464],{"class":512},[167,3932,3185],{"class":731},[167,3934,2439],{"class":512},[167,3936,3059],{"class":731},[167,3938,3939],{"class":512},"b)",[167,3941,523],{"class":731},[167,3943,981],{"class":184},[167,3945,3359],{"class":512},[167,3947,3948,3950,3952,3954,3956,3958],{"class":169,"line":773},[167,3949,3435],{"class":512},[167,3951,3242],{"class":731},[167,3953,2439],{"class":512},[167,3955,3242],{"class":731},[167,3957,3307],{"class":512},[167,3959,3960],{"class":2268}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[167,3962,3963,3965,3967,3969,3971,3973],{"class":169,"line":779},[167,3964,3435],{"class":512},[167,3966,3242],{"class":731},[167,3968,2464],{"class":512},[167,3970,3242],{"class":731},[167,3972,3307],{"class":512},[167,3974,3975],{"class":2268}," \u002F\u002F10   a>b,b还是原值\n",[40,3977,3978],{"start":205},[43,3979,3980],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,3982,3984],{"className":2202,"code":3983,"language":2204,"meta":32,"style":32},"\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",[34,3985,3986,3991,3999,4012,4021,4025,4039,4052,4062,4070,4075,4100,4121,4143,4164,4186,4207,4227,4232],{"__ignoreMap":32},[167,3987,3988],{"class":169,"line":170},[167,3989,3990],{"class":2268},"\u002F\u002F案例-电影打分\n",[167,3992,3993,3996],{"class":169,"line":191},[167,3994,3995],{"class":731},"#include",[167,3997,3998],{"class":177},"\u003Ciostream>\n",[167,4000,4001,4004,4007,4010],{"class":169,"line":205},[167,4002,4003],{"class":731},"using",[167,4005,4006],{"class":731}," namespace",[167,4008,4009],{"class":173}," std",[167,4011,3359],{"class":512},[167,4013,4014,4016,4018],{"class":169,"line":219},[167,4015,2216],{"class":731},[167,4017,848],{"class":173},[167,4019,4020],{"class":512},"()\n",[167,4022,4023],{"class":169,"line":230},[167,4024,3611],{"class":512},[167,4026,4027,4030,4033,4035,4037],{"class":169,"line":241},[167,4028,4029],{"class":731},"    int",[167,4031,4032],{"class":512}," score",[167,4034,523],{"class":731},[167,4036,1154],{"class":184},[167,4038,3359],{"class":512},[167,4040,4041,4043,4045,4048,4050],{"class":169,"line":261},[167,4042,3616],{"class":512},[167,4044,3242],{"class":731},[167,4046,4047],{"class":177},"\"电影打分：\"",[167,4049,3242],{"class":731},[167,4051,3264],{"class":512},[167,4053,4054,4057,4059],{"class":169,"line":773},[167,4055,4056],{"class":512},"    cin",[167,4058,3495],{"class":731},[167,4060,4061],{"class":512},"score;\n",[167,4063,4064,4067],{"class":169,"line":779},[167,4065,4066],{"class":731},"    switch",[167,4068,4069],{"class":512},"(score)\n",[167,4071,4072],{"class":169,"line":785},[167,4073,4074],{"class":512},"    {\n",[167,4076,4077,4080,4083,4086,4088,4091,4093,4095,4098],{"class":169,"line":790},[167,4078,4079],{"class":731},"        case",[167,4081,4082],{"class":184}," 10",[167,4084,4085],{"class":512},":cout",[167,4087,3242],{"class":731},[167,4089,4090],{"class":177},"\"经典\"",[167,4092,3242],{"class":731},[167,4094,3307],{"class":512},[167,4096,4097],{"class":731},"break",[167,4099,3359],{"class":512},[167,4101,4102,4104,4107,4109,4111,4113,4115,4117,4119],{"class":169,"line":796},[167,4103,4079],{"class":731},[167,4105,4106],{"class":184}," 9",[167,4108,4085],{"class":512},[167,4110,3242],{"class":731},[167,4112,4090],{"class":177},[167,4114,3242],{"class":731},[167,4116,3307],{"class":512},[167,4118,4097],{"class":731},[167,4120,3359],{"class":512},[167,4122,4123,4125,4128,4130,4132,4135,4137,4139,4141],{"class":169,"line":802},[167,4124,4079],{"class":731},[167,4126,4127],{"class":184}," 8",[167,4129,4085],{"class":512},[167,4131,3242],{"class":731},[167,4133,4134],{"class":177},"\"非常好\"",[167,4136,3242],{"class":731},[167,4138,3307],{"class":512},[167,4140,4097],{"class":731},[167,4142,3359],{"class":512},[167,4144,4145,4147,4150,4152,4154,4156,4158,4160,4162],{"class":169,"line":808},[167,4146,4079],{"class":731},[167,4148,4149],{"class":184}," 7",[167,4151,4085],{"class":512},[167,4153,3242],{"class":731},[167,4155,4134],{"class":177},[167,4157,3242],{"class":731},[167,4159,3307],{"class":512},[167,4161,4097],{"class":731},[167,4163,3359],{"class":512},[167,4165,4166,4168,4171,4173,4175,4178,4180,4182,4184],{"class":169,"line":814},[167,4167,4079],{"class":731},[167,4169,4170],{"class":184}," 6",[167,4172,4085],{"class":512},[167,4174,3242],{"class":731},[167,4176,4177],{"class":177},"\"一般\"",[167,4179,3242],{"class":731},[167,4181,3307],{"class":512},[167,4183,4097],{"class":731},[167,4185,3359],{"class":512},[167,4187,4188,4190,4193,4195,4197,4199,4201,4203,4205],{"class":169,"line":820},[167,4189,4079],{"class":731},[167,4191,4192],{"class":184}," 5",[167,4194,4085],{"class":512},[167,4196,3242],{"class":731},[167,4198,4177],{"class":177},[167,4200,3242],{"class":731},[167,4202,3307],{"class":512},[167,4204,4097],{"class":731},[167,4206,3359],{"class":512},[167,4208,4209,4212,4214,4216,4219,4221,4223,4225],{"class":169,"line":826},[167,4210,4211],{"class":731},"        default",[167,4213,4085],{"class":512},[167,4215,3242],{"class":731},[167,4217,4218],{"class":177},"\"烂片\"",[167,4220,3242],{"class":731},[167,4222,3307],{"class":512},[167,4224,4097],{"class":731},[167,4226,3359],{"class":512},[167,4228,4229],{"class":169,"line":832},[167,4230,4231],{"class":512},"    }\n",[167,4233,4234],{"class":169,"line":837},[167,4235,3630],{"class":512},[19,4237,4238],{},"if和switch区别：",[3205,4240,4241,4244],{},[43,4242,4243],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[43,4245,4246],{},"switch优点：结构清晰，执行效率高",[494,4248,4250],{"id":4249},"_162循环结构","1.6.2循环结构",[40,4252,4253],{},[43,4254,4255],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,4257,4259],{"className":2202,"code":4258,"language":2204,"meta":32,"style":32},"\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",[34,4260,4261,4266,4274,4278,4291,4305,4309,4329,4339,4343,4355],{"__ignoreMap":32},[167,4262,4263],{"class":169,"line":170},[167,4264,4265],{"class":2268},"\u002F\u002F打印0-9数字\n",[167,4267,4268,4270,4272],{"class":169,"line":191},[167,4269,2216],{"class":731},[167,4271,848],{"class":173},[167,4273,4020],{"class":512},[167,4275,4276],{"class":169,"line":205},[167,4277,3611],{"class":512},[167,4279,4280,4282,4285,4287,4289],{"class":169,"line":219},[167,4281,4029],{"class":731},[167,4283,4284],{"class":512}," num",[167,4286,523],{"class":731},[167,4288,1154],{"class":184},[167,4290,3359],{"class":512},[167,4292,4293,4296,4299,4301,4303],{"class":169,"line":230},[167,4294,4295],{"class":731},"    while",[167,4297,4298],{"class":512},"(num",[167,4300,513],{"class":731},[167,4302,2646],{"class":184},[167,4304,873],{"class":512},[167,4306,4307],{"class":169,"line":241},[167,4308,4074],{"class":512},[167,4310,4311,4314,4317,4319,4321,4323,4326],{"class":169,"line":261},[167,4312,4313],{"class":173},"       std",[167,4315,4316],{"class":512},"::cout",[167,4318,3242],{"class":731},[167,4320,3723],{"class":512},[167,4322,3242],{"class":731},[167,4324,4325],{"class":173},"std",[167,4327,4328],{"class":512},"::endl;\n",[167,4330,4331,4334,4337],{"class":169,"line":773},[167,4332,4333],{"class":512},"        num",[167,4335,4336],{"class":731},"++",[167,4338,3359],{"class":512},[167,4340,4341],{"class":169,"line":779},[167,4342,4231],{"class":512},[167,4344,4345,4348,4350,4353],{"class":169,"line":785},[167,4346,4347],{"class":173},"    system",[167,4349,898],{"class":512},[167,4351,4352],{"class":177},"\"pause\"",[167,4354,873],{"class":512},[167,4356,4357],{"class":169,"line":790},[167,4358,3630],{"class":512},[19,4360,4361],{},"注意：写好循环条件，避免死循环情况",[26,4363,4365],{"className":2202,"code":4364,"language":2204,"meta":32,"style":32},"\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",[34,4366,4367,4372,4379,4386,4396,4404,4408,4413,4440,4444,4449,4457,4484,4489,4494,4507,4517,4521,4531,4536,4549,4554,4568,4573,4588,4592,4605,4609,4614,4618,4631,4638,4642,4647,4652,4656],{"__ignoreMap":32},[167,4368,4369],{"class":169,"line":170},[167,4370,4371],{"class":2268},"\u002F\u002F循环结构-猜数字\n",[167,4373,4374,4376],{"class":169,"line":191},[167,4375,3995],{"class":731},[167,4377,4378],{"class":177}," \u003Ciostream>\n",[167,4380,4381,4383],{"class":169,"line":205},[167,4382,3995],{"class":731},[167,4384,4385],{"class":177}," \u003Cctime>\n",[167,4387,4388,4390,4392,4394],{"class":169,"line":219},[167,4389,4003],{"class":731},[167,4391,4006],{"class":731},[167,4393,4009],{"class":173},[167,4395,3359],{"class":512},[167,4397,4398,4400,4402],{"class":169,"line":230},[167,4399,2216],{"class":731},[167,4401,848],{"class":173},[167,4403,4020],{"class":512},[167,4405,4406],{"class":169,"line":241},[167,4407,3611],{"class":512},[167,4409,4410],{"class":169,"line":261},[167,4411,4412],{"class":2268},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[167,4414,4415,4418,4421,4424,4427,4429,4432,4434,4437],{"class":169,"line":773},[167,4416,4417],{"class":173},"    srand",[167,4419,4420],{"class":512},"((",[167,4422,4423],{"class":731},"unsigned",[167,4425,4426],{"class":731}," int",[167,4428,2629],{"class":512},[167,4430,4431],{"class":173},"time",[167,4433,898],{"class":512},[167,4435,4436],{"class":184},"NULL",[167,4438,4439],{"class":512},"));\n",[167,4441,4442],{"class":169,"line":779},[167,4443,741],{"emptyLinePlaceholder":740},[167,4445,4446],{"class":169,"line":785},[167,4447,4448],{"class":2268},"    \u002F\u002F1.系统生成随机数\n",[167,4450,4451,4454],{"class":169,"line":790},[167,4452,4453],{"class":2268},"    \u002F\u002Frand()%100",[167,4455,4456],{"class":2268}," \u002F\u002F生成0-99的随机数\n",[167,4458,4459,4461,4463,4465,4468,4471,4473,4475,4477,4479,4481],{"class":169,"line":796},[167,4460,4029],{"class":731},[167,4462,4284],{"class":512},[167,4464,523],{"class":731},[167,4466,4467],{"class":173},"rand",[167,4469,4470],{"class":512},"()",[167,4472,2528],{"class":731},[167,4474,981],{"class":184},[167,4476,2681],{"class":731},[167,4478,2418],{"class":184},[167,4480,2265],{"class":512},[167,4482,4483],{"class":2268}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[167,4485,4486],{"class":169,"line":802},[167,4487,4488],{"class":2268},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[167,4490,4491],{"class":169,"line":808},[167,4492,4493],{"class":2268},"    \u002F\u002F2.玩家猜测\n",[167,4495,4496,4498,4501,4503,4505],{"class":169,"line":814},[167,4497,4029],{"class":731},[167,4499,4500],{"class":512}," val",[167,4502,523],{"class":731},[167,4504,1154],{"class":184},[167,4506,3359],{"class":512},[167,4508,4509,4511,4513,4515],{"class":169,"line":820},[167,4510,4295],{"class":731},[167,4512,3716],{"class":512},[167,4514,2418],{"class":184},[167,4516,873],{"class":512},[167,4518,4519],{"class":169,"line":826},[167,4520,4074],{"class":512},[167,4522,4523,4526,4528],{"class":169,"line":832},[167,4524,4525],{"class":512},"        cin",[167,4527,3495],{"class":731},[167,4529,4530],{"class":512},"val;\n",[167,4532,4533],{"class":169,"line":837},[167,4534,4535],{"class":2268},"        \u002F\u002F3.判断玩家猜测\n",[167,4537,4538,4541,4544,4546],{"class":169,"line":842},[167,4539,4540],{"class":731},"        if",[167,4542,4543],{"class":512},"(val",[167,4545,513],{"class":731},[167,4547,4548],{"class":512},"num) \n",[167,4550,4551],{"class":169,"line":860},[167,4552,4553],{"class":512},"        {\n",[167,4555,4556,4559,4561,4564,4566],{"class":169,"line":876},[167,4557,4558],{"class":512},"            cout",[167,4560,3242],{"class":731},[167,4562,4563],{"class":177},"\"猜小了！\"",[167,4565,3242],{"class":731},[167,4567,3264],{"class":512},[167,4569,4570],{"class":169,"line":887},[167,4571,4572],{"class":512},"        }\n",[167,4574,4575,4578,4580,4583,4585],{"class":169,"line":892},[167,4576,4577],{"class":731},"        else",[167,4579,3758],{"class":731},[167,4581,4582],{"class":512}," (val",[167,4584,3159],{"class":731},[167,4586,4587],{"class":512},"num)\n",[167,4589,4590],{"class":169,"line":907},[167,4591,4553],{"class":512},[167,4593,4594,4596,4598,4601,4603],{"class":169,"line":920},[167,4595,4558],{"class":512},[167,4597,3242],{"class":731},[167,4599,4600],{"class":177},"\"猜大了！\"",[167,4602,3242],{"class":731},[167,4604,3264],{"class":512},[167,4606,4607],{"class":169,"line":933},[167,4608,4572],{"class":512},[167,4610,4611],{"class":169,"line":946},[167,4612,4613],{"class":731},"        else\n",[167,4615,4616],{"class":169,"line":959},[167,4617,4553],{"class":512},[167,4619,4620,4622,4624,4627,4629],{"class":169,"line":964},[167,4621,4558],{"class":512},[167,4623,3242],{"class":731},[167,4625,4626],{"class":177},"\"猜对了！\"",[167,4628,3242],{"class":731},[167,4630,3264],{"class":512},[167,4632,4633,4636],{"class":169,"line":987},[167,4634,4635],{"class":731},"            break",[167,4637,3359],{"class":512},[167,4639,4640],{"class":169,"line":993},[167,4641,4572],{"class":512},[167,4643,4644],{"class":169,"line":998},[167,4645,4646],{"class":2268},"        \u002F\u002F猜对 退出游戏\n",[167,4648,4649],{"class":169,"line":1010},[167,4650,4651],{"class":2268},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[167,4653,4654],{"class":169,"line":1022},[167,4655,4231],{"class":512},[167,4657,4658],{"class":169,"line":1027},[167,4659,3630],{"class":512},[40,4661,4662],{"start":191},[43,4663,4664,4665,4668],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2354,4666,4667],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,4670,4672],{"className":2202,"code":4671,"language":2204,"meta":32,"style":32},"\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",[34,4673,4674,4679,4687,4691,4703,4711,4715,4732,4739,4743,4756,4766],{"__ignoreMap":32},[167,4675,4676],{"class":169,"line":170},[167,4677,4678],{"class":2268},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[167,4680,4681,4683,4685],{"class":169,"line":191},[167,4682,2216],{"class":731},[167,4684,848],{"class":173},[167,4686,4020],{"class":512},[167,4688,4689],{"class":169,"line":205},[167,4690,3611],{"class":512},[167,4692,4693,4695,4697,4699,4701],{"class":169,"line":219},[167,4694,4029],{"class":731},[167,4696,4284],{"class":512},[167,4698,523],{"class":731},[167,4700,1154],{"class":184},[167,4702,3359],{"class":512},[167,4704,4705,4708],{"class":169,"line":230},[167,4706,4707],{"class":731},"    do",[167,4709,4710],{"class":512}," \n",[167,4712,4713],{"class":169,"line":241},[167,4714,4074],{"class":512},[167,4716,4717,4720,4722,4724,4726,4728,4730],{"class":169,"line":261},[167,4718,4719],{"class":173},"        std",[167,4721,4316],{"class":512},[167,4723,3242],{"class":731},[167,4725,3723],{"class":512},[167,4727,3242],{"class":731},[167,4729,4325],{"class":173},[167,4731,4328],{"class":512},[167,4733,4734,4736],{"class":169,"line":773},[167,4735,4333],{"class":512},[167,4737,4738],{"class":731},"++\n",[167,4740,4741],{"class":169,"line":779},[167,4742,4231],{"class":512},[167,4744,4745,4747,4749,4751,4753],{"class":169,"line":785},[167,4746,4295],{"class":731},[167,4748,4298],{"class":512},[167,4750,513],{"class":731},[167,4752,2646],{"class":184},[167,4754,4755],{"class":512},");\n",[167,4757,4758,4760,4762,4764],{"class":169,"line":790},[167,4759,4347],{"class":173},[167,4761,898],{"class":512},[167,4763,4352],{"class":177},[167,4765,4755],{"class":512},[167,4767,4768],{"class":169,"line":796},[167,4769,3630],{"class":512},[19,4771,4772],{},"案例-水仙花数",[19,4774,4775],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4777,4778],{},"例如：1^3+5^3+3^3=153",[19,4780,4781],{},"请用do...while语句，求出所有3位数的水仙花数",[26,4783,4785],{"className":2202,"code":4784,"language":2204,"meta":32,"style":32},"#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",[34,4786,4787,4793,4803,4811,4815,4820,4832,4838,4842,4847,4863,4879,4895,4910,4929,4944,4992,4996,5008,5012,5020,5024,5038],{"__ignoreMap":32},[167,4788,4789,4791],{"class":169,"line":170},[167,4790,3995],{"class":731},[167,4792,4378],{"class":177},[167,4794,4795,4797,4799,4801],{"class":169,"line":191},[167,4796,4003],{"class":731},[167,4798,4006],{"class":731},[167,4800,4009],{"class":173},[167,4802,3359],{"class":512},[167,4804,4805,4807,4809],{"class":169,"line":205},[167,4806,2216],{"class":731},[167,4808,848],{"class":173},[167,4810,4020],{"class":512},[167,4812,4813],{"class":169,"line":219},[167,4814,3611],{"class":512},[167,4816,4817],{"class":169,"line":230},[167,4818,4819],{"class":2268},"    \u002F\u002F1.先打印所有三位数字\n",[167,4821,4822,4824,4826,4828,4830],{"class":169,"line":241},[167,4823,4029],{"class":731},[167,4825,4284],{"class":512},[167,4827,523],{"class":731},[167,4829,981],{"class":184},[167,4831,3359],{"class":512},[167,4833,4834,4836],{"class":169,"line":261},[167,4835,4707],{"class":731},[167,4837,4710],{"class":512},[167,4839,4840],{"class":169,"line":773},[167,4841,4074],{"class":512},[167,4843,4844],{"class":169,"line":779},[167,4845,4846],{"class":2268},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[167,4848,4849,4852,4854,4856,4858,4860],{"class":169,"line":785},[167,4850,4851],{"class":731},"        int",[167,4853,3464],{"class":512},[167,4855,523],{"class":731},[167,4857,1154],{"class":184},[167,4859,2265],{"class":512},[167,4861,4862],{"class":2268}," \u002F\u002F个位\n",[167,4864,4865,4867,4870,4872,4874,4876],{"class":169,"line":790},[167,4866,4851],{"class":731},[167,4868,4869],{"class":512}," b",[167,4871,523],{"class":731},[167,4873,1154],{"class":184},[167,4875,2265],{"class":512},[167,4877,4878],{"class":2268}," \u002F\u002F十位\n",[167,4880,4881,4883,4886,4888,4890,4892],{"class":169,"line":796},[167,4882,4851],{"class":731},[167,4884,4885],{"class":512}," c",[167,4887,523],{"class":731},[167,4889,1154],{"class":184},[167,4891,2265],{"class":512},[167,4893,4894],{"class":2268}," \u002F\u002F百位\n",[167,4896,4897,4900,4902,4904,4906,4908],{"class":169,"line":802},[167,4898,4899],{"class":512},"        a",[167,4901,523],{"class":731},[167,4903,3723],{"class":512},[167,4905,2528],{"class":731},[167,4907,2646],{"class":184},[167,4909,3359],{"class":512},[167,4911,4912,4915,4917,4919,4921,4923,4925,4927],{"class":169,"line":808},[167,4913,4914],{"class":512},"        b",[167,4916,523],{"class":731},[167,4918,3723],{"class":512},[167,4920,2784],{"class":731},[167,4922,2646],{"class":184},[167,4924,2528],{"class":731},[167,4926,2646],{"class":184},[167,4928,3359],{"class":512},[167,4930,4931,4934,4936,4938,4940,4942],{"class":169,"line":814},[167,4932,4933],{"class":512},"        c",[167,4935,523],{"class":731},[167,4937,3723],{"class":512},[167,4939,2784],{"class":731},[167,4941,981],{"class":184},[167,4943,3359],{"class":512},[167,4945,4946,4948,4950,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978,4980,4983,4986,4989],{"class":169,"line":820},[167,4947,4540],{"class":731},[167,4949,3887],{"class":512},[167,4951,2655],{"class":731},[167,4953,2439],{"class":512},[167,4955,2655],{"class":731},[167,4957,2439],{"class":512},[167,4959,2681],{"class":731},[167,4961,2464],{"class":512},[167,4963,2655],{"class":731},[167,4965,2464],{"class":512},[167,4967,2655],{"class":731},[167,4969,2464],{"class":512},[167,4971,2681],{"class":731},[167,4973,2489],{"class":512},[167,4975,2655],{"class":731},[167,4977,2489],{"class":512},[167,4979,2655],{"class":731},[167,4981,4982],{"class":512},"c ",[167,4984,4985],{"class":731},"==",[167,4987,4988],{"class":512}," num)",[167,4990,4991],{"class":2268}," \u002F\u002F如果是水仙花数，才打印\n",[167,4993,4994],{"class":169,"line":826},[167,4995,4553],{"class":512},[167,4997,4998,5000,5002,5004,5006],{"class":169,"line":832},[167,4999,4558],{"class":512},[167,5001,3242],{"class":731},[167,5003,3723],{"class":512},[167,5005,3242],{"class":731},[167,5007,3264],{"class":512},[167,5009,5010],{"class":169,"line":837},[167,5011,4572],{"class":512},[167,5013,5014,5016,5018],{"class":169,"line":842},[167,5015,4333],{"class":512},[167,5017,4336],{"class":731},[167,5019,3359],{"class":512},[167,5021,5022],{"class":169,"line":860},[167,5023,4231],{"class":512},[167,5025,5026,5028,5031,5033,5036],{"class":169,"line":876},[167,5027,4295],{"class":731},[167,5029,5030],{"class":512}," (num ",[167,5032,513],{"class":731},[167,5034,5035],{"class":184}," 1000",[167,5037,4755],{"class":512},[167,5039,5040],{"class":169,"line":887},[167,5041,3630],{"class":512},[40,5043,5044],{"start":205},[43,5045,5046],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,5048,5050],{"className":2202,"code":5049,"language":2204,"meta":32,"style":32},"\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",[34,5051,5052,5057,5085,5089,5101,5105,5110,5121,5128,5132,5146,5150,5157,5161,5173,5182],{"__ignoreMap":32},[167,5053,5054],{"class":169,"line":170},[167,5055,5056],{"class":2268},"\u002F\u002F从数字0-9打印\n",[167,5058,5059,5061,5063,5065,5068,5070,5072,5075,5077,5079,5081,5083],{"class":169,"line":191},[167,5060,1168],{"class":731},[167,5062,898],{"class":512},[167,5064,2216],{"class":731},[167,5066,5067],{"class":512}," i",[167,5069,523],{"class":731},[167,5071,1154],{"class":184},[167,5073,5074],{"class":512},";i",[167,5076,513],{"class":731},[167,5078,2646],{"class":184},[167,5080,5074],{"class":512},[167,5082,4336],{"class":731},[167,5084,873],{"class":512},[167,5086,5087],{"class":169,"line":205},[167,5088,3611],{"class":512},[167,5090,5091,5093,5095,5097,5099],{"class":169,"line":219},[167,5092,3616],{"class":512},[167,5094,3242],{"class":731},[167,5096,2641],{"class":512},[167,5098,3242],{"class":731},[167,5100,3264],{"class":512},[167,5102,5103],{"class":169,"line":230},[167,5104,3630],{"class":512},[167,5106,5107],{"class":169,"line":241},[167,5108,5109],{"class":2268},"\u002F\u002F上式可以进行拆分\n",[167,5111,5112,5114,5116,5118],{"class":169,"line":261},[167,5113,2216],{"class":731},[167,5115,5067],{"class":512},[167,5117,523],{"class":731},[167,5119,5120],{"class":184},"0\n",[167,5122,5123,5125],{"class":169,"line":773},[167,5124,1168],{"class":731},[167,5126,5127],{"class":512},"(;;;)\n",[167,5129,5130],{"class":169,"line":779},[167,5131,3611],{"class":512},[167,5133,5134,5137,5140,5142,5144],{"class":169,"line":785},[167,5135,5136],{"class":731},"    if",[167,5138,5139],{"class":512},"(i",[167,5141,3764],{"class":731},[167,5143,2646],{"class":184},[167,5145,873],{"class":512},[167,5147,5148],{"class":169,"line":790},[167,5149,4074],{"class":512},[167,5151,5152,5155],{"class":169,"line":796},[167,5153,5154],{"class":731},"        break",[167,5156,3359],{"class":512},[167,5158,5159],{"class":169,"line":802},[167,5160,4231],{"class":512},[167,5162,5163,5165,5167,5169,5171],{"class":169,"line":808},[167,5164,3616],{"class":512},[167,5166,3242],{"class":731},[167,5168,2641],{"class":512},[167,5170,3242],{"class":731},[167,5172,3264],{"class":512},[167,5174,5175,5178,5180],{"class":169,"line":814},[167,5176,5177],{"class":512},"    i",[167,5179,4336],{"class":731},[167,5181,3359],{"class":512},[167,5183,5184],{"class":169,"line":820},[167,5185,3630],{"class":512},[19,5187,5188],{},"小练习",[26,5190,5192],{"className":2202,"code":5191,"language":2204,"meta":32,"style":32},"#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",[34,5193,5194,5200,5210,5218,5222,5227,5232,5259,5263,5268,5273,5314,5318,5331,5335,5339,5343,5355,5359,5363],{"__ignoreMap":32},[167,5195,5196,5198],{"class":169,"line":170},[167,5197,3995],{"class":731},[167,5199,3998],{"class":177},[167,5201,5202,5204,5206,5208],{"class":169,"line":191},[167,5203,4003],{"class":731},[167,5205,4006],{"class":731},[167,5207,4009],{"class":173},[167,5209,3359],{"class":512},[167,5211,5212,5214,5216],{"class":169,"line":205},[167,5213,2216],{"class":731},[167,5215,848],{"class":173},[167,5217,4020],{"class":512},[167,5219,5220],{"class":169,"line":219},[167,5221,3611],{"class":512},[167,5223,5224],{"class":169,"line":230},[167,5225,5226],{"class":2268},"    \u002F\u002F敲桌子案例\n",[167,5228,5229],{"class":169,"line":241},[167,5230,5231],{"class":2268},"    \u002F\u002F1.先输出1-100的数字\n",[167,5233,5234,5236,5238,5240,5242,5244,5246,5249,5251,5253,5255,5257],{"class":169,"line":261},[167,5235,967],{"class":731},[167,5237,898],{"class":512},[167,5239,2216],{"class":731},[167,5241,5067],{"class":512},[167,5243,523],{"class":731},[167,5245,2418],{"class":184},[167,5247,5248],{"class":512},"; i",[167,5250,3653],{"class":731},[167,5252,981],{"class":184},[167,5254,5248],{"class":512},[167,5256,4336],{"class":731},[167,5258,873],{"class":512},[167,5260,5261],{"class":169,"line":773},[167,5262,4074],{"class":512},[167,5264,5265],{"class":169,"line":779},[167,5266,5267],{"class":2268},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[167,5269,5270],{"class":169,"line":785},[167,5271,5272],{"class":2268},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[167,5274,5275,5277,5279,5281,5283,5285,5287,5290,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312],{"class":169,"line":790},[167,5276,4540],{"class":731},[167,5278,5139],{"class":512},[167,5280,2528],{"class":731},[167,5282,2569],{"class":184},[167,5284,4985],{"class":731},[167,5286,1154],{"class":184},[167,5288,5289],{"class":731}," ||",[167,5291,5067],{"class":512},[167,5293,2528],{"class":731},[167,5295,2646],{"class":184},[167,5297,4985],{"class":731},[167,5299,2569],{"class":184},[167,5301,5289],{"class":731},[167,5303,5067],{"class":512},[167,5305,2784],{"class":731},[167,5307,2646],{"class":184},[167,5309,4985],{"class":731},[167,5311,2569],{"class":184},[167,5313,873],{"class":512},[167,5315,5316],{"class":169,"line":796},[167,5317,4553],{"class":512},[167,5319,5320,5322,5324,5327,5329],{"class":169,"line":802},[167,5321,4558],{"class":512},[167,5323,3242],{"class":731},[167,5325,5326],{"class":177},"\"敲桌子\"",[167,5328,3242],{"class":731},[167,5330,3264],{"class":512},[167,5332,5333],{"class":169,"line":808},[167,5334,4572],{"class":512},[167,5336,5337],{"class":169,"line":814},[167,5338,4613],{"class":731},[167,5340,5341],{"class":169,"line":820},[167,5342,4553],{"class":512},[167,5344,5345,5347,5349,5351,5353],{"class":169,"line":826},[167,5346,4558],{"class":512},[167,5348,3242],{"class":731},[167,5350,2641],{"class":512},[167,5352,3242],{"class":731},[167,5354,3264],{"class":512},[167,5356,5357],{"class":169,"line":832},[167,5358,4572],{"class":512},[167,5360,5361],{"class":169,"line":837},[167,5362,4231],{"class":512},[167,5364,5365],{"class":169,"line":842},[167,5366,3630],{"class":512},[19,5368,5369],{},"嵌套实现星图",[26,5371,5373],{"className":2202,"code":5372,"language":2204,"meta":32,"style":32},"#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",[34,5374,5375,5381,5391,5399,5403,5429,5433,5462,5466,5477,5481,5490,5494],{"__ignoreMap":32},[167,5376,5377,5379],{"class":169,"line":170},[167,5378,3995],{"class":731},[167,5380,3998],{"class":177},[167,5382,5383,5385,5387,5389],{"class":169,"line":191},[167,5384,4003],{"class":731},[167,5386,4006],{"class":731},[167,5388,4009],{"class":173},[167,5390,3359],{"class":512},[167,5392,5393,5395,5397],{"class":169,"line":205},[167,5394,2216],{"class":731},[167,5396,848],{"class":173},[167,5398,4020],{"class":512},[167,5400,5401],{"class":169,"line":219},[167,5402,3611],{"class":512},[167,5404,5405,5407,5409,5411,5413,5415,5417,5419,5421,5423,5425,5427],{"class":169,"line":230},[167,5406,967],{"class":731},[167,5408,3716],{"class":512},[167,5410,2216],{"class":731},[167,5412,5067],{"class":512},[167,5414,523],{"class":731},[167,5416,1154],{"class":184},[167,5418,5074],{"class":512},[167,5420,513],{"class":731},[167,5422,2646],{"class":184},[167,5424,5074],{"class":512},[167,5426,4336],{"class":731},[167,5428,873],{"class":512},[167,5430,5431],{"class":169,"line":241},[167,5432,4074],{"class":512},[167,5434,5435,5438,5440,5442,5445,5447,5449,5452,5454,5456,5458,5460],{"class":169,"line":261},[167,5436,5437],{"class":731},"        for",[167,5439,3716],{"class":512},[167,5441,2216],{"class":731},[167,5443,5444],{"class":512}," j",[167,5446,523],{"class":731},[167,5448,1154],{"class":184},[167,5450,5451],{"class":512},";j",[167,5453,513],{"class":731},[167,5455,2646],{"class":184},[167,5457,5451],{"class":512},[167,5459,4336],{"class":731},[167,5461,873],{"class":512},[167,5463,5464],{"class":169,"line":773},[167,5465,4553],{"class":512},[167,5467,5468,5470,5472,5475],{"class":169,"line":779},[167,5469,4558],{"class":512},[167,5471,3242],{"class":731},[167,5473,5474],{"class":177},"\"*\"",[167,5476,3359],{"class":512},[167,5478,5479],{"class":169,"line":785},[167,5480,4572],{"class":512},[167,5482,5483,5486,5488],{"class":169,"line":790},[167,5484,5485],{"class":512},"        cout",[167,5487,3242],{"class":731},[167,5489,3264],{"class":512},[167,5491,5492],{"class":169,"line":796},[167,5493,4231],{"class":512},[167,5495,5496],{"class":169,"line":802},[167,5497,3630],{"class":512},[19,5499,5500],{},"乘法口诀表",[26,5502,5504],{"className":2202,"code":5503,"language":2204,"meta":32,"style":32},"#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",[34,5505,5506,5512,5522,5530,5534,5560,5564,5589,5593,5633,5637,5645,5649],{"__ignoreMap":32},[167,5507,5508,5510],{"class":169,"line":170},[167,5509,3995],{"class":731},[167,5511,4378],{"class":177},[167,5513,5514,5516,5518,5520],{"class":169,"line":191},[167,5515,4003],{"class":731},[167,5517,4006],{"class":731},[167,5519,4009],{"class":173},[167,5521,3359],{"class":512},[167,5523,5524,5526,5528],{"class":169,"line":205},[167,5525,2216],{"class":731},[167,5527,848],{"class":173},[167,5529,4020],{"class":512},[167,5531,5532],{"class":169,"line":219},[167,5533,3611],{"class":512},[167,5535,5536,5538,5540,5542,5544,5546,5548,5550,5552,5554,5556,5558],{"class":169,"line":230},[167,5537,967],{"class":731},[167,5539,898],{"class":512},[167,5541,2216],{"class":731},[167,5543,5067],{"class":512},[167,5545,523],{"class":731},[167,5547,2418],{"class":184},[167,5549,5074],{"class":512},[167,5551,513],{"class":731},[167,5553,2646],{"class":184},[167,5555,5074],{"class":512},[167,5557,4336],{"class":731},[167,5559,873],{"class":512},[167,5561,5562],{"class":169,"line":241},[167,5563,4074],{"class":512},[167,5565,5566,5568,5570,5572,5574,5576,5578,5580,5582,5585,5587],{"class":169,"line":261},[167,5567,5437],{"class":731},[167,5569,898],{"class":512},[167,5571,2216],{"class":731},[167,5573,5444],{"class":512},[167,5575,523],{"class":731},[167,5577,2418],{"class":184},[167,5579,5451],{"class":512},[167,5581,3653],{"class":731},[167,5583,5584],{"class":512},"i;j",[167,5586,4336],{"class":731},[167,5588,873],{"class":512},[167,5590,5591],{"class":169,"line":773},[167,5592,4553],{"class":512},[167,5594,5595,5597,5599,5601,5603,5605,5607,5609,5611,5614,5616,5618,5620,5622,5624,5627,5629,5631],{"class":169,"line":779},[167,5596,4558],{"class":512},[167,5598,3242],{"class":731},[167,5600,2667],{"class":512},[167,5602,3242],{"class":731},[167,5604,5474],{"class":177},[167,5606,3242],{"class":731},[167,5608,2641],{"class":512},[167,5610,3242],{"class":731},[167,5612,5613],{"class":177},"\"=\"",[167,5615,3242],{"class":731},[167,5617,2641],{"class":512},[167,5619,2655],{"class":731},[167,5621,2667],{"class":512},[167,5623,3242],{"class":731},[167,5625,5626],{"class":177},"'",[167,5628,3299],{"class":184},[167,5630,5626],{"class":177},[167,5632,3359],{"class":512},[167,5634,5635],{"class":169,"line":785},[167,5636,4572],{"class":512},[167,5638,5639,5641,5643],{"class":169,"line":790},[167,5640,5485],{"class":512},[167,5642,3242],{"class":731},[167,5644,3264],{"class":512},[167,5646,5647],{"class":169,"line":796},[167,5648,4231],{"class":512},[167,5650,5651],{"class":169,"line":802},[167,5652,3630],{"class":512},[494,5654,5656],{"id":5655},"_163跳出语句","1.6.3跳出语句",[40,5658,5659],{},[43,5660,5661],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5663,5664],{},"break使用时机：",[3205,5666,5667,5670,5673],{},[43,5668,5669],{},"出现在switch条件语句中，作用是终止case并跳出switch",[43,5671,5672],{},"出现在循环结构中，作用是跳出当前的循环结构",[43,5674,5675],{},"出现在嵌套循环中，跳出最近的内层循环语句",[40,5677,5678,5681],{"start":191},[43,5679,5680],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[43,5682,5683],{},"goto语句\n语法：goto 标记;",[19,5685,5686],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,5688,5690],{"className":2202,"code":5689,"language":2204,"meta":32,"style":32},"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",[34,5691,5692,5700,5704,5716,5726,5739,5752,5765,5772,5788],{"__ignoreMap":32},[167,5693,5694,5696,5698],{"class":169,"line":170},[167,5695,2216],{"class":731},[167,5697,848],{"class":173},[167,5699,4020],{"class":512},[167,5701,5702],{"class":169,"line":191},[167,5703,3611],{"class":512},[167,5705,5706,5708,5710,5712,5714],{"class":169,"line":205},[167,5707,3616],{"class":512},[167,5709,3242],{"class":731},[167,5711,1494],{"class":177},[167,5713,3242],{"class":731},[167,5715,3264],{"class":512},[167,5717,5718,5721,5724],{"class":169,"line":219},[167,5719,5720],{"class":731},"    goto",[167,5722,5723],{"class":173}," FLAG",[167,5725,3359],{"class":512},[167,5727,5728,5730,5732,5735,5737],{"class":169,"line":230},[167,5729,3616],{"class":512},[167,5731,3242],{"class":731},[167,5733,5734],{"class":177},"\"2\"",[167,5736,3242],{"class":731},[167,5738,3264],{"class":512},[167,5740,5741,5743,5745,5748,5750],{"class":169,"line":241},[167,5742,3616],{"class":512},[167,5744,3242],{"class":731},[167,5746,5747],{"class":177},"\"3\"",[167,5749,3242],{"class":731},[167,5751,3264],{"class":512},[167,5753,5754,5756,5758,5761,5763],{"class":169,"line":261},[167,5755,3616],{"class":512},[167,5757,3242],{"class":731},[167,5759,5760],{"class":177},"\"4\"",[167,5762,3242],{"class":731},[167,5764,3264],{"class":512},[167,5766,5767,5770],{"class":169,"line":773},[167,5768,5769],{"class":173},"    FLAG",[167,5771,857],{"class":512},[167,5773,5774,5776,5778,5781,5783,5785],{"class":169,"line":779},[167,5775,3616],{"class":512},[167,5777,3242],{"class":731},[167,5779,5780],{"class":177},"\"5\"",[167,5782,3242],{"class":731},[167,5784,3307],{"class":512},[167,5786,5787],{"class":2268},"\u002F\u002F跳过了2,3,4,直接到5\n",[167,5789,5790],{"class":169,"line":785},[167,5791,3630],{"class":512},[14,5793,5795],{"id":5794},"_17数组","1.7数组",[494,5797,5799],{"id":5798},"_171一维数组","1.7.1一维数组",[40,5801,5802],{},[43,5803,5804],{},"一维数组定义方式",[68,5806,5807,5817],{},[71,5808,5809],{},[74,5810,5811,5814],{},[77,5812,5813],{},"方式",[77,5815,5816],{},"注意事项",[85,5818,5819,5833,5843],{},[74,5820,5821,5827],{},[90,5822,5823,5824,2265],{},"数据类型 数组名",[167,5825,5826],{},"数组长度",[90,5828,5829,5830,5832],{},"这种方式是先定义再arr",[167,5831,2641],{},"赋值",[74,5834,5835,5840],{},[90,5836,5823,5837,5839],{},[167,5838,5826],{},"={值1,值2....};",[90,5841,5842],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[74,5844,5845,5849],{},[90,5846,5823,5847,5839],{},[167,5848],{},[90,5850,5851,5852,5854],{},"int arr",[167,5853],{},";这是不正确的，按照这样的方式定义必须有初始长度",[40,5856,5857],{"start":191},[43,5858,5859],{},"一维数组数组名\n用途：",[3205,5861,5862],{},[43,5863,5864],{},"1.可以统计整个数组在内存中的长度：",[26,5866,5868],{"className":2202,"code":5867,"language":2204,"meta":32,"style":32},"sizeof(arr);\nsizeof(arr[0]);\n",[34,5869,5870,5877],{"__ignoreMap":32},[167,5871,5872,5874],{"class":169,"line":170},[167,5873,2211],{"class":731},[167,5875,5876],{"class":512},"(arr);\n",[167,5878,5879,5881,5884,5886],{"class":169,"line":191},[167,5880,2211],{"class":731},[167,5882,5883],{"class":512},"(arr[",[167,5885,1154],{"class":184},[167,5887,5888],{"class":512},"]);\n",[3205,5890,5891],{},[43,5892,5893],{},"2.可以获取数组在内存中的首地址:",[26,5895,5897],{"className":2202,"code":5896,"language":2204,"meta":32,"style":32},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[34,5898,5899,5904,5917,5922],{"__ignoreMap":32},[167,5900,5901],{"class":169,"line":170},[167,5902,5903],{"class":2268},"\u002F\u002F查看16进制的首地址\n",[167,5905,5906,5908,5910,5913,5915],{"class":169,"line":191},[167,5907,3435],{"class":512},[167,5909,3242],{"class":731},[167,5911,5912],{"class":512},"arr",[167,5914,3242],{"class":731},[167,5916,3264],{"class":512},[167,5918,5919],{"class":169,"line":205},[167,5920,5921],{"class":2268},"\u002F\u002F看10进制数\n",[167,5923,5924,5926,5928,5930,5932,5934,5936,5939,5941,5943,5945],{"class":169,"line":219},[167,5925,3435],{"class":512},[167,5927,3242],{"class":731},[167,5929,898],{"class":512},[167,5931,2216],{"class":731},[167,5933,2629],{"class":512},[167,5935,2553],{"class":731},[167,5937,5938],{"class":512},"arr[",[167,5940,1154],{"class":184},[167,5942,3139],{"class":512},[167,5944,3242],{"class":731},[167,5946,3264],{"class":512},[19,5948,5949],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3205,5951,5952],{},[43,5953,5954],{},"1️⃣五只小猪称体重",[26,5956,5958],{"className":2202,"code":5957,"language":2204,"meta":32,"style":32},"#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",[34,5959,5960,5966,5976,5984,5988,6028,6041,6067,6071,6083,6087,6097,6101,6105,6118,6128],{"__ignoreMap":32},[167,5961,5962,5964],{"class":169,"line":170},[167,5963,3995],{"class":731},[167,5965,3998],{"class":177},[167,5967,5968,5970,5972,5974],{"class":169,"line":191},[167,5969,4003],{"class":731},[167,5971,4006],{"class":731},[167,5973,4009],{"class":173},[167,5975,3359],{"class":512},[167,5977,5978,5980,5982],{"class":169,"line":205},[167,5979,2216],{"class":731},[167,5981,848],{"class":173},[167,5983,4020],{"class":512},[167,5985,5986],{"class":169,"line":219},[167,5987,3611],{"class":512},[167,5989,5990,5992,5995,5997,5999,6001,6003,6006,6008,6011,6013,6015,6017,6020,6022,6025],{"class":169,"line":230},[167,5991,4029],{"class":731},[167,5993,5994],{"class":512}," arr[",[167,5996,2519],{"class":184},[167,5998,3139],{"class":512},[167,6000,523],{"class":731},[167,6002,3096],{"class":512},[167,6004,6005],{"class":184},"300",[167,6007,2578],{"class":512},[167,6009,6010],{"class":184},"350",[167,6012,2578],{"class":512},[167,6014,3776],{"class":184},[167,6016,2578],{"class":512},[167,6018,6019],{"class":184},"400",[167,6021,2578],{"class":512},[167,6023,6024],{"class":184},"250",[167,6026,6027],{"class":512},"};\n",[167,6029,6030,6032,6035,6037,6039],{"class":169,"line":241},[167,6031,4029],{"class":731},[167,6033,6034],{"class":512}," tmp",[167,6036,523],{"class":731},[167,6038,1154],{"class":184},[167,6040,3359],{"class":512},[167,6042,6043,6045,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065],{"class":169,"line":261},[167,6044,967],{"class":731},[167,6046,3716],{"class":512},[167,6048,2216],{"class":731},[167,6050,5067],{"class":512},[167,6052,523],{"class":731},[167,6054,1154],{"class":184},[167,6056,5074],{"class":512},[167,6058,513],{"class":731},[167,6060,2519],{"class":184},[167,6062,5074],{"class":512},[167,6064,4336],{"class":731},[167,6066,873],{"class":512},[167,6068,6069],{"class":169,"line":773},[167,6070,4074],{"class":512},[167,6072,6073,6075,6078,6080],{"class":169,"line":779},[167,6074,4540],{"class":731},[167,6076,6077],{"class":512},"(tmp",[167,6079,513],{"class":731},[167,6081,6082],{"class":512},"arr[i])\n",[167,6084,6085],{"class":169,"line":785},[167,6086,4553],{"class":512},[167,6088,6089,6092,6094],{"class":169,"line":790},[167,6090,6091],{"class":512},"            tmp",[167,6093,523],{"class":731},[167,6095,6096],{"class":512},"arr[i];\n",[167,6098,6099],{"class":169,"line":796},[167,6100,4572],{"class":512},[167,6102,6103],{"class":169,"line":802},[167,6104,4231],{"class":512},[167,6106,6107,6109,6111,6114,6116],{"class":169,"line":808},[167,6108,3616],{"class":512},[167,6110,3242],{"class":731},[167,6112,6113],{"class":512},"tmp",[167,6115,3242],{"class":731},[167,6117,3264],{"class":512},[167,6119,6120,6123,6126],{"class":169,"line":814},[167,6121,6122],{"class":731},"    return",[167,6124,6125],{"class":184}," 0",[167,6127,3359],{"class":512},[167,6129,6130],{"class":169,"line":820},[167,6131,3630],{"class":512},[3205,6133,6134],{},[43,6135,6136],{},"2️⃣数组元素逆置",[26,6138,6140],{"className":2202,"code":6139,"language":2204,"meta":32,"style":32},"\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",[34,6141,6142,6147,6153,6163,6171,6175,6210,6226,6258,6271,6276,6281,6293,6303,6313,6318,6327,6337,6342,6347,6374,6378,6394,6398,6409,6418],{"__ignoreMap":32},[167,6143,6144],{"class":169,"line":170},[167,6145,6146],{"class":2268},"\u002F\u002F元素逆置\n",[167,6148,6149,6151],{"class":169,"line":191},[167,6150,3995],{"class":731},[167,6152,3998],{"class":177},[167,6154,6155,6157,6159,6161],{"class":169,"line":205},[167,6156,4003],{"class":731},[167,6158,4006],{"class":731},[167,6160,4009],{"class":173},[167,6162,3359],{"class":512},[167,6164,6165,6167,6169],{"class":169,"line":219},[167,6166,2216],{"class":731},[167,6168,848],{"class":173},[167,6170,4020],{"class":512},[167,6172,6173],{"class":169,"line":230},[167,6174,3611],{"class":512},[167,6176,6177,6180,6182,6184,6186,6188,6190,6192,6194,6196,6198,6200,6202,6204,6206,6208],{"class":169,"line":241},[167,6178,6179],{"class":731},"   int",[167,6181,5994],{"class":512},[167,6183,2519],{"class":184},[167,6185,3139],{"class":512},[167,6187,523],{"class":731},[167,6189,3096],{"class":512},[167,6191,2418],{"class":184},[167,6193,2578],{"class":512},[167,6195,2287],{"class":184},[167,6197,2578],{"class":512},[167,6199,2281],{"class":184},[167,6201,2578],{"class":512},[167,6203,2494],{"class":184},[167,6205,2578],{"class":512},[167,6207,2519],{"class":184},[167,6209,6027],{"class":512},[167,6211,6212,6214,6217,6219,6221,6223],{"class":169,"line":261},[167,6213,6179],{"class":731},[167,6215,6216],{"class":512}," start",[167,6218,523],{"class":731},[167,6220,1154],{"class":184},[167,6222,2265],{"class":512},[167,6224,6225],{"class":2268},"\u002F\u002F起始下标\n",[167,6227,6228,6230,6233,6236,6239,6242,6244,6246,6249,6251,6253,6255],{"class":169,"line":773},[167,6229,6179],{"class":731},[167,6231,6232],{"class":512}," end",[167,6234,6235],{"class":731},"=sizeof",[167,6237,6238],{"class":512},"(arr)",[167,6240,6241],{"class":731},"\u002Fsizeof",[167,6243,5883],{"class":512},[167,6245,1154],{"class":184},[167,6247,6248],{"class":512},"])",[167,6250,2732],{"class":731},[167,6252,2418],{"class":184},[167,6254,2265],{"class":512},[167,6256,6257],{"class":2268},"\u002F\u002F结束下标\n",[167,6259,6260,6263,6266,6268],{"class":169,"line":779},[167,6261,6262],{"class":731},"   while",[167,6264,6265],{"class":512}," (start",[167,6267,513],{"class":731},[167,6269,6270],{"class":512},"end)\n",[167,6272,6273],{"class":169,"line":785},[167,6274,6275],{"class":512},"   {\n",[167,6277,6278],{"class":169,"line":790},[167,6279,6280],{"class":2268},"    \u002F\u002F实现元素互换代码\n",[167,6282,6283,6285,6288,6290],{"class":169,"line":796},[167,6284,4029],{"class":731},[167,6286,6287],{"class":512}," temp",[167,6289,523],{"class":731},[167,6291,6292],{"class":512},"arr[start];\n",[167,6294,6295,6298,6300],{"class":169,"line":802},[167,6296,6297],{"class":512},"    arr[start]",[167,6299,523],{"class":731},[167,6301,6302],{"class":512},"arr[end];\n",[167,6304,6305,6308,6310],{"class":169,"line":808},[167,6306,6307],{"class":512},"    arr[end]",[167,6309,523],{"class":731},[167,6311,6312],{"class":512},"temp;\n",[167,6314,6315],{"class":169,"line":814},[167,6316,6317],{"class":2268},"    \u002F\u002F下标更新\n",[167,6319,6320,6323,6325],{"class":169,"line":820},[167,6321,6322],{"class":512},"    start",[167,6324,4336],{"class":731},[167,6326,3359],{"class":512},[167,6328,6329,6332,6335],{"class":169,"line":826},[167,6330,6331],{"class":512},"    end",[167,6333,6334],{"class":731},"--",[167,6336,3359],{"class":512},[167,6338,6339],{"class":169,"line":832},[167,6340,6341],{"class":512},"   }\n",[167,6343,6344],{"class":169,"line":837},[167,6345,6346],{"class":2268},"   \u002F\u002F输出逆置后的数组\n",[167,6348,6349,6352,6354,6356,6358,6360,6362,6364,6366,6368,6370,6372],{"class":169,"line":842},[167,6350,6351],{"class":731},"   for",[167,6353,3716],{"class":512},[167,6355,2216],{"class":731},[167,6357,5067],{"class":512},[167,6359,523],{"class":731},[167,6361,1154],{"class":184},[167,6363,5074],{"class":512},[167,6365,513],{"class":731},[167,6367,2519],{"class":184},[167,6369,5074],{"class":512},[167,6371,4336],{"class":731},[167,6373,873],{"class":512},[167,6375,6376],{"class":169,"line":860},[167,6377,6275],{"class":512},[167,6379,6380,6382,6384,6387,6389,6392],{"class":169,"line":876},[167,6381,3616],{"class":512},[167,6383,3242],{"class":731},[167,6385,6386],{"class":512},"arr[i]",[167,6388,3242],{"class":731},[167,6390,6391],{"class":177},"\" \"",[167,6393,3359],{"class":512},[167,6395,6396],{"class":169,"line":887},[167,6397,6341],{"class":512},[167,6399,6400,6403,6405,6407],{"class":169,"line":892},[167,6401,6402],{"class":173},"   system",[167,6404,898],{"class":512},[167,6406,4352],{"class":177},[167,6408,4755],{"class":512},[167,6410,6411,6414,6416],{"class":169,"line":907},[167,6412,6413],{"class":731},"   return",[167,6415,6125],{"class":184},[167,6417,3359],{"class":512},[167,6419,6420],{"class":169,"line":920},[167,6421,3630],{"class":512},[3205,6423,6424],{},[43,6425,6426],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,6428,6430],{"className":2202,"code":6429,"language":2204,"meta":32,"style":32},"\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",[34,6431,6432,6437,6443,6453,6461,6465,6517,6530,6556,6560,6574,6578,6583,6588,6618,6622,6627,6661,6665,6670,6690,6695,6707,6723,6738,6743,6747,6751,6764,6790,6794,6808,6812,6820],{"__ignoreMap":32},[167,6433,6434],{"class":169,"line":170},[167,6435,6436],{"class":2268},"\u002F\u002F冒泡排序,升序\n",[167,6438,6439,6441],{"class":169,"line":191},[167,6440,3995],{"class":731},[167,6442,3998],{"class":177},[167,6444,6445,6447,6449,6451],{"class":169,"line":205},[167,6446,4003],{"class":731},[167,6448,4006],{"class":731},[167,6450,4009],{"class":173},[167,6452,3359],{"class":512},[167,6454,6455,6457,6459],{"class":169,"line":219},[167,6456,2216],{"class":731},[167,6458,848],{"class":173},[167,6460,4020],{"class":512},[167,6462,6463],{"class":169,"line":230},[167,6464,3611],{"class":512},[167,6466,6467,6469,6471,6473,6476,6478,6481,6483,6485,6487,6489,6491,6493,6495,6497,6499,6501,6503,6505,6507,6509,6511,6513,6515],{"class":169,"line":241},[167,6468,4029],{"class":731},[167,6470,5994],{"class":512},[167,6472,2620],{"class":184},[167,6474,6475],{"class":512},"] ",[167,6477,523],{"class":731},[167,6479,6480],{"class":512}," {",[167,6482,2494],{"class":184},[167,6484,2578],{"class":512},[167,6486,2287],{"class":184},[167,6488,2578],{"class":512},[167,6490,2595],{"class":184},[167,6492,2578],{"class":512},[167,6494,1154],{"class":184},[167,6496,2578],{"class":512},[167,6498,2519],{"class":184},[167,6500,2578],{"class":512},[167,6502,2569],{"class":184},[167,6504,2578],{"class":512},[167,6506,2418],{"class":184},[167,6508,2578],{"class":512},[167,6510,2281],{"class":184},[167,6512,2578],{"class":512},[167,6514,2620],{"class":184},[167,6516,6027],{"class":512},[167,6518,6519,6521,6523,6526,6528],{"class":169,"line":261},[167,6520,3616],{"class":512},[167,6522,3242],{"class":731},[167,6524,6525],{"class":177},"\"排序前：\"",[167,6527,3242],{"class":731},[167,6529,3264],{"class":512},[167,6531,6532,6534,6536,6538,6540,6542,6544,6546,6548,6550,6552,6554],{"class":169,"line":773},[167,6533,967],{"class":731},[167,6535,3716],{"class":512},[167,6537,2216],{"class":731},[167,6539,5067],{"class":512},[167,6541,523],{"class":731},[167,6543,1154],{"class":184},[167,6545,5074],{"class":512},[167,6547,513],{"class":731},[167,6549,2620],{"class":184},[167,6551,5074],{"class":512},[167,6553,4336],{"class":731},[167,6555,873],{"class":512},[167,6557,6558],{"class":169,"line":779},[167,6559,4074],{"class":512},[167,6561,6562,6564,6566,6568,6570,6572],{"class":169,"line":785},[167,6563,5485],{"class":512},[167,6565,3242],{"class":731},[167,6567,6386],{"class":512},[167,6569,3242],{"class":731},[167,6571,6391],{"class":177},[167,6573,3359],{"class":512},[167,6575,6576],{"class":169,"line":790},[167,6577,4231],{"class":512},[167,6579,6580],{"class":169,"line":796},[167,6581,6582],{"class":2268},"    \u002F\u002F开始冒泡排序\n",[167,6584,6585],{"class":169,"line":802},[167,6586,6587],{"class":2268},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[167,6589,6590,6592,6594,6596,6598,6600,6602,6604,6606,6608,6610,6612,6614,6616],{"class":169,"line":808},[167,6591,967],{"class":731},[167,6593,3716],{"class":512},[167,6595,2216],{"class":731},[167,6597,5067],{"class":512},[167,6599,523],{"class":731},[167,6601,1154],{"class":184},[167,6603,5074],{"class":512},[167,6605,513],{"class":731},[167,6607,2620],{"class":184},[167,6609,2732],{"class":731},[167,6611,2418],{"class":184},[167,6613,5074],{"class":512},[167,6615,4336],{"class":731},[167,6617,873],{"class":512},[167,6619,6620],{"class":169,"line":814},[167,6621,4074],{"class":512},[167,6623,6624],{"class":169,"line":820},[167,6625,6626],{"class":2268},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[167,6628,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659],{"class":169,"line":826},[167,6630,5437],{"class":731},[167,6632,3716],{"class":512},[167,6634,2216],{"class":731},[167,6636,5444],{"class":512},[167,6638,523],{"class":731},[167,6640,1154],{"class":184},[167,6642,5451],{"class":512},[167,6644,513],{"class":731},[167,6646,2620],{"class":184},[167,6648,2732],{"class":731},[167,6650,2641],{"class":512},[167,6652,2732],{"class":731},[167,6654,2418],{"class":184},[167,6656,5451],{"class":512},[167,6658,4336],{"class":731},[167,6660,873],{"class":512},[167,6662,6663],{"class":169,"line":832},[167,6664,4553],{"class":512},[167,6666,6667],{"class":169,"line":837},[167,6668,6669],{"class":2268},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[167,6671,6672,6675,6678,6680,6683,6685,6687],{"class":169,"line":842},[167,6673,6674],{"class":731},"            if",[167,6676,6677],{"class":512},"(arr[j]",[167,6679,3159],{"class":731},[167,6681,6682],{"class":512},"arr[j",[167,6684,2681],{"class":731},[167,6686,2418],{"class":184},[167,6688,6689],{"class":512},"])\n",[167,6691,6692],{"class":169,"line":860},[167,6693,6694],{"class":512},"            {\n",[167,6696,6697,6700,6702,6704],{"class":169,"line":876},[167,6698,6699],{"class":731},"                int",[167,6701,6287],{"class":512},[167,6703,523],{"class":731},[167,6705,6706],{"class":512},"arr[j];\n",[167,6708,6709,6712,6714,6716,6718,6720],{"class":169,"line":887},[167,6710,6711],{"class":512},"                arr[j]",[167,6713,523],{"class":731},[167,6715,6682],{"class":512},[167,6717,2681],{"class":731},[167,6719,2418],{"class":184},[167,6721,6722],{"class":512},"];\n",[167,6724,6725,6728,6730,6732,6734,6736],{"class":169,"line":892},[167,6726,6727],{"class":512},"                arr[j",[167,6729,2681],{"class":731},[167,6731,2418],{"class":184},[167,6733,3139],{"class":512},[167,6735,523],{"class":731},[167,6737,6312],{"class":512},[167,6739,6740],{"class":169,"line":907},[167,6741,6742],{"class":512},"            }\n",[167,6744,6745],{"class":169,"line":920},[167,6746,4572],{"class":512},[167,6748,6749],{"class":169,"line":933},[167,6750,4231],{"class":512},[167,6752,6753,6755,6757,6760,6762],{"class":169,"line":946},[167,6754,3616],{"class":512},[167,6756,3242],{"class":731},[167,6758,6759],{"class":177},"\"排序后：\"",[167,6761,3242],{"class":731},[167,6763,3264],{"class":512},[167,6765,6766,6768,6770,6772,6774,6776,6778,6780,6782,6784,6786,6788],{"class":169,"line":959},[167,6767,967],{"class":731},[167,6769,3716],{"class":512},[167,6771,2216],{"class":731},[167,6773,5067],{"class":512},[167,6775,523],{"class":731},[167,6777,1154],{"class":184},[167,6779,5074],{"class":512},[167,6781,513],{"class":731},[167,6783,2620],{"class":184},[167,6785,5074],{"class":512},[167,6787,4336],{"class":731},[167,6789,873],{"class":512},[167,6791,6792],{"class":169,"line":964},[167,6793,4074],{"class":512},[167,6795,6796,6798,6800,6802,6804,6806],{"class":169,"line":987},[167,6797,5485],{"class":512},[167,6799,3242],{"class":731},[167,6801,6386],{"class":512},[167,6803,3242],{"class":731},[167,6805,6391],{"class":177},[167,6807,3359],{"class":512},[167,6809,6810],{"class":169,"line":993},[167,6811,4231],{"class":512},[167,6813,6814,6816,6818],{"class":169,"line":998},[167,6815,6122],{"class":731},[167,6817,6125],{"class":184},[167,6819,3359],{"class":512},[167,6821,6822],{"class":169,"line":1010},[167,6823,3630],{"class":512},[494,6825,6827],{"id":6826},"_172二维数组","1.7.2二维数组",[40,6829,6830],{},[43,6831,6832],{},"二维数组的四种定义方式",[68,6834,6835,6844],{},[71,6836,6837],{},[74,6838,6839,6842],{},[77,6840,6841],{},"序号",[77,6843,5813],{},[85,6845,6846,6856,6865,6874,6883],{},[74,6847,6848,6850],{},[90,6849,2418],{},[90,6851,6852,6853,2265],{},"数据类型 数组名[行数]",[167,6854,6855],{},"列数",[74,6857,6858,6860],{},[90,6859,2287],{},[90,6861,6852,6862,6864],{},[167,6863,6855],{},"={ {数据1,数据2}，{数据3，数据4}... }",[74,6866,6867,6869],{},[90,6868,2281],{},[90,6870,6852,6871,6873],{},[167,6872,6855],{},"={数据1,数据2,数据3...}",[74,6875,6876,6878],{},[90,6877,2494],{},[90,6879,6880,6881,6873],{},"数据类型 数组名[]",[167,6882,6855],{},[74,6884,6885,6888],{},[90,6886,6887],{},"注意：不能只省略列数",[90,6889],{},[40,6891,6892],{"start":191},[43,6893,6894],{},"二维数组数组名",[3205,6896,6897,6900],{},[43,6898,6899],{},"1.查看二维数组所占内存空间",[43,6901,6902],{},"2.获取二维数组首地址",[19,6904,6905],{},"已知二维数组，求二维数组的行数与列数",[26,6907,6909],{"className":2202,"code":6908,"language":2204,"meta":32,"style":32},"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",[34,6910,6911,6919,6923,6941,6945,6963,6979,6984,7009,7042],{"__ignoreMap":32},[167,6912,6913,6915,6917],{"class":169,"line":170},[167,6914,2216],{"class":731},[167,6916,848],{"class":173},[167,6918,4020],{"class":512},[167,6920,6921],{"class":169,"line":191},[167,6922,3611],{"class":512},[167,6924,6925,6927,6929,6931,6934,6936,6938],{"class":169,"line":205},[167,6926,4029],{"class":731},[167,6928,5994],{"class":512},[167,6930,2287],{"class":184},[167,6932,6933],{"class":512},"][",[167,6935,2281],{"class":184},[167,6937,3139],{"class":512},[167,6939,6940],{"class":731},"=\n",[167,6942,6943],{"class":169,"line":219},[167,6944,4074],{"class":512},[167,6946,6947,6950,6952,6954,6956,6958,6960],{"class":169,"line":230},[167,6948,6949],{"class":512},"        {",[167,6951,2418],{"class":184},[167,6953,2578],{"class":512},[167,6955,2287],{"class":184},[167,6957,2578],{"class":512},[167,6959,2281],{"class":184},[167,6961,6962],{"class":512},"},\n",[167,6964,6965,6967,6969,6971,6973,6975,6977],{"class":169,"line":241},[167,6966,6949],{"class":512},[167,6968,2494],{"class":184},[167,6970,2578],{"class":512},[167,6972,2519],{"class":184},[167,6974,2578],{"class":512},[167,6976,2544],{"class":184},[167,6978,3630],{"class":512},[167,6980,6981],{"class":169,"line":261},[167,6982,6983],{"class":512},"    };\n",[167,6985,6986,6988,6990,6993,6995,6997,6999,7001,7003,7005,7007],{"class":169,"line":773},[167,6987,3616],{"class":512},[167,6989,3242],{"class":731},[167,6991,6992],{"class":177},"\"二维数组的行数\"",[167,6994,3438],{"class":731},[167,6996,6238],{"class":512},[167,6998,6241],{"class":731},[167,7000,5883],{"class":512},[167,7002,1154],{"class":184},[167,7004,6248],{"class":512},[167,7006,3242],{"class":731},[167,7008,3264],{"class":512},[167,7010,7011,7013,7015,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040],{"class":169,"line":779},[167,7012,3616],{"class":512},[167,7014,3242],{"class":731},[167,7016,7017],{"class":177},"\"二维数组的列数\"",[167,7019,3438],{"class":731},[167,7021,5883],{"class":512},[167,7023,1154],{"class":184},[167,7025,6248],{"class":512},[167,7027,6241],{"class":731},[167,7029,5883],{"class":512},[167,7031,1154],{"class":184},[167,7033,6933],{"class":512},[167,7035,1154],{"class":184},[167,7037,6248],{"class":512},[167,7039,3242],{"class":731},[167,7041,3264],{"class":512},[167,7043,7044],{"class":169,"line":785},[167,7045,3630],{"class":512},[19,7047,7048],{},"查看二维数组首地址",[26,7050,7052],{"className":2202,"code":7051,"language":2204,"meta":32,"style":32},"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",[34,7053,7054,7071,7097,7122],{"__ignoreMap":32},[167,7055,7056,7058,7060,7063,7065,7067,7069],{"class":169,"line":170},[167,7057,3435],{"class":512},[167,7059,3242],{"class":731},[167,7061,7062],{"class":177},"\"二维数组首地址：\"",[167,7064,3242],{"class":731},[167,7066,5912],{"class":512},[167,7068,3242],{"class":731},[167,7070,3264],{"class":512},[167,7072,7073,7075,7077,7080,7082,7084,7086,7089,7091,7093,7095],{"class":169,"line":191},[167,7074,3435],{"class":512},[167,7076,3242],{"class":731},[167,7078,7079],{"class":177},"\"二维数组第一行的首地址：\"",[167,7081,3242],{"class":731},[167,7083,898],{"class":512},[167,7085,2216],{"class":731},[167,7087,7088],{"class":512},")arr[",[167,7090,1154],{"class":184},[167,7092,3139],{"class":512},[167,7094,3242],{"class":731},[167,7096,3264],{"class":512},[167,7098,7099,7101,7103,7106,7108,7110,7112,7114,7116,7118,7120],{"class":169,"line":205},[167,7100,3435],{"class":512},[167,7102,3242],{"class":731},[167,7104,7105],{"class":177},"\"二维数组第二行的首地址：\"",[167,7107,3242],{"class":731},[167,7109,898],{"class":512},[167,7111,2216],{"class":731},[167,7113,7088],{"class":512},[167,7115,2418],{"class":184},[167,7117,3139],{"class":512},[167,7119,3242],{"class":731},[167,7121,3264],{"class":512},[167,7123,7124,7126,7128,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153,7155],{"class":169,"line":219},[167,7125,3435],{"class":512},[167,7127,3242],{"class":731},[167,7129,7130],{"class":177},"\"二维数组第一个元素的首地址:\"",[167,7132,3242],{"class":731},[167,7134,898],{"class":512},[167,7136,2216],{"class":731},[167,7138,2629],{"class":512},[167,7140,2553],{"class":731},[167,7142,5938],{"class":512},[167,7144,1154],{"class":184},[167,7146,6933],{"class":512},[167,7148,1154],{"class":184},[167,7150,3139],{"class":512},[167,7152,3242],{"class":731},[167,7154,3307],{"class":512},[167,7156,7157],{"class":2268},"\u002F\u002F对于数，要加取址符\n",[2113,7159,7160],{},"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":32,"searchDepth":191,"depth":191,"links":7162},[7163,7164,7165,7173,7174,7180,7185],{"id":2157,"depth":191,"text":2158},{"id":2164,"depth":191,"text":2165},{"id":2179,"depth":191,"text":2180,"children":7166},[7167,7168,7169,7170,7171,7172],{"id":2183,"depth":205,"text":2184},{"id":2228,"depth":205,"text":2229},{"id":2295,"depth":205,"text":2296},{"id":3223,"depth":205,"text":3224},{"id":3313,"depth":205,"text":3314},{"id":3409,"depth":205,"text":3410},{"id":3451,"depth":191,"text":3452},{"id":3519,"depth":191,"text":3520,"children":7175},[7176,7177,7178,7179],{"id":3523,"depth":205,"text":3524},{"id":3545,"depth":205,"text":3546},{"id":3554,"depth":205,"text":3555},{"id":3563,"depth":205,"text":3564},{"id":3572,"depth":191,"text":3573,"children":7181},[7182,7183,7184],{"id":3576,"depth":205,"text":3577},{"id":4249,"depth":205,"text":4250},{"id":5655,"depth":205,"text":5656},{"id":5794,"depth":191,"text":5795,"children":7186},[7187,7188],{"id":5798,"depth":205,"text":5799},{"id":6826,"depth":205,"text":6827},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2149,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7195,"title":7196,"body":7197,"description":32,"extension":2140,"meta":8295,"navigation":740,"path":8296,"seo":8297,"stem":8298,"__hash__":8299},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7198,"toc":8287},[7199,7202,7206,7214,7220,7223,7289,7293,7296,7372,7376,7379,7382,7385,7598,7602,7607,7671,7676,7743,7748,7839,7842,7947,7951,7954,7960,8104,8108,8111,8125,8128,8173,8176,8284],[10,7200,7196],{"id":7201},"_2函数",[14,7203,7205],{"id":7204},"_21函数概述","2.1函数概述",[40,7207,7208,7211],{},[43,7209,7210],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[43,7212,7213],{},"语法：",[26,7215,7218],{"className":7216,"code":7217,"language":31,"meta":32},[29],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[34,7219,7217],{"__ignoreMap":32},[19,7221,7222],{},"小案例",[26,7224,7226],{"className":2202,"code":7225,"language":2204,"meta":32,"style":32},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[34,7227,7228,7233,7257,7261,7278,7285],{"__ignoreMap":32},[167,7229,7230],{"class":169,"line":170},[167,7231,7232],{"class":2268},"\u002F\u002Fnum1,num2形参\n",[167,7234,7235,7237,7240,7242,7244,7248,7250,7252,7255],{"class":169,"line":191},[167,7236,2216],{"class":731},[167,7238,7239],{"class":173}," add",[167,7241,898],{"class":512},[167,7243,2216],{"class":731},[167,7245,7247],{"class":7246},"s4XuR"," num1",[167,7249,2578],{"class":512},[167,7251,2216],{"class":731},[167,7253,7254],{"class":7246}," num2",[167,7256,873],{"class":512},[167,7258,7259],{"class":169,"line":205},[167,7260,3611],{"class":512},[167,7262,7263,7265,7268,7270,7273,7275],{"class":169,"line":219},[167,7264,4029],{"class":731},[167,7266,7267],{"class":512}," sum",[167,7269,523],{"class":731},[167,7271,7272],{"class":512},"num1",[167,7274,2681],{"class":731},[167,7276,7277],{"class":512},"num2;\n",[167,7279,7280,7282],{"class":169,"line":230},[167,7281,6122],{"class":731},[167,7283,7284],{"class":512}," sum;\n",[167,7286,7287],{"class":169,"line":241},[167,7288,3630],{"class":512},[14,7290,7292],{"id":7291},"_22函数调用","2.2函数调用",[19,7294,7295],{},"调用刚刚写的求和函数",[26,7297,7299],{"className":2202,"code":7298,"language":2204,"meta":32,"style":32},"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",[34,7300,7301,7309,7313,7318,7330,7342,7351,7356,7368],{"__ignoreMap":32},[167,7302,7303,7305,7307],{"class":169,"line":170},[167,7304,2216],{"class":731},[167,7306,848],{"class":173},[167,7308,4020],{"class":512},[167,7310,7311],{"class":169,"line":191},[167,7312,3611],{"class":512},[167,7314,7315],{"class":169,"line":205},[167,7316,7317],{"class":2268},"    \u002F\u002Fa,b实参\n",[167,7319,7320,7322,7324,7326,7328],{"class":169,"line":219},[167,7321,4029],{"class":731},[167,7323,3464],{"class":512},[167,7325,523],{"class":731},[167,7327,1154],{"class":184},[167,7329,3359],{"class":512},[167,7331,7332,7334,7336,7338,7340],{"class":169,"line":230},[167,7333,4029],{"class":731},[167,7335,4869],{"class":512},[167,7337,523],{"class":731},[167,7339,1154],{"class":184},[167,7341,3359],{"class":512},[167,7343,7344,7346,7348],{"class":169,"line":241},[167,7345,4056],{"class":512},[167,7347,3495],{"class":731},[167,7349,7350],{"class":512},"a,b;\n",[167,7352,7353],{"class":169,"line":261},[167,7354,7355],{"class":2268},"    \u002F\u002F调用函数时，实参值传给了形参\n",[167,7357,7358,7360,7362,7365],{"class":169,"line":773},[167,7359,3616],{"class":512},[167,7361,3242],{"class":731},[167,7363,7364],{"class":173},"add",[167,7366,7367],{"class":512},"(a,b);\n",[167,7369,7370],{"class":169,"line":779},[167,7371,3630],{"class":512},[14,7373,7375],{"id":7374},"_23值传递","2.3值传递",[19,7377,7378],{},"值传递就是函数调用时实参将数值传给形参",[19,7380,7381],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7383,7384],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,7386,7388],{"className":2202,"code":7387,"language":2204,"meta":32,"style":32},"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",[34,7389,7390,7412,7416,7429,7446,7464,7475,7484,7493,7506,7522,7538,7547,7551,7559,7563,7575,7587,7594],{"__ignoreMap":32},[167,7391,7392,7395,7398,7400,7402,7404,7406,7408,7410],{"class":169,"line":170},[167,7393,7394],{"class":731},"void",[167,7396,7397],{"class":173}," swap",[167,7399,898],{"class":512},[167,7401,2216],{"class":731},[167,7403,7247],{"class":7246},[167,7405,2578],{"class":512},[167,7407,2216],{"class":731},[167,7409,7254],{"class":7246},[167,7411,873],{"class":512},[167,7413,7414],{"class":169,"line":191},[167,7415,3611],{"class":512},[167,7417,7418,7420,7422,7425,7427],{"class":169,"line":205},[167,7419,3616],{"class":512},[167,7421,3242],{"class":731},[167,7423,7424],{"class":177},"\"交换前：\"",[167,7426,3242],{"class":731},[167,7428,3264],{"class":512},[167,7430,7431,7433,7435,7438,7440,7442,7444],{"class":169,"line":219},[167,7432,3616],{"class":512},[167,7434,3242],{"class":731},[167,7436,7437],{"class":177},"\"num1=\"",[167,7439,3242],{"class":731},[167,7441,7272],{"class":512},[167,7443,3242],{"class":731},[167,7445,3264],{"class":512},[167,7447,7448,7450,7452,7455,7457,7460,7462],{"class":169,"line":230},[167,7449,3616],{"class":512},[167,7451,3242],{"class":731},[167,7453,7454],{"class":177},"\"num2=\"",[167,7456,3242],{"class":731},[167,7458,7459],{"class":512},"num2",[167,7461,3242],{"class":731},[167,7463,3264],{"class":512},[167,7465,7466,7468,7470,7472],{"class":169,"line":241},[167,7467,4029],{"class":731},[167,7469,6287],{"class":512},[167,7471,523],{"class":731},[167,7473,7474],{"class":512},"num1;\n",[167,7476,7477,7480,7482],{"class":169,"line":261},[167,7478,7479],{"class":512},"    num1",[167,7481,523],{"class":731},[167,7483,7277],{"class":512},[167,7485,7486,7489,7491],{"class":169,"line":773},[167,7487,7488],{"class":512},"    num2",[167,7490,523],{"class":731},[167,7492,6312],{"class":512},[167,7494,7495,7497,7499,7502,7504],{"class":169,"line":779},[167,7496,3616],{"class":512},[167,7498,3242],{"class":731},[167,7500,7501],{"class":177},"\"交换后：\"",[167,7503,3242],{"class":731},[167,7505,3264],{"class":512},[167,7507,7508,7510,7512,7514,7516,7518,7520],{"class":169,"line":785},[167,7509,3616],{"class":512},[167,7511,3242],{"class":731},[167,7513,7437],{"class":177},[167,7515,3242],{"class":731},[167,7517,7272],{"class":512},[167,7519,3242],{"class":731},[167,7521,3264],{"class":512},[167,7523,7524,7526,7528,7530,7532,7534,7536],{"class":169,"line":790},[167,7525,3616],{"class":512},[167,7527,3242],{"class":731},[167,7529,7454],{"class":177},[167,7531,3242],{"class":731},[167,7533,7459],{"class":512},[167,7535,3242],{"class":731},[167,7537,3264],{"class":512},[167,7539,7540,7542,7544],{"class":169,"line":796},[167,7541,6122],{"class":731},[167,7543,2265],{"class":512},[167,7545,7546],{"class":2268},"\u002F\u002F或者不写\n",[167,7548,7549],{"class":169,"line":802},[167,7550,3630],{"class":512},[167,7552,7553,7555,7557],{"class":169,"line":808},[167,7554,2216],{"class":731},[167,7556,848],{"class":173},[167,7558,4020],{"class":512},[167,7560,7561],{"class":169,"line":814},[167,7562,3611],{"class":512},[167,7564,7565,7567,7569,7571,7573],{"class":169,"line":820},[167,7566,4029],{"class":731},[167,7568,3464],{"class":512},[167,7570,523],{"class":731},[167,7572,2646],{"class":184},[167,7574,3359],{"class":512},[167,7576,7577,7579,7581,7583,7585],{"class":169,"line":826},[167,7578,4029],{"class":731},[167,7580,4869],{"class":512},[167,7582,523],{"class":731},[167,7584,2900],{"class":184},[167,7586,3359],{"class":512},[167,7588,7589,7592],{"class":169,"line":832},[167,7590,7591],{"class":173},"    swap",[167,7593,7367],{"class":512},[167,7595,7596],{"class":169,"line":837},[167,7597,3630],{"class":512},[14,7599,7601],{"id":7600},"_24函数的常见形式","2.4函数的常见形式",[40,7603,7604],{},[43,7605,7606],{},"无参无返",[26,7608,7610],{"className":2202,"code":7609,"language":2204,"meta":32,"style":32},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[34,7611,7612,7621,7625,7638,7642,7650,7654,7659,7667],{"__ignoreMap":32},[167,7613,7614,7616,7619],{"class":169,"line":170},[167,7615,7394],{"class":731},[167,7617,7618],{"class":173}," test01",[167,7620,4020],{"class":512},[167,7622,7623],{"class":169,"line":191},[167,7624,3611],{"class":512},[167,7626,7627,7629,7631,7634,7636],{"class":169,"line":205},[167,7628,3616],{"class":512},[167,7630,3242],{"class":731},[167,7632,7633],{"class":177},"\"你好\"",[167,7635,3242],{"class":731},[167,7637,3264],{"class":512},[167,7639,7640],{"class":169,"line":219},[167,7641,3630],{"class":512},[167,7643,7644,7646,7648],{"class":169,"line":230},[167,7645,2216],{"class":731},[167,7647,848],{"class":173},[167,7649,4020],{"class":512},[167,7651,7652],{"class":169,"line":241},[167,7653,3611],{"class":512},[167,7655,7656],{"class":169,"line":261},[167,7657,7658],{"class":2268},"    \u002F\u002F函数调用\n",[167,7660,7661,7664],{"class":169,"line":773},[167,7662,7663],{"class":173},"    test01",[167,7665,7666],{"class":512},"();\n",[167,7668,7669],{"class":169,"line":779},[167,7670,3630],{"class":512},[40,7672,7673],{"start":191},[43,7674,7675],{},"有参无返",[26,7677,7679],{"className":2202,"code":7678,"language":2204,"meta":32,"style":32},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[34,7680,7681,7696,7700,7712,7716,7724,7728,7739],{"__ignoreMap":32},[167,7682,7683,7685,7688,7690,7692,7694],{"class":169,"line":170},[167,7684,7394],{"class":731},[167,7686,7687],{"class":173}," test02",[167,7689,898],{"class":512},[167,7691,2216],{"class":731},[167,7693,3464],{"class":7246},[167,7695,873],{"class":512},[167,7697,7698],{"class":169,"line":191},[167,7699,3611],{"class":512},[167,7701,7702,7704,7706,7708,7710],{"class":169,"line":205},[167,7703,3616],{"class":512},[167,7705,3242],{"class":731},[167,7707,7633],{"class":177},[167,7709,3242],{"class":731},[167,7711,3264],{"class":512},[167,7713,7714],{"class":169,"line":219},[167,7715,3630],{"class":512},[167,7717,7718,7720,7722],{"class":169,"line":230},[167,7719,2216],{"class":731},[167,7721,848],{"class":173},[167,7723,4020],{"class":512},[167,7725,7726],{"class":169,"line":241},[167,7727,3611],{"class":512},[167,7729,7730,7733,7735,7737],{"class":169,"line":261},[167,7731,7732],{"class":173},"    test02",[167,7734,898],{"class":512},[167,7736,981],{"class":184},[167,7738,4755],{"class":512},[167,7740,7741],{"class":169,"line":773},[167,7742,3630],{"class":512},[40,7744,7745],{"start":205},[43,7746,7747],{},"无参有返",[26,7749,7751],{"className":2202,"code":7750,"language":2204,"meta":32,"style":32},"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",[34,7752,7753,7762,7766,7778,7787,7791,7799,7803,7816,7835],{"__ignoreMap":32},[167,7754,7755,7757,7760],{"class":169,"line":170},[167,7756,2216],{"class":731},[167,7758,7759],{"class":173}," test03",[167,7761,4020],{"class":512},[167,7763,7764],{"class":169,"line":191},[167,7765,3611],{"class":512},[167,7767,7768,7770,7772,7774,7776],{"class":169,"line":205},[167,7769,3616],{"class":512},[167,7771,3242],{"class":731},[167,7773,7633],{"class":177},[167,7775,3242],{"class":731},[167,7777,3264],{"class":512},[167,7779,7780,7782,7785],{"class":169,"line":219},[167,7781,6122],{"class":731},[167,7783,7784],{"class":184}," 100",[167,7786,3359],{"class":512},[167,7788,7789],{"class":169,"line":230},[167,7790,3630],{"class":512},[167,7792,7793,7795,7797],{"class":169,"line":241},[167,7794,2216],{"class":731},[167,7796,848],{"class":173},[167,7798,4020],{"class":512},[167,7800,7801],{"class":169,"line":261},[167,7802,3611],{"class":512},[167,7804,7805,7807,7809,7811,7814],{"class":169,"line":773},[167,7806,4029],{"class":731},[167,7808,7247],{"class":512},[167,7810,523],{"class":731},[167,7812,7813],{"class":173},"test03",[167,7815,7666],{"class":512},[167,7817,7818,7820,7822,7824,7826,7828,7830,7832],{"class":169,"line":779},[167,7819,3616],{"class":512},[167,7821,3242],{"class":731},[167,7823,7437],{"class":177},[167,7825,3242],{"class":731},[167,7827,7272],{"class":512},[167,7829,3242],{"class":731},[167,7831,3307],{"class":512},[167,7833,7834],{"class":2268}," \u002F\u002F100\n",[167,7836,7837],{"class":169,"line":785},[167,7838,3630],{"class":512},[19,7840,7841],{},"4.有参有返",[26,7843,7845],{"className":2202,"code":7844,"language":2204,"meta":32,"style":32},"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",[34,7846,7847,7862,7866,7879,7885,7889,7898,7902,7914,7928,7943],{"__ignoreMap":32},[167,7848,7849,7851,7854,7856,7858,7860],{"class":169,"line":170},[167,7850,2216],{"class":731},[167,7852,7853],{"class":173}," test04",[167,7855,898],{"class":512},[167,7857,2216],{"class":731},[167,7859,3464],{"class":7246},[167,7861,873],{"class":512},[167,7863,7864],{"class":169,"line":191},[167,7865,3611],{"class":512},[167,7867,7868,7870,7872,7875,7877],{"class":169,"line":205},[167,7869,3616],{"class":512},[167,7871,3242],{"class":731},[167,7873,7874],{"class":177},"\"hello\"",[167,7876,3242],{"class":731},[167,7878,3264],{"class":512},[167,7880,7881,7883],{"class":169,"line":219},[167,7882,6122],{"class":731},[167,7884,3498],{"class":512},[167,7886,7887],{"class":169,"line":230},[167,7888,3630],{"class":512},[167,7890,7891,7893,7896],{"class":169,"line":241},[167,7892,2216],{"class":731},[167,7894,7895],{"class":173}," mian",[167,7897,4020],{"class":512},[167,7899,7900],{"class":169,"line":261},[167,7901,3611],{"class":512},[167,7903,7904,7906,7908,7910,7912],{"class":169,"line":773},[167,7905,4029],{"class":731},[167,7907,4869],{"class":512},[167,7909,523],{"class":731},[167,7911,2418],{"class":184},[167,7913,3359],{"class":512},[167,7915,7916,7918,7920,7922,7925],{"class":169,"line":779},[167,7917,4029],{"class":731},[167,7919,4885],{"class":512},[167,7921,523],{"class":731},[167,7923,7924],{"class":173},"test04",[167,7926,7927],{"class":512},"(b);\n",[167,7929,7930,7932,7934,7936,7938,7940],{"class":169,"line":785},[167,7931,3616],{"class":512},[167,7933,3242],{"class":731},[167,7935,2489],{"class":512},[167,7937,3242],{"class":731},[167,7939,3307],{"class":512},[167,7941,7942],{"class":2268}," \u002F\u002F1\n",[167,7944,7945],{"class":169,"line":790},[167,7946,3630],{"class":512},[14,7948,7950],{"id":7949},"_25函数的声明","2.5函数的声明",[19,7952,7953],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7955,7956,7957],{},"函数的",[2354,7958,7959],{},"声明可以多次，但是函数的定义只能有一次",[26,7961,7963],{"className":2202,"code":7962,"language":2204,"meta":32,"style":32},"\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",[34,7964,7965,7970,7975,8000,8009,8013,8025,8037,8053,8057,8077,8081,8100],{"__ignoreMap":32},[167,7966,7967],{"class":169,"line":170},[167,7968,7969],{"class":2268},"\u002F\u002F函数声明\n",[167,7971,7972],{"class":169,"line":191},[167,7973,7974],{"class":2268},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[167,7976,7977,7979,7982,7984,7986,7988,7990,7992,7994,7997],{"class":169,"line":205},[167,7978,2216],{"class":731},[167,7980,7981],{"class":173}," max",[167,7983,898],{"class":512},[167,7985,2216],{"class":731},[167,7987,3464],{"class":7246},[167,7989,2578],{"class":512},[167,7991,2216],{"class":731},[167,7993,4869],{"class":7246},[167,7995,7996],{"class":512},");",[167,7998,7999],{"class":2268},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[167,8001,8002,8004,8006],{"class":169,"line":219},[167,8003,2216],{"class":731},[167,8005,848],{"class":173},[167,8007,8008],{"class":512},"() \n",[167,8010,8011],{"class":169,"line":230},[167,8012,3611],{"class":512},[167,8014,8015,8017,8019,8021,8023],{"class":169,"line":241},[167,8016,4029],{"class":731},[167,8018,3464],{"class":512},[167,8020,523],{"class":731},[167,8022,2646],{"class":184},[167,8024,3359],{"class":512},[167,8026,8027,8029,8031,8033,8035],{"class":169,"line":261},[167,8028,4029],{"class":731},[167,8030,4869],{"class":512},[167,8032,523],{"class":731},[167,8034,2900],{"class":184},[167,8036,3359],{"class":512},[167,8038,8039,8041,8043,8046,8049,8051],{"class":169,"line":773},[167,8040,3616],{"class":512},[167,8042,3242],{"class":731},[167,8044,8045],{"class":173},"max",[167,8047,8048],{"class":512},"(a,b)",[167,8050,3242],{"class":731},[167,8052,3264],{"class":512},[167,8054,8055],{"class":169,"line":779},[167,8056,3630],{"class":512},[167,8058,8059,8061,8063,8065,8067,8069,8071,8073,8075],{"class":169,"line":785},[167,8060,2216],{"class":731},[167,8062,7981],{"class":173},[167,8064,898],{"class":512},[167,8066,2216],{"class":731},[167,8068,3464],{"class":7246},[167,8070,2578],{"class":512},[167,8072,2216],{"class":731},[167,8074,4869],{"class":7246},[167,8076,873],{"class":512},[167,8078,8079],{"class":169,"line":790},[167,8080,3611],{"class":512},[167,8082,8083,8085,8087,8089,8091,8093,8095,8097],{"class":169,"line":796},[167,8084,6122],{"class":731},[167,8086,3464],{"class":512},[167,8088,3159],{"class":731},[167,8090,2464],{"class":512},[167,8092,3185],{"class":731},[167,8094,2439],{"class":512},[167,8096,3059],{"class":731},[167,8098,8099],{"class":512},"b;\n",[167,8101,8102],{"class":169,"line":802},[167,8103,3630],{"class":512},[14,8105,8107],{"id":8106},"_26函数的分文件编写","2.6函数的分文件编写",[19,8109,8110],{},"4个步骤：",[3205,8112,8113,8116,8119,8122],{},[43,8114,8115],{},"1.创建后缀名为.h的头文件",[43,8117,8118],{},"2.创建后缀名为.cpp的源文件",[43,8120,8121],{},"3.在头文件中写函数的定义",[43,8123,8124],{},"4.在源文件中写函数的定义\n示例：",[19,8126,8127],{},"头文件：swap.h",[26,8129,8131],{"className":2202,"code":8130,"language":2204,"meta":32,"style":32},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[34,8132,8133,8139,8149,8153],{"__ignoreMap":32},[167,8134,8135,8137],{"class":169,"line":170},[167,8136,3995],{"class":731},[167,8138,3998],{"class":177},[167,8140,8141,8143,8145,8147],{"class":169,"line":191},[167,8142,4003],{"class":731},[167,8144,4006],{"class":731},[167,8146,4009],{"class":173},[167,8148,3359],{"class":512},[167,8150,8151],{"class":169,"line":205},[167,8152,7969],{"class":2268},[167,8154,8155,8157,8159,8161,8163,8165,8167,8169,8171],{"class":169,"line":219},[167,8156,7394],{"class":731},[167,8158,7397],{"class":173},[167,8160,898],{"class":512},[167,8162,2216],{"class":731},[167,8164,3464],{"class":7246},[167,8166,2578],{"class":512},[167,8168,2216],{"class":731},[167,8170,4869],{"class":7246},[167,8172,4755],{"class":512},[19,8174,8175],{},"源文件：swap.cpp",[26,8177,8179],{"className":2202,"code":8178,"language":2204,"meta":32,"style":32},"#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",[34,8180,8181,8188,8193,8213,8217,8228,8237,8246,8263,8280],{"__ignoreMap":32},[167,8182,8183,8185],{"class":169,"line":170},[167,8184,3995],{"class":731},[167,8186,8187],{"class":177}," \"swap.h\"\n",[167,8189,8190],{"class":169,"line":191},[167,8191,8192],{"class":2268},"\u002F\u002F函数的定义\n",[167,8194,8195,8197,8199,8201,8203,8205,8207,8209,8211],{"class":169,"line":205},[167,8196,7394],{"class":731},[167,8198,7397],{"class":173},[167,8200,898],{"class":512},[167,8202,2216],{"class":731},[167,8204,3464],{"class":7246},[167,8206,2578],{"class":512},[167,8208,2216],{"class":731},[167,8210,4869],{"class":7246},[167,8212,873],{"class":512},[167,8214,8215],{"class":169,"line":219},[167,8216,3611],{"class":512},[167,8218,8219,8221,8223,8225],{"class":169,"line":230},[167,8220,4029],{"class":731},[167,8222,6287],{"class":512},[167,8224,523],{"class":731},[167,8226,8227],{"class":512},"a;\n",[167,8229,8230,8233,8235],{"class":169,"line":241},[167,8231,8232],{"class":512},"    a",[167,8234,523],{"class":731},[167,8236,8099],{"class":512},[167,8238,8239,8242,8244],{"class":169,"line":261},[167,8240,8241],{"class":512},"    b",[167,8243,523],{"class":731},[167,8245,6312],{"class":512},[167,8247,8248,8250,8252,8255,8257,8259,8261],{"class":169,"line":773},[167,8249,3616],{"class":512},[167,8251,3242],{"class":731},[167,8253,8254],{"class":177},"\"a=\"",[167,8256,3242],{"class":731},[167,8258,2439],{"class":512},[167,8260,3242],{"class":731},[167,8262,3264],{"class":512},[167,8264,8265,8267,8269,8272,8274,8276,8278],{"class":169,"line":779},[167,8266,3616],{"class":512},[167,8268,3242],{"class":731},[167,8270,8271],{"class":177},"\"b=\"",[167,8273,3242],{"class":731},[167,8275,2464],{"class":512},[167,8277,3242],{"class":731},[167,8279,3264],{"class":512},[167,8281,8282],{"class":169,"line":785},[167,8283,3630],{"class":512},[2113,8285,8286],{},"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":32,"searchDepth":191,"depth":191,"links":8288},[8289,8290,8291,8292,8293,8294],{"id":7204,"depth":191,"text":7205},{"id":7291,"depth":191,"text":7292},{"id":7374,"depth":191,"text":7375},{"id":7600,"depth":191,"text":7601},{"id":7949,"depth":191,"text":7950},{"id":8106,"depth":191,"text":8107},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7196,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8301,"title":8302,"body":8303,"description":8310,"extension":2140,"meta":9715,"navigation":740,"path":9716,"seo":9717,"stem":9718,"__hash__":9719},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8304,"toc":9705},[8305,8308,8311,8315,8477,8481,8484,8487,8490,8493,8633,8637,8640,8643,8646,8711,8715,8720,8787,8790,8794,8797,8808,8813,8833,8836,8841,8860,8863,8867,8886,8889,8893,9128,9132,9135,9138,9141,9303,9306,9310,9313,9319,9702],[10,8306,8302],{"id":8307},"_3指针",[19,8309,8310],{},"通过指针保存一个地址，指针就是个地址",[14,8312,8314],{"id":8313},"_31定义指针","3.1定义指针",[26,8316,8318],{"className":2202,"code":8317,"language":2204,"meta":32,"style":32},"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",[34,8319,8320,8328,8332,8337,8349,8354,8362,8372,8390,8410,8414,8419,8424,8429,8443,8459,8473],{"__ignoreMap":32},[167,8321,8322,8324,8326],{"class":169,"line":170},[167,8323,2216],{"class":731},[167,8325,848],{"class":173},[167,8327,4020],{"class":512},[167,8329,8330],{"class":169,"line":191},[167,8331,3611],{"class":512},[167,8333,8334],{"class":169,"line":205},[167,8335,8336],{"class":2268},"    \u002F\u002F1.定义指针\n",[167,8338,8339,8341,8343,8345,8347],{"class":169,"line":219},[167,8340,4029],{"class":731},[167,8342,3464],{"class":512},[167,8344,523],{"class":731},[167,8346,2646],{"class":184},[167,8348,3359],{"class":512},[167,8350,8351],{"class":169,"line":230},[167,8352,8353],{"class":2268},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[167,8355,8356,8359],{"class":169,"line":241},[167,8357,8358],{"class":731},"    int*",[167,8360,8361],{"class":512},"p;\n",[167,8363,8364,8367,8370],{"class":169,"line":261},[167,8365,8366],{"class":512},"    p",[167,8368,8369],{"class":731},"=&",[167,8371,8227],{"class":512},[167,8373,8374,8376,8378,8381,8384,8386,8388],{"class":169,"line":773},[167,8375,3616],{"class":512},[167,8377,3242],{"class":731},[167,8379,8380],{"class":177},"\"a的地址为：\"",[167,8382,8383],{"class":731},"\u003C\u003C&",[167,8385,2439],{"class":512},[167,8387,3242],{"class":731},[167,8389,3264],{"class":512},[167,8391,8392,8394,8396,8399,8401,8403,8405,8407],{"class":169,"line":779},[167,8393,3616],{"class":512},[167,8395,3242],{"class":731},[167,8397,8398],{"class":177},"\"指针p为：\"",[167,8400,3242],{"class":731},[167,8402,19],{"class":512},[167,8404,3242],{"class":731},[167,8406,3307],{"class":512},[167,8408,8409],{"class":2268},"\u002F\u002F指针p表示的就是a的地址\n",[167,8411,8412],{"class":169,"line":785},[167,8413,741],{"emptyLinePlaceholder":740},[167,8415,8416],{"class":169,"line":790},[167,8417,8418],{"class":2268},"    \u002F\u002F2.使用指针\n",[167,8420,8421],{"class":169,"line":796},[167,8422,8423],{"class":2268},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[167,8425,8426],{"class":169,"line":802},[167,8427,8428],{"class":2268},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[167,8430,8431,8434,8436,8438,8441],{"class":169,"line":808},[167,8432,8433],{"class":731},"    *",[167,8435,19],{"class":512},[167,8437,523],{"class":731},[167,8439,8440],{"class":184},"1000",[167,8442,3359],{"class":512},[167,8444,8445,8447,8450,8452,8454,8456],{"class":169,"line":814},[167,8446,3616],{"class":512},[167,8448,8449],{"class":731},"\u003C\u003C*",[167,8451,19],{"class":512},[167,8453,3242],{"class":731},[167,8455,3307],{"class":512},[167,8457,8458],{"class":2268},"\u002F\u002F1000\n",[167,8460,8461,8463,8465,8467,8469,8471],{"class":169,"line":820},[167,8462,3616],{"class":512},[167,8464,3242],{"class":731},[167,8466,2439],{"class":512},[167,8468,3242],{"class":731},[167,8470,3307],{"class":512},[167,8472,8458],{"class":2268},[167,8474,8475],{"class":169,"line":826},[167,8476,3630],{"class":512},[14,8478,8480],{"id":8479},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8482,8483],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8485,8486],{},"在32位操作系统下：占用4个字节空间",[19,8488,8489],{},"在64位操作系统下：占用8个字节空间",[19,8491,8492],{},"上方是不管啥数据类型的",[26,8494,8496],{"className":2202,"code":8495,"language":2204,"meta":32,"style":32},"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",[34,8497,8498,8506,8510,8515,8527,8532,8537,8542,8555,8577,8603,8629],{"__ignoreMap":32},[167,8499,8500,8502,8504],{"class":169,"line":170},[167,8501,2216],{"class":731},[167,8503,848],{"class":173},[167,8505,4020],{"class":512},[167,8507,8508],{"class":169,"line":191},[167,8509,3611],{"class":512},[167,8511,8512],{"class":169,"line":205},[167,8513,8514],{"class":2268},"    \u002F\u002F指针所占内存空间\n",[167,8516,8517,8519,8521,8523,8525],{"class":169,"line":219},[167,8518,4029],{"class":731},[167,8520,3464],{"class":512},[167,8522,523],{"class":731},[167,8524,2646],{"class":184},[167,8526,3359],{"class":512},[167,8528,8529],{"class":169,"line":230},[167,8530,8531],{"class":2268},"    \u002F\u002Fint *p;\n",[167,8533,8534],{"class":169,"line":241},[167,8535,8536],{"class":2268},"    \u002F\u002Fp=&a;\n",[167,8538,8539],{"class":169,"line":261},[167,8540,8541],{"class":2268},"    \u002F\u002F上述可以写为以下：\n",[167,8543,8544,8546,8549,8551,8553],{"class":169,"line":773},[167,8545,4029],{"class":731},[167,8547,8548],{"class":731}," *",[167,8550,19],{"class":512},[167,8552,8369],{"class":731},[167,8554,8227],{"class":512},[167,8556,8557,8560,8562,8565,8567,8570,8572,8574],{"class":169,"line":779},[167,8558,8559],{"class":512},"    cout ",[167,8561,3242],{"class":731},[167,8563,8564],{"class":177},"\"sizeof(int *)\"",[167,8566,3438],{"class":731},[167,8568,8569],{"class":512},"(p)",[167,8571,3242],{"class":731},[167,8573,3307],{"class":512},[167,8575,8576],{"class":2268},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[167,8578,8579,8581,8583,8585,8587,8589,8591,8593,8595,8597,8600],{"class":169,"line":785},[167,8580,8559],{"class":512},[167,8582,3242],{"class":731},[167,8584,8564],{"class":177},[167,8586,3438],{"class":731},[167,8588,898],{"class":512},[167,8590,2216],{"class":731},[167,8592,8548],{"class":731},[167,8594,2629],{"class":512},[167,8596,3242],{"class":731},[167,8598,8599],{"class":512},"endl",[167,8601,8602],{"class":2268},"  \u002F\u002F4字节(32位的话)\n",[167,8604,8605,8607,8609,8612,8614,8616,8618,8620,8622,8624,8626],{"class":169,"line":790},[167,8606,8559],{"class":512},[167,8608,3242],{"class":731},[167,8610,8611],{"class":177},"\"sizeof(char *)\"",[167,8613,3438],{"class":731},[167,8615,898],{"class":512},[167,8617,2306],{"class":731},[167,8619,8548],{"class":731},[167,8621,2629],{"class":512},[167,8623,3242],{"class":731},[167,8625,3307],{"class":512},[167,8627,8628],{"class":2268}," \u002F\u002F4字节(32位的话)\n",[167,8630,8631],{"class":169,"line":796},[167,8632,3630],{"class":512},[14,8634,8636],{"id":8635},"_33空指针","3.3空指针",[19,8638,8639],{},"空指针：指针变量指向内存中编号为0的空间",[19,8641,8642],{},"用途：初始化指针变量",[19,8644,8645],{},"注意：空指针指向的内存是不可以访问的",[26,8647,8649],{"className":2202,"code":8648,"language":2204,"meta":32,"style":32},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[34,8650,8651,8659,8663,8668,8682,8687,8702,8707],{"__ignoreMap":32},[167,8652,8653,8655,8657],{"class":169,"line":170},[167,8654,2216],{"class":731},[167,8656,848],{"class":173},[167,8658,4020],{"class":512},[167,8660,8661],{"class":169,"line":191},[167,8662,3611],{"class":512},[167,8664,8665],{"class":169,"line":205},[167,8666,8667],{"class":2268},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[167,8669,8670,8672,8674,8676,8678,8680],{"class":169,"line":219},[167,8671,4029],{"class":731},[167,8673,8548],{"class":731},[167,8675,19],{"class":512},[167,8677,523],{"class":731},[167,8679,4436],{"class":184},[167,8681,3359],{"class":512},[167,8683,8684],{"class":169,"line":230},[167,8685,8686],{"class":2268},"    \u002F\u002F2.空指针不能进行访问\n",[167,8688,8689,8691,8693,8695,8697,8699],{"class":169,"line":241},[167,8690,8433],{"class":731},[167,8692,19],{"class":512},[167,8694,523],{"class":731},[167,8696,981],{"class":184},[167,8698,2265],{"class":512},[167,8700,8701],{"class":2268},"\u002F\u002F直接报错，压根不能访问\n",[167,8703,8704],{"class":169,"line":261},[167,8705,8706],{"class":2268},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[167,8708,8709],{"class":169,"line":773},[167,8710,3630],{"class":512},[14,8712,8714],{"id":8713},"_34野指针","3.4野指针",[19,8716,8717],{},[2354,8718,8719],{},"指针变量指向非法的内存空间",[26,8721,8723],{"className":2202,"code":8722,"language":2204,"meta":32,"style":32},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[34,8724,8725,8733,8737,8766,8771,8783],{"__ignoreMap":32},[167,8726,8727,8729,8731],{"class":169,"line":170},[167,8728,2216],{"class":731},[167,8730,848],{"class":173},[167,8732,4020],{"class":512},[167,8734,8735],{"class":169,"line":191},[167,8736,3611],{"class":512},[167,8738,8739,8741,8743,8745,8747,8749,8751,8753,8755,8758,8761,8763],{"class":169,"line":205},[167,8740,4029],{"class":731},[167,8742,8548],{"class":731},[167,8744,19],{"class":512},[167,8746,523],{"class":731},[167,8748,898],{"class":512},[167,8750,2216],{"class":731},[167,8752,8548],{"class":731},[167,8754,2629],{"class":512},[167,8756,8757],{"class":731},"0x",[167,8759,8760],{"class":184},"1100",[167,8762,2265],{"class":512},[167,8764,8765],{"class":2268}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[167,8767,8768],{"class":169,"line":219},[167,8769,8770],{"class":2268},"    \u002F\u002F访问野指针报错\n",[167,8772,8773,8775,8777,8779,8781],{"class":169,"line":230},[167,8774,3616],{"class":512},[167,8776,8449],{"class":731},[167,8778,19],{"class":512},[167,8780,3242],{"class":731},[167,8782,3264],{"class":512},[167,8784,8785],{"class":169,"line":241},[167,8786,3630],{"class":512},[19,8788,8789],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8791,8793],{"id":8792},"_35const修饰指针","3.5const修饰指针",[19,8795,8796],{},"三种情况：",[3205,8798,8799,8802,8805],{},[43,8800,8801],{},"const修饰指针 常量指针",[43,8803,8804],{},"const修饰常量 指针常量",[43,8806,8807],{},"const即修饰指针，又修饰常量",[40,8809,8810],{},[43,8811,8812],{},"常量指针",[26,8814,8816],{"className":2202,"code":8815,"language":2204,"meta":32,"style":32},"const int *p=&a;\n",[34,8817,8818],{"__ignoreMap":32},[167,8819,8820,8823,8825,8827,8829,8831],{"class":169,"line":170},[167,8821,8822],{"class":731},"const",[167,8824,4426],{"class":731},[167,8826,8548],{"class":731},[167,8828,19],{"class":512},[167,8830,8369],{"class":731},[167,8832,8227],{"class":512},[19,8834,8835],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[40,8837,8838],{"start":191},[43,8839,8840],{},"指针常量",[26,8842,8844],{"className":2202,"code":8843,"language":2204,"meta":32,"style":32},"int *const p=&a;\n",[34,8845,8846],{"__ignoreMap":32},[167,8847,8848,8850,8853,8856,8858],{"class":169,"line":170},[167,8849,2216],{"class":731},[167,8851,8852],{"class":731}," *const",[167,8854,8855],{"class":512}," p",[167,8857,8369],{"class":731},[167,8859,8227],{"class":512},[19,8861,8862],{},"指针的指向不可以改，指针指向的值可以改",[40,8864,8865],{"start":205},[43,8866,8807],{},[26,8868,8870],{"className":2202,"code":8869,"language":2204,"meta":32,"style":32},"const int *const p=&a;\n",[34,8871,8872],{"__ignoreMap":32},[167,8873,8874,8876,8878,8880,8882,8884],{"class":169,"line":170},[167,8875,8822],{"class":731},[167,8877,4426],{"class":731},[167,8879,8852],{"class":731},[167,8881,8855],{"class":512},[167,8883,8369],{"class":731},[167,8885,8227],{"class":512},[19,8887,8888],{},"指针的指向和指针指向的值都不可以改变",[14,8890,8892],{"id":8891},"_36指针和数组","3.6指针和数组",[26,8894,8896],{"className":2202,"code":8895,"language":2204,"meta":32,"style":32},"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",[34,8897,8898,8906,8910,8915,8969,8990,9006,9022,9033,9050,9055,9069,9095,9099,9111,9120,9124],{"__ignoreMap":32},[167,8899,8900,8902,8904],{"class":169,"line":170},[167,8901,2216],{"class":731},[167,8903,848],{"class":173},[167,8905,4020],{"class":512},[167,8907,8908],{"class":169,"line":191},[167,8909,3611],{"class":512},[167,8911,8912],{"class":169,"line":205},[167,8913,8914],{"class":2268},"    \u002F\u002F利用指针访问数组中的元素\n",[167,8916,8917,8919,8921,8923,8925,8927,8929,8931,8933,8935,8937,8939,8941,8943,8945,8947,8949,8951,8953,8955,8957,8959,8961,8963,8965,8967],{"class":169,"line":219},[167,8918,4029],{"class":731},[167,8920,5994],{"class":512},[167,8922,2646],{"class":184},[167,8924,3139],{"class":512},[167,8926,523],{"class":731},[167,8928,3096],{"class":512},[167,8930,2418],{"class":184},[167,8932,2578],{"class":512},[167,8934,2287],{"class":184},[167,8936,2578],{"class":512},[167,8938,2281],{"class":184},[167,8940,2578],{"class":512},[167,8942,2494],{"class":184},[167,8944,2578],{"class":512},[167,8946,2519],{"class":184},[167,8948,2578],{"class":512},[167,8950,2544],{"class":184},[167,8952,2578],{"class":512},[167,8954,2569],{"class":184},[167,8956,2578],{"class":512},[167,8958,2595],{"class":184},[167,8960,2578],{"class":512},[167,8962,2620],{"class":184},[167,8964,2578],{"class":512},[167,8966,2646],{"class":184},[167,8968,6027],{"class":512},[167,8970,8971,8973,8975,8978,8980,8982,8984,8986,8988],{"class":169,"line":230},[167,8972,3616],{"class":512},[167,8974,3242],{"class":731},[167,8976,8977],{"class":177},"\"数组的第一个元素为：\"",[167,8979,3242],{"class":731},[167,8981,5938],{"class":512},[167,8983,1154],{"class":184},[167,8985,3139],{"class":512},[167,8987,3242],{"class":731},[167,8989,3264],{"class":512},[167,8991,8992,8994,8996,8998,9000,9003],{"class":169,"line":241},[167,8993,4029],{"class":731},[167,8995,8548],{"class":731},[167,8997,19],{"class":512},[167,8999,523],{"class":731},[167,9001,9002],{"class":512},"arr;",[167,9004,9005],{"class":2268},"\u002F\u002F注意数才要加取地址符号&\n",[167,9007,9008,9010,9012,9014,9016,9018,9020],{"class":169,"line":261},[167,9009,3616],{"class":512},[167,9011,3242],{"class":731},[167,9013,8977],{"class":177},[167,9015,8449],{"class":731},[167,9017,19],{"class":512},[167,9019,3242],{"class":731},[167,9021,3264],{"class":512},[167,9023,9024,9026,9028,9030],{"class":169,"line":773},[167,9025,8366],{"class":512},[167,9027,4336],{"class":731},[167,9029,2265],{"class":512},[167,9031,9032],{"class":2268}," \u002F\u002F让指针向后偏移4个字节\n",[167,9034,9035,9037,9039,9042,9044,9046,9048],{"class":169,"line":779},[167,9036,3616],{"class":512},[167,9038,3242],{"class":731},[167,9040,9041],{"class":177},"\"数组的第二个元素为：\"",[167,9043,8449],{"class":731},[167,9045,19],{"class":512},[167,9047,3242],{"class":731},[167,9049,3264],{"class":512},[167,9051,9052],{"class":169,"line":785},[167,9053,9054],{"class":2268},"    \u002F\u002F利用指针遍历数组\n",[167,9056,9057,9059,9061,9064,9066],{"class":169,"line":790},[167,9058,4029],{"class":731},[167,9060,8548],{"class":731},[167,9062,9063],{"class":512},"p2",[167,9065,523],{"class":731},[167,9067,9068],{"class":512},"arr;\n",[167,9070,9071,9073,9075,9077,9079,9081,9083,9085,9087,9089,9091,9093],{"class":169,"line":796},[167,9072,967],{"class":731},[167,9074,3716],{"class":512},[167,9076,2216],{"class":731},[167,9078,5067],{"class":512},[167,9080,523],{"class":731},[167,9082,1154],{"class":184},[167,9084,5074],{"class":512},[167,9086,513],{"class":731},[167,9088,2646],{"class":184},[167,9090,5074],{"class":512},[167,9092,4336],{"class":731},[167,9094,873],{"class":512},[167,9096,9097],{"class":169,"line":802},[167,9098,4074],{"class":512},[167,9100,9101,9103,9105,9107,9109],{"class":169,"line":808},[167,9102,5485],{"class":512},[167,9104,8449],{"class":731},[167,9106,9063],{"class":512},[167,9108,3242],{"class":731},[167,9110,3264],{"class":512},[167,9112,9113,9116,9118],{"class":169,"line":814},[167,9114,9115],{"class":512},"        p2",[167,9117,4336],{"class":731},[167,9119,3359],{"class":512},[167,9121,9122],{"class":169,"line":820},[167,9123,4231],{"class":512},[167,9125,9126],{"class":169,"line":826},[167,9127,3630],{"class":512},[14,9129,9131],{"id":9130},"_37指针和函数","3.7指针和函数",[19,9133,9134],{},"利用指针做函数参数，可以修改实参的值",[19,9136,9137],{},"值传递：只改变形参，不改变实参",[19,9139,9140],{},"地址传递：",[26,9142,9144],{"className":2202,"code":9143,"language":2204,"meta":32,"style":32},"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",[34,9145,9146,9171,9175,9187,9198,9208,9212,9220,9224,9236,9248,9253,9269,9284,9299],{"__ignoreMap":32},[167,9147,9148,9150,9152,9154,9156,9158,9161,9163,9165,9167,9169],{"class":169,"line":170},[167,9149,7394],{"class":731},[167,9151,7397],{"class":173},[167,9153,898],{"class":512},[167,9155,2216],{"class":731},[167,9157,8548],{"class":731},[167,9159,9160],{"class":7246},"p1",[167,9162,2578],{"class":512},[167,9164,2216],{"class":731},[167,9166,8548],{"class":731},[167,9168,9063],{"class":7246},[167,9170,873],{"class":512},[167,9172,9173],{"class":169,"line":191},[167,9174,3611],{"class":512},[167,9176,9177,9179,9181,9184],{"class":169,"line":205},[167,9178,4029],{"class":731},[167,9180,6287],{"class":512},[167,9182,9183],{"class":731},"=*",[167,9185,9186],{"class":512},"p1;\n",[167,9188,9189,9191,9193,9195],{"class":169,"line":219},[167,9190,8433],{"class":731},[167,9192,9160],{"class":512},[167,9194,9183],{"class":731},[167,9196,9197],{"class":512},"p2;\n",[167,9199,9200,9202,9204,9206],{"class":169,"line":230},[167,9201,8433],{"class":731},[167,9203,9063],{"class":512},[167,9205,523],{"class":731},[167,9207,6312],{"class":512},[167,9209,9210],{"class":169,"line":241},[167,9211,3630],{"class":512},[167,9213,9214,9216,9218],{"class":169,"line":261},[167,9215,2216],{"class":731},[167,9217,848],{"class":173},[167,9219,4020],{"class":512},[167,9221,9222],{"class":169,"line":773},[167,9223,3611],{"class":512},[167,9225,9226,9228,9230,9232,9234],{"class":169,"line":779},[167,9227,4029],{"class":731},[167,9229,3464],{"class":512},[167,9231,523],{"class":731},[167,9233,2646],{"class":184},[167,9235,3359],{"class":512},[167,9237,9238,9240,9242,9244,9246],{"class":169,"line":785},[167,9239,4029],{"class":731},[167,9241,4869],{"class":512},[167,9243,523],{"class":731},[167,9245,2900],{"class":184},[167,9247,3359],{"class":512},[167,9249,9250],{"class":169,"line":790},[167,9251,9252],{"class":2268},"    \u002F\u002F地址传递\n",[167,9254,9255,9257,9259,9261,9264,9266],{"class":169,"line":796},[167,9256,7591],{"class":173},[167,9258,898],{"class":512},[167,9260,2553],{"class":731},[167,9262,9263],{"class":512},"a,",[167,9265,2553],{"class":731},[167,9267,9268],{"class":512},"b);\n",[167,9270,9271,9273,9275,9277,9279,9281],{"class":169,"line":802},[167,9272,3616],{"class":512},[167,9274,3242],{"class":731},[167,9276,2439],{"class":512},[167,9278,3242],{"class":731},[167,9280,3307],{"class":512},[167,9282,9283],{"class":2268},"\u002F\u002F20\n",[167,9285,9286,9288,9290,9292,9294,9296],{"class":169,"line":808},[167,9287,3616],{"class":512},[167,9289,3242],{"class":731},[167,9291,2464],{"class":512},[167,9293,3242],{"class":731},[167,9295,3307],{"class":512},[167,9297,9298],{"class":2268},"\u002F\u002F10\n",[167,9300,9301],{"class":169,"line":814},[167,9302,3630],{"class":512},[19,9304,9305],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9307,9309],{"id":9308},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9311,9312],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9314,9315,9316,9318],{},"例如数组：int arr",[167,9317,2646],{},"={4,3,6,9,1,2,10,8,7,5}",[26,9320,9322],{"className":2202,"code":9321,"language":2204,"meta":32,"style":32},"#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",[34,9323,9324,9330,9340,9364,9368,9399,9403,9437,9441,9459,9463,9474,9489,9504,9508,9512,9516,9520,9524,9532,9536,9541,9595,9607,9619,9624,9632,9636,9641,9666,9670,9685,9694,9698],{"__ignoreMap":32},[167,9325,9326,9328],{"class":169,"line":170},[167,9327,3995],{"class":731},[167,9329,3998],{"class":177},[167,9331,9332,9334,9336,9338],{"class":169,"line":191},[167,9333,4003],{"class":731},[167,9335,4006],{"class":731},[167,9337,4009],{"class":173},[167,9339,3359],{"class":512},[167,9341,9342,9344,9347,9349,9351,9353,9355,9357,9359,9362],{"class":169,"line":205},[167,9343,7394],{"class":731},[167,9345,9346],{"class":173}," bubbleSort",[167,9348,898],{"class":512},[167,9350,2216],{"class":731},[167,9352,8548],{"class":731},[167,9354,19],{"class":7246},[167,9356,2578],{"class":512},[167,9358,2216],{"class":731},[167,9360,9361],{"class":7246}," len",[167,9363,873],{"class":512},[167,9365,9366],{"class":169,"line":219},[167,9367,3611],{"class":512},[167,9369,9370,9372,9374,9376,9378,9380,9382,9384,9386,9389,9391,9393,9395,9397],{"class":169,"line":230},[167,9371,967],{"class":731},[167,9373,898],{"class":512},[167,9375,2216],{"class":731},[167,9377,5067],{"class":512},[167,9379,523],{"class":731},[167,9381,1154],{"class":184},[167,9383,5074],{"class":512},[167,9385,513],{"class":731},[167,9387,9388],{"class":512},"len",[167,9390,2732],{"class":731},[167,9392,2418],{"class":184},[167,9394,5074],{"class":512},[167,9396,4336],{"class":731},[167,9398,873],{"class":512},[167,9400,9401],{"class":169,"line":241},[167,9402,4074],{"class":512},[167,9404,9405,9407,9409,9411,9413,9415,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435],{"class":169,"line":261},[167,9406,5437],{"class":731},[167,9408,898],{"class":512},[167,9410,2216],{"class":731},[167,9412,5444],{"class":512},[167,9414,523],{"class":731},[167,9416,1154],{"class":184},[167,9418,5451],{"class":512},[167,9420,513],{"class":731},[167,9422,9388],{"class":512},[167,9424,2732],{"class":731},[167,9426,2641],{"class":512},[167,9428,2732],{"class":731},[167,9430,2418],{"class":184},[167,9432,5451],{"class":512},[167,9434,4336],{"class":731},[167,9436,873],{"class":512},[167,9438,9439],{"class":169,"line":773},[167,9440,4553],{"class":512},[167,9442,9443,9445,9448,9450,9453,9455,9457],{"class":169,"line":779},[167,9444,6674],{"class":731},[167,9446,9447],{"class":512},"(p[j]",[167,9449,3159],{"class":731},[167,9451,9452],{"class":512},"p[j",[167,9454,2681],{"class":731},[167,9456,2418],{"class":184},[167,9458,6689],{"class":512},[167,9460,9461],{"class":169,"line":785},[167,9462,6694],{"class":512},[167,9464,9465,9467,9469,9471],{"class":169,"line":790},[167,9466,6699],{"class":731},[167,9468,6287],{"class":512},[167,9470,523],{"class":731},[167,9472,9473],{"class":512},"p[j];\n",[167,9475,9476,9479,9481,9483,9485,9487],{"class":169,"line":796},[167,9477,9478],{"class":512},"                p[j]",[167,9480,523],{"class":731},[167,9482,9452],{"class":512},[167,9484,2681],{"class":731},[167,9486,2418],{"class":184},[167,9488,6722],{"class":512},[167,9490,9491,9494,9496,9498,9500,9502],{"class":169,"line":802},[167,9492,9493],{"class":512},"                p[j",[167,9495,2681],{"class":731},[167,9497,2418],{"class":184},[167,9499,3139],{"class":512},[167,9501,523],{"class":731},[167,9503,6312],{"class":512},[167,9505,9506],{"class":169,"line":808},[167,9507,6742],{"class":512},[167,9509,9510],{"class":169,"line":814},[167,9511,4572],{"class":512},[167,9513,9514],{"class":169,"line":820},[167,9515,4231],{"class":512},[167,9517,9518],{"class":169,"line":826},[167,9519,3630],{"class":512},[167,9521,9522],{"class":169,"line":832},[167,9523,741],{"emptyLinePlaceholder":740},[167,9525,9526,9528,9530],{"class":169,"line":837},[167,9527,2216],{"class":731},[167,9529,848],{"class":173},[167,9531,4020],{"class":512},[167,9533,9534],{"class":169,"line":842},[167,9535,3611],{"class":512},[167,9537,9538],{"class":169,"line":860},[167,9539,9540],{"class":2268},"    \u002F\u002F 1.创建数组\n",[167,9542,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593],{"class":169,"line":876},[167,9544,4029],{"class":731},[167,9546,5994],{"class":512},[167,9548,2646],{"class":184},[167,9550,3139],{"class":512},[167,9552,523],{"class":731},[167,9554,3096],{"class":512},[167,9556,2494],{"class":184},[167,9558,2578],{"class":512},[167,9560,2281],{"class":184},[167,9562,2578],{"class":512},[167,9564,2544],{"class":184},[167,9566,2578],{"class":512},[167,9568,2620],{"class":184},[167,9570,2578],{"class":512},[167,9572,2418],{"class":184},[167,9574,2578],{"class":512},[167,9576,2287],{"class":184},[167,9578,2578],{"class":512},[167,9580,2646],{"class":184},[167,9582,2578],{"class":512},[167,9584,2595],{"class":184},[167,9586,2578],{"class":512},[167,9588,2569],{"class":184},[167,9590,2578],{"class":512},[167,9592,2519],{"class":184},[167,9594,6027],{"class":512},[167,9596,9597,9599,9601,9603,9605],{"class":169,"line":887},[167,9598,4029],{"class":731},[167,9600,9361],{"class":512},[167,9602,523],{"class":731},[167,9604,2646],{"class":184},[167,9606,3359],{"class":512},[167,9608,9609,9611,9613,9615,9617],{"class":169,"line":892},[167,9610,4029],{"class":731},[167,9612,8548],{"class":731},[167,9614,19],{"class":512},[167,9616,523],{"class":731},[167,9618,9068],{"class":512},[167,9620,9621],{"class":169,"line":907},[167,9622,9623],{"class":2268},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[167,9625,9626,9629],{"class":169,"line":920},[167,9627,9628],{"class":173},"    bubbleSort",[167,9630,9631],{"class":512},"(p,len);\n",[167,9633,9634],{"class":169,"line":933},[167,9635,741],{"emptyLinePlaceholder":740},[167,9637,9638],{"class":169,"line":946},[167,9639,9640],{"class":2268},"    \u002F\u002F 3.打印排序后的数组\n",[167,9642,9643,9645,9647,9649,9651,9653,9655,9657,9659,9662,9664],{"class":169,"line":959},[167,9644,967],{"class":731},[167,9646,3716],{"class":512},[167,9648,2216],{"class":731},[167,9650,5067],{"class":512},[167,9652,523],{"class":731},[167,9654,1154],{"class":184},[167,9656,5248],{"class":512},[167,9658,513],{"class":731},[167,9660,9661],{"class":512},"len; i",[167,9663,4336],{"class":731},[167,9665,873],{"class":512},[167,9667,9668],{"class":169,"line":964},[167,9669,4074],{"class":512},[167,9671,9672,9674,9676,9678,9680,9683],{"class":169,"line":987},[167,9673,5485],{"class":512},[167,9675,8449],{"class":731},[167,9677,19],{"class":512},[167,9679,3242],{"class":731},[167,9681,9682],{"class":177},"\"\"",[167,9684,3359],{"class":512},[167,9686,9687,9690,9692],{"class":169,"line":993},[167,9688,9689],{"class":512},"        p",[167,9691,4336],{"class":731},[167,9693,3359],{"class":512},[167,9695,9696],{"class":169,"line":998},[167,9697,4231],{"class":512},[167,9699,9700],{"class":169,"line":1010},[167,9701,3630],{"class":512},[2113,9703,9704],{},"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":32,"searchDepth":191,"depth":191,"links":9706},[9707,9708,9709,9710,9711,9712,9713,9714],{"id":8313,"depth":191,"text":8314},{"id":8479,"depth":191,"text":8480},{"id":8635,"depth":191,"text":8636},{"id":8713,"depth":191,"text":8714},{"id":8792,"depth":191,"text":8793},{"id":8891,"depth":191,"text":8892},{"id":9130,"depth":191,"text":9131},{"id":9308,"depth":191,"text":9309},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8302,"description":8310},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9721,"title":9722,"body":9723,"description":9730,"extension":2140,"meta":12702,"navigation":740,"path":12703,"seo":12704,"stem":12705,"__hash__":12706},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9724,"toc":12693},[9725,9728,9731,9735,9738,9741,9752,10088,10091,10095,10098,10105,10360,10364,10367,10370,10525,10529,10532,10535,10741,10745,10748,11051,11054,11062,11066,11069,11220,11222,11233,11290,11294,11299,11956,11964,11967,12061,12064,12684,12690],[10,9726,9722],{"id":9727},"_4结构体",[19,9729,9730],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9732,9734],{"id":9733},"_41结构体定义与使用","4.1结构体定义与使用",[19,9736,9737],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9739,9740],{},"通过结构体创建变量的方式：",[3205,9742,9743,9746,9749],{},[43,9744,9745],{},"struct 结构体名 变量名",[43,9747,9748],{},"struct 结构体名 变量名={成员1值，成员2值...}",[43,9750,9751],{},"定义结构体时顺便创建变量",[26,9753,9755],{"className":2202,"code":9754,"language":2204,"meta":32,"style":32},"#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",[34,9756,9757,9763,9773,9780,9785,9793,9797,9802,9806,9811,9816,9821,9828,9833,9840,9844,9851,9855,9859,9863,9867,9871,9875,9881,9885,9891,9899,9907,9911,9916,9921,9932,9937,9949,9960,9971,9976,9999,10003,10009,10036,10041,10047,10059,10071,10083],{"__ignoreMap":32},[167,9758,9759,9761],{"class":169,"line":170},[167,9760,3995],{"class":731},[167,9762,3998],{"class":177},[167,9764,9765,9767,9769,9771],{"class":169,"line":191},[167,9766,4003],{"class":731},[167,9768,4006],{"class":731},[167,9770,4009],{"class":173},[167,9772,3359],{"class":512},[167,9774,9775,9777],{"class":169,"line":205},[167,9776,3995],{"class":731},[167,9778,9779],{"class":177},"\u003Cstring>\n",[167,9781,9782],{"class":169,"line":219},[167,9783,9784],{"class":2268},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[167,9786,9787,9790],{"class":169,"line":230},[167,9788,9789],{"class":731},"struct",[167,9791,9792],{"class":173}," Student\n",[167,9794,9795],{"class":169,"line":241},[167,9796,3611],{"class":512},[167,9798,9799],{"class":169,"line":261},[167,9800,9801],{"class":2268},"    \u002F\u002F成员列表\n",[167,9803,9804],{"class":169,"line":773},[167,9805,741],{"emptyLinePlaceholder":740},[167,9807,9808],{"class":169,"line":779},[167,9809,9810],{"class":2268},"    \u002F\u002F姓名\n",[167,9812,9813],{"class":169,"line":785},[167,9814,9815],{"class":512},"    string name;\n",[167,9817,9818],{"class":169,"line":790},[167,9819,9820],{"class":2268},"    \u002F\u002F年龄\n",[167,9822,9823,9825],{"class":169,"line":796},[167,9824,4029],{"class":731},[167,9826,9827],{"class":512}," age;\n",[167,9829,9830],{"class":169,"line":802},[167,9831,9832],{"class":2268},"    \u002F\u002F分数\n",[167,9834,9835,9837],{"class":169,"line":808},[167,9836,4029],{"class":731},[167,9838,9839],{"class":512}," score;\n",[167,9841,9842],{"class":169,"line":814},[167,9843,6027],{"class":512},[167,9845,9846,9848],{"class":169,"line":820},[167,9847,9789],{"class":731},[167,9849,9850],{"class":173}," School\n",[167,9852,9853],{"class":169,"line":826},[167,9854,3611],{"class":512},[167,9856,9857],{"class":169,"line":832},[167,9858,9801],{"class":2268},[167,9860,9861],{"class":169,"line":837},[167,9862,741],{"emptyLinePlaceholder":740},[167,9864,9865],{"class":169,"line":842},[167,9866,9810],{"class":2268},[167,9868,9869],{"class":169,"line":860},[167,9870,9815],{"class":512},[167,9872,9873],{"class":169,"line":876},[167,9874,9820],{"class":2268},[167,9876,9877,9879],{"class":169,"line":887},[167,9878,4029],{"class":731},[167,9880,9827],{"class":512},[167,9882,9883],{"class":169,"line":892},[167,9884,9832],{"class":2268},[167,9886,9887,9889],{"class":169,"line":907},[167,9888,4029],{"class":731},[167,9890,9839],{"class":512},[167,9892,9893,9896],{"class":169,"line":920},[167,9894,9895],{"class":512},"} s3;",[167,9897,9898],{"class":2268}," \u002F\u002F创建结构体时就创建了变量\n",[167,9900,9901,9903,9905],{"class":169,"line":933},[167,9902,2216],{"class":731},[167,9904,848],{"class":173},[167,9906,4020],{"class":512},[167,9908,9909],{"class":169,"line":946},[167,9910,3611],{"class":512},[167,9912,9913],{"class":169,"line":959},[167,9914,9915],{"class":2268},"    \u002F\u002F2.通过学生类型创建具体学生\n",[167,9917,9918],{"class":169,"line":964},[167,9919,9920],{"class":2268},"    \u002F\u002F2.1 struct Student s1;\n",[167,9922,9923,9926,9929],{"class":169,"line":987},[167,9924,9925],{"class":731},"    struct",[167,9927,9928],{"class":173}," Student",[167,9930,9931],{"class":512}," s1;\n",[167,9933,9934],{"class":169,"line":993},[167,9935,9936],{"class":2268},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[167,9938,9939,9942,9944,9947],{"class":169,"line":998},[167,9940,9941],{"class":512},"    s1.name",[167,9943,523],{"class":731},[167,9945,9946],{"class":177},"\"张三\"",[167,9948,3359],{"class":512},[167,9950,9951,9954,9956,9958],{"class":169,"line":1010},[167,9952,9953],{"class":512},"    s1.age",[167,9955,523],{"class":731},[167,9957,2850],{"class":184},[167,9959,3359],{"class":512},[167,9961,9962,9965,9967,9969],{"class":169,"line":1022},[167,9963,9964],{"class":512},"    s1.score",[167,9966,523],{"class":731},[167,9968,2455],{"class":184},[167,9970,3359],{"class":512},[167,9972,9973],{"class":169,"line":1027},[167,9974,9975],{"class":2268},"    \u002F\u002F输出结果\n",[167,9977,9978,9980,9982,9985,9987,9990,9992,9995,9997],{"class":169,"line":1032},[167,9979,3616],{"class":512},[167,9981,3242],{"class":731},[167,9983,9984],{"class":512},"s1.name",[167,9986,3242],{"class":731},[167,9988,9989],{"class":512},"s1.age",[167,9991,3242],{"class":731},[167,9993,9994],{"class":512},"s1.score",[167,9996,3242],{"class":731},[167,9998,3264],{"class":512},[167,10000,10001],{"class":169,"line":1049},[167,10002,741],{"emptyLinePlaceholder":740},[167,10004,10006],{"class":169,"line":10005},39,[167,10007,10008],{"class":2268},"    \u002F\u002F2.2 struct Student s2={...}\n",[167,10010,10012,10014,10016,10019,10021,10023,10026,10028,10030,10032,10034],{"class":169,"line":10011},40,[167,10013,9925],{"class":731},[167,10015,9928],{"class":173},[167,10017,10018],{"class":512}," s2",[167,10020,523],{"class":731},[167,10022,3096],{"class":512},[167,10024,10025],{"class":177},"\"王五\"",[167,10027,2578],{"class":512},[167,10029,2850],{"class":184},[167,10031,2578],{"class":512},[167,10033,2455],{"class":184},[167,10035,6027],{"class":512},[167,10037,10039],{"class":169,"line":10038},41,[167,10040,741],{"emptyLinePlaceholder":740},[167,10042,10044],{"class":169,"line":10043},42,[167,10045,10046],{"class":2268},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[167,10048,10050,10053,10055,10057],{"class":169,"line":10049},43,[167,10051,10052],{"class":512},"    s3.name",[167,10054,523],{"class":731},[167,10056,1494],{"class":177},[167,10058,3359],{"class":512},[167,10060,10062,10065,10067,10069],{"class":169,"line":10061},44,[167,10063,10064],{"class":512},"    s3.age",[167,10066,523],{"class":731},[167,10068,2850],{"class":184},[167,10070,3359],{"class":512},[167,10072,10074,10077,10079,10081],{"class":169,"line":10073},45,[167,10075,10076],{"class":512},"    s3.score",[167,10078,523],{"class":731},[167,10080,2900],{"class":184},[167,10082,3359],{"class":512},[167,10084,10086],{"class":169,"line":10085},46,[167,10087,3630],{"class":512},[19,10089,10090],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10092,10094],{"id":10093},"_42结构体数组","4.2结构体数组",[19,10096,10097],{},"将自定义的结构体放入到数组中方便维护",[19,10099,10100,10101,10104],{},"语法：struct 结构体名 数组名",[167,10102,10103],{},"元素个数","={ {}，{},...{} };",[26,10106,10108],{"className":2202,"code":10107,"language":2204,"meta":32,"style":32},"#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",[34,10109,10110,10116,10126,10132,10137,10143,10147,10151,10157,10163,10167,10171,10179,10183,10188,10203,10207,10223,10239,10243,10248,10264,10279,10294,10299,10325,10329,10352,10356],{"__ignoreMap":32},[167,10111,10112,10114],{"class":169,"line":170},[167,10113,3995],{"class":731},[167,10115,3998],{"class":177},[167,10117,10118,10120,10122,10124],{"class":169,"line":191},[167,10119,4003],{"class":731},[167,10121,4006],{"class":731},[167,10123,4009],{"class":173},[167,10125,3359],{"class":512},[167,10127,10128,10130],{"class":169,"line":205},[167,10129,3995],{"class":731},[167,10131,9779],{"class":177},[167,10133,10134],{"class":169,"line":219},[167,10135,10136],{"class":2268},"\u002F\u002F1.定义结构体\n",[167,10138,10139,10141],{"class":169,"line":230},[167,10140,9789],{"class":731},[167,10142,9792],{"class":173},[167,10144,10145],{"class":169,"line":241},[167,10146,3611],{"class":512},[167,10148,10149],{"class":169,"line":261},[167,10150,9815],{"class":512},[167,10152,10153,10155],{"class":169,"line":773},[167,10154,4029],{"class":731},[167,10156,9827],{"class":512},[167,10158,10159,10161],{"class":169,"line":779},[167,10160,4029],{"class":731},[167,10162,9839],{"class":512},[167,10164,10165],{"class":169,"line":785},[167,10166,741],{"emptyLinePlaceholder":740},[167,10168,10169],{"class":169,"line":790},[167,10170,6027],{"class":512},[167,10172,10173,10175,10177],{"class":169,"line":796},[167,10174,2216],{"class":731},[167,10176,848],{"class":173},[167,10178,4020],{"class":512},[167,10180,10181],{"class":169,"line":802},[167,10182,3611],{"class":512},[167,10184,10185],{"class":169,"line":808},[167,10186,10187],{"class":2268},"    \u002F\u002F2.创建结构体数组\n",[167,10189,10190,10192,10194,10197,10199,10201],{"class":169,"line":814},[167,10191,9925],{"class":731},[167,10193,9928],{"class":173},[167,10195,10196],{"class":512}," stuArray[",[167,10198,2287],{"class":184},[167,10200,3139],{"class":512},[167,10202,6940],{"class":731},[167,10204,10205],{"class":169,"line":820},[167,10206,4074],{"class":512},[167,10208,10209,10211,10213,10215,10217,10219,10221],{"class":169,"line":826},[167,10210,6949],{"class":512},[167,10212,9946],{"class":177},[167,10214,2578],{"class":512},[167,10216,2850],{"class":184},[167,10218,2578],{"class":512},[167,10220,981],{"class":184},[167,10222,6962],{"class":512},[167,10224,10225,10227,10229,10231,10233,10235,10237],{"class":169,"line":832},[167,10226,6949],{"class":512},[167,10228,1494],{"class":177},[167,10230,2578],{"class":512},[167,10232,2775],{"class":184},[167,10234,2578],{"class":512},[167,10236,2775],{"class":184},[167,10238,3630],{"class":512},[167,10240,10241],{"class":169,"line":837},[167,10242,4231],{"class":512},[167,10244,10245],{"class":169,"line":842},[167,10246,10247],{"class":2268},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[167,10249,10250,10253,10255,10258,10260,10262],{"class":169,"line":860},[167,10251,10252],{"class":512},"    stuArray[",[167,10254,2418],{"class":184},[167,10256,10257],{"class":512},"].name",[167,10259,523],{"class":731},[167,10261,5734],{"class":177},[167,10263,3359],{"class":512},[167,10265,10266,10268,10270,10273,10275,10277],{"class":169,"line":876},[167,10267,10252],{"class":512},[167,10269,2418],{"class":184},[167,10271,10272],{"class":512},"].age",[167,10274,523],{"class":731},[167,10276,2287],{"class":184},[167,10278,3359],{"class":512},[167,10280,10281,10283,10285,10288,10290,10292],{"class":169,"line":887},[167,10282,10252],{"class":512},[167,10284,2418],{"class":184},[167,10286,10287],{"class":512},"].score",[167,10289,523],{"class":731},[167,10291,2287],{"class":184},[167,10293,3359],{"class":512},[167,10295,10296],{"class":169,"line":892},[167,10297,10298],{"class":2268},"    \u002F\u002F4.遍历结构体数组\n",[167,10300,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323],{"class":169,"line":907},[167,10302,967],{"class":731},[167,10304,3716],{"class":512},[167,10306,2216],{"class":731},[167,10308,5067],{"class":512},[167,10310,523],{"class":731},[167,10312,1154],{"class":184},[167,10314,5074],{"class":512},[167,10316,513],{"class":731},[167,10318,2287],{"class":184},[167,10320,5074],{"class":512},[167,10322,4336],{"class":731},[167,10324,873],{"class":512},[167,10326,10327],{"class":169,"line":920},[167,10328,4074],{"class":512},[167,10330,10331,10333,10335,10338,10340,10343,10345,10348,10350],{"class":169,"line":933},[167,10332,5485],{"class":512},[167,10334,3242],{"class":731},[167,10336,10337],{"class":512},"stuArray[i].name",[167,10339,3242],{"class":731},[167,10341,10342],{"class":512},"stuArray[i].age",[167,10344,3242],{"class":731},[167,10346,10347],{"class":512},"stuArray[i].score",[167,10349,3242],{"class":731},[167,10351,3264],{"class":512},[167,10353,10354],{"class":169,"line":946},[167,10355,4231],{"class":512},[167,10357,10358],{"class":169,"line":959},[167,10359,3630],{"class":512},[14,10361,10363],{"id":10362},"_43结构体指针","4.3结构体指针",[19,10365,10366],{},"作用：通过指针访问结构体中的成员",[19,10368,10369],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,10371,10373],{"className":2202,"code":10372,"language":2204,"meta":32,"style":32},"#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",[34,10374,10375,10381,10391,10397,10401,10407,10411,10415,10421,10427,10431,10439,10443,10448,10473,10478,10493,10498,10521],{"__ignoreMap":32},[167,10376,10377,10379],{"class":169,"line":170},[167,10378,3995],{"class":731},[167,10380,3998],{"class":177},[167,10382,10383,10385,10387,10389],{"class":169,"line":191},[167,10384,4003],{"class":731},[167,10386,4006],{"class":731},[167,10388,4009],{"class":173},[167,10390,3359],{"class":512},[167,10392,10393,10395],{"class":169,"line":205},[167,10394,3995],{"class":731},[167,10396,9779],{"class":177},[167,10398,10399],{"class":169,"line":219},[167,10400,10136],{"class":2268},[167,10402,10403,10405],{"class":169,"line":230},[167,10404,9789],{"class":731},[167,10406,9792],{"class":173},[167,10408,10409],{"class":169,"line":241},[167,10410,3611],{"class":512},[167,10412,10413],{"class":169,"line":261},[167,10414,9815],{"class":512},[167,10416,10417,10419],{"class":169,"line":773},[167,10418,4029],{"class":731},[167,10420,9827],{"class":512},[167,10422,10423,10425],{"class":169,"line":779},[167,10424,4029],{"class":731},[167,10426,9839],{"class":512},[167,10428,10429],{"class":169,"line":785},[167,10430,6027],{"class":512},[167,10432,10433,10435,10437],{"class":169,"line":790},[167,10434,2216],{"class":731},[167,10436,848],{"class":173},[167,10438,4020],{"class":512},[167,10440,10441],{"class":169,"line":796},[167,10442,3611],{"class":512},[167,10444,10445],{"class":169,"line":802},[167,10446,10447],{"class":2268},"    \u002F\u002F创建学生结构体变量\n",[167,10449,10450,10452,10454,10457,10459,10461,10463,10465,10467,10469,10471],{"class":169,"line":808},[167,10451,9925],{"class":731},[167,10453,9928],{"class":173},[167,10455,10456],{"class":512}," s",[167,10458,523],{"class":731},[167,10460,3096],{"class":512},[167,10462,9946],{"class":177},[167,10464,2578],{"class":512},[167,10466,2850],{"class":184},[167,10468,2578],{"class":512},[167,10470,3776],{"class":184},[167,10472,6027],{"class":512},[167,10474,10475],{"class":169,"line":814},[167,10476,10477],{"class":2268},"    \u002F\u002F通过指针指向结构体变量\n",[167,10479,10480,10482,10484,10486,10488,10490],{"class":169,"line":820},[167,10481,9925],{"class":731},[167,10483,9928],{"class":173},[167,10485,8548],{"class":731},[167,10487,19],{"class":512},[167,10489,8369],{"class":731},[167,10491,10492],{"class":512},"s\n",[167,10494,10495],{"class":169,"line":826},[167,10496,10497],{"class":2268},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[167,10499,10500,10502,10504,10507,10509,10512,10514,10517,10519],{"class":169,"line":832},[167,10501,3616],{"class":512},[167,10503,3242],{"class":731},[167,10505,10506],{"class":512},"p->name",[167,10508,3242],{"class":731},[167,10510,10511],{"class":512},"p->age",[167,10513,3242],{"class":731},[167,10515,10516],{"class":512},"p->score",[167,10518,3242],{"class":731},[167,10520,3264],{"class":512},[167,10522,10523],{"class":169,"line":837},[167,10524,3630],{"class":512},[14,10526,10528],{"id":10527},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10530,10531],{},"作用：结构体中的成员可以是另一个结构体",[19,10533,10534],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,10536,10538],{"className":2202,"code":10537,"language":2204,"meta":32,"style":32},"#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",[34,10539,10540,10546,10556,10562,10567,10575,10579,10583,10589,10595,10599,10604,10611,10615,10622,10626,10632,10637,10641,10649,10653,10658,10663,10668,10679,10691,10702,10715,10726,10737],{"__ignoreMap":32},[167,10541,10542,10544],{"class":169,"line":170},[167,10543,3995],{"class":731},[167,10545,3998],{"class":177},[167,10547,10548,10550,10552,10554],{"class":169,"line":191},[167,10549,4003],{"class":731},[167,10551,4006],{"class":731},[167,10553,4009],{"class":173},[167,10555,3359],{"class":512},[167,10557,10558,10560],{"class":169,"line":205},[167,10559,3995],{"class":731},[167,10561,9779],{"class":177},[167,10563,10564],{"class":169,"line":219},[167,10565,10566],{"class":2268},"\u002F\u002F定义学生结构体\n",[167,10568,10569,10571,10573],{"class":169,"line":230},[167,10570,9789],{"class":731},[167,10572,9928],{"class":173},[167,10574,4710],{"class":512},[167,10576,10577],{"class":169,"line":241},[167,10578,3611],{"class":512},[167,10580,10581],{"class":169,"line":261},[167,10582,9815],{"class":512},[167,10584,10585,10587],{"class":169,"line":773},[167,10586,4029],{"class":731},[167,10588,9827],{"class":512},[167,10590,10591,10593],{"class":169,"line":779},[167,10592,4029],{"class":731},[167,10594,9839],{"class":512},[167,10596,10597],{"class":169,"line":785},[167,10598,3630],{"class":512},[167,10600,10601],{"class":169,"line":790},[167,10602,10603],{"class":2268},"\u002F\u002F定义老师结构体\n",[167,10605,10606,10608],{"class":169,"line":796},[167,10607,9789],{"class":731},[167,10609,10610],{"class":173}," Teacher\n",[167,10612,10613],{"class":169,"line":802},[167,10614,3611],{"class":512},[167,10616,10617,10619],{"class":169,"line":808},[167,10618,4029],{"class":731},[167,10620,10621],{"class":512}," id;\n",[167,10623,10624],{"class":169,"line":814},[167,10625,9815],{"class":512},[167,10627,10628,10630],{"class":169,"line":820},[167,10629,4029],{"class":731},[167,10631,9827],{"class":512},[167,10633,10634],{"class":169,"line":826},[167,10635,10636],{"class":512},"    Student stu;\n",[167,10638,10639],{"class":169,"line":832},[167,10640,3630],{"class":512},[167,10642,10643,10645,10647],{"class":169,"line":837},[167,10644,2216],{"class":731},[167,10646,848],{"class":173},[167,10648,8008],{"class":512},[167,10650,10651],{"class":169,"line":842},[167,10652,3611],{"class":512},[167,10654,10655],{"class":169,"line":860},[167,10656,10657],{"class":2268},"    \u002F\u002F结构体嵌套结构体\n",[167,10659,10660],{"class":169,"line":876},[167,10661,10662],{"class":2268},"    \u002F\u002F创建老师\n",[167,10664,10665],{"class":169,"line":887},[167,10666,10667],{"class":512},"    Teacher t;\n",[167,10669,10670,10673,10675,10677],{"class":169,"line":892},[167,10671,10672],{"class":512},"    t.id",[167,10674,523],{"class":731},[167,10676,981],{"class":184},[167,10678,3359],{"class":512},[167,10680,10681,10684,10686,10689],{"class":169,"line":907},[167,10682,10683],{"class":512},"    t.name",[167,10685,523],{"class":731},[167,10687,10688],{"class":177},"\"老王\"",[167,10690,3359],{"class":512},[167,10692,10693,10696,10698,10700],{"class":169,"line":920},[167,10694,10695],{"class":512},"    t.age",[167,10697,523],{"class":731},[167,10699,2850],{"class":184},[167,10701,3359],{"class":512},[167,10703,10704,10707,10709,10712],{"class":169,"line":933},[167,10705,10706],{"class":512},"    t.stu.name",[167,10708,523],{"class":731},[167,10710,10711],{"class":177},"\"小王\"",[167,10713,10714],{"class":512},"；\n",[167,10716,10717,10720,10722,10724],{"class":169,"line":946},[167,10718,10719],{"class":512},"    t.stu.age",[167,10721,523],{"class":731},[167,10723,2900],{"class":184},[167,10725,3359],{"class":512},[167,10727,10728,10731,10733,10735],{"class":169,"line":959},[167,10729,10730],{"class":512},"    t.stu.score",[167,10732,523],{"class":731},[167,10734,2544],{"class":184},[167,10736,3359],{"class":512},[167,10738,10739],{"class":169,"line":964},[167,10740,3630],{"class":512},[14,10742,10744],{"id":10743},"_45结构体做函数参数","4.5结构体做函数参数",[19,10746,10747],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,10749,10751],{"className":2202,"code":10750,"language":2204,"meta":32,"style":32},"#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",[34,10752,10753,10759,10769,10775,10781,10785,10789,10795,10801,10805,10810,10815,10832,10836,10869,10873,10878,10897,10901,10932,10936,10944,10948,10957,10969,10981,10993,11006,11014,11027,11039,11047],{"__ignoreMap":32},[167,10754,10755,10757],{"class":169,"line":170},[167,10756,3995],{"class":731},[167,10758,3998],{"class":177},[167,10760,10761,10763,10765,10767],{"class":169,"line":191},[167,10762,4003],{"class":731},[167,10764,4006],{"class":731},[167,10766,4009],{"class":173},[167,10768,3359],{"class":512},[167,10770,10771,10773],{"class":169,"line":205},[167,10772,3995],{"class":731},[167,10774,9779],{"class":177},[167,10776,10777,10779],{"class":169,"line":219},[167,10778,9789],{"class":731},[167,10780,9792],{"class":173},[167,10782,10783],{"class":169,"line":230},[167,10784,3611],{"class":512},[167,10786,10787],{"class":169,"line":241},[167,10788,9815],{"class":512},[167,10790,10791,10793],{"class":169,"line":261},[167,10792,4029],{"class":731},[167,10794,9827],{"class":512},[167,10796,10797,10799],{"class":169,"line":773},[167,10798,4029],{"class":731},[167,10800,9839],{"class":512},[167,10802,10803],{"class":169,"line":779},[167,10804,6027],{"class":512},[167,10806,10807],{"class":169,"line":785},[167,10808,10809],{"class":2268},"\u002F\u002F打印学生信息的函数\n",[167,10811,10812],{"class":169,"line":790},[167,10813,10814],{"class":2268},"\u002F\u002F值传递\n",[167,10816,10817,10819,10822,10824,10826,10828,10830],{"class":169,"line":796},[167,10818,7394],{"class":731},[167,10820,10821],{"class":173}," printStudent1",[167,10823,898],{"class":512},[167,10825,9789],{"class":731},[167,10827,9928],{"class":173},[167,10829,10456],{"class":7246},[167,10831,873],{"class":512},[167,10833,10834],{"class":169,"line":802},[167,10835,3611],{"class":512},[167,10837,10838,10840,10842,10845,10847,10850,10852,10855,10857,10859,10861,10864,10866],{"class":169,"line":808},[167,10839,8559],{"class":512},[167,10841,3242],{"class":731},[167,10843,10844],{"class":512}," s.name ",[167,10846,3242],{"class":731},[167,10848,10849],{"class":177}," \" \"",[167,10851,3510],{"class":731},[167,10853,10854],{"class":512}," s.age ",[167,10856,3242],{"class":731},[167,10858,10849],{"class":177},[167,10860,3510],{"class":731},[167,10862,10863],{"class":512}," s.score ",[167,10865,3242],{"class":731},[167,10867,10868],{"class":512}," endl;\n",[167,10870,10871],{"class":169,"line":814},[167,10872,3630],{"class":512},[167,10874,10875],{"class":169,"line":820},[167,10876,10877],{"class":2268},"\u002F\u002F地址传递\n",[167,10879,10880,10882,10885,10887,10889,10891,10893,10895],{"class":169,"line":826},[167,10881,7394],{"class":731},[167,10883,10884],{"class":173}," printStudent2",[167,10886,898],{"class":512},[167,10888,9789],{"class":731},[167,10890,9928],{"class":173},[167,10892,8548],{"class":731},[167,10894,2895],{"class":7246},[167,10896,873],{"class":512},[167,10898,10899],{"class":169,"line":832},[167,10900,3611],{"class":512},[167,10902,10903,10905,10907,10910,10912,10914,10916,10919,10921,10923,10925,10928,10930],{"class":169,"line":837},[167,10904,8559],{"class":512},[167,10906,3242],{"class":731},[167,10908,10909],{"class":512}," s->name ",[167,10911,3242],{"class":731},[167,10913,10849],{"class":177},[167,10915,3510],{"class":731},[167,10917,10918],{"class":512}," s->age ",[167,10920,3242],{"class":731},[167,10922,10849],{"class":177},[167,10924,3510],{"class":731},[167,10926,10927],{"class":512}," s->score ",[167,10929,3242],{"class":731},[167,10931,10868],{"class":512},[167,10933,10934],{"class":169,"line":842},[167,10935,3630],{"class":512},[167,10937,10938,10940,10942],{"class":169,"line":860},[167,10939,2216],{"class":731},[167,10941,848],{"class":173},[167,10943,4020],{"class":512},[167,10945,10946],{"class":169,"line":876},[167,10947,3611],{"class":512},[167,10949,10950,10952,10954],{"class":169,"line":887},[167,10951,9925],{"class":731},[167,10953,9928],{"class":173},[167,10955,10956],{"class":512}," s;\n",[167,10958,10959,10962,10964,10967],{"class":169,"line":892},[167,10960,10961],{"class":512},"    s.name ",[167,10963,523],{"class":731},[167,10965,10966],{"class":177}," \"张三\"",[167,10968,3359],{"class":512},[167,10970,10971,10974,10976,10979],{"class":169,"line":907},[167,10972,10973],{"class":512},"    s.age ",[167,10975,523],{"class":731},[167,10977,10978],{"class":184}," 20",[167,10980,3359],{"class":512},[167,10982,10983,10986,10988,10991],{"class":169,"line":920},[167,10984,10985],{"class":512},"    s.score ",[167,10987,523],{"class":731},[167,10989,10990],{"class":184}," 85",[167,10992,3359],{"class":512},[167,10994,10995,10997,10999,11002,11004],{"class":169,"line":933},[167,10996,3616],{"class":512},[167,10998,3242],{"class":731},[167,11000,11001],{"class":177},"\"值传递:\"",[167,11003,3242],{"class":731},[167,11005,3264],{"class":512},[167,11007,11008,11011],{"class":169,"line":946},[167,11009,11010],{"class":173},"    printStudent1",[167,11012,11013],{"class":512},"(s);\n",[167,11015,11016,11018,11020,11023,11025],{"class":169,"line":959},[167,11017,3616],{"class":512},[167,11019,3242],{"class":731},[167,11021,11022],{"class":177},"\"地址传递:\"",[167,11024,3242],{"class":731},[167,11026,3264],{"class":512},[167,11028,11029,11032,11034,11036],{"class":169,"line":964},[167,11030,11031],{"class":173},"    printStudent2",[167,11033,898],{"class":512},[167,11035,2553],{"class":731},[167,11037,11038],{"class":512},"s); \n",[167,11040,11041,11043,11045],{"class":169,"line":987},[167,11042,6122],{"class":731},[167,11044,6125],{"class":184},[167,11046,3359],{"class":512},[167,11048,11049],{"class":169,"line":993},[167,11050,3630],{"class":512},[19,11052,11053],{},"注意：",[3205,11055,11056,11059],{},[43,11057,11058],{},"1.先定义结构体，不要在函数中写结构体的定义",[43,11060,11061],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11063,11065],{"id":11064},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11067,11068],{},"用const防止误操作",[26,11070,11072],{"className":2202,"code":11071,"language":2204,"meta":32,"style":32},"#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",[34,11073,11074,11080,11090,11096,11101,11105,11109,11115,11121,11125,11141,11145,11168,11172,11180,11184,11205,11212,11216],{"__ignoreMap":32},[167,11075,11076,11078],{"class":169,"line":170},[167,11077,3995],{"class":731},[167,11079,3998],{"class":177},[167,11081,11082,11084,11086,11088],{"class":169,"line":191},[167,11083,4003],{"class":731},[167,11085,4006],{"class":731},[167,11087,4009],{"class":173},[167,11089,3359],{"class":512},[167,11091,11092,11094],{"class":169,"line":205},[167,11093,3995],{"class":731},[167,11095,9779],{"class":177},[167,11097,11098],{"class":169,"line":219},[167,11099,11100],{"class":512},"sctuct Student\n",[167,11102,11103],{"class":169,"line":230},[167,11104,3611],{"class":512},[167,11106,11107],{"class":169,"line":241},[167,11108,9815],{"class":512},[167,11110,11111,11113],{"class":169,"line":261},[167,11112,4029],{"class":731},[167,11114,9827],{"class":512},[167,11116,11117,11119],{"class":169,"line":773},[167,11118,4029],{"class":731},[167,11120,9839],{"class":512},[167,11122,11123],{"class":169,"line":779},[167,11124,6027],{"class":512},[167,11126,11127,11129,11132,11134,11137,11139],{"class":169,"line":785},[167,11128,7394],{"class":731},[167,11130,11131],{"class":173}," printStudents",[167,11133,898],{"class":512},[167,11135,11136],{"class":173},"student",[167,11138,10456],{"class":7246},[167,11140,873],{"class":512},[167,11142,11143],{"class":169,"line":790},[167,11144,3611],{"class":512},[167,11146,11147,11149,11151,11154,11156,11159,11161,11164,11166],{"class":169,"line":796},[167,11148,3616],{"class":512},[167,11150,3242],{"class":731},[167,11152,11153],{"class":512},"s.name",[167,11155,3242],{"class":731},[167,11157,11158],{"class":512},"s.age",[167,11160,3242],{"class":731},[167,11162,11163],{"class":512},"s.score",[167,11165,3242],{"class":731},[167,11167,3264],{"class":512},[167,11169,11170],{"class":169,"line":802},[167,11171,3630],{"class":512},[167,11173,11174,11176,11178],{"class":169,"line":808},[167,11175,2216],{"class":731},[167,11177,848],{"class":173},[167,11179,8008],{"class":512},[167,11181,11182],{"class":169,"line":814},[167,11183,3611],{"class":512},[167,11185,11186,11189,11191,11193,11195,11197,11199,11201,11203],{"class":169,"line":820},[167,11187,11188],{"class":512},"    Student s",[167,11190,523],{"class":731},[167,11192,3096],{"class":512},[167,11194,9946],{"class":177},[167,11196,2578],{"class":512},[167,11198,2850],{"class":184},[167,11200,2578],{"class":512},[167,11202,2850],{"class":184},[167,11204,6027],{"class":512},[167,11206,11207,11210],{"class":169,"line":826},[167,11208,11209],{"class":173},"    printStudent",[167,11211,11013],{"class":512},[167,11213,11214],{"class":169,"line":832},[167,11215,741],{"emptyLinePlaceholder":740},[167,11217,11218],{"class":169,"line":837},[167,11219,3630],{"class":512},[19,11221,11053],{},[3205,11223,11224,11227,11230],{},[43,11225,11226],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[43,11228,11229],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[43,11231,11232],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,11234,11236],{"className":2202,"code":11235,"language":2204,"meta":32,"style":32},"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",[34,11237,11238,11257,11261,11266,11286],{"__ignoreMap":32},[167,11239,11240,11242,11244,11246,11248,11251,11253,11255],{"class":169,"line":170},[167,11241,7394],{"class":731},[167,11243,11131],{"class":173},[167,11245,898],{"class":512},[167,11247,8822],{"class":731},[167,11249,11250],{"class":173}," student",[167,11252,8548],{"class":731},[167,11254,2895],{"class":7246},[167,11256,873],{"class":512},[167,11258,11259],{"class":169,"line":191},[167,11260,3611],{"class":512},[167,11262,11263],{"class":169,"line":205},[167,11264,11265],{"class":2268},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[167,11267,11268,11270,11272,11274,11276,11278,11280,11282,11284],{"class":169,"line":219},[167,11269,3616],{"class":512},[167,11271,3242],{"class":731},[167,11273,11153],{"class":512},[167,11275,3242],{"class":731},[167,11277,11158],{"class":512},[167,11279,3242],{"class":731},[167,11281,11163],{"class":512},[167,11283,3242],{"class":731},[167,11285,3264],{"class":512},[167,11287,11288],{"class":169,"line":230},[167,11289,3630],{"class":512},[14,11291,11293],{"id":11292},"_47案例","4.7案例",[40,11295,11296],{},[43,11297,11298],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,11300,11302],{"className":2202,"code":11301,"language":2204,"meta":32,"style":32},"#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",[34,11303,11304,11310,11320,11326,11333,11337,11343,11347,11352,11358,11364,11368,11372,11378,11382,11387,11392,11405,11409,11414,11440,11444,11456,11483,11487,11499,11509,11513,11518,11547,11551,11563,11572,11599,11610,11620,11624,11628,11632,11637,11661,11665,11689,11693,11712,11738,11742,11767,11790,11814,11819,11824,11829,11838,11843,11849,11870,11876,11890,11896,11923,11932,11938,11946,11951],{"__ignoreMap":32},[167,11305,11306,11308],{"class":169,"line":170},[167,11307,3995],{"class":731},[167,11309,3998],{"class":177},[167,11311,11312,11314,11316,11318],{"class":169,"line":191},[167,11313,4003],{"class":731},[167,11315,4006],{"class":731},[167,11317,4009],{"class":173},[167,11319,3359],{"class":512},[167,11321,11322,11324],{"class":169,"line":205},[167,11323,3995],{"class":731},[167,11325,9779],{"class":177},[167,11327,11328,11330],{"class":169,"line":219},[167,11329,3995],{"class":731},[167,11331,11332],{"class":177},"\u003Cctime>\n",[167,11334,11335],{"class":169,"line":230},[167,11336,10566],{"class":2268},[167,11338,11339,11341],{"class":169,"line":241},[167,11340,9789],{"class":731},[167,11342,9792],{"class":173},[167,11344,11345],{"class":169,"line":261},[167,11346,3611],{"class":512},[167,11348,11349],{"class":169,"line":773},[167,11350,11351],{"class":512},"    string sName;\n",[167,11353,11354,11356],{"class":169,"line":779},[167,11355,4029],{"class":731},[167,11357,9827],{"class":512},[167,11359,11360,11362],{"class":169,"line":785},[167,11361,4029],{"class":731},[167,11363,9839],{"class":512},[167,11365,11366],{"class":169,"line":790},[167,11367,6027],{"class":512},[167,11369,11370],{"class":169,"line":796},[167,11371,10603],{"class":2268},[167,11373,11374,11376],{"class":169,"line":802},[167,11375,9789],{"class":731},[167,11377,10610],{"class":173},[167,11379,11380],{"class":169,"line":808},[167,11381,3611],{"class":512},[167,11383,11384],{"class":169,"line":814},[167,11385,11386],{"class":512},"    string tName;\n",[167,11388,11389],{"class":169,"line":820},[167,11390,11391],{"class":2268},"    \u002F\u002F学生数组\n",[167,11393,11394,11396,11398,11401,11403],{"class":169,"line":826},[167,11395,9925],{"class":731},[167,11397,9928],{"class":173},[167,11399,11400],{"class":512}," sArray[",[167,11402,2519],{"class":184},[167,11404,6722],{"class":512},[167,11406,11407],{"class":169,"line":832},[167,11408,6027],{"class":512},[167,11410,11411],{"class":169,"line":837},[167,11412,11413],{"class":2268},"\u002F\u002F给老师和学生赋值的函数\n",[167,11415,11416,11418,11421,11423,11425,11428,11431,11434,11436,11438],{"class":169,"line":842},[167,11417,7394],{"class":731},[167,11419,11420],{"class":173}," allocateSpace",[167,11422,898],{"class":512},[167,11424,9789],{"class":731},[167,11426,11427],{"class":173}," Teacher",[167,11429,11430],{"class":7246}," tArray",[167,11432,11433],{"class":512},"[],",[167,11435,2216],{"class":731},[167,11437,9361],{"class":7246},[167,11439,873],{"class":512},[167,11441,11442],{"class":169,"line":860},[167,11443,3611],{"class":512},[167,11445,11446,11449,11451,11454],{"class":169,"line":876},[167,11447,11448],{"class":512},"    string nameSeed",[167,11450,523],{"class":731},[167,11452,11453],{"class":177},"\"ABCDE\"",[167,11455,3359],{"class":512},[167,11457,11458,11460,11462,11464,11467,11469,11471,11474,11476,11479,11481],{"class":169,"line":887},[167,11459,967],{"class":731},[167,11461,3716],{"class":512},[167,11463,2216],{"class":731},[167,11465,11466],{"class":512}," i ",[167,11468,523],{"class":731},[167,11470,6125],{"class":184},[167,11472,11473],{"class":512},"; i ",[167,11475,513],{"class":731},[167,11477,11478],{"class":512}," len; i",[167,11480,4336],{"class":731},[167,11482,873],{"class":512},[167,11484,11485],{"class":169,"line":892},[167,11486,4074],{"class":512},[167,11488,11489,11492,11494,11497],{"class":169,"line":907},[167,11490,11491],{"class":512},"        tArray[i].tName ",[167,11493,523],{"class":731},[167,11495,11496],{"class":177}," \"Teacher_\"",[167,11498,3359],{"class":512},[167,11500,11501,11503,11506],{"class":169,"line":920},[167,11502,11491],{"class":512},[167,11504,11505],{"class":731},"+=",[167,11507,11508],{"class":512},"nameSeed[i];\n",[167,11510,11511],{"class":169,"line":933},[167,11512,741],{"emptyLinePlaceholder":740},[167,11514,11515],{"class":169,"line":946},[167,11516,11517],{"class":2268},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[167,11519,11520,11522,11524,11526,11529,11531,11533,11536,11538,11540,11543,11545],{"class":169,"line":959},[167,11521,5437],{"class":731},[167,11523,3716],{"class":512},[167,11525,2216],{"class":731},[167,11527,11528],{"class":512}," j ",[167,11530,523],{"class":731},[167,11532,6125],{"class":184},[167,11534,11535],{"class":512},"; j ",[167,11537,513],{"class":731},[167,11539,4192],{"class":184},[167,11541,11542],{"class":512},"; j",[167,11544,4336],{"class":731},[167,11546,873],{"class":512},[167,11548,11549],{"class":169,"line":964},[167,11550,4553],{"class":512},[167,11552,11553,11556,11558,11561],{"class":169,"line":987},[167,11554,11555],{"class":512},"            tArray[i].sArray[j].sName ",[167,11557,523],{"class":731},[167,11559,11560],{"class":177}," \"Student_\"",[167,11562,3359],{"class":512},[167,11564,11565,11567,11569],{"class":169,"line":993},[167,11566,11555],{"class":512},[167,11568,11505],{"class":731},[167,11570,11571],{"class":512}," nameSeed[j];\n",[167,11573,11574,11577,11580,11582,11584,11586,11588,11590,11592,11594,11596],{"class":169,"line":998},[167,11575,11576],{"class":731},"            int",[167,11578,11579],{"class":512}," random",[167,11581,523],{"class":731},[167,11583,4467],{"class":173},[167,11585,4470],{"class":512},[167,11587,2528],{"class":731},[167,11589,3107],{"class":184},[167,11591,2681],{"class":731},[167,11593,2601],{"class":184},[167,11595,2265],{"class":512},[167,11597,11598],{"class":2268},"\u002F\u002F40~99\n",[167,11600,11601,11604,11606,11608],{"class":169,"line":1010},[167,11602,11603],{"class":512},"            tArray[i].sArray[j].age ",[167,11605,523],{"class":731},[167,11607,10978],{"class":184},[167,11609,3359],{"class":512},[167,11611,11612,11615,11617],{"class":169,"line":1022},[167,11613,11614],{"class":512},"            tArray[i].sArray[j].score ",[167,11616,523],{"class":731},[167,11618,11619],{"class":512}," random;\n",[167,11621,11622],{"class":169,"line":1027},[167,11623,4572],{"class":512},[167,11625,11626],{"class":169,"line":1032},[167,11627,4231],{"class":512},[167,11629,11630],{"class":169,"line":1049},[167,11631,3630],{"class":512},[167,11633,11634],{"class":169,"line":10005},[167,11635,11636],{"class":2268},"\u002F\u002F打印所有信息的函数\n",[167,11638,11639,11641,11644,11646,11648,11650,11652,11655,11657,11659],{"class":169,"line":10011},[167,11640,7394],{"class":731},[167,11642,11643],{"class":173}," printInfo",[167,11645,898],{"class":512},[167,11647,9789],{"class":731},[167,11649,11427],{"class":173},[167,11651,11430],{"class":7246},[167,11653,11654],{"class":512},"[], ",[167,11656,2216],{"class":731},[167,11658,9361],{"class":7246},[167,11660,873],{"class":512},[167,11662,11663],{"class":169,"line":10038},[167,11664,3611],{"class":512},[167,11666,11667,11669,11671,11673,11675,11677,11679,11681,11683,11685,11687],{"class":169,"line":10043},[167,11668,967],{"class":731},[167,11670,3716],{"class":512},[167,11672,2216],{"class":731},[167,11674,11466],{"class":512},[167,11676,523],{"class":731},[167,11678,6125],{"class":184},[167,11680,11473],{"class":512},[167,11682,513],{"class":731},[167,11684,11478],{"class":512},[167,11686,4336],{"class":731},[167,11688,873],{"class":512},[167,11690,11691],{"class":169,"line":10049},[167,11692,4074],{"class":512},[167,11694,11695,11698,11700,11703,11705,11708,11710],{"class":169,"line":10061},[167,11696,11697],{"class":512},"        cout ",[167,11699,3242],{"class":731},[167,11701,11702],{"class":177}," \"Teacher: \"",[167,11704,3510],{"class":731},[167,11706,11707],{"class":512}," tArray[i].tName ",[167,11709,3242],{"class":731},[167,11711,10868],{"class":512},[167,11713,11714,11716,11718,11720,11722,11724,11726,11728,11730,11732,11734,11736],{"class":169,"line":10073},[167,11715,5437],{"class":731},[167,11717,3716],{"class":512},[167,11719,2216],{"class":731},[167,11721,11528],{"class":512},[167,11723,523],{"class":731},[167,11725,6125],{"class":184},[167,11727,11535],{"class":512},[167,11729,513],{"class":731},[167,11731,4192],{"class":184},[167,11733,11542],{"class":512},[167,11735,4336],{"class":731},[167,11737,873],{"class":512},[167,11739,11740],{"class":169,"line":10085},[167,11741,4553],{"class":512},[167,11743,11745,11748,11750,11753,11755,11758,11760,11763,11765],{"class":169,"line":11744},47,[167,11746,11747],{"class":512},"            cout ",[167,11749,3242],{"class":731},[167,11751,11752],{"class":177}," \"",[167,11754,3299],{"class":184},[167,11756,11757],{"class":177},"Student: \"",[167,11759,3510],{"class":731},[167,11761,11762],{"class":512}," tArray[i].sArray[j].sName",[167,11764,3242],{"class":731},[167,11766,3264],{"class":512},[167,11768,11770,11772,11774,11776,11778,11781,11783,11786,11788],{"class":169,"line":11769},48,[167,11771,11747],{"class":512},[167,11773,3242],{"class":731},[167,11775,11752],{"class":177},[167,11777,3299],{"class":184},[167,11779,11780],{"class":177},"Age: \"",[167,11782,3510],{"class":731},[167,11784,11785],{"class":512}," tArray[i].sArray[j].age ",[167,11787,3242],{"class":731},[167,11789,10868],{"class":512},[167,11791,11793,11795,11797,11799,11801,11804,11806,11809,11811],{"class":169,"line":11792},49,[167,11794,11747],{"class":512},[167,11796,3242],{"class":731},[167,11798,11752],{"class":177},[167,11800,3299],{"class":184},[167,11802,11803],{"class":177},"Score: \"",[167,11805,3510],{"class":731},[167,11807,11808],{"class":512}," tArray[i].sArray[j].score ",[167,11810,3242],{"class":731},[167,11812,11813],{"class":512}," endl;   \n",[167,11815,11817],{"class":169,"line":11816},50,[167,11818,4572],{"class":512},[167,11820,11822],{"class":169,"line":11821},51,[167,11823,4231],{"class":512},[167,11825,11827],{"class":169,"line":11826},52,[167,11828,3630],{"class":512},[167,11830,11832,11834,11836],{"class":169,"line":11831},53,[167,11833,2216],{"class":731},[167,11835,848],{"class":173},[167,11837,4020],{"class":512},[167,11839,11841],{"class":169,"line":11840},54,[167,11842,3611],{"class":512},[167,11844,11846],{"class":169,"line":11845},55,[167,11847,11848],{"class":2268},"    \u002F\u002F随机数种子\n",[167,11850,11852,11854,11856,11858,11860,11862,11864,11866,11868],{"class":169,"line":11851},56,[167,11853,4417],{"class":173},[167,11855,4420],{"class":512},[167,11857,4423],{"class":731},[167,11859,4426],{"class":731},[167,11861,2629],{"class":512},[167,11863,4431],{"class":173},[167,11865,898],{"class":512},[167,11867,4436],{"class":184},[167,11869,4439],{"class":512},[167,11871,11873],{"class":169,"line":11872},57,[167,11874,11875],{"class":2268},"    \u002F\u002F1.创建3名老师的数组\n",[167,11877,11879,11881,11883,11886,11888],{"class":169,"line":11878},58,[167,11880,9925],{"class":731},[167,11882,11427],{"class":173},[167,11884,11885],{"class":512}," tArray[",[167,11887,2281],{"class":184},[167,11889,6722],{"class":512},[167,11891,11893],{"class":169,"line":11892},59,[167,11894,11895],{"class":2268},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[167,11897,11899,11901,11904,11906,11909,11912,11914,11916,11919,11921],{"class":169,"line":11898},60,[167,11900,4029],{"class":731},[167,11902,11903],{"class":512}," len ",[167,11905,523],{"class":731},[167,11907,11908],{"class":731}," sizeof",[167,11910,11911],{"class":512},"(tArray) ",[167,11913,2784],{"class":731},[167,11915,11908],{"class":731},[167,11917,11918],{"class":512},"(tArray[",[167,11920,1154],{"class":184},[167,11922,5888],{"class":512},[167,11924,11926,11929],{"class":169,"line":11925},61,[167,11927,11928],{"class":173},"    allocateSpace",[167,11930,11931],{"class":512},"(tArray, len);\n",[167,11933,11935],{"class":169,"line":11934},62,[167,11936,11937],{"class":2268},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[167,11939,11941,11944],{"class":169,"line":11940},63,[167,11942,11943],{"class":173},"    printInfo",[167,11945,11931],{"class":512},[167,11947,11949],{"class":169,"line":11948},64,[167,11950,741],{"emptyLinePlaceholder":740},[167,11952,11954],{"class":169,"line":11953},65,[167,11955,3630],{"class":512},[40,11957,11958],{"start":191},[43,11959,11960,11963],{},[2354,11961,11962],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11965,11966],{},"五名英雄信息如下：",[26,11968,11972],{"className":11969,"code":11970,"language":11971,"meta":32,"style":32},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[34,11973,11974,11992,12009,12026,12043],{"__ignoreMap":32},[167,11975,11976,11978,11981,11983,11985,11987,11990],{"class":169,"line":170},[167,11977,6949],{"class":512},[167,11979,11980],{"class":177},"\"刘备\"",[167,11982,2578],{"class":512},[167,11984,2975],{"class":184},[167,11986,2578],{"class":512},[167,11988,11989],{"class":177},"\"男\"",[167,11991,6962],{"class":512},[167,11993,11994,11996,11999,12001,12003,12005,12007],{"class":169,"line":191},[167,11995,6949],{"class":512},[167,11997,11998],{"class":177},"\"关羽\"",[167,12000,2578],{"class":512},[167,12002,2950],{"class":184},[167,12004,2578],{"class":512},[167,12006,11989],{"class":177},[167,12008,6962],{"class":512},[167,12010,12011,12013,12016,12018,12020,12022,12024],{"class":169,"line":205},[167,12012,6949],{"class":512},[167,12014,12015],{"class":177},"\"张飞\"",[167,12017,2578],{"class":512},[167,12019,2900],{"class":184},[167,12021,2578],{"class":512},[167,12023,11989],{"class":177},[167,12025,6962],{"class":512},[167,12027,12028,12030,12033,12035,12037,12039,12041],{"class":169,"line":219},[167,12029,6949],{"class":512},[167,12031,12032],{"class":177},"\"赵云\"",[167,12034,2578],{"class":512},[167,12036,2925],{"class":184},[167,12038,2578],{"class":512},[167,12040,11989],{"class":177},[167,12042,6962],{"class":512},[167,12044,12045,12047,12050,12052,12054,12056,12059],{"class":169,"line":230},[167,12046,6949],{"class":512},[167,12048,12049],{"class":177},"\"貂蝉\"",[167,12051,2578],{"class":512},[167,12053,2875],{"class":184},[167,12055,2578],{"class":512},[167,12057,12058],{"class":177},"\"女\"",[167,12060,6962],{"class":512},[19,12062,12063],{},"代码：",[26,12065,12067],{"className":2202,"code":12066,"language":2204,"meta":32,"style":32},"#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",[34,12068,12069,12075,12085,12091,12098,12102,12106,12112,12117,12121,12126,12149,12153,12178,12182,12215,12220,12249,12254,12269,12295,12315,12320,12325,12329,12333,12338,12360,12364,12388,12392,12454,12458,12462,12470,12474,12479,12490,12494,12510,12526,12542,12558,12574,12578,12598,12620,12625,12638,12645,12650,12656,12661,12674,12680],{"__ignoreMap":32},[167,12070,12071,12073],{"class":169,"line":170},[167,12072,3995],{"class":731},[167,12074,3998],{"class":177},[167,12076,12077,12079,12081,12083],{"class":169,"line":191},[167,12078,4003],{"class":731},[167,12080,4006],{"class":731},[167,12082,4009],{"class":173},[167,12084,3359],{"class":512},[167,12086,12087,12089],{"class":169,"line":205},[167,12088,3995],{"class":731},[167,12090,9779],{"class":177},[167,12092,12093,12095],{"class":169,"line":219},[167,12094,9789],{"class":731},[167,12096,12097],{"class":173}," Sanguo\n",[167,12099,12100],{"class":169,"line":230},[167,12101,3611],{"class":512},[167,12103,12104],{"class":169,"line":241},[167,12105,9815],{"class":512},[167,12107,12108,12110],{"class":169,"line":261},[167,12109,4029],{"class":731},[167,12111,9827],{"class":512},[167,12113,12114],{"class":169,"line":773},[167,12115,12116],{"class":512},"    string gender;\n",[167,12118,12119],{"class":169,"line":779},[167,12120,6027],{"class":512},[167,12122,12123],{"class":169,"line":785},[167,12124,12125],{"class":2268},"\u002F\u002F定义排序函数\n",[167,12127,12128,12130,12132,12134,12137,12139,12141,12143,12145,12147],{"class":169,"line":790},[167,12129,7394],{"class":731},[167,12131,9346],{"class":173},[167,12133,898],{"class":512},[167,12135,12136],{"class":173},"Sanguo",[167,12138,8548],{"class":731},[167,12140,2895],{"class":7246},[167,12142,2578],{"class":512},[167,12144,2216],{"class":731},[167,12146,9361],{"class":7246},[167,12148,873],{"class":512},[167,12150,12151],{"class":169,"line":796},[167,12152,3611],{"class":512},[167,12154,12155,12157,12159,12161,12163,12165,12167,12169,12171,12174,12176],{"class":169,"line":802},[167,12156,967],{"class":731},[167,12158,898],{"class":512},[167,12160,2216],{"class":731},[167,12162,5067],{"class":512},[167,12164,523],{"class":731},[167,12166,1154],{"class":184},[167,12168,5074],{"class":512},[167,12170,513],{"class":731},[167,12172,12173],{"class":512},"len;i",[167,12175,4336],{"class":731},[167,12177,873],{"class":512},[167,12179,12180],{"class":169,"line":808},[167,12181,4074],{"class":512},[167,12183,12184,12187,12189,12191,12193,12195,12197,12199,12201,12203,12205,12207,12209,12211,12213],{"class":169,"line":814},[167,12185,12186],{"class":731},"     for",[167,12188,3716],{"class":512},[167,12190,2216],{"class":731},[167,12192,5444],{"class":512},[167,12194,523],{"class":731},[167,12196,1154],{"class":184},[167,12198,5451],{"class":512},[167,12200,513],{"class":731},[167,12202,9388],{"class":512},[167,12204,2732],{"class":731},[167,12206,2418],{"class":184},[167,12208,2732],{"class":731},[167,12210,5584],{"class":512},[167,12212,4336],{"class":731},[167,12214,873],{"class":512},[167,12216,12217],{"class":169,"line":820},[167,12218,12219],{"class":512},"     {\n",[167,12221,12222,12225,12228,12230,12233,12235,12238,12240,12242,12244,12246],{"class":169,"line":826},[167,12223,12224],{"class":731},"         if",[167,12226,12227],{"class":512}," ((s",[167,12229,2681],{"class":731},[167,12231,12232],{"class":512},"j)->age ",[167,12234,3159],{"class":731},[167,12236,12237],{"class":512}," (s",[167,12239,2681],{"class":731},[167,12241,2667],{"class":512},[167,12243,2681],{"class":731},[167,12245,2418],{"class":184},[167,12247,12248],{"class":512},")->age)\n",[167,12250,12251],{"class":169,"line":832},[167,12252,12253],{"class":512},"         {\n",[167,12255,12256,12259,12261,12264,12266],{"class":169,"line":837},[167,12257,12258],{"class":512},"             Sanguo temp",[167,12260,9183],{"class":731},[167,12262,12263],{"class":512},"(s",[167,12265,2681],{"class":731},[167,12267,12268],{"class":512},"j);\n",[167,12270,12271,12274,12276,12278,12281,12283,12285,12287,12289,12291,12293],{"class":169,"line":842},[167,12272,12273],{"class":731},"             *",[167,12275,12263],{"class":512},[167,12277,2681],{"class":731},[167,12279,12280],{"class":512},"j)",[167,12282,9183],{"class":731},[167,12284,12263],{"class":512},[167,12286,2681],{"class":731},[167,12288,2667],{"class":512},[167,12290,2681],{"class":731},[167,12292,2418],{"class":184},[167,12294,4755],{"class":512},[167,12296,12297,12299,12301,12303,12305,12307,12309,12311,12313],{"class":169,"line":860},[167,12298,12273],{"class":731},[167,12300,12263],{"class":512},[167,12302,2681],{"class":731},[167,12304,2667],{"class":512},[167,12306,2681],{"class":731},[167,12308,2418],{"class":184},[167,12310,2629],{"class":512},[167,12312,523],{"class":731},[167,12314,6312],{"class":512},[167,12316,12317],{"class":169,"line":876},[167,12318,12319],{"class":512},"         }\n",[167,12321,12322],{"class":169,"line":887},[167,12323,12324],{"class":512},"     }\n",[167,12326,12327],{"class":169,"line":892},[167,12328,4231],{"class":512},[167,12330,12331],{"class":169,"line":907},[167,12332,3630],{"class":512},[167,12334,12335],{"class":169,"line":920},[167,12336,12337],{"class":2268},"\u002F\u002F定义打印函数\n",[167,12339,12340,12342,12344,12346,12348,12350,12352,12354,12356,12358],{"class":169,"line":933},[167,12341,7394],{"class":731},[167,12343,11643],{"class":173},[167,12345,898],{"class":512},[167,12347,12136],{"class":173},[167,12349,8548],{"class":731},[167,12351,2895],{"class":7246},[167,12353,2578],{"class":512},[167,12355,2216],{"class":731},[167,12357,9361],{"class":7246},[167,12359,873],{"class":512},[167,12361,12362],{"class":169,"line":946},[167,12363,3611],{"class":512},[167,12365,12366,12368,12370,12372,12374,12376,12378,12380,12382,12384,12386],{"class":169,"line":959},[167,12367,967],{"class":731},[167,12369,3716],{"class":512},[167,12371,2216],{"class":731},[167,12373,5067],{"class":512},[167,12375,523],{"class":731},[167,12377,1154],{"class":184},[167,12379,5074],{"class":512},[167,12381,513],{"class":731},[167,12383,12173],{"class":512},[167,12385,4336],{"class":731},[167,12387,873],{"class":512},[167,12389,12390],{"class":169,"line":964},[167,12391,4074],{"class":512},[167,12393,12394,12396,12398,12400,12402,12405,12407,12409,12411,12414,12416,12418,12420,12423,12425,12427,12429,12432,12434,12436,12438,12441,12443,12445,12447,12450,12452],{"class":169,"line":987},[167,12395,5485],{"class":512},[167,12397,3242],{"class":731},[167,12399,2452],{"class":177},[167,12401,3299],{"class":184},[167,12403,12404],{"class":177},"姓名：\"",[167,12406,3242],{"class":731},[167,12408,12263],{"class":512},[167,12410,2681],{"class":731},[167,12412,12413],{"class":512},"i)->name",[167,12415,3242],{"class":731},[167,12417,2452],{"class":177},[167,12419,3299],{"class":184},[167,12421,12422],{"class":177},"年龄：\"",[167,12424,3242],{"class":731},[167,12426,12263],{"class":512},[167,12428,2681],{"class":731},[167,12430,12431],{"class":512},"i)->age",[167,12433,3242],{"class":731},[167,12435,2452],{"class":177},[167,12437,3299],{"class":184},[167,12439,12440],{"class":177},"性别：\"",[167,12442,3242],{"class":731},[167,12444,12263],{"class":512},[167,12446,2681],{"class":731},[167,12448,12449],{"class":512},"i)->gender",[167,12451,3242],{"class":731},[167,12453,3264],{"class":512},[167,12455,12456],{"class":169,"line":993},[167,12457,4231],{"class":512},[167,12459,12460],{"class":169,"line":998},[167,12461,3630],{"class":512},[167,12463,12464,12466,12468],{"class":169,"line":1010},[167,12465,2216],{"class":731},[167,12467,848],{"class":173},[167,12469,4020],{"class":512},[167,12471,12472],{"class":169,"line":1022},[167,12473,3611],{"class":512},[167,12475,12476],{"class":169,"line":1027},[167,12477,12478],{"class":2268},"    \u002F\u002F定义结构体变量\n",[167,12480,12481,12484,12486,12488],{"class":169,"line":1032},[167,12482,12483],{"class":512},"    Sanguo s1[",[167,12485,2519],{"class":184},[167,12487,3139],{"class":512},[167,12489,6940],{"class":731},[167,12491,12492],{"class":169,"line":1049},[167,12493,4074],{"class":512},[167,12495,12496,12498,12500,12502,12504,12506,12508],{"class":169,"line":10005},[167,12497,6949],{"class":512},[167,12499,11980],{"class":177},[167,12501,2578],{"class":512},[167,12503,2975],{"class":184},[167,12505,2578],{"class":512},[167,12507,11989],{"class":177},[167,12509,6962],{"class":512},[167,12511,12512,12514,12516,12518,12520,12522,12524],{"class":169,"line":10011},[167,12513,6949],{"class":512},[167,12515,11998],{"class":177},[167,12517,2578],{"class":512},[167,12519,2950],{"class":184},[167,12521,2578],{"class":512},[167,12523,11989],{"class":177},[167,12525,6962],{"class":512},[167,12527,12528,12530,12532,12534,12536,12538,12540],{"class":169,"line":10038},[167,12529,6949],{"class":512},[167,12531,12015],{"class":177},[167,12533,2578],{"class":512},[167,12535,2900],{"class":184},[167,12537,2578],{"class":512},[167,12539,11989],{"class":177},[167,12541,6962],{"class":512},[167,12543,12544,12546,12548,12550,12552,12554,12556],{"class":169,"line":10043},[167,12545,6949],{"class":512},[167,12547,12032],{"class":177},[167,12549,2578],{"class":512},[167,12551,2925],{"class":184},[167,12553,2578],{"class":512},[167,12555,11989],{"class":177},[167,12557,6962],{"class":512},[167,12559,12560,12562,12564,12566,12568,12570,12572],{"class":169,"line":10049},[167,12561,6949],{"class":512},[167,12563,12049],{"class":177},[167,12565,2578],{"class":512},[167,12567,2875],{"class":184},[167,12569,2578],{"class":512},[167,12571,12058],{"class":177},[167,12573,6962],{"class":512},[167,12575,12576],{"class":169,"line":10061},[167,12577,6983],{"class":512},[167,12579,12580,12582,12584,12586,12589,12591,12594,12596],{"class":169,"line":10073},[167,12581,4029],{"class":731},[167,12583,9361],{"class":512},[167,12585,6235],{"class":731},[167,12587,12588],{"class":512},"(s1)",[167,12590,6241],{"class":731},[167,12592,12593],{"class":512},"(s1[",[167,12595,1154],{"class":184},[167,12597,5888],{"class":512},[167,12599,12600,12603,12605,12608,12610,12613,12616,12618],{"class":169,"line":10085},[167,12601,12602],{"class":512},"    Sanguo ",[167,12604,2655],{"class":731},[167,12606,12607],{"class":512},"s ",[167,12609,523],{"class":731},[167,12611,12612],{"class":731}," &",[167,12614,12615],{"class":512},"s1[",[167,12617,1154],{"class":184},[167,12619,6722],{"class":512},[167,12621,12622],{"class":169,"line":11744},[167,12623,12624],{"class":2268},"    \u002F\u002F排序前：\n",[167,12626,12627,12629,12631,12634,12636],{"class":169,"line":11769},[167,12628,8559],{"class":512},[167,12630,3242],{"class":731},[167,12632,12633],{"class":177}," \"排序前：\"",[167,12635,3510],{"class":731},[167,12637,10868],{"class":512},[167,12639,12640,12642],{"class":169,"line":11792},[167,12641,11943],{"class":173},[167,12643,12644],{"class":512},"(s,len);\n",[167,12646,12647],{"class":169,"line":11816},[167,12648,12649],{"class":2268},"    \u002F\u002F调用排序函数\n",[167,12651,12652,12654],{"class":169,"line":11821},[167,12653,9628],{"class":173},[167,12655,12644],{"class":512},[167,12657,12658],{"class":169,"line":11826},[167,12659,12660],{"class":2268},"    \u002F\u002F排序后\n",[167,12662,12663,12665,12667,12670,12672],{"class":169,"line":11831},[167,12664,8559],{"class":512},[167,12666,3242],{"class":731},[167,12668,12669],{"class":177}," \"排序后：\"",[167,12671,3510],{"class":731},[167,12673,10868],{"class":512},[167,12675,12676,12678],{"class":169,"line":11840},[167,12677,11943],{"class":173},[167,12679,12644],{"class":512},[167,12681,12682],{"class":169,"line":11845},[167,12683,3630],{"class":512},[19,12685,12686,12687,12689],{},"注意：使用指针时直接用传首地址**&s",[167,12688,1154],{},"**",[2113,12691,12692],{},"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":32,"searchDepth":191,"depth":191,"links":12694},[12695,12696,12697,12698,12699,12700,12701],{"id":9733,"depth":191,"text":9734},{"id":10093,"depth":191,"text":10094},{"id":10362,"depth":191,"text":10363},{"id":10527,"depth":191,"text":10528},{"id":10743,"depth":191,"text":10744},{"id":11064,"depth":191,"text":11065},{"id":11292,"depth":191,"text":11293},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9722,"description":9730},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12708,"title":12709,"body":12710,"description":32,"extension":2140,"meta":14053,"navigation":740,"path":14054,"seo":14055,"stem":14056,"__hash__":14057},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12711,"toc":14047},[12712,12715,12719,12725,12739,12744,12747,12751,12758,12764,12767,12774,12780,12785,12788,12791,12794,13358,13361,13375,13379,13384,13400,13540,13543,13549,13552,13557,13565,13673,13676,13681,13684,13689,13692,13698,13701,14044],[10,12713,12709],{"id":12714},"_5程序内存模型",[14,12716,12718],{"id":12717},"_51内存分区模型","5.1内存分区模型",[19,12720,12721,12722],{},"C++程序在执行时，将内存大方向划分为",[2354,12723,12724],{},"4个区域",[3205,12726,12727,12730,12733,12736],{},[43,12728,12729],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[43,12731,12732],{},"全局区：存放全局变量和静态变量以及常量",[43,12734,12735],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[43,12737,12738],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12740,12741],{},[2354,12742,12743],{},"内存四区意义：",[19,12745,12746],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[494,12748,12750],{"id":12749},"_511程序运行前","5.1.1程序运行前",[19,12752,12753,12754,12757],{},"​\t在程序编译后，生成了exe可执行程序，",[2354,12755,12756],{},"未执行该程序前","分为两个区域",[19,12759,12760,12761],{},"​\t",[2354,12762,12763],{},"代码区：",[19,12765,12766],{},"​\t\t存放 CPU 执行的机器指令",[19,12768,12769,12770,12773],{},"​\t\t代码区是",[2354,12771,12772],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12775,12769,12776,12779],{},[2354,12777,12778],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12781,12760,12782],{},[2354,12783,12784],{},"全局区：",[19,12786,12787],{},"​\t\t全局变量和静态变量存放在此.",[19,12789,12790],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12792,12793],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,12795,12797],{"className":2202,"code":12796,"language":2204,"meta":32,"style":32},"\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",[34,12798,12799,12804,12817,12830,12834,12839,12854,12869,12873,12882,12886,12891,12904,12917,12921,12926,12952,12978,12982,13009,13035,13039,13044,13060,13075,13079,13105,13131,13135,13160,13185,13189,13215,13241,13245,13261,13276,13302,13328,13332,13342,13346,13354],{"__ignoreMap":32},[167,12800,12801],{"class":169,"line":170},[167,12802,12803],{"class":2268},"\u002F\u002F全局变量\n",[167,12805,12806,12808,12811,12813,12815],{"class":169,"line":191},[167,12807,2216],{"class":731},[167,12809,12810],{"class":512}," g_a ",[167,12812,523],{"class":731},[167,12814,4082],{"class":184},[167,12816,3359],{"class":512},[167,12818,12819,12821,12824,12826,12828],{"class":169,"line":205},[167,12820,2216],{"class":731},[167,12822,12823],{"class":512}," g_b ",[167,12825,523],{"class":731},[167,12827,4082],{"class":184},[167,12829,3359],{"class":512},[167,12831,12832],{"class":169,"line":219},[167,12833,741],{"emptyLinePlaceholder":740},[167,12835,12836],{"class":169,"line":230},[167,12837,12838],{"class":2268},"\u002F\u002F全局常量\n",[167,12840,12841,12843,12845,12848,12850,12852],{"class":169,"line":241},[167,12842,8822],{"class":731},[167,12844,4426],{"class":731},[167,12846,12847],{"class":512}," c_g_a ",[167,12849,523],{"class":731},[167,12851,4082],{"class":184},[167,12853,3359],{"class":512},[167,12855,12856,12858,12860,12863,12865,12867],{"class":169,"line":261},[167,12857,8822],{"class":731},[167,12859,4426],{"class":731},[167,12861,12862],{"class":512}," c_g_b ",[167,12864,523],{"class":731},[167,12866,4082],{"class":184},[167,12868,3359],{"class":512},[167,12870,12871],{"class":169,"line":773},[167,12872,741],{"emptyLinePlaceholder":740},[167,12874,12875,12877,12879],{"class":169,"line":779},[167,12876,2216],{"class":731},[167,12878,848],{"class":173},[167,12880,12881],{"class":512},"() {\n",[167,12883,12884],{"class":169,"line":785},[167,12885,741],{"emptyLinePlaceholder":740},[167,12887,12888],{"class":169,"line":790},[167,12889,12890],{"class":2268},"    \u002F\u002F局部变量\n",[167,12892,12893,12895,12898,12900,12902],{"class":169,"line":796},[167,12894,4029],{"class":731},[167,12896,12897],{"class":512}," a ",[167,12899,523],{"class":731},[167,12901,4082],{"class":184},[167,12903,3359],{"class":512},[167,12905,12906,12908,12911,12913,12915],{"class":169,"line":802},[167,12907,4029],{"class":731},[167,12909,12910],{"class":512}," b ",[167,12912,523],{"class":731},[167,12914,4082],{"class":184},[167,12916,3359],{"class":512},[167,12918,12919],{"class":169,"line":808},[167,12920,741],{"emptyLinePlaceholder":740},[167,12922,12923],{"class":169,"line":814},[167,12924,12925],{"class":2268},"    \u002F\u002F打印地址\n",[167,12927,12928,12930,12932,12935,12937,12939,12941,12943,12945,12948,12950],{"class":169,"line":820},[167,12929,8559],{"class":512},[167,12931,3242],{"class":731},[167,12933,12934],{"class":177}," \"局部变量a地址为： \"",[167,12936,3510],{"class":731},[167,12938,3716],{"class":512},[167,12940,2216],{"class":731},[167,12942,2629],{"class":512},[167,12944,2553],{"class":731},[167,12946,12947],{"class":512},"a ",[167,12949,3242],{"class":731},[167,12951,10868],{"class":512},[167,12953,12954,12956,12958,12961,12963,12965,12967,12969,12971,12974,12976],{"class":169,"line":826},[167,12955,8559],{"class":512},[167,12957,3242],{"class":731},[167,12959,12960],{"class":177}," \"局部变量b地址为： \"",[167,12962,3510],{"class":731},[167,12964,3716],{"class":512},[167,12966,2216],{"class":731},[167,12968,2629],{"class":512},[167,12970,2553],{"class":731},[167,12972,12973],{"class":512},"b ",[167,12975,3242],{"class":731},[167,12977,10868],{"class":512},[167,12979,12980],{"class":169,"line":832},[167,12981,741],{"emptyLinePlaceholder":740},[167,12983,12984,12986,12988,12991,12993,12996,12998,13000,13002,13005,13007],{"class":169,"line":837},[167,12985,8559],{"class":512},[167,12987,3242],{"class":731},[167,12989,12990],{"class":177}," \"全局变量g_a地址为： \"",[167,12992,3510],{"class":731},[167,12994,12995],{"class":512},"  (",[167,12997,2216],{"class":731},[167,12999,2629],{"class":512},[167,13001,2553],{"class":731},[167,13003,13004],{"class":512},"g_a ",[167,13006,3242],{"class":731},[167,13008,10868],{"class":512},[167,13010,13011,13013,13015,13018,13020,13022,13024,13026,13028,13031,13033],{"class":169,"line":842},[167,13012,8559],{"class":512},[167,13014,3242],{"class":731},[167,13016,13017],{"class":177}," \"全局变量g_b地址为： \"",[167,13019,3510],{"class":731},[167,13021,12995],{"class":512},[167,13023,2216],{"class":731},[167,13025,2629],{"class":512},[167,13027,2553],{"class":731},[167,13029,13030],{"class":512},"g_b ",[167,13032,3242],{"class":731},[167,13034,10868],{"class":512},[167,13036,13037],{"class":169,"line":860},[167,13038,741],{"emptyLinePlaceholder":740},[167,13040,13041],{"class":169,"line":876},[167,13042,13043],{"class":2268},"    \u002F\u002F静态变量\n",[167,13045,13046,13049,13051,13054,13056,13058],{"class":169,"line":887},[167,13047,13048],{"class":731},"    static",[167,13050,4426],{"class":731},[167,13052,13053],{"class":512}," s_a ",[167,13055,523],{"class":731},[167,13057,4082],{"class":184},[167,13059,3359],{"class":512},[167,13061,13062,13064,13066,13069,13071,13073],{"class":169,"line":892},[167,13063,13048],{"class":731},[167,13065,4426],{"class":731},[167,13067,13068],{"class":512}," s_b ",[167,13070,523],{"class":731},[167,13072,4082],{"class":184},[167,13074,3359],{"class":512},[167,13076,13077],{"class":169,"line":907},[167,13078,741],{"emptyLinePlaceholder":740},[167,13080,13081,13083,13085,13088,13090,13092,13094,13096,13098,13101,13103],{"class":169,"line":920},[167,13082,8559],{"class":512},[167,13084,3242],{"class":731},[167,13086,13087],{"class":177}," \"静态变量s_a地址为： \"",[167,13089,3510],{"class":731},[167,13091,3716],{"class":512},[167,13093,2216],{"class":731},[167,13095,2629],{"class":512},[167,13097,2553],{"class":731},[167,13099,13100],{"class":512},"s_a ",[167,13102,3242],{"class":731},[167,13104,10868],{"class":512},[167,13106,13107,13109,13111,13114,13116,13118,13120,13122,13124,13127,13129],{"class":169,"line":933},[167,13108,8559],{"class":512},[167,13110,3242],{"class":731},[167,13112,13113],{"class":177}," \"静态变量s_b地址为： \"",[167,13115,3510],{"class":731},[167,13117,3716],{"class":512},[167,13119,2216],{"class":731},[167,13121,2629],{"class":512},[167,13123,2553],{"class":731},[167,13125,13126],{"class":512},"s_b ",[167,13128,3242],{"class":731},[167,13130,10868],{"class":512},[167,13132,13133],{"class":169,"line":946},[167,13134,741],{"emptyLinePlaceholder":740},[167,13136,13137,13139,13141,13144,13146,13148,13150,13152,13154,13156,13158],{"class":169,"line":959},[167,13138,8559],{"class":512},[167,13140,3242],{"class":731},[167,13142,13143],{"class":177}," \"字符串常量地址为： \"",[167,13145,3510],{"class":731},[167,13147,3716],{"class":512},[167,13149,2216],{"class":731},[167,13151,2629],{"class":512},[167,13153,2553],{"class":731},[167,13155,3259],{"class":177},[167,13157,3510],{"class":731},[167,13159,10868],{"class":512},[167,13161,13162,13164,13166,13168,13170,13172,13174,13176,13178,13181,13183],{"class":169,"line":964},[167,13163,8559],{"class":512},[167,13165,3242],{"class":731},[167,13167,13143],{"class":177},[167,13169,3510],{"class":731},[167,13171,3716],{"class":512},[167,13173,2216],{"class":731},[167,13175,2629],{"class":512},[167,13177,2553],{"class":731},[167,13179,13180],{"class":177},"\"hello world1\"",[167,13182,3510],{"class":731},[167,13184,10868],{"class":512},[167,13186,13187],{"class":169,"line":987},[167,13188,741],{"emptyLinePlaceholder":740},[167,13190,13191,13193,13195,13198,13200,13202,13204,13206,13208,13211,13213],{"class":169,"line":993},[167,13192,8559],{"class":512},[167,13194,3242],{"class":731},[167,13196,13197],{"class":177}," \"全局常量c_g_a地址为： \"",[167,13199,3510],{"class":731},[167,13201,3716],{"class":512},[167,13203,2216],{"class":731},[167,13205,2629],{"class":512},[167,13207,2553],{"class":731},[167,13209,13210],{"class":512},"c_g_a ",[167,13212,3242],{"class":731},[167,13214,10868],{"class":512},[167,13216,13217,13219,13221,13224,13226,13228,13230,13232,13234,13237,13239],{"class":169,"line":998},[167,13218,8559],{"class":512},[167,13220,3242],{"class":731},[167,13222,13223],{"class":177}," \"全局常量c_g_b地址为： \"",[167,13225,3510],{"class":731},[167,13227,3716],{"class":512},[167,13229,2216],{"class":731},[167,13231,2629],{"class":512},[167,13233,2553],{"class":731},[167,13235,13236],{"class":512},"c_g_b ",[167,13238,3242],{"class":731},[167,13240,10868],{"class":512},[167,13242,13243],{"class":169,"line":1010},[167,13244,741],{"emptyLinePlaceholder":740},[167,13246,13247,13250,13252,13255,13257,13259],{"class":169,"line":1022},[167,13248,13249],{"class":731},"    const",[167,13251,4426],{"class":731},[167,13253,13254],{"class":512}," c_l_a ",[167,13256,523],{"class":731},[167,13258,4082],{"class":184},[167,13260,3359],{"class":512},[167,13262,13263,13265,13267,13270,13272,13274],{"class":169,"line":1027},[167,13264,13249],{"class":731},[167,13266,4426],{"class":731},[167,13268,13269],{"class":512}," c_l_b ",[167,13271,523],{"class":731},[167,13273,4082],{"class":184},[167,13275,3359],{"class":512},[167,13277,13278,13280,13282,13285,13287,13289,13291,13293,13295,13298,13300],{"class":169,"line":1032},[167,13279,8559],{"class":512},[167,13281,3242],{"class":731},[167,13283,13284],{"class":177}," \"局部常量c_l_a地址为： \"",[167,13286,3510],{"class":731},[167,13288,3716],{"class":512},[167,13290,2216],{"class":731},[167,13292,2629],{"class":512},[167,13294,2553],{"class":731},[167,13296,13297],{"class":512},"c_l_a ",[167,13299,3242],{"class":731},[167,13301,10868],{"class":512},[167,13303,13304,13306,13308,13311,13313,13315,13317,13319,13321,13324,13326],{"class":169,"line":1049},[167,13305,8559],{"class":512},[167,13307,3242],{"class":731},[167,13309,13310],{"class":177}," \"局部常量c_l_b地址为： \"",[167,13312,3510],{"class":731},[167,13314,3716],{"class":512},[167,13316,2216],{"class":731},[167,13318,2629],{"class":512},[167,13320,2553],{"class":731},[167,13322,13323],{"class":512},"c_l_b ",[167,13325,3242],{"class":731},[167,13327,10868],{"class":512},[167,13329,13330],{"class":169,"line":10005},[167,13331,741],{"emptyLinePlaceholder":740},[167,13333,13334,13336,13338,13340],{"class":169,"line":10011},[167,13335,4347],{"class":173},[167,13337,898],{"class":512},[167,13339,4352],{"class":177},[167,13341,4755],{"class":512},[167,13343,13344],{"class":169,"line":10038},[167,13345,741],{"emptyLinePlaceholder":740},[167,13347,13348,13350,13352],{"class":169,"line":10043},[167,13349,6122],{"class":731},[167,13351,6125],{"class":184},[167,13353,3359],{"class":512},[167,13355,13356],{"class":169,"line":10049},[167,13357,3630],{"class":512},[19,13359,13360],{},"总结：",[3205,13362,13363,13366,13369,13372],{},[43,13364,13365],{},"c++中程序运行前分为全局区和代码区",[43,13367,13368],{},"代码区特点是共享和只读",[43,13370,13371],{},"全局区中存放全局变量、静态变量、常量",[43,13373,13374],{},"常量区中存放const修饰的全局常量和字符串常量",[494,13376,13378],{"id":13377},"_512程序运行后","5.1.2程序运行后",[40,13380,13381],{},[43,13382,13383],{},"栈区：",[3205,13385,13386,13393],{},[43,13387,13388,13389,13392],{},"由编译器自动分配释放, 存放",[2354,13390,13391],{},"函数的参数值,局部变量","等",[43,13394,13395,13396,13399],{},"注意事项：",[2354,13397,13398],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,13401,13403],{"className":2202,"code":13402,"language":2204,"meta":32,"style":32},"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",[34,13404,13405,13416,13420,13435,13447,13451,13455,13463,13468,13483,13501,13518,13528,13536],{"__ignoreMap":32},[167,13406,13407,13409,13411,13414],{"class":169,"line":170},[167,13408,2216],{"class":731},[167,13410,8548],{"class":731},[167,13412,13413],{"class":173}," func",[167,13415,4020],{"class":512},[167,13417,13418],{"class":169,"line":191},[167,13419,3611],{"class":512},[167,13421,13422,13424,13426,13428,13430,13432],{"class":169,"line":205},[167,13423,4029],{"class":731},[167,13425,12897],{"class":512},[167,13427,523],{"class":731},[167,13429,4082],{"class":184},[167,13431,2265],{"class":512},[167,13433,13434],{"class":2268}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[167,13436,13437,13439,13441,13444],{"class":169,"line":219},[167,13438,6122],{"class":731},[167,13440,12612],{"class":731},[167,13442,13443],{"class":512},"a;",[167,13445,13446],{"class":2268}," \u002F\u002F放回局部变量的地址\n",[167,13448,13449],{"class":169,"line":230},[167,13450,3630],{"class":512},[167,13452,13453],{"class":169,"line":241},[167,13454,741],{"emptyLinePlaceholder":740},[167,13456,13457,13459,13461],{"class":169,"line":261},[167,13458,2216],{"class":731},[167,13460,848],{"class":173},[167,13462,12881],{"class":512},[167,13464,13465],{"class":169,"line":773},[167,13466,13467],{"class":2268},"    \u002F\u002F接受func的返回值\n",[167,13469,13470,13472,13474,13477,13479,13481],{"class":169,"line":779},[167,13471,4029],{"class":731},[167,13473,8548],{"class":731},[167,13475,13476],{"class":512},"p ",[167,13478,523],{"class":731},[167,13480,13413],{"class":173},[167,13482,7666],{"class":512},[167,13484,13485,13487,13489,13491,13493,13495,13498],{"class":169,"line":785},[167,13486,8559],{"class":512},[167,13488,3242],{"class":731},[167,13490,8548],{"class":731},[167,13492,13476],{"class":512},[167,13494,3242],{"class":731},[167,13496,13497],{"class":512}," endl;",[167,13499,13500],{"class":2268}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[167,13502,13503,13505,13507,13509,13511,13513,13515],{"class":169,"line":790},[167,13504,8559],{"class":512},[167,13506,3242],{"class":731},[167,13508,8548],{"class":731},[167,13510,13476],{"class":512},[167,13512,3242],{"class":731},[167,13514,13497],{"class":512},[167,13516,13517],{"class":2268}," \u002F\u002F第二次这个数据不再保留\n",[167,13519,13520,13522,13524,13526],{"class":169,"line":796},[167,13521,4347],{"class":173},[167,13523,898],{"class":512},[167,13525,4352],{"class":177},[167,13527,4755],{"class":512},[167,13529,13530,13532,13534],{"class":169,"line":802},[167,13531,6122],{"class":731},[167,13533,6125],{"class":184},[167,13535,3359],{"class":512},[167,13537,13538],{"class":169,"line":808},[167,13539,3630],{"class":512},[19,13541,13542],{},"输出结果：",[19,13544,13545],{},[3528,13546],{"alt":13547,"src":13548},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13550,13551],{},"总结：不要返回局部变量的地址",[40,13553,13554],{"start":191},[43,13555,13556],{},"堆区",[3205,13558,13559,13562],{},[43,13560,13561],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[43,13563,13564],{},"在c++中主要利用new在堆区开辟内存",[26,13566,13568],{"className":2202,"code":13567,"language":2204,"meta":32,"style":32},"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",[34,13569,13570,13585,13589,13594,13615,13622,13626,13634,13638,13643,13657,13669],{"__ignoreMap":32},[167,13571,13572,13574,13577,13580,13582],{"class":169,"line":170},[167,13573,2216],{"class":731},[167,13575,13576],{"class":731},"  *",[167,13578,13579],{"class":173},"func",[167,13581,4470],{"class":512},[167,13583,13584],{"class":2268},"  \u002F\u002F函数返回指针\n",[167,13586,13587],{"class":169,"line":191},[167,13588,3611],{"class":512},[167,13590,13591],{"class":169,"line":205},[167,13592,13593],{"class":2268},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[167,13595,13596,13598,13600,13602,13604,13607,13609,13611,13613],{"class":169,"line":219},[167,13597,6179],{"class":731},[167,13599,8548],{"class":731},[167,13601,19],{"class":512},[167,13603,523],{"class":731},[167,13605,13606],{"class":731}," new",[167,13608,4426],{"class":731},[167,13610,898],{"class":512},[167,13612,2646],{"class":184},[167,13614,4755],{"class":512},[167,13616,13617,13619],{"class":169,"line":230},[167,13618,6413],{"class":731},[167,13620,13621],{"class":512}," p;\n",[167,13623,13624],{"class":169,"line":241},[167,13625,3630],{"class":512},[167,13627,13628,13630,13632],{"class":169,"line":261},[167,13629,2216],{"class":731},[167,13631,848],{"class":173},[167,13633,4020],{"class":512},[167,13635,13636],{"class":169,"line":773},[167,13637,3611],{"class":512},[167,13639,13640],{"class":169,"line":779},[167,13641,13642],{"class":2268},"    \u002F\u002F在堆区开辟数据\n",[167,13644,13645,13647,13649,13651,13653,13655],{"class":169,"line":785},[167,13646,4029],{"class":731},[167,13648,8548],{"class":731},[167,13650,19],{"class":512},[167,13652,523],{"class":731},[167,13654,13579],{"class":173},[167,13656,7666],{"class":512},[167,13658,13659,13661,13663,13665,13667],{"class":169,"line":790},[167,13660,3616],{"class":512},[167,13662,8449],{"class":731},[167,13664,19],{"class":512},[167,13666,3242],{"class":731},[167,13668,3264],{"class":512},[167,13670,13671],{"class":169,"line":796},[167,13672,3630],{"class":512},[19,13674,13675],{},"图片展示：",[19,13677,13678],{},[3528,13679],{"alt":13547,"src":13680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13682,13683],{},"堆区内存由程序员管生死！！！",[40,13685,13686],{"start":205},[43,13687,13688],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13690,13691],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13693,13694,13695],{},"​语法：",[34,13696,13697],{}," new 数据类型",[19,13699,13700],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,13702,13704],{"className":2202,"code":13703,"language":2204,"meta":32,"style":32},"\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",[34,13705,13706,13711,13721,13725,13730,13735,13757,13761,13769,13773,13787,13799,13811,13823,13828,13833,13844,13848,13853,13861,13865,13870,13892,13918,13922,13940,13944,13970,13974,13986,13990,13995,14000,14008,14012,14016,14024,14028,14034,14040],{"__ignoreMap":32},[167,13707,13708],{"class":169,"line":170},[167,13709,13710],{"class":2268},"\u002F\u002F1.new的基本语法\n",[167,13712,13713,13715,13717,13719],{"class":169,"line":191},[167,13714,2216],{"class":731},[167,13716,8548],{"class":731},[167,13718,13579],{"class":173},[167,13720,4020],{"class":512},[167,13722,13723],{"class":169,"line":205},[167,13724,3611],{"class":512},[167,13726,13727],{"class":169,"line":219},[167,13728,13729],{"class":2268},"    \u002F\u002F在堆区创建整型数据\n",[167,13731,13732],{"class":169,"line":230},[167,13733,13734],{"class":2268},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[167,13736,13737,13739,13741,13743,13746,13748,13750,13752,13754],{"class":169,"line":241},[167,13738,4029],{"class":731},[167,13740,8548],{"class":731},[167,13742,19],{"class":512},[167,13744,13745],{"class":731},"=new",[167,13747,4426],{"class":731},[167,13749,898],{"class":512},[167,13751,2646],{"class":184},[167,13753,7996],{"class":512},[167,13755,13756],{"class":2268},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[167,13758,13759],{"class":169,"line":261},[167,13760,3630],{"class":512},[167,13762,13763,13765,13767],{"class":169,"line":773},[167,13764,7394],{"class":731},[167,13766,7618],{"class":173},[167,13768,4020],{"class":512},[167,13770,13771],{"class":169,"line":779},[167,13772,3611],{"class":512},[167,13774,13775,13777,13779,13781,13783,13785],{"class":169,"line":785},[167,13776,4029],{"class":731},[167,13778,8548],{"class":731},[167,13780,19],{"class":512},[167,13782,523],{"class":731},[167,13784,13579],{"class":173},[167,13786,7666],{"class":512},[167,13788,13789,13791,13793,13795,13797],{"class":169,"line":790},[167,13790,3616],{"class":512},[167,13792,8449],{"class":731},[167,13794,19],{"class":512},[167,13796,3242],{"class":731},[167,13798,3264],{"class":512},[167,13800,13801,13803,13805,13807,13809],{"class":169,"line":796},[167,13802,3616],{"class":512},[167,13804,8449],{"class":731},[167,13806,19],{"class":512},[167,13808,3242],{"class":731},[167,13810,3264],{"class":512},[167,13812,13813,13815,13817,13819,13821],{"class":169,"line":802},[167,13814,3616],{"class":512},[167,13816,8449],{"class":731},[167,13818,19],{"class":512},[167,13820,3242],{"class":731},[167,13822,3264],{"class":512},[167,13824,13825],{"class":169,"line":808},[167,13826,13827],{"class":2268},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[167,13829,13830],{"class":169,"line":814},[167,13831,13832],{"class":2268},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[167,13834,13835,13838,13841],{"class":169,"line":820},[167,13836,13837],{"class":731},"    delete",[167,13839,13840],{"class":512}," p;",[167,13842,13843],{"class":2268},"\u002F\u002F删除这块地址\n",[167,13845,13846],{"class":169,"line":826},[167,13847,3630],{"class":512},[167,13849,13850],{"class":169,"line":832},[167,13851,13852],{"class":2268},"\u002F\u002F2.在堆区利用new开辟数组\n",[167,13854,13855,13857,13859],{"class":169,"line":837},[167,13856,7394],{"class":731},[167,13858,7687],{"class":173},[167,13860,4020],{"class":512},[167,13862,13863],{"class":169,"line":842},[167,13864,3611],{"class":512},[167,13866,13867],{"class":169,"line":860},[167,13868,13869],{"class":2268},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[167,13871,13872,13874,13876,13878,13880,13882,13884,13886,13889],{"class":169,"line":876},[167,13873,4029],{"class":731},[167,13875,8548],{"class":731},[167,13877,5912],{"class":512},[167,13879,13745],{"class":731},[167,13881,4426],{"class":731},[167,13883,3090],{"class":512},[167,13885,2646],{"class":184},[167,13887,13888],{"class":512},"];",[167,13890,13891],{"class":2268},"\u002F\u002F10代表数组有10个元素\n",[167,13893,13894,13896,13898,13900,13902,13904,13906,13908,13910,13912,13914,13916],{"class":169,"line":887},[167,13895,967],{"class":731},[167,13897,3716],{"class":512},[167,13899,2216],{"class":731},[167,13901,5067],{"class":512},[167,13903,523],{"class":731},[167,13905,1154],{"class":184},[167,13907,5074],{"class":512},[167,13909,513],{"class":731},[167,13911,2646],{"class":184},[167,13913,5074],{"class":512},[167,13915,4336],{"class":731},[167,13917,873],{"class":512},[167,13919,13920],{"class":169,"line":892},[167,13921,4074],{"class":512},[167,13923,13924,13927,13929,13931,13933,13935,13937],{"class":169,"line":907},[167,13925,13926],{"class":512},"        arr[i]",[167,13928,523],{"class":731},[167,13930,2641],{"class":512},[167,13932,2681],{"class":731},[167,13934,981],{"class":184},[167,13936,2265],{"class":512},[167,13938,13939],{"class":2268},"\u002F\u002F给10个元素赋值100～109\n",[167,13941,13942],{"class":169,"line":920},[167,13943,4231],{"class":512},[167,13945,13946,13948,13950,13952,13954,13956,13958,13960,13962,13964,13966,13968],{"class":169,"line":933},[167,13947,967],{"class":731},[167,13949,3716],{"class":512},[167,13951,2216],{"class":731},[167,13953,5067],{"class":512},[167,13955,523],{"class":731},[167,13957,1154],{"class":184},[167,13959,5074],{"class":512},[167,13961,513],{"class":731},[167,13963,2646],{"class":184},[167,13965,5074],{"class":512},[167,13967,4336],{"class":731},[167,13969,873],{"class":512},[167,13971,13972],{"class":169,"line":946},[167,13973,4074],{"class":512},[167,13975,13976,13978,13980,13982,13984],{"class":169,"line":959},[167,13977,5485],{"class":512},[167,13979,3242],{"class":731},[167,13981,6386],{"class":512},[167,13983,3242],{"class":731},[167,13985,3264],{"class":512},[167,13987,13988],{"class":169,"line":964},[167,13989,4231],{"class":512},[167,13991,13992],{"class":169,"line":987},[167,13993,13994],{"class":2268},"    \u002F\u002F释放堆区数组\n",[167,13996,13997],{"class":169,"line":993},[167,13998,13999],{"class":2268},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[167,14001,14002,14005],{"class":169,"line":998},[167,14003,14004],{"class":731},"    delete[]",[167,14006,14007],{"class":512}," arr;\n",[167,14009,14010],{"class":169,"line":1010},[167,14011,3630],{"class":512},[167,14013,14014],{"class":169,"line":1022},[167,14015,741],{"emptyLinePlaceholder":740},[167,14017,14018,14020,14022],{"class":169,"line":1027},[167,14019,2216],{"class":731},[167,14021,848],{"class":173},[167,14023,4020],{"class":512},[167,14025,14026],{"class":169,"line":1032},[167,14027,3611],{"class":512},[167,14029,14030,14032],{"class":169,"line":1049},[167,14031,7663],{"class":173},[167,14033,7666],{"class":512},[167,14035,14036,14038],{"class":169,"line":10005},[167,14037,7732],{"class":173},[167,14039,7666],{"class":512},[167,14041,14042],{"class":169,"line":10011},[167,14043,3630],{"class":512},[2113,14045,14046],{},"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":32,"searchDepth":191,"depth":191,"links":14048},[14049],{"id":12717,"depth":191,"text":12718,"children":14050},[14051,14052],{"id":12749,"depth":205,"text":12750},{"id":13377,"depth":205,"text":13378},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12709,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14059,"title":14060,"body":14061,"description":32,"extension":2140,"meta":15542,"navigation":740,"path":15543,"seo":15544,"stem":15545,"__hash__":15546},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14062,"toc":15534},[14063,14066,14070,14073,14076,14245,14249,14254,14271,14276,14428,14432,14435,14438,14832,14836,14839,14844,14847,15159,15163,15169,15329,15331,15339,15343,15346,15353,15531],[10,14064,14060],{"id":14065},"_6引用",[14,14067,14069],{"id":14068},"_61引用基本用法","6.1引用基本用法",[19,14071,14072],{},"引用的本质：给变量起别名",[19,14074,14075],{},"语法：数据类型 &别名=原名",[26,14077,14079],{"className":2202,"code":14078,"language":2204,"meta":32,"style":32},"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",[34,14080,14081,14089,14093,14105,14117,14121,14140,14159,14163,14174,14178,14197,14215,14219,14229,14233,14241],{"__ignoreMap":32},[167,14082,14083,14085,14087],{"class":169,"line":170},[167,14084,2216],{"class":731},[167,14086,848],{"class":173},[167,14088,12881],{"class":512},[167,14090,14091],{"class":169,"line":191},[167,14092,741],{"emptyLinePlaceholder":740},[167,14094,14095,14097,14099,14101,14103],{"class":169,"line":205},[167,14096,4029],{"class":731},[167,14098,12897],{"class":512},[167,14100,523],{"class":731},[167,14102,4082],{"class":184},[167,14104,3359],{"class":512},[167,14106,14107,14109,14111,14113,14115],{"class":169,"line":219},[167,14108,4029],{"class":731},[167,14110,12612],{"class":731},[167,14112,12973],{"class":512},[167,14114,523],{"class":731},[167,14116,3498],{"class":512},[167,14118,14119],{"class":169,"line":230},[167,14120,741],{"emptyLinePlaceholder":740},[167,14122,14123,14125,14127,14130,14132,14134,14136,14138],{"class":169,"line":241},[167,14124,8559],{"class":512},[167,14126,3242],{"class":731},[167,14128,14129],{"class":177}," \"a = \"",[167,14131,3510],{"class":731},[167,14133,12897],{"class":512},[167,14135,3242],{"class":731},[167,14137,13497],{"class":512},[167,14139,9298],{"class":2268},[167,14141,14142,14144,14146,14149,14151,14153,14155,14157],{"class":169,"line":261},[167,14143,8559],{"class":512},[167,14145,3242],{"class":731},[167,14147,14148],{"class":177}," \"b = \"",[167,14150,3510],{"class":731},[167,14152,12910],{"class":512},[167,14154,3242],{"class":731},[167,14156,13497],{"class":512},[167,14158,9298],{"class":2268},[167,14160,14161],{"class":169,"line":773},[167,14162,741],{"emptyLinePlaceholder":740},[167,14164,14165,14168,14170,14172],{"class":169,"line":779},[167,14166,14167],{"class":512},"    b ",[167,14169,523],{"class":731},[167,14171,7784],{"class":184},[167,14173,3359],{"class":512},[167,14175,14176],{"class":169,"line":785},[167,14177,741],{"emptyLinePlaceholder":740},[167,14179,14180,14182,14184,14186,14188,14190,14192,14194],{"class":169,"line":790},[167,14181,8559],{"class":512},[167,14183,3242],{"class":731},[167,14185,14129],{"class":177},[167,14187,3510],{"class":731},[167,14189,12897],{"class":512},[167,14191,3242],{"class":731},[167,14193,13497],{"class":512},[167,14195,14196],{"class":2268},"\u002F\u002F100\n",[167,14198,14199,14201,14203,14205,14207,14209,14211,14213],{"class":169,"line":796},[167,14200,8559],{"class":512},[167,14202,3242],{"class":731},[167,14204,14148],{"class":177},[167,14206,3510],{"class":731},[167,14208,12910],{"class":512},[167,14210,3242],{"class":731},[167,14212,13497],{"class":512},[167,14214,14196],{"class":2268},[167,14216,14217],{"class":169,"line":802},[167,14218,741],{"emptyLinePlaceholder":740},[167,14220,14221,14223,14225,14227],{"class":169,"line":808},[167,14222,4347],{"class":173},[167,14224,898],{"class":512},[167,14226,4352],{"class":177},[167,14228,4755],{"class":512},[167,14230,14231],{"class":169,"line":814},[167,14232,741],{"emptyLinePlaceholder":740},[167,14234,14235,14237,14239],{"class":169,"line":820},[167,14236,6122],{"class":731},[167,14238,6125],{"class":184},[167,14240,3359],{"class":512},[167,14242,14243],{"class":169,"line":826},[167,14244,3630],{"class":512},[14,14246,14248],{"id":14247},"_62引用的注意事项","6.2引用的注意事项",[40,14250,14251],{},[43,14252,14253],{},"引用必须要初始化",[26,14255,14257],{"className":2202,"code":14256,"language":2204,"meta":32,"style":32},"int &b;\u002F\u002F非常错误！\n",[34,14258,14259],{"__ignoreMap":32},[167,14260,14261,14263,14265,14268],{"class":169,"line":170},[167,14262,2216],{"class":731},[167,14264,12612],{"class":731},[167,14266,14267],{"class":512},"b;",[167,14269,14270],{"class":2268},"\u002F\u002F非常错误！\n",[40,14272,14273],{"start":191},[43,14274,14275],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,14277,14279],{"className":2202,"code":14278,"language":2204,"meta":32,"style":32},"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",[34,14280,14281,14289,14301,14313,14321,14337,14350,14368,14386,14406,14416,14424],{"__ignoreMap":32},[167,14282,14283,14285,14287],{"class":169,"line":170},[167,14284,2216],{"class":731},[167,14286,848],{"class":173},[167,14288,12881],{"class":512},[167,14290,14291,14293,14295,14297,14299],{"class":169,"line":191},[167,14292,4029],{"class":731},[167,14294,12897],{"class":512},[167,14296,523],{"class":731},[167,14298,4082],{"class":184},[167,14300,3359],{"class":512},[167,14302,14303,14305,14307,14309,14311],{"class":169,"line":205},[167,14304,4029],{"class":731},[167,14306,12910],{"class":512},[167,14308,523],{"class":731},[167,14310,10978],{"class":184},[167,14312,3359],{"class":512},[167,14314,14315,14318],{"class":169,"line":219},[167,14316,14317],{"class":2268},"    \u002F\u002Fint &c;",[167,14319,14320],{"class":2268}," \u002F\u002F错误，引用必须初始化\n",[167,14322,14323,14325,14327,14329,14331,14334],{"class":169,"line":230},[167,14324,4029],{"class":731},[167,14326,12612],{"class":731},[167,14328,4982],{"class":512},[167,14330,523],{"class":731},[167,14332,14333],{"class":512}," a;",[167,14335,14336],{"class":2268}," \u002F\u002F一旦初始化后，就不可以更改\n",[167,14338,14339,14342,14344,14347],{"class":169,"line":241},[167,14340,14341],{"class":512},"    c ",[167,14343,523],{"class":731},[167,14345,14346],{"class":512}," b;",[167,14348,14349],{"class":2268}," \u002F\u002F这是赋值操作，不是更改引用\n",[167,14351,14352,14354,14356,14358,14360,14362,14364,14366],{"class":169,"line":261},[167,14353,8559],{"class":512},[167,14355,3242],{"class":731},[167,14357,14129],{"class":177},[167,14359,3510],{"class":731},[167,14361,12897],{"class":512},[167,14363,3242],{"class":731},[167,14365,13497],{"class":512},[167,14367,9283],{"class":2268},[167,14369,14370,14372,14374,14376,14378,14380,14382,14384],{"class":169,"line":773},[167,14371,8559],{"class":512},[167,14373,3242],{"class":731},[167,14375,14148],{"class":177},[167,14377,3510],{"class":731},[167,14379,12910],{"class":512},[167,14381,3242],{"class":731},[167,14383,13497],{"class":512},[167,14385,9283],{"class":2268},[167,14387,14388,14390,14392,14395,14397,14400,14402,14404],{"class":169,"line":779},[167,14389,8559],{"class":512},[167,14391,3242],{"class":731},[167,14393,14394],{"class":177}," \"c = \"",[167,14396,3510],{"class":731},[167,14398,14399],{"class":512}," c ",[167,14401,3242],{"class":731},[167,14403,13497],{"class":512},[167,14405,9283],{"class":2268},[167,14407,14408,14410,14412,14414],{"class":169,"line":785},[167,14409,4347],{"class":173},[167,14411,898],{"class":512},[167,14413,4352],{"class":177},[167,14415,4755],{"class":512},[167,14417,14418,14420,14422],{"class":169,"line":790},[167,14419,6122],{"class":731},[167,14421,6125],{"class":184},[167,14423,3359],{"class":512},[167,14425,14426],{"class":169,"line":796},[167,14427,3630],{"class":512},[14,14429,14431],{"id":14430},"_63引用做函数参数","6.3引用做函数参数",[19,14433,14434],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14436,14437],{},"优点：可以简化指针修改实参",[26,14439,14441],{"className":2202,"code":14440,"language":2204,"meta":32,"style":32},"\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",[34,14442,14443,14448,14471,14482,14492,14501,14505,14509,14514,14536,14548,14560,14570,14574,14578,14583,14605,14615,14623,14631,14635,14639,14647,14651,14663,14675,14679,14690,14716,14720,14740,14764,14768,14778,14802,14806,14816,14820,14828],{"__ignoreMap":32},[167,14444,14445],{"class":169,"line":170},[167,14446,14447],{"class":2268},"\u002F\u002F1. 值传递\n",[167,14449,14450,14452,14455,14457,14459,14461,14464,14466,14468],{"class":169,"line":191},[167,14451,7394],{"class":731},[167,14453,14454],{"class":173}," mySwap01",[167,14456,898],{"class":512},[167,14458,2216],{"class":731},[167,14460,3464],{"class":7246},[167,14462,14463],{"class":512},", ",[167,14465,2216],{"class":731},[167,14467,4869],{"class":7246},[167,14469,14470],{"class":512},") {\n",[167,14472,14473,14475,14478,14480],{"class":169,"line":205},[167,14474,4029],{"class":731},[167,14476,14477],{"class":512}," temp ",[167,14479,523],{"class":731},[167,14481,3498],{"class":512},[167,14483,14484,14487,14489],{"class":169,"line":219},[167,14485,14486],{"class":512},"    a ",[167,14488,523],{"class":731},[167,14490,14491],{"class":512}," b;\n",[167,14493,14494,14496,14498],{"class":169,"line":230},[167,14495,14167],{"class":512},[167,14497,523],{"class":731},[167,14499,14500],{"class":512}," temp;\n",[167,14502,14503],{"class":169,"line":241},[167,14504,3630],{"class":512},[167,14506,14507],{"class":169,"line":261},[167,14508,741],{"emptyLinePlaceholder":740},[167,14510,14511],{"class":169,"line":773},[167,14512,14513],{"class":2268},"\u002F\u002F2. 地址传递\n",[167,14515,14516,14518,14521,14523,14526,14528,14530,14532,14534],{"class":169,"line":779},[167,14517,7394],{"class":731},[167,14519,14520],{"class":173}," mySwap02",[167,14522,898],{"class":512},[167,14524,14525],{"class":731},"int*",[167,14527,3464],{"class":7246},[167,14529,14463],{"class":512},[167,14531,14525],{"class":731},[167,14533,4869],{"class":7246},[167,14535,14470],{"class":512},[167,14537,14538,14540,14542,14544,14546],{"class":169,"line":785},[167,14539,4029],{"class":731},[167,14541,14477],{"class":512},[167,14543,523],{"class":731},[167,14545,8548],{"class":731},[167,14547,8227],{"class":512},[167,14549,14550,14552,14554,14556,14558],{"class":169,"line":790},[167,14551,8433],{"class":731},[167,14553,12947],{"class":512},[167,14555,523],{"class":731},[167,14557,8548],{"class":731},[167,14559,8099],{"class":512},[167,14561,14562,14564,14566,14568],{"class":169,"line":796},[167,14563,8433],{"class":731},[167,14565,12973],{"class":512},[167,14567,523],{"class":731},[167,14569,14500],{"class":512},[167,14571,14572],{"class":169,"line":802},[167,14573,3630],{"class":512},[167,14575,14576],{"class":169,"line":808},[167,14577,741],{"emptyLinePlaceholder":740},[167,14579,14580],{"class":169,"line":814},[167,14581,14582],{"class":2268},"\u002F\u002F3. 引用传递\n",[167,14584,14585,14587,14590,14592,14595,14597,14599,14601,14603],{"class":169,"line":820},[167,14586,7394],{"class":731},[167,14588,14589],{"class":173}," mySwap03",[167,14591,898],{"class":512},[167,14593,14594],{"class":731},"int&",[167,14596,3464],{"class":7246},[167,14598,14463],{"class":512},[167,14600,14594],{"class":731},[167,14602,4869],{"class":7246},[167,14604,14470],{"class":512},[167,14606,14607,14609,14611,14613],{"class":169,"line":826},[167,14608,4029],{"class":731},[167,14610,14477],{"class":512},[167,14612,523],{"class":731},[167,14614,3498],{"class":512},[167,14616,14617,14619,14621],{"class":169,"line":832},[167,14618,14486],{"class":512},[167,14620,523],{"class":731},[167,14622,14491],{"class":512},[167,14624,14625,14627,14629],{"class":169,"line":837},[167,14626,14167],{"class":512},[167,14628,523],{"class":731},[167,14630,14500],{"class":512},[167,14632,14633],{"class":169,"line":842},[167,14634,3630],{"class":512},[167,14636,14637],{"class":169,"line":860},[167,14638,741],{"emptyLinePlaceholder":740},[167,14640,14641,14643,14645],{"class":169,"line":876},[167,14642,2216],{"class":731},[167,14644,848],{"class":173},[167,14646,12881],{"class":512},[167,14648,14649],{"class":169,"line":887},[167,14650,741],{"emptyLinePlaceholder":740},[167,14652,14653,14655,14657,14659,14661],{"class":169,"line":892},[167,14654,4029],{"class":731},[167,14656,12897],{"class":512},[167,14658,523],{"class":731},[167,14660,4082],{"class":184},[167,14662,3359],{"class":512},[167,14664,14665,14667,14669,14671,14673],{"class":169,"line":907},[167,14666,4029],{"class":731},[167,14668,12910],{"class":512},[167,14670,523],{"class":731},[167,14672,10978],{"class":184},[167,14674,3359],{"class":512},[167,14676,14677],{"class":169,"line":920},[167,14678,741],{"emptyLinePlaceholder":740},[167,14680,14681,14684,14687],{"class":169,"line":933},[167,14682,14683],{"class":173},"    mySwap01",[167,14685,14686],{"class":512},"(a, b);",[167,14688,14689],{"class":2268},"\u002F\u002F值传递，形参不会修饰实参\n",[167,14691,14692,14694,14696,14699,14701,14703,14705,14708,14710,14712,14714],{"class":169,"line":946},[167,14693,8559],{"class":512},[167,14695,3242],{"class":731},[167,14697,14698],{"class":177}," \"a:\"",[167,14700,3510],{"class":731},[167,14702,12897],{"class":512},[167,14704,3242],{"class":731},[167,14706,14707],{"class":177}," \" b:\"",[167,14709,3510],{"class":731},[167,14711,12910],{"class":512},[167,14713,3242],{"class":731},[167,14715,10868],{"class":512},[167,14717,14718],{"class":169,"line":959},[167,14719,741],{"emptyLinePlaceholder":740},[167,14721,14722,14725,14727,14729,14732,14734,14737],{"class":169,"line":964},[167,14723,14724],{"class":173},"    mySwap02",[167,14726,898],{"class":512},[167,14728,2553],{"class":731},[167,14730,14731],{"class":512},"a, ",[167,14733,2553],{"class":731},[167,14735,14736],{"class":512},"b);",[167,14738,14739],{"class":2268},"\u002F\u002F地址传递，形参会修饰实参\n",[167,14741,14742,14744,14746,14748,14750,14752,14754,14756,14758,14760,14762],{"class":169,"line":987},[167,14743,8559],{"class":512},[167,14745,3242],{"class":731},[167,14747,14698],{"class":177},[167,14749,3510],{"class":731},[167,14751,12897],{"class":512},[167,14753,3242],{"class":731},[167,14755,14707],{"class":177},[167,14757,3510],{"class":731},[167,14759,12910],{"class":512},[167,14761,3242],{"class":731},[167,14763,10868],{"class":512},[167,14765,14766],{"class":169,"line":993},[167,14767,741],{"emptyLinePlaceholder":740},[167,14769,14770,14773,14775],{"class":169,"line":998},[167,14771,14772],{"class":173},"    mySwap03",[167,14774,14686],{"class":512},[167,14776,14777],{"class":2268},"\u002F\u002F引用传递，形参会修饰实参\n",[167,14779,14780,14782,14784,14786,14788,14790,14792,14794,14796,14798,14800],{"class":169,"line":1010},[167,14781,8559],{"class":512},[167,14783,3242],{"class":731},[167,14785,14698],{"class":177},[167,14787,3510],{"class":731},[167,14789,12897],{"class":512},[167,14791,3242],{"class":731},[167,14793,14707],{"class":177},[167,14795,3510],{"class":731},[167,14797,12910],{"class":512},[167,14799,3242],{"class":731},[167,14801,10868],{"class":512},[167,14803,14804],{"class":169,"line":1022},[167,14805,741],{"emptyLinePlaceholder":740},[167,14807,14808,14810,14812,14814],{"class":169,"line":1027},[167,14809,4347],{"class":173},[167,14811,898],{"class":512},[167,14813,4352],{"class":177},[167,14815,4755],{"class":512},[167,14817,14818],{"class":169,"line":1032},[167,14819,741],{"emptyLinePlaceholder":740},[167,14821,14822,14824,14826],{"class":169,"line":1049},[167,14823,6122],{"class":731},[167,14825,6125],{"class":184},[167,14827,3359],{"class":512},[167,14829,14830],{"class":169,"line":10005},[167,14831,3630],{"class":512},[14,14833,14835],{"id":14834},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14837,14838],{},"作用：引用是可以作为函数的返回值存在的",[19,14840,11053,14841],{},[2354,14842,14843],{},"不要返回局部变量引用",[19,14845,14846],{},"用法：函数调用作为左值",[26,14848,14850],{"className":11969,"code":14849,"language":11971,"meta":32,"style":32},"\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",[34,14851,14852,14857,14865,14880,14886,14890,14894,14899,14907,14924,14930,14934,14938,14946,14950,14955,14969,14989,15008,15012,15017,15030,15050,15068,15072,15088,15092,15111,15129,15133,15143,15147,15155],{"__ignoreMap":32},[167,14853,14854],{"class":169,"line":170},[167,14855,14856],{"class":2268},"\u002F\u002F返回局部变量引用\n",[167,14858,14859,14861,14863],{"class":169,"line":191},[167,14860,14594],{"class":731},[167,14862,7618],{"class":173},[167,14864,12881],{"class":512},[167,14866,14867,14869,14871,14873,14875,14877],{"class":169,"line":205},[167,14868,4029],{"class":731},[167,14870,12897],{"class":512},[167,14872,523],{"class":731},[167,14874,4082],{"class":184},[167,14876,2265],{"class":512},[167,14878,14879],{"class":2268}," \u002F\u002F局部变量\n",[167,14881,14882,14884],{"class":169,"line":219},[167,14883,6122],{"class":731},[167,14885,3498],{"class":512},[167,14887,14888],{"class":169,"line":230},[167,14889,3630],{"class":512},[167,14891,14892],{"class":169,"line":241},[167,14893,741],{"emptyLinePlaceholder":740},[167,14895,14896],{"class":169,"line":261},[167,14897,14898],{"class":2268},"\u002F\u002F返回静态变量引用\n",[167,14900,14901,14903,14905],{"class":169,"line":773},[167,14902,14594],{"class":731},[167,14904,7687],{"class":173},[167,14906,12881],{"class":512},[167,14908,14909,14911,14913,14915,14917,14919,14921],{"class":169,"line":779},[167,14910,13048],{"class":731},[167,14912,4426],{"class":731},[167,14914,12897],{"class":512},[167,14916,523],{"class":731},[167,14918,10978],{"class":184},[167,14920,2265],{"class":512},[167,14922,14923],{"class":2268},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[167,14925,14926,14928],{"class":169,"line":785},[167,14927,6122],{"class":731},[167,14929,3498],{"class":512},[167,14931,14932],{"class":169,"line":790},[167,14933,3630],{"class":512},[167,14935,14936],{"class":169,"line":796},[167,14937,741],{"emptyLinePlaceholder":740},[167,14939,14940,14942,14944],{"class":169,"line":802},[167,14941,2216],{"class":731},[167,14943,848],{"class":173},[167,14945,12881],{"class":512},[167,14947,14948],{"class":169,"line":808},[167,14949,741],{"emptyLinePlaceholder":740},[167,14951,14952],{"class":169,"line":814},[167,14953,14954],{"class":2268},"    \u002F\u002F不能返回局部变量的引用\n",[167,14956,14957,14960,14963,14965,14967],{"class":169,"line":820},[167,14958,14959],{"class":731},"    int&",[167,14961,14962],{"class":512}," ref ",[167,14964,523],{"class":731},[167,14966,7618],{"class":173},[167,14968,7666],{"class":512},[167,14970,14971,14973,14975,14978,14980,14982,14984,14986],{"class":169,"line":826},[167,14972,8559],{"class":512},[167,14974,3242],{"class":731},[167,14976,14977],{"class":177}," \"ref = \"",[167,14979,3510],{"class":731},[167,14981,14962],{"class":512},[167,14983,3242],{"class":731},[167,14985,13497],{"class":512},[167,14987,14988],{"class":2268},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[167,14990,14991,14993,14995,14997,14999,15001,15003,15005],{"class":169,"line":832},[167,14992,8559],{"class":512},[167,14994,3242],{"class":731},[167,14996,14977],{"class":177},[167,14998,3510],{"class":731},[167,15000,14962],{"class":512},[167,15002,3242],{"class":731},[167,15004,13497],{"class":512},[167,15006,15007],{"class":2268},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[167,15009,15010],{"class":169,"line":837},[167,15011,741],{"emptyLinePlaceholder":740},[167,15013,15014],{"class":169,"line":842},[167,15015,15016],{"class":2268},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[167,15018,15019,15021,15024,15026,15028],{"class":169,"line":860},[167,15020,14959],{"class":731},[167,15022,15023],{"class":512}," ref2 ",[167,15025,523],{"class":731},[167,15027,7687],{"class":173},[167,15029,7666],{"class":512},[167,15031,15032,15034,15036,15039,15041,15043,15045,15047],{"class":169,"line":876},[167,15033,8559],{"class":512},[167,15035,3242],{"class":731},[167,15037,15038],{"class":177}," \"ref2 = \"",[167,15040,3510],{"class":731},[167,15042,15023],{"class":512},[167,15044,3242],{"class":731},[167,15046,13497],{"class":512},[167,15048,15049],{"class":2268}," \u002F\u002F20\n",[167,15051,15052,15054,15056,15058,15060,15062,15064,15066],{"class":169,"line":887},[167,15053,8559],{"class":512},[167,15055,3242],{"class":731},[167,15057,15038],{"class":177},[167,15059,3510],{"class":731},[167,15061,15023],{"class":512},[167,15063,3242],{"class":731},[167,15065,13497],{"class":512},[167,15067,15049],{"class":2268},[167,15069,15070],{"class":169,"line":892},[167,15071,741],{"emptyLinePlaceholder":740},[167,15073,15074,15076,15079,15081,15083,15085],{"class":169,"line":907},[167,15075,7732],{"class":173},[167,15077,15078],{"class":512},"() ",[167,15080,523],{"class":731},[167,15082,5035],{"class":184},[167,15084,2265],{"class":512},[167,15086,15087],{"class":2268},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[167,15089,15090],{"class":169,"line":920},[167,15091,741],{"emptyLinePlaceholder":740},[167,15093,15094,15096,15098,15100,15102,15104,15106,15108],{"class":169,"line":933},[167,15095,8559],{"class":512},[167,15097,3242],{"class":731},[167,15099,15038],{"class":177},[167,15101,3510],{"class":731},[167,15103,15023],{"class":512},[167,15105,3242],{"class":731},[167,15107,13497],{"class":512},[167,15109,15110],{"class":2268}," \u002F\u002F1000\n",[167,15112,15113,15115,15117,15119,15121,15123,15125,15127],{"class":169,"line":946},[167,15114,8559],{"class":512},[167,15116,3242],{"class":731},[167,15118,15038],{"class":177},[167,15120,3510],{"class":731},[167,15122,15023],{"class":512},[167,15124,3242],{"class":731},[167,15126,13497],{"class":512},[167,15128,15110],{"class":2268},[167,15130,15131],{"class":169,"line":959},[167,15132,741],{"emptyLinePlaceholder":740},[167,15134,15135,15137,15139,15141],{"class":169,"line":964},[167,15136,4347],{"class":173},[167,15138,898],{"class":512},[167,15140,4352],{"class":177},[167,15142,4755],{"class":512},[167,15144,15145],{"class":169,"line":987},[167,15146,741],{"emptyLinePlaceholder":740},[167,15148,15149,15151,15153],{"class":169,"line":993},[167,15150,6122],{"class":731},[167,15152,6125],{"class":184},[167,15154,3359],{"class":512},[167,15156,15157],{"class":169,"line":998},[167,15158,3630],{"class":512},[14,15160,15162],{"id":15161},"_65引用的本质","6.5引用的本质",[19,15164,15165,15166],{},"本质：",[2354,15167,15168],{},"引用的本质在c++内部实现是一个指针常量.",[26,15170,15172],{"className":2202,"code":15171,"language":2204,"meta":32,"style":32},"\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",[34,15173,15174,15179,15195,15209,15213,15222,15234,15239,15244,15255,15268,15272,15288,15305,15309,15317,15325],{"__ignoreMap":32},[167,15175,15176],{"class":169,"line":170},[167,15177,15178],{"class":2268},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[167,15180,15181,15183,15185,15187,15189,15192],{"class":169,"line":191},[167,15182,7394],{"class":731},[167,15184,13413],{"class":173},[167,15186,898],{"class":512},[167,15188,14594],{"class":731},[167,15190,15191],{"class":7246}," ref",[167,15193,15194],{"class":512},"){\n",[167,15196,15197,15200,15202,15204,15206],{"class":169,"line":205},[167,15198,15199],{"class":512},"    ref ",[167,15201,523],{"class":731},[167,15203,7784],{"class":184},[167,15205,2265],{"class":512},[167,15207,15208],{"class":2268}," \u002F\u002F ref是引用，转换为*ref = 100\n",[167,15210,15211],{"class":169,"line":219},[167,15212,3630],{"class":512},[167,15214,15215,15217,15219],{"class":169,"line":230},[167,15216,2216],{"class":731},[167,15218,848],{"class":173},[167,15220,15221],{"class":512},"(){\n",[167,15223,15224,15226,15228,15230,15232],{"class":169,"line":241},[167,15225,4029],{"class":731},[167,15227,12897],{"class":512},[167,15229,523],{"class":731},[167,15231,4082],{"class":184},[167,15233,3359],{"class":512},[167,15235,15236],{"class":169,"line":261},[167,15237,15238],{"class":512},"    \n",[167,15240,15241],{"class":169,"line":773},[167,15242,15243],{"class":2268},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[167,15245,15246,15248,15250,15252],{"class":169,"line":779},[167,15247,14959],{"class":731},[167,15249,14962],{"class":512},[167,15251,523],{"class":731},[167,15253,15254],{"class":512}," a; \n",[167,15256,15257,15259,15261,15263,15265],{"class":169,"line":785},[167,15258,15199],{"class":512},[167,15260,523],{"class":731},[167,15262,10978],{"class":184},[167,15264,2265],{"class":512},[167,15266,15267],{"class":2268}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[167,15269,15270],{"class":169,"line":790},[167,15271,15238],{"class":512},[167,15273,15274,15276,15278,15280,15282,15284,15286],{"class":169,"line":796},[167,15275,8559],{"class":512},[167,15277,3242],{"class":731},[167,15279,14698],{"class":177},[167,15281,3510],{"class":731},[167,15283,12897],{"class":512},[167,15285,3242],{"class":731},[167,15287,10868],{"class":512},[167,15289,15290,15292,15294,15297,15299,15301,15303],{"class":169,"line":802},[167,15291,8559],{"class":512},[167,15293,3242],{"class":731},[167,15295,15296],{"class":177}," \"ref:\"",[167,15298,3510],{"class":731},[167,15300,14962],{"class":512},[167,15302,3242],{"class":731},[167,15304,10868],{"class":512},[167,15306,15307],{"class":169,"line":808},[167,15308,15238],{"class":512},[167,15310,15311,15314],{"class":169,"line":814},[167,15312,15313],{"class":173},"    func",[167,15315,15316],{"class":512},"(a);\n",[167,15318,15319,15321,15323],{"class":169,"line":820},[167,15320,6122],{"class":731},[167,15322,6125],{"class":184},[167,15324,3359],{"class":512},[167,15326,15327],{"class":169,"line":826},[167,15328,3630],{"class":512},[19,15330,13360],{},[40,15332,15333,15336],{},[43,15334,15335],{},"引用的本质，就是一个指针常量",[43,15337,15338],{},"引用一旦初始化，就不可以发生改变",[14,15340,15342],{"id":15341},"_66常量引用","6.6常量引用",[19,15344,15345],{},"作用：常量引用主要用来修饰形参",[19,15347,15348,15349,15352],{},"在函数形参列表中，可以加",[2354,15350,15351],{},"const修饰形参","，防止形参改变实参",[26,15354,15356],{"className":2202,"code":15355,"language":2204,"meta":32,"style":32},"\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",[34,15357,15358,15363,15368,15387,15392,15405,15409,15413,15421,15425,15430,15435,15449,15453,15461,15473,15477,15482,15494,15501,15505,15515,15519,15527],{"__ignoreMap":32},[167,15359,15360],{"class":169,"line":170},[167,15361,15362],{"class":2268},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[167,15364,15365],{"class":169,"line":191},[167,15366,15367],{"class":2268},"\u002F\u002F加上const就不能修改实参的\n",[167,15369,15370,15372,15375,15377,15379,15382,15385],{"class":169,"line":205},[167,15371,7394],{"class":731},[167,15373,15374],{"class":173}," showValue",[167,15376,898],{"class":512},[167,15378,8822],{"class":731},[167,15380,15381],{"class":731}," int&",[167,15383,15384],{"class":7246}," v",[167,15386,14470],{"class":512},[167,15388,15389],{"class":169,"line":219},[167,15390,15391],{"class":2268},"    \u002F\u002Fv += 100;\n",[167,15393,15394,15396,15398,15401,15403],{"class":169,"line":230},[167,15395,8559],{"class":512},[167,15397,3242],{"class":731},[167,15399,15400],{"class":512}," v ",[167,15402,3242],{"class":731},[167,15404,10868],{"class":512},[167,15406,15407],{"class":169,"line":241},[167,15408,3630],{"class":512},[167,15410,15411],{"class":169,"line":261},[167,15412,741],{"emptyLinePlaceholder":740},[167,15414,15415,15417,15419],{"class":169,"line":773},[167,15416,2216],{"class":731},[167,15418,848],{"class":173},[167,15420,12881],{"class":512},[167,15422,15423],{"class":169,"line":779},[167,15424,741],{"emptyLinePlaceholder":740},[167,15426,15427],{"class":169,"line":785},[167,15428,15429],{"class":2268},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[167,15431,15432],{"class":169,"line":790},[167,15433,15434],{"class":2268},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[167,15436,15437,15439,15441,15443,15445,15447],{"class":169,"line":796},[167,15438,13249],{"class":731},[167,15440,15381],{"class":731},[167,15442,14962],{"class":512},[167,15444,523],{"class":731},[167,15446,4082],{"class":184},[167,15448,3359],{"class":512},[167,15450,15451],{"class":169,"line":802},[167,15452,741],{"emptyLinePlaceholder":740},[167,15454,15455,15458],{"class":169,"line":808},[167,15456,15457],{"class":2268},"    \u002F\u002Fref = 100;",[167,15459,15460],{"class":2268},"  \u002F\u002F加入const后不可以修改变量\n",[167,15462,15463,15465,15467,15469,15471],{"class":169,"line":814},[167,15464,8559],{"class":512},[167,15466,3242],{"class":731},[167,15468,14962],{"class":512},[167,15470,3242],{"class":731},[167,15472,10868],{"class":512},[167,15474,15475],{"class":169,"line":820},[167,15476,741],{"emptyLinePlaceholder":740},[167,15478,15479],{"class":169,"line":826},[167,15480,15481],{"class":2268},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[167,15483,15484,15486,15488,15490,15492],{"class":169,"line":832},[167,15485,4029],{"class":731},[167,15487,12897],{"class":512},[167,15489,523],{"class":731},[167,15491,4082],{"class":184},[167,15493,3359],{"class":512},[167,15495,15496,15499],{"class":169,"line":837},[167,15497,15498],{"class":173},"    showValue",[167,15500,15316],{"class":512},[167,15502,15503],{"class":169,"line":842},[167,15504,741],{"emptyLinePlaceholder":740},[167,15506,15507,15509,15511,15513],{"class":169,"line":860},[167,15508,4347],{"class":173},[167,15510,898],{"class":512},[167,15512,4352],{"class":177},[167,15514,4755],{"class":512},[167,15516,15517],{"class":169,"line":876},[167,15518,741],{"emptyLinePlaceholder":740},[167,15520,15521,15523,15525],{"class":169,"line":887},[167,15522,6122],{"class":731},[167,15524,6125],{"class":184},[167,15526,3359],{"class":512},[167,15528,15529],{"class":169,"line":892},[167,15530,3630],{"class":512},[2113,15532,15533],{},"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":32,"searchDepth":191,"depth":191,"links":15535},[15536,15537,15538,15539,15540,15541],{"id":14068,"depth":191,"text":14069},{"id":14247,"depth":191,"text":14248},{"id":14430,"depth":191,"text":14431},{"id":14834,"depth":191,"text":14835},{"id":15161,"depth":191,"text":15162},{"id":15341,"depth":191,"text":15342},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14060,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15548,"title":15549,"body":15550,"description":32,"extension":2140,"meta":16630,"navigation":740,"path":16631,"seo":16632,"stem":16633,"__hash__":16634},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15551,"toc":16622},[15552,15555,15559,15562,15567,15798,15800,15811,15815,15818,15826,15930,15933,15937,15940,15944,15947,15952,15974,15980,16307,16310,16314,16322,16619],[10,15553,15549],{"id":15554},"_7函数高级部分",[14,15556,15558],{"id":15557},"_71函数默认参数","7.1函数默认参数",[19,15560,15561],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15563,7213,15564],{},[34,15565,15566],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,15568,15570],{"className":2202,"code":15569,"language":2204,"meta":32,"style":32},"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",[34,15571,15572,15606,15621,15625,15629,15634,15639,15668,15688,15698,15702,15706,15714,15718,15746,15768,15772,15782,15786,15794],{"__ignoreMap":32},[167,15573,15574,15576,15578,15580,15582,15584,15586,15588,15590,15592,15594,15596,15598,15600,15602,15604],{"class":169,"line":170},[167,15575,2216],{"class":731},[167,15577,13413],{"class":173},[167,15579,898],{"class":512},[167,15581,2216],{"class":731},[167,15583,3464],{"class":7246},[167,15585,14463],{"class":512},[167,15587,2216],{"class":731},[167,15589,4869],{"class":7246},[167,15591,753],{"class":731},[167,15593,4082],{"class":184},[167,15595,14463],{"class":512},[167,15597,2216],{"class":731},[167,15599,4885],{"class":7246},[167,15601,753],{"class":731},[167,15603,4082],{"class":184},[167,15605,14470],{"class":512},[167,15607,15608,15610,15612,15614,15616,15618],{"class":169,"line":191},[167,15609,6122],{"class":731},[167,15611,12897],{"class":512},[167,15613,2681],{"class":731},[167,15615,12910],{"class":512},[167,15617,2681],{"class":731},[167,15619,15620],{"class":512}," c;\n",[167,15622,15623],{"class":169,"line":205},[167,15624,3630],{"class":512},[167,15626,15627],{"class":169,"line":219},[167,15628,741],{"emptyLinePlaceholder":740},[167,15630,15631],{"class":169,"line":230},[167,15632,15633],{"class":2268},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[167,15635,15636],{"class":169,"line":241},[167,15637,15638],{"class":2268},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[167,15640,15641,15643,15646,15648,15650,15652,15654,15656,15658,15660,15662,15664,15666],{"class":169,"line":261},[167,15642,2216],{"class":731},[167,15644,15645],{"class":173}," func2",[167,15647,898],{"class":512},[167,15649,2216],{"class":731},[167,15651,3464],{"class":7246},[167,15653,753],{"class":731},[167,15655,4082],{"class":184},[167,15657,14463],{"class":512},[167,15659,2216],{"class":731},[167,15661,4869],{"class":7246},[167,15663,753],{"class":731},[167,15665,4082],{"class":184},[167,15667,4755],{"class":512},[167,15669,15670,15672,15674,15676,15678,15680,15682,15684,15686],{"class":169,"line":773},[167,15671,2216],{"class":731},[167,15673,15645],{"class":173},[167,15675,898],{"class":512},[167,15677,2216],{"class":731},[167,15679,3464],{"class":7246},[167,15681,14463],{"class":512},[167,15683,2216],{"class":731},[167,15685,4869],{"class":7246},[167,15687,14470],{"class":512},[167,15689,15690,15692,15694,15696],{"class":169,"line":779},[167,15691,6122],{"class":731},[167,15693,12897],{"class":512},[167,15695,2681],{"class":731},[167,15697,14491],{"class":512},[167,15699,15700],{"class":169,"line":785},[167,15701,3630],{"class":512},[167,15703,15704],{"class":169,"line":790},[167,15705,741],{"emptyLinePlaceholder":740},[167,15707,15708,15710,15712],{"class":169,"line":796},[167,15709,2216],{"class":731},[167,15711,848],{"class":173},[167,15713,12881],{"class":512},[167,15715,15716],{"class":169,"line":802},[167,15717,741],{"emptyLinePlaceholder":740},[167,15719,15720,15722,15724,15727,15729,15731,15733,15735,15737,15739,15742,15744],{"class":169,"line":808},[167,15721,8559],{"class":512},[167,15723,3242],{"class":731},[167,15725,15726],{"class":177}," \"ret = \"",[167,15728,3510],{"class":731},[167,15730,13413],{"class":173},[167,15732,898],{"class":512},[167,15734,2900],{"class":184},[167,15736,14463],{"class":512},[167,15738,2900],{"class":184},[167,15740,15741],{"class":512},") ",[167,15743,3242],{"class":731},[167,15745,10868],{"class":512},[167,15747,15748,15750,15752,15754,15756,15758,15760,15762,15764,15766],{"class":169,"line":814},[167,15749,8559],{"class":512},[167,15751,3242],{"class":731},[167,15753,15726],{"class":177},[167,15755,3510],{"class":731},[167,15757,13413],{"class":173},[167,15759,898],{"class":512},[167,15761,981],{"class":184},[167,15763,15741],{"class":512},[167,15765,3242],{"class":731},[167,15767,10868],{"class":512},[167,15769,15770],{"class":169,"line":820},[167,15771,741],{"emptyLinePlaceholder":740},[167,15773,15774,15776,15778,15780],{"class":169,"line":826},[167,15775,4347],{"class":173},[167,15777,898],{"class":512},[167,15779,4352],{"class":177},[167,15781,4755],{"class":512},[167,15783,15784],{"class":169,"line":832},[167,15785,741],{"emptyLinePlaceholder":740},[167,15787,15788,15790,15792],{"class":169,"line":837},[167,15789,6122],{"class":731},[167,15791,6125],{"class":184},[167,15793,3359],{"class":512},[167,15795,15796],{"class":169,"line":842},[167,15797,3630],{"class":512},[19,15799,13360],{},[40,15801,15802,15805,15808],{},[43,15803,15804],{},"我传就用我；没传就用你",[43,15806,15807],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[43,15809,15810],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15812,15814],{"id":15813},"_72函数的占位参数","7.2函数的占位参数",[19,15816,15817],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15819,15820,15822,15823],{},[2354,15821,7213],{}," ",[34,15824,15825],{},"返回值类型 函数名 (数据类型){}",[26,15827,15829],{"className":2202,"code":15828,"language":2204,"meta":32,"style":32},"\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",[34,15830,15831,15836,15854,15867,15871,15879,15883,15900,15904,15914,15918,15926],{"__ignoreMap":32},[167,15832,15833],{"class":169,"line":170},[167,15834,15835],{"class":2268},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[167,15837,15838,15840,15842,15844,15846,15848,15850,15852],{"class":169,"line":191},[167,15839,7394],{"class":731},[167,15841,13413],{"class":173},[167,15843,898],{"class":512},[167,15845,2216],{"class":731},[167,15847,3464],{"class":7246},[167,15849,14463],{"class":512},[167,15851,2216],{"class":731},[167,15853,14470],{"class":512},[167,15855,15856,15858,15860,15863,15865],{"class":169,"line":205},[167,15857,8559],{"class":512},[167,15859,3242],{"class":731},[167,15861,15862],{"class":177}," \"this is func\"",[167,15864,3510],{"class":731},[167,15866,10868],{"class":512},[167,15868,15869],{"class":169,"line":219},[167,15870,3630],{"class":512},[167,15872,15873,15875,15877],{"class":169,"line":230},[167,15874,2216],{"class":731},[167,15876,848],{"class":173},[167,15878,12881],{"class":512},[167,15880,15881],{"class":169,"line":241},[167,15882,741],{"emptyLinePlaceholder":740},[167,15884,15885,15887,15889,15891,15893,15895,15897],{"class":169,"line":261},[167,15886,15313],{"class":173},[167,15888,898],{"class":512},[167,15890,2646],{"class":184},[167,15892,2578],{"class":512},[167,15894,2646],{"class":184},[167,15896,7996],{"class":512},[167,15898,15899],{"class":2268}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[167,15901,15902],{"class":169,"line":773},[167,15903,741],{"emptyLinePlaceholder":740},[167,15905,15906,15908,15910,15912],{"class":169,"line":779},[167,15907,4347],{"class":173},[167,15909,898],{"class":512},[167,15911,4352],{"class":177},[167,15913,4755],{"class":512},[167,15915,15916],{"class":169,"line":785},[167,15917,741],{"emptyLinePlaceholder":740},[167,15919,15920,15922,15924],{"class":169,"line":790},[167,15921,6122],{"class":731},[167,15923,6125],{"class":184},[167,15925,3359],{"class":512},[167,15927,15928],{"class":169,"line":796},[167,15929,3630],{"class":512},[19,15931,15932],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15934,15936],{"id":15935},"_73函数重载","7.3函数重载",[19,15938,15939],{},"意思是函数名是可以相同的",[494,15941,15943],{"id":15942},"_731基本语法","7.3.1基本语法",[19,15945,15946],{},"作用：函数名可以相同，提高复用性",[19,15948,15949],{},[2354,15950,15951],{},"函数重载满足条件：",[3205,15953,15954,15957,15960],{},[43,15955,15956],{},"同一个作用域下",[43,15958,15959],{},"函数名称相同",[43,15961,15962,15963,15966,15967,15970,15971],{},"函数参数",[2354,15964,15965],{},"类型不同","  或者 ",[2354,15968,15969],{},"个数不同"," 或者 ",[2354,15972,15973],{},"顺序不同",[19,15975,15976,15979],{},[2354,15977,15978],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,15981,15983],{"className":11969,"code":15982,"language":11971,"meta":32,"style":32},"\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",[34,15984,15985,15990,15998,16002,16015,16019,16033,16037,16050,16054,16069,16073,16086,16090,16111,16115,16128,16132,16152,16156,16169,16173,16177,16182,16187,16192,16197,16202,16206,16210,16218,16222,16228,16238,16248,16262,16277,16281,16291,16295,16303],{"__ignoreMap":32},[167,15986,15987],{"class":169,"line":170},[167,15988,15989],{"class":2268},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[167,15991,15992,15994,15996],{"class":169,"line":191},[167,15993,7394],{"class":731},[167,15995,13413],{"class":173},[167,15997,4020],{"class":512},[167,15999,16000],{"class":169,"line":205},[167,16001,3611],{"class":512},[167,16003,16004,16006,16008,16011,16013],{"class":169,"line":219},[167,16005,8559],{"class":512},[167,16007,3242],{"class":731},[167,16009,16010],{"class":177}," \"func 的调用！\"",[167,16012,3510],{"class":731},[167,16014,10868],{"class":512},[167,16016,16017],{"class":169,"line":230},[167,16018,3630],{"class":512},[167,16020,16021,16023,16025,16027,16029,16031],{"class":169,"line":241},[167,16022,7394],{"class":731},[167,16024,13413],{"class":173},[167,16026,898],{"class":512},[167,16028,2216],{"class":731},[167,16030,3464],{"class":7246},[167,16032,873],{"class":512},[167,16034,16035],{"class":169,"line":261},[167,16036,3611],{"class":512},[167,16038,16039,16041,16043,16046,16048],{"class":169,"line":773},[167,16040,8559],{"class":512},[167,16042,3242],{"class":731},[167,16044,16045],{"class":177}," \"func (int a) 的调用！\"",[167,16047,3510],{"class":731},[167,16049,10868],{"class":512},[167,16051,16052],{"class":169,"line":779},[167,16053,3630],{"class":512},[167,16055,16056,16058,16060,16062,16065,16067],{"class":169,"line":785},[167,16057,7394],{"class":731},[167,16059,13413],{"class":173},[167,16061,898],{"class":512},[167,16063,16064],{"class":731},"double",[167,16066,3464],{"class":7246},[167,16068,873],{"class":512},[167,16070,16071],{"class":169,"line":790},[167,16072,3611],{"class":512},[167,16074,16075,16077,16079,16082,16084],{"class":169,"line":796},[167,16076,8559],{"class":512},[167,16078,3242],{"class":731},[167,16080,16081],{"class":177}," \"func (double a)的调用！\"",[167,16083,3510],{"class":731},[167,16085,10868],{"class":512},[167,16087,16088],{"class":169,"line":802},[167,16089,3630],{"class":512},[167,16091,16092,16094,16096,16098,16100,16102,16105,16107,16109],{"class":169,"line":808},[167,16093,7394],{"class":731},[167,16095,13413],{"class":173},[167,16097,898],{"class":512},[167,16099,2216],{"class":731},[167,16101,3464],{"class":7246},[167,16103,16104],{"class":512}," ,",[167,16106,16064],{"class":731},[167,16108,4869],{"class":7246},[167,16110,873],{"class":512},[167,16112,16113],{"class":169,"line":814},[167,16114,3611],{"class":512},[167,16116,16117,16119,16121,16124,16126],{"class":169,"line":820},[167,16118,8559],{"class":512},[167,16120,3242],{"class":731},[167,16122,16123],{"class":177}," \"func (int a ,double b) 的调用！\"",[167,16125,3510],{"class":731},[167,16127,10868],{"class":512},[167,16129,16130],{"class":169,"line":826},[167,16131,3630],{"class":512},[167,16133,16134,16136,16138,16140,16142,16144,16146,16148,16150],{"class":169,"line":832},[167,16135,7394],{"class":731},[167,16137,13413],{"class":173},[167,16139,898],{"class":512},[167,16141,16064],{"class":731},[167,16143,3464],{"class":7246},[167,16145,16104],{"class":512},[167,16147,2216],{"class":731},[167,16149,4869],{"class":7246},[167,16151,873],{"class":512},[167,16153,16154],{"class":169,"line":837},[167,16155,3611],{"class":512},[167,16157,16158,16160,16162,16165,16167],{"class":169,"line":842},[167,16159,8559],{"class":512},[167,16161,3242],{"class":731},[167,16163,16164],{"class":177}," \"func (double a ,int b)的调用！\"",[167,16166,3510],{"class":731},[167,16168,10868],{"class":512},[167,16170,16171],{"class":169,"line":860},[167,16172,3630],{"class":512},[167,16174,16175],{"class":169,"line":876},[167,16176,741],{"emptyLinePlaceholder":740},[167,16178,16179],{"class":169,"line":887},[167,16180,16181],{"class":2268},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[167,16183,16184],{"class":169,"line":892},[167,16185,16186],{"class":2268},"\u002F\u002Fint func(double a, int b)\n",[167,16188,16189],{"class":169,"line":907},[167,16190,16191],{"class":2268},"\u002F\u002F{\n",[167,16193,16194],{"class":169,"line":920},[167,16195,16196],{"class":2268},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[167,16198,16199],{"class":169,"line":933},[167,16200,16201],{"class":2268},"\u002F\u002F}\n",[167,16203,16204],{"class":169,"line":946},[167,16205,741],{"emptyLinePlaceholder":740},[167,16207,16208],{"class":169,"line":959},[167,16209,741],{"emptyLinePlaceholder":740},[167,16211,16212,16214,16216],{"class":169,"line":964},[167,16213,2216],{"class":731},[167,16215,848],{"class":173},[167,16217,12881],{"class":512},[167,16219,16220],{"class":169,"line":987},[167,16221,741],{"emptyLinePlaceholder":740},[167,16223,16224,16226],{"class":169,"line":993},[167,16225,15313],{"class":173},[167,16227,7666],{"class":512},[167,16229,16230,16232,16234,16236],{"class":169,"line":998},[167,16231,15313],{"class":173},[167,16233,898],{"class":512},[167,16235,2646],{"class":184},[167,16237,4755],{"class":512},[167,16239,16240,16242,16244,16246],{"class":169,"line":1010},[167,16241,15313],{"class":173},[167,16243,898],{"class":512},[167,16245,2259],{"class":184},[167,16247,4755],{"class":512},[167,16249,16250,16252,16254,16256,16258,16260],{"class":169,"line":1022},[167,16251,15313],{"class":173},[167,16253,898],{"class":512},[167,16255,2646],{"class":184},[167,16257,2578],{"class":512},[167,16259,2259],{"class":184},[167,16261,4755],{"class":512},[167,16263,16264,16266,16268,16270,16273,16275],{"class":169,"line":1027},[167,16265,15313],{"class":173},[167,16267,898],{"class":512},[167,16269,2259],{"class":184},[167,16271,16272],{"class":512}," , ",[167,16274,2646],{"class":184},[167,16276,4755],{"class":512},[167,16278,16279],{"class":169,"line":1032},[167,16280,15238],{"class":512},[167,16282,16283,16285,16287,16289],{"class":169,"line":1049},[167,16284,4347],{"class":173},[167,16286,898],{"class":512},[167,16288,4352],{"class":177},[167,16290,4755],{"class":512},[167,16292,16293],{"class":169,"line":10005},[167,16294,741],{"emptyLinePlaceholder":740},[167,16296,16297,16299,16301],{"class":169,"line":10011},[167,16298,6122],{"class":731},[167,16300,6125],{"class":184},[167,16302,3359],{"class":512},[167,16304,16305],{"class":169,"line":10038},[167,16306,3630],{"class":512},[19,16308,16309],{},"重点：函数返回值不可以作为函数重载条件！",[494,16311,16313],{"id":16312},"_732注意事项","7.3.2注意事项",[3205,16315,16316,16319],{},[43,16317,16318],{},"引用作为重载条件!!!",[43,16320,16321],{},"函数重载碰到函数默认参数",[26,16323,16325],{"className":2202,"code":16324,"language":2204,"meta":32,"style":32},"\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",[34,16326,16327,16332,16337,16341,16357,16361,16374,16378,16382,16400,16404,16417,16421,16425,16429,16434,16438,16462,16466,16479,16483,16487,16501,16505,16518,16522,16526,16534,16538,16550,16560,16573,16577,16581,16589,16593,16603,16607,16615],{"__ignoreMap":32},[167,16328,16329],{"class":169,"line":170},[167,16330,16331],{"class":2268},"\u002F\u002F函数重载注意事项\n",[167,16333,16334],{"class":169,"line":191},[167,16335,16336],{"class":2268},"\u002F\u002F1、引用作为重载条件\n",[167,16338,16339],{"class":169,"line":205},[167,16340,741],{"emptyLinePlaceholder":740},[167,16342,16343,16345,16347,16349,16351,16353,16355],{"class":169,"line":219},[167,16344,7394],{"class":731},[167,16346,13413],{"class":173},[167,16348,898],{"class":512},[167,16350,2216],{"class":731},[167,16352,12612],{"class":731},[167,16354,2439],{"class":7246},[167,16356,873],{"class":512},[167,16358,16359],{"class":169,"line":230},[167,16360,3611],{"class":512},[167,16362,16363,16365,16367,16370,16372],{"class":169,"line":241},[167,16364,8559],{"class":512},[167,16366,3242],{"class":731},[167,16368,16369],{"class":177}," \"func (int &a) 调用 \"",[167,16371,3510],{"class":731},[167,16373,10868],{"class":512},[167,16375,16376],{"class":169,"line":261},[167,16377,3630],{"class":512},[167,16379,16380],{"class":169,"line":773},[167,16381,741],{"emptyLinePlaceholder":740},[167,16383,16384,16386,16388,16390,16392,16394,16396,16398],{"class":169,"line":779},[167,16385,7394],{"class":731},[167,16387,13413],{"class":173},[167,16389,898],{"class":512},[167,16391,8822],{"class":731},[167,16393,4426],{"class":731},[167,16395,12612],{"class":731},[167,16397,2439],{"class":7246},[167,16399,873],{"class":512},[167,16401,16402],{"class":169,"line":785},[167,16403,3611],{"class":512},[167,16405,16406,16408,16410,16413,16415],{"class":169,"line":790},[167,16407,8559],{"class":512},[167,16409,3242],{"class":731},[167,16411,16412],{"class":177}," \"func (const int &a) 调用 \"",[167,16414,3510],{"class":731},[167,16416,10868],{"class":512},[167,16418,16419],{"class":169,"line":796},[167,16420,3630],{"class":512},[167,16422,16423],{"class":169,"line":802},[167,16424,741],{"emptyLinePlaceholder":740},[167,16426,16427],{"class":169,"line":808},[167,16428,741],{"emptyLinePlaceholder":740},[167,16430,16431],{"class":169,"line":814},[167,16432,16433],{"class":2268},"\u002F\u002F2、函数重载碰到函数默认参数\n",[167,16435,16436],{"class":169,"line":820},[167,16437,741],{"emptyLinePlaceholder":740},[167,16439,16440,16442,16444,16446,16448,16450,16452,16454,16456,16458,16460],{"class":169,"line":826},[167,16441,7394],{"class":731},[167,16443,15645],{"class":173},[167,16445,898],{"class":512},[167,16447,2216],{"class":731},[167,16449,3464],{"class":7246},[167,16451,14463],{"class":512},[167,16453,2216],{"class":731},[167,16455,4869],{"class":7246},[167,16457,753],{"class":731},[167,16459,4082],{"class":184},[167,16461,873],{"class":512},[167,16463,16464],{"class":169,"line":832},[167,16465,3611],{"class":512},[167,16467,16468,16470,16472,16475,16477],{"class":169,"line":837},[167,16469,8559],{"class":512},[167,16471,3242],{"class":731},[167,16473,16474],{"class":177}," \"func2(int a, int b = 10) 调用\"",[167,16476,3510],{"class":731},[167,16478,10868],{"class":512},[167,16480,16481],{"class":169,"line":842},[167,16482,3630],{"class":512},[167,16484,16485],{"class":169,"line":860},[167,16486,741],{"emptyLinePlaceholder":740},[167,16488,16489,16491,16493,16495,16497,16499],{"class":169,"line":876},[167,16490,7394],{"class":731},[167,16492,15645],{"class":173},[167,16494,898],{"class":512},[167,16496,2216],{"class":731},[167,16498,3464],{"class":7246},[167,16500,873],{"class":512},[167,16502,16503],{"class":169,"line":887},[167,16504,3611],{"class":512},[167,16506,16507,16509,16511,16514,16516],{"class":169,"line":892},[167,16508,8559],{"class":512},[167,16510,3242],{"class":731},[167,16512,16513],{"class":177}," \"func2(int a) 调用\"",[167,16515,3510],{"class":731},[167,16517,10868],{"class":512},[167,16519,16520],{"class":169,"line":907},[167,16521,3630],{"class":512},[167,16523,16524],{"class":169,"line":920},[167,16525,741],{"emptyLinePlaceholder":740},[167,16527,16528,16530,16532],{"class":169,"line":933},[167,16529,2216],{"class":731},[167,16531,848],{"class":173},[167,16533,12881],{"class":512},[167,16535,16536],{"class":169,"line":946},[167,16537,15238],{"class":512},[167,16539,16540,16542,16544,16546,16548],{"class":169,"line":959},[167,16541,4029],{"class":731},[167,16543,12897],{"class":512},[167,16545,523],{"class":731},[167,16547,4082],{"class":184},[167,16549,3359],{"class":512},[167,16551,16552,16554,16557],{"class":169,"line":964},[167,16553,15313],{"class":173},[167,16555,16556],{"class":512},"(a);",[167,16558,16559],{"class":2268}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[167,16561,16562,16564,16566,16568,16570],{"class":169,"line":987},[167,16563,15313],{"class":173},[167,16565,898],{"class":512},[167,16567,2646],{"class":184},[167,16569,7996],{"class":512},[167,16571,16572],{"class":2268},"\u002F\u002F调用有const   10是个常量\n",[167,16574,16575],{"class":169,"line":993},[167,16576,741],{"emptyLinePlaceholder":740},[167,16578,16579],{"class":169,"line":998},[167,16580,741],{"emptyLinePlaceholder":740},[167,16582,16583,16586],{"class":169,"line":1010},[167,16584,16585],{"class":2268},"    \u002F\u002Ffunc2(10);",[167,16587,16588],{"class":2268}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[167,16590,16591],{"class":169,"line":1022},[167,16592,741],{"emptyLinePlaceholder":740},[167,16594,16595,16597,16599,16601],{"class":169,"line":1027},[167,16596,4347],{"class":173},[167,16598,898],{"class":512},[167,16600,4352],{"class":177},[167,16602,4755],{"class":512},[167,16604,16605],{"class":169,"line":1032},[167,16606,741],{"emptyLinePlaceholder":740},[167,16608,16609,16611,16613],{"class":169,"line":1049},[167,16610,6122],{"class":731},[167,16612,6125],{"class":184},[167,16614,3359],{"class":512},[167,16616,16617],{"class":169,"line":10005},[167,16618,3630],{"class":512},[2113,16620,16621],{},"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":32,"searchDepth":191,"depth":191,"links":16623},[16624,16625,16626],{"id":15557,"depth":191,"text":15558},{"id":15813,"depth":191,"text":15814},{"id":15935,"depth":191,"text":15936,"children":16627},[16628,16629],{"id":15942,"depth":205,"text":15943},{"id":16312,"depth":205,"text":16313},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15549,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16636,"title":16637,"body":16638,"description":25391,"extension":2140,"meta":25392,"navigation":740,"path":25393,"seo":25394,"stem":25395,"__hash__":25396},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16639,"toc":25372},[16640,16643,16649,16656,16661,16664,16667,16670,16674,16678,16681,16684,16692,16697,16700,16707,16712,16871,16874,17126,17129,17132,17135,17140,17143,17146,17157,17162,17398,17402,17412,17415,17423,17570,17574,17577,17580,17584,18029,18033,18041,18049,18961,18968,18973,19601,19604,19607,19610,19729,19732,19819,19822,19948,19951,20045,20048,20401,20405,20413,20417,20424,20427,20430,20441,20447,20452,20464,20472,20492,20500,20517,20703,20706,20710,20713,20716,20719,20722,20725,20728,20731,21191,21197,21201,21204,21215,21802,21805,22294,22298,22301,22304,22307,22310,22313,22321,22717,22721,22724,22727,23174,23177,23180,23185,23188,23193,23196,23200,23203,23205,23211,23214,23520,23530,23571,23575,23578,23580,23613,23616,23923,23925,23940,23943,23966,23975,23981,23984,23988,23991,23994,23999,24010,24015,24023,24028,24158,24161,24164,24339,24344,24556,24560,24563,24677,24682,24921,24925,24929,24932,24935,24940,25045,25048,25051,25054,25058,25169,25172,25175,25180,25232,25235,25238,25243,25289,25292,25297,25365,25367,25370],[10,16641,16637],{"id":16642},"_8类和对象",[19,16644,16645,16646],{},"C++面向对象的三大特性为",[2354,16647,16648],{},"封装、继承、多态",[19,16650,16651,16652,16655],{},"C++认为",[2354,16653,16654],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16657,16658],{},[2354,16659,16660],{},"例如：",[19,16662,16663],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16665,16666],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16668,16669],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16671,16673],{"id":16672},"_81封装","8.1封装",[494,16675,16677],{"id":16676},"_811封装的意义","8.1.1封装的意义",[19,16679,16680],{},"封装是C++面向对象三大特性之一",[19,16682,16683],{},"封装的意义：",[3205,16685,16686,16689],{},[43,16687,16688],{},"将属性和行为作为一个整体，表现生活中的事物",[43,16690,16691],{},"将属性和行为加以权限控制",[19,16693,16694],{},[2354,16695,16696],{},"封装意义一：",[19,16698,16699],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16701,16702,15822,16704],{},[2354,16703,7213],{},[34,16705,16706],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[40,16708,16709],{},[43,16710,16711],{},"**示例1：**设计一个圆类，求圆的周长",[26,16713,16715],{"className":2202,"code":16714,"language":2204,"meta":32,"style":32},"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",[34,16716,16717,16725,16729,16734,16739,16744,16749,16756,16761,16771,16775,16793,16797,16801,16809,16813,16818,16823,16828,16833,16844,16867],{"__ignoreMap":32},[167,16718,16719,16722],{"class":169,"line":170},[167,16720,16721],{"class":731},"class",[167,16723,16724],{"class":173}," Circle\n",[167,16726,16727],{"class":169,"line":191},[167,16728,3611],{"class":512},[167,16730,16731],{"class":169,"line":205},[167,16732,16733],{"class":2268},"    \u002F\u002F访问权限\n",[167,16735,16736],{"class":169,"line":219},[167,16737,16738],{"class":2268},"    \u002F\u002F公共权限\n",[167,16740,16741],{"class":169,"line":230},[167,16742,16743],{"class":731},"public:\n",[167,16745,16746],{"class":169,"line":241},[167,16747,16748],{"class":2268},"    \u002F\u002F属性\n",[167,16750,16751,16753],{"class":169,"line":261},[167,16752,4029],{"class":731},[167,16754,16755],{"class":512}," m_r;\n",[167,16757,16758],{"class":169,"line":773},[167,16759,16760],{"class":2268},"    \u002F\u002F行为\n",[167,16762,16763,16766,16769],{"class":169,"line":779},[167,16764,16765],{"class":731},"    double",[167,16767,16768],{"class":173}," calculateZC",[167,16770,4020],{"class":512},[167,16772,16773],{"class":169,"line":785},[167,16774,4074],{"class":512},[167,16776,16777,16780,16783,16785,16788,16790],{"class":169,"line":790},[167,16778,16779],{"class":731},"        return",[167,16781,16782],{"class":184}," 2",[167,16784,2655],{"class":731},[167,16786,16787],{"class":512},"PI",[167,16789,2655],{"class":731},[167,16791,16792],{"class":512},"m_r;\n",[167,16794,16795],{"class":169,"line":796},[167,16796,4231],{"class":512},[167,16798,16799],{"class":169,"line":802},[167,16800,6027],{"class":512},[167,16802,16803,16805,16807],{"class":169,"line":808},[167,16804,2216],{"class":731},[167,16806,848],{"class":173},[167,16808,4020],{"class":512},[167,16810,16811],{"class":169,"line":814},[167,16812,3611],{"class":512},[167,16814,16815],{"class":169,"line":820},[167,16816,16817],{"class":2268},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[167,16819,16820],{"class":169,"line":826},[167,16821,16822],{"class":2268},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[167,16824,16825],{"class":169,"line":832},[167,16826,16827],{"class":512},"    Circle c1;\n",[167,16829,16830],{"class":169,"line":837},[167,16831,16832],{"class":2268},"    \u002F\u002F给圆对象 的属性进行赋值\n",[167,16834,16835,16838,16840,16842],{"class":169,"line":842},[167,16836,16837],{"class":512},"    c1.m_r",[167,16839,523],{"class":731},[167,16841,2646],{"class":184},[167,16843,3359],{"class":512},[167,16845,16846,16848,16850,16853,16855,16858,16861,16863,16865],{"class":169,"line":860},[167,16847,3616],{"class":512},[167,16849,3242],{"class":731},[167,16851,16852],{"class":177},"\"圆的周长\"",[167,16854,3242],{"class":731},[167,16856,16857],{"class":512},"c1.",[167,16859,16860],{"class":173},"calculateZC",[167,16862,4470],{"class":512},[167,16864,3242],{"class":731},[167,16866,3264],{"class":512},[167,16868,16869],{"class":169,"line":876},[167,16870,3630],{"class":512},[19,16872,16873],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,16875,16877],{"className":2202,"code":16876,"language":2204,"meta":32,"style":32},"#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",[34,16878,16879,16885,16895,16901,16907,16911,16915,16920,16927,16932,16949,16953,16963,16967,16972,16988,16992,17002,17006,17011,17019,17023,17055,17059,17063,17071,17075,17080,17085,17099,17113,17122],{"__ignoreMap":32},[167,16880,16881,16883],{"class":169,"line":170},[167,16882,3995],{"class":731},[167,16884,3998],{"class":177},[167,16886,16887,16889,16891,16893],{"class":169,"line":191},[167,16888,4003],{"class":731},[167,16890,4006],{"class":731},[167,16892,4009],{"class":173},[167,16894,3359],{"class":512},[167,16896,16897,16899],{"class":169,"line":205},[167,16898,3995],{"class":731},[167,16900,9779],{"class":177},[167,16902,16903,16905],{"class":169,"line":219},[167,16904,16721],{"class":731},[167,16906,9792],{"class":173},[167,16908,16909],{"class":169,"line":230},[167,16910,3611],{"class":512},[167,16912,16913],{"class":169,"line":241},[167,16914,16743],{"class":731},[167,16916,16917],{"class":169,"line":261},[167,16918,16919],{"class":512},"    string m_name;\n",[167,16921,16922,16924],{"class":169,"line":773},[167,16923,4029],{"class":731},[167,16925,16926],{"class":512}," m_id;\n",[167,16928,16929],{"class":169,"line":779},[167,16930,16931],{"class":2268},"    \u002F\u002F赋值姓名\n",[167,16933,16934,16937,16940,16942,16945,16947],{"class":169,"line":785},[167,16935,16936],{"class":731},"    void",[167,16938,16939],{"class":173}," setName",[167,16941,898],{"class":512},[167,16943,16944],{"class":173},"string",[167,16946,520],{"class":7246},[167,16948,873],{"class":512},[167,16950,16951],{"class":169,"line":790},[167,16952,4074],{"class":512},[167,16954,16955,16958,16960],{"class":169,"line":796},[167,16956,16957],{"class":512},"        m_name",[167,16959,523],{"class":731},[167,16961,16962],{"class":512},"name;\n",[167,16964,16965],{"class":169,"line":802},[167,16966,4231],{"class":512},[167,16968,16969],{"class":169,"line":808},[167,16970,16971],{"class":2268},"    \u002F\u002F赋值学号\n",[167,16973,16974,16976,16979,16981,16983,16986],{"class":169,"line":814},[167,16975,16936],{"class":731},[167,16977,16978],{"class":173}," setId",[167,16980,898],{"class":512},[167,16982,2216],{"class":731},[167,16984,16985],{"class":7246}," id",[167,16987,873],{"class":512},[167,16989,16990],{"class":169,"line":820},[167,16991,4074],{"class":512},[167,16993,16994,16997,16999],{"class":169,"line":826},[167,16995,16996],{"class":512},"        m_id",[167,16998,523],{"class":731},[167,17000,17001],{"class":512},"id;\n",[167,17003,17004],{"class":169,"line":832},[167,17005,4231],{"class":512},[167,17007,17008],{"class":169,"line":837},[167,17009,17010],{"class":2268},"    \u002F\u002F打印学生信息\n",[167,17012,17013,17015,17017],{"class":169,"line":842},[167,17014,16936],{"class":731},[167,17016,11643],{"class":173},[167,17018,4020],{"class":512},[167,17020,17021],{"class":169,"line":860},[167,17022,4074],{"class":512},[167,17024,17025,17027,17029,17032,17034,17037,17039,17041,17043,17046,17048,17051,17053],{"class":169,"line":876},[167,17026,5485],{"class":512},[167,17028,3242],{"class":731},[167,17030,17031],{"class":177},"\"姓名：\"",[167,17033,3242],{"class":731},[167,17035,17036],{"class":512},"m_name",[167,17038,3242],{"class":731},[167,17040,6391],{"class":177},[167,17042,3242],{"class":731},[167,17044,17045],{"class":177},"\"学号：\"",[167,17047,3242],{"class":731},[167,17049,17050],{"class":512},"m_id",[167,17052,3242],{"class":731},[167,17054,3264],{"class":512},[167,17056,17057],{"class":169,"line":887},[167,17058,4231],{"class":512},[167,17060,17061],{"class":169,"line":892},[167,17062,6027],{"class":512},[167,17064,17065,17067,17069],{"class":169,"line":907},[167,17066,2216],{"class":731},[167,17068,848],{"class":173},[167,17070,4020],{"class":512},[167,17072,17073],{"class":169,"line":920},[167,17074,3611],{"class":512},[167,17076,17077],{"class":169,"line":933},[167,17078,17079],{"class":2268},"    \u002F\u002F实例化\n",[167,17081,17082],{"class":169,"line":946},[167,17083,17084],{"class":512},"    Student s1;\n",[167,17086,17087,17090,17093,17095,17097],{"class":169,"line":959},[167,17088,17089],{"class":512},"    s1.",[167,17091,17092],{"class":173},"setName",[167,17094,898],{"class":512},[167,17096,9946],{"class":177},[167,17098,4755],{"class":512},[167,17100,17101,17103,17106,17108,17111],{"class":169,"line":964},[167,17102,17089],{"class":512},[167,17104,17105],{"class":173},"setId",[167,17107,898],{"class":512},[167,17109,17110],{"class":184},"123456",[167,17112,4755],{"class":512},[167,17114,17115,17117,17120],{"class":169,"line":987},[167,17116,17089],{"class":512},[167,17118,17119],{"class":173},"printInfo",[167,17121,7666],{"class":512},[167,17123,17124],{"class":169,"line":993},[167,17125,3630],{"class":512},[19,17127,17128],{},"类中的属性和行为统称为成员",[19,17130,17131],{},"属性：成员属性(成员变量)",[19,17133,17134],{},"方法：成员函数(成员方法)",[19,17136,17137],{},[2354,17138,17139],{},"封装意义二：",[19,17141,17142],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17144,17145],{},"访问权限有三种：",[40,17147,17148,17151,17154],{},[43,17149,17150],{},"public        公共权限",[43,17152,17153],{},"protected 保护权限",[43,17155,17156],{},"private      私有权限",[19,17158,17159],{},[2354,17160,17161],{},"示例：",[26,17163,17165],{"className":11969,"code":17164,"language":11971,"meta":32,"style":32},"\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",[34,17166,17167,17172,17177,17182,17187,17191,17198,17202,17207,17211,17216,17220,17225,17230,17235,17239,17244,17249,17256,17260,17264,17272,17276,17287,17299,17311,17315,17319,17323,17331,17335,17340,17352,17360,17368,17372,17382,17386,17394],{"__ignoreMap":32},[167,17168,17169],{"class":169,"line":170},[167,17170,17171],{"class":2268},"\u002F\u002F三种权限\n",[167,17173,17174],{"class":169,"line":191},[167,17175,17176],{"class":2268},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[167,17178,17179],{"class":169,"line":205},[167,17180,17181],{"class":2268},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[167,17183,17184],{"class":169,"line":219},[167,17185,17186],{"class":2268},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[167,17188,17189],{"class":169,"line":230},[167,17190,741],{"emptyLinePlaceholder":740},[167,17192,17193,17195],{"class":169,"line":241},[167,17194,16721],{"class":731},[167,17196,17197],{"class":173}," Person\n",[167,17199,17200],{"class":169,"line":261},[167,17201,3611],{"class":512},[167,17203,17204],{"class":169,"line":773},[167,17205,17206],{"class":2268},"    \u002F\u002F姓名  公共权限\n",[167,17208,17209],{"class":169,"line":779},[167,17210,16743],{"class":731},[167,17212,17213],{"class":169,"line":785},[167,17214,17215],{"class":512},"    string m_Name;\n",[167,17217,17218],{"class":169,"line":790},[167,17219,741],{"emptyLinePlaceholder":740},[167,17221,17222],{"class":169,"line":796},[167,17223,17224],{"class":2268},"    \u002F\u002F汽车  保护权限\n",[167,17226,17227],{"class":169,"line":802},[167,17228,17229],{"class":731},"protected:\n",[167,17231,17232],{"class":169,"line":808},[167,17233,17234],{"class":512},"    string m_Car;\n",[167,17236,17237],{"class":169,"line":814},[167,17238,741],{"emptyLinePlaceholder":740},[167,17240,17241],{"class":169,"line":820},[167,17242,17243],{"class":2268},"    \u002F\u002F银行卡密码  私有权限\n",[167,17245,17246],{"class":169,"line":826},[167,17247,17248],{"class":731},"private:\n",[167,17250,17251,17253],{"class":169,"line":832},[167,17252,4029],{"class":731},[167,17254,17255],{"class":512}," m_Password;\n",[167,17257,17258],{"class":169,"line":837},[167,17259,741],{"emptyLinePlaceholder":740},[167,17261,17262],{"class":169,"line":842},[167,17263,16743],{"class":731},[167,17265,17266,17268,17270],{"class":169,"line":860},[167,17267,16936],{"class":731},[167,17269,13413],{"class":173},[167,17271,4020],{"class":512},[167,17273,17274],{"class":169,"line":876},[167,17275,4074],{"class":512},[167,17277,17278,17281,17283,17285],{"class":169,"line":887},[167,17279,17280],{"class":512},"        m_Name ",[167,17282,523],{"class":731},[167,17284,10966],{"class":177},[167,17286,3359],{"class":512},[167,17288,17289,17292,17294,17297],{"class":169,"line":892},[167,17290,17291],{"class":512},"        m_Car ",[167,17293,523],{"class":731},[167,17295,17296],{"class":177}," \"拖拉机\"",[167,17298,3359],{"class":512},[167,17300,17301,17304,17306,17309],{"class":169,"line":907},[167,17302,17303],{"class":512},"        m_Password ",[167,17305,523],{"class":731},[167,17307,17308],{"class":184}," 123456",[167,17310,3359],{"class":512},[167,17312,17313],{"class":169,"line":920},[167,17314,4231],{"class":512},[167,17316,17317],{"class":169,"line":933},[167,17318,6027],{"class":512},[167,17320,17321],{"class":169,"line":946},[167,17322,741],{"emptyLinePlaceholder":740},[167,17324,17325,17327,17329],{"class":169,"line":959},[167,17326,2216],{"class":731},[167,17328,848],{"class":173},[167,17330,12881],{"class":512},[167,17332,17333],{"class":169,"line":964},[167,17334,741],{"emptyLinePlaceholder":740},[167,17336,17337],{"class":169,"line":987},[167,17338,17339],{"class":512},"    Person p;\n",[167,17341,17342,17345,17347,17350],{"class":169,"line":993},[167,17343,17344],{"class":512},"    p.m_Name ",[167,17346,523],{"class":731},[167,17348,17349],{"class":177}," \"李四\"",[167,17351,3359],{"class":512},[167,17353,17354,17357],{"class":169,"line":998},[167,17355,17356],{"class":2268},"    \u002F\u002Fp.m_Car = \"奔驰\";",[167,17358,17359],{"class":2268},"  \u002F\u002F保护权限类外访问不到\n",[167,17361,17362,17365],{"class":169,"line":1010},[167,17363,17364],{"class":2268},"    \u002F\u002Fp.m_Password = 123;",[167,17366,17367],{"class":2268}," \u002F\u002F私有权限类外访问不到\n",[167,17369,17370],{"class":169,"line":1022},[167,17371,741],{"emptyLinePlaceholder":740},[167,17373,17374,17376,17378,17380],{"class":169,"line":1027},[167,17375,4347],{"class":173},[167,17377,898],{"class":512},[167,17379,4352],{"class":177},[167,17381,4755],{"class":512},[167,17383,17384],{"class":169,"line":1032},[167,17385,741],{"emptyLinePlaceholder":740},[167,17387,17388,17390,17392],{"class":169,"line":1049},[167,17389,6122],{"class":731},[167,17391,6125],{"class":184},[167,17393,3359],{"class":512},[167,17395,17396],{"class":169,"line":10005},[167,17397,3630],{"class":512},[494,17399,17401],{"id":17400},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17403,17404,17405,17408,17409],{},"在C++中 struct和class唯一的",[2354,17406,17407],{},"区别","就在于 ",[2354,17410,17411],{},"默认的访问权限不同",[19,17413,17414],{},"区别：",[3205,17416,17417,17420],{},[43,17418,17419],{},"struct 默认权限为公共",[43,17421,17422],{},"class   默认权限为私有",[26,17424,17426],{"className":11969,"code":17425,"language":11971,"meta":32,"style":32},"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",[34,17427,17428,17435,17439,17449,17453,17457,17464,17468,17478,17482,17486,17494,17498,17503,17517,17521,17526,17540,17544,17554,17558,17566],{"__ignoreMap":32},[167,17429,17430,17432],{"class":169,"line":170},[167,17431,16721],{"class":731},[167,17433,17434],{"class":173}," C1\n",[167,17436,17437],{"class":169,"line":191},[167,17438,3611],{"class":512},[167,17440,17441,17443,17446],{"class":169,"line":205},[167,17442,4029],{"class":731},[167,17444,17445],{"class":512},"  m_A;",[167,17447,17448],{"class":2268}," \u002F\u002F默认是私有权限\n",[167,17450,17451],{"class":169,"line":219},[167,17452,6027],{"class":512},[167,17454,17455],{"class":169,"line":230},[167,17456,741],{"emptyLinePlaceholder":740},[167,17458,17459,17461],{"class":169,"line":241},[167,17460,9789],{"class":731},[167,17462,17463],{"class":173}," C2\n",[167,17465,17466],{"class":169,"line":261},[167,17467,3611],{"class":512},[167,17469,17470,17472,17475],{"class":169,"line":773},[167,17471,4029],{"class":731},[167,17473,17474],{"class":512}," m_A;",[167,17476,17477],{"class":2268},"  \u002F\u002F默认是公共权限\n",[167,17479,17480],{"class":169,"line":779},[167,17481,6027],{"class":512},[167,17483,17484],{"class":169,"line":785},[167,17485,741],{"emptyLinePlaceholder":740},[167,17487,17488,17490,17492],{"class":169,"line":790},[167,17489,2216],{"class":731},[167,17491,848],{"class":173},[167,17493,12881],{"class":512},[167,17495,17496],{"class":169,"line":796},[167,17497,741],{"emptyLinePlaceholder":740},[167,17499,17500],{"class":169,"line":802},[167,17501,17502],{"class":512},"    C1 c1;\n",[167,17504,17505,17508,17510,17512,17514],{"class":169,"line":808},[167,17506,17507],{"class":512},"    c1.m_A ",[167,17509,523],{"class":731},[167,17511,4082],{"class":184},[167,17513,2265],{"class":512},[167,17515,17516],{"class":2268}," \u002F\u002F错误，访问权限是私有\n",[167,17518,17519],{"class":169,"line":814},[167,17520,741],{"emptyLinePlaceholder":740},[167,17522,17523],{"class":169,"line":820},[167,17524,17525],{"class":512},"    C2 c2;\n",[167,17527,17528,17531,17533,17535,17537],{"class":169,"line":826},[167,17529,17530],{"class":512},"    c2.m_A ",[167,17532,523],{"class":731},[167,17534,4082],{"class":184},[167,17536,2265],{"class":512},[167,17538,17539],{"class":2268}," \u002F\u002F正确，访问权限是公共\n",[167,17541,17542],{"class":169,"line":832},[167,17543,741],{"emptyLinePlaceholder":740},[167,17545,17546,17548,17550,17552],{"class":169,"line":837},[167,17547,4347],{"class":173},[167,17549,898],{"class":512},[167,17551,4352],{"class":177},[167,17553,4755],{"class":512},[167,17555,17556],{"class":169,"line":842},[167,17557,741],{"emptyLinePlaceholder":740},[167,17559,17560,17562,17564],{"class":169,"line":860},[167,17561,6122],{"class":731},[167,17563,6125],{"class":184},[167,17565,3359],{"class":512},[167,17567,17568],{"class":169,"line":876},[167,17569,3630],{"class":512},[494,17571,17573],{"id":17572},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17575,17576],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17578,17579],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17581,17582],{},[2354,17583,17161],{},[26,17585,17587],{"className":11969,"code":17586,"language":11971,"meta":32,"style":32},"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",[34,17588,17589,17599,17603,17607,17612,17626,17635,17639,17649,17653,17660,17664,17668,17672,17677,17686,17693,17697,17702,17718,17741,17754,17761,17765,17774,17778,17782,17787,17803,17813,17817,17821,17825,17833,17837,17847,17851,17859,17863,17867,17875,17879,17883,17888,17901,17924,17928,17933,17946,17968,17972,17977,17991,17999,18003,18013,18017,18025],{"__ignoreMap":32},[167,17590,17591,17593,17596],{"class":169,"line":170},[167,17592,16721],{"class":731},[167,17594,17595],{"class":173}," Person",[167,17597,17598],{"class":512}," {\n",[167,17600,17601],{"class":169,"line":191},[167,17602,16743],{"class":731},[167,17604,17605],{"class":169,"line":205},[167,17606,741],{"emptyLinePlaceholder":740},[167,17608,17609],{"class":169,"line":219},[167,17610,17611],{"class":2268},"    \u002F\u002F姓名设置可读可写\n",[167,17613,17614,17616,17618,17620,17622,17624],{"class":169,"line":230},[167,17615,16936],{"class":731},[167,17617,16939],{"class":173},[167,17619,898],{"class":512},[167,17621,16944],{"class":173},[167,17623,520],{"class":7246},[167,17625,14470],{"class":512},[167,17627,17628,17630,17632],{"class":169,"line":241},[167,17629,17280],{"class":512},[167,17631,523],{"class":731},[167,17633,17634],{"class":512}," name;\n",[167,17636,17637],{"class":169,"line":261},[167,17638,4231],{"class":512},[167,17640,17641,17644,17647],{"class":169,"line":773},[167,17642,17643],{"class":173},"    string",[167,17645,17646],{"class":173}," getName",[167,17648,4020],{"class":512},[167,17650,17651],{"class":169,"line":779},[167,17652,4074],{"class":512},[167,17654,17655,17657],{"class":169,"line":785},[167,17656,16779],{"class":731},[167,17658,17659],{"class":512}," m_Name;\n",[167,17661,17662],{"class":169,"line":790},[167,17663,4231],{"class":512},[167,17665,17666],{"class":169,"line":796},[167,17667,741],{"emptyLinePlaceholder":740},[167,17669,17670],{"class":169,"line":802},[167,17671,741],{"emptyLinePlaceholder":740},[167,17673,17674],{"class":169,"line":808},[167,17675,17676],{"class":2268},"    \u002F\u002F获取年龄 \n",[167,17678,17679,17681,17684],{"class":169,"line":814},[167,17680,4029],{"class":731},[167,17682,17683],{"class":173}," getAge",[167,17685,12881],{"class":512},[167,17687,17688,17690],{"class":169,"line":820},[167,17689,16779],{"class":731},[167,17691,17692],{"class":512}," m_Age;\n",[167,17694,17695],{"class":169,"line":826},[167,17696,4231],{"class":512},[167,17698,17699],{"class":169,"line":832},[167,17700,17701],{"class":2268},"    \u002F\u002F设置年龄\n",[167,17703,17704,17706,17709,17711,17713,17716],{"class":169,"line":837},[167,17705,16936],{"class":731},[167,17707,17708],{"class":173}," setAge",[167,17710,898],{"class":512},[167,17712,2216],{"class":731},[167,17714,17715],{"class":7246}," age",[167,17717,14470],{"class":512},[167,17719,17720,17722,17725,17727,17729,17731,17734,17736,17739],{"class":169,"line":842},[167,17721,4540],{"class":731},[167,17723,17724],{"class":512}," (age ",[167,17726,513],{"class":731},[167,17728,6125],{"class":184},[167,17730,5289],{"class":731},[167,17732,17733],{"class":512}," age ",[167,17735,3159],{"class":731},[167,17737,17738],{"class":184}," 150",[167,17740,14470],{"class":512},[167,17742,17743,17745,17747,17750,17752],{"class":169,"line":860},[167,17744,11747],{"class":512},[167,17746,3242],{"class":731},[167,17748,17749],{"class":177}," \"你个老妖精!\"",[167,17751,3510],{"class":731},[167,17753,10868],{"class":512},[167,17755,17756,17759],{"class":169,"line":876},[167,17757,17758],{"class":731},"            return",[167,17760,3359],{"class":512},[167,17762,17763],{"class":169,"line":887},[167,17764,4572],{"class":512},[167,17766,17767,17770,17772],{"class":169,"line":892},[167,17768,17769],{"class":512},"        m_Age ",[167,17771,523],{"class":731},[167,17773,9827],{"class":512},[167,17775,17776],{"class":169,"line":907},[167,17777,4231],{"class":512},[167,17779,17780],{"class":169,"line":920},[167,17781,741],{"emptyLinePlaceholder":740},[167,17783,17784],{"class":169,"line":933},[167,17785,17786],{"class":2268},"    \u002F\u002F情人设置为只写\n",[167,17788,17789,17791,17794,17796,17798,17801],{"class":169,"line":946},[167,17790,16936],{"class":731},[167,17792,17793],{"class":173}," setLover",[167,17795,898],{"class":512},[167,17797,16944],{"class":173},[167,17799,17800],{"class":7246}," lover",[167,17802,14470],{"class":512},[167,17804,17805,17808,17810],{"class":169,"line":959},[167,17806,17807],{"class":512},"        m_Lover ",[167,17809,523],{"class":731},[167,17811,17812],{"class":512}," lover;\n",[167,17814,17815],{"class":169,"line":964},[167,17816,4231],{"class":512},[167,17818,17819],{"class":169,"line":987},[167,17820,741],{"emptyLinePlaceholder":740},[167,17822,17823],{"class":169,"line":993},[167,17824,17248],{"class":731},[167,17826,17827,17830],{"class":169,"line":998},[167,17828,17829],{"class":512},"    string m_Name;",[167,17831,17832],{"class":2268}," \u002F\u002F可读可写  姓名\n",[167,17834,17835],{"class":169,"line":1010},[167,17836,15238],{"class":512},[167,17838,17839,17841,17844],{"class":169,"line":1022},[167,17840,4029],{"class":731},[167,17842,17843],{"class":512}," m_Age;",[167,17845,17846],{"class":2268}," \u002F\u002F只读  年龄\n",[167,17848,17849],{"class":169,"line":1027},[167,17850,741],{"emptyLinePlaceholder":740},[167,17852,17853,17856],{"class":169,"line":1032},[167,17854,17855],{"class":512},"    string m_Lover;",[167,17857,17858],{"class":2268}," \u002F\u002F只写  情人\n",[167,17860,17861],{"class":169,"line":1049},[167,17862,6027],{"class":512},[167,17864,17865],{"class":169,"line":10005},[167,17866,741],{"emptyLinePlaceholder":740},[167,17868,17869,17871,17873],{"class":169,"line":10011},[167,17870,2216],{"class":731},[167,17872,848],{"class":173},[167,17874,12881],{"class":512},[167,17876,17877],{"class":169,"line":10038},[167,17878,741],{"emptyLinePlaceholder":740},[167,17880,17881],{"class":169,"line":10043},[167,17882,17339],{"class":512},[167,17884,17885],{"class":169,"line":10049},[167,17886,17887],{"class":2268},"    \u002F\u002F姓名设置\n",[167,17889,17890,17893,17895,17897,17899],{"class":169,"line":10061},[167,17891,17892],{"class":512},"    p.",[167,17894,17092],{"class":173},[167,17896,898],{"class":512},[167,17898,9946],{"class":177},[167,17900,4755],{"class":512},[167,17902,17903,17905,17907,17910,17912,17915,17918,17920,17922],{"class":169,"line":10073},[167,17904,8559],{"class":512},[167,17906,3242],{"class":731},[167,17908,17909],{"class":177}," \"姓名： \"",[167,17911,3510],{"class":731},[167,17913,17914],{"class":512}," p.",[167,17916,17917],{"class":173},"getName",[167,17919,15078],{"class":512},[167,17921,3242],{"class":731},[167,17923,10868],{"class":512},[167,17925,17926],{"class":169,"line":10085},[167,17927,741],{"emptyLinePlaceholder":740},[167,17929,17930],{"class":169,"line":11744},[167,17931,17932],{"class":2268},"    \u002F\u002F年龄设置\n",[167,17934,17935,17937,17940,17942,17944],{"class":169,"line":11769},[167,17936,17892],{"class":512},[167,17938,17939],{"class":173},"setAge",[167,17941,898],{"class":512},[167,17943,2856],{"class":184},[167,17945,4755],{"class":512},[167,17947,17948,17950,17952,17955,17957,17959,17962,17964,17966],{"class":169,"line":11792},[167,17949,8559],{"class":512},[167,17951,3242],{"class":731},[167,17953,17954],{"class":177}," \"年龄： \"",[167,17956,3510],{"class":731},[167,17958,17914],{"class":512},[167,17960,17961],{"class":173},"getAge",[167,17963,15078],{"class":512},[167,17965,3242],{"class":731},[167,17967,10868],{"class":512},[167,17969,17970],{"class":169,"line":11816},[167,17971,741],{"emptyLinePlaceholder":740},[167,17973,17974],{"class":169,"line":11821},[167,17975,17976],{"class":2268},"    \u002F\u002F情人设置\n",[167,17978,17979,17981,17984,17986,17989],{"class":169,"line":11826},[167,17980,17892],{"class":512},[167,17982,17983],{"class":173},"setLover",[167,17985,898],{"class":512},[167,17987,17988],{"class":177},"\"苍井\"",[167,17990,4755],{"class":512},[167,17992,17993,17996],{"class":169,"line":11831},[167,17994,17995],{"class":2268},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[167,17997,17998],{"class":2268},"  \u002F\u002F只写属性，不可以读取\n",[167,18000,18001],{"class":169,"line":11840},[167,18002,741],{"emptyLinePlaceholder":740},[167,18004,18005,18007,18009,18011],{"class":169,"line":11845},[167,18006,4347],{"class":173},[167,18008,898],{"class":512},[167,18010,4352],{"class":177},[167,18012,4755],{"class":512},[167,18014,18015],{"class":169,"line":11851},[167,18016,741],{"emptyLinePlaceholder":740},[167,18018,18019,18021,18023],{"class":169,"line":11872},[167,18020,6122],{"class":731},[167,18022,6125],{"class":184},[167,18024,3359],{"class":512},[167,18026,18027],{"class":169,"line":11878},[167,18028,3630],{"class":512},[494,18030,18032],{"id":18031},"_814封装案例","8.1.4封装案例",[40,18034,18035],{},[43,18036,18037,18040],{},[2354,18038,18039],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3205,18042,18043,18046],{},[43,18044,18045],{},"求出立方体的面积和体积",[43,18047,18048],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,18050,18052],{"className":2202,"code":18051,"language":2204,"meta":32,"style":32},"#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",[34,18053,18054,18060,18070,18077,18081,18085,18090,18120,18124,18134,18144,18154,18158,18167,18171,18207,18211,18220,18224,18240,18244,18249,18258,18262,18269,18273,18282,18286,18293,18297,18306,18310,18317,18321,18326,18343,18347,18393,18397,18406,18410,18414,18418,18427,18431,18435,18440,18444,18450,18456,18462,18466,18470,18475,18497,18501,18555,18559,18567,18571,18576,18581,18594,18601,18617,18628,18634,18657,18663,18686,18700,18720,18726,18737,18760,18782,18787,18793,18807,18820,18825,18839,18844,18850,18855,18869,18874,18879,18893,18905,18910,18923,18928,18933,18938,18951,18956],{"__ignoreMap":32},[167,18055,18056,18058],{"class":169,"line":170},[167,18057,3995],{"class":731},[167,18059,3998],{"class":177},[167,18061,18062,18064,18066,18068],{"class":169,"line":191},[167,18063,4003],{"class":731},[167,18065,4006],{"class":731},[167,18067,4009],{"class":173},[167,18069,3359],{"class":512},[167,18071,18072,18074],{"class":169,"line":205},[167,18073,16721],{"class":731},[167,18075,18076],{"class":173}," Cube\n",[167,18078,18079],{"class":169,"line":219},[167,18080,3611],{"class":512},[167,18082,18083],{"class":169,"line":230},[167,18084,16743],{"class":731},[167,18086,18087],{"class":169,"line":241},[167,18088,18089],{"class":2268},"    \u002F\u002F输入长宽高\n",[167,18091,18092,18094,18097,18099,18101,18104,18106,18108,18111,18113,18115,18118],{"class":169,"line":261},[167,18093,16936],{"class":731},[167,18095,18096],{"class":173}," setLwh",[167,18098,898],{"class":512},[167,18100,2216],{"class":731},[167,18102,18103],{"class":7246}," l",[167,18105,2578],{"class":512},[167,18107,2216],{"class":731},[167,18109,18110],{"class":7246}," w",[167,18112,2578],{"class":512},[167,18114,2216],{"class":731},[167,18116,18117],{"class":7246}," h",[167,18119,873],{"class":512},[167,18121,18122],{"class":169,"line":773},[167,18123,4074],{"class":512},[167,18125,18126,18129,18131],{"class":169,"line":779},[167,18127,18128],{"class":512},"        m_L",[167,18130,523],{"class":731},[167,18132,18133],{"class":512},"l;\n",[167,18135,18136,18139,18141],{"class":169,"line":785},[167,18137,18138],{"class":512},"        m_W",[167,18140,523],{"class":731},[167,18142,18143],{"class":512},"w;\n",[167,18145,18146,18149,18151],{"class":169,"line":790},[167,18147,18148],{"class":512},"        m_H",[167,18150,523],{"class":731},[167,18152,18153],{"class":512},"h;\n",[167,18155,18156],{"class":169,"line":796},[167,18157,4231],{"class":512},[167,18159,18160,18162,18165],{"class":169,"line":802},[167,18161,4029],{"class":731},[167,18163,18164],{"class":173}," mianji",[167,18166,4020],{"class":512},[167,18168,18169],{"class":169,"line":808},[167,18170,4074],{"class":512},[167,18172,18173,18175,18177,18179,18182,18184,18187,18189,18192,18194,18197,18199,18202,18204],{"class":169,"line":814},[167,18174,16779],{"class":731},[167,18176,16782],{"class":184},[167,18178,2655],{"class":731},[167,18180,18181],{"class":512},"(m_L",[167,18183,2655],{"class":731},[167,18185,18186],{"class":512},"m_W ",[167,18188,2681],{"class":731},[167,18190,18191],{"class":512}," m_L",[167,18193,2655],{"class":731},[167,18195,18196],{"class":512},"m_H ",[167,18198,2681],{"class":731},[167,18200,18201],{"class":512}," m_W",[167,18203,2655],{"class":731},[167,18205,18206],{"class":512},"m_H);\n",[167,18208,18209],{"class":169,"line":820},[167,18210,4231],{"class":512},[167,18212,18213,18215,18218],{"class":169,"line":826},[167,18214,4029],{"class":731},[167,18216,18217],{"class":173}," tiji",[167,18219,4020],{"class":512},[167,18221,18222],{"class":169,"line":832},[167,18223,4074],{"class":512},[167,18225,18226,18228,18230,18232,18235,18237],{"class":169,"line":837},[167,18227,16779],{"class":731},[167,18229,18191],{"class":512},[167,18231,2655],{"class":731},[167,18233,18234],{"class":512},"m_W",[167,18236,2655],{"class":731},[167,18238,18239],{"class":512},"m_H;\n",[167,18241,18242],{"class":169,"line":842},[167,18243,4231],{"class":512},[167,18245,18246],{"class":169,"line":860},[167,18247,18248],{"class":2268},"    \u002F\u002F获取长宽高\n",[167,18250,18251,18253,18256],{"class":169,"line":876},[167,18252,4029],{"class":731},[167,18254,18255],{"class":173}," getLength",[167,18257,4020],{"class":512},[167,18259,18260],{"class":169,"line":887},[167,18261,4074],{"class":512},[167,18263,18264,18266],{"class":169,"line":892},[167,18265,16779],{"class":731},[167,18267,18268],{"class":512}," m_L;\n",[167,18270,18271],{"class":169,"line":907},[167,18272,4231],{"class":512},[167,18274,18275,18277,18280],{"class":169,"line":920},[167,18276,4029],{"class":731},[167,18278,18279],{"class":173}," getWidth",[167,18281,4020],{"class":512},[167,18283,18284],{"class":169,"line":933},[167,18285,4074],{"class":512},[167,18287,18288,18290],{"class":169,"line":946},[167,18289,16779],{"class":731},[167,18291,18292],{"class":512}," m_W;\n",[167,18294,18295],{"class":169,"line":959},[167,18296,4231],{"class":512},[167,18298,18299,18301,18304],{"class":169,"line":964},[167,18300,4029],{"class":731},[167,18302,18303],{"class":173}," getHeight",[167,18305,4020],{"class":512},[167,18307,18308],{"class":169,"line":987},[167,18309,4074],{"class":512},[167,18311,18312,18314],{"class":169,"line":993},[167,18313,16779],{"class":731},[167,18315,18316],{"class":512}," m_H;\n",[167,18318,18319],{"class":169,"line":998},[167,18320,4231],{"class":512},[167,18322,18323],{"class":169,"line":1010},[167,18324,18325],{"class":2268},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[167,18327,18328,18331,18334,18336,18339,18341],{"class":169,"line":1022},[167,18329,18330],{"class":731},"    bool",[167,18332,18333],{"class":173}," isEqual",[167,18335,898],{"class":512},[167,18337,18338],{"class":173},"Cube",[167,18340,4885],{"class":7246},[167,18342,873],{"class":512},[167,18344,18345],{"class":169,"line":1027},[167,18346,4074],{"class":512},[167,18348,18349,18351,18354,18357,18359,18361,18364,18366,18369,18372,18374,18376,18379,18381,18383,18386,18388,18390],{"class":169,"line":1032},[167,18350,4540],{"class":731},[167,18352,18353],{"class":512}," (c.",[167,18355,18356],{"class":173},"getLength",[167,18358,15078],{"class":512},[167,18360,4985],{"class":731},[167,18362,18363],{"class":512}," m_L ",[167,18365,3769],{"class":731},[167,18367,18368],{"class":512}," c.",[167,18370,18371],{"class":173},"getWidth",[167,18373,15078],{"class":512},[167,18375,4985],{"class":731},[167,18377,18378],{"class":512}," m_W ",[167,18380,3769],{"class":731},[167,18382,18368],{"class":512},[167,18384,18385],{"class":173},"getHeight",[167,18387,15078],{"class":512},[167,18389,4985],{"class":731},[167,18391,18392],{"class":512}," m_H)\n",[167,18394,18395],{"class":169,"line":1049},[167,18396,4553],{"class":512},[167,18398,18399,18401,18404],{"class":169,"line":10005},[167,18400,17758],{"class":731},[167,18402,18403],{"class":184}," true",[167,18405,3359],{"class":512},[167,18407,18408],{"class":169,"line":10011},[167,18409,4572],{"class":512},[167,18411,18412],{"class":169,"line":10038},[167,18413,4613],{"class":731},[167,18415,18416],{"class":169,"line":10043},[167,18417,4553],{"class":512},[167,18419,18420,18422,18425],{"class":169,"line":10049},[167,18421,17758],{"class":731},[167,18423,18424],{"class":184}," false",[167,18426,3359],{"class":512},[167,18428,18429],{"class":169,"line":10061},[167,18430,4572],{"class":512},[167,18432,18433],{"class":169,"line":10073},[167,18434,4231],{"class":512},[167,18436,18437],{"class":169,"line":10085},[167,18438,18439],{"class":2268},"    \u002F\u002F私有属性\n",[167,18441,18442],{"class":169,"line":11744},[167,18443,17248],{"class":731},[167,18445,18446,18448],{"class":169,"line":11769},[167,18447,4029],{"class":731},[167,18449,18268],{"class":512},[167,18451,18452,18454],{"class":169,"line":11792},[167,18453,4029],{"class":731},[167,18455,18292],{"class":512},[167,18457,18458,18460],{"class":169,"line":11816},[167,18459,4029],{"class":731},[167,18461,18316],{"class":512},[167,18463,18464],{"class":169,"line":11821},[167,18465,741],{"emptyLinePlaceholder":740},[167,18467,18468],{"class":169,"line":11826},[167,18469,6027],{"class":512},[167,18471,18472],{"class":169,"line":11831},[167,18473,18474],{"class":2268},"\u002F\u002F全局函数判断两个立方体是否相等\n",[167,18476,18477,18479,18481,18483,18485,18488,18490,18492,18495],{"class":169,"line":11840},[167,18478,3420],{"class":731},[167,18480,18333],{"class":173},[167,18482,898],{"class":512},[167,18484,18338],{"class":173},[167,18486,18487],{"class":7246}," c1",[167,18489,2578],{"class":512},[167,18491,18338],{"class":173},[167,18493,18494],{"class":7246}," c2",[167,18496,873],{"class":512},[167,18498,18499],{"class":169,"line":11845},[167,18500,3611],{"class":512},[167,18502,18503,18505,18508,18510,18512,18514,18517,18519,18522,18524,18526,18528,18530,18532,18534,18536,18538,18540,18542,18544,18546,18548,18550,18552],{"class":169,"line":11851},[167,18504,6122],{"class":731},[167,18506,18507],{"class":512}," (c1.",[167,18509,18356],{"class":173},[167,18511,15078],{"class":512},[167,18513,4985],{"class":731},[167,18515,18516],{"class":512}," c2.",[167,18518,18356],{"class":173},[167,18520,18521],{"class":512},"()) ",[167,18523,3769],{"class":731},[167,18525,18507],{"class":512},[167,18527,18371],{"class":173},[167,18529,15078],{"class":512},[167,18531,4985],{"class":731},[167,18533,18516],{"class":512},[167,18535,18371],{"class":173},[167,18537,18521],{"class":512},[167,18539,3769],{"class":731},[167,18541,18507],{"class":512},[167,18543,18385],{"class":173},[167,18545,15078],{"class":512},[167,18547,4985],{"class":731},[167,18549,18516],{"class":512},[167,18551,18385],{"class":173},[167,18553,18554],{"class":512},"());\n",[167,18556,18557],{"class":169,"line":11872},[167,18558,3630],{"class":512},[167,18560,18561,18563,18565],{"class":169,"line":11878},[167,18562,2216],{"class":731},[167,18564,848],{"class":173},[167,18566,4020],{"class":512},[167,18568,18569],{"class":169,"line":11892},[167,18570,3611],{"class":512},[167,18572,18573],{"class":169,"line":11898},[167,18574,18575],{"class":512},"    Cube c1;\n",[167,18577,18578],{"class":169,"line":11925},[167,18579,18580],{"class":2268},"    \u002F\u002F输入立方体的长宽高\n",[167,18582,18583,18585,18587,18590,18592],{"class":169,"line":11934},[167,18584,3616],{"class":512},[167,18586,3242],{"class":731},[167,18588,18589],{"class":177},"\"请输入第一个立方体的长、宽、高：\"",[167,18591,3242],{"class":731},[167,18593,3264],{"class":512},[167,18595,18596,18598],{"class":169,"line":11940},[167,18597,4029],{"class":731},[167,18599,18600],{"class":512}," l,w,h,l1,w1,h1;\n",[167,18602,18603,18605,18607,18609,18611,18613,18615],{"class":169,"line":11948},[167,18604,4056],{"class":512},[167,18606,3495],{"class":731},[167,18608,2718],{"class":512},[167,18610,3495],{"class":731},[167,18612,2995],{"class":512},[167,18614,3495],{"class":731},[167,18616,18153],{"class":512},[167,18618,18619,18622,18625],{"class":169,"line":11953},[167,18620,18621],{"class":512},"    c1.",[167,18623,18624],{"class":173},"setLwh",[167,18626,18627],{"class":512},"(l,w,h);\n",[167,18629,18631],{"class":169,"line":18630},66,[167,18632,18633],{"class":2268},"    \u002F\u002F面积\n",[167,18635,18637,18639,18641,18644,18646,18648,18651,18653,18655],{"class":169,"line":18636},67,[167,18638,3616],{"class":512},[167,18640,3242],{"class":731},[167,18642,18643],{"class":177},"\"立方体的表面积为：\"",[167,18645,3242],{"class":731},[167,18647,16857],{"class":512},[167,18649,18650],{"class":173},"mianji",[167,18652,4470],{"class":512},[167,18654,3242],{"class":731},[167,18656,3264],{"class":512},[167,18658,18660],{"class":169,"line":18659},68,[167,18661,18662],{"class":2268},"    \u002F\u002F体积\n",[167,18664,18666,18668,18670,18673,18675,18677,18680,18682,18684],{"class":169,"line":18665},69,[167,18667,3616],{"class":512},[167,18669,3242],{"class":731},[167,18671,18672],{"class":177},"\"立方体的体积为：\"",[167,18674,3242],{"class":731},[167,18676,16857],{"class":512},[167,18678,18679],{"class":173},"tiji",[167,18681,4470],{"class":512},[167,18683,3242],{"class":731},[167,18685,3264],{"class":512},[167,18687,18689,18691,18693,18696,18698],{"class":169,"line":18688},70,[167,18690,3616],{"class":512},[167,18692,3242],{"class":731},[167,18694,18695],{"class":177},"\"请输入第二个立方体的长、宽、高：\"",[167,18697,3242],{"class":731},[167,18699,3264],{"class":512},[167,18701,18703,18705,18707,18710,18712,18715,18717],{"class":169,"line":18702},71,[167,18704,4056],{"class":512},[167,18706,3495],{"class":731},[167,18708,18709],{"class":512},"l1",[167,18711,3495],{"class":731},[167,18713,18714],{"class":512},"w1",[167,18716,3495],{"class":731},[167,18718,18719],{"class":512},"h1;\n",[167,18721,18723],{"class":169,"line":18722},72,[167,18724,18725],{"class":512},"    Cube c2;\n",[167,18727,18729,18732,18734],{"class":169,"line":18728},73,[167,18730,18731],{"class":512},"    c2.",[167,18733,18624],{"class":173},[167,18735,18736],{"class":512},"(l1,w1,h1);\n",[167,18738,18740,18742,18744,18747,18749,18752,18754,18756,18758],{"class":169,"line":18739},74,[167,18741,3616],{"class":512},[167,18743,3242],{"class":731},[167,18745,18746],{"class":177},"\"第二个立方体的表面积为：\"",[167,18748,3242],{"class":731},[167,18750,18751],{"class":512},"c2.",[167,18753,18650],{"class":173},[167,18755,4470],{"class":512},[167,18757,3242],{"class":731},[167,18759,3264],{"class":512},[167,18761,18763,18765,18767,18770,18772,18774,18776,18778,18780],{"class":169,"line":18762},75,[167,18764,3616],{"class":512},[167,18766,3242],{"class":731},[167,18768,18769],{"class":177},"\"第二个立方体的体积为：\"",[167,18771,3242],{"class":731},[167,18773,18751],{"class":512},[167,18775,18679],{"class":173},[167,18777,4470],{"class":512},[167,18779,3242],{"class":731},[167,18781,3264],{"class":512},[167,18783,18785],{"class":169,"line":18784},76,[167,18786,741],{"emptyLinePlaceholder":740},[167,18788,18790],{"class":169,"line":18789},77,[167,18791,18792],{"class":2268},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[167,18794,18796,18798,18800,18803,18805],{"class":169,"line":18795},78,[167,18797,3616],{"class":512},[167,18799,3242],{"class":731},[167,18801,18802],{"class":177},"\"内部函数判断结果：\"",[167,18804,3242],{"class":731},[167,18806,3264],{"class":512},[167,18808,18810,18812,18814,18817],{"class":169,"line":18809},79,[167,18811,5136],{"class":731},[167,18813,18507],{"class":512},[167,18815,18816],{"class":173},"isEqual",[167,18818,18819],{"class":512},"(c2))\n",[167,18821,18823],{"class":169,"line":18822},80,[167,18824,4074],{"class":512},[167,18826,18828,18830,18832,18835,18837],{"class":169,"line":18827},81,[167,18829,5485],{"class":512},[167,18831,3242],{"class":731},[167,18833,18834],{"class":177},"\"两个立方体相等\"",[167,18836,3242],{"class":731},[167,18838,3264],{"class":512},[167,18840,18842],{"class":169,"line":18841},82,[167,18843,4231],{"class":512},[167,18845,18847],{"class":169,"line":18846},83,[167,18848,18849],{"class":731},"    else\n",[167,18851,18853],{"class":169,"line":18852},84,[167,18854,4074],{"class":512},[167,18856,18858,18860,18862,18865,18867],{"class":169,"line":18857},85,[167,18859,5485],{"class":512},[167,18861,3242],{"class":731},[167,18863,18864],{"class":177},"\"两个立方体不相等\"",[167,18866,3242],{"class":731},[167,18868,3264],{"class":512},[167,18870,18872],{"class":169,"line":18871},86,[167,18873,4231],{"class":512},[167,18875,18877],{"class":169,"line":18876},87,[167,18878,741],{"emptyLinePlaceholder":740},[167,18880,18882,18884,18886,18889,18891],{"class":169,"line":18881},88,[167,18883,3616],{"class":512},[167,18885,3242],{"class":731},[167,18887,18888],{"class":177},"\"全局函数判断结果：\"",[167,18890,3242],{"class":731},[167,18892,3264],{"class":512},[167,18894,18896,18898,18900,18902],{"class":169,"line":18895},89,[167,18897,5136],{"class":731},[167,18899,3716],{"class":512},[167,18901,18816],{"class":173},[167,18903,18904],{"class":512},"(c1, c2))\n",[167,18906,18908],{"class":169,"line":18907},90,[167,18909,4074],{"class":512},[167,18911,18913,18915,18917,18919,18921],{"class":169,"line":18912},91,[167,18914,5485],{"class":512},[167,18916,3242],{"class":731},[167,18918,18834],{"class":177},[167,18920,3242],{"class":731},[167,18922,3264],{"class":512},[167,18924,18926],{"class":169,"line":18925},92,[167,18927,4231],{"class":512},[167,18929,18931],{"class":169,"line":18930},93,[167,18932,18849],{"class":731},[167,18934,18936],{"class":169,"line":18935},94,[167,18937,4074],{"class":512},[167,18939,18941,18943,18945,18947,18949],{"class":169,"line":18940},95,[167,18942,5485],{"class":512},[167,18944,3242],{"class":731},[167,18946,18864],{"class":177},[167,18948,3242],{"class":731},[167,18950,3264],{"class":512},[167,18952,18954],{"class":169,"line":18953},96,[167,18955,4231],{"class":512},[167,18957,18959],{"class":169,"line":18958},97,[167,18960,3630],{"class":512},[40,18962,18963],{"start":191},[43,18964,18965],{},[2354,18966,18967],{},"练习案例2：点和圆的关系",[3205,18969,18970],{},[43,18971,18972],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,18974,18976],{"className":2202,"code":18975,"language":2204,"meta":32,"style":32},"#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",[34,18977,18978,18984,18994,19001,19008,19012,19016,19021,19055,19060,19076,19090,19094,19098,19105,19112,19116,19122,19126,19130,19134,19156,19179,19184,19198,19213,19217,19221,19227,19232,19237,19241,19267,19271,19301,19329,19357,19374,19378,19391,19395,19399,19403,19416,19420,19424,19432,19436,19440,19444,19449,19453,19464,19471,19480,19490,19501,19508,19521,19532,19542,19553,19560,19574,19579,19589,19597],{"__ignoreMap":32},[167,18979,18980,18982],{"class":169,"line":170},[167,18981,3995],{"class":731},[167,18983,3998],{"class":177},[167,18985,18986,18988,18990,18992],{"class":169,"line":191},[167,18987,4003],{"class":731},[167,18989,4006],{"class":731},[167,18991,4009],{"class":173},[167,18993,3359],{"class":512},[167,18995,18996,18998],{"class":169,"line":205},[167,18997,3995],{"class":731},[167,18999,19000],{"class":177},"\u003Ccmath>\n",[167,19002,19003,19005],{"class":169,"line":219},[167,19004,16721],{"class":731},[167,19006,19007],{"class":173}," Point\n",[167,19009,19010],{"class":169,"line":230},[167,19011,3611],{"class":512},[167,19013,19014],{"class":169,"line":241},[167,19015,16743],{"class":731},[167,19017,19018],{"class":169,"line":261},[167,19019,19020],{"class":2268},"    \u002F\u002F赋值\n",[167,19022,19023,19025,19028,19030,19032,19035,19037,19039,19042,19045,19047,19050,19052],{"class":169,"line":773},[167,19024,16936],{"class":731},[167,19026,19027],{"class":173}," setPoint",[167,19029,898],{"class":512},[167,19031,16064],{"class":731},[167,19033,19034],{"class":7246}," x",[167,19036,14463],{"class":512},[167,19038,16064],{"class":731},[167,19040,19041],{"class":7246}," y",[167,19043,19044],{"class":512},") { m_x ",[167,19046,523],{"class":731},[167,19048,19049],{"class":512}," x; m_y ",[167,19051,523],{"class":731},[167,19053,19054],{"class":512}," y; }\n",[167,19056,19057],{"class":169,"line":779},[167,19058,19059],{"class":2268},"    \u002F\u002F获取坐标\n",[167,19061,19062,19064,19067,19070,19073],{"class":169,"line":785},[167,19063,16765],{"class":731},[167,19065,19066],{"class":173}," getX",[167,19068,19069],{"class":512},"() { ",[167,19071,19072],{"class":731},"return",[167,19074,19075],{"class":512}," m_x; }\n",[167,19077,19078,19080,19083,19085,19087],{"class":169,"line":790},[167,19079,16765],{"class":731},[167,19081,19082],{"class":173}," getY",[167,19084,19069],{"class":512},[167,19086,19072],{"class":731},[167,19088,19089],{"class":512}," m_y; }\n",[167,19091,19092],{"class":169,"line":796},[167,19093,741],{"emptyLinePlaceholder":740},[167,19095,19096],{"class":169,"line":802},[167,19097,17248],{"class":731},[167,19099,19100,19102],{"class":169,"line":808},[167,19101,16765],{"class":731},[167,19103,19104],{"class":512}," m_x;\n",[167,19106,19107,19109],{"class":169,"line":814},[167,19108,16765],{"class":731},[167,19110,19111],{"class":512}," m_y;\n",[167,19113,19114],{"class":169,"line":820},[167,19115,6027],{"class":512},[167,19117,19118,19120],{"class":169,"line":826},[167,19119,16721],{"class":731},[167,19121,16724],{"class":173},[167,19123,19124],{"class":169,"line":832},[167,19125,3611],{"class":512},[167,19127,19128],{"class":169,"line":837},[167,19129,16743],{"class":731},[167,19131,19132],{"class":169,"line":842},[167,19133,19020],{"class":2268},[167,19135,19136,19138,19141,19143,19145,19148,19151,19153],{"class":169,"line":860},[167,19137,16936],{"class":731},[167,19139,19140],{"class":173}," setRadius",[167,19142,898],{"class":512},[167,19144,16064],{"class":731},[167,19146,19147],{"class":7246}," r",[167,19149,19150],{"class":512},") { m_r ",[167,19152,523],{"class":731},[167,19154,19155],{"class":512}," r; }\n",[167,19157,19158,19160,19163,19165,19168,19171,19174,19176],{"class":169,"line":876},[167,19159,16936],{"class":731},[167,19161,19162],{"class":173}," setCenter",[167,19164,898],{"class":512},[167,19166,19167],{"class":173},"Point",[167,19169,19170],{"class":7246}," center",[167,19172,19173],{"class":512},") { m_center ",[167,19175,523],{"class":731},[167,19177,19178],{"class":512}," center; }\n",[167,19180,19181],{"class":169,"line":887},[167,19182,19183],{"class":2268},"    \u002F\u002F获取属性\n",[167,19185,19186,19188,19191,19193,19195],{"class":169,"line":892},[167,19187,16765],{"class":731},[167,19189,19190],{"class":173}," getRadius",[167,19192,19069],{"class":512},[167,19194,19072],{"class":731},[167,19196,19197],{"class":512}," m_r; }\n",[167,19199,19200,19203,19206,19208,19210],{"class":169,"line":907},[167,19201,19202],{"class":173},"    Point",[167,19204,19205],{"class":173}," getCenter",[167,19207,19069],{"class":512},[167,19209,19072],{"class":731},[167,19211,19212],{"class":512}," m_center; }\n",[167,19214,19215],{"class":169,"line":920},[167,19216,741],{"emptyLinePlaceholder":740},[167,19218,19219],{"class":169,"line":933},[167,19220,17248],{"class":731},[167,19222,19223,19225],{"class":169,"line":946},[167,19224,16765],{"class":731},[167,19226,16755],{"class":512},[167,19228,19229],{"class":169,"line":959},[167,19230,19231],{"class":2268},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[167,19233,19234],{"class":169,"line":964},[167,19235,19236],{"class":512},"    Point m_center;\n",[167,19238,19239],{"class":169,"line":987},[167,19240,6027],{"class":512},[167,19242,19243,19245,19248,19250,19253,19255,19257,19259,19261,19263,19265],{"class":169,"line":993},[167,19244,7394],{"class":731},[167,19246,19247],{"class":173}," isInCircle",[167,19249,898],{"class":512},[167,19251,19252],{"class":173},"Circle",[167,19254,12612],{"class":731},[167,19256,2489],{"class":7246},[167,19258,2578],{"class":512},[167,19260,19167],{"class":173},[167,19262,12612],{"class":731},[167,19264,19],{"class":7246},[167,19266,873],{"class":512},[167,19268,19269],{"class":169,"line":998},[167,19270,3611],{"class":512},[167,19272,19273,19275,19278,19280,19282,19285,19288,19291,19293,19295,19297,19299],{"class":169,"line":1010},[167,19274,16765],{"class":731},[167,19276,19277],{"class":512}," dx ",[167,19279,523],{"class":731},[167,19281,18368],{"class":512},[167,19283,19284],{"class":173},"getCenter",[167,19286,19287],{"class":512},"().",[167,19289,19290],{"class":173},"getX",[167,19292,15078],{"class":512},[167,19294,2732],{"class":731},[167,19296,17914],{"class":512},[167,19298,19290],{"class":173},[167,19300,7666],{"class":512},[167,19302,19303,19305,19308,19310,19312,19314,19316,19319,19321,19323,19325,19327],{"class":169,"line":1022},[167,19304,16765],{"class":731},[167,19306,19307],{"class":512}," dy ",[167,19309,523],{"class":731},[167,19311,18368],{"class":512},[167,19313,19284],{"class":173},[167,19315,19287],{"class":512},[167,19317,19318],{"class":173},"getY",[167,19320,15078],{"class":512},[167,19322,2732],{"class":731},[167,19324,17914],{"class":512},[167,19326,19318],{"class":173},[167,19328,7666],{"class":512},[167,19330,19331,19333,19336,19338,19341,19344,19346,19348,19350,19352,19354],{"class":169,"line":1027},[167,19332,16765],{"class":731},[167,19334,19335],{"class":512}," distance ",[167,19337,523],{"class":731},[167,19339,19340],{"class":173}," sqrt",[167,19342,19343],{"class":512},"(dx ",[167,19345,2655],{"class":731},[167,19347,19277],{"class":512},[167,19349,2681],{"class":731},[167,19351,19307],{"class":512},[167,19353,2655],{"class":731},[167,19355,19356],{"class":512}," dy);\n",[167,19358,19359,19361,19364,19366,19368,19371],{"class":169,"line":1032},[167,19360,5136],{"class":731},[167,19362,19363],{"class":512}," (distance ",[167,19365,513],{"class":731},[167,19367,18368],{"class":512},[167,19369,19370],{"class":173},"getRadius",[167,19372,19373],{"class":512},"())\n",[167,19375,19376],{"class":169,"line":1049},[167,19377,4074],{"class":512},[167,19379,19380,19382,19384,19387,19389],{"class":169,"line":10005},[167,19381,11697],{"class":512},[167,19383,3242],{"class":731},[167,19385,19386],{"class":177}," \"点在圆内\"",[167,19388,3510],{"class":731},[167,19390,10868],{"class":512},[167,19392,19393],{"class":169,"line":10011},[167,19394,4231],{"class":512},[167,19396,19397],{"class":169,"line":10038},[167,19398,18849],{"class":731},[167,19400,19401],{"class":169,"line":10043},[167,19402,4074],{"class":512},[167,19404,19405,19407,19409,19412,19414],{"class":169,"line":10049},[167,19406,11697],{"class":512},[167,19408,3242],{"class":731},[167,19410,19411],{"class":177}," \"点在圆外\"",[167,19413,3510],{"class":731},[167,19415,10868],{"class":512},[167,19417,19418],{"class":169,"line":10061},[167,19419,4231],{"class":512},[167,19421,19422],{"class":169,"line":10073},[167,19423,3630],{"class":512},[167,19425,19426,19428,19430],{"class":169,"line":10085},[167,19427,2216],{"class":731},[167,19429,848],{"class":173},[167,19431,4020],{"class":512},[167,19433,19434],{"class":169,"line":11744},[167,19435,3611],{"class":512},[167,19437,19438],{"class":169,"line":11769},[167,19439,17079],{"class":2268},[167,19441,19442],{"class":169,"line":11792},[167,19443,16827],{"class":512},[167,19445,19446],{"class":169,"line":11816},[167,19447,19448],{"class":512},"    Point p1;\n",[167,19450,19451],{"class":169,"line":11821},[167,19452,19020],{"class":2268},[167,19454,19455,19457,19459,19462],{"class":169,"line":11826},[167,19456,3616],{"class":512},[167,19458,3242],{"class":731},[167,19460,19461],{"class":177},"\"请输入圆的半径：\"",[167,19463,3359],{"class":512},[167,19465,19466,19468],{"class":169,"line":11831},[167,19467,16765],{"class":731},[167,19469,19470],{"class":512}," r;\n",[167,19472,19473,19475,19477],{"class":169,"line":11840},[167,19474,4056],{"class":512},[167,19476,3495],{"class":731},[167,19478,19479],{"class":512},"r;\n",[167,19481,19482,19484,19487],{"class":169,"line":11845},[167,19483,18621],{"class":512},[167,19485,19486],{"class":173},"setRadius",[167,19488,19489],{"class":512},"(r);\n",[167,19491,19492,19494,19496,19499],{"class":169,"line":11851},[167,19493,3616],{"class":512},[167,19495,3242],{"class":731},[167,19497,19498],{"class":177},"\"请输入圆心坐标：\"",[167,19500,3359],{"class":512},[167,19502,19503,19505],{"class":169,"line":11872},[167,19504,16765],{"class":731},[167,19506,19507],{"class":512}," x, y;\n",[167,19509,19510,19512,19514,19516,19518],{"class":169,"line":11878},[167,19511,4056],{"class":512},[167,19513,3495],{"class":731},[167,19515,3020],{"class":512},[167,19517,3495],{"class":731},[167,19519,19520],{"class":512},"y;\n",[167,19522,19523,19526,19529],{"class":169,"line":11892},[167,19524,19525],{"class":512},"    p1.",[167,19527,19528],{"class":173},"setPoint",[167,19530,19531],{"class":512},"(x, y);\n",[167,19533,19534,19536,19539],{"class":169,"line":11898},[167,19535,18621],{"class":512},[167,19537,19538],{"class":173},"setCenter",[167,19540,19541],{"class":512},"(p1);\n",[167,19543,19544,19546,19548,19551],{"class":169,"line":11925},[167,19545,3616],{"class":512},[167,19547,3242],{"class":731},[167,19549,19550],{"class":177},"\"请输入测试点坐标：\"",[167,19552,3359],{"class":512},[167,19554,19555,19557],{"class":169,"line":11934},[167,19556,16765],{"class":731},[167,19558,19559],{"class":512}," x1, y1;\n",[167,19561,19562,19564,19566,19569,19571],{"class":169,"line":11940},[167,19563,4056],{"class":512},[167,19565,3495],{"class":731},[167,19567,19568],{"class":512},"x1",[167,19570,3495],{"class":731},[167,19572,19573],{"class":512},"y1;\n",[167,19575,19576],{"class":169,"line":11948},[167,19577,19578],{"class":512},"    Point p2;\n",[167,19580,19581,19584,19586],{"class":169,"line":11953},[167,19582,19583],{"class":512},"    p2.",[167,19585,19528],{"class":173},[167,19587,19588],{"class":512},"(x1, y1);\n",[167,19590,19591,19594],{"class":169,"line":18630},[167,19592,19593],{"class":173},"    isInCircle",[167,19595,19596],{"class":512},"(c1, p2);\n",[167,19598,19599],{"class":169,"line":18636},[167,19600,3630],{"class":512},[19,19602,19603],{},"在类中可以让另一个类作为本来的成员",[19,19605,19606],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19608,19609],{},"创建point.h",[26,19611,19613],{"className":2202,"code":19612,"language":2204,"meta":32,"style":32},"#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",[34,19614,19615,19626,19632,19642,19648,19652,19657,19661,19665,19685,19689,19697,19705,19709,19713,19719,19725],{"__ignoreMap":32},[167,19616,19617,19620,19623],{"class":169,"line":170},[167,19618,19619],{"class":731},"#pragma",[167,19621,19622],{"class":173}," once",[167,19624,19625],{"class":2268}," \u002F\u002F防止头文件重复包含\n",[167,19627,19628,19630],{"class":169,"line":191},[167,19629,3995],{"class":731},[167,19631,3998],{"class":177},[167,19633,19634,19636,19638,19640],{"class":169,"line":205},[167,19635,4003],{"class":731},[167,19637,4006],{"class":731},[167,19639,4009],{"class":173},[167,19641,3359],{"class":512},[167,19643,19644,19646],{"class":169,"line":219},[167,19645,16721],{"class":731},[167,19647,19007],{"class":173},[167,19649,19650],{"class":169,"line":230},[167,19651,3611],{"class":512},[167,19653,19654],{"class":169,"line":241},[167,19655,19656],{"class":2268},"\u002F\u002F做好声明与变量定义就可以\n",[167,19658,19659],{"class":169,"line":261},[167,19660,16743],{"class":731},[167,19662,19663],{"class":169,"line":773},[167,19664,19020],{"class":2268},[167,19666,19667,19669,19671,19673,19675,19677,19679,19681,19683],{"class":169,"line":779},[167,19668,16936],{"class":731},[167,19670,19027],{"class":173},[167,19672,898],{"class":512},[167,19674,16064],{"class":731},[167,19676,19034],{"class":7246},[167,19678,14463],{"class":512},[167,19680,16064],{"class":731},[167,19682,19041],{"class":7246},[167,19684,4755],{"class":512},[167,19686,19687],{"class":169,"line":785},[167,19688,19059],{"class":2268},[167,19690,19691,19693,19695],{"class":169,"line":790},[167,19692,16765],{"class":731},[167,19694,19066],{"class":173},[167,19696,7666],{"class":512},[167,19698,19699,19701,19703],{"class":169,"line":796},[167,19700,16765],{"class":731},[167,19702,19082],{"class":173},[167,19704,7666],{"class":512},[167,19706,19707],{"class":169,"line":802},[167,19708,741],{"emptyLinePlaceholder":740},[167,19710,19711],{"class":169,"line":808},[167,19712,17248],{"class":731},[167,19714,19715,19717],{"class":169,"line":814},[167,19716,16765],{"class":731},[167,19718,19104],{"class":512},[167,19720,19721,19723],{"class":169,"line":820},[167,19722,16765],{"class":731},[167,19724,19111],{"class":512},[167,19726,19727],{"class":169,"line":826},[167,19728,6027],{"class":512},[19,19730,19731],{},"创建point.cpp",[26,19733,19735],{"className":2202,"code":19734,"language":2204,"meta":32,"style":32},"#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",[34,19736,19737,19744,19749,19783,19787,19803],{"__ignoreMap":32},[167,19738,19739,19741],{"class":169,"line":170},[167,19740,3995],{"class":731},[167,19742,19743],{"class":177},"\u003Cpoint.h>\n",[167,19745,19746],{"class":169,"line":191},[167,19747,19748],{"class":2268},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[167,19750,19751,19753,19756,19759,19761,19763,19765,19767,19769,19771,19773,19775,19777,19779,19781],{"class":169,"line":205},[167,19752,16936],{"class":731},[167,19754,19755],{"class":173}," Point",[167,19757,19758],{"class":512},"::",[167,19760,19528],{"class":173},[167,19762,898],{"class":512},[167,19764,16064],{"class":731},[167,19766,19034],{"class":7246},[167,19768,14463],{"class":512},[167,19770,16064],{"class":731},[167,19772,19041],{"class":7246},[167,19774,19044],{"class":512},[167,19776,523],{"class":731},[167,19778,19049],{"class":512},[167,19780,523],{"class":731},[167,19782,19054],{"class":512},[167,19784,19785],{"class":169,"line":219},[167,19786,19059],{"class":2268},[167,19788,19789,19791,19793,19795,19797,19799,19801],{"class":169,"line":230},[167,19790,16765],{"class":731},[167,19792,19755],{"class":173},[167,19794,19758],{"class":512},[167,19796,19290],{"class":173},[167,19798,19069],{"class":512},[167,19800,19072],{"class":731},[167,19802,19075],{"class":512},[167,19804,19805,19807,19809,19811,19813,19815,19817],{"class":169,"line":241},[167,19806,16765],{"class":731},[167,19808,19755],{"class":173},[167,19810,19758],{"class":512},[167,19812,19318],{"class":173},[167,19814,19069],{"class":512},[167,19816,19072],{"class":731},[167,19818,19089],{"class":512},[19,19820,19821],{},"创建circle.h",[26,19823,19825],{"className":2202,"code":19824,"language":2204,"meta":32,"style":32},"#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",[34,19826,19827,19834,19840,19850,19856,19862,19866,19870,19874,19888,19902,19906,19914,19922,19926,19930,19936,19940,19944],{"__ignoreMap":32},[167,19828,19829,19831],{"class":169,"line":170},[167,19830,19619],{"class":731},[167,19832,19833],{"class":173}," once\n",[167,19835,19836,19838],{"class":169,"line":191},[167,19837,3995],{"class":731},[167,19839,3998],{"class":177},[167,19841,19842,19844,19846,19848],{"class":169,"line":205},[167,19843,4003],{"class":731},[167,19845,4006],{"class":731},[167,19847,4009],{"class":173},[167,19849,3359],{"class":512},[167,19851,19852,19854],{"class":169,"line":219},[167,19853,3995],{"class":731},[167,19855,19743],{"class":177},[167,19857,19858,19860],{"class":169,"line":230},[167,19859,16721],{"class":731},[167,19861,16724],{"class":173},[167,19863,19864],{"class":169,"line":241},[167,19865,3611],{"class":512},[167,19867,19868],{"class":169,"line":261},[167,19869,16743],{"class":731},[167,19871,19872],{"class":169,"line":773},[167,19873,19020],{"class":2268},[167,19875,19876,19878,19880,19882,19884,19886],{"class":169,"line":779},[167,19877,16936],{"class":731},[167,19879,19140],{"class":173},[167,19881,898],{"class":512},[167,19883,16064],{"class":731},[167,19885,19147],{"class":7246},[167,19887,4755],{"class":512},[167,19889,19890,19892,19894,19896,19898,19900],{"class":169,"line":785},[167,19891,16936],{"class":731},[167,19893,19162],{"class":173},[167,19895,898],{"class":512},[167,19897,19167],{"class":173},[167,19899,19170],{"class":7246},[167,19901,4755],{"class":512},[167,19903,19904],{"class":169,"line":790},[167,19905,19183],{"class":2268},[167,19907,19908,19910,19912],{"class":169,"line":796},[167,19909,16765],{"class":731},[167,19911,19190],{"class":173},[167,19913,7666],{"class":512},[167,19915,19916,19918,19920],{"class":169,"line":802},[167,19917,19202],{"class":173},[167,19919,19205],{"class":173},[167,19921,7666],{"class":512},[167,19923,19924],{"class":169,"line":808},[167,19925,741],{"emptyLinePlaceholder":740},[167,19927,19928],{"class":169,"line":814},[167,19929,17248],{"class":731},[167,19931,19932,19934],{"class":169,"line":820},[167,19933,16765],{"class":731},[167,19935,16755],{"class":512},[167,19937,19938],{"class":169,"line":826},[167,19939,19231],{"class":2268},[167,19941,19942],{"class":169,"line":832},[167,19943,19236],{"class":512},[167,19945,19946],{"class":169,"line":837},[167,19947,6027],{"class":512},[19,19949,19950],{},"创建circle.cpp",[26,19952,19954],{"className":2202,"code":19953,"language":2204,"meta":32,"style":32},"#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",[34,19955,19956,19963,19986,20008,20013,20029],{"__ignoreMap":32},[167,19957,19958,19960],{"class":169,"line":170},[167,19959,3995],{"class":731},[167,19961,19962],{"class":177},"\u003Ccircle.h>\n",[167,19964,19965,19967,19970,19972,19974,19976,19978,19980,19982,19984],{"class":169,"line":191},[167,19966,7394],{"class":731},[167,19968,19969],{"class":173}," Circle",[167,19971,19758],{"class":512},[167,19973,19486],{"class":173},[167,19975,898],{"class":512},[167,19977,16064],{"class":731},[167,19979,19147],{"class":7246},[167,19981,19150],{"class":512},[167,19983,523],{"class":731},[167,19985,19155],{"class":512},[167,19987,19988,19990,19992,19994,19996,19998,20000,20002,20004,20006],{"class":169,"line":205},[167,19989,7394],{"class":731},[167,19991,19969],{"class":173},[167,19993,19758],{"class":512},[167,19995,19538],{"class":173},[167,19997,898],{"class":512},[167,19999,19167],{"class":173},[167,20001,19170],{"class":7246},[167,20003,19173],{"class":512},[167,20005,523],{"class":731},[167,20007,19178],{"class":512},[167,20009,20010],{"class":169,"line":219},[167,20011,20012],{"class":2268},"\u002F\u002F获取属性\n",[167,20014,20015,20017,20019,20021,20023,20025,20027],{"class":169,"line":230},[167,20016,16064],{"class":731},[167,20018,19969],{"class":173},[167,20020,19758],{"class":512},[167,20022,19370],{"class":173},[167,20024,19069],{"class":512},[167,20026,19072],{"class":731},[167,20028,19197],{"class":512},[167,20030,20031,20033,20035,20037,20039,20041,20043],{"class":169,"line":241},[167,20032,19167],{"class":173},[167,20034,19969],{"class":173},[167,20036,19758],{"class":512},[167,20038,19284],{"class":173},[167,20040,19069],{"class":512},[167,20042,19072],{"class":731},[167,20044,19212],{"class":512},[19,20046,20047],{},"使用封装的类",[26,20049,20051],{"className":2202,"code":20050,"language":2204,"meta":32,"style":32},"#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",[34,20052,20053,20059,20069,20075,20081,20105,20109,20135,20161,20185,20199,20203,20215,20219,20223,20227,20239,20243,20247,20255,20259,20263,20267,20271,20275,20285,20291,20299,20307,20317,20323,20335,20343,20351,20361,20367,20379,20383,20391,20397],{"__ignoreMap":32},[167,20054,20055,20057],{"class":169,"line":170},[167,20056,3995],{"class":731},[167,20058,3998],{"class":177},[167,20060,20061,20063,20065,20067],{"class":169,"line":191},[167,20062,4003],{"class":731},[167,20064,4006],{"class":731},[167,20066,4009],{"class":173},[167,20068,3359],{"class":512},[167,20070,20071,20073],{"class":169,"line":205},[167,20072,3995],{"class":731},[167,20074,19962],{"class":177},[167,20076,20077,20079],{"class":169,"line":219},[167,20078,3995],{"class":731},[167,20080,19743],{"class":177},[167,20082,20083,20085,20087,20089,20091,20093,20095,20097,20099,20101,20103],{"class":169,"line":230},[167,20084,7394],{"class":731},[167,20086,19247],{"class":173},[167,20088,898],{"class":512},[167,20090,19252],{"class":173},[167,20092,12612],{"class":731},[167,20094,2489],{"class":7246},[167,20096,2578],{"class":512},[167,20098,19167],{"class":173},[167,20100,12612],{"class":731},[167,20102,19],{"class":7246},[167,20104,873],{"class":512},[167,20106,20107],{"class":169,"line":241},[167,20108,3611],{"class":512},[167,20110,20111,20113,20115,20117,20119,20121,20123,20125,20127,20129,20131,20133],{"class":169,"line":261},[167,20112,16765],{"class":731},[167,20114,19277],{"class":512},[167,20116,523],{"class":731},[167,20118,18368],{"class":512},[167,20120,19284],{"class":173},[167,20122,19287],{"class":512},[167,20124,19290],{"class":173},[167,20126,15078],{"class":512},[167,20128,2732],{"class":731},[167,20130,17914],{"class":512},[167,20132,19290],{"class":173},[167,20134,7666],{"class":512},[167,20136,20137,20139,20141,20143,20145,20147,20149,20151,20153,20155,20157,20159],{"class":169,"line":773},[167,20138,16765],{"class":731},[167,20140,19307],{"class":512},[167,20142,523],{"class":731},[167,20144,18368],{"class":512},[167,20146,19284],{"class":173},[167,20148,19287],{"class":512},[167,20150,19318],{"class":173},[167,20152,15078],{"class":512},[167,20154,2732],{"class":731},[167,20156,17914],{"class":512},[167,20158,19318],{"class":173},[167,20160,7666],{"class":512},[167,20162,20163,20165,20167,20169,20171,20173,20175,20177,20179,20181,20183],{"class":169,"line":779},[167,20164,16765],{"class":731},[167,20166,19335],{"class":512},[167,20168,523],{"class":731},[167,20170,19340],{"class":173},[167,20172,19343],{"class":512},[167,20174,2655],{"class":731},[167,20176,19277],{"class":512},[167,20178,2681],{"class":731},[167,20180,19307],{"class":512},[167,20182,2655],{"class":731},[167,20184,19356],{"class":512},[167,20186,20187,20189,20191,20193,20195,20197],{"class":169,"line":785},[167,20188,5136],{"class":731},[167,20190,19363],{"class":512},[167,20192,513],{"class":731},[167,20194,18368],{"class":512},[167,20196,19370],{"class":173},[167,20198,19373],{"class":512},[167,20200,20201],{"class":169,"line":790},[167,20202,4074],{"class":512},[167,20204,20205,20207,20209,20211,20213],{"class":169,"line":796},[167,20206,11697],{"class":512},[167,20208,3242],{"class":731},[167,20210,19386],{"class":177},[167,20212,3510],{"class":731},[167,20214,10868],{"class":512},[167,20216,20217],{"class":169,"line":802},[167,20218,4231],{"class":512},[167,20220,20221],{"class":169,"line":808},[167,20222,18849],{"class":731},[167,20224,20225],{"class":169,"line":814},[167,20226,4074],{"class":512},[167,20228,20229,20231,20233,20235,20237],{"class":169,"line":820},[167,20230,11697],{"class":512},[167,20232,3242],{"class":731},[167,20234,19411],{"class":177},[167,20236,3510],{"class":731},[167,20238,10868],{"class":512},[167,20240,20241],{"class":169,"line":826},[167,20242,4231],{"class":512},[167,20244,20245],{"class":169,"line":832},[167,20246,3630],{"class":512},[167,20248,20249,20251,20253],{"class":169,"line":837},[167,20250,2216],{"class":731},[167,20252,848],{"class":173},[167,20254,4020],{"class":512},[167,20256,20257],{"class":169,"line":842},[167,20258,3611],{"class":512},[167,20260,20261],{"class":169,"line":860},[167,20262,17079],{"class":2268},[167,20264,20265],{"class":169,"line":876},[167,20266,16827],{"class":512},[167,20268,20269],{"class":169,"line":887},[167,20270,19448],{"class":512},[167,20272,20273],{"class":169,"line":892},[167,20274,19020],{"class":2268},[167,20276,20277,20279,20281,20283],{"class":169,"line":907},[167,20278,3616],{"class":512},[167,20280,3242],{"class":731},[167,20282,19461],{"class":177},[167,20284,3359],{"class":512},[167,20286,20287,20289],{"class":169,"line":920},[167,20288,16765],{"class":731},[167,20290,19470],{"class":512},[167,20292,20293,20295,20297],{"class":169,"line":933},[167,20294,4056],{"class":512},[167,20296,3495],{"class":731},[167,20298,19479],{"class":512},[167,20300,20301,20303,20305],{"class":169,"line":946},[167,20302,18621],{"class":512},[167,20304,19486],{"class":173},[167,20306,19489],{"class":512},[167,20308,20309,20311,20313,20315],{"class":169,"line":959},[167,20310,3616],{"class":512},[167,20312,3242],{"class":731},[167,20314,19498],{"class":177},[167,20316,3359],{"class":512},[167,20318,20319,20321],{"class":169,"line":964},[167,20320,16765],{"class":731},[167,20322,19507],{"class":512},[167,20324,20325,20327,20329,20331,20333],{"class":169,"line":987},[167,20326,4056],{"class":512},[167,20328,3495],{"class":731},[167,20330,3020],{"class":512},[167,20332,3495],{"class":731},[167,20334,19520],{"class":512},[167,20336,20337,20339,20341],{"class":169,"line":993},[167,20338,19525],{"class":512},[167,20340,19528],{"class":173},[167,20342,19531],{"class":512},[167,20344,20345,20347,20349],{"class":169,"line":998},[167,20346,18621],{"class":512},[167,20348,19538],{"class":173},[167,20350,19541],{"class":512},[167,20352,20353,20355,20357,20359],{"class":169,"line":1010},[167,20354,3616],{"class":512},[167,20356,3242],{"class":731},[167,20358,19550],{"class":177},[167,20360,3359],{"class":512},[167,20362,20363,20365],{"class":169,"line":1022},[167,20364,16765],{"class":731},[167,20366,19559],{"class":512},[167,20368,20369,20371,20373,20375,20377],{"class":169,"line":1027},[167,20370,4056],{"class":512},[167,20372,3495],{"class":731},[167,20374,19568],{"class":512},[167,20376,3495],{"class":731},[167,20378,19573],{"class":512},[167,20380,20381],{"class":169,"line":1032},[167,20382,19578],{"class":512},[167,20384,20385,20387,20389],{"class":169,"line":1049},[167,20386,19583],{"class":512},[167,20388,19528],{"class":173},[167,20390,19588],{"class":512},[167,20392,20393,20395],{"class":169,"line":10005},[167,20394,19593],{"class":173},[167,20396,19596],{"class":512},[167,20398,20399],{"class":169,"line":10011},[167,20400,3630],{"class":512},[14,20402,20404],{"id":20403},"_82对象的初始化清理","8.2对象的初始化清理",[3205,20406,20407,20410],{},[43,20408,20409],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[43,20411,20412],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[494,20414,20416],{"id":20415},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20418,20419,20420,20423],{},"对象的",[2354,20421,20422],{},"初始化和清理","也是两个非常重要的安全问题",[19,20425,20426],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20428,20429],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20431,20432,20433,20436,20437,20440],{},"c++利用了",[2354,20434,20435],{},"构造函数","和",[2354,20438,20439],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20442,20443,20444],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2354,20445,20446],{},"我们不提供构造和析构，编译器会提供",[19,20448,20449],{},[2354,20450,20451],{},"编译器提供的构造函数和析构函数是空实现。",[3205,20453,20454,20457],{},[43,20455,20456],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[43,20458,20459,20460,20463],{},"析构函数：主要作用在于对象",[2354,20461,20462],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20465,20466,20469],{},[2354,20467,20468],{},"构造函数语法：",[34,20470,20471],{},"类名(){}",[40,20473,20474,20477,20480,20483,20486],{},[43,20475,20476],{},"构造函数，没有返回值也不写void",[43,20478,20479],{},"函数名称与类名相同",[43,20481,20482],{},"构造函数可以有参数，因此可以发生重载",[43,20484,20485],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[43,20487,20488,20489,2629],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[34,20490,20491],{},"Person(){}",[19,20493,20494,15822,20497],{},[2354,20495,20496],{},"析构函数语法：",[34,20498,20499],{},"~类名(){}",[40,20501,20502,20505,20508,20514],{},[43,20503,20504],{},"析构函数，没有返回值也不写void",[43,20506,20507],{},"函数名称与类名相同,在名称前加上符号  ~",[43,20509,20510,20511],{},"析构函数不可以有参数，因此",[2354,20512,20513],{},"不可以发生重载",[43,20515,20516],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,20518,20520],{"className":2202,"code":20519,"language":2204,"meta":32,"style":32},"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",[34,20521,20522,20528,20532,20536,20541,20548,20552,20565,20569,20574,20581,20585,20598,20602,20606,20610,20614,20622,20626,20634,20638,20642,20650,20654,20659,20663,20670,20674,20687,20691,20699],{"__ignoreMap":32},[167,20523,20524,20526],{"class":169,"line":170},[167,20525,16721],{"class":731},[167,20527,17197],{"class":173},[167,20529,20530],{"class":169,"line":191},[167,20531,3611],{"class":512},[167,20533,20534],{"class":169,"line":205},[167,20535,16743],{"class":731},[167,20537,20538],{"class":169,"line":219},[167,20539,20540],{"class":2268},"    \u002F\u002F构造函数\n",[167,20542,20543,20546],{"class":169,"line":230},[167,20544,20545],{"class":173},"    Person",[167,20547,4020],{"class":512},[167,20549,20550],{"class":169,"line":241},[167,20551,4074],{"class":512},[167,20553,20554,20556,20558,20561,20563],{"class":169,"line":261},[167,20555,11697],{"class":512},[167,20557,3242],{"class":731},[167,20559,20560],{"class":177}," \"Person的构造函数调用\"",[167,20562,3510],{"class":731},[167,20564,10868],{"class":512},[167,20566,20567],{"class":169,"line":773},[167,20568,4231],{"class":512},[167,20570,20571],{"class":169,"line":779},[167,20572,20573],{"class":2268},"    \u002F\u002F析构函数\n",[167,20575,20576,20579],{"class":169,"line":785},[167,20577,20578],{"class":173},"    ~Person",[167,20580,4020],{"class":512},[167,20582,20583],{"class":169,"line":790},[167,20584,4074],{"class":512},[167,20586,20587,20589,20591,20594,20596],{"class":169,"line":796},[167,20588,11697],{"class":512},[167,20590,3242],{"class":731},[167,20592,20593],{"class":177}," \"Person的析构函数调用\"",[167,20595,3510],{"class":731},[167,20597,10868],{"class":512},[167,20599,20600],{"class":169,"line":802},[167,20601,4231],{"class":512},[167,20603,20604],{"class":169,"line":808},[167,20605,741],{"emptyLinePlaceholder":740},[167,20607,20608],{"class":169,"line":814},[167,20609,6027],{"class":512},[167,20611,20612],{"class":169,"line":820},[167,20613,741],{"emptyLinePlaceholder":740},[167,20615,20616,20618,20620],{"class":169,"line":826},[167,20617,7394],{"class":731},[167,20619,7618],{"class":173},[167,20621,4020],{"class":512},[167,20623,20624],{"class":169,"line":832},[167,20625,3611],{"class":512},[167,20627,20628,20631],{"class":169,"line":837},[167,20629,20630],{"class":512},"    Person p;",[167,20632,20633],{"class":2268},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[167,20635,20636],{"class":169,"line":842},[167,20637,3630],{"class":512},[167,20639,20640],{"class":169,"line":860},[167,20641,741],{"emptyLinePlaceholder":740},[167,20643,20644,20646,20648],{"class":169,"line":876},[167,20645,2216],{"class":731},[167,20647,848],{"class":173},[167,20649,12881],{"class":512},[167,20651,20652],{"class":169,"line":887},[167,20653,15238],{"class":512},[167,20655,20656],{"class":169,"line":892},[167,20657,20658],{"class":2268},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[167,20660,20661],{"class":169,"line":907},[167,20662,741],{"emptyLinePlaceholder":740},[167,20664,20665,20667],{"class":169,"line":920},[167,20666,20630],{"class":512},[167,20668,20669],{"class":2268},"\u002F\u002F只有构造函数\n",[167,20671,20672],{"class":169,"line":933},[167,20673,741],{"emptyLinePlaceholder":740},[167,20675,20676,20678,20680,20682,20684],{"class":169,"line":946},[167,20677,4347],{"class":173},[167,20679,898],{"class":512},[167,20681,4352],{"class":177},[167,20683,7996],{"class":512},[167,20685,20686],{"class":2268},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[167,20688,20689],{"class":169,"line":959},[167,20690,741],{"emptyLinePlaceholder":740},[167,20692,20693,20695,20697],{"class":169,"line":964},[167,20694,6122],{"class":731},[167,20696,6125],{"class":184},[167,20698,3359],{"class":512},[167,20700,20701],{"class":169,"line":987},[167,20702,3630],{"class":512},[19,20704,20705],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[494,20707,20709],{"id":20708},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20711,20712],{},"两种分类方式：",[19,20714,20715],{},"​\t按参数分为： 有参构造和无参构造",[19,20717,20718],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20720,20721],{},"三种调用方式：",[19,20723,20724],{},"​\t括号法",[19,20726,20727],{},"​\t显示法",[19,20729,20730],{},"​\t隐式转换法",[26,20732,20734],{"className":2202,"code":20733,"language":2204,"meta":32,"style":32},"#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",[34,20735,20736,20742,20752,20757,20762,20767,20772,20776,20784,20788,20792,20796,20802,20806,20819,20823,20835,20839,20848,20861,20865,20869,20875,20879,20892,20896,20901,20917,20921,20926,20935,20948,20952,20958,20962,20967,20975,20979,20984,20988,20996,21000,21005,21010,21015,21020,21025,21029,21034,21039,21044,21049,21053,21058,21063,21079,21091,21096,21100,21105,21110,21115,21119,21124,21138,21151,21155,21163,21167,21173,21179,21187],{"__ignoreMap":32},[167,20737,20738,20740],{"class":169,"line":170},[167,20739,3995],{"class":731},[167,20741,3998],{"class":177},[167,20743,20744,20746,20748,20750],{"class":169,"line":191},[167,20745,4003],{"class":731},[167,20747,4006],{"class":731},[167,20749,4009],{"class":173},[167,20751,3359],{"class":512},[167,20753,20754],{"class":169,"line":205},[167,20755,20756],{"class":2268},"\u002F\u002F1.构造函数的分类及调用\n",[167,20758,20759],{"class":169,"line":219},[167,20760,20761],{"class":2268},"\u002F\u002F分类\n",[167,20763,20764],{"class":169,"line":230},[167,20765,20766],{"class":2268},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[167,20768,20769],{"class":169,"line":241},[167,20770,20771],{"class":2268},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[167,20773,20774],{"class":169,"line":261},[167,20775,741],{"emptyLinePlaceholder":740},[167,20777,20778,20780,20782],{"class":169,"line":773},[167,20779,16721],{"class":731},[167,20781,17595],{"class":173},[167,20783,4710],{"class":512},[167,20785,20786],{"class":169,"line":779},[167,20787,3611],{"class":512},[167,20789,20790],{"class":169,"line":785},[167,20791,16743],{"class":731},[167,20793,20794],{"class":169,"line":790},[167,20795,20540],{"class":2268},[167,20797,20798,20800],{"class":169,"line":796},[167,20799,20545],{"class":173},[167,20801,4020],{"class":512},[167,20803,20804],{"class":169,"line":802},[167,20805,4074],{"class":512},[167,20807,20808,20810,20812,20815,20817],{"class":169,"line":808},[167,20809,5485],{"class":512},[167,20811,3242],{"class":731},[167,20813,20814],{"class":177},"\"Person构造函数无参构造\"",[167,20816,3242],{"class":731},[167,20818,3264],{"class":512},[167,20820,20821],{"class":169,"line":814},[167,20822,4231],{"class":512},[167,20824,20825,20827,20829,20831,20833],{"class":169,"line":820},[167,20826,20545],{"class":173},[167,20828,898],{"class":512},[167,20830,2216],{"class":731},[167,20832,3464],{"class":7246},[167,20834,873],{"class":512},[167,20836,20837],{"class":169,"line":826},[167,20838,4074],{"class":512},[167,20840,20841,20844,20846],{"class":169,"line":832},[167,20842,20843],{"class":512},"        age",[167,20845,523],{"class":731},[167,20847,8227],{"class":512},[167,20849,20850,20852,20854,20857,20859],{"class":169,"line":837},[167,20851,5485],{"class":512},[167,20853,3242],{"class":731},[167,20855,20856],{"class":177},"\"Person构造函数有参构造\"",[167,20858,3242],{"class":731},[167,20860,3264],{"class":512},[167,20862,20863],{"class":169,"line":842},[167,20864,4231],{"class":512},[167,20866,20867],{"class":169,"line":860},[167,20868,20573],{"class":2268},[167,20870,20871,20873],{"class":169,"line":876},[167,20872,20578],{"class":173},[167,20874,4020],{"class":512},[167,20876,20877],{"class":169,"line":887},[167,20878,4074],{"class":512},[167,20880,20881,20883,20885,20888,20890],{"class":169,"line":892},[167,20882,5485],{"class":512},[167,20884,3242],{"class":731},[167,20886,20887],{"class":177},"\"Person析构函数被调用\"",[167,20889,3242],{"class":731},[167,20891,3264],{"class":512},[167,20893,20894],{"class":169,"line":907},[167,20895,4231],{"class":512},[167,20897,20898],{"class":169,"line":920},[167,20899,20900],{"class":2268},"    \u002F\u002F拷贝构造函数\n",[167,20902,20903,20905,20907,20909,20911,20913,20915],{"class":169,"line":933},[167,20904,20545],{"class":173},[167,20906,898],{"class":512},[167,20908,8822],{"class":731},[167,20910,17595],{"class":173},[167,20912,12612],{"class":731},[167,20914,19],{"class":7246},[167,20916,873],{"class":512},[167,20918,20919],{"class":169,"line":946},[167,20920,4074],{"class":512},[167,20922,20923],{"class":169,"line":959},[167,20924,20925],{"class":2268},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[167,20927,20928,20930,20932],{"class":169,"line":964},[167,20929,20843],{"class":512},[167,20931,523],{"class":731},[167,20933,20934],{"class":512},"p.age;\n",[167,20936,20937,20939,20941,20944,20946],{"class":169,"line":987},[167,20938,5485],{"class":512},[167,20940,3242],{"class":731},[167,20942,20943],{"class":177},"\"Person拷贝构造函数被调用\"",[167,20945,3242],{"class":731},[167,20947,3264],{"class":512},[167,20949,20950],{"class":169,"line":993},[167,20951,4231],{"class":512},[167,20953,20954,20956],{"class":169,"line":998},[167,20955,4029],{"class":731},[167,20957,9827],{"class":512},[167,20959,20960],{"class":169,"line":1010},[167,20961,6027],{"class":512},[167,20963,20964],{"class":169,"line":1022},[167,20965,20966],{"class":2268},"\u002F\u002F调用\n",[167,20968,20969,20971,20973],{"class":169,"line":1027},[167,20970,7394],{"class":731},[167,20972,7618],{"class":173},[167,20974,4020],{"class":512},[167,20976,20977],{"class":169,"line":1032},[167,20978,3611],{"class":512},[167,20980,20981],{"class":169,"line":1049},[167,20982,20983],{"class":2268},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[167,20985,20986],{"class":169,"line":10005},[167,20987,3630],{"class":512},[167,20989,20990,20992,20994],{"class":169,"line":10011},[167,20991,7394],{"class":731},[167,20993,7687],{"class":173},[167,20995,4020],{"class":512},[167,20997,20998],{"class":169,"line":10038},[167,20999,3611],{"class":512},[167,21001,21002],{"class":169,"line":10043},[167,21003,21004],{"class":2268},"    \u002F\u002F1.括号法\n",[167,21006,21007],{"class":169,"line":10049},[167,21008,21009],{"class":2268},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[167,21011,21012],{"class":169,"line":10061},[167,21013,21014],{"class":2268},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[167,21016,21017],{"class":169,"line":10073},[167,21018,21019],{"class":2268},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[167,21021,21022],{"class":169,"line":10085},[167,21023,21024],{"class":2268},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[167,21026,21027],{"class":169,"line":11744},[167,21028,741],{"emptyLinePlaceholder":740},[167,21030,21031],{"class":169,"line":11769},[167,21032,21033],{"class":2268},"    \u002F\u002F注意事项\n",[167,21035,21036],{"class":169,"line":11792},[167,21037,21038],{"class":2268},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[167,21040,21041],{"class":169,"line":11816},[167,21042,21043],{"class":2268},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[167,21045,21046],{"class":169,"line":11821},[167,21047,21048],{"class":2268},"    \u002F\u002F Person p4();\n",[167,21050,21051],{"class":169,"line":11826},[167,21052,741],{"emptyLinePlaceholder":740},[167,21054,21055],{"class":169,"line":11831},[167,21056,21057],{"class":2268},"    \u002F\u002F2.显示法\n",[167,21059,21060],{"class":169,"line":11840},[167,21061,21062],{"class":512},"    Person p1;\n",[167,21064,21065,21068,21070,21073,21075,21077],{"class":169,"line":11845},[167,21066,21067],{"class":512},"    Person p2",[167,21069,523],{"class":731},[167,21071,21072],{"class":173},"Person",[167,21074,898],{"class":512},[167,21076,2646],{"class":184},[167,21078,4755],{"class":512},[167,21080,21081,21084,21086,21088],{"class":169,"line":11851},[167,21082,21083],{"class":512},"    Person p3",[167,21085,523],{"class":731},[167,21087,21072],{"class":173},[167,21089,21090],{"class":512},"(p2);\n",[167,21092,21093],{"class":169,"line":11872},[167,21094,21095],{"class":2268},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[167,21097,21098],{"class":169,"line":11878},[167,21099,741],{"emptyLinePlaceholder":740},[167,21101,21102],{"class":169,"line":11892},[167,21103,21104],{"class":2268},"    \u002F\u002F 注意事项2\n",[167,21106,21107],{"class":169,"line":11898},[167,21108,21109],{"class":2268},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[167,21111,21112],{"class":169,"line":11925},[167,21113,21114],{"class":2268},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[167,21116,21117],{"class":169,"line":11934},[167,21118,741],{"emptyLinePlaceholder":740},[167,21120,21121],{"class":169,"line":11940},[167,21122,21123],{"class":2268},"    \u002F\u002F3.隐士转换法\n",[167,21125,21126,21129,21131,21133,21135],{"class":169,"line":11948},[167,21127,21128],{"class":512},"    Person p4",[167,21130,523],{"class":731},[167,21132,2646],{"class":184},[167,21134,2265],{"class":512},[167,21136,21137],{"class":2268},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[167,21139,21140,21143,21145,21148],{"class":169,"line":11953},[167,21141,21142],{"class":512},"    Person p5",[167,21144,523],{"class":731},[167,21146,21147],{"class":512},"p4;",[167,21149,21150],{"class":2268}," \u002F\u002F 这里会调用拷贝构造函数\n",[167,21152,21153],{"class":169,"line":18630},[167,21154,3630],{"class":512},[167,21156,21157,21159,21161],{"class":169,"line":18636},[167,21158,2216],{"class":731},[167,21160,848],{"class":173},[167,21162,4020],{"class":512},[167,21164,21165],{"class":169,"line":18659},[167,21166,3611],{"class":512},[167,21168,21169,21171],{"class":169,"line":18665},[167,21170,7663],{"class":173},[167,21172,7666],{"class":512},[167,21174,21175,21177],{"class":169,"line":18688},[167,21176,7732],{"class":173},[167,21178,7666],{"class":512},[167,21180,21181,21183,21185],{"class":169,"line":18702},[167,21182,6122],{"class":731},[167,21184,6125],{"class":184},[167,21186,3359],{"class":512},[167,21188,21189],{"class":169,"line":18722},[167,21190,3630],{"class":512},[19,21192,21193,21196],{},[2354,21194,21195],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[494,21198,21200],{"id":21199},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21202,21203],{},"C++中拷贝构造函数调用时机通常有三种情况",[3205,21205,21206,21209,21212],{},[43,21207,21208],{},"使用一个已经创建完毕的对象来初始化一个新对象",[43,21210,21211],{},"值传递的方式给函数参数传值",[43,21213,21214],{},"以值方式返回局部对象",[26,21216,21218],{"className":2202,"code":21217,"language":2204,"meta":32,"style":32},"#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",[34,21219,21220,21226,21236,21240,21245,21249,21254,21259,21264,21270,21274,21278,21284,21288,21301,21305,21310,21322,21326,21334,21347,21351,21355,21371,21375,21384,21397,21401,21407,21411,21423,21427,21433,21437,21441,21449,21453,21466,21474,21492,21496,21501,21506,21521,21525,21538,21542,21550,21554,21558,21566,21570,21575,21584,21588,21592,21617,21627,21631,21639,21643,21654,21679,21683,21687,21691,21699,21703,21708,21713,21720,21725,21730,21735,21740,21744,21749,21753,21758,21762,21767,21772,21776,21780,21785,21790,21798],{"__ignoreMap":32},[167,21221,21222,21224],{"class":169,"line":170},[167,21223,3995],{"class":731},[167,21225,3998],{"class":177},[167,21227,21228,21230,21232,21234],{"class":169,"line":191},[167,21229,4003],{"class":731},[167,21231,4006],{"class":731},[167,21233,4009],{"class":173},[167,21235,3359],{"class":512},[167,21237,21238],{"class":169,"line":205},[167,21239,741],{"emptyLinePlaceholder":740},[167,21241,21242],{"class":169,"line":219},[167,21243,21244],{"class":2268},"\u002F\u002F拷贝构造函数调用时机\n",[167,21246,21247],{"class":169,"line":230},[167,21248,741],{"emptyLinePlaceholder":740},[167,21250,21251],{"class":169,"line":241},[167,21252,21253],{"class":2268},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[167,21255,21256],{"class":169,"line":261},[167,21257,21258],{"class":2268},"\u002F\u002F2.值传递的方式给函数参数传值\n",[167,21260,21261],{"class":169,"line":773},[167,21262,21263],{"class":2268},"\u002F\u002F3.以值方式返回局部对象\n",[167,21265,21266,21268],{"class":169,"line":779},[167,21267,16721],{"class":731},[167,21269,17197],{"class":173},[167,21271,21272],{"class":169,"line":785},[167,21273,3611],{"class":512},[167,21275,21276],{"class":169,"line":790},[167,21277,16743],{"class":731},[167,21279,21280,21282],{"class":169,"line":796},[167,21281,20545],{"class":173},[167,21283,4020],{"class":512},[167,21285,21286],{"class":169,"line":802},[167,21287,4074],{"class":512},[167,21289,21290,21292,21294,21297,21299],{"class":169,"line":808},[167,21291,11697],{"class":512},[167,21293,3242],{"class":731},[167,21295,21296],{"class":177}," \"Person的默认构造函数调用\"",[167,21298,3510],{"class":731},[167,21300,10868],{"class":512},[167,21302,21303],{"class":169,"line":814},[167,21304,4231],{"class":512},[167,21306,21307],{"class":169,"line":820},[167,21308,21309],{"class":2268},"    \u002F\u002F有参构造\n",[167,21311,21312,21314,21316,21318,21320],{"class":169,"line":826},[167,21313,20545],{"class":173},[167,21315,898],{"class":512},[167,21317,2216],{"class":731},[167,21319,17715],{"class":7246},[167,21321,873],{"class":512},[167,21323,21324],{"class":169,"line":832},[167,21325,4074],{"class":512},[167,21327,21328,21330,21332],{"class":169,"line":837},[167,21329,17769],{"class":512},[167,21331,523],{"class":731},[167,21333,9827],{"class":512},[167,21335,21336,21338,21340,21343,21345],{"class":169,"line":842},[167,21337,11697],{"class":512},[167,21339,3242],{"class":731},[167,21341,21342],{"class":177}," \"Person的有参构造函数调用\"",[167,21344,3510],{"class":731},[167,21346,10868],{"class":512},[167,21348,21349],{"class":169,"line":860},[167,21350,4231],{"class":512},[167,21352,21353],{"class":169,"line":876},[167,21354,20900],{"class":2268},[167,21356,21357,21359,21361,21363,21365,21367,21369],{"class":169,"line":887},[167,21358,20545],{"class":173},[167,21360,898],{"class":512},[167,21362,8822],{"class":731},[167,21364,17595],{"class":173},[167,21366,12612],{"class":731},[167,21368,19],{"class":7246},[167,21370,873],{"class":512},[167,21372,21373],{"class":169,"line":892},[167,21374,4074],{"class":512},[167,21376,21377,21379,21381],{"class":169,"line":907},[167,21378,17769],{"class":512},[167,21380,523],{"class":731},[167,21382,21383],{"class":512}," p.m_Age;\n",[167,21385,21386,21388,21390,21393,21395],{"class":169,"line":920},[167,21387,11697],{"class":512},[167,21389,3242],{"class":731},[167,21391,21392],{"class":177}," \"Person的拷贝构造函数调用\"",[167,21394,3510],{"class":731},[167,21396,10868],{"class":512},[167,21398,21399],{"class":169,"line":933},[167,21400,4231],{"class":512},[167,21402,21403,21405],{"class":169,"line":946},[167,21404,20578],{"class":173},[167,21406,4020],{"class":512},[167,21408,21409],{"class":169,"line":959},[167,21410,4074],{"class":512},[167,21412,21413,21415,21417,21419,21421],{"class":169,"line":964},[167,21414,11697],{"class":512},[167,21416,3242],{"class":731},[167,21418,20593],{"class":177},[167,21420,3510],{"class":731},[167,21422,10868],{"class":512},[167,21424,21425],{"class":169,"line":987},[167,21426,4231],{"class":512},[167,21428,21429,21431],{"class":169,"line":993},[167,21430,4029],{"class":731},[167,21432,17692],{"class":512},[167,21434,21435],{"class":169,"line":998},[167,21436,6027],{"class":512},[167,21438,21439],{"class":169,"line":1010},[167,21440,21253],{"class":2268},[167,21442,21443,21445,21447],{"class":169,"line":1022},[167,21444,7394],{"class":731},[167,21446,7618],{"class":173},[167,21448,4020],{"class":512},[167,21450,21451],{"class":169,"line":1027},[167,21452,3611],{"class":512},[167,21454,21455,21458,21460,21462,21464],{"class":169,"line":1032},[167,21456,21457],{"class":512},"    Person ",[167,21459,9160],{"class":173},[167,21461,898],{"class":512},[167,21463,2900],{"class":184},[167,21465,4755],{"class":512},[167,21467,21468,21470,21472],{"class":169,"line":1049},[167,21469,21457],{"class":512},[167,21471,9063],{"class":173},[167,21473,19541],{"class":512},[167,21475,21476,21478,21480,21483,21485,21488,21490],{"class":169,"line":10005},[167,21477,3616],{"class":512},[167,21479,3242],{"class":731},[167,21481,21482],{"class":177},"\"P2的年龄为：\"",[167,21484,3242],{"class":731},[167,21486,21487],{"class":512},"p2.m_Age",[167,21489,3242],{"class":731},[167,21491,3264],{"class":512},[167,21493,21494],{"class":169,"line":10011},[167,21495,3630],{"class":512},[167,21497,21498],{"class":169,"line":10038},[167,21499,21500],{"class":2268},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[167,21502,21503],{"class":169,"line":10043},[167,21504,21505],{"class":2268},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[167,21507,21508,21510,21513,21515,21517,21519],{"class":169,"line":10049},[167,21509,7394],{"class":731},[167,21511,21512],{"class":173}," doWork",[167,21514,898],{"class":512},[167,21516,21072],{"class":173},[167,21518,8855],{"class":7246},[167,21520,873],{"class":512},[167,21522,21523],{"class":169,"line":10061},[167,21524,3611],{"class":512},[167,21526,21527,21529,21531,21534,21536],{"class":169,"line":10073},[167,21528,8559],{"class":512},[167,21530,3242],{"class":731},[167,21532,21533],{"class":177}," \"doWork函数调用\"",[167,21535,3510],{"class":731},[167,21537,10868],{"class":512},[167,21539,21540],{"class":169,"line":10085},[167,21541,3630],{"class":512},[167,21543,21544,21546,21548],{"class":169,"line":11744},[167,21545,7394],{"class":731},[167,21547,7687],{"class":173},[167,21549,4020],{"class":512},[167,21551,21552],{"class":169,"line":11769},[167,21553,3611],{"class":512},[167,21555,21556],{"class":169,"line":11792},[167,21557,17339],{"class":512},[167,21559,21560,21563],{"class":169,"line":11816},[167,21561,21562],{"class":173},"    doWork",[167,21564,21565],{"class":512},"(p);\n",[167,21567,21568],{"class":169,"line":11821},[167,21569,3630],{"class":512},[167,21571,21572],{"class":169,"line":11826},[167,21573,21574],{"class":2268},"\u002F\u002F 3.以值方式返回局部对象\n",[167,21576,21577,21579,21582],{"class":169,"line":11831},[167,21578,21072],{"class":173},[167,21580,21581],{"class":173}," doWork2",[167,21583,4020],{"class":512},[167,21585,21586],{"class":169,"line":11840},[167,21587,3611],{"class":512},[167,21589,21590],{"class":169,"line":11845},[167,21591,21062],{"class":512},[167,21593,21594,21596,21598,21600,21602,21604,21606,21608,21610,21612,21614],{"class":169,"line":11851},[167,21595,3616],{"class":512},[167,21597,3242],{"class":731},[167,21599,898],{"class":512},[167,21601,2216],{"class":731},[167,21603,8548],{"class":731},[167,21605,2629],{"class":512},[167,21607,2553],{"class":731},[167,21609,9160],{"class":512},[167,21611,3242],{"class":731},[167,21613,3307],{"class":512},[167,21615,21616],{"class":2268},"\u002F\u002F打印p1的地址\n",[167,21618,21619,21621,21624],{"class":169,"line":11872},[167,21620,6122],{"class":731},[167,21622,21623],{"class":512}," p1;",[167,21625,21626],{"class":2268},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[167,21628,21629],{"class":169,"line":11878},[167,21630,3630],{"class":512},[167,21632,21633,21635,21637],{"class":169,"line":11892},[167,21634,7394],{"class":731},[167,21636,7759],{"class":173},[167,21638,4020],{"class":512},[167,21640,21641],{"class":169,"line":11898},[167,21642,3611],{"class":512},[167,21644,21645,21648,21650,21652],{"class":169,"line":11925},[167,21646,21647],{"class":512},"    Person p ",[167,21649,523],{"class":731},[167,21651,21581],{"class":173},[167,21653,7666],{"class":512},[167,21655,21656,21658,21660,21662,21664,21666,21668,21670,21672,21674,21676],{"class":169,"line":11934},[167,21657,3616],{"class":512},[167,21659,3242],{"class":731},[167,21661,898],{"class":512},[167,21663,2216],{"class":731},[167,21665,8548],{"class":731},[167,21667,2629],{"class":512},[167,21669,2553],{"class":731},[167,21671,19],{"class":512},[167,21673,3242],{"class":731},[167,21675,3307],{"class":512},[167,21677,21678],{"class":2268},"\u002F\u002F打印p的地址\n",[167,21680,21681],{"class":169,"line":11940},[167,21682,3630],{"class":512},[167,21684,21685],{"class":169,"line":11948},[167,21686,741],{"emptyLinePlaceholder":740},[167,21688,21689],{"class":169,"line":11953},[167,21690,741],{"emptyLinePlaceholder":740},[167,21692,21693,21695,21697],{"class":169,"line":18630},[167,21694,2216],{"class":731},[167,21696,848],{"class":173},[167,21698,4020],{"class":512},[167,21700,21701],{"class":169,"line":18636},[167,21702,3611],{"class":512},[167,21704,21705],{"class":169,"line":18659},[167,21706,21707],{"class":2268},"    \u002F\u002F test01();\n",[167,21709,21710],{"class":169,"line":18665},[167,21711,21712],{"class":2268},"    \u002F\u002F test02();\n",[167,21714,21715,21718],{"class":169,"line":18688},[167,21716,21717],{"class":173},"    test03",[167,21719,7666],{"class":512},[167,21721,21722],{"class":169,"line":18702},[167,21723,21724],{"class":2268},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[167,21726,21727],{"class":169,"line":18722},[167,21728,21729],{"class":2268},"\u002F\u002F 输出结果如下：\n",[167,21731,21732],{"class":169,"line":18728},[167,21733,21734],{"class":2268},"\u002F\u002F Person的默认构造函数调用\n",[167,21736,21737],{"class":169,"line":18739},[167,21738,21739],{"class":2268},"\u002F\u002F 0x7fffffffceec\n",[167,21741,21742],{"class":169,"line":18762},[167,21743,21739],{"class":2268},[167,21745,21746],{"class":169,"line":18784},[167,21747,21748],{"class":2268},"\u002F\u002F Person的析构函数调用\n",[167,21750,21751],{"class":169,"line":18789},[167,21752,741],{"emptyLinePlaceholder":740},[167,21754,21755],{"class":169,"line":18795},[167,21756,21757],{"class":2268},"\u002F\u002F 之前的输出结果如下：\n",[167,21759,21760],{"class":169,"line":18809},[167,21761,21734],{"class":2268},[167,21763,21764],{"class":169,"line":18822},[167,21765,21766],{"class":2268},"\u002F\u002F 地址\n",[167,21768,21769],{"class":169,"line":18827},[167,21770,21771],{"class":2268},"\u002F\u002F Person的拷贝构造函数调用\n",[167,21773,21774],{"class":169,"line":18841},[167,21775,21748],{"class":2268},[167,21777,21778],{"class":169,"line":18846},[167,21779,21766],{"class":2268},[167,21781,21782],{"class":169,"line":18852},[167,21783,21784],{"class":2268},"\u002F\u002F (这两次输出的地址也是不同的) \n",[167,21786,21787],{"class":169,"line":18857},[167,21788,21789],{"class":2268},"\u002F\u002F Person的析构函数调用     \n",[167,21791,21792,21794,21796],{"class":169,"line":18871},[167,21793,6122],{"class":731},[167,21795,6125],{"class":184},[167,21797,3359],{"class":512},[167,21799,21800],{"class":169,"line":18876},[167,21801,3630],{"class":512},[19,21803,21804],{},"简化版理解",[26,21806,21808],{"className":2202,"code":21807,"language":2204,"meta":32,"style":32},"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",[34,21809,21810,21818,21822,21828,21841,21852,21856,21868,21881,21889,21893,21909,21922,21931,21935,21940,21946,21959,21963,21967,21974,21978,21982,21987,21995,21999,22015,22028,22041,22045,22050,22058,22062,22066,22071,22076,22092,22100,22107,22113,22117,22121,22126,22134,22138,22142,22165,22172,22176,22180,22188,22192,22202,22224,22228,22232,22236,22244,22248,22253,22258,22264,22268,22278,22282,22290],{"__ignoreMap":32},[167,21811,21812,21814,21816],{"class":169,"line":170},[167,21813,16721],{"class":731},[167,21815,17595],{"class":173},[167,21817,17598],{"class":512},[167,21819,21820],{"class":169,"line":191},[167,21821,16743],{"class":731},[167,21823,21824,21826],{"class":169,"line":205},[167,21825,20545],{"class":173},[167,21827,12881],{"class":512},[167,21829,21830,21832,21834,21837,21839],{"class":169,"line":219},[167,21831,11697],{"class":512},[167,21833,3242],{"class":731},[167,21835,21836],{"class":177}," \"无参构造函数!\"",[167,21838,3510],{"class":731},[167,21840,10868],{"class":512},[167,21842,21843,21846,21848,21850],{"class":169,"line":230},[167,21844,21845],{"class":512},"        mAge ",[167,21847,523],{"class":731},[167,21849,6125],{"class":184},[167,21851,3359],{"class":512},[167,21853,21854],{"class":169,"line":241},[167,21855,4231],{"class":512},[167,21857,21858,21860,21862,21864,21866],{"class":169,"line":261},[167,21859,20545],{"class":173},[167,21861,898],{"class":512},[167,21863,2216],{"class":731},[167,21865,17715],{"class":7246},[167,21867,14470],{"class":512},[167,21869,21870,21872,21874,21877,21879],{"class":169,"line":773},[167,21871,11697],{"class":512},[167,21873,3242],{"class":731},[167,21875,21876],{"class":177}," \"有参构造函数!\"",[167,21878,3510],{"class":731},[167,21880,10868],{"class":512},[167,21882,21883,21885,21887],{"class":169,"line":779},[167,21884,21845],{"class":512},[167,21886,523],{"class":731},[167,21888,9827],{"class":512},[167,21890,21891],{"class":169,"line":785},[167,21892,4231],{"class":512},[167,21894,21895,21897,21899,21901,21903,21905,21907],{"class":169,"line":790},[167,21896,20545],{"class":173},[167,21898,898],{"class":512},[167,21900,8822],{"class":731},[167,21902,17595],{"class":173},[167,21904,2553],{"class":731},[167,21906,8855],{"class":7246},[167,21908,14470],{"class":512},[167,21910,21911,21913,21915,21918,21920],{"class":169,"line":796},[167,21912,11697],{"class":512},[167,21914,3242],{"class":731},[167,21916,21917],{"class":177}," \"拷贝构造函数!\"",[167,21919,3510],{"class":731},[167,21921,10868],{"class":512},[167,21923,21924,21926,21928],{"class":169,"line":802},[167,21925,21845],{"class":512},[167,21927,523],{"class":731},[167,21929,21930],{"class":512}," p.mAge;\n",[167,21932,21933],{"class":169,"line":808},[167,21934,4231],{"class":512},[167,21936,21937],{"class":169,"line":814},[167,21938,21939],{"class":2268},"    \u002F\u002F析构函数在释放内存之前调用\n",[167,21941,21942,21944],{"class":169,"line":820},[167,21943,20578],{"class":173},[167,21945,12881],{"class":512},[167,21947,21948,21950,21952,21955,21957],{"class":169,"line":826},[167,21949,11697],{"class":512},[167,21951,3242],{"class":731},[167,21953,21954],{"class":177}," \"析构函数!\"",[167,21956,3510],{"class":731},[167,21958,10868],{"class":512},[167,21960,21961],{"class":169,"line":832},[167,21962,4231],{"class":512},[167,21964,21965],{"class":169,"line":837},[167,21966,16743],{"class":731},[167,21968,21969,21971],{"class":169,"line":842},[167,21970,4029],{"class":731},[167,21972,21973],{"class":512}," mAge;\n",[167,21975,21976],{"class":169,"line":860},[167,21977,6027],{"class":512},[167,21979,21980],{"class":169,"line":876},[167,21981,741],{"emptyLinePlaceholder":740},[167,21983,21984],{"class":169,"line":887},[167,21985,21986],{"class":2268},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[167,21988,21989,21991,21993],{"class":169,"line":892},[167,21990,7394],{"class":731},[167,21992,7618],{"class":173},[167,21994,12881],{"class":512},[167,21996,21997],{"class":169,"line":907},[167,21998,741],{"emptyLinePlaceholder":740},[167,22000,22001,22003,22006,22008,22010,22012],{"class":169,"line":920},[167,22002,21457],{"class":512},[167,22004,22005],{"class":173},"man",[167,22007,898],{"class":512},[167,22009,981],{"class":184},[167,22011,7996],{"class":512},[167,22013,22014],{"class":2268}," \u002F\u002Fp对象已经创建完毕\n",[167,22016,22017,22019,22022,22025],{"class":169,"line":933},[167,22018,21457],{"class":512},[167,22020,22021],{"class":173},"newman",[167,22023,22024],{"class":512},"(man);",[167,22026,22027],{"class":2268}," \u002F\u002F调用拷贝构造函数\n",[167,22029,22030,22033,22035,22038],{"class":169,"line":946},[167,22031,22032],{"class":512},"    Person newman2 ",[167,22034,523],{"class":731},[167,22036,22037],{"class":512}," man;",[167,22039,22040],{"class":2268}," \u002F\u002F拷贝构造\n",[167,22042,22043],{"class":169,"line":959},[167,22044,741],{"emptyLinePlaceholder":740},[167,22046,22047],{"class":169,"line":964},[167,22048,22049],{"class":2268},"    \u002F\u002FPerson newman3;\n",[167,22051,22052,22055],{"class":169,"line":987},[167,22053,22054],{"class":2268},"    \u002F\u002Fnewman3 = man;",[167,22056,22057],{"class":2268}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[167,22059,22060],{"class":169,"line":993},[167,22061,3630],{"class":512},[167,22063,22064],{"class":169,"line":998},[167,22065,741],{"emptyLinePlaceholder":740},[167,22067,22068],{"class":169,"line":1010},[167,22069,22070],{"class":2268},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[167,22072,22073],{"class":169,"line":1022},[167,22074,22075],{"class":2268},"\u002F\u002F相当于Person p1 = p;\n",[167,22077,22078,22080,22082,22084,22086,22089],{"class":169,"line":1027},[167,22079,7394],{"class":731},[167,22081,21512],{"class":173},[167,22083,898],{"class":512},[167,22085,21072],{"class":173},[167,22087,22088],{"class":7246}," p1",[167,22090,22091],{"class":512},") {}\n",[167,22093,22094,22096,22098],{"class":169,"line":1032},[167,22095,7394],{"class":731},[167,22097,7687],{"class":173},[167,22099,12881],{"class":512},[167,22101,22102,22104],{"class":169,"line":1049},[167,22103,20630],{"class":512},[167,22105,22106],{"class":2268}," \u002F\u002F无参构造函数\n",[167,22108,22109,22111],{"class":169,"line":10005},[167,22110,21562],{"class":173},[167,22112,21565],{"class":512},[167,22114,22115],{"class":169,"line":10011},[167,22116,3630],{"class":512},[167,22118,22119],{"class":169,"line":10038},[167,22120,741],{"emptyLinePlaceholder":740},[167,22122,22123],{"class":169,"line":10043},[167,22124,22125],{"class":2268},"\u002F\u002F3. 以值方式返回局部对象\n",[167,22127,22128,22130,22132],{"class":169,"line":10049},[167,22129,21072],{"class":173},[167,22131,21581],{"class":173},[167,22133,4020],{"class":512},[167,22135,22136],{"class":169,"line":10061},[167,22137,3611],{"class":512},[167,22139,22140],{"class":169,"line":10073},[167,22141,21062],{"class":512},[167,22143,22144,22146,22148,22150,22152,22154,22156,22158,22161,22163],{"class":169,"line":10085},[167,22145,8559],{"class":512},[167,22147,3242],{"class":731},[167,22149,3716],{"class":512},[167,22151,2216],{"class":731},[167,22153,8548],{"class":731},[167,22155,2629],{"class":512},[167,22157,2553],{"class":731},[167,22159,22160],{"class":512},"p1 ",[167,22162,3242],{"class":731},[167,22164,10868],{"class":512},[167,22166,22167,22169],{"class":169,"line":11744},[167,22168,6122],{"class":731},[167,22170,22171],{"class":512}," p1;\n",[167,22173,22174],{"class":169,"line":11769},[167,22175,3630],{"class":512},[167,22177,22178],{"class":169,"line":11792},[167,22179,741],{"emptyLinePlaceholder":740},[167,22181,22182,22184,22186],{"class":169,"line":11816},[167,22183,7394],{"class":731},[167,22185,7759],{"class":173},[167,22187,4020],{"class":512},[167,22189,22190],{"class":169,"line":11821},[167,22191,3611],{"class":512},[167,22193,22194,22196,22198,22200],{"class":169,"line":11826},[167,22195,21647],{"class":512},[167,22197,523],{"class":731},[167,22199,21581],{"class":173},[167,22201,7666],{"class":512},[167,22203,22204,22206,22208,22210,22212,22214,22216,22218,22220,22222],{"class":169,"line":11831},[167,22205,8559],{"class":512},[167,22207,3242],{"class":731},[167,22209,3716],{"class":512},[167,22211,2216],{"class":731},[167,22213,8548],{"class":731},[167,22215,2629],{"class":512},[167,22217,2553],{"class":731},[167,22219,13476],{"class":512},[167,22221,3242],{"class":731},[167,22223,10868],{"class":512},[167,22225,22226],{"class":169,"line":11840},[167,22227,3630],{"class":512},[167,22229,22230],{"class":169,"line":11845},[167,22231,741],{"emptyLinePlaceholder":740},[167,22233,22234],{"class":169,"line":11851},[167,22235,741],{"emptyLinePlaceholder":740},[167,22237,22238,22240,22242],{"class":169,"line":11872},[167,22239,2216],{"class":731},[167,22241,848],{"class":173},[167,22243,12881],{"class":512},[167,22245,22246],{"class":169,"line":11878},[167,22247,741],{"emptyLinePlaceholder":740},[167,22249,22250],{"class":169,"line":11892},[167,22251,22252],{"class":2268},"    \u002F\u002Ftest01();\n",[167,22254,22255],{"class":169,"line":11898},[167,22256,22257],{"class":2268},"    \u002F\u002Ftest02();\n",[167,22259,22260,22262],{"class":169,"line":11925},[167,22261,21717],{"class":173},[167,22263,7666],{"class":512},[167,22265,22266],{"class":169,"line":11934},[167,22267,741],{"emptyLinePlaceholder":740},[167,22269,22270,22272,22274,22276],{"class":169,"line":11940},[167,22271,4347],{"class":173},[167,22273,898],{"class":512},[167,22275,4352],{"class":177},[167,22277,4755],{"class":512},[167,22279,22280],{"class":169,"line":11948},[167,22281,741],{"emptyLinePlaceholder":740},[167,22283,22284,22286,22288],{"class":169,"line":11953},[167,22285,6122],{"class":731},[167,22287,6125],{"class":184},[167,22289,3359],{"class":512},[167,22291,22292],{"class":169,"line":18630},[167,22293,3630],{"class":512},[494,22295,22297],{"id":22296},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22299,22300],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22302,22303],{},"1．默认构造函数(无参，函数体为空)",[19,22305,22306],{},"2．默认析构函数(无参，函数体为空)",[19,22308,22309],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22311,22312],{},"构造函数调用规则如下：",[3205,22314,22315,22318],{},[43,22316,22317],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[43,22319,22320],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,22322,22324],{"className":2202,"code":22323,"language":2204,"meta":32,"style":32},"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",[34,22325,22326,22334,22338,22343,22349,22361,22365,22370,22382,22391,22403,22407,22411,22427,22436,22448,22452,22456,22462,22474,22478,22482,22488,22492,22496,22504,22508,22520,22525,22533,22537,22555,22559,22563,22571,22575,22580,22588,22603,22616,22620,22625,22632,22648,22661,22665,22669,22677,22681,22687,22691,22701,22705,22713],{"__ignoreMap":32},[167,22327,22328,22330,22332],{"class":169,"line":170},[167,22329,16721],{"class":731},[167,22331,17595],{"class":173},[167,22333,17598],{"class":512},[167,22335,22336],{"class":169,"line":191},[167,22337,16743],{"class":731},[167,22339,22340],{"class":169,"line":205},[167,22341,22342],{"class":2268},"    \u002F\u002F无参（默认）构造函数\n",[167,22344,22345,22347],{"class":169,"line":219},[167,22346,20545],{"class":173},[167,22348,12881],{"class":512},[167,22350,22351,22353,22355,22357,22359],{"class":169,"line":230},[167,22352,11697],{"class":512},[167,22354,3242],{"class":731},[167,22356,21836],{"class":177},[167,22358,3510],{"class":731},[167,22360,10868],{"class":512},[167,22362,22363],{"class":169,"line":241},[167,22364,4231],{"class":512},[167,22366,22367],{"class":169,"line":261},[167,22368,22369],{"class":2268},"    \u002F\u002F有参构造函数\n",[167,22371,22372,22374,22376,22378,22380],{"class":169,"line":773},[167,22373,20545],{"class":173},[167,22375,898],{"class":512},[167,22377,2216],{"class":731},[167,22379,3464],{"class":7246},[167,22381,14470],{"class":512},[167,22383,22384,22387,22389],{"class":169,"line":779},[167,22385,22386],{"class":512},"        age ",[167,22388,523],{"class":731},[167,22390,3498],{"class":512},[167,22392,22393,22395,22397,22399,22401],{"class":169,"line":785},[167,22394,11697],{"class":512},[167,22396,3242],{"class":731},[167,22398,21876],{"class":177},[167,22400,3510],{"class":731},[167,22402,10868],{"class":512},[167,22404,22405],{"class":169,"line":790},[167,22406,4231],{"class":512},[167,22408,22409],{"class":169,"line":796},[167,22410,20900],{"class":2268},[167,22412,22413,22415,22417,22419,22421,22423,22425],{"class":169,"line":802},[167,22414,20545],{"class":173},[167,22416,898],{"class":512},[167,22418,8822],{"class":731},[167,22420,17595],{"class":173},[167,22422,2553],{"class":731},[167,22424,8855],{"class":7246},[167,22426,14470],{"class":512},[167,22428,22429,22431,22433],{"class":169,"line":808},[167,22430,22386],{"class":512},[167,22432,523],{"class":731},[167,22434,22435],{"class":512}," p.age;\n",[167,22437,22438,22440,22442,22444,22446],{"class":169,"line":814},[167,22439,11697],{"class":512},[167,22441,3242],{"class":731},[167,22443,21917],{"class":177},[167,22445,3510],{"class":731},[167,22447,10868],{"class":512},[167,22449,22450],{"class":169,"line":820},[167,22451,4231],{"class":512},[167,22453,22454],{"class":169,"line":826},[167,22455,20573],{"class":2268},[167,22457,22458,22460],{"class":169,"line":832},[167,22459,20578],{"class":173},[167,22461,12881],{"class":512},[167,22463,22464,22466,22468,22470,22472],{"class":169,"line":837},[167,22465,11697],{"class":512},[167,22467,3242],{"class":731},[167,22469,21954],{"class":177},[167,22471,3510],{"class":731},[167,22473,10868],{"class":512},[167,22475,22476],{"class":169,"line":842},[167,22477,4231],{"class":512},[167,22479,22480],{"class":169,"line":860},[167,22481,16743],{"class":731},[167,22483,22484,22486],{"class":169,"line":876},[167,22485,4029],{"class":731},[167,22487,9827],{"class":512},[167,22489,22490],{"class":169,"line":887},[167,22491,6027],{"class":512},[167,22493,22494],{"class":169,"line":892},[167,22495,741],{"emptyLinePlaceholder":740},[167,22497,22498,22500,22502],{"class":169,"line":907},[167,22499,7394],{"class":731},[167,22501,7618],{"class":173},[167,22503,4020],{"class":512},[167,22505,22506],{"class":169,"line":920},[167,22507,3611],{"class":512},[167,22509,22510,22512,22514,22516,22518],{"class":169,"line":933},[167,22511,21457],{"class":512},[167,22513,9160],{"class":173},[167,22515,898],{"class":512},[167,22517,2850],{"class":184},[167,22519,4755],{"class":512},[167,22521,22522],{"class":169,"line":946},[167,22523,22524],{"class":2268},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[167,22526,22527,22529,22531],{"class":169,"line":959},[167,22528,21457],{"class":512},[167,22530,9063],{"class":173},[167,22532,19541],{"class":512},[167,22534,22535],{"class":169,"line":964},[167,22536,741],{"emptyLinePlaceholder":740},[167,22538,22539,22541,22543,22546,22548,22551,22553],{"class":169,"line":987},[167,22540,8559],{"class":512},[167,22542,3242],{"class":731},[167,22544,22545],{"class":177}," \"p2的年龄为： \"",[167,22547,3510],{"class":731},[167,22549,22550],{"class":512}," p2.age ",[167,22552,3242],{"class":731},[167,22554,10868],{"class":512},[167,22556,22557],{"class":169,"line":993},[167,22558,3630],{"class":512},[167,22560,22561],{"class":169,"line":998},[167,22562,741],{"emptyLinePlaceholder":740},[167,22564,22565,22567,22569],{"class":169,"line":1010},[167,22566,7394],{"class":731},[167,22568,7687],{"class":173},[167,22570,4020],{"class":512},[167,22572,22573],{"class":169,"line":1022},[167,22574,3611],{"class":512},[167,22576,22577],{"class":169,"line":1027},[167,22578,22579],{"class":2268},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[167,22581,22582,22585],{"class":169,"line":1032},[167,22583,22584],{"class":512},"    Person p1;",[167,22586,22587],{"class":2268}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[167,22589,22590,22592,22594,22596,22598,22600],{"class":169,"line":1049},[167,22591,21457],{"class":512},[167,22593,9063],{"class":173},[167,22595,898],{"class":512},[167,22597,2646],{"class":184},[167,22599,7996],{"class":512},[167,22601,22602],{"class":2268}," \u002F\u002F用户提供的有参\n",[167,22604,22605,22607,22610,22613],{"class":169,"line":10005},[167,22606,21457],{"class":512},[167,22608,22609],{"class":173},"p3",[167,22611,22612],{"class":512},"(p2);",[167,22614,22615],{"class":2268}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[167,22617,22618],{"class":169,"line":10011},[167,22619,741],{"emptyLinePlaceholder":740},[167,22621,22622],{"class":169,"line":10038},[167,22623,22624],{"class":2268},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[167,22626,22627,22630],{"class":169,"line":10043},[167,22628,22629],{"class":512},"    Person p4;",[167,22631,22587],{"class":2268},[167,22633,22634,22636,22639,22641,22643,22645],{"class":169,"line":10049},[167,22635,21457],{"class":512},[167,22637,22638],{"class":173},"p5",[167,22640,898],{"class":512},[167,22642,2646],{"class":184},[167,22644,7996],{"class":512},[167,22646,22647],{"class":2268}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[167,22649,22650,22652,22655,22658],{"class":169,"line":10061},[167,22651,21457],{"class":512},[167,22653,22654],{"class":173},"p6",[167,22656,22657],{"class":512},"(p5);",[167,22659,22660],{"class":2268}," \u002F\u002F用户自己提供拷贝构造\n",[167,22662,22663],{"class":169,"line":10073},[167,22664,3630],{"class":512},[167,22666,22667],{"class":169,"line":10085},[167,22668,741],{"emptyLinePlaceholder":740},[167,22670,22671,22673,22675],{"class":169,"line":11744},[167,22672,2216],{"class":731},[167,22674,848],{"class":173},[167,22676,12881],{"class":512},[167,22678,22679],{"class":169,"line":11769},[167,22680,741],{"emptyLinePlaceholder":740},[167,22682,22683,22685],{"class":169,"line":11792},[167,22684,7663],{"class":173},[167,22686,7666],{"class":512},[167,22688,22689],{"class":169,"line":11816},[167,22690,741],{"emptyLinePlaceholder":740},[167,22692,22693,22695,22697,22699],{"class":169,"line":11821},[167,22694,4347],{"class":173},[167,22696,898],{"class":512},[167,22698,4352],{"class":177},[167,22700,4755],{"class":512},[167,22702,22703],{"class":169,"line":11826},[167,22704,741],{"emptyLinePlaceholder":740},[167,22706,22707,22709,22711],{"class":169,"line":11831},[167,22708,6122],{"class":731},[167,22710,6125],{"class":184},[167,22712,3359],{"class":512},[167,22714,22715],{"class":169,"line":11840},[167,22716,3630],{"class":512},[494,22718,22720],{"id":22719},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22722,22723],{},"浅拷贝：简单的赋值拷贝操作",[19,22725,22726],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,22728,22730],{"className":2202,"code":22729,"language":2204,"meta":32,"style":32},"#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",[34,22731,22732,22738,22748,22754,22758,22762,22767,22773,22777,22790,22794,22798,22805,22809,22819,22834,22847,22851,22856,22861,22877,22881,22894,22899,22904,22909,22918,22923,22938,22942,22946,22950,22956,22960,22965,22980,22984,22995,23009,23013,23022,23026,23032,23044,23048,23056,23060,23077,23108,23116,23144,23148,23152,23160,23164,23170],{"__ignoreMap":32},[167,22733,22734,22736],{"class":169,"line":170},[167,22735,3995],{"class":731},[167,22737,3998],{"class":177},[167,22739,22740,22742,22744,22746],{"class":169,"line":191},[167,22741,4003],{"class":731},[167,22743,4006],{"class":731},[167,22745,4009],{"class":173},[167,22747,3359],{"class":512},[167,22749,22750,22752],{"class":169,"line":205},[167,22751,16721],{"class":731},[167,22753,17197],{"class":173},[167,22755,22756],{"class":169,"line":219},[167,22757,3611],{"class":512},[167,22759,22760],{"class":169,"line":230},[167,22761,16743],{"class":731},[167,22763,22764],{"class":169,"line":241},[167,22765,22766],{"class":2268},"    \u002F\u002F默认构造函数\n",[167,22768,22769,22771],{"class":169,"line":261},[167,22770,20545],{"class":173},[167,22772,4020],{"class":512},[167,22774,22775],{"class":169,"line":773},[167,22776,4074],{"class":512},[167,22778,22779,22781,22783,22786,22788],{"class":169,"line":779},[167,22780,5485],{"class":512},[167,22782,3242],{"class":731},[167,22784,22785],{"class":177},"\"默认构造函数\"",[167,22787,3242],{"class":731},[167,22789,3264],{"class":512},[167,22791,22792],{"class":169,"line":785},[167,22793,4231],{"class":512},[167,22795,22796],{"class":169,"line":790},[167,22797,22369],{"class":2268},[167,22799,22800,22802],{"class":169,"line":796},[167,22801,20578],{"class":173},[167,22803,22804],{"class":512},"(int age,int height)\n",[167,22806,22807],{"class":169,"line":802},[167,22808,4074],{"class":512},[167,22810,22811,22814,22816],{"class":169,"line":808},[167,22812,22813],{"class":512},"        m_Age",[167,22815,523],{"class":731},[167,22817,22818],{"class":512},"age;\n",[167,22820,22821,22824,22826,22828,22831],{"class":169,"line":814},[167,22822,22823],{"class":512},"        m_Height",[167,22825,13745],{"class":731},[167,22827,4426],{"class":731},[167,22829,22830],{"class":512},"(height);",[167,22832,22833],{"class":2268},"\u002F\u002F放到堆区\n",[167,22835,22836,22838,22840,22843,22845],{"class":169,"line":820},[167,22837,5485],{"class":512},[167,22839,3242],{"class":731},[167,22841,22842],{"class":177},"\"有参构造函数\"",[167,22844,3242],{"class":731},[167,22846,3264],{"class":512},[167,22848,22849],{"class":169,"line":826},[167,22850,4231],{"class":512},[167,22852,22853],{"class":169,"line":832},[167,22854,22855],{"class":2268},"    \u002F\u002F深拷贝解决上述问题\n",[167,22857,22858],{"class":169,"line":837},[167,22859,22860],{"class":2268},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[167,22862,22863,22865,22867,22869,22871,22873,22875],{"class":169,"line":842},[167,22864,20545],{"class":173},[167,22866,898],{"class":512},[167,22868,8822],{"class":731},[167,22870,17595],{"class":173},[167,22872,12612],{"class":731},[167,22874,19],{"class":7246},[167,22876,873],{"class":512},[167,22878,22879],{"class":169,"line":860},[167,22880,4074],{"class":512},[167,22882,22883,22885,22887,22890,22892],{"class":169,"line":876},[167,22884,5485],{"class":512},[167,22886,3242],{"class":731},[167,22888,22889],{"class":177},"\"拷贝构造函数\"",[167,22891,3242],{"class":731},[167,22893,3264],{"class":512},[167,22895,22896],{"class":169,"line":887},[167,22897,22898],{"class":2268},"        \u002F\u002F编译器默认的写如下注释部分\n",[167,22900,22901],{"class":169,"line":892},[167,22902,22903],{"class":2268},"        \u002F\u002Fm_Age=p.m_Age;\n",[167,22905,22906],{"class":169,"line":907},[167,22907,22908],{"class":2268},"        \u002F\u002Fm_Height=p.m_Height;\n",[167,22910,22911,22913,22915],{"class":169,"line":920},[167,22912,22813],{"class":512},[167,22914,523],{"class":731},[167,22916,22917],{"class":512},"p.m_Age;\n",[167,22919,22920],{"class":169,"line":933},[167,22921,22922],{"class":2268},"        \u002F\u002F深拷贝操作\n",[167,22924,22925,22927,22929,22931,22933,22935],{"class":169,"line":946},[167,22926,22823],{"class":512},[167,22928,13745],{"class":731},[167,22930,4426],{"class":731},[167,22932,898],{"class":512},[167,22934,2655],{"class":731},[167,22936,22937],{"class":512},"p.m_Height);\n",[167,22939,22940],{"class":169,"line":959},[167,22941,4231],{"class":512},[167,22943,22944],{"class":169,"line":964},[167,22945,741],{"emptyLinePlaceholder":740},[167,22947,22948],{"class":169,"line":987},[167,22949,20573],{"class":2268},[167,22951,22952,22954],{"class":169,"line":993},[167,22953,20578],{"class":173},[167,22955,4020],{"class":512},[167,22957,22958],{"class":169,"line":998},[167,22959,4074],{"class":512},[167,22961,22962],{"class":169,"line":1010},[167,22963,22964],{"class":2268},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[167,22966,22967,22969,22972,22975,22978],{"class":169,"line":1022},[167,22968,4540],{"class":731},[167,22970,22971],{"class":512},"(m_Height ",[167,22973,22974],{"class":731},"!=",[167,22976,22977],{"class":184}," NULL",[167,22979,873],{"class":512},[167,22981,22982],{"class":169,"line":1027},[167,22983,4553],{"class":512},[167,22985,22986,22989,22992],{"class":169,"line":1032},[167,22987,22988],{"class":731},"            delete",[167,22990,22991],{"class":512}," m_Height;",[167,22993,22994],{"class":2268}," \u002F\u002F释放堆区内存\n",[167,22996,22997,23000,23002,23004,23006],{"class":169,"line":1049},[167,22998,22999],{"class":512},"            m_Height",[167,23001,523],{"class":731},[167,23003,4436],{"class":184},[167,23005,2265],{"class":512},[167,23007,23008],{"class":2268}," \u002F\u002F防止野指针\n",[167,23010,23011],{"class":169,"line":10005},[167,23012,4572],{"class":512},[167,23014,23015,23017,23019],{"class":169,"line":10011},[167,23016,5485],{"class":512},[167,23018,3242],{"class":731},[167,23020,23021],{"class":177},"\"Person的析构函数调用\"\n",[167,23023,23024],{"class":169,"line":10038},[167,23025,4231],{"class":512},[167,23027,23028,23030],{"class":169,"line":10043},[167,23029,4029],{"class":731},[167,23031,17692],{"class":512},[167,23033,23034,23036,23038,23041],{"class":169,"line":10049},[167,23035,4029],{"class":731},[167,23037,8548],{"class":731},[167,23039,23040],{"class":512},"m_Height;",[167,23042,23043],{"class":2268}," \u002F\u002F定义一个指针，指向身高\n",[167,23045,23046],{"class":169,"line":10061},[167,23047,6027],{"class":512},[167,23049,23050,23052,23054],{"class":169,"line":10073},[167,23051,7394],{"class":731},[167,23053,7618],{"class":173},[167,23055,4020],{"class":512},[167,23057,23058],{"class":169,"line":10085},[167,23059,3611],{"class":512},[167,23061,23062,23064,23066,23068,23070,23072,23075],{"class":169,"line":11744},[167,23063,21457],{"class":512},[167,23065,9160],{"class":173},[167,23067,898],{"class":512},[167,23069,2850],{"class":184},[167,23071,2578],{"class":512},[167,23073,23074],{"class":184},"160",[167,23076,4755],{"class":512},[167,23078,23079,23081,23083,23086,23088,23091,23093,23096,23098,23101,23103,23105],{"class":169,"line":11769},[167,23080,3616],{"class":512},[167,23082,3242],{"class":731},[167,23084,23085],{"class":177},"\"p1的年龄为:\"",[167,23087,3242],{"class":731},[167,23089,23090],{"class":512},"p1.m_Age",[167,23092,3242],{"class":731},[167,23094,23095],{"class":177},"\"身高为：\"",[167,23097,8449],{"class":731},[167,23099,23100],{"class":512},"p1.m_Height",[167,23102,3242],{"class":731},[167,23104,3307],{"class":512},[167,23106,23107],{"class":2268},"  \u002F\u002F18\n",[167,23109,23110,23112,23114],{"class":169,"line":11792},[167,23111,21457],{"class":512},[167,23113,9063],{"class":173},[167,23115,19541],{"class":512},[167,23117,23118,23120,23122,23125,23127,23129,23131,23133,23135,23138,23140,23142],{"class":169,"line":11816},[167,23119,3616],{"class":512},[167,23121,3242],{"class":731},[167,23123,23124],{"class":177},"\"p2的年龄为：\"",[167,23126,3242],{"class":731},[167,23128,21487],{"class":512},[167,23130,3242],{"class":731},[167,23132,23095],{"class":177},[167,23134,8449],{"class":731},[167,23136,23137],{"class":512},"p2.m_Height",[167,23139,3242],{"class":731},[167,23141,3307],{"class":512},[167,23143,23107],{"class":2268},[167,23145,23146],{"class":169,"line":11821},[167,23147,15238],{"class":512},[167,23149,23150],{"class":169,"line":11826},[167,23151,3630],{"class":512},[167,23153,23154,23156,23158],{"class":169,"line":11831},[167,23155,2216],{"class":731},[167,23157,848],{"class":173},[167,23159,4020],{"class":512},[167,23161,23162],{"class":169,"line":11840},[167,23163,3611],{"class":512},[167,23165,23166,23168],{"class":169,"line":11845},[167,23167,7663],{"class":173},[167,23169,7666],{"class":512},[167,23171,23172],{"class":169,"line":11851},[167,23173,3630],{"class":512},[19,23175,23176],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23178,23179],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23181,23182],{},[3528,23183],{"alt":32,"src":23184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23186,23187],{},"浅拷贝问题要使用深拷贝来解决",[19,23189,23190],{},[3528,23191],{"alt":32,"src":23192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23194,23195],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[494,23197,23199],{"id":23198},"_826初始化列表","8.2.6初始化列表",[19,23201,23202],{},"作用：初始化属性",[19,23204,7213],{},[26,23206,23209],{"className":23207,"code":23208,"language":31},[29],"构造函数():属性1(值1),属性2(值2).....{}\n",[34,23210,23208],{"__ignoreMap":32},[19,23212,23213],{},"例子",[26,23215,23217],{"className":2202,"code":23216,"language":2204,"meta":32,"style":32},"#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",[34,23218,23219,23225,23235,23241,23245,23250,23254,23259,23264,23269,23274,23279,23284,23288,23293,23298,23341,23350,23368,23386,23404,23408,23412,23419,23426,23433,23437,23441,23449,23453,23457,23477,23486,23490,23494,23504,23508,23516],{"__ignoreMap":32},[167,23220,23221,23223],{"class":169,"line":170},[167,23222,3995],{"class":731},[167,23224,3998],{"class":177},[167,23226,23227,23229,23231,23233],{"class":169,"line":191},[167,23228,4003],{"class":731},[167,23230,4006],{"class":731},[167,23232,4009],{"class":173},[167,23234,3359],{"class":512},[167,23236,23237,23239],{"class":169,"line":205},[167,23238,16721],{"class":731},[167,23240,17197],{"class":173},[167,23242,23243],{"class":169,"line":219},[167,23244,3611],{"class":512},[167,23246,23247],{"class":169,"line":230},[167,23248,23249],{"class":731},"    public:\n",[167,23251,23252],{"class":169,"line":241},[167,23253,741],{"emptyLinePlaceholder":740},[167,23255,23256],{"class":169,"line":261},[167,23257,23258],{"class":2268},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[167,23260,23261],{"class":169,"line":773},[167,23262,23263],{"class":2268},"    \u002F\u002FPerson(int a, int b, int c) {\n",[167,23265,23266],{"class":169,"line":779},[167,23267,23268],{"class":2268},"    \u002F\u002F  m_A = a;\n",[167,23270,23271],{"class":169,"line":785},[167,23272,23273],{"class":2268},"    \u002F\u002F  m_B = b;\n",[167,23275,23276],{"class":169,"line":790},[167,23277,23278],{"class":2268},"    \u002F\u002F  m_C = c;\n",[167,23280,23281],{"class":169,"line":796},[167,23282,23283],{"class":2268},"    \u002F\u002F}\n",[167,23285,23286],{"class":169,"line":802},[167,23287,741],{"emptyLinePlaceholder":740},[167,23289,23290],{"class":169,"line":808},[167,23291,23292],{"class":2268},"    \u002F\u002F初始化列表方式初始化\n",[167,23294,23295],{"class":169,"line":814},[167,23296,23297],{"class":2268},"    \u002F\u002F使用有参构造函数\n",[167,23299,23300,23302,23304,23306,23308,23310,23312,23314,23316,23318,23320,23323,23326,23329,23332,23335,23338],{"class":169,"line":820},[167,23301,20545],{"class":173},[167,23303,898],{"class":512},[167,23305,2216],{"class":731},[167,23307,3464],{"class":7246},[167,23309,14463],{"class":512},[167,23311,2216],{"class":731},[167,23313,4869],{"class":7246},[167,23315,14463],{"class":512},[167,23317,2216],{"class":731},[167,23319,4885],{"class":7246},[167,23321,23322],{"class":512},") :",[167,23324,23325],{"class":173},"m_A",[167,23327,23328],{"class":512},"(a), ",[167,23330,23331],{"class":173},"m_B",[167,23333,23334],{"class":512},"(b), ",[167,23336,23337],{"class":173},"m_C",[167,23339,23340],{"class":512},"(c) {}\n",[167,23342,23343,23345,23348],{"class":169,"line":826},[167,23344,16936],{"class":731},[167,23346,23347],{"class":173}," PrintPerson",[167,23349,12881],{"class":512},[167,23351,23352,23354,23356,23359,23361,23364,23366],{"class":169,"line":832},[167,23353,11697],{"class":512},[167,23355,3242],{"class":731},[167,23357,23358],{"class":177}," \"mA:\"",[167,23360,3510],{"class":731},[167,23362,23363],{"class":512}," m_A ",[167,23365,3242],{"class":731},[167,23367,10868],{"class":512},[167,23369,23370,23372,23374,23377,23379,23382,23384],{"class":169,"line":837},[167,23371,11697],{"class":512},[167,23373,3242],{"class":731},[167,23375,23376],{"class":177}," \"mB:\"",[167,23378,3510],{"class":731},[167,23380,23381],{"class":512}," m_B ",[167,23383,3242],{"class":731},[167,23385,10868],{"class":512},[167,23387,23388,23390,23392,23395,23397,23400,23402],{"class":169,"line":842},[167,23389,11697],{"class":512},[167,23391,3242],{"class":731},[167,23393,23394],{"class":177}," \"mC:\"",[167,23396,3510],{"class":731},[167,23398,23399],{"class":512}," m_C ",[167,23401,3242],{"class":731},[167,23403,10868],{"class":512},[167,23405,23406],{"class":169,"line":860},[167,23407,4231],{"class":512},[167,23409,23410],{"class":169,"line":876},[167,23411,17248],{"class":731},[167,23413,23414,23416],{"class":169,"line":887},[167,23415,4029],{"class":731},[167,23417,23418],{"class":512}," m_A;\n",[167,23420,23421,23423],{"class":169,"line":892},[167,23422,4029],{"class":731},[167,23424,23425],{"class":512}," m_B;\n",[167,23427,23428,23430],{"class":169,"line":907},[167,23429,4029],{"class":731},[167,23431,23432],{"class":512}," m_C;\n",[167,23434,23435],{"class":169,"line":920},[167,23436,6027],{"class":512},[167,23438,23439],{"class":169,"line":933},[167,23440,741],{"emptyLinePlaceholder":740},[167,23442,23443,23445,23447],{"class":169,"line":946},[167,23444,2216],{"class":731},[167,23446,848],{"class":173},[167,23448,8008],{"class":512},[167,23450,23451],{"class":169,"line":959},[167,23452,3611],{"class":512},[167,23454,23455],{"class":169,"line":964},[167,23456,741],{"emptyLinePlaceholder":740},[167,23458,23459,23461,23463,23465,23467,23469,23471,23473,23475],{"class":169,"line":987},[167,23460,21457],{"class":512},[167,23462,19],{"class":173},[167,23464,898],{"class":512},[167,23466,2418],{"class":184},[167,23468,14463],{"class":512},[167,23470,2287],{"class":184},[167,23472,14463],{"class":512},[167,23474,2281],{"class":184},[167,23476,4755],{"class":512},[167,23478,23479,23481,23484],{"class":169,"line":993},[167,23480,17892],{"class":512},[167,23482,23483],{"class":173},"PrintPerson",[167,23485,7666],{"class":512},[167,23487,23488],{"class":169,"line":998},[167,23489,741],{"emptyLinePlaceholder":740},[167,23491,23492],{"class":169,"line":1010},[167,23493,741],{"emptyLinePlaceholder":740},[167,23495,23496,23498,23500,23502],{"class":169,"line":1022},[167,23497,4347],{"class":173},[167,23499,898],{"class":512},[167,23501,4352],{"class":177},[167,23503,4755],{"class":512},[167,23505,23506],{"class":169,"line":1027},[167,23507,741],{"emptyLinePlaceholder":740},[167,23509,23510,23512,23514],{"class":169,"line":1032},[167,23511,6122],{"class":731},[167,23513,6125],{"class":184},[167,23515,3359],{"class":512},[167,23517,23518],{"class":169,"line":1049},[167,23519,3630],{"class":512},[19,23521,23522,23523,23526,23527],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2354,23524,23525],{},"参数名就是定义的对象属性","，",[2354,23528,23529],{},"属性后面的值为有参构造函数的形参",[26,23531,23533],{"className":2202,"code":23532,"language":2204,"meta":32,"style":32},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[34,23534,23535],{"__ignoreMap":32},[167,23536,23537,23539,23541,23543,23546,23548,23551,23553,23556,23558,23561,23563,23566,23568],{"class":169,"line":170},[167,23538,21072],{"class":173},[167,23540,898],{"class":512},[167,23542,2216],{"class":731},[167,23544,23545],{"class":512}," a.",[167,23547,2216],{"class":731},[167,23549,23550],{"class":512}," b,",[167,23552,2216],{"class":731},[167,23554,23555],{"class":512}," b):",[167,23557,23325],{"class":173},[167,23559,23560],{"class":512},"(a),",[167,23562,23331],{"class":173},[167,23564,23565],{"class":512},"(c),",[167,23567,23337],{"class":173},[167,23569,23570],{"class":512},"(b) {}\n",[494,23572,23574],{"id":23573},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23576,23577],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23579,16660],{},[26,23581,23583],{"className":2202,"code":23582,"language":2204,"meta":32,"style":32},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[34,23584,23585,23590,23595,23599,23604,23608],{"__ignoreMap":32},[167,23586,23587],{"class":169,"line":170},[167,23588,23589],{"class":512},"A{};\n",[167,23591,23592],{"class":169,"line":191},[167,23593,23594],{"class":512},"B\n",[167,23596,23597],{"class":169,"line":205},[167,23598,3611],{"class":512},[167,23600,23601],{"class":169,"line":219},[167,23602,23603],{"class":512},"    A a;\n",[167,23605,23606],{"class":169,"line":230},[167,23607,3630],{"class":512},[167,23609,23610],{"class":169,"line":241},[167,23611,23612],{"class":2268},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23614,23615],{},"案例",[26,23617,23619],{"className":2202,"code":23618,"language":2204,"meta":32,"style":32},"\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",[34,23620,23621,23626,23633,23637,23642,23647,23661,23665,23675,23686,23690,23697,23701,23714,23718,23723,23728,23732,23738,23742,23746,23750,23781,23785,23796,23800,23806,23810,23823,23827,23831,23835,23840,23845,23849,23857,23861,23878,23897,23901,23909,23913,23919],{"__ignoreMap":32},[167,23622,23623],{"class":169,"line":170},[167,23624,23625],{"class":2268},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[167,23627,23628,23630],{"class":169,"line":191},[167,23629,16721],{"class":731},[167,23631,23632],{"class":173}," Phone\n",[167,23634,23635],{"class":169,"line":205},[167,23636,3611],{"class":512},[167,23638,23639],{"class":169,"line":219},[167,23640,23641],{"class":512},"public：\n",[167,23643,23644],{"class":169,"line":230},[167,23645,23646],{"class":2268},"    \u002F\u002F 赋值(构造函数)\n",[167,23648,23649,23652,23654,23656,23659],{"class":169,"line":241},[167,23650,23651],{"class":173},"    Phone",[167,23653,898],{"class":512},[167,23655,16944],{"class":173},[167,23657,23658],{"class":7246}," pName",[167,23660,873],{"class":512},[167,23662,23663],{"class":169,"line":261},[167,23664,4074],{"class":512},[167,23666,23667,23670,23672],{"class":169,"line":773},[167,23668,23669],{"class":512},"        m_pName",[167,23671,523],{"class":731},[167,23673,23674],{"class":512},"pName;\n",[167,23676,23677,23679,23681,23684],{"class":169,"line":779},[167,23678,5485],{"class":512},[167,23680,3242],{"class":731},[167,23682,23683],{"class":177},"\"Phone的构造函数调用\"",[167,23685,3359],{"class":512},[167,23687,23688],{"class":169,"line":785},[167,23689,4231],{"class":512},[167,23691,23692,23695],{"class":169,"line":790},[167,23693,23694],{"class":173},"    ~Phone",[167,23696,4020],{"class":512},[167,23698,23699],{"class":169,"line":796},[167,23700,4074],{"class":512},[167,23702,23703,23705,23707,23710,23712],{"class":169,"line":802},[167,23704,5485],{"class":512},[167,23706,3242],{"class":731},[167,23708,23709],{"class":177},"\"Phone析构函数调用\"",[167,23711,3242],{"class":731},[167,23713,3264],{"class":512},[167,23715,23716],{"class":169,"line":808},[167,23717,4231],{"class":512},[167,23719,23720],{"class":169,"line":814},[167,23721,23722],{"class":2268},"    \u002F\u002F\n",[167,23724,23725],{"class":169,"line":820},[167,23726,23727],{"class":512},"    string m_PName;\n",[167,23729,23730],{"class":169,"line":826},[167,23731,6027],{"class":512},[167,23733,23734,23736],{"class":169,"line":832},[167,23735,16721],{"class":731},[167,23737,17197],{"class":173},[167,23739,23740],{"class":169,"line":837},[167,23741,3611],{"class":512},[167,23743,23744],{"class":169,"line":842},[167,23745,16743],{"class":731},[167,23747,23748],{"class":169,"line":860},[167,23749,19020],{"class":2268},[167,23751,23752,23754,23756,23758,23760,23762,23764,23767,23770,23772,23775,23778],{"class":169,"line":876},[167,23753,20545],{"class":173},[167,23755,898],{"class":512},[167,23757,16944],{"class":173},[167,23759,520],{"class":7246},[167,23761,2578],{"class":512},[167,23763,16944],{"class":173},[167,23765,23766],{"class":7246}," pname",[167,23768,23769],{"class":512},"):",[167,23771,17036],{"class":173},[167,23773,23774],{"class":512},"(name),m_phone.",[167,23776,23777],{"class":173},"m_PName",[167,23779,23780],{"class":512},"(pname) \n",[167,23782,23783],{"class":169,"line":887},[167,23784,4074],{"class":512},[167,23786,23787,23789,23791,23794],{"class":169,"line":892},[167,23788,5485],{"class":512},[167,23790,3242],{"class":731},[167,23792,23793],{"class":177},"\"Person的构造函数调用\"",[167,23795,3359],{"class":512},[167,23797,23798],{"class":169,"line":907},[167,23799,4231],{"class":512},[167,23801,23802,23804],{"class":169,"line":920},[167,23803,20578],{"class":173},[167,23805,4020],{"class":512},[167,23807,23808],{"class":169,"line":933},[167,23809,4074],{"class":512},[167,23811,23812,23814,23816,23819,23821],{"class":169,"line":946},[167,23813,5485],{"class":512},[167,23815,3242],{"class":731},[167,23817,23818],{"class":177},"\"Person析构函数调用\"",[167,23820,3242],{"class":731},[167,23822,3264],{"class":512},[167,23824,23825],{"class":169,"line":959},[167,23826,4231],{"class":512},[167,23828,23829],{"class":169,"line":964},[167,23830,9810],{"class":2268},[167,23832,23833],{"class":169,"line":987},[167,23834,16919],{"class":512},[167,23836,23837],{"class":169,"line":993},[167,23838,23839],{"class":2268},"    \u002F\u002F手机\n",[167,23841,23842],{"class":169,"line":998},[167,23843,23844],{"class":512},"    Phone m_Phone;\n",[167,23846,23847],{"class":169,"line":1010},[167,23848,6027],{"class":512},[167,23850,23851,23853,23855],{"class":169,"line":1022},[167,23852,7394],{"class":731},[167,23854,7618],{"class":173},[167,23856,4020],{"class":512},[167,23858,23859],{"class":169,"line":1027},[167,23860,3611],{"class":512},[167,23862,23863,23865,23867,23869,23871,23873,23876],{"class":169,"line":1032},[167,23864,21457],{"class":512},[167,23866,19],{"class":173},[167,23868,898],{"class":512},[167,23870,9946],{"class":177},[167,23872,2578],{"class":512},[167,23874,23875],{"class":177},"\"安卓\"",[167,23877,4755],{"class":512},[167,23879,23880,23882,23884,23887,23889,23892,23894],{"class":169,"line":1049},[167,23881,3616],{"class":512},[167,23883,3242],{"class":731},[167,23885,23886],{"class":512},"p.Name",[167,23888,3242],{"class":731},[167,23890,23891],{"class":177},"\"拿着：\"",[167,23893,3242],{"class":731},[167,23895,23896],{"class":512},"p.m_phone.m_PName;\n",[167,23898,23899],{"class":169,"line":10005},[167,23900,3630],{"class":512},[167,23902,23903,23905,23907],{"class":169,"line":10011},[167,23904,2216],{"class":731},[167,23906,848],{"class":173},[167,23908,4020],{"class":512},[167,23910,23911],{"class":169,"line":10038},[167,23912,3611],{"class":512},[167,23914,23915,23917],{"class":169,"line":10043},[167,23916,7663],{"class":173},[167,23918,7666],{"class":512},[167,23920,23921],{"class":169,"line":10049},[167,23922,3630],{"class":512},[19,23924,11053],{},[26,23926,23928],{"className":2202,"code":23927,"language":2204,"meta":32,"style":32},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[34,23929,23930,23935],{"__ignoreMap":32},[167,23931,23932],{"class":169,"line":170},[167,23933,23934],{"class":2268},"    \u002F\u002F不需要写这个：\n",[167,23936,23937],{"class":169,"line":191},[167,23938,23939],{"class":2268},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23941,23942],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,23944,23946],{"className":2202,"code":23945,"language":2204,"meta":32,"style":32},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[34,23947,23948],{"__ignoreMap":32},[167,23949,23950,23952,23955,23957,23960,23963],{"class":169,"line":170},[167,23951,21072],{"class":173},[167,23953,23954],{"class":512},"(string name.string pname):",[167,23956,17036],{"class":173},[167,23958,23959],{"class":512},"(name),",[167,23961,23962],{"class":173},"m_phone",[167,23964,23965],{"class":512},"(pname) {}\n",[19,23967,23968,23969,523,23972],{},"采用的是隐式转换法，实际为如下：\n",[34,23970,23971],{},"m_phone(pname)",[34,23973,23974],{},"Phone m_phone=pname",[19,23976,23977,23980],{},[2354,23978,23979],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23982,23983],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[494,23985,23987],{"id":23986},"_828静态对象","8.2.8静态对象",[19,23989,23990],{},"静态对象在成员对象前static，称为静态对象",[19,23992,23993],{},"静态对象分为两类：",[40,23995,23996],{},[43,23997,23998],{},"静态成员变量",[3205,24000,24001,24004,24007],{},[43,24002,24003],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[43,24005,24006],{},"②在编译阶段分配内存",[43,24008,24009],{},"③类内声明，类外初始化",[40,24011,24012],{"start":191},[43,24013,24014],{},"静态成员函数",[3205,24016,24017,24020],{},[43,24018,24019],{},"①所有对象共享同一个函数",[43,24021,24022],{},"②静态成员函数只能访问静态成员变量",[24024,24025,24027],"h4",{"id":24026},"_8281静态成员变量","8.2.8.1静态成员变量",[26,24029,24031],{"className":2202,"code":24030,"language":2204,"meta":32,"style":32},"#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",[34,24032,24033,24039,24049,24055,24059,24063,24068,24073,24078,24086,24090,24094,24098,24106,24110,24114,24119,24132,24136,24144,24148,24154],{"__ignoreMap":32},[167,24034,24035,24037],{"class":169,"line":170},[167,24036,3995],{"class":731},[167,24038,3998],{"class":177},[167,24040,24041,24043,24045,24047],{"class":169,"line":191},[167,24042,4003],{"class":731},[167,24044,4006],{"class":731},[167,24046,4009],{"class":173},[167,24048,3359],{"class":512},[167,24050,24051,24053],{"class":169,"line":205},[167,24052,16721],{"class":731},[167,24054,17197],{"class":173},[167,24056,24057],{"class":169,"line":219},[167,24058,3611],{"class":512},[167,24060,24061],{"class":169,"line":230},[167,24062,16743],{"class":731},[167,24064,24065],{"class":169,"line":241},[167,24066,24067],{"class":2268},"    \u002F\u002F非静态成员变量\n",[167,24069,24070],{"class":169,"line":261},[167,24071,24072],{"class":2268},"    \u002F\u002F int m_A;\n",[167,24074,24075],{"class":169,"line":773},[167,24076,24077],{"class":2268},"    \u002F\u002F定义静态成员变量\n",[167,24079,24080,24082,24084],{"class":169,"line":779},[167,24081,13048],{"class":731},[167,24083,4426],{"class":731},[167,24085,23418],{"class":512},[167,24087,24088],{"class":169,"line":785},[167,24089,741],{"emptyLinePlaceholder":740},[167,24091,24092],{"class":169,"line":790},[167,24093,741],{"emptyLinePlaceholder":740},[167,24095,24096],{"class":169,"line":796},[167,24097,6027],{"class":512},[167,24099,24100,24102,24104],{"class":169,"line":802},[167,24101,7394],{"class":731},[167,24103,7618],{"class":173},[167,24105,4020],{"class":512},[167,24107,24108],{"class":169,"line":808},[167,24109,3611],{"class":512},[167,24111,24112],{"class":169,"line":814},[167,24113,17339],{"class":512},[167,24115,24116],{"class":169,"line":820},[167,24117,24118],{"class":2268},"    \u002F\u002F输出类成员变量这块内存\n",[167,24120,24121,24123,24125,24128,24130],{"class":169,"line":826},[167,24122,3616],{"class":512},[167,24124,3242],{"class":731},[167,24126,24127],{"class":512},"p.m_A",[167,24129,3242],{"class":731},[167,24131,3264],{"class":512},[167,24133,24134],{"class":169,"line":832},[167,24135,3630],{"class":512},[167,24137,24138,24140,24142],{"class":169,"line":837},[167,24139,2216],{"class":731},[167,24141,848],{"class":173},[167,24143,4020],{"class":512},[167,24145,24146],{"class":169,"line":842},[167,24147,3611],{"class":512},[167,24149,24150,24152],{"class":169,"line":860},[167,24151,7663],{"class":173},[167,24153,4020],{"class":512},[167,24155,24156],{"class":169,"line":876},[167,24157,3630],{"class":512},[19,24159,24160],{},"此时输出是报错的：无法解析外部命令",[19,24162,24163],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,24165,24167],{"className":2202,"code":24166,"language":2204,"meta":32,"style":32},"#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",[34,24168,24169,24175,24185,24191,24195,24199,24204,24212,24216,24221,24236,24244,24248,24252,24257,24262,24274,24279,24290,24295,24300,24313,24317,24325,24329,24335],{"__ignoreMap":32},[167,24170,24171,24173],{"class":169,"line":170},[167,24172,3995],{"class":731},[167,24174,3998],{"class":177},[167,24176,24177,24179,24181,24183],{"class":169,"line":191},[167,24178,4003],{"class":731},[167,24180,4006],{"class":731},[167,24182,4009],{"class":173},[167,24184,3359],{"class":512},[167,24186,24187,24189],{"class":169,"line":205},[167,24188,16721],{"class":731},[167,24190,17197],{"class":173},[167,24192,24193],{"class":169,"line":219},[167,24194,3611],{"class":512},[167,24196,24197],{"class":169,"line":230},[167,24198,16743],{"class":731},[167,24200,24201],{"class":169,"line":241},[167,24202,24203],{"class":2268},"    \u002F\u002F类内声明\n",[167,24205,24206,24208,24210],{"class":169,"line":261},[167,24207,13048],{"class":731},[167,24209,4426],{"class":731},[167,24211,23418],{"class":512},[167,24213,24214],{"class":169,"line":773},[167,24215,6027],{"class":512},[167,24217,24218],{"class":169,"line":779},[167,24219,24220],{"class":2268},"\u002F\u002F类外初始化\n",[167,24222,24223,24225,24227,24230,24232,24234],{"class":169,"line":785},[167,24224,2216],{"class":731},[167,24226,17595],{"class":173},[167,24228,24229],{"class":512},"::m_A",[167,24231,523],{"class":731},[167,24233,2646],{"class":184},[167,24235,3359],{"class":512},[167,24237,24238,24240,24242],{"class":169,"line":790},[167,24239,7394],{"class":731},[167,24241,7618],{"class":173},[167,24243,4020],{"class":512},[167,24245,24246],{"class":169,"line":796},[167,24247,3611],{"class":512},[167,24249,24250],{"class":169,"line":802},[167,24251,17339],{"class":512},[167,24253,24254],{"class":169,"line":808},[167,24255,24256],{"class":2268},"    \u002F\u002F访问变量的原内存空间\n",[167,24258,24259],{"class":169,"line":814},[167,24260,24261],{"class":2268},"    \u002F\u002F100\n",[167,24263,24264,24266,24268,24270,24272],{"class":169,"line":820},[167,24265,3616],{"class":512},[167,24267,3242],{"class":731},[167,24269,24127],{"class":512},[167,24271,3242],{"class":731},[167,24273,3264],{"class":512},[167,24275,24276],{"class":169,"line":826},[167,24277,24278],{"class":512},"    Person p2;\n",[167,24280,24281,24284,24286,24288],{"class":169,"line":832},[167,24282,24283],{"class":512},"    p2.m_A",[167,24285,523],{"class":731},[167,24287,3776],{"class":184},[167,24289,3359],{"class":512},[167,24291,24292],{"class":169,"line":837},[167,24293,24294],{"class":2268},"    \u002F\u002F继续访问这片空间\n",[167,24296,24297],{"class":169,"line":842},[167,24298,24299],{"class":2268},"    \u002F\u002F200\n",[167,24301,24302,24304,24306,24309,24311],{"class":169,"line":860},[167,24303,3616],{"class":512},[167,24305,3242],{"class":731},[167,24307,24308],{"class":512},"p2.m_A",[167,24310,3242],{"class":731},[167,24312,3264],{"class":512},[167,24314,24315],{"class":169,"line":876},[167,24316,3630],{"class":512},[167,24318,24319,24321,24323],{"class":169,"line":887},[167,24320,2216],{"class":731},[167,24322,848],{"class":173},[167,24324,4020],{"class":512},[167,24326,24327],{"class":169,"line":892},[167,24328,3611],{"class":512},[167,24330,24331,24333],{"class":169,"line":907},[167,24332,7663],{"class":173},[167,24334,7666],{"class":512},[167,24336,24337],{"class":169,"line":920},[167,24338,3630],{"class":512},[19,24340,24341],{},[2354,24342,24343],{},"静态变量的访问",[26,24345,24347],{"className":2202,"code":24346,"language":2204,"meta":32,"style":32},"#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",[34,24348,24349,24355,24365,24371,24375,24379,24383,24391,24395,24400,24408,24412,24416,24430,24445,24453,24457,24462,24467,24472,24477,24489,24494,24499,24513,24530,24534,24542,24546,24552],{"__ignoreMap":32},[167,24350,24351,24353],{"class":169,"line":170},[167,24352,3995],{"class":731},[167,24354,3998],{"class":177},[167,24356,24357,24359,24361,24363],{"class":169,"line":191},[167,24358,4003],{"class":731},[167,24360,4006],{"class":731},[167,24362,4009],{"class":173},[167,24364,3359],{"class":512},[167,24366,24367,24369],{"class":169,"line":205},[167,24368,16721],{"class":731},[167,24370,17197],{"class":173},[167,24372,24373],{"class":169,"line":219},[167,24374,3611],{"class":512},[167,24376,24377],{"class":169,"line":230},[167,24378,16743],{"class":731},[167,24380,24381],{"class":169,"line":241},[167,24382,24203],{"class":2268},[167,24384,24385,24387,24389],{"class":169,"line":261},[167,24386,13048],{"class":731},[167,24388,4426],{"class":731},[167,24390,23418],{"class":512},[167,24392,24393],{"class":169,"line":773},[167,24394,17248],{"class":731},[167,24396,24397],{"class":169,"line":779},[167,24398,24399],{"class":2268},"    \u002F\u002F静态成员变量也是有访问权限的\n",[167,24401,24402,24404,24406],{"class":169,"line":785},[167,24403,13048],{"class":731},[167,24405,4426],{"class":731},[167,24407,23425],{"class":512},[167,24409,24410],{"class":169,"line":790},[167,24411,6027],{"class":512},[167,24413,24414],{"class":169,"line":796},[167,24415,24220],{"class":2268},[167,24417,24418,24420,24422,24424,24426,24428],{"class":169,"line":802},[167,24419,2216],{"class":731},[167,24421,17595],{"class":173},[167,24423,24229],{"class":512},[167,24425,523],{"class":731},[167,24427,2646],{"class":184},[167,24429,3359],{"class":512},[167,24431,24432,24434,24436,24439,24441,24443],{"class":169,"line":808},[167,24433,2216],{"class":731},[167,24435,17595],{"class":173},[167,24437,24438],{"class":512},"::m_B",[167,24440,523],{"class":731},[167,24442,2900],{"class":184},[167,24444,3359],{"class":512},[167,24446,24447,24449,24451],{"class":169,"line":814},[167,24448,7394],{"class":731},[167,24450,7687],{"class":173},[167,24452,4020],{"class":512},[167,24454,24455],{"class":169,"line":820},[167,24456,3611],{"class":512},[167,24458,24459],{"class":169,"line":826},[167,24460,24461],{"class":2268},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[167,24463,24464],{"class":169,"line":832},[167,24465,24466],{"class":2268},"    \u002F\u002F静态成员变量有两种访问方式：\n",[167,24468,24469],{"class":169,"line":837},[167,24470,24471],{"class":2268},"    \u002F\u002F1.通过对象进行访问\n",[167,24473,24474],{"class":169,"line":842},[167,24475,24476],{"class":512},"    Person p;  \n",[167,24478,24479,24481,24483,24485,24487],{"class":169,"line":860},[167,24480,3616],{"class":512},[167,24482,3242],{"class":731},[167,24484,24127],{"class":512},[167,24486,3242],{"class":731},[167,24488,3264],{"class":512},[167,24490,24491],{"class":169,"line":876},[167,24492,24493],{"class":2268},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[167,24495,24496],{"class":169,"line":887},[167,24497,24498],{"class":2268},"    \u002F\u002F2.通过类名进行访问\n",[167,24500,24501,24503,24505,24507,24509,24511],{"class":169,"line":892},[167,24502,3616],{"class":512},[167,24504,3242],{"class":731},[167,24506,21072],{"class":173},[167,24508,24229],{"class":512},[167,24510,3242],{"class":731},[167,24512,3264],{"class":512},[167,24514,24515,24517,24519,24521,24523,24525,24527],{"class":169,"line":907},[167,24516,3616],{"class":512},[167,24518,3242],{"class":731},[167,24520,21072],{"class":173},[167,24522,24438],{"class":512},[167,24524,3242],{"class":731},[167,24526,3307],{"class":512},[167,24528,24529],{"class":2268}," \u002F\u002F没有访问权限，报错\n",[167,24531,24532],{"class":169,"line":920},[167,24533,3630],{"class":512},[167,24535,24536,24538,24540],{"class":169,"line":933},[167,24537,2216],{"class":731},[167,24539,848],{"class":173},[167,24541,4020],{"class":512},[167,24543,24544],{"class":169,"line":946},[167,24545,3611],{"class":512},[167,24547,24548,24550],{"class":169,"line":959},[167,24549,7732],{"class":173},[167,24551,7666],{"class":512},[167,24553,24554],{"class":169,"line":964},[167,24555,3630],{"class":512},[24024,24557,24559],{"id":24558},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24561,24562],{},"1.静态成员函数定义与访问",[26,24564,24566],{"className":2202,"code":24565,"language":2204,"meta":32,"style":32},"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",[34,24567,24568,24574,24578,24582,24587,24598,24602,24616,24620,24624,24632,24636,24641,24646,24650,24658,24663,24673],{"__ignoreMap":32},[167,24569,24570,24572],{"class":169,"line":170},[167,24571,16721],{"class":731},[167,24573,17197],{"class":173},[167,24575,24576],{"class":169,"line":191},[167,24577,3611],{"class":512},[167,24579,24580],{"class":169,"line":205},[167,24581,16743],{"class":731},[167,24583,24584],{"class":169,"line":219},[167,24585,24586],{"class":2268},"    \u002F\u002F在公共权限下定义静态成员函数\n",[167,24588,24589,24591,24594,24596],{"class":169,"line":230},[167,24590,13048],{"class":731},[167,24592,24593],{"class":731}," void",[167,24595,13413],{"class":173},[167,24597,4020],{"class":512},[167,24599,24600],{"class":169,"line":241},[167,24601,4074],{"class":512},[167,24603,24604,24607,24609,24612,24614],{"class":169,"line":261},[167,24605,24606],{"class":512},"        coout",[167,24608,3242],{"class":731},[167,24610,24611],{"class":177},"\"静态成员函数的调用\"",[167,24613,3242],{"class":731},[167,24615,3264],{"class":512},[167,24617,24618],{"class":169,"line":773},[167,24619,4231],{"class":512},[167,24621,24622],{"class":169,"line":779},[167,24623,6027],{"class":512},[167,24625,24626,24628,24630],{"class":169,"line":785},[167,24627,7394],{"class":731},[167,24629,7618],{"class":173},[167,24631,4020],{"class":512},[167,24633,24634],{"class":169,"line":790},[167,24635,3611],{"class":512},[167,24637,24638],{"class":169,"line":796},[167,24639,24640],{"class":2268},"    \u002F\u002F静态成员函数的调用方式:\n",[167,24642,24643],{"class":169,"line":802},[167,24644,24645],{"class":2268},"    \u002F\u002F1.通过对象访问\n",[167,24647,24648],{"class":169,"line":808},[167,24649,17339],{"class":512},[167,24651,24652,24654,24656],{"class":169,"line":814},[167,24653,17892],{"class":512},[167,24655,13579],{"class":173},[167,24657,7666],{"class":512},[167,24659,24660],{"class":169,"line":820},[167,24661,24662],{"class":2268},"    \u002F\u002F2.通过类名访问\n",[167,24664,24665,24667,24669,24671],{"class":169,"line":826},[167,24666,20545],{"class":173},[167,24668,19758],{"class":512},[167,24670,13579],{"class":173},[167,24672,7666],{"class":512},[167,24674,24675],{"class":169,"line":832},[167,24676,3630],{"class":512},[40,24678,24679],{"start":191},[43,24680,24681],{},"静态成员函数只能访问静态成员变量",[26,24683,24685],{"className":2202,"code":24684,"language":2204,"meta":32,"style":32},"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",[34,24686,24687,24693,24697,24701,24705,24715,24719,24733,24738,24750,24754,24765,24775,24779,24783,24787,24797,24801,24814,24818,24822,24826,24830,24844,24852,24856,24860,24864,24868,24876,24880,24890,24895,24899,24907,24911,24917],{"__ignoreMap":32},[167,24688,24689,24691],{"class":169,"line":170},[167,24690,16721],{"class":731},[167,24692,17197],{"class":173},[167,24694,24695],{"class":169,"line":191},[167,24696,3611],{"class":512},[167,24698,24699],{"class":169,"line":205},[167,24700,16743],{"class":731},[167,24702,24703],{"class":169,"line":219},[167,24704,24586],{"class":2268},[167,24706,24707,24709,24711,24713],{"class":169,"line":230},[167,24708,13048],{"class":731},[167,24710,24593],{"class":731},[167,24712,13413],{"class":173},[167,24714,4020],{"class":512},[167,24716,24717],{"class":169,"line":241},[167,24718,4074],{"class":512},[167,24720,24721,24724,24726,24728,24730],{"class":169,"line":261},[167,24722,24723],{"class":512},"        m_A",[167,24725,523],{"class":731},[167,24727,981],{"class":184},[167,24729,2265],{"class":512},[167,24731,24732],{"class":2268}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[167,24734,24735],{"class":169,"line":773},[167,24736,24737],{"class":2268},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[167,24739,24740,24742,24744,24746,24748],{"class":169,"line":779},[167,24741,24606],{"class":512},[167,24743,3242],{"class":731},[167,24745,24611],{"class":177},[167,24747,3242],{"class":731},[167,24749,3264],{"class":512},[167,24751,24752],{"class":169,"line":785},[167,24753,4231],{"class":512},[167,24755,24756,24758,24760,24762],{"class":169,"line":790},[167,24757,13048],{"class":731},[167,24759,4426],{"class":731},[167,24761,17474],{"class":512},[167,24763,24764],{"class":2268}," \u002F\u002F静态成员变量\n",[167,24766,24767,24769,24772],{"class":169,"line":796},[167,24768,4029],{"class":731},[167,24770,24771],{"class":512}," m_B;",[167,24773,24774],{"class":2268}," \u002F\u002F非静态成员变量\n",[167,24776,24777],{"class":169,"line":802},[167,24778,741],{"emptyLinePlaceholder":740},[167,24780,24781],{"class":169,"line":808},[167,24782,17248],{"class":731},[167,24784,24785],{"class":169,"line":814},[167,24786,24399],{"class":2268},[167,24788,24789,24791,24793,24795],{"class":169,"line":820},[167,24790,13048],{"class":731},[167,24792,24593],{"class":731},[167,24794,15645],{"class":173},[167,24796,4020],{"class":512},[167,24798,24799],{"class":169,"line":826},[167,24800,4074],{"class":512},[167,24802,24803,24805,24807,24810,24812],{"class":169,"line":832},[167,24804,5485],{"class":512},[167,24806,3242],{"class":731},[167,24808,24809],{"class":177},"\"这是私有权限下的静态函数调用\"",[167,24811,3242],{"class":731},[167,24813,3264],{"class":512},[167,24815,24816],{"class":169,"line":837},[167,24817,4231],{"class":512},[167,24819,24820],{"class":169,"line":842},[167,24821,741],{"emptyLinePlaceholder":740},[167,24823,24824],{"class":169,"line":860},[167,24825,741],{"emptyLinePlaceholder":740},[167,24827,24828],{"class":169,"line":876},[167,24829,6027],{"class":512},[167,24831,24832,24834,24836,24838,24840,24842],{"class":169,"line":887},[167,24833,2216],{"class":731},[167,24835,17595],{"class":173},[167,24837,24229],{"class":512},[167,24839,523],{"class":731},[167,24841,1154],{"class":184},[167,24843,3359],{"class":512},[167,24845,24846,24848,24850],{"class":169,"line":892},[167,24847,7394],{"class":731},[167,24849,7618],{"class":173},[167,24851,4020],{"class":512},[167,24853,24854],{"class":169,"line":907},[167,24855,3611],{"class":512},[167,24857,24858],{"class":169,"line":920},[167,24859,24640],{"class":2268},[167,24861,24862],{"class":169,"line":933},[167,24863,24645],{"class":2268},[167,24865,24866],{"class":169,"line":946},[167,24867,17339],{"class":512},[167,24869,24870,24872,24874],{"class":169,"line":959},[167,24871,17892],{"class":512},[167,24873,13579],{"class":173},[167,24875,7666],{"class":512},[167,24877,24878],{"class":169,"line":964},[167,24879,24662],{"class":2268},[167,24881,24882,24884,24886,24888],{"class":169,"line":987},[167,24883,20545],{"class":173},[167,24885,19758],{"class":512},[167,24887,13579],{"class":173},[167,24889,7666],{"class":512},[167,24891,24892],{"class":169,"line":993},[167,24893,24894],{"class":2268},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[167,24896,24897],{"class":169,"line":998},[167,24898,3630],{"class":512},[167,24900,24901,24903,24905],{"class":169,"line":1010},[167,24902,2216],{"class":731},[167,24904,848],{"class":173},[167,24906,4020],{"class":512},[167,24908,24909],{"class":169,"line":1022},[167,24910,3611],{"class":512},[167,24912,24913,24915],{"class":169,"line":1027},[167,24914,7663],{"class":173},[167,24916,7666],{"class":512},[167,24918,24919],{"class":169,"line":1032},[167,24920,3630],{"class":512},[494,24922,24924],{"id":24923},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24024,24926,24928],{"id":24927},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24930,24931],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24933,24934],{},"只有非静态成员变量才属于类的对象上",[24936,24937,24939],"h5",{"id":24938},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,24941,24943],{"className":2202,"code":24942,"language":2204,"meta":32,"style":32},"#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",[34,24944,24945,24952,24962,24968,24972,24976,24980,24988,24992,24996,25019,25023,25031,25035,25041],{"__ignoreMap":32},[167,24946,24947,24949],{"class":169,"line":170},[167,24948,3995],{"class":731},[167,24950,24951],{"class":177},"\u003Ciostraem>\n",[167,24953,24954,24956,24958,24960],{"class":169,"line":191},[167,24955,4003],{"class":731},[167,24957,4006],{"class":731},[167,24959,4009],{"class":173},[167,24961,3359],{"class":512},[167,24963,24964,24966],{"class":169,"line":205},[167,24965,16721],{"class":731},[167,24967,17197],{"class":173},[167,24969,24970],{"class":169,"line":219},[167,24971,3611],{"class":512},[167,24973,24974],{"class":169,"line":230},[167,24975,741],{"emptyLinePlaceholder":740},[167,24977,24978],{"class":169,"line":241},[167,24979,6027],{"class":512},[167,24981,24982,24984,24986],{"class":169,"line":261},[167,24983,7394],{"class":731},[167,24985,7618],{"class":173},[167,24987,4020],{"class":512},[167,24989,24990],{"class":169,"line":773},[167,24991,3611],{"class":512},[167,24993,24994],{"class":169,"line":779},[167,24995,17339],{"class":512},[167,24997,24998,25000,25002,25005,25007,25010,25012,25014,25016],{"class":169,"line":785},[167,24999,3616],{"class":512},[167,25001,3242],{"class":731},[167,25003,25004],{"class":177},"\"size of p=\"",[167,25006,3242],{"class":731},[167,25008,25009],{"class":173},"sizeoif",[167,25011,8569],{"class":512},[167,25013,3242],{"class":731},[167,25015,3307],{"class":512},[167,25017,25018],{"class":2268}," \u002F\u002F查看这个空类的占用的内存空间\n",[167,25020,25021],{"class":169,"line":790},[167,25022,3630],{"class":512},[167,25024,25025,25027,25029],{"class":169,"line":796},[167,25026,2216],{"class":731},[167,25028,848],{"class":173},[167,25030,4020],{"class":512},[167,25032,25033],{"class":169,"line":802},[167,25034,3611],{"class":512},[167,25036,25037,25039],{"class":169,"line":808},[167,25038,7663],{"class":173},[167,25040,7666],{"class":512},[167,25042,25043],{"class":169,"line":814},[167,25044,3630],{"class":512},[19,25046,25047],{},"输出结果为：size of p=1",[19,25049,25050],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25052,25053],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24936,25055,25057],{"id":25056},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,25059,25061],{"className":2202,"code":25060,"language":2204,"meta":32,"style":32},"#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",[34,25062,25063,25069,25079,25087,25091,25100,25104,25112,25116,25120,25139,25143,25147,25155,25159,25165],{"__ignoreMap":32},[167,25064,25065,25067],{"class":169,"line":170},[167,25066,3995],{"class":731},[167,25068,3998],{"class":177},[167,25070,25071,25073,25075,25077],{"class":169,"line":191},[167,25072,4003],{"class":731},[167,25074,4006],{"class":731},[167,25076,4009],{"class":173},[167,25078,3359],{"class":512},[167,25080,25081,25083,25085],{"class":169,"line":205},[167,25082,16721],{"class":731},[167,25084,17595],{"class":173},[167,25086,4710],{"class":512},[167,25088,25089],{"class":169,"line":219},[167,25090,3611],{"class":512},[167,25092,25093,25095,25097],{"class":169,"line":230},[167,25094,4029],{"class":731},[167,25096,17474],{"class":512},[167,25098,25099],{"class":2268},"\u002F\u002F非静态成员变量\n",[167,25101,25102],{"class":169,"line":241},[167,25103,6027],{"class":512},[167,25105,25106,25108,25110],{"class":169,"line":261},[167,25107,7394],{"class":731},[167,25109,7618],{"class":173},[167,25111,4020],{"class":512},[167,25113,25114],{"class":169,"line":773},[167,25115,3611],{"class":512},[167,25117,25118],{"class":169,"line":779},[167,25119,17339],{"class":512},[167,25121,25122,25124,25126,25128,25130,25132,25134,25136],{"class":169,"line":785},[167,25123,3616],{"class":512},[167,25125,3242],{"class":731},[167,25127,25004],{"class":177},[167,25129,3438],{"class":731},[167,25131,8569],{"class":512},[167,25133,3242],{"class":731},[167,25135,3307],{"class":512},[167,25137,25138],{"class":2268}," \u002F\u002F查看不是空对象时占用多少内存\n",[167,25140,25141],{"class":169,"line":790},[167,25142,741],{"emptyLinePlaceholder":740},[167,25144,25145],{"class":169,"line":796},[167,25146,3630],{"class":512},[167,25148,25149,25151,25153],{"class":169,"line":802},[167,25150,2216],{"class":731},[167,25152,848],{"class":173},[167,25154,4020],{"class":512},[167,25156,25157],{"class":169,"line":808},[167,25158,3611],{"class":512},[167,25160,25161,25163],{"class":169,"line":814},[167,25162,7663],{"class":173},[167,25164,7666],{"class":512},[167,25166,25167],{"class":169,"line":820},[167,25168,3630],{"class":512},[19,25170,25171],{},"输出结果：size of p=4",[19,25173,25174],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[40,25176,25177],{},[43,25178,25179],{},"如果加上非静态成员变量，Person类修改如下",[26,25181,25183],{"className":2202,"code":25182,"language":2204,"meta":32,"style":32},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[34,25184,25185,25191,25195,25201,25209,25213,25218],{"__ignoreMap":32},[167,25186,25187,25189],{"class":169,"line":170},[167,25188,16721],{"class":731},[167,25190,17197],{"class":173},[167,25192,25193],{"class":169,"line":191},[167,25194,3611],{"class":512},[167,25196,25197,25199],{"class":169,"line":205},[167,25198,4029],{"class":731},[167,25200,23418],{"class":512},[167,25202,25203,25205,25207],{"class":169,"line":219},[167,25204,13048],{"class":731},[167,25206,4426],{"class":731},[167,25208,23425],{"class":512},[167,25210,25211],{"class":169,"line":230},[167,25212,6027],{"class":512},[167,25214,25215],{"class":169,"line":241},[167,25216,25217],{"class":2268},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[167,25219,25220,25222,25224,25226,25228,25230],{"class":169,"line":261},[167,25221,2216],{"class":731},[167,25223,17595],{"class":173},[167,25225,24438],{"class":512},[167,25227,523],{"class":731},[167,25229,1154],{"class":184},[167,25231,3359],{"class":512},[19,25233,25234],{},"输出结果：4",[19,25236,25237],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[40,25239,25240],{"start":191},[43,25241,25242],{},"加上非静态成员函数",[26,25244,25246],{"className":2202,"code":25245,"language":2204,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[34,25247,25248,25255,25259,25265,25273,25277,25281,25285],{"__ignoreMap":32},[167,25249,25250,25252],{"class":169,"line":170},[167,25251,16721],{"class":731},[167,25253,25254],{"class":173},"  Person\n",[167,25256,25257],{"class":169,"line":191},[167,25258,3611],{"class":512},[167,25260,25261,25263],{"class":169,"line":205},[167,25262,4029],{"class":731},[167,25264,23418],{"class":512},[167,25266,25267,25269,25271],{"class":169,"line":219},[167,25268,16936],{"class":731},[167,25270,13413],{"class":173},[167,25272,4020],{"class":512},[167,25274,25275],{"class":169,"line":230},[167,25276,4074],{"class":512},[167,25278,25279],{"class":169,"line":241},[167,25280,741],{"emptyLinePlaceholder":740},[167,25282,25283],{"class":169,"line":261},[167,25284,4231],{"class":512},[167,25286,25287],{"class":169,"line":773},[167,25288,6027],{"class":512},[19,25290,25291],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[40,25293,25294],{"start":205},[43,25295,25296],{},"加上静态成员函数",[26,25298,25300],{"className":2202,"code":25299,"language":2204,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[34,25301,25302,25308,25312,25318,25326,25330,25334,25338,25349,25353,25357,25361],{"__ignoreMap":32},[167,25303,25304,25306],{"class":169,"line":170},[167,25305,16721],{"class":731},[167,25307,25254],{"class":173},[167,25309,25310],{"class":169,"line":191},[167,25311,3611],{"class":512},[167,25313,25314,25316],{"class":169,"line":205},[167,25315,4029],{"class":731},[167,25317,23418],{"class":512},[167,25319,25320,25322,25324],{"class":169,"line":219},[167,25321,16936],{"class":731},[167,25323,13413],{"class":173},[167,25325,4020],{"class":512},[167,25327,25328],{"class":169,"line":230},[167,25329,4074],{"class":512},[167,25331,25332],{"class":169,"line":241},[167,25333,741],{"emptyLinePlaceholder":740},[167,25335,25336],{"class":169,"line":261},[167,25337,4231],{"class":512},[167,25339,25340,25342,25344,25347],{"class":169,"line":773},[167,25341,13048],{"class":731},[167,25343,24593],{"class":731},[167,25345,25346],{"class":173}," func1",[167,25348,4020],{"class":512},[167,25350,25351],{"class":169,"line":779},[167,25352,4074],{"class":512},[167,25354,25355],{"class":169,"line":785},[167,25356,741],{"emptyLinePlaceholder":740},[167,25358,25359],{"class":169,"line":790},[167,25360,4231],{"class":512},[167,25362,25363],{"class":169,"line":796},[167,25364,6027],{"class":512},[19,25366,25234],{},[19,25368,25369],{},"解释：静态成员函数也不属于类上",[2113,25371,9704],{},{"title":32,"searchDepth":191,"depth":191,"links":25373},[25374,25380],{"id":16672,"depth":191,"text":16673,"children":25375},[25376,25377,25378,25379],{"id":16676,"depth":205,"text":16677},{"id":17400,"depth":205,"text":17401},{"id":17572,"depth":205,"text":17573},{"id":18031,"depth":205,"text":18032},{"id":20403,"depth":191,"text":20404,"children":25381},[25382,25383,25384,25385,25386,25387,25388,25389,25390],{"id":20415,"depth":205,"text":20416},{"id":20708,"depth":205,"text":20709},{"id":21199,"depth":205,"text":21200},{"id":22296,"depth":205,"text":22297},{"id":22719,"depth":205,"text":22720},{"id":23198,"depth":205,"text":23199},{"id":23573,"depth":205,"text":23574},{"id":23986,"depth":205,"text":23987},{"id":24923,"depth":205,"text":24924},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16637,"description":25391},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25398,"title":2204,"body":25399,"description":25403,"extension":2140,"meta":25404,"navigation":740,"path":25406,"seo":25407,"stem":25408,"__hash__":25409},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25400,"toc":25401},[],{"title":32,"searchDepth":191,"depth":191,"links":25402},[],null,{"category":25405},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2204,"description":25403},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25411,"title":25412,"body":25413,"description":32,"extension":2140,"meta":25999,"navigation":740,"path":26000,"seo":26001,"stem":26002,"__hash__":26003},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25414,"toc":25981},[25415,25418,25422,25425,25428,25431,25449,25454,25457,25460,25463,25466,25471,25474,25479,25482,25485,25489,25492,25495,25501,25504,25522,25526,25530,25533,25538,25541,25545,25548,25561,25564,25568,25571,25574,25577,25602,25605,25614,25625,25640,25672,25676,25683,25691,25695,25698,25701,25706,25710,25713,25716,25721,25724,25728,25731,25734,25739,25742,25746,25751,25755,25821,25825,25828,25831,25834,25837,25840,25846,25863,25866,25880,25889,25893,25896,25899,25904,25907,25912,25917,25920,25923,25928,25933,25936,25941,25946,25949,25954,25959,25962,25965,25970,25973,25978],[10,25416,25412],{"id":25417},"_1强化学习基本认识",[14,25419,25421],{"id":25420},"_11什么是强化学习","1.1.什么是强化学习",[19,25423,25424],{},"强化学习有两部分组成：智能体和环境；",[19,25426,25427],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25429,25430],{},"强化学习与监督学习的区别:",[40,25432,25433,25436,25439,25442],{},[43,25434,25435],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[43,25437,25438],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[43,25440,25441],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[43,25443,25444,25445,25448],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2354,25446,25447],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25450,25451],{},[3528,25452],{"alt":32,"src":25453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25455,25456],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25458,25459],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25461,25462],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25464,25465],{},"获取奖励",[19,25467,25468],{},[3528,25469],{"alt":32,"src":25470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25472,25473],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25475,25476],{},[3528,25477],{"alt":32,"src":25478},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25480,25481],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25483,25484],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25486,25488],{"id":25487},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25490,25491],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25493,25494],{},"具身智能中的应用",[19,25496,25497,25500],{},[2354,25498,25499],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25502,25503],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25505,25506,25507,25510,25511,25514,25515,25518,25519],{},"机器人是",[2354,25508,25509],{},"躯体","，深度学习是",[2354,25512,25513],{},"神经元****网络","，VLA是",[2354,25516,25517],{},"通用的行为逻辑","，而强化学习是",[2354,25520,25521],{},"教练",[14,25523,25525],{"id":25524},"_13序列决策","1.3.序列决策",[494,25527,25529],{"id":25528},"_131智能体与环境","1.3.1.智能体与环境",[19,25531,25532],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25534,25535],{},[3528,25536],{"alt":32,"src":25537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25539,25540],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[494,25542,25544],{"id":25543},"_132奖励","1.3.2.奖励",[19,25546,25547],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25549,25550,25551,25560],{},"取某个策略的表现如何。强化学习的目的就是",[2354,25552,25553,25554,25559],{},"最大化",[2354,25555,25556],{},[2354,25557,25558],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25562,25563],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[494,25565,25567],{"id":25566},"_133序列决策","1.3.3.序列决策",[19,25569,25570],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25572,25573],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25575,25576],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25578,25579,25583,25584,25586,25587,25589,25590,25592,25593,15822,25596,15822,25599],{},[25580,25581,25582],"em",{},"Ht"," = ",[25580,25585,2796],{},"1*, a",[25580,25588,2418],{},", r",[25580,25591,2418],{},", . . . ,* ",[25580,25594,25595],{},"ot",[25580,25597,25598],{},", at ,",[25580,25600,25601],{},"rt",[19,25603,25604],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25606,25607,25583,25610,3716,25612,2629],{},[25580,25608,25609],{},"st",[25580,25611,2262],{},[25580,25613,25582],{},[19,25615,25616,25617,25620,25621,25624],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2354,25618,25619],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2354,25622,25623],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25626,25627,25628,25631,25632,25635,25636,25639],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2354,25629,25630],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2354,25633,25634],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25580,25637,25638],{},"S, A, T, R, Ω, O, γ",")。",[19,25641,25642,25643,25645,25646,25648,25649,898,25651,25654,25655,25657,25658,898,25661,25664,25665,25667,25668,25671],{},"其中 ",[25580,25644,2889],{}," 表示状态空间，为隐变量，",[25580,25647,2433],{}," 为动作空间，",[25580,25650,2914],{},[25580,25652,25653],{},"s ′ |s, a",") 为状态转移概率，",[25580,25656,2864],{}," 为奖励函数，",[25580,25659,25660],{},"Ω",[25580,25662,25663],{},"o|s, a",") 为观测概率，",[25580,25666,2790],{}," 为观测空间，",[25580,25669,25670],{},"γ"," 为折扣因子。",[14,25673,25675],{"id":25674},"_14动作空间","1.4.动作空间",[19,25677,25678,25679,25682],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2354,25680,25681],{},"动作空间"," ，动作空间分为:",[40,25684,25685,25688],{},[43,25686,25687],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[43,25689,25690],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25692,25694],{"id":25693},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25696,25697],{},"由策略、价值函数、模型三部分组成",[19,25699,25700],{},"这三者组成马尔可夫决策过程",[19,25702,25703],{},[3528,25704],{"alt":32,"src":25705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[494,25707,25709],{"id":25708},"_151策略","1.5.1.策略",[19,25711,25712],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25714,25715],{},"策略可分为两种：",[19,25717,25718],{},[3528,25719],{"alt":32,"src":25720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25722,25723],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[494,25725,25727],{"id":25726},"_152价值函数","1.5.2.价值函数",[19,25729,25730],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25732,25733],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25735,25736],{},[3528,25737],{"alt":32,"src":25738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25740,25741],{},"进入某个状态采取的最优动作可以通过Q函数得到",[494,25743,25745],{"id":25744},"_153模型","1.5.3.模型",[19,25747,25748],{},[3528,25749],{"alt":32,"src":25750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25752,25754],{"id":25753},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[68,25756,25757,25767],{},[71,25758,25759],{},[74,25760,25761,25764],{},[77,25762,25763],{"align":79},"类型",[77,25765,25766],{"align":79},"特点",[85,25768,25769,25779,25789,25799,25811],{},[74,25770,25771,25776],{},[90,25772,25773],{"align":79},[2354,25774,25775],{},"基于价值的智能体",[90,25777,25778],{"align":79},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[74,25780,25781,25786],{},[90,25782,25783],{"align":79},[2354,25784,25785],{},"基于策略的智能体",[90,25787,25788],{"align":79},"直接学习策略，没有学习价值函数",[74,25790,25791,25796],{},[90,25792,25793],{"align":79},[2354,25794,25795],{},"演员-评论员智能体",[90,25797,25798],{"align":79},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[74,25800,25801,25806],{},[90,25802,25803],{"align":79},[2354,25804,25805],{},"有模型强化学习智能体",[90,25807,25808],{"align":79},[3528,25809],{"alt":32,"src":25810},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[74,25812,25813,25818],{},[90,25814,25815],{"align":79},[2354,25816,25817],{},"免模型强化学习智能体",[90,25819,25820],{"align":79},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25822,25824],{"id":25823},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25826,25827],{},"学习和规划是序列决策的两个基本问题",[19,25829,25830],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25832,25833],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25835,25836],{},"强化学习用到的库：Gym",[19,25838,25839],{},"Gym可以检验强化学习算法的优劣",[19,25841,25842,25845],{},[2354,25843,25844],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,25847,25849],{"className":161,"code":25848,"language":163,"meta":32,"style":32},"pip install gym==0.25.2\n",[34,25850,25851],{"__ignoreMap":32},[167,25852,25853,25855,25857,25860],{"class":169,"line":170},[167,25854,331],{"class":173},[167,25856,181],{"class":177},[167,25858,25859],{"class":177}," gym==",[167,25861,25862],{"class":184},"0.25.2\n",[19,25864,25865],{},"显示图形界面需要",[26,25867,25869],{"className":161,"code":25868,"language":163,"meta":32,"style":32},"pip install pygame\n",[34,25870,25871],{"__ignoreMap":32},[167,25872,25873,25875,25877],{"class":169,"line":170},[167,25874,331],{"class":173},[167,25876,181],{"class":177},[167,25878,25879],{"class":177}," pygame\n",[19,25881,25882,25883],{},"有关Gym库的相关文档介绍：",[2439,25884,25888],{"href":25885,"rel":25886},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25887],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25890,25892],{"id":25891},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25894,25895],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25897,25898],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25900,25901],{},[3528,25902],{"alt":32,"src":25903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25905,25906],{},"折扣率需要自己来设定",[19,25908,25909],{},[3528,25910],{"alt":32,"src":25911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[40,25913,25914],{},[43,25915,25916],{},"状态转移函数：",[19,25918,25919],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25921,25922],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25924,25925],{},[3528,25926],{"alt":32,"src":25927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[40,25929,25930],{"start":191},[43,25931,25932],{},"动作价值函数：",[19,25934,25935],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25937,25938],{},[3528,25939],{"alt":32,"src":25940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[40,25942,25943],{"start":205},[43,25944,25945],{},"最优动作价值函数：",[19,25947,25948],{},"这个函数是对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,25950,25951],{},[3528,25952],{"alt":32,"src":25953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[40,25955,25956],{"start":219},[43,25957,25958],{},"状态价值函数:",[19,25960,25961],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25963,25964],{},"它衡量的是“一个具体动作”的长期价值",[19,25966,25967],{},[3528,25968],{"alt":32,"src":25969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25971,25972],{},"几个价值函数之间的比较：",[19,25974,25975],{},[3528,25976],{"alt":32,"src":25977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2113,25979,25980],{},"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":32,"searchDepth":191,"depth":191,"links":25982},[25983,25984,25985,25990,25991,25996,25997,25998],{"id":25420,"depth":191,"text":25421},{"id":25487,"depth":191,"text":25488},{"id":25524,"depth":191,"text":25525,"children":25986},[25987,25988,25989],{"id":25528,"depth":205,"text":25529},{"id":25543,"depth":205,"text":25544},{"id":25566,"depth":205,"text":25567},{"id":25674,"depth":191,"text":25675},{"id":25693,"depth":191,"text":25694,"children":25992},[25993,25994,25995],{"id":25708,"depth":205,"text":25709},{"id":25726,"depth":205,"text":25727},{"id":25744,"depth":205,"text":25745},{"id":25753,"depth":191,"text":25754},{"id":25823,"depth":191,"text":25824},{"id":25891,"depth":191,"text":25892},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25412,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26005,"title":26006,"body":26007,"description":26014,"extension":2140,"meta":26025,"navigation":740,"path":26026,"seo":26027,"stem":26028,"__hash__":26029},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26008,"toc":26023},[26009,26012,26015,26020],[10,26010,26006],{"id":26011},"_2马尔可夫决策过程",[19,26013,26014],{},"这是强化学习的基本框架",[19,26016,26017],{},[3528,26018],{"alt":32,"src":26019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26021,26022],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":32,"searchDepth":191,"depth":191,"links":26024},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26006,"description":26014},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26031,"title":26032,"body":26033,"description":32,"extension":2140,"meta":26149,"navigation":740,"path":26150,"seo":26151,"stem":26152,"__hash__":26153},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26034,"toc":26144},[26035,26038,26042,26045,26050,26055,26058,26063,26066,26071,26074,26078,26083,26086,26091,26096,26101,26104,26108,26113,26116,26121,26126,26131,26136,26139],[10,26036,26032],{"id":26037},"_3动作价值函数",[14,26039,26041],{"id":26040},"_31dqn","3.1.DQN",[19,26043,26044],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26046,26047],{},[3528,26048],{"alt":32,"src":26049},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26051,26052],{},[3528,26053],{"alt":32,"src":26054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26056,26057],{},"DQN算法的描述：",[19,26059,26060],{},[3528,26061],{"alt":32,"src":26062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26064,26065],{},"这里的Dense指的是全连接层",[19,26067,26068],{},[3528,26069],{"alt":32,"src":26070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26072,26073],{},"当前观测的状态为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,26075,26077],{"id":26076},"_32dqn的举例","3.2.DQN的举例",[19,26079,26080],{},[3528,26081],{"alt":32,"src":26082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26084,26085],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26087,26088],{},[3528,26089],{"alt":32,"src":26090},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26092,26093],{},[3528,26094],{"alt":32,"src":26095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26097,26098],{},[3528,26099],{"alt":32,"src":26100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26102,26103],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26105,26107],{"id":26106},"_33td算法","3.3.TD算法",[19,26109,26110],{},[3528,26111],{"alt":32,"src":26112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26114,26115],{},"强化学习TD算法公式的粗略解释：",[19,26117,26118],{},[3528,26119],{"alt":32,"src":26120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26122,26123],{},[3528,26124],{"alt":32,"src":26125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26127,26128],{},[3528,26129],{"alt":32,"src":26130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26132,26133],{},[3528,26134],{"alt":32,"src":26135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26137,26138],{},"TD算法总结：",[19,26140,26141],{},[3528,26142],{"alt":32,"src":26143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":32,"searchDepth":191,"depth":191,"links":26145},[26146,26147,26148],{"id":26040,"depth":191,"text":26041},{"id":26076,"depth":191,"text":26077},{"id":26106,"depth":191,"text":26107},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26032,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26155,"title":26156,"body":26157,"description":32,"extension":2140,"meta":26390,"navigation":740,"path":26391,"seo":26392,"stem":26393,"__hash__":26394},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26158,"toc":26386},[26159,26162,26166,26169,26172,26177,26182,26185,26190,26195,26198,26203,26206,26211,26214,26219,26222,26227,26230,26235,26240,26243,26248,26251,26254,26259,26262,26267,26272,26276,26279,26282,26287,26292,26295,26300,26305,26308,26313,26316,26319,26324,26327,26332,26335,26340,26345,26348,26353,26358,26361,26366,26369,26374,26377],[10,26160,26156],{"id":26161},"_4策略学习",[14,26163,26165],{"id":26164},"_41概念描述","4.1.概念描述",[19,26167,26168],{},"用神经网络（策略网络）近似策略函数",[19,26170,26171],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26173,26174],{},[3528,26175],{"alt":32,"src":26176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26178,26179],{},[3528,26180],{"alt":32,"src":26181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26183,26184],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26186,26187],{},[3528,26188],{"alt":32,"src":26189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26191,26192],{},[3528,26193],{"alt":32,"src":26194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26196,26197],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26199,26200],{},[3528,26201],{"alt":32,"src":26202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26204,26205],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26207,26208],{},[3528,26209],{"alt":32,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26212,26213],{},"改进theta要用到策略梯度算法",[19,26215,26216],{},[3528,26217],{"alt":32,"src":26218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26220,26221],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26223,26224],{},[3528,26225],{"alt":32,"src":26226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26228,26229],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26231,26232],{},[3528,26233],{"alt":32,"src":26234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26236,26237],{},[3528,26238],{"alt":32,"src":26239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26241,26242],{},"梯度公式总结：",[19,26244,26245],{},[3528,26246],{"alt":32,"src":26247},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26249,26250],{},"两个公式的分别应用场景：",[19,26252,26253],{},"对于离散的动作：",[19,26255,26256],{},[3528,26257],{"alt":32,"src":26258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26260,26261],{},"对于连续的动作：",[19,26263,26264],{},[3528,26265],{"alt":32,"src":26266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26268,26269],{},[3528,26270],{"alt":32,"src":26271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26273,26275],{"id":26274},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26277,26278],{},"使用蒙特卡洛来近似计算策略梯度",[19,26280,26281],{},"蒙特卡洛法的解释如下：",[19,26283,26284],{},[3528,26285],{"alt":32,"src":26286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26288,26289],{},[3528,26290],{"alt":32,"src":26291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26293,26294],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[40,26296,26297],{},[43,26298,26299],{},"方法一：reinforce算法",[19,26301,26302],{},[3528,26303],{"alt":32,"src":26304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26306,26307],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[40,26309,26310],{"start":191},[43,26311,26312],{},"方法二：actor-critic算法",[19,26314,26315],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26317,26318],{},"两个网络的构建：",[19,26320,26321],{},[3528,26322],{"alt":32,"src":26323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26325,26326],{},"actor网路：",[19,26328,26329],{},[3528,26330],{"alt":32,"src":26331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26333,26334],{},"critic网络",[19,26336,26337],{},[3528,26338],{"alt":32,"src":26339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[40,26341,26342],{"start":205},[43,26343,26344],{},"网络的训练",[19,26346,26347],{},"网络描述",[19,26349,26350],{},[3528,26351],{"alt":32,"src":26352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26354,26355],{},[3528,26356],{"alt":32,"src":26357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26359,26360],{},"TD算法更新梯度：",[19,26362,26363],{},[3528,26364],{"alt":32,"src":26365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26367,26368],{},"策略网络更新梯度：",[19,26370,26371],{},[3528,26372],{"alt":32,"src":26373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26375,26376],{},"训练整个流程的具体描述：",[19,26378,26379,26382,26383],{},[3528,26380],{"alt":32,"src":26381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3528,26384],{"alt":32,"src":26385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":32,"searchDepth":191,"depth":191,"links":26387},[26388,26389],{"id":26164,"depth":191,"text":26165},{"id":26274,"depth":191,"text":26275},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26156,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26396,"title":26397,"body":26398,"description":26405,"extension":2140,"meta":26455,"navigation":740,"path":26456,"seo":26457,"stem":26458,"__hash__":26459},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26399,"toc":26451},[26400,26403,26406,26410,26413,26418,26422,26425,26430,26433,26438,26443,26446],[10,26401,26397],{"id":26402},"_5alphago算法",[19,26404,26405],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26407,26409],{"id":26408},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26411,26412],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26414,26415],{},[3528,26416],{"alt":32,"src":26417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26419,26421],{"id":26420},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26423,26424],{},"采用强化学习的方式训练策略网络",[19,26426,26427],{},[3528,26428],{"alt":32,"src":26429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26431,26432],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26434,26435],{},[3528,26436],{"alt":32,"src":26437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26439,26440],{},[3528,26441],{"alt":32,"src":26442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26444,26445],{},"强化学习训练策略网络的总结：",[19,26447,26448],{},[3528,26449],{"alt":32,"src":26450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":32,"searchDepth":191,"depth":191,"links":26452},[26453,26454],{"id":26408,"depth":191,"text":26409},{"id":26420,"depth":191,"text":26421},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26397,"description":26405},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26461,"title":26462,"body":26463,"description":26470,"extension":2140,"meta":26473,"navigation":740,"path":26474,"seo":26475,"stem":26476,"__hash__":26477},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26464,"toc":26471},[26465,26468],[10,26466,26462],{"id":26467},"_6价值网络",[19,26469,26470],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":32,"searchDepth":191,"depth":191,"links":26472},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26462,"description":26470},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26479,"title":26480,"body":26481,"description":26485,"extension":2140,"meta":26486,"navigation":740,"path":26487,"seo":26488,"stem":26489,"__hash__":26490},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26482,"toc":26483},[],{"title":32,"searchDepth":191,"depth":191,"links":26484},[],"记录自己的强化学习笔记。",{"category":25405},"\u002Fwiki\u002F2025-12-04",{"title":26480,"description":26485},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26492,"title":26493,"body":26494,"description":25403,"extension":2140,"meta":26533,"navigation":740,"path":26534,"seo":26535,"stem":26536,"__hash__":26537},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26495,"toc":26531},[26496,26499,26502,26508,26511,26517,26520,26525,26528],[10,26497,26493],{"id":26498},"_1-项目概览与官方资源",[19,26500,26501],{},"官方文档：",[19,26503,26504],{},[2439,26505,26506],{"href":26506,"rel":26507},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25887],[19,26509,26510],{},"官方代码仓库：",[19,26512,26513],{},[2439,26514,26515],{"href":26515,"rel":26516},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25887],[19,26518,26519],{},"复现大体流程：",[19,26521,26522],{},[3528,26523],{"alt":32,"src":26524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26526,26527],{},"本教程的目标是打通这条链路：",[19,26529,26530],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":32,"searchDepth":191,"depth":191,"links":26532},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26493,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26539,"title":26540,"body":26541,"description":25403,"extension":2140,"meta":26656,"navigation":740,"path":26657,"seo":26658,"stem":26659,"__hash__":26660},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26542,"toc":26651},[26543,26546,26550,26553,26560,26564,26567,26576,26586,26590,26619,26622,26648],[10,26544,26540],{"id":26545},"_2-环境准备与设备连接",[14,26547,26549],{"id":26548},"_21-系统与环境","2.1 系统与环境",[19,26551,26552],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26554,26555,26556,26559],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[34,26557,26558],{},"lerobot"," 依赖。",[14,26561,26563],{"id":26562},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26565,26566],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,26568,26570],{"className":161,"code":26569,"language":163,"meta":32,"style":32},"lerobot-find-out\n",[34,26571,26572],{"__ignoreMap":32},[167,26573,26574],{"class":169,"line":170},[167,26575,26569],{"class":173},[19,26577,26578,26579,480,26582,26585],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[34,26580,26581],{},"\u002Fdev\u002FttyACM0",[34,26583,26584],{},"\u002Fdev\u002FttyACM1","）。",[14,26587,26589],{"id":26588},"_23-串口授权","2.3 串口授权",[26,26591,26593],{"className":161,"code":26592,"language":163,"meta":32,"style":32},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[34,26594,26595,26608],{"__ignoreMap":32},[167,26596,26597,26599,26602,26605],{"class":169,"line":170},[167,26598,174],{"class":173},[167,26600,26601],{"class":177}," chmod",[167,26603,26604],{"class":184}," 666",[167,26606,26607],{"class":177}," \u002Fdev\u002FttyACM0\n",[167,26609,26610,26612,26614,26616],{"class":169,"line":191},[167,26611,174],{"class":173},[167,26613,26601],{"class":177},[167,26615,26604],{"class":184},[167,26617,26618],{"class":177}," \u002Fdev\u002FttyACM1\n",[19,26620,26621],{},"说明：",[3205,26623,26624,26629,26635,26645],{},[43,26625,26626,26628],{},[34,26627,174],{},"：以 root 权限执行命令。",[43,26630,26631,26634],{},[34,26632,26633],{},"chmod","：修改设备节点权限。",[43,26636,26637,26640,26641,26644],{},[34,26638,26639],{},"666","：",[34,26642,26643],{},"rw-rw-rw-","，所有用户可读写。",[43,26646,26647],{},"串口号必须替换为你机器上的真实端口。",[2113,26649,26650],{},"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":32,"searchDepth":191,"depth":191,"links":26652},[26653,26654,26655],{"id":26548,"depth":191,"text":26549},{"id":26562,"depth":191,"text":26563},{"id":26588,"depth":191,"text":26589},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26540,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26662,"title":26663,"body":26664,"description":25403,"extension":2140,"meta":26824,"navigation":740,"path":26825,"seo":26826,"stem":26827,"__hash__":26828},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26665,"toc":26820},[26666,26670,26674,26680,26683,26739,26742,26746,26749,26817],[10,26667,26669],{"id":26668},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26671,26673],{"id":26672},"_31-配置电机-id","3.1 配置电机 ID",[19,26675,26676,26677,26679],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[34,26678,2418],{},"，需要改成机械臂链路里不冲突的编号。",[19,26681,26682],{},"方式一：用 LeRobot 命令逐步写入。",[26,26684,26686],{"className":161,"code":26685,"language":163,"meta":32,"style":32},"# 主臂舵机配置 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",[34,26687,26688,26693,26700,26707,26712,26716,26721,26727,26734],{"__ignoreMap":32},[167,26689,26690],{"class":169,"line":170},[167,26691,26692],{"class":2268},"# 主臂舵机配置 ID\n",[167,26694,26695,26698],{"class":169,"line":191},[167,26696,26697],{"class":173},"lerobot-setup-motors",[167,26699,188],{"class":184},[167,26701,26702,26705],{"class":169,"line":205},[167,26703,26704],{"class":184},"  --teleop.type=so101_leader",[167,26706,188],{"class":184},[167,26708,26709],{"class":169,"line":219},[167,26710,26711],{"class":184},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[167,26713,26714],{"class":169,"line":230},[167,26715,741],{"emptyLinePlaceholder":740},[167,26717,26718],{"class":169,"line":241},[167,26719,26720],{"class":2268},"# 从臂舵机配置 ID\n",[167,26722,26723,26725],{"class":169,"line":261},[167,26724,26697],{"class":173},[167,26726,188],{"class":184},[167,26728,26729,26732],{"class":169,"line":773},[167,26730,26731],{"class":184},"  --robot.type=so101_follower",[167,26733,188],{"class":184},[167,26735,26736],{"class":169,"line":779},[167,26737,26738],{"class":184},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26740,26741],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26743,26745],{"id":26744},"_32-机械臂校准","3.2 机械臂校准",[19,26747,26748],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,26750,26752],{"className":161,"code":26751,"language":163,"meta":32,"style":32},"# 主臂校准\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",[34,26753,26754,26759,26766,26772,26779,26784,26788,26793,26799,26805,26812],{"__ignoreMap":32},[167,26755,26756],{"class":169,"line":170},[167,26757,26758],{"class":2268},"# 主臂校准\n",[167,26760,26761,26764],{"class":169,"line":191},[167,26762,26763],{"class":173},"lerobot-calibrate",[167,26765,188],{"class":184},[167,26767,26768,26770],{"class":169,"line":205},[167,26769,26704],{"class":184},[167,26771,188],{"class":184},[167,26773,26774,26777],{"class":169,"line":219},[167,26775,26776],{"class":184},"  --teleop.port=\u002Fdev\u002FttyACM0",[167,26778,188],{"class":184},[167,26780,26781],{"class":169,"line":230},[167,26782,26783],{"class":184},"  --teleop.id=my_awesome_leader_arm\n",[167,26785,26786],{"class":169,"line":241},[167,26787,741],{"emptyLinePlaceholder":740},[167,26789,26790],{"class":169,"line":261},[167,26791,26792],{"class":2268},"# 从臂校准\n",[167,26794,26795,26797],{"class":169,"line":773},[167,26796,26763],{"class":173},[167,26798,188],{"class":184},[167,26800,26801,26803],{"class":169,"line":779},[167,26802,26731],{"class":184},[167,26804,188],{"class":184},[167,26806,26807,26810],{"class":169,"line":785},[167,26808,26809],{"class":184},"  --robot.port=\u002Fdev\u002FttyACM1",[167,26811,188],{"class":184},[167,26813,26814],{"class":169,"line":790},[167,26815,26816],{"class":184},"  --robot.id=my_awesome_follower_arm\n",[2113,26818,26819],{},"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":32,"searchDepth":191,"depth":191,"links":26821},[26822,26823],{"id":26672,"depth":191,"text":26673},{"id":26744,"depth":191,"text":26745},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26663,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26830,"title":26831,"body":26832,"description":25403,"extension":2140,"meta":27023,"navigation":740,"path":27024,"seo":27025,"stem":27026,"__hash__":27027},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26833,"toc":27019},[26834,26837,26841,26888,26892,26905,26968,26971,27016],[10,26835,26831],{"id":26836},"_4-遥操与相机接入",[14,26838,26840],{"id":26839},"_41-不带相机遥操","4.1 不带相机遥操",[26,26842,26844],{"className":161,"code":26843,"language":163,"meta":32,"style":32},"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",[34,26845,26846,26853,26859,26865,26872,26878,26884],{"__ignoreMap":32},[167,26847,26848,26851],{"class":169,"line":170},[167,26849,26850],{"class":173},"lerobot-teleoperate",[167,26852,188],{"class":184},[167,26854,26855,26857],{"class":169,"line":191},[167,26856,26731],{"class":184},[167,26858,188],{"class":184},[167,26860,26861,26863],{"class":169,"line":205},[167,26862,26809],{"class":184},[167,26864,188],{"class":184},[167,26866,26867,26870],{"class":169,"line":219},[167,26868,26869],{"class":184},"  --robot.id=my_awesome_follower_arm",[167,26871,188],{"class":184},[167,26873,26874,26876],{"class":169,"line":230},[167,26875,26704],{"class":184},[167,26877,188],{"class":184},[167,26879,26880,26882],{"class":169,"line":241},[167,26881,26776],{"class":184},[167,26883,188],{"class":184},[167,26885,26886],{"class":169,"line":261},[167,26887,26783],{"class":184},[14,26889,26891],{"id":26890},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,26893,26895],{"className":161,"code":26894,"language":163,"meta":32,"style":32},"lerobot-find-cameras opencv\n",[34,26896,26897],{"__ignoreMap":32},[167,26898,26899,26902],{"class":169,"line":170},[167,26900,26901],{"class":173},"lerobot-find-cameras",[167,26903,26904],{"class":177}," opencv\n",[26,26906,26908],{"className":161,"code":26907,"language":163,"meta":32,"style":32},"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",[34,26909,26910,26916,26922,26928,26934,26944,26950,26956,26963],{"__ignoreMap":32},[167,26911,26912,26914],{"class":169,"line":170},[167,26913,26850],{"class":173},[167,26915,188],{"class":184},[167,26917,26918,26920],{"class":169,"line":191},[167,26919,26731],{"class":184},[167,26921,188],{"class":184},[167,26923,26924,26926],{"class":169,"line":205},[167,26925,26809],{"class":184},[167,26927,188],{"class":184},[167,26929,26930,26932],{"class":169,"line":219},[167,26931,26869],{"class":184},[167,26933,188],{"class":184},[167,26935,26936,26939,26942],{"class":169,"line":230},[167,26937,26938],{"class":184},"  --robot.cameras=",[167,26940,26941],{"class":177},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[167,26943,188],{"class":184},[167,26945,26946,26948],{"class":169,"line":241},[167,26947,26704],{"class":184},[167,26949,188],{"class":184},[167,26951,26952,26954],{"class":169,"line":261},[167,26953,26776],{"class":184},[167,26955,188],{"class":184},[167,26957,26958,26961],{"class":169,"line":773},[167,26959,26960],{"class":184},"  --teleop.id=my_awesome_leader_arm",[167,26962,188],{"class":184},[167,26964,26965],{"class":169,"line":779},[167,26966,26967],{"class":184},"  --display_data=true\n",[19,26969,26970],{},"相机参数说明：",[3205,26972,26973,26979,26985,26994,27004,27010],{},[43,26974,26975,26978],{},[34,26976,26977],{},"front","：相机名称。",[43,26980,26981,26984],{},[34,26982,26983],{},"type: opencv","：相机驱动类型。",[43,26986,26987,26990,26991,26585],{},[34,26988,26989],{},"index_or_path","：设备编号或设备路径（如 ",[34,26992,26993],{},"\u002Fdev\u002Fvideo4",[43,26995,26996,26999,27000,27003],{},[34,26997,26998],{},"width"," \u002F ",[34,27001,27002],{},"height","：图像分辨率。",[43,27005,27006,27009],{},[34,27007,27008],{},"fps","：采样帧率。",[43,27011,27012,27015],{},[34,27013,27014],{},"--display_data=true","：启用实时可视化。",[2113,27017,27018],{},"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":32,"searchDepth":191,"depth":191,"links":27020},[27021,27022],{"id":26839,"depth":191,"text":26840},{"id":26890,"depth":191,"text":26891},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26831,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27029,"title":27030,"body":27031,"description":25403,"extension":2140,"meta":27202,"navigation":740,"path":27203,"seo":27204,"stem":27205,"__hash__":27206},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27032,"toc":27197},[27033,27037,27041,27046,27051,27054,27096,27102,27106,27154,27159,27163,27166,27174,27179,27184,27189,27194],[10,27034,27036],{"id":27035},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27038,27040],{"id":27039},"_51-生成访问令牌","5.1 生成访问令牌",[19,27042,27043],{},[3528,27044],{"alt":32,"src":27045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27047,27048],{},[3528,27049],{"alt":32,"src":27050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27052,27053],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,27055,27057],{"className":161,"code":27056,"language":163,"meta":32,"style":32},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[34,27058,27059,27072],{"__ignoreMap":32},[167,27060,27061,27064,27067,27069],{"class":169,"line":170},[167,27062,27063],{"class":731},"export",[167,27065,27066],{"class":512}," HF_TOKEN",[167,27068,523],{"class":731},[167,27070,27071],{"class":177},"\"your_huggingface_token\"\n",[167,27073,27074,27077,27080,27083,27086,27088,27091,27093],{"class":169,"line":191},[167,27075,27076],{"class":173},"hf",[167,27078,27079],{"class":177}," auth",[167,27081,27082],{"class":177}," login",[167,27084,27085],{"class":184}," --token",[167,27087,11752],{"class":177},[167,27089,27090],{"class":512},"$HF_TOKEN",[167,27092,2452],{"class":177},[167,27094,27095],{"class":184}," --add-to-git-credential\n",[19,27097,27098,27101],{},[34,27099,27100],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27103,27105],{"id":27104},"_52-验证登录","5.2 验证登录",[26,27107,27109],{"className":161,"code":27108,"language":163,"meta":32,"style":32},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[34,27110,27111,27141],{"__ignoreMap":32},[167,27112,27113,27116,27118,27121,27123,27125,27128,27131,27134,27136,27139],{"class":169,"line":170},[167,27114,27115],{"class":512},"HF_USER",[167,27117,523],{"class":731},[167,27119,27120],{"class":512},"$(",[167,27122,27076],{"class":173},[167,27124,27079],{"class":177},[167,27126,27127],{"class":177}," whoami",[167,27129,27130],{"class":731}," |",[167,27132,27133],{"class":173}," head",[167,27135,379],{"class":184},[167,27137,27138],{"class":184}," 1",[167,27140,873],{"class":512},[167,27142,27143,27146,27148,27151],{"class":169,"line":191},[167,27144,27145],{"class":184},"echo",[167,27147,11752],{"class":177},[167,27149,27150],{"class":512},"$HF_USER",[167,27152,27153],{"class":177},"\"\n",[19,27155,27156],{},[3528,27157],{"alt":32,"src":27158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27160,27162],{"id":27161},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27164,27165],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3205,27167,27168,27171],{},[43,27169,27170],{},"Dataset Repo（用于上传演示数据）",[43,27172,27173],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27175,27176],{},[3528,27177],{"alt":32,"src":27178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27180,27181],{},[3528,27182],{"alt":32,"src":27183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27185,27186],{},[3528,27187],{"alt":32,"src":27188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27190,27191],{},[3528,27192],{"alt":32,"src":27193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2113,27195,27196],{},"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":32,"searchDepth":191,"depth":191,"links":27198},[27199,27200,27201],{"id":27039,"depth":191,"text":27040},{"id":27104,"depth":191,"text":27105},{"id":27161,"depth":191,"text":27162},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27030,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27208,"title":27209,"body":27210,"description":25403,"extension":2140,"meta":27407,"navigation":740,"path":27408,"seo":27409,"stem":27410,"__hash__":27411},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27211,"toc":27402},[27212,27216,27220,27316,27324,27329,27333,27349,27352,27356,27399],[10,27213,27215],{"id":27214},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27217,27219],{"id":27218},"_61-录制示教数据","6.1 录制示教数据",[26,27221,27223],{"className":161,"code":27222,"language":163,"meta":32,"style":32},"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",[34,27224,27225,27232,27238,27244,27250,27259,27265,27271,27277,27284,27294,27301,27311],{"__ignoreMap":32},[167,27226,27227,27230],{"class":169,"line":170},[167,27228,27229],{"class":173},"lerobot-record",[167,27231,188],{"class":184},[167,27233,27234,27236],{"class":169,"line":191},[167,27235,26731],{"class":184},[167,27237,188],{"class":184},[167,27239,27240,27242],{"class":169,"line":205},[167,27241,26809],{"class":184},[167,27243,188],{"class":184},[167,27245,27246,27248],{"class":169,"line":219},[167,27247,26869],{"class":184},[167,27249,188],{"class":184},[167,27251,27252,27254,27257],{"class":169,"line":230},[167,27253,26938],{"class":184},[167,27255,27256],{"class":177},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[167,27258,188],{"class":184},[167,27260,27261,27263],{"class":169,"line":241},[167,27262,26704],{"class":184},[167,27264,188],{"class":184},[167,27266,27267,27269],{"class":169,"line":261},[167,27268,26776],{"class":184},[167,27270,188],{"class":184},[167,27272,27273,27275],{"class":169,"line":773},[167,27274,26960],{"class":184},[167,27276,188],{"class":184},[167,27278,27279,27282],{"class":169,"line":779},[167,27280,27281],{"class":184},"  --display_data=true",[167,27283,188],{"class":184},[167,27285,27286,27289,27292],{"class":169,"line":785},[167,27287,27288],{"class":184},"  --dataset.repo_id=",[167,27290,27291],{"class":177},"\"Embodied-AI-6\u002Fso101_test\"",[167,27293,188],{"class":184},[167,27295,27296,27299],{"class":169,"line":790},[167,27297,27298],{"class":184},"  --dataset.num_episodes=10",[167,27300,188],{"class":184},[167,27302,27303,27306,27309],{"class":169,"line":796},[167,27304,27305],{"class":184},"  --dataset.single_task=",[167,27307,27308],{"class":177},"\"Grab the green cube\"",[167,27310,188],{"class":184},[167,27312,27313],{"class":169,"line":802},[167,27314,27315],{"class":184},"  --resume=true\n",[3205,27317,27318],{},[43,27319,27320,27323],{},[34,27321,27322],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27325,27326],{},[3528,27327],{"alt":32,"src":27328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27330,27332],{"id":27331},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,27334,27336],{"className":161,"code":27335,"language":163,"meta":32,"style":32},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[34,27337,27338],{"__ignoreMap":32},[167,27339,27340,27343,27346],{"class":169,"line":170},[167,27341,27342],{"class":173},"rm",[167,27344,27345],{"class":184}," -rf",[167,27347,27348],{"class":177}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27350,27351],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27353,27355],{"id":27354},"_63-回放指定-episode","6.3 回放指定 episode",[26,27357,27359],{"className":161,"code":27358,"language":163,"meta":32,"style":32},"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",[34,27360,27361,27368,27374,27380,27386,27394],{"__ignoreMap":32},[167,27362,27363,27366],{"class":169,"line":170},[167,27364,27365],{"class":173},"lerobot-replay",[167,27367,188],{"class":184},[167,27369,27370,27372],{"class":169,"line":191},[167,27371,26731],{"class":184},[167,27373,188],{"class":184},[167,27375,27376,27378],{"class":169,"line":205},[167,27377,26809],{"class":184},[167,27379,188],{"class":184},[167,27381,27382,27384],{"class":169,"line":219},[167,27383,26869],{"class":184},[167,27385,188],{"class":184},[167,27387,27388,27390,27392],{"class":169,"line":230},[167,27389,27288],{"class":184},[167,27391,27291],{"class":177},[167,27393,188],{"class":184},[167,27395,27396],{"class":169,"line":241},[167,27397,27398],{"class":184},"  --dataset.episode=0\n",[2113,27400,27401],{},"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":32,"searchDepth":191,"depth":191,"links":27403},[27404,27405,27406],{"id":27218,"depth":191,"text":27219},{"id":27331,"depth":191,"text":27332},{"id":27354,"depth":191,"text":27355},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27209,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27413,"title":27414,"body":27415,"description":25403,"extension":2140,"meta":27543,"navigation":740,"path":27544,"seo":27545,"stem":27546,"__hash__":27547},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27416,"toc":27541},[27417,27421,27484,27487,27534,27539],[10,27418,27420],{"id":27419},"_7-act-模型训练","7. ACT 模型训练",[26,27422,27424],{"className":161,"code":27423,"language":163,"meta":32,"style":32},"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",[34,27425,27426,27433,27441,27448,27455,27462,27469,27476],{"__ignoreMap":32},[167,27427,27428,27431],{"class":169,"line":170},[167,27429,27430],{"class":173},"lerobot-train",[167,27432,188],{"class":184},[167,27434,27435,27437,27439],{"class":169,"line":191},[167,27436,27288],{"class":184},[167,27438,27291],{"class":177},[167,27440,188],{"class":184},[167,27442,27443,27446],{"class":169,"line":205},[167,27444,27445],{"class":184},"  --policy.type=act",[167,27447,188],{"class":184},[167,27449,27450,27453],{"class":169,"line":219},[167,27451,27452],{"class":184},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[167,27454,188],{"class":184},[167,27456,27457,27460],{"class":169,"line":230},[167,27458,27459],{"class":184},"  --job_name=act_so101_test",[167,27461,188],{"class":184},[167,27463,27464,27467],{"class":169,"line":241},[167,27465,27466],{"class":184},"  --policy.device=cuda",[167,27468,188],{"class":184},[167,27470,27471,27474],{"class":169,"line":261},[167,27472,27473],{"class":184},"  --wandb.enable=false",[167,27475,188],{"class":184},[167,27477,27478,27481],{"class":169,"line":773},[167,27479,27480],{"class":184},"  --policy.repo_id=",[167,27482,27483],{"class":177},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27485,27486],{},"参数说明：",[3205,27488,27489,27495,27501,27507,27513,27522,27528],{},[43,27490,27491,27494],{},[34,27492,27493],{},"--dataset.repo_id","：训练数据集仓库。",[43,27496,27497,27500],{},[34,27498,27499],{},"--policy.type=act","：策略模型类型为 ACT。",[43,27502,27503,27506],{},[34,27504,27505],{},"--output_dir","：本地训练输出目录。",[43,27508,27509,27512],{},[34,27510,27511],{},"--job_name","：训练任务名称。",[43,27514,27515,27518,27519,26585],{},[34,27516,27517],{},"--policy.device","：训练设备（如 ",[34,27520,27521],{},"cuda",[43,27523,27524,27527],{},[34,27525,27526],{},"--wandb.enable","：是否启用 WandB 可视化。",[43,27529,27530,27533],{},[34,27531,27532],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27535,27536],{},[3528,27537],{"alt":32,"src":27538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2113,27540,27401],{},{"title":32,"searchDepth":191,"depth":191,"links":27542},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27414,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27549,"title":27550,"body":27551,"description":25403,"extension":2140,"meta":27638,"navigation":740,"path":27639,"seo":27640,"stem":27641,"__hash__":27642},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27552,"toc":27636},[27553,27556,27559,27626,27634],[10,27554,27550],{"id":27555},"_8-策略部署与自动采集",[19,27557,27558],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,27560,27562],{"className":161,"code":27561,"language":163,"meta":32,"style":32},"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",[34,27563,27564,27570,27576,27582,27590,27596,27603,27611,27619],{"__ignoreMap":32},[167,27565,27566,27568],{"class":169,"line":170},[167,27567,27229],{"class":173},[167,27569,188],{"class":184},[167,27571,27572,27574],{"class":169,"line":191},[167,27573,26731],{"class":184},[167,27575,188],{"class":184},[167,27577,27578,27580],{"class":169,"line":205},[167,27579,26809],{"class":184},[167,27581,188],{"class":184},[167,27583,27584,27586,27588],{"class":169,"line":219},[167,27585,26938],{"class":184},[167,27587,27256],{"class":177},[167,27589,188],{"class":184},[167,27591,27592,27594],{"class":169,"line":230},[167,27593,26869],{"class":184},[167,27595,188],{"class":184},[167,27597,27598,27601],{"class":169,"line":241},[167,27599,27600],{"class":184},"  --display_data=false",[167,27602,188],{"class":184},[167,27604,27605,27607,27609],{"class":169,"line":261},[167,27606,27288],{"class":184},[167,27608,27291],{"class":177},[167,27610,188],{"class":184},[167,27612,27613,27615,27617],{"class":169,"line":773},[167,27614,27305],{"class":184},[167,27616,27308],{"class":177},[167,27618,188],{"class":184},[167,27620,27621,27624],{"class":169,"line":779},[167,27622,27623],{"class":184},"  --policy.path=",[167,27625,27483],{"class":177},[3205,27627,27628],{},[43,27629,27630,27633],{},[34,27631,27632],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2113,27635,27401],{},{"title":32,"searchDepth":191,"depth":191,"links":27637},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27550,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27644,"title":27645,"body":27646,"description":25403,"extension":2140,"meta":27675,"navigation":740,"path":27676,"seo":27677,"stem":27678,"__hash__":27679},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27647,"toc":27673},[27648,27652,27655,27661,27664,27670],[10,27649,27651],{"id":27650},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27653,27654],{},"项目地址：",[19,27656,27657],{},[2439,27658,27659],{"href":27659,"rel":27660},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25887],[19,27662,27663],{},"参考教程：",[19,27665,27666],{},[2439,27667,27668],{"href":27668,"rel":27669},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25887],[19,27671,27672],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":32,"searchDepth":191,"depth":191,"links":27674},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27645,"description":25403},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27681,"title":27682,"body":27683,"description":27687,"extension":2140,"meta":27688,"navigation":740,"path":27689,"seo":27690,"stem":27691,"__hash__":27692},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27684,"toc":27685},[],{"title":32,"searchDepth":191,"depth":191,"links":27686},[],"act复现",{"category":25405},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27682,"description":27687},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27694,"title":27695,"body":27696,"description":32,"extension":2140,"meta":27998,"navigation":740,"path":27999,"seo":28000,"stem":28001,"__hash__":28002},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27697,"toc":27990},[27698,27701,27705,27715,27722,27729,27732,27739,27742,27745,27749,27761,27765,27811,27814,27817,27820,27823,27826,27830,27868,27874,27878,27932,27937,27940,27943,27948,27951,27956,27959,27962,27966,27969,27972,27976],[10,27699,27695],{"id":27700},"_1简介",[494,27702,27704],{"id":27703},"_11什么是-docker","1.1什么是 Docker？",[19,27706,27707,27708,27711,27712],{},"Docker 是一个开源的 ",[2354,27709,27710],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2354,27713,27714],{},"一次构建，到处运行。",[19,27716,27717,27718,27721],{},"“ ",[2354,27719,27720],{},"一次构建，到处运行"," ”也就是说：",[40,27723,27724],{},[43,27725,27726],{},[2354,27727,27728],{},"之前：",[19,27730,27731],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[40,27733,27734],{},[43,27735,27736],{},[2354,27737,27738],{},"使用docker后：",[19,27740,27741],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27743,27744],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[494,27746,27748],{"id":27747},"_12它是怎么工作的","1.2.它是怎么工作的？",[3205,27750,27751,27754],{},[43,27752,27753],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[43,27755,27756,27757,27760],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2354,27758,27759],{},"无论在哪运行都一样稳定"," 。",[494,27762,27764],{"id":27763},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[68,27766,27767,27777],{},[71,27768,27769],{},[74,27770,27771,27774],{},[77,27772,27773],{"align":79},"概念",[77,27775,27776],{"align":79},"解释",[85,27778,27779,27787,27795,27803],{},[74,27780,27781,27784],{},[90,27782,27783],{"align":79},"镜像",[90,27785,27786],{"align":79},"Image，运行容器的模板，像是一个应用快照",[74,27788,27789,27792],{},[90,27790,27791],{"align":79},"容器",[90,27793,27794],{"align":79},"Container，运行中的镜像实例，有自己的文件系统、网络等",[74,27796,27797,27800],{},[90,27798,27799],{"align":79},"Dockerfile",[90,27801,27802],{"align":79},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[74,27804,27805,27808],{},[90,27806,27807],{"align":79},"仓库",[90,27809,27810],{"align":79},"Registry，存放镜像的地方，比如 Docker Hub",[19,27812,27813],{},"抽象化理解:",[19,27815,27816],{},"Docker镜像≈C++类",[19,27818,27819],{},"Docker容器≈C++类实例(即对象)",[19,27821,27822],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27824,27825],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[494,27827,27829],{"id":27828},"_14类比理解","1.4.类比理解",[68,27831,27832,27842],{},[71,27833,27834],{},[74,27835,27836,27839],{},[77,27837,27838],{"align":79},"传统部署",[77,27840,27841],{"align":79},"Docker部署",[85,27843,27844,27852,27860],{},[74,27845,27846,27849],{},[90,27847,27848],{"align":79},"手动安装依赖、调试版本不一致问题",[90,27850,27851],{"align":79},"一次打包环境和代码",[74,27853,27854,27857],{},[90,27855,27856],{"align":79},"程序“裸奔”跑在系统上",[90,27858,27859],{"align":79},"程序“穿着容器”隔离运行",[74,27861,27862,27865],{},[90,27863,27864],{"align":79},"容易“在我电脑上能跑”",[90,27866,27867],{"align":79},"保证“无论在哪都能跑”",[19,27869,27870,27871],{},"就像快递包裹： ",[2354,27872,27873],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[494,27875,27877],{"id":27876},"_15docker-的核心优势","1.5.Docker 的核心优势",[68,27879,27880,27890],{},[71,27881,27882],{},[74,27883,27884,27887],{},[77,27885,27886],{"align":79},"优势",[77,27888,27889],{"align":79},"说明",[85,27891,27892,27900,27908,27916,27924],{},[74,27893,27894,27897],{},[90,27895,27896],{"align":79},"轻量级",[90,27898,27899],{"align":79},"基于系统内核共享，启动速度快，占资源少",[74,27901,27902,27905],{},[90,27903,27904],{"align":79},"跨平台",[90,27906,27907],{"align":79},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[74,27909,27910,27913],{},[90,27911,27912],{"align":79},"易于迁移部署",[90,27914,27915],{"align":79},"应用和环境一起封装，不怕依赖不一致",[74,27917,27918,27921],{},[90,27919,27920],{"align":79},"易于版本控制",[90,27922,27923],{"align":79},"镜像版本可控，支持回滚",[74,27925,27926,27929],{},[90,27927,27928],{"align":79},"生态丰富",[90,27930,27931],{"align":79},"Docker Hub 上有成千上万的现成镜像可用",[40,27933,27934],{},[43,27935,27936],{},"在Linux上可以几乎实现无性能损失。",[19,27938,27939],{},"docker里的发行版和本机共用Linux内核。",[19,27941,27942],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[40,27944,27945],{},[43,27946,27947],{},"可以快速部署在绝大多数Linux发行版",[19,27949,27950],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[40,27952,27953],{},[43,27954,27955],{},"配置环境简单",[19,27957,27958],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27960,27961],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[40,27963,27964],{},[43,27965,27928],{},[19,27967,27968],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27970,27971],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[494,27973,27975],{"id":27974},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3205,27977,27978,27981,27984,27987],{},[43,27979,27980],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[43,27982,27983],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[43,27985,27986],{},"微服务架构：每个服务一个容器，灵活组合",[43,27988,27989],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":32,"searchDepth":191,"depth":191,"links":27991},[27992,27993,27994,27995,27996,27997],{"id":27703,"depth":205,"text":27704},{"id":27747,"depth":205,"text":27748},{"id":27763,"depth":205,"text":27764},{"id":27828,"depth":205,"text":27829},{"id":27876,"depth":205,"text":27877},{"id":27974,"depth":205,"text":27975},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27695,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28004,"title":28005,"body":28006,"description":32,"extension":2140,"meta":28736,"navigation":740,"path":28737,"seo":28738,"stem":28739,"__hash__":28740},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28007,"toc":28731},[28008,28011,28015,28018,28021,28027,28033,28037,28046,28049,28105,28108,28159,28162,28245,28248,28285,28289,28300,28313,28320,28323,28402,28405,28454,28457,28480,28484,28491,28494,28510,28516,28519,28535,28541,28544,28560,28574,28580,28600,28606,28609,28621,28627,28630,28644,28650,28653,28673,28678,28681,28684,28688,28691,28694,28697,28704,28707,28710,28713,28718,28723,28728],[10,28009,28005],{"id":28010},"_2安装docker",[494,28012,28014],{"id":28013},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28016,28017],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28019,28020],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28022,28023],{},[2439,28024,28025],{"href":28025,"rel":28026},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25887],[19,28028,28029],{},[2439,28030,28031],{"href":28031,"rel":28032},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25887],[24024,28034,28036],{"id":28035},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28038,28039,28040,28045],{},"以下内容根据 ",[2439,28041,28044],{"href":28042,"rel":28043},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25887],"官方文档"," 修改而来。",[19,28047,28048],{},"如果你过去安装过 docker，先删掉：",[26,28050,28052],{"className":161,"code":28051,"language":163,"meta":32,"style":32},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[34,28053,28054],{"__ignoreMap":32},[167,28055,28056,28058,28061,28063,28066,28069,28072,28075,28078,28081,28084,28087,28090,28093,28096,28099,28102],{"class":169,"line":170},[167,28057,1168],{"class":731},[167,28059,28060],{"class":512}," pkg ",[167,28062,973],{"class":731},[167,28064,28065],{"class":177}," docker.io",[167,28067,28068],{"class":177}," docker-doc",[167,28070,28071],{"class":177}," docker-compose",[167,28073,28074],{"class":177}," docker-compose-v2",[167,28076,28077],{"class":177}," podman-docker",[167,28079,28080],{"class":177}," containerd",[167,28082,28083],{"class":177}," runc",[167,28085,28086],{"class":512},"; ",[167,28088,28089],{"class":731},"do",[167,28091,28092],{"class":173}," sudo",[167,28094,28095],{"class":177}," apt-get",[167,28097,28098],{"class":177}," remove",[167,28100,28101],{"class":512}," $pkg; ",[167,28103,28104],{"class":731},"done\n",[19,28106,28107],{},"首先安装依赖和GPG：",[26,28109,28113],{"className":28110,"code":28111,"language":28112,"meta":32,"style":32},"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",[34,28114,28115,28120,28125,28130,28135,28140,28145,28149,28154],{"__ignoreMap":32},[167,28116,28117],{"class":169,"line":170},[167,28118,28119],{},"# Add Docker's official GPG key:\n",[167,28121,28122],{"class":169,"line":191},[167,28123,28124],{},"sudo apt-get update\n",[167,28126,28127],{"class":169,"line":205},[167,28128,28129],{},"sudo apt-get install ca-certificates curl\n",[167,28131,28132],{"class":169,"line":219},[167,28133,28134],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[167,28136,28137],{"class":169,"line":230},[167,28138,28139],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[167,28141,28142],{"class":169,"line":241},[167,28143,28144],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[167,28146,28147],{"class":169,"line":261},[167,28148,741],{"emptyLinePlaceholder":740},[167,28150,28151],{"class":169,"line":773},[167,28152,28153],{},"# 如果上面这行报错就弄下面这行\n",[167,28155,28156],{"class":169,"line":779},[167,28157,28158],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28160,28161],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,28163,28165],{"className":161,"code":28164,"language":163,"meta":32,"style":32},"# 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",[34,28166,28167,28172,28178,28195,28228],{"__ignoreMap":32},[167,28168,28169],{"class":169,"line":170},[167,28170,28171],{"class":2268},"# Add the repository to Apt sources:\n",[167,28173,28174,28176],{"class":169,"line":191},[167,28175,27145],{"class":184},[167,28177,188],{"class":184},[167,28179,28180,28183,28186,28189,28192],{"class":169,"line":205},[167,28181,28182],{"class":177},"  \"deb [arch=$(",[167,28184,28185],{"class":173},"dpkg",[167,28187,28188],{"class":184}," --print-architecture",[167,28190,28191],{"class":177},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[167,28193,28194],{"class":184},"\\\n",[167,28196,28197,28200,28202,28204,28207,28210,28212,28214,28217,28219,28221,28224,28226],{"class":169,"line":219},[167,28198,28199],{"class":177},"  \"",[167,28201,27120],{"class":512},[167,28203,2758],{"class":184},[167,28205,28206],{"class":177}," \u002Fetc\u002Fos-release",[167,28208,28209],{"class":512}," && ",[167,28211,27145],{"class":184},[167,28213,11752],{"class":177},[167,28215,28216],{"class":512},"$VERSION_CODENAME",[167,28218,2452],{"class":177},[167,28220,2629],{"class":512},[167,28222,28223],{"class":177},"\" stable\"",[167,28225,27130],{"class":731},[167,28227,188],{"class":184},[167,28229,28230,28233,28236,28239,28242],{"class":169,"line":230},[167,28231,28232],{"class":173},"  sudo",[167,28234,28235],{"class":177}," tee",[167,28237,28238],{"class":177}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[167,28240,28241],{"class":731}," >",[167,28243,28244],{"class":177}," \u002Fdev\u002Fnull\n",[19,28246,28247],{},"最后安装",[26,28249,28251],{"className":161,"code":28250,"language":163,"meta":32,"style":32},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,28252,28253,28262],{"__ignoreMap":32},[167,28254,28255,28257,28259],{"class":169,"line":170},[167,28256,174],{"class":173},[167,28258,28095],{"class":177},[167,28260,28261],{"class":177}," update\n",[167,28263,28264,28266,28268,28270,28273,28276,28279,28282],{"class":169,"line":191},[167,28265,174],{"class":173},[167,28267,28095],{"class":177},[167,28269,181],{"class":177},[167,28271,28272],{"class":177}," docker-ce",[167,28274,28275],{"class":177}," docker-ce-cli",[167,28277,28278],{"class":177}," containerd.io",[167,28280,28281],{"class":177}," docker-buildx-plugin",[167,28283,28284],{"class":177}," docker-compose-plugin\n",[24024,28286,28288],{"id":28287},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28290,28291,28292,28295,28296,28299],{},"查看自己自己包管理工具版本（dnf是 ",[2354,28293,28294],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2354,28297,28298],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,28301,28303],{"className":161,"code":28302,"language":163,"meta":32,"style":32},"dnf --version\n",[34,28304,28305],{"__ignoreMap":32},[167,28306,28307,28310],{"class":169,"line":170},[167,28308,28309],{"class":173},"dnf",[167,28311,28312],{"class":184}," --version\n",[19,28314,28039,28315,28319],{},[2439,28316,28044],{"href":28317,"rel":28318},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25887]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28321,28322],{},"如果你之前安装过 docker，请先删掉",[26,28324,28326],{"className":161,"code":28325,"language":163,"meta":32,"style":32},"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",[34,28327,28328,28341,28348,28355,28362,28369,28376,28383,28390,28397],{"__ignoreMap":32},[167,28329,28330,28332,28334,28336,28339],{"class":169,"line":170},[167,28331,174],{"class":173},[167,28333,178],{"class":177},[167,28335,28098],{"class":177},[167,28337,28338],{"class":177}," docker",[167,28340,188],{"class":184},[167,28342,28343,28346],{"class":169,"line":191},[167,28344,28345],{"class":177},"                  docker-client",[167,28347,188],{"class":184},[167,28349,28350,28353],{"class":169,"line":205},[167,28351,28352],{"class":177},"                  docker-client-latest",[167,28354,188],{"class":184},[167,28356,28357,28360],{"class":169,"line":219},[167,28358,28359],{"class":177},"                  docker-common",[167,28361,188],{"class":184},[167,28363,28364,28367],{"class":169,"line":230},[167,28365,28366],{"class":177},"                  docker-latest",[167,28368,188],{"class":184},[167,28370,28371,28374],{"class":169,"line":241},[167,28372,28373],{"class":177},"                  docker-latest-logrotate",[167,28375,188],{"class":184},[167,28377,28378,28381],{"class":169,"line":261},[167,28379,28380],{"class":177},"                  docker-logrotate",[167,28382,188],{"class":184},[167,28384,28385,28388],{"class":169,"line":773},[167,28386,28387],{"class":177},"                  docker-selinux",[167,28389,188],{"class":184},[167,28391,28392,28395],{"class":169,"line":779},[167,28393,28394],{"class":177},"                  docker-engine-selinux",[167,28396,188],{"class":184},[167,28398,28399],{"class":169,"line":785},[167,28400,28401],{"class":177},"                  docker-engine\n",[19,28403,28404],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,28406,28408],{"className":161,"code":28407,"language":163,"meta":32,"style":32},"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",[34,28409,28410,28423,28438],{"__ignoreMap":32},[167,28411,28412,28414,28416,28418,28420],{"class":169,"line":170},[167,28413,174],{"class":173},[167,28415,178],{"class":177},[167,28417,185],{"class":184},[167,28419,181],{"class":177},[167,28421,28422],{"class":177}," dnf-plugins-core\n",[167,28424,28425,28427,28429,28432,28435],{"class":169,"line":191},[167,28426,174],{"class":173},[167,28428,178],{"class":177},[167,28430,28431],{"class":177}," config-manager",[167,28433,28434],{"class":177}," addrepo",[167,28436,28437],{"class":184}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[167,28439,28440,28442,28445,28448,28451],{"class":169,"line":205},[167,28441,174],{"class":173},[167,28443,28444],{"class":177}," sed",[167,28446,28447],{"class":184}," -i",[167,28449,28450],{"class":177}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[167,28452,28453],{"class":177}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28455,28456],{},"最后安装：",[26,28458,28460],{"className":161,"code":28459,"language":163,"meta":32,"style":32},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,28461,28462],{"__ignoreMap":32},[167,28463,28464,28466,28468,28470,28472,28474,28476,28478],{"class":169,"line":170},[167,28465,174],{"class":173},[167,28467,178],{"class":177},[167,28469,181],{"class":177},[167,28471,28272],{"class":177},[167,28473,28275],{"class":177},[167,28475,28278],{"class":177},[167,28477,28281],{"class":177},[167,28479,28284],{"class":177},[494,28481,28483],{"id":28482},"_22配置环境","2.2.配置环境",[24024,28485,28487,28490],{"id":28486},"_221检查-docker-服务状态",[2354,28488,28489],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28492,28493],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,28495,28497],{"className":161,"code":28496,"language":163,"meta":32,"style":32},"systemctl status docker\n",[34,28498,28499],{"__ignoreMap":32},[167,28500,28501,28504,28507],{"class":169,"line":170},[167,28502,28503],{"class":173},"systemctl",[167,28505,28506],{"class":177}," status",[167,28508,28509],{"class":177}," docker\n",[24024,28511,28513,28490],{"id":28512},"_222启动-docker-服务",[2354,28514,28515],{},"2.2.2.启动 Docker 服务",[19,28517,28518],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,28520,28522],{"className":161,"code":28521,"language":163,"meta":32,"style":32},"sudo systemctl start docker\n",[34,28523,28524],{"__ignoreMap":32},[167,28525,28526,28528,28531,28533],{"class":169,"line":170},[167,28527,174],{"class":173},[167,28529,28530],{"class":177}," systemctl",[167,28532,6216],{"class":177},[167,28534,28509],{"class":177},[24024,28536,28538,28490],{"id":28537},"_223设置-docker-开机自启",[2354,28539,28540],{},"2.2.3.设置 Docker 开机自启",[19,28542,28543],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,28545,28547],{"className":161,"code":28546,"language":163,"meta":32,"style":32},"sudo systemctl enable docker\n",[34,28548,28549],{"__ignoreMap":32},[167,28550,28551,28553,28555,28558],{"class":169,"line":170},[167,28552,174],{"class":173},[167,28554,28530],{"class":177},[167,28556,28557],{"class":177}," enable",[167,28559,28509],{"class":177},[24024,28561,28563,15822,28566,15822,28571,28490],{"id":28562},"_224将用户添加到-docker-组",[2354,28564,28565],{},"2.2.4.将用户添加到",[2354,28567,28568],{},[34,28569,28570],{},"docker",[2354,28572,28573],{},"组",[19,28575,28576,28577,28579],{},"使用以下命令将当前用户添加到 ",[34,28578,28570],{}," 组：",[26,28581,28583],{"className":161,"code":28582,"language":163,"meta":32,"style":32},"sudo usermod -aG docker $USER\n",[34,28584,28585],{"__ignoreMap":32},[167,28586,28587,28589,28592,28595,28597],{"class":169,"line":170},[167,28588,174],{"class":173},[167,28590,28591],{"class":177}," usermod",[167,28593,28594],{"class":184}," -aG",[167,28596,28338],{"class":177},[167,28598,28599],{"class":512}," $USER\n",[24024,28601,28603,28490],{"id":28602},"_225退出并重新登录",[2354,28604,28605],{},"2.2.5.退出并重新登录",[19,28607,28608],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,28610,28612],{"className":161,"code":28611,"language":163,"meta":32,"style":32},"newgrp docker\n",[34,28613,28614],{"__ignoreMap":32},[167,28615,28616,28619],{"class":169,"line":170},[167,28617,28618],{"class":173},"newgrp",[167,28620,28509],{"class":177},[24024,28622,28624,28490],{"id":28623},"_226重新启动-docker-服务如果需要",[2354,28625,28626],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28628,28629],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,28631,28632],{"className":161,"code":28521,"language":163,"meta":32,"style":32},[34,28633,28634],{"__ignoreMap":32},[167,28635,28636,28638,28640,28642],{"class":169,"line":170},[167,28637,174],{"class":173},[167,28639,28530],{"class":177},[167,28641,6216],{"class":177},[167,28643,28509],{"class":177},[24024,28645,28647,28490],{"id":28646},"_227重启电脑后检查-docker-服务状态",[2354,28648,28649],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28651,28652],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,28654,28656],{"className":161,"code":28655,"language":163,"meta":32,"style":32},"sudo reboot\nsystemctl status docker\n",[34,28657,28658,28665],{"__ignoreMap":32},[167,28659,28660,28662],{"class":169,"line":170},[167,28661,174],{"class":173},[167,28663,28664],{"class":177}," reboot\n",[167,28666,28667,28669,28671],{"class":169,"line":191},[167,28668,28503],{"class":173},[167,28670,28506],{"class":177},[167,28672,28509],{"class":177},[19,28674,28675],{},[3528,28676],{"alt":32,"src":28677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28679,28680],{},"第三行显示enabled说明开机自启动成功",[19,28682,28683],{},"按q退出",[494,28685,28687],{"id":28686},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28689,28690],{},"优先使用linux来使用docker是比较好的",[19,28692,28693],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28695,28696],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28698,28699,28700],{},"官方下载安装:",[2439,28701,28702],{"href":28702,"rel":28703},"https:\u002F\u002Fwww.docker.com\u002F",[25887],[19,28705,28706],{},"Windows的Docker显卡直通与USB直通:",[19,28708,28709],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28711,28712],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28714,28715],{},[3528,28716],{"alt":32,"src":28717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28719,28720],{},[3528,28721],{"alt":32,"src":28722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28724,28725],{},[3528,28726],{"alt":32,"src":28727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2113,28729,28730],{},"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":32,"searchDepth":191,"depth":191,"links":28732},[28733,28734,28735],{"id":28013,"depth":205,"text":28014},{"id":28482,"depth":205,"text":28483},{"id":28686,"depth":205,"text":28687},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28005,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28742,"title":28743,"body":28744,"description":28751,"extension":2140,"meta":29444,"navigation":740,"path":29445,"seo":29446,"stem":29447,"__hash__":29448},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28745,"toc":29438},[28746,28749,28752,28756,28761,28766,28769,28797,28802,28811,28814,28819,28823,28830,28835,28841,28845,28848,28852,28857,28949,28954,28972,28977,28998,29003,29019,29023,29028,29057,29062,29108,29113,29157,29165,29182,29187,29203,29208,29222,29225,29228,29231,29234,29263,29266,29271,29275,29278,29281,29287,29290,29293,29296,29358,29365,29370,29373,29391,29395,29398,29415,29418,29421,29435],[10,28747,28743],{"id":28748},"_3docker直通",[19,28750,28751],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[494,28753,28755],{"id":28754},"_31usb直通","3.1.USB直通",[19,28757,28758],{},[3528,28759],{"alt":32,"src":28760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[40,28762,28763],{},[43,28764,28765],{},"方法一(不是很推荐新手)：",[19,28767,28768],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,28770,28772],{"className":161,"code":28771,"language":163,"meta":32,"style":32},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[34,28773,28774,28782,28787],{"__ignoreMap":32},[167,28775,28776,28779],{"class":169,"line":170},[167,28777,28778],{"class":173},"ls",[167,28780,28781],{"class":177}," \u002Fdev\n",[167,28783,28784],{"class":169,"line":191},[167,28785,28786],{"class":2268},"#例如\n",[167,28788,28789,28792,28794],{"class":169,"line":205},[167,28790,28791],{"class":512},"--device",[167,28793,523],{"class":731},[167,28795,28796],{"class":177},"\u002Fdev\u002Ftty_USB0\n",[40,28798,28799],{"start":191},[43,28800,28801],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,28803,28805],{"className":161,"code":28804,"language":163,"meta":32,"style":32},"--privileged\n",[34,28806,28807],{"__ignoreMap":32},[167,28808,28809],{"class":169,"line":170},[167,28810,28804],{"class":173},[19,28812,28813],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28815,28816],{},[3528,28817],{"alt":32,"src":28818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[494,28820,28822],{"id":28821},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28824,28825,28826,28829],{},"NVIDIA Container Toolkit使用户 ",[2354,28827,28828],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28831,28832],{},[3528,28833],{"alt":32,"src":28834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28836,28837],{},[2439,28838,28839],{"href":28839,"rel":28840},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25887],[24024,28842,28844],{"id":28843},"_321安装","3.2.1.安装",[19,28846,28847],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24936,28849,28851],{"id":28850},"_3211ubuntu","3.2.1.1.Ubuntu",[40,28853,28854],{},[43,28855,28856],{},"配置存储库 并更新",[26,28858,28860],{"className":161,"code":28859,"language":163,"meta":32,"style":32},"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",[34,28861,28862,28891,28911,28923,28935,28941],{"__ignoreMap":32},[167,28863,28864,28867,28870,28873,28875,28877,28880,28883,28886,28889],{"class":169,"line":170},[167,28865,28866],{"class":173},"curl",[167,28868,28869],{"class":184}," -fsSL",[167,28871,28872],{"class":177}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[167,28874,27130],{"class":731},[167,28876,28092],{"class":173},[167,28878,28879],{"class":177}," gpg",[167,28881,28882],{"class":184}," --dearmor",[167,28884,28885],{"class":184}," -o",[167,28887,28888],{"class":177}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[167,28890,188],{"class":184},[167,28892,28893,28896,28898,28901,28904,28907,28909],{"class":169,"line":191},[167,28894,28895],{"class":512},"  && ",[167,28897,28866],{"class":173},[167,28899,28900],{"class":184}," -s",[167,28902,28903],{"class":184}," -L",[167,28905,28906],{"class":177}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[167,28908,27130],{"class":731},[167,28910,188],{"class":184},[167,28912,28913,28916,28919,28921],{"class":169,"line":205},[167,28914,28915],{"class":173},"    sed",[167,28917,28918],{"class":177}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[167,28920,27130],{"class":731},[167,28922,188],{"class":184},[167,28924,28925,28928,28930,28933],{"class":169,"line":219},[167,28926,28927],{"class":173},"    sudo",[167,28929,28235],{"class":177},[167,28931,28932],{"class":177}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[167,28934,188],{"class":184},[167,28936,28937,28939],{"class":169,"line":230},[167,28938,28895],{"class":512},[167,28940,28194],{"class":184},[167,28942,28943,28945,28947],{"class":169,"line":241},[167,28944,28927],{"class":173},[167,28946,28095],{"class":177},[167,28948,28261],{"class":177},[40,28950,28951],{"start":191},[43,28952,28953],{},"安装nvidia-docker2",[26,28955,28957],{"className":161,"code":28956,"language":163,"meta":32,"style":32},"sudo apt-get install -y nvidia-docker2\n",[34,28958,28959],{"__ignoreMap":32},[167,28960,28961,28963,28965,28967,28969],{"class":169,"line":170},[167,28962,174],{"class":173},[167,28964,28095],{"class":177},[167,28966,181],{"class":177},[167,28968,185],{"class":184},[167,28970,28971],{"class":177}," nvidia-docker2\n",[40,28973,28974],{"start":205},[43,28975,28976],{},"使用nvidia-ctk命令配置container runtime",[26,28978,28980],{"className":161,"code":28979,"language":163,"meta":32,"style":32},"sudo nvidia-ctk runtime configure --runtime=docker\n",[34,28981,28982],{"__ignoreMap":32},[167,28983,28984,28986,28989,28992,28995],{"class":169,"line":170},[167,28985,174],{"class":173},[167,28987,28988],{"class":177}," nvidia-ctk",[167,28990,28991],{"class":177}," runtime",[167,28993,28994],{"class":177}," configure",[167,28996,28997],{"class":184}," --runtime=docker\n",[40,28999,29000],{"start":219},[43,29001,29002],{},"重启docker服务:",[26,29004,29006],{"className":161,"code":29005,"language":163,"meta":32,"style":32},"sudo systemctl restart docker\n",[34,29007,29008],{"__ignoreMap":32},[167,29009,29010,29012,29014,29017],{"class":169,"line":170},[167,29011,174],{"class":173},[167,29013,28530],{"class":177},[167,29015,29016],{"class":177}," restart",[167,29018,28509],{"class":177},[24936,29020,29022],{"id":29021},"_3212fedora","3.2.1.2.Fedora",[40,29024,29025],{},[43,29026,29027],{},"配置存储库",[26,29029,29031],{"className":161,"code":29030,"language":163,"meta":32,"style":32},"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",[34,29032,29033,29048],{"__ignoreMap":32},[167,29034,29035,29037,29039,29041,29044,29046],{"class":169,"line":170},[167,29036,28866],{"class":173},[167,29038,28900],{"class":184},[167,29040,28903],{"class":184},[167,29042,29043],{"class":177}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[167,29045,27130],{"class":731},[167,29047,188],{"class":184},[167,29049,29050,29052,29054],{"class":169,"line":191},[167,29051,174],{"class":173},[167,29053,28235],{"class":177},[167,29055,29056],{"class":177}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[40,29058,29059],{"start":191},[43,29060,29061],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,29063,29065],{"className":161,"code":29064,"language":163,"meta":32,"style":32},"# 如果是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",[34,29066,29067,29072,29086,29090,29095],{"__ignoreMap":32},[167,29068,29069],{"class":169,"line":170},[167,29070,29071],{"class":2268},"# 如果是RHEL或者Rocky（DNF4）\n",[167,29073,29074,29076,29078,29080,29083],{"class":169,"line":191},[167,29075,174],{"class":173},[167,29077,178],{"class":177},[167,29079,28431],{"class":177},[167,29081,29082],{"class":184}," --add-repo",[167,29084,29085],{"class":177}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[167,29087,29088],{"class":169,"line":205},[167,29089,741],{"emptyLinePlaceholder":740},[167,29091,29092],{"class":169,"line":219},[167,29093,29094],{"class":2268},"# 如果是Feodra41+（DNF5）\n",[167,29096,29097,29099,29101,29103,29105],{"class":169,"line":230},[167,29098,174],{"class":173},[167,29100,178],{"class":177},[167,29102,28431],{"class":177},[167,29104,28434],{"class":177},[167,29106,29107],{"class":184}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[40,29109,29110],{"start":205},[43,29111,29112],{},"安装NVIDIA Container Toolki包",[26,29114,29116],{"className":161,"code":29115,"language":163,"meta":32,"style":32},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[34,29117,29118,29123,29136,29140,29145],{"__ignoreMap":32},[167,29119,29120],{"class":169,"line":170},[167,29121,29122],{"class":2268},"# 如果是RHEL或者Rocky\n",[167,29124,29125,29127,29129,29131,29133],{"class":169,"line":191},[167,29126,174],{"class":173},[167,29128,178],{"class":177},[167,29130,181],{"class":177},[167,29132,185],{"class":184},[167,29134,29135],{"class":177}," nvidia-container-toolkit\n",[167,29137,29138],{"class":169,"line":205},[167,29139,741],{"emptyLinePlaceholder":740},[167,29141,29142],{"class":169,"line":219},[167,29143,29144],{"class":2268},"# 如果是Fedora\n",[167,29146,29147,29149,29151,29153,29155],{"class":169,"line":230},[167,29148,174],{"class":173},[167,29150,178],{"class":177},[167,29152,181],{"class":177},[167,29154,185],{"class":184},[167,29156,29135],{"class":177},[40,29158,29159],{"start":219},[43,29160,29161,29162,29164],{},"安装nvidia-docker2 ： 在Fedora上使用",[34,29163,28309],{},"进行安装",[26,29166,29168],{"className":161,"code":29167,"language":163,"meta":32,"style":32},"sudo dnf install -y nvidia-docker2\n",[34,29169,29170],{"__ignoreMap":32},[167,29171,29172,29174,29176,29178,29180],{"class":169,"line":170},[167,29173,174],{"class":173},[167,29175,178],{"class":177},[167,29177,181],{"class":177},[167,29179,185],{"class":184},[167,29181,28971],{"class":177},[40,29183,29184],{"start":230},[43,29185,29186],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,29188,29189],{"className":161,"code":28979,"language":163,"meta":32,"style":32},[34,29190,29191],{"__ignoreMap":32},[167,29192,29193,29195,29197,29199,29201],{"class":169,"line":170},[167,29194,174],{"class":173},[167,29196,28988],{"class":177},[167,29198,28991],{"class":177},[167,29200,28994],{"class":177},[167,29202,28997],{"class":184},[40,29204,29205],{"start":241},[43,29206,29207],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,29209,29210],{"className":161,"code":29005,"language":163,"meta":32,"style":32},[34,29211,29212],{"__ignoreMap":32},[167,29213,29214,29216,29218,29220],{"class":169,"line":170},[167,29215,174],{"class":173},[167,29217,28530],{"class":177},[167,29219,29016],{"class":177},[167,29221,28509],{"class":177},[19,29223,29224],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29226,29227],{},"方法：",[19,29229,29230],{},"1️⃣nvidia-smi",[19,29232,29233],{},"2️⃣运行nvidia cuda 容器进行测试",[26,29235,29237],{"className":161,"code":29236,"language":163,"meta":32,"style":32},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[34,29238,29239],{"__ignoreMap":32},[167,29240,29241,29243,29245,29248,29251,29254,29257,29260],{"class":169,"line":170},[167,29242,174],{"class":173},[167,29244,28338],{"class":177},[167,29246,29247],{"class":177}," run",[167,29249,29250],{"class":184}," --rm",[167,29252,29253],{"class":184}," --gpus",[167,29255,29256],{"class":177}," all",[167,29258,29259],{"class":177}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[167,29261,29262],{"class":177}," nvidia-smi\n",[19,29264,29265],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29267,29268],{},[3528,29269],{"alt":32,"src":29270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[494,29272,29274],{"id":29273},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29276,29277],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29279,29280],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29282,29283],{},[2439,29284,29285],{"href":29285,"rel":29286},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25887],[19,29288,29289],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29291,29292],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29294,29295],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[68,29297,29298,29314],{},[71,29299,29300],{},[74,29301,29302,29305,29308,29311],{},[77,29303,29304],{"align":79},"镜像类型",[77,29306,29307],{"align":79},"适用场景",[77,29309,29310],{"align":79},"示例标签",[77,29312,29313],{"align":79},"大小",[85,29315,29316,29330,29344],{},[74,29317,29318,29321,29324,29327],{},[90,29319,29320],{"align":79},"base",[90,29322,29323],{"align":79},"仅需 CUDA 运行时库",[90,29325,29326],{"align":79},"12.4.0-base-ubuntu22.04",[90,29328,29329],{"align":79},"~240MB",[74,29331,29332,29335,29338,29341],{},[90,29333,29334],{"align":79},"runtime",[90,29336,29337],{"align":79},"部署编译后的应用（含数学库）",[90,29339,29340],{"align":79},"12.4.0-runtime-ubuntu22.04",[90,29342,29343],{"align":79},"~2GB",[74,29345,29346,29349,29352,29355],{},[90,29347,29348],{"align":79},"devel",[90,29350,29351],{"align":79},"开发环境（含编译工具）",[90,29353,29354],{"align":79},"12.4.0-devel-ubuntu22.04",[90,29356,29357],{"align":79},"~3GB",[19,29359,29360,29361,29364],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[34,29362,29363],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29366,29367],{},[3528,29368],{"alt":32,"src":29369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29371,29372],{},"在dockerfile里就可以开头这么写：",[26,29374,29376],{"className":161,"code":29375,"language":163,"meta":32,"style":32},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[34,29377,29378,29383],{"__ignoreMap":32},[167,29379,29380],{"class":169,"line":170},[167,29381,29382],{"class":2268},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[167,29384,29385,29388],{"class":169,"line":191},[167,29386,29387],{"class":173},"FROM",[167,29389,29390],{"class":177}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[494,29392,29394],{"id":29393},"_34配置以太网","3.4.配置以太网",[19,29396,29397],{},"指定网络模式",[26,29399,29401],{"className":161,"code":29400,"language":163,"meta":32,"style":32},"--net=host \\\n",[34,29402,29403],{"__ignoreMap":32},[167,29404,29405,29408,29410,29413],{"class":169,"line":170},[167,29406,29407],{"class":512},"--net",[167,29409,523],{"class":731},[167,29411,29412],{"class":177},"host",[167,29414,188],{"class":173},[19,29416,29417],{},"启动参数里加上这行即可。具体在下方",[19,29419,29420],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3205,29422,29423,29426,29429,29432],{},[43,29424,29425],{},"--net=bridge:默认选项，表示连接到默认的网桥",[43,29427,29428],{},"--net=host:容器使用宿主机的网络",[43,29430,29431],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[43,29433,29434],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2113,29436,29437],{},"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":32,"searchDepth":191,"depth":191,"links":29439},[29440,29441,29442,29443],{"id":28754,"depth":205,"text":28755},{"id":28821,"depth":205,"text":28822},{"id":29273,"depth":205,"text":29274},{"id":29393,"depth":205,"text":29394},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28743,"description":28751},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29450,"title":29451,"body":29452,"description":29459,"extension":2140,"meta":29465,"navigation":740,"path":29466,"seo":29467,"stem":29468,"__hash__":29469},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29453,"toc":29463},[29454,29457,29460],[10,29455,29451],{"id":29456},"_4dockerhub换源",[19,29458,29459],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29461,29462],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":32,"searchDepth":191,"depth":191,"links":29464},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29451,"description":29459},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29471,"title":29472,"body":29473,"description":32,"extension":2140,"meta":30484,"navigation":740,"path":30485,"seo":30486,"stem":30487,"__hash__":30488},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29474,"toc":30479},[29475,29478,29482,29488,29492,29495,29835,29838,29841,29844,29849,29854,29857,29860,29863,29866,29885,29888,29899,29905,30087,30097,30113,30376,30378,30402,30417,30426,30476],[10,29476,29472],{"id":29477},"_5docker命令学习",[494,29479,29481],{"id":29480},"_51参考文档","5.1.参考文档",[19,29483,29484],{},[2439,29485,29486],{"href":29486,"rel":29487},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25887],[494,29489,29491],{"id":29490},"_52常用命令","5.2.常用命令",[19,29493,29494],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[68,29496,29497,29510],{},[71,29498,29499],{},[74,29500,29501,29504,29507],{},[77,29502,29503],{"align":79},"命令",[77,29505,29506],{"align":79},"描述",[77,29508,29509],{"align":79},"示例",[85,29511,29512,29523,29534,29545,29556,29567,29578,29589,29599,29610,29621,29632,29642,29653,29664,29675,29685,29695,29705,29715,29726,29737,29748,29759,29770,29781,29791,29802,29813,29824],{},[74,29513,29514,29517,29520],{},[90,29515,29516],{"align":79},"docker run",[90,29518,29519],{"align":79},"创建并启动一个新的容器。",[90,29521,29522],{"align":79},"docker run -it ubuntu bash",[74,29524,29525,29528,29531],{},[90,29526,29527],{"align":79},"docker build",[90,29529,29530],{"align":79},"通过指定的 Dockerfile 创建一个新的镜像。",[90,29532,29533],{"align":79},"docker build -t myimage .",[74,29535,29536,29539,29542],{},[90,29537,29538],{"align":79},"docker pull",[90,29540,29541],{"align":79},"从 Docker 仓库拉取镜像。",[90,29543,29544],{"align":79},"docker pull ubuntu",[74,29546,29547,29550,29553],{},[90,29548,29549],{"align":79},"docker push",[90,29551,29552],{"align":79},"将本地镜像推送到 Docker 仓库。",[90,29554,29555],{"align":79},"docker push myimage",[74,29557,29558,29561,29564],{},[90,29559,29560],{"align":79},"docker stop",[90,29562,29563],{"align":79},"停止一个正在运行的容器。",[90,29565,29566],{"align":79},"docker stop container_id",[74,29568,29569,29572,29575],{},[90,29570,29571],{"align":79},"docker start",[90,29573,29574],{"align":79},"启动一个已经存在的容器。",[90,29576,29577],{"align":79},"docker start container_id",[74,29579,29580,29583,29586],{},[90,29581,29582],{"align":79},"docker restart",[90,29584,29585],{"align":79},"重新启动容器。",[90,29587,29588],{"align":79},"docker restart container_id",[74,29590,29591,29594,29597],{},[90,29592,29593],{"align":79},"docker ps",[90,29595,29596],{"align":79},"列出当前正在运行的容器。",[90,29598,29593],{"align":79},[74,29600,29601,29604,29607],{},[90,29602,29603],{"align":79},"docker rm",[90,29605,29606],{"align":79},"删除一个或多个停止的容器。",[90,29608,29609],{"align":79},"docker rm container_id",[74,29611,29612,29615,29618],{},[90,29613,29614],{"align":79},"docker exec",[90,29616,29617],{"align":79},"在一个正在运行的容器中执行命令。",[90,29619,29620],{"align":79},"docker exec -it container_id bash",[74,29622,29623,29626,29629],{},[90,29624,29625],{"align":79},"docker logs",[90,29627,29628],{"align":79},"查看容器的日志输出。",[90,29630,29631],{"align":79},"docker logs container_id",[74,29633,29634,29637,29640],{},[90,29635,29636],{"align":79},"docker images",[90,29638,29639],{"align":79},"列出本地所有镜像。",[90,29641,29636],{"align":79},[74,29643,29644,29647,29650],{},[90,29645,29646],{"align":79},"docker rmi",[90,29648,29649],{"align":79},"删除一个或多个镜像。",[90,29651,29652],{"align":79},"docker rmi myimage",[74,29654,29655,29658,29661],{},[90,29656,29657],{"align":79},"docker network",[90,29659,29660],{"align":79},"管理 Docker 网络。",[90,29662,29663],{"align":79},"docker network ls",[74,29665,29666,29669,29672],{},[90,29667,29668],{"align":79},"docker volume",[90,29670,29671],{"align":79},"管理 Docker 数据卷。",[90,29673,29674],{"align":79},"docker volume ls",[74,29676,29677,29680,29683],{},[90,29678,29679],{"align":79},"docker-compose up",[90,29681,29682],{"align":79},"启动 docker-compose.yml 中定义的所有服务。",[90,29684,29679],{"align":79},[74,29686,29687,29690,29693],{},[90,29688,29689],{"align":79},"docker-compose down",[90,29691,29692],{"align":79},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[90,29694,29689],{"align":79},[74,29696,29697,29700,29703],{},[90,29698,29699],{"align":79},"docker info",[90,29701,29702],{"align":79},"显示 Docker 系统的详细信息。",[90,29704,29699],{"align":79},[74,29706,29707,29710,29713],{},[90,29708,29709],{"align":79},"docker stats",[90,29711,29712],{"align":79},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[90,29714,29709],{"align":79},[74,29716,29717,29720,29723],{},[90,29718,29719],{"align":79},"docker inspect",[90,29721,29722],{"align":79},"查看容器或镜像的详细信息（JSON 格式）。",[90,29724,29725],{"align":79},"docker inspect container_id",[74,29727,29728,29731,29734],{},[90,29729,29730],{"align":79},"docker save",[90,29732,29733],{"align":79},"将一个镜像保存为 tar 文件。",[90,29735,29736],{"align":79},"docker save -o myimage.tar myimage",[74,29738,29739,29742,29745],{},[90,29740,29741],{"align":79},"docker load",[90,29743,29744],{"align":79},"从 tar 文件中加载镜像。",[90,29746,29747],{"align":79},"docker load -i myimage.tar",[74,29749,29750,29753,29756],{},[90,29751,29752],{"align":79},"docker tag",[90,29754,29755],{"align":79},"为镜像添加标签（tag）。",[90,29757,29758],{"align":79},"docker tag myimage myimage:v1",[74,29760,29761,29764,29767],{},[90,29762,29763],{"align":79},"docker buildx build",[90,29765,29766],{"align":79},"使用 Buildx 构建多架构镜像。",[90,29768,29769],{"align":79},"docker buildx build -t myimage .",[74,29771,29772,29775,29778],{},[90,29773,29774],{"align":79},"docker buildx create",[90,29776,29777],{"align":79},"创建一个新的 Buildx 构建实例。",[90,29779,29780],{"align":79},"docker buildx create –use",[74,29782,29783,29786,29789],{},[90,29784,29785],{"align":79},"docker buildx ls",[90,29787,29788],{"align":79},"列出所有可用的 Buildx 构建实例。",[90,29790,29785],{"align":79},[74,29792,29793,29796,29799],{},[90,29794,29795],{"align":79},"docker buildx use",[90,29797,29798],{"align":79},"设置当前的 Buildx 构建实例。",[90,29800,29801],{"align":79},"docker buildx use mybuilder",[74,29803,29804,29807,29810],{},[90,29805,29806],{"align":79},"docker buildx bake",[90,29808,29809],{"align":79},"使用 Bake 文件批量构建镜像。",[90,29811,29812],{"align":79},"docker buildx bake -f bake.hcl",[74,29814,29815,29818,29821],{},[90,29816,29817],{"align":79},"docker buildx build –push",[90,29819,29820],{"align":79},"构建镜像并推送到镜像仓库。",[90,29822,29823],{"align":79},"docker buildx build –push -t myimage .",[74,29825,29826,29829,29832],{},[90,29827,29828],{"align":79},"docker buildx build –platform",[90,29830,29831],{"align":79},"构建镜像并为多个平台生成支持。",[90,29833,29834],{"align":79},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29836,29837],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29839,29840],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29842,29843],{},"docker images 可以查看已经下载的镜像",[19,29845,29846],{},[3528,29847],{"alt":32,"src":29848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29850,29851],{},[2354,29852,29853],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29855,29856],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29858,29859],{},"docker container logs 查看容器日志",[19,29861,29862],{},"docker top 查看容器里的进程",[19,29864,29865],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,29867,29869],{"className":161,"code":29868,"language":163,"meta":32,"style":32},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[34,29870,29871],{"__ignoreMap":32},[167,29872,29873,29876,29879,29882],{"class":169,"line":170},[167,29874,29875],{"class":173},"如：docker",[167,29877,29878],{"class":177}," cp",[167,29880,29881],{"class":177}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[167,29883,29884],{"class":177}," \u002Fmydata\u002Fnginx\n",[19,29886,29887],{},"docker run时在启动容器的时候会有几个常用的选项：",[3205,29889,29890,29893,29896],{},[43,29891,29892],{},"-d选项：表示后台运行",[43,29894,29895],{},"-P选项：随机端口映射",[43,29897,29898],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[494,29900,29902],{"id":29901},"_53run命令的参数非常重要",[2354,29903,29904],{},"5.3.run命令的参数（非常重要）",[68,29906,29907,29920],{},[71,29908,29909],{},[74,29910,29911,29914,29917],{},[77,29912,29913],{"align":79},"参数\u002F配置",[77,29915,29916],{"align":79},"功能说明",[77,29918,29919],{"align":79},"重要性与参考依据",[85,29921,29922,29933,29944,29955,29966,29977,29988,29999,30010,30021,30032,30043,30054,30065,30076],{},[74,29923,29924,29927,29930],{},[90,29925,29926],{"align":79},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[90,29928,29929],{"align":79},"指定容器名称，便于后续管理",[90,29931,29932],{"align":79},"替代随机生成的容器名。",[74,29934,29935,29938,29941],{},[90,29936,29937],{"align":79},"–gpus all",[90,29939,29940],{"align":79},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[90,29942,29943],{"align":79},"用于CUDA加速等GPU依赖任务。",[74,29945,29946,29949,29952],{},[90,29947,29948],{"align":79},"-e NVIDIA_DRIVER_CAPABILITIES=all",[90,29950,29951],{"align":79},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[90,29953,29954],{"align":79},"确保容器内GPU功能完整67。",[74,29956,29957,29960,29963],{},[90,29958,29959],{"align":79},"-dit",[90,29961,29962],{"align":79},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[90,29964,29965],{"align":79},"允许容器在后台运行并支持交互操作。",[74,29967,29968,29971,29974],{},[90,29969,29970],{"align":79},"–privileged",[90,29972,29973],{"align":79},"赋予容器完全主机权限（可访问设备、内核模块等）",[90,29975,29976],{"align":79},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[74,29978,29979,29982,29985],{},[90,29980,29981],{"align":79},"–net=host",[90,29983,29984],{"align":79},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[90,29986,29987],{"align":79},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[74,29989,29990,29993,29996],{},[90,29991,29992],{"align":79},"–group-add audio–group-add video–group-add dialout",[90,29994,29995],{"align":79},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[90,29997,29998],{"align":79},"避免权限问题（如避免无法调用摄像头、麦克风）。",[74,30000,30001,30004,30007],{},[90,30002,30003],{"align":79},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[90,30005,30006],{"align":79},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[90,30008,30009],{"align":79},"支持容器内运行图形界面应用（如OpenCV可视化）。",[74,30011,30012,30015,30018],{},[90,30013,30014],{"align":79},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[90,30016,30017],{"align":79},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[90,30019,30020],{"align":79},"实现容器内图形显示。",[74,30022,30023,30026,30029],{},[90,30024,30025],{"align":79},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[90,30027,30028],{"align":79},"挂载X11认证文件（只读）",[90,30030,30031],{"align":79},"确保容器有权连接宿主机显示服务。",[74,30033,30034,30037,30040],{},[90,30035,30036],{"align":79},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[90,30038,30039],{"align":79},"挂载Wayland显示协议相关目录",[90,30041,30042],{"align":79},"支持Wayland协议的图形显示。",[74,30044,30045,30048,30051],{},[90,30046,30047],{"align":79},"–ulimit nofile=1024:524288",[90,30049,30050],{"align":79},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[90,30052,30053],{"align":79},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[74,30055,30056,30059,30062],{},[90,30057,30058],{"align":79},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[90,30060,30061],{"align":79},"挂载宿主机用户目录到容器内同名路径",[90,30063,30064],{"align":79},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[74,30066,30067,30070,30073],{},[90,30068,30069],{"align":79},"-w \u002Fhome\u002Ftungchiahui",[90,30071,30072],{"align":79},"设置容器启动后的默认工作目录",[90,30074,30075],{"align":79},"直接进入项目路径，方便执行命令2324。",[74,30077,30078,30081,30084],{},[90,30079,30080],{"align":79},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[90,30082,30083],{"align":79},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[90,30085,30086],{"align":79},"提供预配置的深度学习与机器人开发环境。",[19,30088,30089,30090,30092,30093,30096],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[34,30091,174],{},"加不加",[34,30094,30095],{},"sudo -E","都无所谓。",[19,30098,30099,30100,30102,30103,30105,30106,30109,30110,30112],{},"用户已经被加到docker组了，不用",[34,30101,174],{},"也行跑，其次，",[34,30104,174],{},"运行的话，你的",[34,30107,30108],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[34,30111,30108],{},"更不可能变了。",[26,30114,30116],{"className":161,"code":30115,"language":163,"meta":32,"style":32},"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",[34,30117,30118,30131,30141,30151,30163,30170,30177,30184,30194,30203,30212,30226,30238,30250,30259,30269,30278,30293,30326,30353,30364,30371],{"__ignoreMap":32},[167,30119,30120,30122,30124,30126,30129],{"class":169,"line":170},[167,30121,174],{"class":173},[167,30123,28338],{"class":177},[167,30125,29247],{"class":177},[167,30127,30128],{"class":184}," --name=ros_opencv_cuda",[167,30130,188],{"class":184},[167,30132,30133,30136,30139],{"class":169,"line":191},[167,30134,30135],{"class":512},"--gpus ",[167,30137,30138],{"class":177},"all",[167,30140,188],{"class":184},[167,30142,30143,30146,30149],{"class":169,"line":205},[167,30144,30145],{"class":512},"-e ",[167,30147,30148],{"class":177},"NVIDIA_DRIVER_CAPABILITIES=all",[167,30150,188],{"class":184},[167,30152,30153,30155,30158,30161],{"class":169,"line":219},[167,30154,30145],{"class":512},[167,30156,30157],{"class":177},"DISPLAY=",[167,30159,30160],{"class":512},"$DISPLAY ",[167,30162,28194],{"class":184},[167,30164,30165,30168],{"class":169,"line":230},[167,30166,30167],{"class":512},"-dit ",[167,30169,28194],{"class":184},[167,30171,30172,30175],{"class":169,"line":241},[167,30173,30174],{"class":512},"--privileged ",[167,30176,28194],{"class":184},[167,30178,30179,30182],{"class":169,"line":261},[167,30180,30181],{"class":512},"--net=host ",[167,30183,28194],{"class":184},[167,30185,30186,30189,30192],{"class":169,"line":773},[167,30187,30188],{"class":512},"--group-add ",[167,30190,30191],{"class":177},"audio",[167,30193,188],{"class":184},[167,30195,30196,30198,30201],{"class":169,"line":779},[167,30197,30188],{"class":512},[167,30199,30200],{"class":177},"video",[167,30202,188],{"class":184},[167,30204,30205,30207,30210],{"class":169,"line":785},[167,30206,30188],{"class":512},[167,30208,30209],{"class":177},"dialout",[167,30211,188],{"class":184},[167,30213,30214,30216,30219,30221,30224],{"class":169,"line":790},[167,30215,30145],{"class":512},[167,30217,30218],{"class":177},"XAUTHORITY=",[167,30220,30108],{"class":512},[167,30222,30223],{"class":177},"\u002F.Xauthority",[167,30225,188],{"class":184},[167,30227,30228,30230,30233,30236],{"class":169,"line":796},[167,30229,30145],{"class":512},[167,30231,30232],{"class":177},"WAYLAND_DISPLAY=",[167,30234,30235],{"class":512},"$WAYLAND_DISPLAY ",[167,30237,28194],{"class":184},[167,30239,30240,30242,30245,30248],{"class":169,"line":802},[167,30241,30145],{"class":512},[167,30243,30244],{"class":177},"XDG_RUNTIME_DIR=",[167,30246,30247],{"class":512},"$XDG_RUNTIME_DIR ",[167,30249,28194],{"class":184},[167,30251,30252,30254,30257],{"class":169,"line":808},[167,30253,30145],{"class":512},[167,30255,30256],{"class":177},"QT_QPA_PLATFORM=xcb",[167,30258,188],{"class":184},[167,30260,30261,30264,30267],{"class":169,"line":814},[167,30262,30263],{"class":512},"-v ",[167,30265,30266],{"class":177},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[167,30268,188],{"class":184},[167,30270,30271,30273,30276],{"class":169,"line":820},[167,30272,30263],{"class":512},[167,30274,30275],{"class":177},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[167,30277,188],{"class":184},[167,30279,30280,30283,30286,30288,30291],{"class":169,"line":826},[167,30281,30282],{"class":512},"-v $HOME",[167,30284,30285],{"class":177},"\u002F.Xauthority:",[167,30287,30108],{"class":512},[167,30289,30290],{"class":177},"\u002F.Xauthority:ro",[167,30292,188],{"class":184},[167,30294,30295,30297,30300,30302,30305,30308,30310,30313,30315,30317,30319,30321,30324],{"class":169,"line":832},[167,30296,30263],{"class":512},[167,30298,30299],{"class":177},"\u002Frun\u002Fuser\u002F",[167,30301,27120],{"class":512},[167,30303,30304],{"class":173},"id",[167,30306,30307],{"class":184}," -u",[167,30309,2629],{"class":512},[167,30311,30312],{"class":177},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[167,30314,27120],{"class":512},[167,30316,30304],{"class":173},[167,30318,30307],{"class":184},[167,30320,2629],{"class":512},[167,30322,30323],{"class":177},"\u002Fwayland-0",[167,30325,188],{"class":184},[167,30327,30328,30330,30332,30334,30336,30338,30340,30343,30345,30347,30349,30351],{"class":169,"line":837},[167,30329,30263],{"class":512},[167,30331,30299],{"class":177},[167,30333,27120],{"class":512},[167,30335,30304],{"class":173},[167,30337,30307],{"class":184},[167,30339,2629],{"class":512},[167,30341,30342],{"class":177},":\u002Frun\u002Fuser\u002F",[167,30344,27120],{"class":512},[167,30346,30304],{"class":173},[167,30348,30307],{"class":184},[167,30350,15741],{"class":512},[167,30352,28194],{"class":184},[167,30354,30355,30357,30359,30362],{"class":169,"line":842},[167,30356,30282],{"class":512},[167,30358,3059],{"class":177},[167,30360,30361],{"class":512},"$HOME ",[167,30363,28194],{"class":184},[167,30365,30366,30369],{"class":169,"line":860},[167,30367,30368],{"class":512},"-w $HOME ",[167,30370,28194],{"class":184},[167,30372,30373],{"class":169,"line":876},[167,30374,30375],{"class":512},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30377,11053],{},[40,30379,30380,30388,30391,30394],{},[43,30381,30382,15822,30384,30387],{},[34,30383,30148],{},[34,30385,30386],{},"--gpus all","没有英伟达显卡请注释。",[43,30389,30390],{},"--name后面请自己为容器起名。",[43,30392,30393],{},"最后一行仓库名称请你自己找对应的镜像填上。",[43,30395,30396,30397,423],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25580,30398,30399],{},[2354,30400,30401],{},"请不要加",[26,30403,30405],{"className":161,"code":30404,"language":163,"meta":32,"style":32},"--ulimit nofile=1024:524288 \\\n",[34,30406,30407],{"__ignoreMap":32},[167,30408,30409,30412,30415],{"class":169,"line":170},[167,30410,30411],{"class":173},"--ulimit",[167,30413,30414],{"class":177}," nofile=1024:524288",[167,30416,188],{"class":184},[19,30418,30419,30420,30425],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25580,30421,30422],{},[2354,30423,30424],{},"不建议","**.**",[26,30427,30429],{"className":161,"code":30428,"language":163,"meta":32,"style":32},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[34,30430,30431,30458,30467],{"__ignoreMap":32},[167,30432,30433,30436,30439,30441,30443,30445,30447,30449,30451,30454,30456],{"class":169,"line":170},[167,30434,30435],{"class":173},"--user",[167,30437,30438],{"class":512}," $(",[167,30440,30304],{"class":173},[167,30442,30307],{"class":184},[167,30444,2629],{"class":512},[167,30446,3059],{"class":177},[167,30448,27120],{"class":512},[167,30450,30304],{"class":173},[167,30452,30453],{"class":184}," -g",[167,30455,15741],{"class":512},[167,30457,28194],{"class":184},[167,30459,30460,30462,30465],{"class":169,"line":191},[167,30461,30263],{"class":512},[167,30463,30464],{"class":177},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[167,30466,188],{"class":184},[167,30468,30469,30471,30474],{"class":169,"line":205},[167,30470,30263],{"class":512},[167,30472,30473],{"class":177},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[167,30475,188],{"class":184},[2113,30477,30478],{},"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":32,"searchDepth":191,"depth":191,"links":30480},[30481,30482,30483],{"id":29480,"depth":205,"text":29481},{"id":29490,"depth":205,"text":29491},{"id":29901,"depth":205,"text":29904},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29472,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30490,"title":30491,"body":30492,"description":32,"extension":2140,"meta":32113,"navigation":740,"path":32114,"seo":32115,"stem":32116,"__hash__":32117},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30493,"toc":32108},[30494,30497,30501,30504,30726,30730,30734,30737,30843,30848,30851,30856,30859,30864,30867,30872,30875,30887,30890,30895,30902,30930,30937,31013,31018,31021,31044,31046,31121,31126,31129,31133,31141,31146,31151,31155,31166,31172,31175,31178,31201,31204,31207,31234,31237,31240,31705,31708,31713,31718,31722,31745,31750,31754,31758,31761,31764,31767,31794,31797,31800,31818,31821,31824,31846,31854,31859,31864,31868,31871,31874,31877,31880,31925,31928,31946,31949,31954,31957,31978,31981,32037,32040,32045,32049,32052,32059,32062,32065,32070,32073,32089,32092,32105],[10,30495,30491],{"id":30496},"_6手动创建docker镜像",[494,30498,30500],{"id":30499},"_61dockerfile","6.1.DockerFile",[19,30502,30503],{},"常用命令：",[68,30505,30506,30517],{},[71,30507,30508],{},[74,30509,30510,30513,30515],{},[77,30511,30512],{"align":79},"指令",[77,30514,27889],{"align":79},[77,30516,29509],{"align":79},[85,30518,30519,30529,30545,30556,30567,30578,30589,30600,30611,30625,30639,30650,30664,30675,30686,30700,30715],{},[74,30520,30521,30523,30526],{},[90,30522,29387],{"align":79},[90,30524,30525],{"align":79},"指定基础镜像，是 Dockerfile 的起点",[90,30527,30528],{"align":79},"FROM ubuntu:22.04",[74,30530,30531,30534,30537],{},[90,30532,30533],{"align":79},"LABEL",[90,30535,30536],{"align":79},"添加元数据（如作者、版本等）",[90,30538,30539,30540,30544],{"align":79},"LABEL maintainer=”",[2439,30541,30543],{"href":30542},"mailto:you@example.com","you@example.com","”",[74,30546,30547,30550,30553],{},[90,30548,30549],{"align":79},"ENV",[90,30551,30552],{"align":79},"设置环境变量",[90,30554,30555],{"align":79},"ENV PORT=8080",[74,30557,30558,30561,30564],{},[90,30559,30560],{"align":79},"ARG",[90,30562,30563],{"align":79},"构建参数，只在构建期间可用",[90,30565,30566],{"align":79},"ARG VERSION=1.0",[74,30568,30569,30572,30575],{},[90,30570,30571],{"align":79},"RUN",[90,30573,30574],{"align":79},"构建镜像时运行命令",[90,30576,30577],{"align":79},"RUN apt-get update && apt-get install -y curl",[74,30579,30580,30583,30586],{},[90,30581,30582],{"align":79},"COPY",[90,30584,30585],{"align":79},"复制文件到镜像中",[90,30587,30588],{"align":79},"COPY . \u002Fapp",[74,30590,30591,30594,30597],{},[90,30592,30593],{"align":79},"ADD",[90,30595,30596],{"align":79},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[90,30598,30599],{"align":79},"ADD archive.tar.gz \u002Fdata\u002F",[74,30601,30602,30605,30608],{},[90,30603,30604],{"align":79},"WORKDIR",[90,30606,30607],{"align":79},"设置工作目录",[90,30609,30610],{"align":79},"WORKDIR \u002Fopt",[74,30612,30613,30616,30619],{},[90,30614,30615],{"align":79},"CMD",[90,30617,30618],{"align":79},"设置容器启动时默认命令（可被 docker run 覆盖）",[90,30620,30621,30622],{"align":79},"CMD ",[167,30623,30624],{},"“node”, “index.js”",[74,30626,30627,30630,30633],{},[90,30628,30629],{"align":79},"ENTRYPOINT",[90,30631,30632],{"align":79},"设置容器启动时固定命令（通常用于 CLI 工具等）",[90,30634,30635,30636],{"align":79},"ENTRYPOINT ",[167,30637,30638],{},"“python3”",[74,30640,30641,30644,30647],{},[90,30642,30643],{"align":79},"EXPOSE",[90,30645,30646],{"align":79},"声明镜像内服务监听的端口（不会自动映射）",[90,30648,30649],{"align":79},"EXPOSE 80",[74,30651,30652,30655,30658],{},[90,30653,30654],{"align":79},"VOLUME",[90,30656,30657],{"align":79},"声明数据卷挂载点",[90,30659,30660,30661],{"align":79},"VOLUME ",[167,30662,30663],{},"“\u002Fdata”",[74,30665,30666,30669,30672],{},[90,30667,30668],{"align":79},"USER",[90,30670,30671],{"align":79},"设置后续命令执行的用户",[90,30673,30674],{"align":79},"USER appuser",[74,30676,30677,30680,30683],{},[90,30678,30679],{"align":79},"ONBUILD",[90,30681,30682],{"align":79},"当镜像作为其他镜像基础镜像时触发的构建指令",[90,30684,30685],{"align":79},"ONBUILD COPY . \u002Fsrc",[74,30687,30688,30691,30694],{},[90,30689,30690],{"align":79},"SHELL",[90,30692,30693],{"align":79},"更改默认 shell，比如将 sh -c 改为 bash -c",[90,30695,30696,30697],{"align":79},"SHELL ",[167,30698,30699],{},"“\u002Fbin\u002Fbash”, “-c”",[74,30701,30702,30705,30708],{},[90,30703,30704],{"align":79},"HEALTHCHECK",[90,30706,30707],{"align":79},"定义容器运行时的健康检查命令",[90,30709,30710,30711],{"align":79},"`HEALTHCHECK CMD curl –fail ",[2439,30712,30713],{"href":30713,"rel":30714},"http:\u002F\u002Flocalhost:8080",[25887],[74,30716,30717,30720,30723],{},[90,30718,30719],{"align":79},"STOPSIGNAL",[90,30721,30722],{"align":79},"容器停止时发送的信号",[90,30724,30725],{"align":79},"STOPSIGNAL SIGKILL",[494,30727,30729],{"id":30728},"_62自己创建容器","6.2.自己创建容器",[24024,30731,30733],{"id":30732},"_621手动创建","6.2.1.手动创建",[19,30735,30736],{},"在x86电脑上编译x86的：",[26,30738,30740],{"className":161,"code":30739,"language":163,"meta":32,"style":32},"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",[34,30741,30742,30758,30762,30775,30779,30792,30796,30809,30813,30826,30830],{"__ignoreMap":32},[167,30743,30744,30746,30749,30752,30755],{"class":169,"line":170},[167,30745,28570],{"class":173},[167,30747,30748],{"class":177}," build",[167,30750,30751],{"class":184}," -t",[167,30753,30754],{"class":177}," ros-melodic-cuda118-cudnn8-bionic:latest",[167,30756,30757],{"class":177}," .\n",[167,30759,30760],{"class":169,"line":191},[167,30761,741],{"emptyLinePlaceholder":740},[167,30763,30764,30766,30768,30770,30773],{"class":169,"line":205},[167,30765,28570],{"class":173},[167,30767,30748],{"class":177},[167,30769,30751],{"class":184},[167,30771,30772],{"class":177}," ros-noetic-focal:latest",[167,30774,30757],{"class":177},[167,30776,30777],{"class":169,"line":219},[167,30778,741],{"emptyLinePlaceholder":740},[167,30780,30781,30783,30785,30787,30790],{"class":169,"line":230},[167,30782,28570],{"class":173},[167,30784,30748],{"class":177},[167,30786,30751],{"class":184},[167,30788,30789],{"class":177}," ros-humble-jammy:latest",[167,30791,30757],{"class":177},[167,30793,30794],{"class":169,"line":241},[167,30795,741],{"emptyLinePlaceholder":740},[167,30797,30798,30800,30802,30804,30807],{"class":169,"line":261},[167,30799,28570],{"class":173},[167,30801,30748],{"class":177},[167,30803,30751],{"class":184},[167,30805,30806],{"class":177}," ros-jazzy-noble:latest",[167,30808,30757],{"class":177},[167,30810,30811],{"class":169,"line":773},[167,30812,741],{"emptyLinePlaceholder":740},[167,30814,30815,30817,30819,30821,30824],{"class":169,"line":779},[167,30816,28570],{"class":173},[167,30818,30748],{"class":177},[167,30820,30751],{"class":184},[167,30822,30823],{"class":177}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[167,30825,30757],{"class":177},[167,30827,30828],{"class":169,"line":785},[167,30829,741],{"emptyLinePlaceholder":740},[167,30831,30832,30834,30836,30838,30841],{"class":169,"line":790},[167,30833,28570],{"class":173},[167,30835,30748],{"class":177},[167,30837,30751],{"class":184},[167,30839,30840],{"class":177}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[167,30842,30757],{"class":177},[19,30844,30845],{},[3528,30846],{"alt":32,"src":30847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30849,30850],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30852,30853],{},[3528,30854],{"alt":32,"src":30855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30857,30858],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[40,30860,30861],{},[43,30862,30863],{},"创建 Docker Hub 账户",[19,30865,30866],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[40,30868,30869],{"start":191},[43,30870,30871],{},"登录 Docker Hub",[19,30873,30874],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,30876,30878],{"className":161,"code":30877,"language":163,"meta":32,"style":32},"docker login\n",[34,30879,30880],{"__ignoreMap":32},[167,30881,30882,30884],{"class":169,"line":170},[167,30883,28570],{"class":173},[167,30885,30886],{"class":177}," login\n",[19,30888,30889],{},"输入你的 Docker Hub 用户名和密码进行验证。",[40,30891,30892],{},[43,30893,30894],{},"为你的镜像打标签",[19,30896,30897,30898,30901],{},"Docker Hub 使用 ",[34,30899,30900],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,30903,30905],{"className":161,"code":30904,"language":163,"meta":32,"style":32},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[34,30906,30907],{"__ignoreMap":32},[167,30908,30909,30911,30914,30916,30919,30922,30925,30927],{"class":169,"line":170},[167,30910,28570],{"class":173},[167,30912,30913],{"class":177}," tag",[167,30915,30806],{"class":177},[167,30917,30918],{"class":731}," \u003C",[167,30920,30921],{"class":177},"你的用户",[167,30923,30924],{"class":512},"名",[167,30926,3159],{"class":731},[167,30928,30929],{"class":177},"\u002Fros-jazzy-noble:latest\n",[19,30931,30932,30933,30936],{},"例如，如果你的 Docker Hub 用户名是 ",[34,30934,30935],{},"tungchiahui","，你应该执行：",[26,30938,30940],{"className":161,"code":30939,"language":163,"meta":32,"style":32},"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",[34,30941,30942,30953,30957,30968,30972,30983,30987,30998,31002],{"__ignoreMap":32},[167,30943,30944,30946,30948,30950],{"class":169,"line":170},[167,30945,28570],{"class":173},[167,30947,30913],{"class":177},[167,30949,30772],{"class":177},[167,30951,30952],{"class":177}," tungchiahui\u002Fros-noetic-focal:latest\n",[167,30954,30955],{"class":169,"line":191},[167,30956,741],{"emptyLinePlaceholder":740},[167,30958,30959,30961,30963,30965],{"class":169,"line":205},[167,30960,28570],{"class":173},[167,30962,30913],{"class":177},[167,30964,30789],{"class":177},[167,30966,30967],{"class":177}," tungchiahui\u002Fros-humble-jammy:latest\n",[167,30969,30970],{"class":169,"line":219},[167,30971,741],{"emptyLinePlaceholder":740},[167,30973,30974,30976,30978,30980],{"class":169,"line":230},[167,30975,28570],{"class":173},[167,30977,30913],{"class":177},[167,30979,30806],{"class":177},[167,30981,30982],{"class":177}," tungchiahui\u002Fros-jazzy-noble:latest\n",[167,30984,30985],{"class":169,"line":241},[167,30986,741],{"emptyLinePlaceholder":740},[167,30988,30989,30991,30993,30995],{"class":169,"line":261},[167,30990,28570],{"class":173},[167,30992,30913],{"class":177},[167,30994,30823],{"class":177},[167,30996,30997],{"class":177}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[167,30999,31000],{"class":169,"line":773},[167,31001,741],{"emptyLinePlaceholder":740},[167,31003,31004,31006,31008,31010],{"class":169,"line":779},[167,31005,28570],{"class":173},[167,31007,30913],{"class":177},[167,31009,30840],{"class":177},[167,31011,31012],{"class":177}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[40,31014,31015],{"start":191},[43,31016,31017],{},"推送镜像到 Docker Hub",[19,31019,31020],{},"使用以下命令将镜像推送到 Docker Hub：",[26,31022,31024],{"className":161,"code":31023,"language":163,"meta":32,"style":32},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[34,31025,31026],{"__ignoreMap":32},[167,31027,31028,31030,31033,31035,31037,31039,31041],{"class":169,"line":170},[167,31029,28570],{"class":173},[167,31031,31032],{"class":177}," push",[167,31034,30918],{"class":731},[167,31036,30921],{"class":177},[167,31038,30924],{"class":512},[167,31040,3159],{"class":731},[167,31042,31043],{"class":177},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31045,16660],{},[26,31047,31049],{"className":161,"code":31048,"language":163,"meta":32,"style":32},"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",[34,31050,31051,31059,31063,31071,31075,31083,31087,31096,31100,31108,31112],{"__ignoreMap":32},[167,31052,31053,31055,31057],{"class":169,"line":170},[167,31054,28570],{"class":173},[167,31056,31032],{"class":177},[167,31058,30952],{"class":177},[167,31060,31061],{"class":169,"line":191},[167,31062,741],{"emptyLinePlaceholder":740},[167,31064,31065,31067,31069],{"class":169,"line":205},[167,31066,28570],{"class":173},[167,31068,31032],{"class":177},[167,31070,30967],{"class":177},[167,31072,31073],{"class":169,"line":219},[167,31074,741],{"emptyLinePlaceholder":740},[167,31076,31077,31079,31081],{"class":169,"line":230},[167,31078,28570],{"class":173},[167,31080,31032],{"class":177},[167,31082,30982],{"class":177},[167,31084,31085],{"class":169,"line":241},[167,31086,741],{"emptyLinePlaceholder":740},[167,31088,31089,31091,31093],{"class":169,"line":261},[167,31090,28570],{"class":173},[167,31092,31032],{"class":177},[167,31094,31095],{"class":177}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[167,31097,31098],{"class":169,"line":773},[167,31099,741],{"emptyLinePlaceholder":740},[167,31101,31102,31104,31106],{"class":169,"line":779},[167,31103,28570],{"class":173},[167,31105,31032],{"class":177},[167,31107,31012],{"class":177},[167,31109,31110],{"class":169,"line":785},[167,31111,741],{"emptyLinePlaceholder":740},[167,31113,31114,31116,31118],{"class":169,"line":790},[167,31115,28570],{"class":173},[167,31117,31032],{"class":177},[167,31119,31120],{"class":177}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[40,31122,31123],{"start":205},[43,31124,31125],{},"验证推送成功",[19,31127,31128],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31130,31131],{},[2354,31132,5816],{},[3205,31134,31135,31138],{},[43,31136,31137],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[43,31139,31140],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31142,31143],{},[3528,31144],{"alt":32,"src":31145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31147,31148],{},[3528,31149],{"alt":32,"src":31150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24024,31152,31154],{"id":31153},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31156,31157,31158,31161,31162,31165],{},"如果您想在 ",[2354,31159,31160],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2354,31163,31164],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31167,31168,31169],{},"1. ",[2354,31170,31171],{},"启用 Docker 跨平台构建",[19,31173,31174],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31176,31177],{},"第一步：启用 buildx（只需执行一次）",[26,31179,31181],{"className":161,"code":31180,"language":163,"meta":32,"style":32},"docker buildx create --name multiarch_builder --use\n",[34,31182,31183],{"__ignoreMap":32},[167,31184,31185,31187,31190,31192,31195,31198],{"class":169,"line":170},[167,31186,28570],{"class":173},[167,31188,31189],{"class":177}," buildx",[167,31191,376],{"class":177},[167,31193,31194],{"class":184}," --name",[167,31196,31197],{"class":177}," multiarch_builder",[167,31199,31200],{"class":184}," --use\n",[19,31202,31203],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31205,31206],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,31208,31210],{"className":161,"code":31209,"language":163,"meta":32,"style":32},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[34,31211,31212],{"__ignoreMap":32},[167,31213,31214,31216,31218,31220,31223,31226,31229,31231],{"class":169,"line":170},[167,31215,28570],{"class":173},[167,31217,29247],{"class":177},[167,31219,29250],{"class":184},[167,31221,31222],{"class":184}," --privileged",[167,31224,31225],{"class":177}," multiarch\u002Fqemu-user-static",[167,31227,31228],{"class":184}," --reset",[167,31230,699],{"class":184},[167,31232,31233],{"class":177}," yes\n",[19,31235,31236],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31238,31239],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,31241,31243],{"className":161,"code":31242,"language":163,"meta":32,"style":32},"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",[34,31244,31245,31287,31291,31296,31306,31316,31325,31331,31335,31339,31349,31357,31366,31372,31376,31380,31390,31398,31407,31413,31417,31421,31431,31439,31448,31454,31458,31462,31472,31480,31489,31495,31499,31503,31513,31521,31530,31536,31540,31544,31554,31562,31571,31577,31581,31585,31595,31603,31612,31618,31622,31626,31636,31644,31653,31659,31663,31667,31678,31686,31695,31701],{"__ignoreMap":32},[167,31246,31247,31249,31251,31253,31256,31259,31261,31263,31266,31268,31270,31272,31274,31277,31280,31282,31285],{"class":169,"line":170},[167,31248,28570],{"class":173},[167,31250,31189],{"class":177},[167,31252,30748],{"class":177},[167,31254,31255],{"class":184}," --platform",[167,31257,31258],{"class":177}," linux\u002Famd64,linux\u002Farm64",[167,31260,30751],{"class":184},[167,31262,30918],{"class":731},[167,31264,31265],{"class":177},"你的镜像",[167,31267,30924],{"class":512},[167,31269,3159],{"class":731},[167,31271,3059],{"class":177},[167,31273,513],{"class":731},[167,31275,31276],{"class":177},"标",[167,31278,31279],{"class":512},"签",[167,31281,3159],{"class":731},[167,31283,31284],{"class":184}," --push",[167,31286,30757],{"class":177},[167,31288,31289],{"class":169,"line":191},[167,31290,741],{"emptyLinePlaceholder":740},[167,31292,31293],{"class":169,"line":205},[167,31294,31295],{"class":2268},"# 例子：\n",[167,31297,31298,31300,31302,31304],{"class":169,"line":219},[167,31299,28570],{"class":173},[167,31301,31189],{"class":177},[167,31303,30748],{"class":177},[167,31305,188],{"class":184},[167,31307,31308,31311,31314],{"class":169,"line":230},[167,31309,31310],{"class":512},"--platform ",[167,31312,31313],{"class":177},"linux\u002Famd64,linux\u002Farm64",[167,31315,188],{"class":184},[167,31317,31318,31320,31323],{"class":169,"line":241},[167,31319,30751],{"class":184},[167,31321,31322],{"class":177}," tungchiahui\u002Fros:noetic-focal",[167,31324,188],{"class":184},[167,31326,31327,31329],{"class":169,"line":261},[167,31328,31284],{"class":184},[167,31330,188],{"class":184},[167,31332,31333],{"class":169,"line":773},[167,31334,30757],{"class":177},[167,31336,31337],{"class":169,"line":779},[167,31338,741],{"emptyLinePlaceholder":740},[167,31340,31341,31343,31345,31347],{"class":169,"line":785},[167,31342,28570],{"class":173},[167,31344,31189],{"class":177},[167,31346,30748],{"class":177},[167,31348,188],{"class":184},[167,31350,31351,31353,31355],{"class":169,"line":790},[167,31352,31310],{"class":512},[167,31354,31313],{"class":177},[167,31356,188],{"class":184},[167,31358,31359,31361,31364],{"class":169,"line":796},[167,31360,30751],{"class":184},[167,31362,31363],{"class":177}," tungchiahui\u002Fros:humble-jammy",[167,31365,188],{"class":184},[167,31367,31368,31370],{"class":169,"line":802},[167,31369,31284],{"class":184},[167,31371,188],{"class":184},[167,31373,31374],{"class":169,"line":808},[167,31375,30757],{"class":177},[167,31377,31378],{"class":169,"line":814},[167,31379,741],{"emptyLinePlaceholder":740},[167,31381,31382,31384,31386,31388],{"class":169,"line":820},[167,31383,28570],{"class":173},[167,31385,31189],{"class":177},[167,31387,30748],{"class":177},[167,31389,188],{"class":184},[167,31391,31392,31394,31396],{"class":169,"line":826},[167,31393,31310],{"class":512},[167,31395,31313],{"class":177},[167,31397,188],{"class":184},[167,31399,31400,31402,31405],{"class":169,"line":832},[167,31401,30751],{"class":184},[167,31403,31404],{"class":177}," tungchiahui\u002Fros:jazzy-noble",[167,31406,188],{"class":184},[167,31408,31409,31411],{"class":169,"line":837},[167,31410,31284],{"class":184},[167,31412,188],{"class":184},[167,31414,31415],{"class":169,"line":842},[167,31416,30757],{"class":177},[167,31418,31419],{"class":169,"line":860},[167,31420,741],{"emptyLinePlaceholder":740},[167,31422,31423,31425,31427,31429],{"class":169,"line":876},[167,31424,28338],{"class":173},[167,31426,31189],{"class":177},[167,31428,30748],{"class":177},[167,31430,188],{"class":184},[167,31432,31433,31435,31437],{"class":169,"line":887},[167,31434,31310],{"class":512},[167,31436,31313],{"class":177},[167,31438,188],{"class":184},[167,31440,31441,31443,31446],{"class":169,"line":892},[167,31442,30751],{"class":184},[167,31444,31445],{"class":177}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[167,31447,188],{"class":184},[167,31449,31450,31452],{"class":169,"line":907},[167,31451,31284],{"class":184},[167,31453,188],{"class":184},[167,31455,31456],{"class":169,"line":920},[167,31457,30757],{"class":177},[167,31459,31460],{"class":169,"line":933},[167,31461,741],{"emptyLinePlaceholder":740},[167,31463,31464,31466,31468,31470],{"class":169,"line":946},[167,31465,28570],{"class":173},[167,31467,31189],{"class":177},[167,31469,30748],{"class":177},[167,31471,188],{"class":184},[167,31473,31474,31476,31478],{"class":169,"line":959},[167,31475,31310],{"class":512},[167,31477,31313],{"class":177},[167,31479,188],{"class":184},[167,31481,31482,31484,31487],{"class":169,"line":964},[167,31483,30751],{"class":184},[167,31485,31486],{"class":177}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[167,31488,188],{"class":184},[167,31490,31491,31493],{"class":169,"line":987},[167,31492,31284],{"class":184},[167,31494,188],{"class":184},[167,31496,31497],{"class":169,"line":993},[167,31498,30757],{"class":177},[167,31500,31501],{"class":169,"line":998},[167,31502,741],{"emptyLinePlaceholder":740},[167,31504,31505,31507,31509,31511],{"class":169,"line":1010},[167,31506,28338],{"class":173},[167,31508,31189],{"class":177},[167,31510,30748],{"class":177},[167,31512,188],{"class":184},[167,31514,31515,31517,31519],{"class":169,"line":1022},[167,31516,31310],{"class":512},[167,31518,31313],{"class":177},[167,31520,188],{"class":184},[167,31522,31523,31525,31528],{"class":169,"line":1027},[167,31524,30751],{"class":184},[167,31526,31527],{"class":177}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[167,31529,188],{"class":184},[167,31531,31532,31534],{"class":169,"line":1032},[167,31533,31284],{"class":184},[167,31535,188],{"class":184},[167,31537,31538],{"class":169,"line":1049},[167,31539,30757],{"class":177},[167,31541,31542],{"class":169,"line":10005},[167,31543,741],{"emptyLinePlaceholder":740},[167,31545,31546,31548,31550,31552],{"class":169,"line":10011},[167,31547,28570],{"class":173},[167,31549,31189],{"class":177},[167,31551,30748],{"class":177},[167,31553,188],{"class":184},[167,31555,31556,31558,31560],{"class":169,"line":10038},[167,31557,31310],{"class":512},[167,31559,31313],{"class":177},[167,31561,188],{"class":184},[167,31563,31564,31566,31569],{"class":169,"line":10043},[167,31565,30751],{"class":184},[167,31567,31568],{"class":177}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[167,31570,188],{"class":184},[167,31572,31573,31575],{"class":169,"line":10049},[167,31574,31284],{"class":184},[167,31576,188],{"class":184},[167,31578,31579],{"class":169,"line":10061},[167,31580,30757],{"class":177},[167,31582,31583],{"class":169,"line":10073},[167,31584,741],{"emptyLinePlaceholder":740},[167,31586,31587,31589,31591,31593],{"class":169,"line":10085},[167,31588,28570],{"class":173},[167,31590,31189],{"class":177},[167,31592,30748],{"class":177},[167,31594,188],{"class":184},[167,31596,31597,31599,31601],{"class":169,"line":11744},[167,31598,31310],{"class":512},[167,31600,31313],{"class":177},[167,31602,188],{"class":184},[167,31604,31605,31607,31610],{"class":169,"line":11769},[167,31606,30751],{"class":184},[167,31608,31609],{"class":177}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[167,31611,188],{"class":184},[167,31613,31614,31616],{"class":169,"line":11792},[167,31615,31284],{"class":184},[167,31617,188],{"class":184},[167,31619,31620],{"class":169,"line":11816},[167,31621,30757],{"class":177},[167,31623,31624],{"class":169,"line":11821},[167,31625,741],{"emptyLinePlaceholder":740},[167,31627,31628,31630,31632,31634],{"class":169,"line":11826},[167,31629,28338],{"class":173},[167,31631,31189],{"class":177},[167,31633,30748],{"class":177},[167,31635,188],{"class":184},[167,31637,31638,31640,31642],{"class":169,"line":11831},[167,31639,31310],{"class":512},[167,31641,31313],{"class":177},[167,31643,188],{"class":184},[167,31645,31646,31648,31651],{"class":169,"line":11840},[167,31647,30751],{"class":184},[167,31649,31650],{"class":177}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[167,31652,188],{"class":184},[167,31654,31655,31657],{"class":169,"line":11845},[167,31656,31284],{"class":184},[167,31658,188],{"class":184},[167,31660,31661],{"class":169,"line":11851},[167,31662,30757],{"class":177},[167,31664,31665],{"class":169,"line":11872},[167,31666,741],{"emptyLinePlaceholder":740},[167,31668,31669,31672,31674,31676],{"class":169,"line":11878},[167,31670,31671],{"class":173},"  docker",[167,31673,31189],{"class":177},[167,31675,30748],{"class":177},[167,31677,188],{"class":184},[167,31679,31680,31682,31684],{"class":169,"line":11892},[167,31681,31310],{"class":512},[167,31683,31313],{"class":177},[167,31685,188],{"class":184},[167,31687,31688,31690,31693],{"class":169,"line":11898},[167,31689,30751],{"class":184},[167,31691,31692],{"class":177}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[167,31694,188],{"class":184},[167,31696,31697,31699],{"class":169,"line":11925},[167,31698,31284],{"class":184},[167,31700,188],{"class":184},[167,31702,31703],{"class":169,"line":11934},[167,31704,30757],{"class":177},[19,31706,31707],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31709,31710],{},[3528,31711],{"alt":32,"src":31712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31714,31715],{},[3528,31716],{"alt":32,"src":31717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24024,31719,31721],{"id":31720},"_623清除构建缓存","6.2.3.清除构建缓存",[26,31723,31725],{"className":161,"code":31724,"language":163,"meta":32,"style":32},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[34,31726,31727,31732],{"__ignoreMap":32},[167,31728,31729],{"class":169,"line":170},[167,31730,31731],{"class":2268},"# 清理BuildKit构建缓存\n",[167,31733,31734,31736,31739,31742],{"class":169,"line":191},[167,31735,28570],{"class":173},[167,31737,31738],{"class":177}," builder",[167,31740,31741],{"class":177}," prune",[167,31743,31744],{"class":184}," -f\n",[19,31746,31747],{},[3528,31748],{"alt":32,"src":31749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[494,31751,31753],{"id":31752},"_63补充","6.3.补充",[24024,31755,31757],{"id":31756},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31759,31760],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31762,31763],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31765,31766],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,31768,31770],{"className":161,"code":31769,"language":163,"meta":32,"style":32},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[34,31771,31772,31779],{"__ignoreMap":32},[167,31773,31774,31776],{"class":169,"line":170},[167,31775,29387],{"class":173},[167,31777,31778],{"class":177}," nginx\n",[167,31780,31781,31783,31786,31789,31791],{"class":169,"line":191},[167,31782,30571],{"class":173},[167,31784,31785],{"class":177}," echo",[167,31787,31788],{"class":177}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[167,31790,28241],{"class":731},[167,31792,31793],{"class":177}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31795,31796],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31798,31799],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,31801,31803],{"className":161,"code":31802,"language":163,"meta":32,"style":32},"docker build -t nginx:tuling .\n",[34,31804,31805],{"__ignoreMap":32},[167,31806,31807,31809,31811,31813,31816],{"class":169,"line":170},[167,31808,28570],{"class":173},[167,31810,30748],{"class":177},[167,31812,30751],{"class":184},[167,31814,31815],{"class":177}," nginx:tuling",[167,31817,30757],{"class":177},[19,31819,31820],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31822,31823],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,31825,31827],{"className":161,"code":31826,"language":163,"meta":32,"style":32},"docker run -d -p 92:80 nginx:tuling\n",[34,31828,31829],{"__ignoreMap":32},[167,31830,31831,31833,31835,31838,31840,31843],{"class":169,"line":170},[167,31832,28570],{"class":173},[167,31834,29247],{"class":177},[167,31836,31837],{"class":184}," -d",[167,31839,699],{"class":184},[167,31841,31842],{"class":177}," 92:80",[167,31844,31845],{"class":177}," nginx:tuling\n",[19,31847,31848,31849],{},"4、访问 ",[2439,31850,31853],{"href":31851,"rel":31852},"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",[25887],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31855,31856],{},[3528,31857],{"alt":32,"src":31858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31860,31861],{},[3528,31862],{"alt":32,"src":31863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24024,31865,31867],{"id":31866},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31869,31870],{},"只需要知道大体流程即可",[19,31872,31873],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31875,31876],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31878,31879],{},"2、在Dockerfile中添加以下内容",[26,31881,31883],{"className":28110,"code":31882,"language":28112,"meta":32,"style":32},"# 基于哪个镜像\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",[34,31884,31885,31890,31895,31900,31905,31910,31915,31920],{"__ignoreMap":32},[167,31886,31887],{"class":169,"line":170},[167,31888,31889],{},"# 基于哪个镜像\n",[167,31891,31892],{"class":169,"line":191},[167,31893,31894],{},"From java:8\n",[167,31896,31897],{"class":169,"line":205},[167,31898,31899],{},"# 复制文件到容器\n",[167,31901,31902],{"class":169,"line":219},[167,31903,31904],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[167,31906,31907],{"class":169,"line":230},[167,31908,31909],{},"# 声明需要暴露的端口\n",[167,31911,31912],{"class":169,"line":241},[167,31913,31914],{},"EXPOSE 8877\n",[167,31916,31917],{"class":169,"line":261},[167,31918,31919],{},"# 配置容器启动后执行的命令\n",[167,31921,31922],{"class":169,"line":773},[167,31923,31924],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31926,31927],{},"3、使用docker build命令构建镜像",[26,31929,31931],{"className":161,"code":31930,"language":163,"meta":32,"style":32},"docker build -t tulingmall-member:0.0.5 .\n",[34,31932,31933],{"__ignoreMap":32},[167,31934,31935,31937,31939,31941,31944],{"class":169,"line":170},[167,31936,28570],{"class":173},[167,31938,30748],{"class":177},[167,31940,30751],{"class":184},[167,31942,31943],{"class":177}," tulingmall-member:0.0.5",[167,31945,30757],{"class":177},[19,31947,31948],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31950,31951],{},[3528,31952],{"alt":32,"src":31953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31955,31956],{},"4、启动镜像，加-d可在后台启动",[26,31958,31960],{"className":161,"code":31959,"language":163,"meta":32,"style":32},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[34,31961,31962],{"__ignoreMap":32},[167,31963,31964,31966,31968,31970,31972,31975],{"class":169,"line":170},[167,31965,28570],{"class":173},[167,31967,29247],{"class":177},[167,31969,31837],{"class":184},[167,31971,699],{"class":184},[167,31973,31974],{"class":177}," 8877:8877",[167,31976,31977],{"class":177}," tulingmall-member:0.0.5\n",[19,31979,31980],{},"加上JVM参数：",[26,31982,31984],{"className":161,"code":31983,"language":163,"meta":32,"style":32},"# --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",[34,31985,31986,31991,32006,32016,32025,32032],{"__ignoreMap":32},[167,31987,31988],{"class":169,"line":170},[167,31989,31990],{"class":2268},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[167,31992,31993,31995,31997,32000,32002,32004],{"class":169,"line":191},[167,31994,28570],{"class":173},[167,31996,29247],{"class":177},[167,31998,31999],{"class":184},"  -d",[167,32001,699],{"class":184},[167,32003,31974],{"class":177},[167,32005,188],{"class":184},[167,32007,32008,32010,32013],{"class":169,"line":205},[167,32009,30145],{"class":512},[167,32011,32012],{"class":177},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[167,32014,32015],{"class":184},"  \\\n",[167,32017,32018,32020,32023],{"class":169,"line":219},[167,32019,30145],{"class":512},[167,32021,32022],{"class":177},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[167,32024,32015],{"class":184},[167,32026,32027,32030],{"class":169,"line":230},[167,32028,32029],{"class":512},"--cap-add=SYS_PTRACE  ",[167,32031,28194],{"class":184},[167,32033,32034],{"class":169,"line":241},[167,32035,32036],{"class":512},"tulingmall-member:0.0.5\n",[19,32038,32039],{},"5、访问会员服务接口",[19,32041,32042],{},[3528,32043],{"alt":32,"src":32044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24024,32046,32048],{"id":32047},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32050,32051],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32053,32054,32055],{},"阿里云docker镜像仓库：",[2439,32056,32057],{"href":32057,"rel":32058},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25887],[19,32060,32061],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32063,32064],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32066,32067],{},[3528,32068],{"alt":32,"src":32069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32071,32072],{},"要把镜像推送到镜像仓库",[26,32074,32076],{"className":161,"code":32075,"language":163,"meta":32,"style":32},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,32077,32078],{"__ignoreMap":32},[167,32079,32080,32082,32084,32086],{"class":169,"line":170},[167,32081,28570],{"class":173},[167,32083,30913],{"class":177},[167,32085,31943],{"class":177},[167,32087,32088],{"class":177}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32090,32091],{},"最后将镜像推送到远程仓库",[26,32093,32095],{"className":161,"code":32094,"language":163,"meta":32,"style":32},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,32096,32097],{"__ignoreMap":32},[167,32098,32099,32101,32103],{"class":169,"line":170},[167,32100,28570],{"class":173},[167,32102,31032],{"class":177},[167,32104,32088],{"class":177},[2113,32106,32107],{},"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":32,"searchDepth":191,"depth":191,"links":32109},[32110,32111,32112],{"id":30499,"depth":205,"text":30500},{"id":30728,"depth":205,"text":30729},{"id":31752,"depth":205,"text":31753},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30491,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32119,"title":32120,"body":32121,"description":32,"extension":2140,"meta":32264,"navigation":740,"path":32265,"seo":32266,"stem":32267,"__hash__":32268},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32122,"toc":32262},[32123,32126,32131,32136,32139,32144,32149,32152,32157,32162,32165,32170,32173,32176,32179,32182,32185,32188,32208,32230,32233,32236,32256,32259],[10,32124,32120],{"id":32125},"_7vscode远程开发",[40,32127,32128],{},[43,32129,32130],{},"插件1：微软Docker工具",[19,32132,32133],{},[3528,32134],{"alt":32,"src":32135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32137,32138],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32140,32141],{},[3528,32142],{"alt":32,"src":32143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[40,32145,32146],{"start":191},[43,32147,32148],{},"插件2：微软Docker远程开发工具",[19,32150,32151],{},"下面这是远程开发的插件。",[19,32153,32154],{},[3528,32155],{"alt":32,"src":32156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32158,32159],{},[3528,32160],{"alt":32,"src":32161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32163,32164],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32166,32167],{},[3528,32168],{"alt":32,"src":32169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32171,32172],{},"安装完拓展之后，vscode进行链接：",[19,32174,32175],{},"1.按ctrl+shift+p",[19,32177,32178],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32180,32181],{},"3.选择目前运行的容器",[19,32183,32184],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32186,32187],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,32189,32191],{"className":161,"code":32190,"language":163,"meta":32,"style":32},"docker run -v 主机目录:容器目录 image-name\n",[34,32192,32193],{"__ignoreMap":32},[167,32194,32195,32197,32199,32202,32205],{"class":169,"line":170},[167,32196,28570],{"class":173},[167,32198,29247],{"class":177},[167,32200,32201],{"class":184}," -v",[167,32203,32204],{"class":177}," 主机目录:容器目录",[167,32206,32207],{"class":177}," image-name\n",[26,32209,32211],{"className":161,"code":32210,"language":163,"meta":32,"style":32},"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",[34,32212,32213],{"__ignoreMap":32},[167,32214,32215,32217,32219,32222,32224,32227],{"class":169,"line":170},[167,32216,28570],{"class":173},[167,32218,29247],{"class":177},[167,32220,32221],{"class":184}," -it",[167,32223,32201],{"class":184},[167,32225,32226],{"class":177}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[167,32228,32229],{"class":177}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32231,32232],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32234,32235],{},"查看挂载情况：",[26,32237,32239],{"className":161,"code":32238,"language":163,"meta":32,"style":32},"mount | grep -i project\n",[34,32240,32241],{"__ignoreMap":32},[167,32242,32243,32246,32248,32251,32253],{"class":169,"line":170},[167,32244,32245],{"class":173},"mount",[167,32247,27130],{"class":731},[167,32249,32250],{"class":173}," grep",[167,32252,28447],{"class":184},[167,32254,32255],{"class":177}," project\n",[19,32257,32258],{},"也可以通过ls来进行查看",[2113,32260,32261],{},"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":32,"searchDepth":191,"depth":191,"links":32263},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32120,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32270,"title":32271,"body":32272,"description":25403,"extension":2140,"meta":32276,"navigation":740,"path":32278,"seo":32279,"stem":32280,"__hash__":32281},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32273,"toc":32274},[],{"title":32,"searchDepth":191,"depth":191,"links":32275},[],{"category":32277},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32271,"description":25403},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32283,"title":32284,"body":32285,"description":25403,"extension":2140,"meta":32289,"navigation":740,"path":32290,"seo":32291,"stem":32292,"__hash__":32293},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32286,"toc":32287},[],{"title":32,"searchDepth":191,"depth":191,"links":32288},[],{"category":32277},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32284,"description":25403},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32295,"title":32296,"body":32297,"description":25403,"extension":2140,"meta":32584,"navigation":740,"path":32585,"seo":32586,"stem":32587,"__hash__":32588},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32298,"toc":32582},[32299,32302,32310,32325,32330,32379,32382,32388,32571,32576,32579],[10,32300,32296],{"id":32301},"_1验证深度学习环境",[19,32303,32304,32305],{},"关于环境的安装，看",[2439,32306,32309],{"href":32307,"rel":32308},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25887],"Pytorch-->深度学习",[19,32311,32312,32313,32316,32317,32320,32321,32324],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[34,32314,32315],{},"pytorch-cuda=12.4"," 是一个“ ",[2354,32318,32319],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2354,32322,32323],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32326,32327],{},[3528,32328],{"alt":32,"src":32329},"\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",[26,32331,32333],{"className":161,"code":32332,"language":163,"meta":32,"style":32},"# 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",[34,32334,32335,32340],{"__ignoreMap":32},[167,32336,32337],{"class":169,"line":170},[167,32338,32339],{"class":2268},"# CUDA 12.4\n",[167,32341,32342,32344,32346,32349,32352,32355,32358,32361,32363,32366,32369,32371,32374,32376],{"class":169,"line":191},[167,32343,373],{"class":173},[167,32345,181],{"class":177},[167,32347,32348],{"class":177}," pytorch==",[167,32350,32351],{"class":184},"2.5.1",[167,32353,32354],{"class":177}," torchvision==",[167,32356,32357],{"class":184},"0.20.1",[167,32359,32360],{"class":177}," torchaudio==",[167,32362,32351],{"class":184},[167,32364,32365],{"class":177}," pytorch-cuda=",[167,32367,32368],{"class":184},"12.4",[167,32370,354],{"class":184},[167,32372,32373],{"class":177}," pytorch",[167,32375,354],{"class":184},[167,32377,32378],{"class":177}," nvidia\n",[19,32380,32381],{},"）：",[19,32383,32384],{},[2439,32385,32386],{"href":32386,"rel":32387},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25887],[26,32389,32391],{"className":723,"code":32390,"language":305,"meta":32,"style":32},"# 对深度学习环境进行测试\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",[34,32392,32393,32398,32405,32410,32420,32435,32440,32450,32487,32494,32506,32522,32527,32537,32549,32559],{"__ignoreMap":32},[167,32394,32395],{"class":169,"line":170},[167,32396,32397],{"class":2268},"# 对深度学习环境进行测试\n",[167,32399,32400,32402],{"class":169,"line":191},[167,32401,732],{"class":731},[167,32403,32404],{"class":512}," torch\n",[167,32406,32407],{"class":169,"line":205},[167,32408,32409],{"class":2268},"# 查看cuda是否被激活\n",[167,32411,32412,32415,32417],{"class":169,"line":219},[167,32413,32414],{"class":512},"flag",[167,32416,523],{"class":731},[167,32418,32419],{"class":512},"torch.cuda.is_available()\n",[167,32421,32422,32424,32426,32429,32432],{"class":169,"line":230},[167,32423,1606],{"class":184},[167,32425,898],{"class":512},[167,32427,32428],{"class":177},"\"cuda:\"",[167,32430,32431],{"class":512},", flag)   ",[167,32433,32434],{"class":2268},"#返回true的话说明被激活\n",[167,32436,32437],{"class":169,"line":241},[167,32438,32439],{"class":2268},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[167,32441,32442,32445,32447],{"class":169,"line":261},[167,32443,32444],{"class":512},"ngpu",[167,32446,523],{"class":731},[167,32448,32449],{"class":184},"1\n",[167,32451,32452,32455,32457,32460,32463,32465,32468,32471,32474,32476,32478,32480,32482,32485],{"class":169,"line":773},[167,32453,32454],{"class":512},"device",[167,32456,523],{"class":731},[167,32458,32459],{"class":512},"torch.device(",[167,32461,32462],{"class":177},"\"cuda:0\"",[167,32464,3758],{"class":731},[167,32466,32467],{"class":512},"(torch.cuda.is_available() ",[167,32469,32470],{"class":731},"and",[167,32472,32473],{"class":512}," ngpu",[167,32475,3159],{"class":731},[167,32477,1154],{"class":184},[167,32479,15741],{"class":512},[167,32481,3755],{"class":731},[167,32483,32484],{"class":177}," \"cpu\"",[167,32486,873],{"class":512},[167,32488,32489,32491],{"class":169,"line":779},[167,32490,1606],{"class":184},[167,32492,32493],{"class":512},"(device)\n",[167,32495,32496,32498,32501,32503],{"class":169,"line":785},[167,32497,1606],{"class":184},[167,32499,32500],{"class":512},"(torch.cuda.get_device_name(",[167,32502,1154],{"class":184},[167,32504,32505],{"class":512},"))\n",[167,32507,32508,32510,32513,32515,32517,32519],{"class":169,"line":790},[167,32509,1606],{"class":184},[167,32511,32512],{"class":512},"(torch.rand(",[167,32514,2281],{"class":184},[167,32516,2578],{"class":512},[167,32518,2281],{"class":184},[167,32520,32521],{"class":512},").cuda())\n",[167,32523,32524],{"class":169,"line":796},[167,32525,32526],{"class":2268},"# 查看cuda和cudnn的版本\n",[167,32528,32529,32532,32534],{"class":169,"line":802},[167,32530,32531],{"class":512},"cuda_version",[167,32533,523],{"class":731},[167,32535,32536],{"class":512},"torch.version.cuda\n",[167,32538,32539,32541,32543,32546],{"class":169,"line":808},[167,32540,1606],{"class":184},[167,32542,898],{"class":512},[167,32544,32545],{"class":177},"\"cuda version\"",[167,32547,32548],{"class":512},",cuda_version)\n",[167,32550,32551,32554,32556],{"class":169,"line":814},[167,32552,32553],{"class":512},"cudnn_version",[167,32555,523],{"class":731},[167,32557,32558],{"class":512},"torch.backends.cudnn.version()\n",[167,32560,32561,32563,32565,32568],{"class":169,"line":820},[167,32562,1606],{"class":184},[167,32564,898],{"class":512},[167,32566,32567],{"class":177},"\"cudnn version\"",[167,32569,32570],{"class":512},",cudnn_version)\n",[19,32572,32573],{},[3528,32574],{"alt":32,"src":32575},"\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,32577,32578],{},"cuda:0 指的是一块显卡",[2113,32580,32581],{},"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":32,"searchDepth":191,"depth":191,"links":32583},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32296,"description":25403},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32590,"title":32591,"body":32592,"description":25403,"extension":2140,"meta":52388,"navigation":740,"path":52389,"seo":52390,"stem":52391,"__hash__":52392},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32593,"toc":52382},[32594,32597,32601,32605,32608,32613,32618,32621,32626,32631,32636,32639,32643,32648,32652,32657,32660,32665,32668,32671,32674,32677,32682,32685,32690,32695,32700,32705,32708,32712,32715,32720,33321,33326,33329,33334,33337,33340,33804,33807,33810,33813,33816,35864,35867,35872,35877,36672,36675,36680,37457,37461,39120,39124,39838,39842,39846,39851,39856,39861,39864,39869,39874,39879,39884,39889,39893,39898,41179,41184,41187,41190,41193,41348,41351,41354,42570,42575,43270,43274,43278,43283,43288,43291,43296,43301,43306,43311,43316,43321,43326,43331,43336,43341,43346,43351,43356,43361,43366,43371,43376,43381,43386,43391,43396,43401,43406,43411,43416,43421,43426,43431,43436,43441,43445,43449,43452,44930,44934,46581,46585,47279,47283,47286,47289,47833,47836,47840,47843,49240,49244,49247,49825,51612,51616,51619,52379],[10,32595,32591],{"id":32596},"_2经典神经网络",[494,32598,32600],{"id":32599},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24024,32602,32604],{"id":32603},"_211原理介绍","2.1.1.原理介绍",[19,32606,32607],{},"LeNet-5",[40,32609,32610],{},[43,32611,32612],{},"原理",[19,32614,32615],{},[3528,32616],{"alt":32,"src":32617},"\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,32619,32620],{},"B是batch批次；C是channel通道",[40,32622,32623],{"start":191},[43,32624,32625],{},"网络参数详细",[19,32627,32628],{},[3528,32629],{"alt":32,"src":32630},"\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,32632,32633],{},[3528,32634],{"alt":32,"src":32635},"\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,32637,32638],{},"AlexNet",[40,32640,32641],{},[43,32642,32612],{},[19,32644,32645],{},[3528,32646],{"alt":32,"src":32647},"\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",[40,32649,32650],{"start":191},[43,32651,32625],{},[19,32653,32654],{},[3528,32655],{"alt":32,"src":32656},"\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,32658,32659],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32661,32662],{},[3528,32663],{"alt":32,"src":32664},"\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,32666,32667],{},"数据处理中的图像增强操作:",[19,32669,32670],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32672,32673],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32675,32676],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32678,32679],{},[3528,32680],{"alt":32,"src":32681},"\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,32683,32684],{},"提升网络精确度的方法：LRN正则化",[19,32686,32687],{},[3528,32688],{"alt":32,"src":32689},"\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,32691,32692],{},[3528,32693],{"alt":32,"src":32694},"\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",[40,32696,32697],{"start":205},[43,32698,32699],{},"AlexNet的总结",[19,32701,32702],{},[3528,32703],{"alt":32,"src":32704},"\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,32706,32707],{},"比LeNet模型要深一丢丢",[24024,32709,32711],{"id":32710},"_212代码实现","2.1.2.代码实现",[19,32713,32714],{},"（1）LeNet",[40,32716,32717],{},[43,32718,32719],{},"模型搭建",[26,32721,32723],{"className":723,"code":32722,"language":305,"meta":32,"style":32},"# 导入库\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",[34,32724,32725,32730,32736,32741,32754,32759,32771,32775,32794,32799,32804,32815,32820,32839,32843,32848,32897,32909,32914,32943,32978,33005,33010,33022,33027,33047,33066,33085,33089,33094,33104,33121,33132,33147,33158,33169,33184,33199,33210,33217,33221,33234,33239,33262,33267,33272,33277,33281,33286,33291,33301],{"__ignoreMap":32},[167,32726,32727],{"class":169,"line":170},[167,32728,32729],{"class":2268},"# 导入库\n",[167,32731,32732,32734],{"class":169,"line":191},[167,32733,732],{"class":731},[167,32735,32404],{"class":512},[167,32737,32738],{"class":169,"line":205},[167,32739,32740],{"class":2268},"# 导入神经网络层\n",[167,32742,32743,32746,32749,32751],{"class":169,"line":219},[167,32744,32745],{"class":731},"from",[167,32747,32748],{"class":512}," torch ",[167,32750,732],{"class":731},[167,32752,32753],{"class":512}," nn\n",[167,32755,32756],{"class":169,"line":230},[167,32757,32758],{"class":2268},"# 导入展示神经网络参数的包\n",[167,32760,32761,32763,32766,32768],{"class":169,"line":241},[167,32762,32745],{"class":731},[167,32764,32765],{"class":512}," torchsummary ",[167,32767,732],{"class":731},[167,32769,32770],{"class":512}," summary\n",[167,32772,32773],{"class":169,"line":261},[167,32774,741],{"emptyLinePlaceholder":740},[167,32776,32777,32779,32782,32784,32787,32789,32792],{"class":169,"line":773},[167,32778,16721],{"class":731},[167,32780,32781],{"class":173}," LeNet",[167,32783,898],{"class":512},[167,32785,32786],{"class":173},"nn",[167,32788,2758],{"class":512},[167,32790,32791],{"class":173},"Module",[167,32793,984],{"class":512},[167,32795,32796],{"class":169,"line":779},[167,32797,32798],{"class":2268},"    # 模型初始化:\n",[167,32800,32801],{"class":169,"line":785},[167,32802,32803],{"class":2268},"    # 定义一些网络层和激活函数\n",[167,32805,32806,32809,32812],{"class":169,"line":790},[167,32807,32808],{"class":731},"    def",[167,32810,32811],{"class":184}," __init__",[167,32813,32814],{"class":512},"(self):\n",[167,32816,32817],{"class":169,"line":796},[167,32818,32819],{"class":2268},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[167,32821,32822,32825,32828,32831,32834,32837],{"class":169,"line":802},[167,32823,32824],{"class":184},"        super",[167,32826,32827],{"class":512},"(LeNet,",[167,32829,32830],{"class":184},"self",[167,32832,32833],{"class":512},").",[167,32835,32836],{"class":184},"__init__",[167,32838,4020],{"class":512},[167,32840,32841],{"class":169,"line":808},[167,32842,741],{"emptyLinePlaceholder":740},[167,32844,32845],{"class":169,"line":814},[167,32846,32847],{"class":2268},"        # 定义网络层\n",[167,32849,32850,32853,32856,32858,32861,32864,32866,32868,32870,32873,32875,32877,32879,32882,32884,32886,32888,32891,32893,32895],{"class":169,"line":820},[167,32851,32852],{"class":184},"        self",[167,32854,32855],{"class":512},".c1",[167,32857,523],{"class":731},[167,32859,32860],{"class":512},"nn.Conv2d(",[167,32862,32863],{"class":7246},"in_channels",[167,32865,523],{"class":731},[167,32867,2418],{"class":184},[167,32869,2578],{"class":512},[167,32871,32872],{"class":7246},"out_channels",[167,32874,523],{"class":731},[167,32876,2544],{"class":184},[167,32878,2578],{"class":512},[167,32880,32881],{"class":7246},"kernel_size",[167,32883,523],{"class":731},[167,32885,2519],{"class":184},[167,32887,2578],{"class":512},[167,32889,32890],{"class":7246},"padding",[167,32892,523],{"class":731},[167,32894,2287],{"class":184},[167,32896,873],{"class":512},[167,32898,32899,32901,32904,32906],{"class":169,"line":826},[167,32900,32852],{"class":184},[167,32902,32903],{"class":512},".sig",[167,32905,523],{"class":731},[167,32907,32908],{"class":512},"nn.Sigmoid()\n",[167,32910,32911],{"class":169,"line":832},[167,32912,32913],{"class":2268},"        # 定义池化\n",[167,32915,32916,32918,32921,32923,32926,32928,32930,32932,32934,32937,32939,32941],{"class":169,"line":837},[167,32917,32852],{"class":184},[167,32919,32920],{"class":512},".s2",[167,32922,523],{"class":731},[167,32924,32925],{"class":512},"nn.AvgPool2d(",[167,32927,32881],{"class":7246},[167,32929,523],{"class":731},[167,32931,2287],{"class":184},[167,32933,2578],{"class":512},[167,32935,32936],{"class":7246},"stride",[167,32938,523],{"class":731},[167,32940,2287],{"class":184},[167,32942,873],{"class":512},[167,32944,32945,32947,32950,32952,32954,32956,32958,32960,32962,32964,32966,32968,32970,32972,32974,32976],{"class":169,"line":842},[167,32946,32852],{"class":184},[167,32948,32949],{"class":512},".c3",[167,32951,523],{"class":731},[167,32953,32860],{"class":512},[167,32955,32863],{"class":7246},[167,32957,523],{"class":731},[167,32959,2544],{"class":184},[167,32961,2578],{"class":512},[167,32963,32872],{"class":7246},[167,32965,523],{"class":731},[167,32967,2801],{"class":184},[167,32969,2578],{"class":512},[167,32971,32881],{"class":7246},[167,32973,523],{"class":731},[167,32975,2519],{"class":184},[167,32977,873],{"class":512},[167,32979,32980,32982,32985,32987,32989,32991,32993,32995,32997,32999,33001,33003],{"class":169,"line":860},[167,32981,32852],{"class":184},[167,32983,32984],{"class":512},".s4",[167,32986,523],{"class":731},[167,32988,32925],{"class":512},[167,32990,32881],{"class":7246},[167,32992,523],{"class":731},[167,32994,2287],{"class":184},[167,32996,2578],{"class":512},[167,32998,32936],{"class":7246},[167,33000,523],{"class":731},[167,33002,2287],{"class":184},[167,33004,873],{"class":512},[167,33006,33007],{"class":169,"line":876},[167,33008,33009],{"class":2268},"        # 定义平展层\n",[167,33011,33012,33014,33017,33019],{"class":169,"line":887},[167,33013,32852],{"class":184},[167,33015,33016],{"class":512},".flatten",[167,33018,523],{"class":731},[167,33020,33021],{"class":512},"nn.Flatten()\n",[167,33023,33024],{"class":169,"line":892},[167,33025,33026],{"class":2268},"        # 定义全连接层\n",[167,33028,33029,33031,33034,33036,33039,33041,33043,33045],{"class":169,"line":907},[167,33030,32852],{"class":184},[167,33032,33033],{"class":512},".f5",[167,33035,523],{"class":731},[167,33037,33038],{"class":512},"nn.Linear(",[167,33040,6019],{"class":184},[167,33042,2578],{"class":512},[167,33044,3017],{"class":184},[167,33046,873],{"class":512},[167,33048,33049,33051,33054,33056,33058,33060,33062,33064],{"class":169,"line":920},[167,33050,32852],{"class":184},[167,33052,33053],{"class":512},".f6",[167,33055,523],{"class":731},[167,33057,33038],{"class":512},[167,33059,3017],{"class":184},[167,33061,2578],{"class":512},[167,33063,2911],{"class":184},[167,33065,873],{"class":512},[167,33067,33068,33070,33073,33075,33077,33079,33081,33083],{"class":169,"line":933},[167,33069,32852],{"class":184},[167,33071,33072],{"class":512},".f7",[167,33074,523],{"class":731},[167,33076,33038],{"class":512},[167,33078,2911],{"class":184},[167,33080,2578],{"class":512},[167,33082,2646],{"class":184},[167,33084,873],{"class":512},[167,33086,33087],{"class":169,"line":946},[167,33088,741],{"emptyLinePlaceholder":740},[167,33090,33091],{"class":169,"line":959},[167,33092,33093],{"class":2268},"    # 写工具->写前向传播\n",[167,33095,33096,33098,33101],{"class":169,"line":964},[167,33097,32808],{"class":731},[167,33099,33100],{"class":173}," forward",[167,33102,33103],{"class":512},"(self,x):\n",[167,33105,33106,33109,33111,33113,33116,33118],{"class":169,"line":987},[167,33107,33108],{"class":512},"        x",[167,33110,523],{"class":731},[167,33112,32830],{"class":184},[167,33114,33115],{"class":512},".sig(",[167,33117,32830],{"class":184},[167,33119,33120],{"class":512},".c1(x))\n",[167,33122,33123,33125,33127,33129],{"class":169,"line":993},[167,33124,33108],{"class":512},[167,33126,523],{"class":731},[167,33128,32830],{"class":184},[167,33130,33131],{"class":512},".s2(x)\n",[167,33133,33134,33136,33138,33140,33142,33144],{"class":169,"line":998},[167,33135,33108],{"class":512},[167,33137,523],{"class":731},[167,33139,32830],{"class":184},[167,33141,33115],{"class":512},[167,33143,32830],{"class":184},[167,33145,33146],{"class":512},".c3(x))\n",[167,33148,33149,33151,33153,33155],{"class":169,"line":1010},[167,33150,33108],{"class":512},[167,33152,523],{"class":731},[167,33154,32830],{"class":184},[167,33156,33157],{"class":512},".s4(x)\n",[167,33159,33160,33162,33164,33166],{"class":169,"line":1022},[167,33161,33108],{"class":512},[167,33163,523],{"class":731},[167,33165,32830],{"class":184},[167,33167,33168],{"class":512},".flatten(x)\n",[167,33170,33171,33173,33175,33177,33179,33181],{"class":169,"line":1027},[167,33172,33108],{"class":512},[167,33174,523],{"class":731},[167,33176,32830],{"class":184},[167,33178,33115],{"class":512},[167,33180,32830],{"class":184},[167,33182,33183],{"class":512},".f5(x))\n",[167,33185,33186,33188,33190,33192,33194,33196],{"class":169,"line":1032},[167,33187,33108],{"class":512},[167,33189,523],{"class":731},[167,33191,32830],{"class":184},[167,33193,33115],{"class":512},[167,33195,32830],{"class":184},[167,33197,33198],{"class":512},".f6(x))\n",[167,33200,33201,33203,33205,33207],{"class":169,"line":1049},[167,33202,33108],{"class":512},[167,33204,523],{"class":731},[167,33206,32830],{"class":184},[167,33208,33209],{"class":512},".f7(x)\n",[167,33211,33212,33214],{"class":169,"line":10005},[167,33213,16779],{"class":731},[167,33215,33216],{"class":512}," x\n",[167,33218,33219],{"class":169,"line":10011},[167,33220,741],{"emptyLinePlaceholder":740},[167,33222,33223,33225,33227,33229,33232],{"class":169,"line":10038},[167,33224,1035],{"class":731},[167,33226,1038],{"class":184},[167,33228,4985],{"class":731},[167,33230,33231],{"class":177},"\"__main__\"",[167,33233,857],{"class":512},[167,33235,33236],{"class":169,"line":10043},[167,33237,33238],{"class":2268},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[167,33240,33241,33244,33246,33248,33251,33253,33256,33258,33260],{"class":169,"line":10049},[167,33242,33243],{"class":512},"    device",[167,33245,523],{"class":731},[167,33247,32459],{"class":512},[167,33249,33250],{"class":177},"\"cuda\"",[167,33252,3758],{"class":731},[167,33254,33255],{"class":512}," torch.cuda.is_available() ",[167,33257,3755],{"class":731},[167,33259,32484],{"class":177},[167,33261,873],{"class":512},[167,33263,33264],{"class":169,"line":10061},[167,33265,33266],{"class":2268},"    # 如果就是想指定用cpu用下方代码:\n",[167,33268,33269],{"class":169,"line":10073},[167,33270,33271],{"class":2268},"    # device=\"cpu\"\n",[167,33273,33274],{"class":169,"line":10085},[167,33275,33276],{"class":2268},"    # print(device)\n",[167,33278,33279],{"class":169,"line":11744},[167,33280,741],{"emptyLinePlaceholder":740},[167,33282,33283],{"class":169,"line":11769},[167,33284,33285],{"class":2268},"    # 实例化模型\n",[167,33287,33288],{"class":169,"line":11792},[167,33289,33290],{"class":2268},"    # 将模型放到设备中去运行\n",[167,33292,33293,33296,33298],{"class":169,"line":11816},[167,33294,33295],{"class":512},"    model",[167,33297,523],{"class":731},[167,33299,33300],{"class":512},"LeNet().to(device)\n",[167,33302,33303,33305,33308,33310,33312,33314,33316,33318],{"class":169,"line":11821},[167,33304,895],{"class":184},[167,33306,33307],{"class":512},"(summary(model,(",[167,33309,2418],{"class":184},[167,33311,2578],{"class":512},[167,33313,3101],{"class":184},[167,33315,2578],{"class":512},[167,33317,3101],{"class":184},[167,33319,33320],{"class":512},")))\n",[19,33322,33323],{},[3528,33324],{"alt":32,"src":33325},"\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,33327,33328],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[40,33330,33331],{"start":191},[43,33332,33333],{},"训练",[19,33335,33336],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33338,33339],{},"在训练之前可以将数据展示看一下",[26,33341,33343],{"className":723,"code":33342,"language":305,"meta":32,"style":32},"# 建立画图的函数，用于展示数据\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",[34,33344,33345,33350,33355,33367,33379,33392,33397,33409,33414,33426,33431,33443,33447,33451,33472,33484,33489,33510,33521,33525,33530,33548,33559,33564,33575,33580,33591,33595,33600,33615,33628,33633,33638,33651,33664,33677,33682,33686,33691,33711,33728,33748,33761,33774,33784,33799],{"__ignoreMap":32},[167,33346,33347],{"class":169,"line":170},[167,33348,33349],{"class":2268},"# 建立画图的函数，用于展示数据\n",[167,33351,33352],{"class":169,"line":191},[167,33353,33354],{"class":2268},"# torchvision中包含很多内置的数据集\n",[167,33356,33357,33359,33362,33364],{"class":169,"line":205},[167,33358,32745],{"class":731},[167,33360,33361],{"class":512}," sklearn.externals.array_api_compat.torch ",[167,33363,732],{"class":731},[167,33365,33366],{"class":512}," squeeze\n",[167,33368,33369,33371,33374,33376],{"class":169,"line":219},[167,33370,32745],{"class":731},[167,33372,33373],{"class":512}," torchvision.datasets ",[167,33375,732],{"class":731},[167,33377,33378],{"class":512}," FashionMNIST\n",[167,33380,33381,33383,33386,33389],{"class":169,"line":230},[167,33382,732],{"class":731},[167,33384,33385],{"class":512}," numpy ",[167,33387,33388],{"class":731},"as",[167,33390,33391],{"class":512}," np\n",[167,33393,33394],{"class":169,"line":241},[167,33395,33396],{"class":2268},"# 引入处理数据集的包\n",[167,33398,33399,33401,33404,33406],{"class":169,"line":261},[167,33400,32745],{"class":731},[167,33402,33403],{"class":512}," torchvision ",[167,33405,732],{"class":731},[167,33407,33408],{"class":512}," transforms\n",[167,33410,33411],{"class":169,"line":773},[167,33412,33413],{"class":2268},"# 从torch库中引入数据处理的包\n",[167,33415,33416,33418,33421,33423],{"class":169,"line":779},[167,33417,732],{"class":731},[167,33419,33420],{"class":512}," torch.utils.data ",[167,33422,33388],{"class":731},[167,33424,33425],{"class":512}," Data\n",[167,33427,33428],{"class":169,"line":785},[167,33429,33430],{"class":2268},"# 导入画图的库\n",[167,33432,33433,33435,33438,33440],{"class":169,"line":790},[167,33434,732],{"class":731},[167,33436,33437],{"class":512}," matplotlib.pyplot ",[167,33439,33388],{"class":731},[167,33441,33442],{"class":512}," plt\n",[167,33444,33445],{"class":169,"line":796},[167,33446,741],{"emptyLinePlaceholder":740},[167,33448,33449],{"class":169,"line":802},[167,33450,741],{"emptyLinePlaceholder":740},[167,33452,33453,33456,33458,33461,33464,33466,33469],{"class":169,"line":808},[167,33454,33455],{"class":512},"train_data",[167,33457,523],{"class":731},[167,33459,33460],{"class":512},"FashionMNIST(",[167,33462,33463],{"class":7246},"root",[167,33465,523],{"class":731},[167,33467,33468],{"class":177},"'.\u002Fdata'",[167,33470,33471],{"class":512},",\n",[167,33473,33474,33477,33479,33482],{"class":169,"line":814},[167,33475,33476],{"class":7246},"                        train",[167,33478,523],{"class":731},[167,33480,33481],{"class":184},"True",[167,33483,33471],{"class":512},[167,33485,33486],{"class":169,"line":820},[167,33487,33488],{"class":2268},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[167,33490,33491,33494,33496,33499,33502,33504,33507],{"class":169,"line":826},[167,33492,33493],{"class":7246},"                        transform",[167,33495,523],{"class":731},[167,33497,33498],{"class":512},"transforms.Compose([transforms.Resize(",[167,33500,33501],{"class":7246},"size",[167,33503,523],{"class":731},[167,33505,33506],{"class":184},"224",[167,33508,33509],{"class":512},"),transforms.ToTensor()]),\n",[167,33511,33512,33515,33517,33519],{"class":169,"line":832},[167,33513,33514],{"class":7246},"                        download",[167,33516,523],{"class":731},[167,33518,33481],{"class":184},[167,33520,873],{"class":512},[167,33522,33523],{"class":169,"line":837},[167,33524,741],{"emptyLinePlaceholder":740},[167,33526,33527],{"class":169,"line":842},[167,33528,33529],{"class":2268},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[167,33531,33532,33535,33537,33540,33543,33545],{"class":169,"line":860},[167,33533,33534],{"class":512},"train_loader",[167,33536,523],{"class":731},[167,33538,33539],{"class":512},"Data.DataLoader(",[167,33541,33542],{"class":7246},"dataset",[167,33544,523],{"class":731},[167,33546,33547],{"class":512},"train_data,\n",[167,33549,33550,33553,33555,33557],{"class":169,"line":876},[167,33551,33552],{"class":7246},"                             batch_size",[167,33554,523],{"class":731},[167,33556,2405],{"class":184},[167,33558,33471],{"class":512},[167,33560,33561],{"class":169,"line":887},[167,33562,33563],{"class":2268},"                             # 数据是否打乱\n",[167,33565,33566,33569,33571,33573],{"class":169,"line":892},[167,33567,33568],{"class":7246},"                             shuffle",[167,33570,523],{"class":731},[167,33572,33481],{"class":184},[167,33574,33471],{"class":512},[167,33576,33577],{"class":169,"line":907},[167,33578,33579],{"class":2268},"                             # 规定加载数据的进程\n",[167,33581,33582,33585,33587,33589],{"class":169,"line":920},[167,33583,33584],{"class":7246},"                             num_workers",[167,33586,523],{"class":731},[167,33588,1154],{"class":184},[167,33590,873],{"class":512},[167,33592,33593],{"class":169,"line":933},[167,33594,741],{"emptyLinePlaceholder":740},[167,33596,33597],{"class":169,"line":946},[167,33598,33599],{"class":2268},"# 获得一个batch的数据\n",[167,33601,33602,33604,33607,33609,33612],{"class":169,"line":959},[167,33603,1168],{"class":731},[167,33605,33606],{"class":512}," step,(b_x,b_y) ",[167,33608,973],{"class":731},[167,33610,33611],{"class":184}," enumerate",[167,33613,33614],{"class":512},"(train_loader):\n",[167,33616,33617,33619,33622,33624,33626],{"class":169,"line":964},[167,33618,5136],{"class":731},[167,33620,33621],{"class":512}," step ",[167,33623,3159],{"class":731},[167,33625,6125],{"class":184},[167,33627,857],{"class":512},[167,33629,33630],{"class":169,"line":987},[167,33631,33632],{"class":731},"        break\n",[167,33634,33635],{"class":169,"line":993},[167,33636,33637],{"class":2268},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[167,33639,33640,33643,33645,33648],{"class":169,"line":998},[167,33641,33642],{"class":512},"batch_x",[167,33644,523],{"class":731},[167,33646,33647],{"class":512},"b_x.squeeze().numpy()  ",[167,33649,33650],{"class":2268},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[167,33652,33653,33656,33658,33661],{"class":169,"line":1010},[167,33654,33655],{"class":512},"batch_y",[167,33657,523],{"class":731},[167,33659,33660],{"class":512},"b_y.numpy()   ",[167,33662,33663],{"class":2268},"#将张量转换成功numpy数组\n",[167,33665,33666,33669,33671,33674],{"class":169,"line":1022},[167,33667,33668],{"class":512},"class_label",[167,33670,523],{"class":731},[167,33672,33673],{"class":512},"train_data.classes  ",[167,33675,33676],{"class":2268},"#训练集标签\n",[167,33678,33679],{"class":169,"line":1027},[167,33680,33681],{"class":2268},"# print(class_label)\n",[167,33683,33684],{"class":169,"line":1032},[167,33685,741],{"emptyLinePlaceholder":740},[167,33687,33688],{"class":169,"line":1049},[167,33689,33690],{"class":2268},"# 可视化一个batch的图像\n",[167,33692,33693,33696,33699,33701,33703,33705,33707,33709],{"class":169,"line":10005},[167,33694,33695],{"class":512},"plt.figure(",[167,33697,33698],{"class":7246},"figsize",[167,33700,523],{"class":731},[167,33702,898],{"class":512},[167,33704,2698],{"class":184},[167,33706,2578],{"class":512},[167,33708,2519],{"class":184},[167,33710,32505],{"class":512},[167,33712,33713,33715,33718,33720,33723,33725],{"class":169,"line":10011},[167,33714,1168],{"class":731},[167,33716,33717],{"class":512}," ii ",[167,33719,973],{"class":731},[167,33721,33722],{"class":512}," np.arange(",[167,33724,9388],{"class":184},[167,33726,33727],{"class":512},"(batch_y)):\n",[167,33729,33730,33733,33735,33737,33739,33742,33744,33746],{"class":169,"line":10038},[167,33731,33732],{"class":512},"    plt.subplot(",[167,33734,2494],{"class":184},[167,33736,2578],{"class":512},[167,33738,2801],{"class":184},[167,33740,33741],{"class":512},",ii ",[167,33743,2681],{"class":731},[167,33745,27138],{"class":184},[167,33747,873],{"class":512},[167,33749,33750,33753,33756,33758],{"class":169,"line":10043},[167,33751,33752],{"class":512},"    plt.imshow(batch_x[ii,:,:],",[167,33754,33755],{"class":7246},"cmap",[167,33757,523],{"class":731},[167,33759,33760],{"class":512},"plt.cm.gray)\n",[167,33762,33763,33766,33768,33770,33772],{"class":169,"line":10049},[167,33764,33765],{"class":512},"    plt.title(class_label[batch_y[ii]],",[167,33767,33501],{"class":7246},[167,33769,523],{"class":731},[167,33771,2646],{"class":184},[167,33773,873],{"class":512},[167,33775,33776,33779,33782],{"class":169,"line":10061},[167,33777,33778],{"class":512},"    plt.axis(",[167,33780,33781],{"class":177},"\"off\"",[167,33783,873],{"class":512},[167,33785,33786,33789,33792,33794,33797],{"class":169,"line":10073},[167,33787,33788],{"class":512},"    plt.subplots_adjust(",[167,33790,33791],{"class":7246},"wspace",[167,33793,523],{"class":731},[167,33795,33796],{"class":184},"0.05",[167,33798,873],{"class":512},[167,33800,33801],{"class":169,"line":10085},[167,33802,33803],{"class":512},"plt.show()\n",[19,33805,33806],{},"用matplotlib进行展示的过程可以后续再补",[19,33808,33809],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33811,33812],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33814,33815],{},"模型训练：",[26,33817,33819],{"className":723,"code":33818,"language":305,"meta":32,"style":32},"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",[34,33820,33821,33828,33835,33839,33851,33857,33868,33878,33888,33898,33908,33913,33925,33935,33939,33943,33948,33958,33971,33982,33999,34010,34049,34065,34077,34088,34093,34104,34120,34131,34142,34153,34160,34164,34169,34174,34178,34183,34193,34214,34218,34222,34227,34232,34237,34257,34261,34266,34276,34280,34285,34294,34299,34304,34309,34319,34323,34327,34332,34337,34347,34352,34362,34367,34376,34381,34390,34395,34404,34408,34413,34423,34427,34431,34436,34450,34478,34493,34497,34502,34507,34516,34521,34530,34535,34544,34549,34558,34563,34572,34577,34586,34591,34604,34609,34619,34624,34634,34640,34646,34652,34658,34669,34675,34695,34701,34712,34718,34724,34730,34736,34742,34748,34754,34774,34780,34796,34802,34816,34822,34837,34843,34852,34858,34867,34873,34879,34888,34894,34905,34911,34930,34936,34947,34953,34973,34989,34995,35009,35015,35021,35032,35038,35044,35054,35060,35071,35077,35087,35092,35098,35147,35194,35199,35205,35224,35230,35250,35256,35262,35272,35277,35283,35299,35344,35350,35356,35362,35373,35379,35385,35391,35408,35422,35431,35440,35449,35458,35464,35470,35478,35483,35489,35500,35506,35526,35532,35538,35544,35561,35567,35573,35579,35585,35591,35618,35642,35648,35654,35660,35671,35682,35688,35705,35728,35751,35757,35762,35771,35781,35787,35792,35798,35811,35817,35828,35839,35858],{"__ignoreMap":32},[167,33822,33823,33825],{"class":169,"line":170},[167,33824,732],{"class":731},[167,33826,33827],{"class":512}," copy\n",[167,33829,33830,33832],{"class":169,"line":191},[167,33831,732],{"class":731},[167,33833,33834],{"class":512}," time\n",[167,33836,33837],{"class":169,"line":205},[167,33838,741],{"emptyLinePlaceholder":740},[167,33840,33841,33843,33846,33848],{"class":169,"line":219},[167,33842,732],{"class":731},[167,33844,33845],{"class":512}," pandas ",[167,33847,33388],{"class":731},[167,33849,33850],{"class":512}," pd\n",[167,33852,33853,33855],{"class":169,"line":230},[167,33854,732],{"class":731},[167,33856,32404],{"class":512},[167,33858,33859,33861,33863,33865],{"class":169,"line":241},[167,33860,32745],{"class":731},[167,33862,33420],{"class":512},[167,33864,732],{"class":731},[167,33866,33867],{"class":512}," Dataset\n",[167,33869,33870,33872,33874,33876],{"class":169,"line":261},[167,33871,32745],{"class":731},[167,33873,33373],{"class":512},[167,33875,732],{"class":731},[167,33877,33378],{"class":512},[167,33879,33880,33882,33884,33886],{"class":169,"line":773},[167,33881,32745],{"class":731},[167,33883,33403],{"class":512},[167,33885,732],{"class":731},[167,33887,33408],{"class":512},[167,33889,33890,33892,33894,33896],{"class":169,"line":779},[167,33891,732],{"class":731},[167,33893,33420],{"class":512},[167,33895,33388],{"class":731},[167,33897,33425],{"class":512},[167,33899,33900,33902,33904,33906],{"class":169,"line":785},[167,33901,732],{"class":731},[167,33903,33437],{"class":512},[167,33905,33388],{"class":731},[167,33907,33442],{"class":512},[167,33909,33910],{"class":169,"line":790},[167,33911,33912],{"class":2268},"# 导入模型\n",[167,33914,33915,33917,33920,33922],{"class":169,"line":796},[167,33916,32745],{"class":731},[167,33918,33919],{"class":512}," model ",[167,33921,732],{"class":731},[167,33923,33924],{"class":512}," LeNet\n",[167,33926,33927,33929,33931,33933],{"class":169,"line":802},[167,33928,32745],{"class":731},[167,33930,32748],{"class":512},[167,33932,732],{"class":731},[167,33934,32753],{"class":512},[167,33936,33937],{"class":169,"line":808},[167,33938,741],{"emptyLinePlaceholder":740},[167,33940,33941],{"class":169,"line":814},[167,33942,741],{"emptyLinePlaceholder":740},[167,33944,33945],{"class":169,"line":820},[167,33946,33947],{"class":2268},"# 处理训练集与验证集函数--->划分数据集\n",[167,33949,33950,33952,33955],{"class":169,"line":826},[167,33951,845],{"class":731},[167,33953,33954],{"class":173}," train_val_data_process",[167,33956,33957],{"class":512},"():\n",[167,33959,33960,33963,33965,33967,33969],{"class":169,"line":832},[167,33961,33962],{"class":512},"    train_data",[167,33964,523],{"class":731},[167,33966,33460],{"class":512},[167,33968,33468],{"class":177},[167,33970,33471],{"class":512},[167,33972,33973,33976,33978,33980],{"class":169,"line":837},[167,33974,33975],{"class":7246},"                            train",[167,33977,523],{"class":731},[167,33979,33481],{"class":184},[167,33981,33471],{"class":512},[167,33983,33984,33987,33989,33991,33993,33995,33997],{"class":169,"line":842},[167,33985,33986],{"class":7246},"                            transform",[167,33988,523],{"class":731},[167,33990,33498],{"class":512},[167,33992,33501],{"class":7246},[167,33994,523],{"class":731},[167,33996,3101],{"class":184},[167,33998,33509],{"class":512},[167,34000,34001,34004,34006,34008],{"class":169,"line":860},[167,34002,34003],{"class":7246},"                            download",[167,34005,523],{"class":731},[167,34007,33481],{"class":184},[167,34009,873],{"class":512},[167,34011,34012,34015,34017,34020,34023,34025,34028,34030,34032,34035,34037,34039,34042,34044,34046],{"class":169,"line":876},[167,34013,34014],{"class":512},"    train_data,val_data",[167,34016,523],{"class":731},[167,34018,34019],{"class":512},"Data.random_split(train_data,[",[167,34021,34022],{"class":184},"round",[167,34024,898],{"class":512},[167,34026,34027],{"class":184},"0.8",[167,34029,2655],{"class":731},[167,34031,9388],{"class":184},[167,34033,34034],{"class":512},"(train_data)),",[167,34036,34022],{"class":184},[167,34038,898],{"class":512},[167,34040,34041],{"class":184},"0.2",[167,34043,2655],{"class":731},[167,34045,9388],{"class":184},[167,34047,34048],{"class":512},"(train_data))])\n",[167,34050,34051,34054,34056,34059,34061,34063],{"class":169,"line":887},[167,34052,34053],{"class":512},"    train_dataloader ",[167,34055,523],{"class":731},[167,34057,34058],{"class":512}," Data.DataLoader(",[167,34060,33542],{"class":7246},[167,34062,523],{"class":731},[167,34064,33547],{"class":512},[167,34066,34067,34070,34072,34075],{"class":169,"line":892},[167,34068,34069],{"class":7246},"                                       batch_size",[167,34071,523],{"class":731},[167,34073,34074],{"class":184},"128",[167,34076,33471],{"class":512},[167,34078,34079,34082,34084,34086],{"class":169,"line":907},[167,34080,34081],{"class":7246},"                                       shuffle",[167,34083,523],{"class":731},[167,34085,33481],{"class":184},[167,34087,33471],{"class":512},[167,34089,34090],{"class":169,"line":920},[167,34091,34092],{"class":2268},"                                       # 规定8个进程\n",[167,34094,34095,34098,34100,34102],{"class":169,"line":933},[167,34096,34097],{"class":7246},"                                       num_workers",[167,34099,523],{"class":731},[167,34101,2595],{"class":184},[167,34103,873],{"class":512},[167,34105,34106,34109,34111,34113,34115,34117],{"class":169,"line":946},[167,34107,34108],{"class":512},"    val_dataloader",[167,34110,523],{"class":731},[167,34112,33539],{"class":512},[167,34114,33542],{"class":7246},[167,34116,523],{"class":731},[167,34118,34119],{"class":512},"val_data,\n",[167,34121,34122,34125,34127,34129],{"class":169,"line":959},[167,34123,34124],{"class":7246},"                                   batch_size",[167,34126,523],{"class":731},[167,34128,34074],{"class":184},[167,34130,33471],{"class":512},[167,34132,34133,34136,34138,34140],{"class":169,"line":964},[167,34134,34135],{"class":7246},"                                   shuffle",[167,34137,523],{"class":731},[167,34139,33481],{"class":184},[167,34141,33471],{"class":512},[167,34143,34144,34147,34149,34151],{"class":169,"line":987},[167,34145,34146],{"class":7246},"                                   num_workers",[167,34148,523],{"class":731},[167,34150,2595],{"class":184},[167,34152,873],{"class":512},[167,34154,34155,34157],{"class":169,"line":993},[167,34156,6122],{"class":731},[167,34158,34159],{"class":512}," train_dataloader,val_dataloader\n",[167,34161,34162],{"class":169,"line":998},[167,34163,741],{"emptyLinePlaceholder":740},[167,34165,34166],{"class":169,"line":1010},[167,34167,34168],{"class":2268},"# 验证是否出错\n",[167,34170,34171],{"class":169,"line":1022},[167,34172,34173],{"class":2268},"# train_val_data_process()\n",[167,34175,34176],{"class":169,"line":1027},[167,34177,741],{"emptyLinePlaceholder":740},[167,34179,34180],{"class":169,"line":1032},[167,34181,34182],{"class":2268},"# 定义模型训练函数\n",[167,34184,34185,34187,34190],{"class":169,"line":1049},[167,34186,845],{"class":731},[167,34188,34189],{"class":173}," train_model_process",[167,34191,34192],{"class":512},"(model,train_dataloader,val_dataloader,num_epochs):\n",[167,34194,34195,34197,34199,34201,34203,34205,34207,34209,34212],{"class":169,"line":10005},[167,34196,33243],{"class":512},[167,34198,523],{"class":731},[167,34200,32459],{"class":512},[167,34202,33250],{"class":177},[167,34204,3758],{"class":731},[167,34206,33255],{"class":512},[167,34208,3755],{"class":731},[167,34210,34211],{"class":177}," 'cpu'",[167,34213,873],{"class":512},[167,34215,34216],{"class":169,"line":10011},[167,34217,741],{"emptyLinePlaceholder":740},[167,34219,34220],{"class":169,"line":10038},[167,34221,741],{"emptyLinePlaceholder":740},[167,34223,34224],{"class":169,"line":10043},[167,34225,34226],{"class":2268},"    # 定义优化器\n",[167,34228,34229],{"class":169,"line":10049},[167,34230,34231],{"class":2268},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[167,34233,34234],{"class":169,"line":10061},[167,34235,34236],{"class":2268},"    # lr为学习率\n",[167,34238,34239,34242,34244,34247,34250,34252,34255],{"class":169,"line":10073},[167,34240,34241],{"class":512},"    optimizer",[167,34243,523],{"class":731},[167,34245,34246],{"class":512},"torch.optim.Adam(model.parameters(),",[167,34248,34249],{"class":7246},"lr",[167,34251,523],{"class":731},[167,34253,34254],{"class":184},"0.001",[167,34256,873],{"class":512},[167,34258,34259],{"class":169,"line":10085},[167,34260,741],{"emptyLinePlaceholder":740},[167,34262,34263],{"class":169,"line":11744},[167,34264,34265],{"class":2268},"    # 定义损失函数使用交叉熵损失函数\n",[167,34267,34268,34271,34273],{"class":169,"line":11769},[167,34269,34270],{"class":512},"    criterion",[167,34272,523],{"class":731},[167,34274,34275],{"class":512},"nn.CrossEntropyLoss()\n",[167,34277,34278],{"class":169,"line":11792},[167,34279,741],{"emptyLinePlaceholder":740},[167,34281,34282],{"class":169,"line":11816},[167,34283,34284],{"class":2268},"    # 将模型放到GPU中进行训练\n",[167,34286,34287,34289,34291],{"class":169,"line":11821},[167,34288,33295],{"class":512},[167,34290,523],{"class":731},[167,34292,34293],{"class":512},"model.to(device)\n",[167,34295,34296],{"class":169,"line":11826},[167,34297,34298],{"class":2268},"    # 复制当前模型的参数\n",[167,34300,34301],{"class":169,"line":11831},[167,34302,34303],{"class":2268},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[167,34305,34306],{"class":169,"line":11840},[167,34307,34308],{"class":2268},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[167,34310,34311,34314,34316],{"class":169,"line":11845},[167,34312,34313],{"class":512},"    best_model_wts",[167,34315,523],{"class":731},[167,34317,34318],{"class":512},"copy.deepcopy(model.state_dict())\n",[167,34320,34321],{"class":169,"line":11851},[167,34322,741],{"emptyLinePlaceholder":740},[167,34324,34325],{"class":169,"line":11872},[167,34326,741],{"emptyLinePlaceholder":740},[167,34328,34329],{"class":169,"line":11878},[167,34330,34331],{"class":2268},"    # 初始化参数\n",[167,34333,34334],{"class":169,"line":11892},[167,34335,34336],{"class":2268},"    # 最高准确度\n",[167,34338,34339,34342,34344],{"class":169,"line":11898},[167,34340,34341],{"class":512},"    best_acc",[167,34343,523],{"class":731},[167,34345,34346],{"class":184},"0.0\n",[167,34348,34349],{"class":169,"line":11925},[167,34350,34351],{"class":2268},"    # 训练集损失列表\n",[167,34353,34354,34357,34359],{"class":169,"line":11934},[167,34355,34356],{"class":512},"    train_loss_all",[167,34358,523],{"class":731},[167,34360,34361],{"class":512},"[]\n",[167,34363,34364],{"class":169,"line":11940},[167,34365,34366],{"class":2268},"    # 验证集函数列表\n",[167,34368,34369,34372,34374],{"class":169,"line":11948},[167,34370,34371],{"class":512},"    val_loss_all",[167,34373,523],{"class":731},[167,34375,34361],{"class":512},[167,34377,34378],{"class":169,"line":11953},[167,34379,34380],{"class":2268},"    # 训练集准确度列表\n",[167,34382,34383,34386,34388],{"class":169,"line":18630},[167,34384,34385],{"class":512},"    train_acc_all",[167,34387,523],{"class":731},[167,34389,34361],{"class":512},[167,34391,34392],{"class":169,"line":18636},[167,34393,34394],{"class":2268},"    # 验证集准确度列表\n",[167,34396,34397,34400,34402],{"class":169,"line":18659},[167,34398,34399],{"class":512},"    val_acc_all",[167,34401,523],{"class":731},[167,34403,34361],{"class":512},[167,34405,34406],{"class":169,"line":18665},[167,34407,741],{"emptyLinePlaceholder":740},[167,34409,34410],{"class":169,"line":18688},[167,34411,34412],{"class":2268},"    # 保存当前时间--->方便看每轮训练的时间\n",[167,34414,34415,34418,34420],{"class":169,"line":18702},[167,34416,34417],{"class":512},"    since",[167,34419,523],{"class":731},[167,34421,34422],{"class":512},"time.time()\n",[167,34424,34425],{"class":169,"line":18722},[167,34426,741],{"emptyLinePlaceholder":740},[167,34428,34429],{"class":169,"line":18728},[167,34430,741],{"emptyLinePlaceholder":740},[167,34432,34433],{"class":169,"line":18739},[167,34434,34435],{"class":2268},"    # 准备工作完成--->开始训练模型\n",[167,34437,34438,34440,34443,34445,34447],{"class":169,"line":18762},[167,34439,967],{"class":731},[167,34441,34442],{"class":512}," epoch ",[167,34444,973],{"class":731},[167,34446,976],{"class":184},[167,34448,34449],{"class":512},"(num_epochs):\n",[167,34451,34452,34455,34457,34460,34463,34465,34467,34469,34472,34474,34476],{"class":169,"line":18784},[167,34453,34454],{"class":184},"        print",[167,34456,898],{"class":512},[167,34458,34459],{"class":177},"\"Epoch ",[167,34461,34462],{"class":184},"{}",[167,34464,2784],{"class":177},[167,34466,34462],{"class":184},[167,34468,2452],{"class":177},[167,34470,34471],{"class":512},".format(epoch,num_epochs",[167,34473,2732],{"class":731},[167,34475,2418],{"class":184},[167,34477,32505],{"class":512},[167,34479,34480,34482,34484,34487,34489,34491],{"class":169,"line":18789},[167,34481,34454],{"class":184},[167,34483,898],{"class":512},[167,34485,34486],{"class":177},"\"-\"",[167,34488,2655],{"class":731},[167,34490,2646],{"class":184},[167,34492,873],{"class":512},[167,34494,34495],{"class":169,"line":18795},[167,34496,741],{"emptyLinePlaceholder":740},[167,34498,34499],{"class":169,"line":18809},[167,34500,34501],{"class":2268},"        # 初始化参数\n",[167,34503,34504],{"class":169,"line":18822},[167,34505,34506],{"class":2268},"        # 训练集损失函数\n",[167,34508,34509,34512,34514],{"class":169,"line":18827},[167,34510,34511],{"class":512},"        train_loss",[167,34513,523],{"class":731},[167,34515,34346],{"class":184},[167,34517,34518],{"class":169,"line":18841},[167,34519,34520],{"class":2268},"        # 训练集准确度\n",[167,34522,34523,34526,34528],{"class":169,"line":18846},[167,34524,34525],{"class":512},"        train_corrects",[167,34527,523],{"class":731},[167,34529,5120],{"class":184},[167,34531,34532],{"class":169,"line":18852},[167,34533,34534],{"class":2268},"        # 验证集损失函数\n",[167,34536,34537,34540,34542],{"class":169,"line":18857},[167,34538,34539],{"class":512},"        val_loss",[167,34541,523],{"class":731},[167,34543,34346],{"class":184},[167,34545,34546],{"class":169,"line":18871},[167,34547,34548],{"class":2268},"        # 验证集准确度\n",[167,34550,34551,34554,34556],{"class":169,"line":18876},[167,34552,34553],{"class":512},"        val_corrects",[167,34555,523],{"class":731},[167,34557,5120],{"class":184},[167,34559,34560],{"class":169,"line":18881},[167,34561,34562],{"class":2268},"        # 训练集样本数量\n",[167,34564,34565,34568,34570],{"class":169,"line":18895},[167,34566,34567],{"class":512},"        train_num",[167,34569,523],{"class":731},[167,34571,5120],{"class":184},[167,34573,34574],{"class":169,"line":18907},[167,34575,34576],{"class":2268},"        # 验证集样本数量\n",[167,34578,34579,34582,34584],{"class":169,"line":18912},[167,34580,34581],{"class":512},"        val_num",[167,34583,523],{"class":731},[167,34585,5120],{"class":184},[167,34587,34588],{"class":169,"line":18925},[167,34589,34590],{"class":2268},"        # 将数据放到设备,并开始训练\n",[167,34592,34593,34595,34597,34599,34601],{"class":169,"line":18930},[167,34594,5437],{"class":731},[167,34596,33606],{"class":512},[167,34598,973],{"class":731},[167,34600,33611],{"class":184},[167,34602,34603],{"class":512},"(train_dataloader):\n",[167,34605,34606],{"class":169,"line":18935},[167,34607,34608],{"class":2268},"            # 将特征放入到训练设备\n",[167,34610,34611,34614,34616],{"class":169,"line":18940},[167,34612,34613],{"class":512},"            b_x",[167,34615,523],{"class":731},[167,34617,34618],{"class":512},"b_x.to(device)\n",[167,34620,34621],{"class":169,"line":18953},[167,34622,34623],{"class":2268},"            # 将标签放入到训练设备当中\n",[167,34625,34626,34629,34631],{"class":169,"line":18958},[167,34627,34628],{"class":512},"            b_y",[167,34630,523],{"class":731},[167,34632,34633],{"class":512},"b_y.to(device)\n",[167,34635,34637],{"class":169,"line":34636},98,[167,34638,34639],{"class":2268},"            # 设置模型为训练模式\n",[167,34641,34643],{"class":169,"line":34642},99,[167,34644,34645],{"class":512},"            model.train()\n",[167,34647,34649],{"class":169,"line":34648},100,[167,34650,34651],{"class":2268},"            # 将数据放到模型当中,开始前向传播\n",[167,34653,34655],{"class":169,"line":34654},101,[167,34656,34657],{"class":2268},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[167,34659,34661,34664,34666],{"class":169,"line":34660},102,[167,34662,34663],{"class":512},"            output",[167,34665,523],{"class":731},[167,34667,34668],{"class":512},"model(b_x)\n",[167,34670,34672],{"class":169,"line":34671},103,[167,34673,34674],{"class":2268},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[167,34676,34678,34681,34683,34686,34689,34691,34693],{"class":169,"line":34677},104,[167,34679,34680],{"class":512},"            pre_lab",[167,34682,523],{"class":731},[167,34684,34685],{"class":512},"torch.argmax(output,",[167,34687,34688],{"class":7246},"dim",[167,34690,523],{"class":731},[167,34692,2418],{"class":184},[167,34694,873],{"class":512},[167,34696,34698],{"class":169,"line":34697},105,[167,34699,34700],{"class":2268},"            # 计算每一个batch的损失函数\n",[167,34702,34704,34707,34709],{"class":169,"line":34703},106,[167,34705,34706],{"class":512},"            loss",[167,34708,523],{"class":731},[167,34710,34711],{"class":512},"criterion(output,b_y)\n",[167,34713,34715],{"class":169,"line":34714},107,[167,34716,34717],{"class":2268},"            # 将梯度初始化为0\n",[167,34719,34721],{"class":169,"line":34720},108,[167,34722,34723],{"class":512},"            optimizer.zero_grad()\n",[167,34725,34727],{"class":169,"line":34726},109,[167,34728,34729],{"class":2268},"            # 梯度置为0后再进行反向传播\n",[167,34731,34733],{"class":169,"line":34732},110,[167,34734,34735],{"class":512},"            loss.backward()\n",[167,34737,34739],{"class":169,"line":34738},111,[167,34740,34741],{"class":2268},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[167,34743,34745],{"class":169,"line":34744},112,[167,34746,34747],{"class":512},"            optimizer.step()\n",[167,34749,34751],{"class":169,"line":34750},113,[167,34752,34753],{"class":2268},"            # loss.item()指的是batch的平均损失\n",[167,34755,34757,34760,34762,34765,34767,34770,34772],{"class":169,"line":34756},114,[167,34758,34759],{"class":512},"            train_loss",[167,34761,11505],{"class":731},[167,34763,34764],{"class":512},"loss.item()",[167,34766,2655],{"class":731},[167,34768,34769],{"class":512},"b_x.size(",[167,34771,1154],{"class":184},[167,34773,873],{"class":512},[167,34775,34777],{"class":169,"line":34776},115,[167,34778,34779],{"class":2268},"            # 计算每个批次中正确预测的数量\n",[167,34781,34783,34786,34788,34791,34793],{"class":169,"line":34782},116,[167,34784,34785],{"class":512},"            train_corrects",[167,34787,11505],{"class":731},[167,34789,34790],{"class":512},"torch.sum(pre_lab",[167,34792,4985],{"class":731},[167,34794,34795],{"class":512},"b_y.data)\n",[167,34797,34799],{"class":169,"line":34798},117,[167,34800,34801],{"class":2268},"            # 计算目前为止一共处理了多少样本\n",[167,34803,34805,34808,34810,34812,34814],{"class":169,"line":34804},118,[167,34806,34807],{"class":512},"            train_num",[167,34809,11505],{"class":731},[167,34811,34769],{"class":512},[167,34813,1154],{"class":184},[167,34815,873],{"class":512},[167,34817,34819],{"class":169,"line":34818},119,[167,34820,34821],{"class":2268},"        # 验证数据\n",[167,34823,34825,34827,34830,34832,34834],{"class":169,"line":34824},120,[167,34826,5437],{"class":731},[167,34828,34829],{"class":512}," step ,(b_x,b_y) ",[167,34831,973],{"class":731},[167,34833,33611],{"class":184},[167,34835,34836],{"class":512},"(val_dataloader):\n",[167,34838,34840],{"class":169,"line":34839},121,[167,34841,34842],{"class":2268},"            # 将特征放到验证设备当中\n",[167,34844,34846,34848,34850],{"class":169,"line":34845},122,[167,34847,34613],{"class":512},[167,34849,523],{"class":731},[167,34851,34618],{"class":512},[167,34853,34855],{"class":169,"line":34854},123,[167,34856,34857],{"class":2268},"            # 将标签放到放到训练设备当中\n",[167,34859,34861,34863,34865],{"class":169,"line":34860},124,[167,34862,34628],{"class":512},[167,34864,523],{"class":731},[167,34866,34633],{"class":512},[167,34868,34870],{"class":169,"line":34869},125,[167,34871,34872],{"class":2268},"            # 开启验证模式，设置模型为评估模式\n",[167,34874,34876],{"class":169,"line":34875},126,[167,34877,34878],{"class":512},"            model.eval()\n",[167,34880,34882,34885],{"class":169,"line":34881},127,[167,34883,34884],{"class":731},"            with",[167,34886,34887],{"class":512}," torch.no_grad():\n",[167,34889,34891],{"class":169,"line":34890},128,[167,34892,34893],{"class":2268},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[167,34895,34897,34900,34902],{"class":169,"line":34896},129,[167,34898,34899],{"class":512},"                output ",[167,34901,523],{"class":731},[167,34903,34904],{"class":512}," model(b_x)\n",[167,34906,34908],{"class":169,"line":34907},130,[167,34909,34910],{"class":2268},"                # 查找每一行中最大值对应的下标\n",[167,34912,34914,34917,34919,34922,34924,34926,34928],{"class":169,"line":34913},131,[167,34915,34916],{"class":512},"                pre_lab ",[167,34918,523],{"class":731},[167,34920,34921],{"class":512}," torch.argmax(output, ",[167,34923,34688],{"class":7246},[167,34925,523],{"class":731},[167,34927,2418],{"class":184},[167,34929,873],{"class":512},[167,34931,34933],{"class":169,"line":34932},132,[167,34934,34935],{"class":2268},"                # 计算验证集上的当前 batch 损失\n",[167,34937,34939,34942,34944],{"class":169,"line":34938},133,[167,34940,34941],{"class":512},"                val_batch_loss ",[167,34943,523],{"class":731},[167,34945,34946],{"class":512}," criterion(output, b_y)\n",[167,34948,34950],{"class":169,"line":34949},134,[167,34951,34952],{"class":2268},"                # 对损失函数进行累加（按样本数加权）\n",[167,34954,34956,34959,34961,34964,34966,34969,34971],{"class":169,"line":34955},135,[167,34957,34958],{"class":512},"                val_loss ",[167,34960,11505],{"class":731},[167,34962,34963],{"class":512}," val_batch_loss.item() ",[167,34965,2655],{"class":731},[167,34967,34968],{"class":512}," b_x.size(",[167,34970,1154],{"class":184},[167,34972,873],{"class":512},[167,34974,34976,34979,34981,34984,34986],{"class":169,"line":34975},136,[167,34977,34978],{"class":512},"                val_corrects ",[167,34980,11505],{"class":731},[167,34982,34983],{"class":512}," torch.sum(pre_lab ",[167,34985,4985],{"class":731},[167,34987,34988],{"class":512}," b_y.data)\n",[167,34990,34992],{"class":169,"line":34991},137,[167,34993,34994],{"class":2268},"                # 当前用于验证的样本数量\n",[167,34996,34998,35001,35003,35005,35007],{"class":169,"line":34997},138,[167,34999,35000],{"class":512},"            val_num ",[167,35002,11505],{"class":731},[167,35004,34968],{"class":512},[167,35006,1154],{"class":184},[167,35008,873],{"class":512},[167,35010,35012],{"class":169,"line":35011},139,[167,35013,35014],{"class":2268},"        # 计算并保存每一次迭代的loss值和准确率\n",[167,35016,35018],{"class":169,"line":35017},140,[167,35019,35020],{"class":2268},"        # 计算并保存训练集的loss值\n",[167,35022,35024,35027,35029],{"class":169,"line":35023},141,[167,35025,35026],{"class":512},"        train_loss_all.append(train_loss",[167,35028,2784],{"class":731},[167,35030,35031],{"class":512},"train_num)\n",[167,35033,35035],{"class":169,"line":35034},142,[167,35036,35037],{"class":2268},"        # 取双精度\n",[167,35039,35041],{"class":169,"line":35040},143,[167,35042,35043],{"class":2268},"        # 计算并保存训练集的准确率\n",[167,35045,35047,35050,35052],{"class":169,"line":35046},144,[167,35048,35049],{"class":512},"        train_acc_all.append(train_corrects.double().item()",[167,35051,2784],{"class":731},[167,35053,35031],{"class":512},[167,35055,35057],{"class":169,"line":35056},145,[167,35058,35059],{"class":2268},"        # 计算并保存验证集的loss值\n",[167,35061,35063,35066,35068],{"class":169,"line":35062},146,[167,35064,35065],{"class":512},"        val_loss_all.append(val_loss",[167,35067,2784],{"class":731},[167,35069,35070],{"class":512},"val_num)\n",[167,35072,35074],{"class":169,"line":35073},147,[167,35075,35076],{"class":2268},"        # 计算并保存验证集的准确率\n",[167,35078,35080,35083,35085],{"class":169,"line":35079},148,[167,35081,35082],{"class":512},"        val_acc_all.append(val_corrects.double().item()",[167,35084,2784],{"class":731},[167,35086,35070],{"class":512},[167,35088,35090],{"class":169,"line":35089},149,[167,35091,741],{"emptyLinePlaceholder":740},[167,35093,35095],{"class":169,"line":35094},150,[167,35096,35097],{"class":2268},"        # 打印训练一轮的loss值和准确率\n",[167,35099,35101,35103,35105,35107,35109,35112,35114,35117,35119,35122,35124,35126,35128,35130,35133,35135,35137,35140,35142,35144],{"class":169,"line":35100},151,[167,35102,34454],{"class":184},[167,35104,898],{"class":512},[167,35106,5626],{"class":177},[167,35108,34462],{"class":184},[167,35110,35111],{"class":177},"train loss:",[167,35113,3096],{"class":184},[167,35115,35116],{"class":731},":.4f",[167,35118,3145],{"class":184},[167,35120,35121],{"class":177}," train acc:",[167,35123,3096],{"class":184},[167,35125,35116],{"class":731},[167,35127,3145],{"class":184},[167,35129,5626],{"class":177},[167,35131,35132],{"class":512},".format(epoch,train_loss_all[",[167,35134,2732],{"class":731},[167,35136,2418],{"class":184},[167,35138,35139],{"class":512},"],train_acc_all[",[167,35141,2732],{"class":731},[167,35143,2418],{"class":184},[167,35145,35146],{"class":512},"]))\n",[167,35148,35150,35152,35154,35156,35158,35161,35163,35165,35167,35170,35172,35174,35176,35178,35181,35183,35185,35188,35190,35192],{"class":169,"line":35149},152,[167,35151,34454],{"class":184},[167,35153,898],{"class":512},[167,35155,5626],{"class":177},[167,35157,34462],{"class":184},[167,35159,35160],{"class":177},"val loss:",[167,35162,3096],{"class":184},[167,35164,35116],{"class":731},[167,35166,3145],{"class":184},[167,35168,35169],{"class":177}," val acc:",[167,35171,3096],{"class":184},[167,35173,35116],{"class":731},[167,35175,3145],{"class":184},[167,35177,5626],{"class":177},[167,35179,35180],{"class":512},".format(epoch,val_loss_all[",[167,35182,2732],{"class":731},[167,35184,2418],{"class":184},[167,35186,35187],{"class":512},"],val_acc_all[",[167,35189,2732],{"class":731},[167,35191,2418],{"class":184},[167,35193,35146],{"class":512},[167,35195,35197],{"class":169,"line":35196},153,[167,35198,741],{"emptyLinePlaceholder":740},[167,35200,35202],{"class":169,"line":35201},154,[167,35203,35204],{"class":2268},"        # 判断准确度--->保存最优模型\n",[167,35206,35208,35210,35213,35215,35217,35219,35221],{"class":169,"line":35207},155,[167,35209,4540],{"class":731},[167,35211,35212],{"class":512}," val_acc_all[",[167,35214,2732],{"class":731},[167,35216,2418],{"class":184},[167,35218,3139],{"class":512},[167,35220,3159],{"class":731},[167,35222,35223],{"class":512},"best_acc:\n",[167,35225,35227],{"class":169,"line":35226},156,[167,35228,35229],{"class":2268},"            # 保存当前模型准确度\n",[167,35231,35233,35236,35238,35240,35243,35245,35247],{"class":169,"line":35232},157,[167,35234,35235],{"class":512},"            best_acc:",[167,35237,2251],{"class":184},[167,35239,523],{"class":731},[167,35241,35242],{"class":512},"val_acc_all[",[167,35244,2732],{"class":731},[167,35246,2418],{"class":184},[167,35248,35249],{"class":512},"]\n",[167,35251,35253],{"class":169,"line":35252},158,[167,35254,35255],{"class":2268},"            # 保存当前的准确度\n",[167,35257,35259],{"class":169,"line":35258},159,[167,35260,35261],{"class":2268},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[167,35263,35265,35268,35270],{"class":169,"line":35264},160,[167,35266,35267],{"class":512},"            best_model_wts",[167,35269,523],{"class":731},[167,35271,34318],{"class":512},[167,35273,35275],{"class":169,"line":35274},161,[167,35276,741],{"emptyLinePlaceholder":740},[167,35278,35280],{"class":169,"line":35279},162,[167,35281,35282],{"class":2268},"        # 计算耗时\n",[167,35284,35286,35289,35291,35294,35296],{"class":169,"line":35285},163,[167,35287,35288],{"class":512},"        time_use",[167,35290,523],{"class":731},[167,35292,35293],{"class":512},"time.time()",[167,35295,2732],{"class":731},[167,35297,35298],{"class":512},"since\n",[167,35300,35302,35304,35306,35309,35311,35314,35316,35318,35320,35322,35324,35327,35330,35333,35335,35338,35340,35342],{"class":169,"line":35301},164,[167,35303,34454],{"class":184},[167,35305,898],{"class":512},[167,35307,35308],{"class":177},"'训练和验证耗费的时间",[167,35310,3096],{"class":184},[167,35312,35313],{"class":731},":.0f",[167,35315,3145],{"class":184},[167,35317,2744],{"class":177},[167,35319,3096],{"class":184},[167,35321,35313],{"class":731},[167,35323,3145],{"class":184},[167,35325,35326],{"class":177},"s'",[167,35328,35329],{"class":512},".format(time_use",[167,35331,35332],{"class":731},"\u002F\u002F",[167,35334,3107],{"class":184},[167,35336,35337],{"class":512},",time_use",[167,35339,2528],{"class":731},[167,35341,3107],{"class":184},[167,35343,32505],{"class":512},[167,35345,35347],{"class":169,"line":35346},165,[167,35348,35349],{"class":2268},"    # 选择最优参数\n",[167,35351,35353],{"class":169,"line":35352},166,[167,35354,35355],{"class":2268},"    # 加载最高准确率下的模型参数\n",[167,35357,35359],{"class":169,"line":35358},167,[167,35360,35361],{"class":2268},"    # model.load_state_dict(best_model_wts)\n",[167,35363,35365,35368,35371],{"class":169,"line":35364},168,[167,35366,35367],{"class":512},"    torch.save(model.state_dict(best_model_wts), ",[167,35369,35370],{"class":177},"'.\u002Fbest_model.pth'",[167,35372,873],{"class":512},[167,35374,35376],{"class":169,"line":35375},169,[167,35377,35378],{"class":2268},"    # 或者写成\n",[167,35380,35382],{"class":169,"line":35381},170,[167,35383,35384],{"class":2268},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[167,35386,35388],{"class":169,"line":35387},171,[167,35389,35390],{"class":2268},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[167,35392,35394,35397,35399,35402,35404,35406],{"class":169,"line":35393},172,[167,35395,35396],{"class":512},"    train_process",[167,35398,523],{"class":731},[167,35400,35401],{"class":512},"pd.DataFrame(",[167,35403,1150],{"class":7246},[167,35405,523],{"class":731},[167,35407,3611],{"class":512},[167,35409,35411,35414,35416,35419],{"class":169,"line":35410},173,[167,35412,35413],{"class":177},"        \"epoch\"",[167,35415,3059],{"class":512},[167,35417,35418],{"class":184},"range",[167,35420,35421],{"class":512},"(num_epochs),\n",[167,35423,35425,35428],{"class":169,"line":35424},174,[167,35426,35427],{"class":177},"        \"train_loss_all\"",[167,35429,35430],{"class":512},":train_loss_all,\n",[167,35432,35434,35437],{"class":169,"line":35433},175,[167,35435,35436],{"class":177},"        \"val_loss_all\"",[167,35438,35439],{"class":512},":val_loss_all,\n",[167,35441,35443,35446],{"class":169,"line":35442},176,[167,35444,35445],{"class":177},"        \"train_acc_all\"",[167,35447,35448],{"class":512},":train_acc_all,\n",[167,35450,35452,35455],{"class":169,"line":35451},177,[167,35453,35454],{"class":177},"        \"val_acc_all\"",[167,35456,35457],{"class":512},":val_acc_all\n",[167,35459,35461],{"class":169,"line":35460},178,[167,35462,35463],{"class":512},"    })\n",[167,35465,35467],{"class":169,"line":35466},179,[167,35468,35469],{"class":2268},"    # 返回训练保存的过程\n",[167,35471,35473,35475],{"class":169,"line":35472},180,[167,35474,6122],{"class":731},[167,35476,35477],{"class":512}," train_process\n",[167,35479,35481],{"class":169,"line":35480},181,[167,35482,741],{"emptyLinePlaceholder":740},[167,35484,35486],{"class":169,"line":35485},182,[167,35487,35488],{"class":2268},"# 将loss值和精度按照图片的形式展示出来\n",[167,35490,35492,35494,35497],{"class":169,"line":35491},183,[167,35493,845],{"class":731},[167,35495,35496],{"class":173}," matplot_acc_loss",[167,35498,35499],{"class":512},"(train_process):\n",[167,35501,35503],{"class":169,"line":35502},184,[167,35504,35505],{"class":2268},"    # 设置图的大小\n",[167,35507,35509,35512,35514,35516,35518,35520,35522,35524],{"class":169,"line":35508},185,[167,35510,35511],{"class":512},"    plt.figure(",[167,35513,33698],{"class":7246},[167,35515,523],{"class":731},[167,35517,898],{"class":512},[167,35519,2698],{"class":184},[167,35521,2578],{"class":512},[167,35523,2494],{"class":184},[167,35525,32505],{"class":512},[167,35527,35529],{"class":169,"line":35528},186,[167,35530,35531],{"class":2268},"    # 设置图中有几张图\n",[167,35533,35535],{"class":169,"line":35534},187,[167,35536,35537],{"class":2268},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[167,35539,35541],{"class":169,"line":35540},188,[167,35542,35543],{"class":2268},"    # ①loss图\n",[167,35545,35547,35549,35551,35553,35555,35557,35559],{"class":169,"line":35546},189,[167,35548,33732],{"class":512},[167,35550,2418],{"class":184},[167,35552,2578],{"class":512},[167,35554,2287],{"class":184},[167,35556,2578],{"class":512},[167,35558,2418],{"class":184},[167,35560,873],{"class":512},[167,35562,35564],{"class":169,"line":35563},190,[167,35565,35566],{"class":2268},"    # 补充:\n",[167,35568,35570],{"class":169,"line":35569},191,[167,35571,35572],{"class":2268},"    # plt.subplot(nrows, ncols, index)\n",[167,35574,35576],{"class":169,"line":35575},192,[167,35577,35578],{"class":2268},"    # nrows：行数\n",[167,35580,35582],{"class":169,"line":35581},193,[167,35583,35584],{"class":2268},"    # ncols：列数\n",[167,35586,35588],{"class":169,"line":35587},194,[167,35589,35590],{"class":2268},"    # index：目前选中第几个子图（从1开始）\n",[167,35592,35594,35597,35600,35603,35606,35608,35611,35613,35616],{"class":169,"line":35593},195,[167,35595,35596],{"class":512},"    plt.plot(train_process[",[167,35598,35599],{"class":177},"\"epoch\"",[167,35601,35602],{"class":512},"],train_process.train_loss_all,",[167,35604,35605],{"class":177},"'ro-'",[167,35607,2578],{"class":512},[167,35609,35610],{"class":7246},"label",[167,35612,523],{"class":731},[167,35614,35615],{"class":177},"'train loss'",[167,35617,873],{"class":512},[167,35619,35621,35623,35625,35628,35631,35633,35635,35637,35640],{"class":169,"line":35620},196,[167,35622,35596],{"class":512},[167,35624,35599],{"class":177},[167,35626,35627],{"class":512},"],train_process.val_loss_all,",[167,35629,35630],{"class":177},"'bs--'",[167,35632,2578],{"class":512},[167,35634,35610],{"class":7246},[167,35636,523],{"class":731},[167,35638,35639],{"class":177},"'val loss'",[167,35641,873],{"class":512},[167,35643,35645],{"class":169,"line":35644},197,[167,35646,35647],{"class":2268},"    # 添加一个图例\n",[167,35649,35651],{"class":169,"line":35650},198,[167,35652,35653],{"class":512},"    plt.legend()\n",[167,35655,35657],{"class":169,"line":35656},199,[167,35658,35659],{"class":2268},"    # 给轴添加标签\n",[167,35661,35663,35666,35669],{"class":169,"line":35662},200,[167,35664,35665],{"class":512},"    plt.xlabel(",[167,35667,35668],{"class":177},"'epoch'",[167,35670,873],{"class":512},[167,35672,35674,35677,35680],{"class":169,"line":35673},201,[167,35675,35676],{"class":512},"    plt.ylabel(",[167,35678,35679],{"class":177},"'loss'",[167,35681,873],{"class":512},[167,35683,35685],{"class":169,"line":35684},202,[167,35686,35687],{"class":2268},"    # ②准确度图\n",[167,35689,35691,35693,35695,35697,35699,35701,35703],{"class":169,"line":35690},203,[167,35692,33732],{"class":512},[167,35694,2418],{"class":184},[167,35696,2578],{"class":512},[167,35698,2287],{"class":184},[167,35700,2578],{"class":512},[167,35702,2287],{"class":184},[167,35704,873],{"class":512},[167,35706,35708,35710,35712,35715,35717,35719,35721,35723,35726],{"class":169,"line":35707},204,[167,35709,35596],{"class":512},[167,35711,35599],{"class":177},[167,35713,35714],{"class":512},"],train_process.train_acc_all,",[167,35716,35605],{"class":177},[167,35718,2578],{"class":512},[167,35720,35610],{"class":7246},[167,35722,523],{"class":731},[167,35724,35725],{"class":177},"'train acc'",[167,35727,873],{"class":512},[167,35729,35731,35733,35735,35738,35740,35742,35744,35746,35749],{"class":169,"line":35730},205,[167,35732,35596],{"class":512},[167,35734,35599],{"class":177},[167,35736,35737],{"class":512},"],train_process.val_acc_all,",[167,35739,35630],{"class":177},[167,35741,2578],{"class":512},[167,35743,35610],{"class":7246},[167,35745,523],{"class":731},[167,35747,35748],{"class":177},"'val acc'",[167,35750,873],{"class":512},[167,35752,35754],{"class":169,"line":35753},206,[167,35755,35756],{"class":2268},"    # 添加图例\n",[167,35758,35760],{"class":169,"line":35759},207,[167,35761,35653],{"class":512},[167,35763,35765,35767,35769],{"class":169,"line":35764},208,[167,35766,35665],{"class":512},[167,35768,35599],{"class":177},[167,35770,873],{"class":512},[167,35772,35774,35776,35779],{"class":169,"line":35773},209,[167,35775,35676],{"class":512},[167,35777,35778],{"class":177},"\"acc\"",[167,35780,873],{"class":512},[167,35782,35784],{"class":169,"line":35783},210,[167,35785,35786],{"class":512},"    plt.show()\n",[167,35788,35790],{"class":169,"line":35789},211,[167,35791,741],{"emptyLinePlaceholder":740},[167,35793,35795],{"class":169,"line":35794},212,[167,35796,35797],{"class":2268},"# 正式开始训练:\n",[167,35799,35801,35803,35805,35807,35809],{"class":169,"line":35800},213,[167,35802,1035],{"class":731},[167,35804,1038],{"class":184},[167,35806,4985],{"class":731},[167,35808,33231],{"class":177},[167,35810,857],{"class":512},[167,35812,35814],{"class":169,"line":35813},214,[167,35815,35816],{"class":2268},"    # 将模型实例化\n",[167,35818,35820,35823,35825],{"class":169,"line":35819},215,[167,35821,35822],{"class":512},"    LeNet",[167,35824,523],{"class":731},[167,35826,35827],{"class":512},"LeNet()\n",[167,35829,35831,35834,35836],{"class":169,"line":35830},216,[167,35832,35833],{"class":512},"    train_dataloader,val_dataloader",[167,35835,523],{"class":731},[167,35837,35838],{"class":512},"train_val_data_process()\n",[167,35840,35842,35844,35846,35849,35852,35854,35856],{"class":169,"line":35841},217,[167,35843,35396],{"class":512},[167,35845,523],{"class":731},[167,35847,35848],{"class":512},"train_model_process(LeNet,train_dataloader,val_dataloader,",[167,35850,35851],{"class":7246},"num_epochs",[167,35853,523],{"class":731},[167,35855,2900],{"class":184},[167,35857,873],{"class":512},[167,35859,35861],{"class":169,"line":35860},218,[167,35862,35863],{"class":512},"    matplot_acc_loss(train_process)\n",[19,35865,35866],{},"画图的补充点学习：",[19,35868,35869],{},[3528,35870],{"alt":32,"src":35871},"\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",[40,35873,35874],{"start":205},[43,35875,35876],{},"测试",[26,35878,35880],{"className":723,"code":35879,"language":305,"meta":32,"style":32},"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",[34,35881,35882,35888,35898,35910,35920,35925,35935,35945,35949,35954,35963,35980,35992,36009,36020,36036,36041,36052,36063,36074,36081,36085,36090,36100,36105,36122,36130,36134,36139,36148,36157,36161,36166,36171,36176,36183,36188,36200,36210,36220,36225,36229,36234,36243,36248,36264,36269,36274,36279,36293,36298,36312,36316,36321,36336,36341,36353,36357,36362,36374,36379,36387,36392,36397,36407,36412,36421,36426,36431,36435,36440,36445,36461,36469,36474,36479,36538,36544,36549,36560,36568,36576,36580,36585,36589,36594,36602,36607,36623,36628,36638,36648],{"__ignoreMap":32},[167,35883,35884,35886],{"class":169,"line":170},[167,35885,732],{"class":731},[167,35887,32404],{"class":512},[167,35889,35890,35892,35894,35896],{"class":169,"line":191},[167,35891,732],{"class":731},[167,35893,33420],{"class":512},[167,35895,33388],{"class":731},[167,35897,33425],{"class":512},[167,35899,35900,35902,35905,35907],{"class":169,"line":205},[167,35901,32745],{"class":731},[167,35903,35904],{"class":512}," jupyter_client.consoleapp ",[167,35906,732],{"class":731},[167,35908,35909],{"class":512}," classes\n",[167,35911,35912,35914,35916,35918],{"class":169,"line":219},[167,35913,32745],{"class":731},[167,35915,33403],{"class":512},[167,35917,732],{"class":731},[167,35919,33408],{"class":512},[167,35921,35922],{"class":169,"line":230},[167,35923,35924],{"class":2268},"# 导入数据集\n",[167,35926,35927,35929,35931,35933],{"class":169,"line":241},[167,35928,32745],{"class":731},[167,35930,33373],{"class":512},[167,35932,732],{"class":731},[167,35934,33378],{"class":512},[167,35936,35937,35939,35941,35943],{"class":169,"line":261},[167,35938,32745],{"class":731},[167,35940,33919],{"class":512},[167,35942,732],{"class":731},[167,35944,33924],{"class":512},[167,35946,35947],{"class":169,"line":773},[167,35948,741],{"emptyLinePlaceholder":740},[167,35950,35951],{"class":169,"line":779},[167,35952,35953],{"class":2268},"# 测试数据处理\n",[167,35955,35956,35958,35961],{"class":169,"line":785},[167,35957,845],{"class":731},[167,35959,35960],{"class":173}," test_data_process",[167,35962,33957],{"class":512},[167,35964,35965,35968,35970,35972,35974,35976,35978],{"class":169,"line":790},[167,35966,35967],{"class":512},"    test_data",[167,35969,523],{"class":731},[167,35971,33460],{"class":512},[167,35973,33463],{"class":7246},[167,35975,523],{"class":731},[167,35977,33468],{"class":177},[167,35979,33471],{"class":512},[167,35981,35982,35985,35987,35990],{"class":169,"line":796},[167,35983,35984],{"class":7246},"                           train",[167,35986,523],{"class":731},[167,35988,35989],{"class":184},"False",[167,35991,33471],{"class":512},[167,35993,35994,35997,35999,36001,36003,36005,36007],{"class":169,"line":802},[167,35995,35996],{"class":7246},"                           transform",[167,35998,523],{"class":731},[167,36000,33498],{"class":512},[167,36002,33501],{"class":7246},[167,36004,523],{"class":731},[167,36006,3101],{"class":184},[167,36008,33509],{"class":512},[167,36010,36011,36014,36016,36018],{"class":169,"line":808},[167,36012,36013],{"class":7246},"                           download",[167,36015,523],{"class":731},[167,36017,33481],{"class":184},[167,36019,873],{"class":512},[167,36021,36022,36025,36027,36029,36031,36033],{"class":169,"line":814},[167,36023,36024],{"class":512},"    test_dataloader",[167,36026,523],{"class":731},[167,36028,33539],{"class":512},[167,36030,33542],{"class":7246},[167,36032,523],{"class":731},[167,36034,36035],{"class":512},"test_data,\n",[167,36037,36038],{"class":169,"line":820},[167,36039,36040],{"class":2268},"                                    # 这里是一张一张进行测试\n",[167,36042,36043,36046,36048,36050],{"class":169,"line":826},[167,36044,36045],{"class":7246},"                                    batch_size",[167,36047,523],{"class":731},[167,36049,2418],{"class":184},[167,36051,33471],{"class":512},[167,36053,36054,36057,36059,36061],{"class":169,"line":832},[167,36055,36056],{"class":7246},"                                    shuffle",[167,36058,523],{"class":731},[167,36060,33481],{"class":184},[167,36062,33471],{"class":512},[167,36064,36065,36068,36070,36072],{"class":169,"line":837},[167,36066,36067],{"class":7246},"                                    num_workers",[167,36069,523],{"class":731},[167,36071,1154],{"class":184},[167,36073,873],{"class":512},[167,36075,36076,36078],{"class":169,"line":842},[167,36077,6122],{"class":731},[167,36079,36080],{"class":512}," test_dataloader\n",[167,36082,36083],{"class":169,"line":860},[167,36084,741],{"emptyLinePlaceholder":740},[167,36086,36087],{"class":169,"line":876},[167,36088,36089],{"class":2268},"# 定义模型测试函数\n",[167,36091,36092,36094,36097],{"class":169,"line":887},[167,36093,845],{"class":731},[167,36095,36096],{"class":173}," test_model_process",[167,36098,36099],{"class":512},"(model,test_dataloader):\n",[167,36101,36102],{"class":169,"line":892},[167,36103,36104],{"class":2268},"    # 将模型放到设备当中，先进行判断\n",[167,36106,36107,36109,36111,36113,36115,36117,36119],{"class":169,"line":907},[167,36108,33243],{"class":512},[167,36110,523],{"class":731},[167,36112,33250],{"class":177},[167,36114,3758],{"class":731},[167,36116,33255],{"class":512},[167,36118,3755],{"class":731},[167,36120,36121],{"class":177}," \"cpu\"\n",[167,36123,36124,36126,36128],{"class":169,"line":920},[167,36125,33295],{"class":512},[167,36127,523],{"class":731},[167,36129,34293],{"class":512},[167,36131,36132],{"class":169,"line":933},[167,36133,741],{"emptyLinePlaceholder":740},[167,36135,36136],{"class":169,"line":946},[167,36137,36138],{"class":2268},"    # 设置初始化参数\n",[167,36140,36141,36144,36146],{"class":169,"line":959},[167,36142,36143],{"class":512},"    test_corrects",[167,36145,523],{"class":731},[167,36147,34346],{"class":184},[167,36149,36150,36153,36155],{"class":169,"line":964},[167,36151,36152],{"class":512},"    test_num",[167,36154,523],{"class":731},[167,36156,5120],{"class":184},[167,36158,36159],{"class":169,"line":987},[167,36160,741],{"emptyLinePlaceholder":740},[167,36162,36163],{"class":169,"line":993},[167,36164,36165],{"class":2268},"    # 进行模型测试\n",[167,36167,36168],{"class":169,"line":998},[167,36169,36170],{"class":2268},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[167,36172,36173],{"class":169,"line":1010},[167,36174,36175],{"class":2268},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[167,36177,36178,36181],{"class":169,"line":1022},[167,36179,36180],{"class":731},"    with",[167,36182,34887],{"class":512},[167,36184,36185],{"class":169,"line":1027},[167,36186,36187],{"class":2268},"        # 从数据中进行\n",[167,36189,36190,36192,36195,36197],{"class":169,"line":1032},[167,36191,5437],{"class":731},[167,36193,36194],{"class":512}," test_data_x,test_data_y ",[167,36196,973],{"class":731},[167,36198,36199],{"class":512}," test_dataloader:\n",[167,36201,36202,36205,36207],{"class":169,"line":1049},[167,36203,36204],{"class":512},"            test_data_x",[167,36206,523],{"class":731},[167,36208,36209],{"class":512},"test_data_x.to(device)\n",[167,36211,36212,36215,36217],{"class":169,"line":10005},[167,36213,36214],{"class":512},"            test_data_y",[167,36216,523],{"class":731},[167,36218,36219],{"class":512},"test_data_y.to(device)\n",[167,36221,36222],{"class":169,"line":10011},[167,36223,36224],{"class":2268},"            # 设置为验证模式\n",[167,36226,36227],{"class":169,"line":10038},[167,36228,34878],{"class":512},[167,36230,36231],{"class":169,"line":10043},[167,36232,36233],{"class":2268},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[167,36235,36236,36238,36240],{"class":169,"line":10049},[167,36237,34663],{"class":512},[167,36239,523],{"class":731},[167,36241,36242],{"class":512},"model(test_data_x)\n",[167,36244,36245],{"class":169,"line":10061},[167,36246,36247],{"class":2268},"            # 查找每一行中最大值对应的下标\n",[167,36249,36250,36252,36254,36256,36258,36260,36262],{"class":169,"line":10073},[167,36251,34680],{"class":512},[167,36253,523],{"class":731},[167,36255,34685],{"class":512},[167,36257,34688],{"class":7246},[167,36259,523],{"class":731},[167,36261,2418],{"class":184},[167,36263,873],{"class":512},[167,36265,36266],{"class":169,"line":10085},[167,36267,36268],{"class":2268},"            # 计算正确率\n",[167,36270,36271],{"class":169,"line":11744},[167,36272,36273],{"class":2268},"            # .data表示是一个不带梯度信息的tensor\n",[167,36275,36276],{"class":169,"line":11769},[167,36277,36278],{"class":2268},"            # 如果预测正确，则准确度test_corrects加1\n",[167,36280,36281,36284,36286,36288,36290],{"class":169,"line":11792},[167,36282,36283],{"class":512},"            test_corrects",[167,36285,11505],{"class":731},[167,36287,34790],{"class":512},[167,36289,4985],{"class":731},[167,36291,36292],{"class":512},"test_data_y.data)\n",[167,36294,36295],{"class":169,"line":11816},[167,36296,36297],{"class":2268},"            # 将所有的测试样本进行累计\n",[167,36299,36300,36303,36305,36308,36310],{"class":169,"line":11821},[167,36301,36302],{"class":512},"            test_num",[167,36304,11505],{"class":731},[167,36306,36307],{"class":512},"test_data_x.size(",[167,36309,1154],{"class":184},[167,36311,873],{"class":512},[167,36313,36314],{"class":169,"line":11826},[167,36315,741],{"emptyLinePlaceholder":740},[167,36317,36318],{"class":169,"line":11831},[167,36319,36320],{"class":2268},"        # 计算准确度\n",[167,36322,36323,36326,36328,36331,36333],{"class":169,"line":11840},[167,36324,36325],{"class":512},"        test_acc",[167,36327,523],{"class":731},[167,36329,36330],{"class":512},"test_corrects.double().item()",[167,36332,2784],{"class":731},[167,36334,36335],{"class":512},"test_num\n",[167,36337,36338],{"class":169,"line":11845},[167,36339,36340],{"class":2268},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[167,36342,36343,36345,36347,36350],{"class":169,"line":11851},[167,36344,34454],{"class":184},[167,36346,898],{"class":512},[167,36348,36349],{"class":177},"\"测试的准确率：\"",[167,36351,36352],{"class":512},",test_acc)\n",[167,36354,36355],{"class":169,"line":11872},[167,36356,741],{"emptyLinePlaceholder":740},[167,36358,36359],{"class":169,"line":11878},[167,36360,36361],{"class":2268},"# 实现模型的测试功能\n",[167,36363,36364,36366,36368,36370,36372],{"class":169,"line":11892},[167,36365,1035],{"class":731},[167,36367,1038],{"class":184},[167,36369,4985],{"class":731},[167,36371,33231],{"class":177},[167,36373,857],{"class":512},[167,36375,36376],{"class":169,"line":11898},[167,36377,36378],{"class":2268},"    # 加载模型\n",[167,36380,36381,36383,36385],{"class":169,"line":11925},[167,36382,33295],{"class":512},[167,36384,523],{"class":731},[167,36386,35827],{"class":512},[167,36388,36389],{"class":169,"line":11934},[167,36390,36391],{"class":2268},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[167,36393,36394],{"class":169,"line":11940},[167,36395,36396],{"class":2268},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[167,36398,36399,36402,36405],{"class":169,"line":11948},[167,36400,36401],{"class":512},"    model.load_state_dict(torch.load(",[167,36403,36404],{"class":177},"'best_model.pth'",[167,36406,32505],{"class":512},[167,36408,36409],{"class":169,"line":11953},[167,36410,36411],{"class":2268},"    # 数据加载\n",[167,36413,36414,36416,36418],{"class":169,"line":18630},[167,36415,36024],{"class":512},[167,36417,523],{"class":731},[167,36419,36420],{"class":512},"test_data_process()\n",[167,36422,36423],{"class":169,"line":18636},[167,36424,36425],{"class":2268},"    # 加载模型测试的函数\n",[167,36427,36428],{"class":169,"line":18659},[167,36429,36430],{"class":512},"    test_model_process(model,test_dataloader)\n",[167,36432,36433],{"class":169,"line":18665},[167,36434,741],{"emptyLinePlaceholder":740},[167,36436,36437],{"class":169,"line":18688},[167,36438,36439],{"class":2268},"    # 验证集推理实现：\n",[167,36441,36442],{"class":169,"line":18702},[167,36443,36444],{"class":2268},"    # 加载数据加载的更详细一些\n",[167,36446,36447,36449,36451,36453,36455,36457,36459],{"class":169,"line":18722},[167,36448,33243],{"class":512},[167,36450,523],{"class":731},[167,36452,33250],{"class":177},[167,36454,3758],{"class":731},[167,36456,33255],{"class":512},[167,36458,3755],{"class":731},[167,36460,36121],{"class":177},[167,36462,36463,36465,36467],{"class":169,"line":18728},[167,36464,33295],{"class":512},[167,36466,523],{"class":731},[167,36468,34293],{"class":512},[167,36470,36471],{"class":169,"line":18739},[167,36472,36473],{"class":2268},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[167,36475,36476],{"class":169,"line":18762},[167,36477,36478],{"class":2268},"    # 顺序不可改变\n",[167,36480,36481,36484,36486,36488,36491,36493,36496,36498,36501,36503,36506,36508,36511,36513,36516,36518,36521,36523,36526,36528,36531,36533,36536],{"class":169,"line":18784},[167,36482,36483],{"class":512},"    classes",[167,36485,523],{"class":731},[167,36487,3090],{"class":512},[167,36489,36490],{"class":177},"'T-shirt\u002Ftop'",[167,36492,2578],{"class":512},[167,36494,36495],{"class":177},"'Trouser'",[167,36497,2578],{"class":512},[167,36499,36500],{"class":177},"'Pullover'",[167,36502,2578],{"class":512},[167,36504,36505],{"class":177},"'Dress'",[167,36507,2578],{"class":512},[167,36509,36510],{"class":177},"'Coat'",[167,36512,2578],{"class":512},[167,36514,36515],{"class":177},"'Sandal'",[167,36517,2578],{"class":512},[167,36519,36520],{"class":177},"'Shirt'",[167,36522,2578],{"class":512},[167,36524,36525],{"class":177},"'Sneaker'",[167,36527,2578],{"class":512},[167,36529,36530],{"class":177},"'Bag'",[167,36532,2578],{"class":512},[167,36534,36535],{"class":177},"'Ankle boot'",[167,36537,35249],{"class":512},[167,36539,36540,36542],{"class":169,"line":18789},[167,36541,36180],{"class":731},[167,36543,34887],{"class":512},[167,36545,36546],{"class":169,"line":18795},[167,36547,36548],{"class":2268},"        # 将数据和标签都放到设备当中\n",[167,36550,36551,36553,36556,36558],{"class":169,"line":18809},[167,36552,5437],{"class":731},[167,36554,36555],{"class":512}," b_x,b_y ",[167,36557,973],{"class":731},[167,36559,36199],{"class":512},[167,36561,36562,36564,36566],{"class":169,"line":18822},[167,36563,34613],{"class":512},[167,36565,523],{"class":731},[167,36567,34618],{"class":512},[167,36569,36570,36572,36574],{"class":169,"line":18827},[167,36571,34628],{"class":512},[167,36573,523],{"class":731},[167,36575,34633],{"class":512},[167,36577,36578],{"class":169,"line":18841},[167,36579,741],{"emptyLinePlaceholder":740},[167,36581,36582],{"class":169,"line":18846},[167,36583,36584],{"class":2268},"            # 设置模型为验证模式\n",[167,36586,36587],{"class":169,"line":18852},[167,36588,34878],{"class":512},[167,36590,36591],{"class":169,"line":18857},[167,36592,36593],{"class":2268},"            # 模型推理结果\n",[167,36595,36596,36598,36600],{"class":169,"line":18871},[167,36597,34663],{"class":512},[167,36599,523],{"class":731},[167,36601,34668],{"class":512},[167,36603,36604],{"class":169,"line":18876},[167,36605,36606],{"class":2268},"            # 获取最大下标，最大下标就是类别号\n",[167,36608,36609,36611,36613,36615,36617,36619,36621],{"class":169,"line":18881},[167,36610,34680],{"class":512},[167,36612,523],{"class":731},[167,36614,34685],{"class":512},[167,36616,34688],{"class":7246},[167,36618,523],{"class":731},[167,36620,2418],{"class":184},[167,36622,873],{"class":512},[167,36624,36625],{"class":169,"line":18895},[167,36626,36627],{"class":2268},"            # 取出张量中的数值\n",[167,36629,36630,36633,36635],{"class":169,"line":18907},[167,36631,36632],{"class":512},"            result",[167,36634,523],{"class":731},[167,36636,36637],{"class":512},"pre_lab.item()\n",[167,36639,36640,36643,36645],{"class":169,"line":18912},[167,36641,36642],{"class":512},"            label",[167,36644,523],{"class":731},[167,36646,36647],{"class":512},"b_y.item()\n",[167,36649,36650,36653,36655,36658,36661,36664,36666,36669],{"class":169,"line":18925},[167,36651,36652],{"class":184},"            print",[167,36654,898],{"class":512},[167,36656,36657],{"class":177},"\"预测值：\"",[167,36659,36660],{"class":512},",classes[result],",[167,36662,36663],{"class":177},"\"------\"",[167,36665,2578],{"class":512},[167,36667,36668],{"class":177},"\"真实值：\"",[167,36670,36671],{"class":512},",classes[label])\n",[19,36673,36674],{},"（2）AlexNet",[40,36676,36677],{},[43,36678,36679],{},"神经网络构建",[26,36681,36683],{"className":723,"code":36682,"language":305,"meta":32,"style":32},"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",[34,36684,36685,36691,36701,36711,36723,36727,36744,36752,36767,36779,36821,36848,36891,36917,36961,37004,37047,37074,37078,37088,37093,37121,37140,37159,37163,37168,37176,37191,37201,37215,37225,37240,37255,37270,37281,37285,37290,37300,37315,37320,37333,37348,37360,37365,37376,37381,37387,37392,37404,37424,37429,37438],{"__ignoreMap":32},[167,36686,36687,36689],{"class":169,"line":170},[167,36688,732],{"class":731},[167,36690,32404],{"class":512},[167,36692,36693,36695,36697,36699],{"class":169,"line":191},[167,36694,32745],{"class":731},[167,36696,32748],{"class":512},[167,36698,732],{"class":731},[167,36700,32753],{"class":512},[167,36702,36703,36705,36707,36709],{"class":169,"line":205},[167,36704,32745],{"class":731},[167,36706,32765],{"class":512},[167,36708,732],{"class":731},[167,36710,32770],{"class":512},[167,36712,36713,36715,36718,36720],{"class":169,"line":219},[167,36714,732],{"class":731},[167,36716,36717],{"class":512}," torch.nn.functional ",[167,36719,33388],{"class":731},[167,36721,36722],{"class":512}," F\n",[167,36724,36725],{"class":169,"line":230},[167,36726,741],{"emptyLinePlaceholder":740},[167,36728,36729,36731,36734,36736,36738,36740,36742],{"class":169,"line":241},[167,36730,16721],{"class":731},[167,36732,36733],{"class":173}," AlexNet",[167,36735,898],{"class":512},[167,36737,32786],{"class":173},[167,36739,2758],{"class":512},[167,36741,32791],{"class":173},[167,36743,984],{"class":512},[167,36745,36746,36748,36750],{"class":169,"line":261},[167,36747,32808],{"class":731},[167,36749,32811],{"class":184},[167,36751,32814],{"class":512},[167,36753,36754,36756,36759,36761,36763,36765],{"class":169,"line":773},[167,36755,32824],{"class":184},[167,36757,36758],{"class":512},"(AlexNet,",[167,36760,32830],{"class":184},[167,36762,32833],{"class":512},[167,36764,32836],{"class":184},[167,36766,4020],{"class":512},[167,36768,36769,36771,36774,36776],{"class":169,"line":779},[167,36770,32852],{"class":184},[167,36772,36773],{"class":512},".ReLu",[167,36775,523],{"class":731},[167,36777,36778],{"class":512},"nn.ReLU()\n",[167,36780,36781,36783,36785,36787,36789,36791,36793,36795,36797,36799,36801,36803,36805,36807,36809,36811,36813,36815,36817,36819],{"class":169,"line":785},[167,36782,32852],{"class":184},[167,36784,32855],{"class":512},[167,36786,523],{"class":731},[167,36788,32860],{"class":512},[167,36790,32863],{"class":7246},[167,36792,523],{"class":731},[167,36794,2418],{"class":184},[167,36796,2578],{"class":512},[167,36798,32872],{"class":7246},[167,36800,523],{"class":731},[167,36802,2411],{"class":184},[167,36804,2578],{"class":512},[167,36806,32881],{"class":7246},[167,36808,523],{"class":731},[167,36810,2672],{"class":184},[167,36812,2578],{"class":512},[167,36814,32936],{"class":7246},[167,36816,523],{"class":731},[167,36818,2494],{"class":184},[167,36820,873],{"class":512},[167,36822,36823,36825,36827,36829,36832,36834,36836,36838,36840,36842,36844,36846],{"class":169,"line":790},[167,36824,32852],{"class":184},[167,36826,32920],{"class":512},[167,36828,523],{"class":731},[167,36830,36831],{"class":512},"nn.MaxPool2d(",[167,36833,32881],{"class":7246},[167,36835,523],{"class":731},[167,36837,2281],{"class":184},[167,36839,2578],{"class":512},[167,36841,32936],{"class":7246},[167,36843,523],{"class":731},[167,36845,2287],{"class":184},[167,36847,873],{"class":512},[167,36849,36850,36852,36854,36856,36858,36860,36862,36864,36866,36868,36870,36873,36875,36877,36879,36881,36883,36885,36887,36889],{"class":169,"line":796},[167,36851,32852],{"class":184},[167,36853,32949],{"class":512},[167,36855,523],{"class":731},[167,36857,32860],{"class":512},[167,36859,32863],{"class":7246},[167,36861,523],{"class":731},[167,36863,2411],{"class":184},[167,36865,2578],{"class":512},[167,36867,32872],{"class":7246},[167,36869,523],{"class":731},[167,36871,36872],{"class":184},"256",[167,36874,2578],{"class":512},[167,36876,32881],{"class":7246},[167,36878,523],{"class":731},[167,36880,2519],{"class":184},[167,36882,2578],{"class":512},[167,36884,32890],{"class":7246},[167,36886,523],{"class":731},[167,36888,2287],{"class":184},[167,36890,873],{"class":512},[167,36892,36893,36895,36897,36899,36901,36903,36905,36907,36909,36911,36913,36915],{"class":169,"line":802},[167,36894,32852],{"class":184},[167,36896,32984],{"class":512},[167,36898,523],{"class":731},[167,36900,36831],{"class":512},[167,36902,32881],{"class":7246},[167,36904,523],{"class":731},[167,36906,2281],{"class":184},[167,36908,2578],{"class":512},[167,36910,32936],{"class":7246},[167,36912,523],{"class":731},[167,36914,2287],{"class":184},[167,36916,873],{"class":512},[167,36918,36919,36921,36924,36926,36928,36930,36932,36934,36936,36938,36940,36943,36945,36947,36949,36951,36953,36955,36957,36959],{"class":169,"line":808},[167,36920,32852],{"class":184},[167,36922,36923],{"class":512},".c5",[167,36925,523],{"class":731},[167,36927,32860],{"class":512},[167,36929,32863],{"class":7246},[167,36931,523],{"class":731},[167,36933,36872],{"class":184},[167,36935,2578],{"class":512},[167,36937,32872],{"class":7246},[167,36939,523],{"class":731},[167,36941,36942],{"class":184},"384",[167,36944,2578],{"class":512},[167,36946,32881],{"class":7246},[167,36948,523],{"class":731},[167,36950,2281],{"class":184},[167,36952,2578],{"class":512},[167,36954,32890],{"class":7246},[167,36956,523],{"class":731},[167,36958,2418],{"class":184},[167,36960,873],{"class":512},[167,36962,36963,36965,36968,36970,36972,36974,36976,36978,36980,36982,36984,36986,36988,36990,36992,36994,36996,36998,37000,37002],{"class":169,"line":814},[167,36964,32852],{"class":184},[167,36966,36967],{"class":512},".c6",[167,36969,523],{"class":731},[167,36971,32860],{"class":512},[167,36973,32863],{"class":7246},[167,36975,523],{"class":731},[167,36977,36942],{"class":184},[167,36979,2578],{"class":512},[167,36981,32872],{"class":7246},[167,36983,523],{"class":731},[167,36985,36942],{"class":184},[167,36987,2578],{"class":512},[167,36989,32881],{"class":7246},[167,36991,523],{"class":731},[167,36993,2281],{"class":184},[167,36995,2578],{"class":512},[167,36997,32890],{"class":7246},[167,36999,523],{"class":731},[167,37001,2418],{"class":184},[167,37003,873],{"class":512},[167,37005,37006,37008,37011,37013,37015,37017,37019,37021,37023,37025,37027,37029,37031,37033,37035,37037,37039,37041,37043,37045],{"class":169,"line":820},[167,37007,32852],{"class":184},[167,37009,37010],{"class":512},".c7",[167,37012,523],{"class":731},[167,37014,32860],{"class":512},[167,37016,32863],{"class":7246},[167,37018,523],{"class":731},[167,37020,36942],{"class":184},[167,37022,2578],{"class":512},[167,37024,32872],{"class":7246},[167,37026,523],{"class":731},[167,37028,36872],{"class":184},[167,37030,2578],{"class":512},[167,37032,32881],{"class":7246},[167,37034,523],{"class":731},[167,37036,2281],{"class":184},[167,37038,2578],{"class":512},[167,37040,32890],{"class":7246},[167,37042,523],{"class":731},[167,37044,2418],{"class":184},[167,37046,873],{"class":512},[167,37048,37049,37051,37054,37056,37058,37060,37062,37064,37066,37068,37070,37072],{"class":169,"line":826},[167,37050,32852],{"class":184},[167,37052,37053],{"class":512},".s8",[167,37055,523],{"class":731},[167,37057,36831],{"class":512},[167,37059,32881],{"class":7246},[167,37061,523],{"class":731},[167,37063,2281],{"class":184},[167,37065,2578],{"class":512},[167,37067,32936],{"class":7246},[167,37069,523],{"class":731},[167,37071,2287],{"class":184},[167,37073,873],{"class":512},[167,37075,37076],{"class":169,"line":832},[167,37077,33009],{"class":2268},[167,37079,37080,37082,37084,37086],{"class":169,"line":837},[167,37081,32852],{"class":184},[167,37083,33016],{"class":512},[167,37085,523],{"class":731},[167,37087,33021],{"class":512},[167,37089,37090],{"class":169,"line":842},[167,37091,37092],{"class":2268},"       # 定义全连接层\n",[167,37094,37095,37097,37100,37102,37104,37106,37108,37110,37112,37114,37116,37119],{"class":169,"line":860},[167,37096,32852],{"class":184},[167,37098,37099],{"class":512},".f1",[167,37101,523],{"class":731},[167,37103,33038],{"class":512},[167,37105,2544],{"class":184},[167,37107,2655],{"class":731},[167,37109,2544],{"class":184},[167,37111,2655],{"class":731},[167,37113,36872],{"class":184},[167,37115,2578],{"class":512},[167,37117,37118],{"class":184},"4096",[167,37120,873],{"class":512},[167,37122,37123,37125,37128,37130,37132,37134,37136,37138],{"class":169,"line":876},[167,37124,32852],{"class":184},[167,37126,37127],{"class":512},".f2",[167,37129,523],{"class":731},[167,37131,33038],{"class":512},[167,37133,37118],{"class":184},[167,37135,2578],{"class":512},[167,37137,37118],{"class":184},[167,37139,873],{"class":512},[167,37141,37142,37144,37147,37149,37151,37153,37155,37157],{"class":169,"line":887},[167,37143,32852],{"class":184},[167,37145,37146],{"class":512},".f3",[167,37148,523],{"class":731},[167,37150,33038],{"class":512},[167,37152,37118],{"class":184},[167,37154,2578],{"class":512},[167,37156,2646],{"class":184},[167,37158,873],{"class":512},[167,37160,37161],{"class":169,"line":892},[167,37162,741],{"emptyLinePlaceholder":740},[167,37164,37165],{"class":169,"line":907},[167,37166,37167],{"class":2268},"    # 定义前向传播\n",[167,37169,37170,37172,37174],{"class":169,"line":920},[167,37171,32808],{"class":731},[167,37173,33100],{"class":173},[167,37175,33103],{"class":512},[167,37177,37178,37180,37182,37184,37187,37189],{"class":169,"line":933},[167,37179,33108],{"class":512},[167,37181,523],{"class":731},[167,37183,32830],{"class":184},[167,37185,37186],{"class":512},".ReLu(",[167,37188,32830],{"class":184},[167,37190,33120],{"class":512},[167,37192,37193,37195,37197,37199],{"class":169,"line":946},[167,37194,33108],{"class":512},[167,37196,523],{"class":731},[167,37198,32830],{"class":184},[167,37200,33131],{"class":512},[167,37202,37203,37205,37207,37209,37211,37213],{"class":169,"line":959},[167,37204,33108],{"class":512},[167,37206,523],{"class":731},[167,37208,32830],{"class":184},[167,37210,37186],{"class":512},[167,37212,32830],{"class":184},[167,37214,33146],{"class":512},[167,37216,37217,37219,37221,37223],{"class":169,"line":964},[167,37218,33108],{"class":512},[167,37220,523],{"class":731},[167,37222,32830],{"class":184},[167,37224,33157],{"class":512},[167,37226,37227,37229,37231,37233,37235,37237],{"class":169,"line":987},[167,37228,33108],{"class":512},[167,37230,523],{"class":731},[167,37232,32830],{"class":184},[167,37234,37186],{"class":512},[167,37236,32830],{"class":184},[167,37238,37239],{"class":512},".c5(x))\n",[167,37241,37242,37244,37246,37248,37250,37252],{"class":169,"line":993},[167,37243,33108],{"class":512},[167,37245,523],{"class":731},[167,37247,32830],{"class":184},[167,37249,37186],{"class":512},[167,37251,32830],{"class":184},[167,37253,37254],{"class":512},".c6(x))\n",[167,37256,37257,37259,37261,37263,37265,37267],{"class":169,"line":998},[167,37258,33108],{"class":512},[167,37260,523],{"class":731},[167,37262,32830],{"class":184},[167,37264,37186],{"class":512},[167,37266,32830],{"class":184},[167,37268,37269],{"class":512},".c7(x))\n",[167,37271,37272,37274,37276,37278],{"class":169,"line":1010},[167,37273,33108],{"class":512},[167,37275,523],{"class":731},[167,37277,32830],{"class":184},[167,37279,37280],{"class":512},".s8(x)\n",[167,37282,37283],{"class":169,"line":1022},[167,37284,741],{"emptyLinePlaceholder":740},[167,37286,37287],{"class":169,"line":1027},[167,37288,37289],{"class":2268},"        # 展平加线性全连接层\n",[167,37291,37292,37294,37296,37298],{"class":169,"line":1032},[167,37293,33108],{"class":512},[167,37295,523],{"class":731},[167,37297,32830],{"class":184},[167,37299,33168],{"class":512},[167,37301,37302,37304,37306,37308,37310,37312],{"class":169,"line":1049},[167,37303,33108],{"class":512},[167,37305,523],{"class":731},[167,37307,32830],{"class":184},[167,37309,37186],{"class":512},[167,37311,32830],{"class":184},[167,37313,37314],{"class":512},".f1(x))\n",[167,37316,37317],{"class":169,"line":10005},[167,37318,37319],{"class":2268},"        # 还需要dropout对神经元随机进行失活\n",[167,37321,37322,37324,37326,37329,37331],{"class":169,"line":10011},[167,37323,33108],{"class":512},[167,37325,523],{"class":731},[167,37327,37328],{"class":512},"F.dropout(x,",[167,37330,1931],{"class":184},[167,37332,873],{"class":512},[167,37334,37335,37337,37339,37341,37343,37345],{"class":169,"line":10038},[167,37336,33108],{"class":512},[167,37338,523],{"class":731},[167,37340,32830],{"class":184},[167,37342,37186],{"class":512},[167,37344,32830],{"class":184},[167,37346,37347],{"class":512},".f2(x))\n",[167,37349,37350,37352,37354,37356,37358],{"class":169,"line":10043},[167,37351,33108],{"class":512},[167,37353,523],{"class":731},[167,37355,37328],{"class":512},[167,37357,1931],{"class":184},[167,37359,873],{"class":512},[167,37361,37362],{"class":169,"line":10049},[167,37363,37364],{"class":2268},"        # 直接输出\n",[167,37366,37367,37369,37371,37373],{"class":169,"line":10061},[167,37368,33108],{"class":512},[167,37370,523],{"class":731},[167,37372,32830],{"class":184},[167,37374,37375],{"class":512},".f3(x)\n",[167,37377,37378],{"class":169,"line":10073},[167,37379,37380],{"class":2268},"        # 前向传播输出\n",[167,37382,37383,37385],{"class":169,"line":10085},[167,37384,16779],{"class":731},[167,37386,33216],{"class":512},[167,37388,37389],{"class":169,"line":11744},[167,37390,37391],{"class":2268},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[167,37393,37394,37396,37398,37400,37402],{"class":169,"line":11769},[167,37395,1035],{"class":731},[167,37397,1038],{"class":184},[167,37399,4985],{"class":731},[167,37401,33231],{"class":177},[167,37403,857],{"class":512},[167,37405,37406,37408,37410,37412,37414,37416,37418,37420,37422],{"class":169,"line":11792},[167,37407,33243],{"class":512},[167,37409,523],{"class":731},[167,37411,32459],{"class":512},[167,37413,33250],{"class":177},[167,37415,3758],{"class":731},[167,37417,33255],{"class":512},[167,37419,3755],{"class":731},[167,37421,32484],{"class":177},[167,37423,873],{"class":512},[167,37425,37426],{"class":169,"line":11816},[167,37427,37428],{"class":2268},"    # 模型实例化，然后将实例化的模型放到设备中\n",[167,37430,37431,37433,37435],{"class":169,"line":11821},[167,37432,33295],{"class":512},[167,37434,523],{"class":731},[167,37436,37437],{"class":512},"AlexNet().to(device)\n",[167,37439,37440,37442,37444,37446,37448,37451,37453,37455],{"class":169,"line":11826},[167,37441,895],{"class":184},[167,37443,33307],{"class":512},[167,37445,2418],{"class":184},[167,37447,2578],{"class":512},[167,37449,37450],{"class":184},"227",[167,37452,2578],{"class":512},[167,37454,37450],{"class":184},[167,37456,33320],{"class":512},[40,37458,37459],{"start":191},[43,37460,33333],{},[26,37462,37464],{"className":723,"code":37463,"language":305,"meta":32,"style":32},"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",[34,37465,37466,37472,37478,37488,37494,37504,37514,37524,37534,37544,37548,37559,37569,37573,37577,37581,37589,37601,37611,37627,37637,37669,37683,37693,37703,37707,37717,37731,37741,37751,37761,37767,37771,37775,37779,37783,37787,37795,37815,37819,37823,37827,37831,37835,37851,37855,37859,37867,37871,37875,37883,37887,37891,37895,37903,37907,37911,37915,37919,37927,37931,37939,37943,37951,37955,37963,37967,37975,37979,37983,37991,37995,37999,38003,38015,38039,38053,38057,38061,38065,38073,38077,38085,38089,38097,38101,38109,38113,38121,38125,38133,38137,38149,38153,38161,38165,38173,38177,38181,38185,38189,38197,38201,38217,38221,38229,38233,38237,38241,38245,38249,38253,38257,38273,38277,38289,38293,38305,38309,38321,38325,38333,38337,38345,38349,38353,38358,38364,38368,38377,38381,38398,38402,38411,38415,38433,38446,38451,38464,38468,38472,38480,38484,38488,38496,38500,38508,38512,38520,38524,38528,38570,38612,38616,38620,38636,38640,38656,38660,38664,38672,38676,38680,38692,38730,38735,38740,38749,38753,38767,38777,38783,38789,38795,38801,38805,38809,38815,38819,38823,38831,38835,38853,38857,38861,38865,38881,38885,38889,38893,38897,38901,38921,38941,38945,38949,38953,38961,38969,38973,38989,39009,39029,39033,39037,39045,39053,39057,39061,39065,39077,39081,39091,39099,39116],{"__ignoreMap":32},[167,37467,37468,37470],{"class":169,"line":170},[167,37469,732],{"class":731},[167,37471,33827],{"class":512},[167,37473,37474,37476],{"class":169,"line":191},[167,37475,732],{"class":731},[167,37477,33834],{"class":512},[167,37479,37480,37482,37484,37486],{"class":169,"line":205},[167,37481,732],{"class":731},[167,37483,33845],{"class":512},[167,37485,33388],{"class":731},[167,37487,33850],{"class":512},[167,37489,37490,37492],{"class":169,"line":219},[167,37491,732],{"class":731},[167,37493,32404],{"class":512},[167,37495,37496,37498,37500,37502],{"class":169,"line":230},[167,37497,32745],{"class":731},[167,37499,33420],{"class":512},[167,37501,732],{"class":731},[167,37503,33867],{"class":512},[167,37505,37506,37508,37510,37512],{"class":169,"line":241},[167,37507,32745],{"class":731},[167,37509,33373],{"class":512},[167,37511,732],{"class":731},[167,37513,33378],{"class":512},[167,37515,37516,37518,37520,37522],{"class":169,"line":261},[167,37517,32745],{"class":731},[167,37519,33403],{"class":512},[167,37521,732],{"class":731},[167,37523,33408],{"class":512},[167,37525,37526,37528,37530,37532],{"class":169,"line":773},[167,37527,732],{"class":731},[167,37529,33420],{"class":512},[167,37531,33388],{"class":731},[167,37533,33425],{"class":512},[167,37535,37536,37538,37540,37542],{"class":169,"line":779},[167,37537,732],{"class":731},[167,37539,33437],{"class":512},[167,37541,33388],{"class":731},[167,37543,33442],{"class":512},[167,37545,37546],{"class":169,"line":785},[167,37547,33912],{"class":2268},[167,37549,37550,37552,37554,37556],{"class":169,"line":790},[167,37551,32745],{"class":731},[167,37553,33919],{"class":512},[167,37555,732],{"class":731},[167,37557,37558],{"class":512}," AlexNet\n",[167,37560,37561,37563,37565,37567],{"class":169,"line":796},[167,37562,32745],{"class":731},[167,37564,32748],{"class":512},[167,37566,732],{"class":731},[167,37568,32753],{"class":512},[167,37570,37571],{"class":169,"line":802},[167,37572,741],{"emptyLinePlaceholder":740},[167,37574,37575],{"class":169,"line":808},[167,37576,741],{"emptyLinePlaceholder":740},[167,37578,37579],{"class":169,"line":814},[167,37580,33947],{"class":2268},[167,37582,37583,37585,37587],{"class":169,"line":820},[167,37584,845],{"class":731},[167,37586,33954],{"class":173},[167,37588,33957],{"class":512},[167,37590,37591,37593,37595,37597,37599],{"class":169,"line":826},[167,37592,33962],{"class":512},[167,37594,523],{"class":731},[167,37596,33460],{"class":512},[167,37598,33468],{"class":177},[167,37600,33471],{"class":512},[167,37602,37603,37605,37607,37609],{"class":169,"line":832},[167,37604,33975],{"class":7246},[167,37606,523],{"class":731},[167,37608,33481],{"class":184},[167,37610,33471],{"class":512},[167,37612,37613,37615,37617,37619,37621,37623,37625],{"class":169,"line":837},[167,37614,33986],{"class":7246},[167,37616,523],{"class":731},[167,37618,33498],{"class":512},[167,37620,33501],{"class":7246},[167,37622,523],{"class":731},[167,37624,37450],{"class":184},[167,37626,33509],{"class":512},[167,37628,37629,37631,37633,37635],{"class":169,"line":842},[167,37630,34003],{"class":7246},[167,37632,523],{"class":731},[167,37634,33481],{"class":184},[167,37636,873],{"class":512},[167,37638,37639,37641,37643,37645,37647,37649,37651,37653,37655,37657,37659,37661,37663,37665,37667],{"class":169,"line":860},[167,37640,34014],{"class":512},[167,37642,523],{"class":731},[167,37644,34019],{"class":512},[167,37646,34022],{"class":184},[167,37648,898],{"class":512},[167,37650,34027],{"class":184},[167,37652,2655],{"class":731},[167,37654,9388],{"class":184},[167,37656,34034],{"class":512},[167,37658,34022],{"class":184},[167,37660,898],{"class":512},[167,37662,34041],{"class":184},[167,37664,2655],{"class":731},[167,37666,9388],{"class":184},[167,37668,34048],{"class":512},[167,37670,37671,37673,37675,37677,37679,37681],{"class":169,"line":876},[167,37672,34053],{"class":512},[167,37674,523],{"class":731},[167,37676,34058],{"class":512},[167,37678,33542],{"class":7246},[167,37680,523],{"class":731},[167,37682,33547],{"class":512},[167,37684,37685,37687,37689,37691],{"class":169,"line":887},[167,37686,34069],{"class":7246},[167,37688,523],{"class":731},[167,37690,34074],{"class":184},[167,37692,33471],{"class":512},[167,37694,37695,37697,37699,37701],{"class":169,"line":892},[167,37696,34081],{"class":7246},[167,37698,523],{"class":731},[167,37700,33481],{"class":184},[167,37702,33471],{"class":512},[167,37704,37705],{"class":169,"line":907},[167,37706,34092],{"class":2268},[167,37708,37709,37711,37713,37715],{"class":169,"line":920},[167,37710,34097],{"class":7246},[167,37712,523],{"class":731},[167,37714,2595],{"class":184},[167,37716,873],{"class":512},[167,37718,37719,37721,37723,37725,37727,37729],{"class":169,"line":933},[167,37720,34108],{"class":512},[167,37722,523],{"class":731},[167,37724,33539],{"class":512},[167,37726,33542],{"class":7246},[167,37728,523],{"class":731},[167,37730,34119],{"class":512},[167,37732,37733,37735,37737,37739],{"class":169,"line":946},[167,37734,34124],{"class":7246},[167,37736,523],{"class":731},[167,37738,34074],{"class":184},[167,37740,33471],{"class":512},[167,37742,37743,37745,37747,37749],{"class":169,"line":959},[167,37744,34135],{"class":7246},[167,37746,523],{"class":731},[167,37748,33481],{"class":184},[167,37750,33471],{"class":512},[167,37752,37753,37755,37757,37759],{"class":169,"line":964},[167,37754,34146],{"class":7246},[167,37756,523],{"class":731},[167,37758,2595],{"class":184},[167,37760,873],{"class":512},[167,37762,37763,37765],{"class":169,"line":987},[167,37764,6122],{"class":731},[167,37766,34159],{"class":512},[167,37768,37769],{"class":169,"line":993},[167,37770,741],{"emptyLinePlaceholder":740},[167,37772,37773],{"class":169,"line":998},[167,37774,34168],{"class":2268},[167,37776,37777],{"class":169,"line":1010},[167,37778,34173],{"class":2268},[167,37780,37781],{"class":169,"line":1022},[167,37782,741],{"emptyLinePlaceholder":740},[167,37784,37785],{"class":169,"line":1027},[167,37786,34182],{"class":2268},[167,37788,37789,37791,37793],{"class":169,"line":1032},[167,37790,845],{"class":731},[167,37792,34189],{"class":173},[167,37794,34192],{"class":512},[167,37796,37797,37799,37801,37803,37805,37807,37809,37811,37813],{"class":169,"line":1049},[167,37798,33243],{"class":512},[167,37800,523],{"class":731},[167,37802,32459],{"class":512},[167,37804,33250],{"class":177},[167,37806,3758],{"class":731},[167,37808,33255],{"class":512},[167,37810,3755],{"class":731},[167,37812,34211],{"class":177},[167,37814,873],{"class":512},[167,37816,37817],{"class":169,"line":10005},[167,37818,741],{"emptyLinePlaceholder":740},[167,37820,37821],{"class":169,"line":10011},[167,37822,741],{"emptyLinePlaceholder":740},[167,37824,37825],{"class":169,"line":10038},[167,37826,34226],{"class":2268},[167,37828,37829],{"class":169,"line":10043},[167,37830,34231],{"class":2268},[167,37832,37833],{"class":169,"line":10049},[167,37834,34236],{"class":2268},[167,37836,37837,37839,37841,37843,37845,37847,37849],{"class":169,"line":10061},[167,37838,34241],{"class":512},[167,37840,523],{"class":731},[167,37842,34246],{"class":512},[167,37844,34249],{"class":7246},[167,37846,523],{"class":731},[167,37848,34254],{"class":184},[167,37850,873],{"class":512},[167,37852,37853],{"class":169,"line":10073},[167,37854,741],{"emptyLinePlaceholder":740},[167,37856,37857],{"class":169,"line":10085},[167,37858,34265],{"class":2268},[167,37860,37861,37863,37865],{"class":169,"line":11744},[167,37862,34270],{"class":512},[167,37864,523],{"class":731},[167,37866,34275],{"class":512},[167,37868,37869],{"class":169,"line":11769},[167,37870,741],{"emptyLinePlaceholder":740},[167,37872,37873],{"class":169,"line":11792},[167,37874,34284],{"class":2268},[167,37876,37877,37879,37881],{"class":169,"line":11816},[167,37878,33295],{"class":512},[167,37880,523],{"class":731},[167,37882,34293],{"class":512},[167,37884,37885],{"class":169,"line":11821},[167,37886,34298],{"class":2268},[167,37888,37889],{"class":169,"line":11826},[167,37890,34303],{"class":2268},[167,37892,37893],{"class":169,"line":11831},[167,37894,34308],{"class":2268},[167,37896,37897,37899,37901],{"class":169,"line":11840},[167,37898,34313],{"class":512},[167,37900,523],{"class":731},[167,37902,34318],{"class":512},[167,37904,37905],{"class":169,"line":11845},[167,37906,741],{"emptyLinePlaceholder":740},[167,37908,37909],{"class":169,"line":11851},[167,37910,741],{"emptyLinePlaceholder":740},[167,37912,37913],{"class":169,"line":11872},[167,37914,34331],{"class":2268},[167,37916,37917],{"class":169,"line":11878},[167,37918,34336],{"class":2268},[167,37920,37921,37923,37925],{"class":169,"line":11892},[167,37922,34341],{"class":512},[167,37924,523],{"class":731},[167,37926,34346],{"class":184},[167,37928,37929],{"class":169,"line":11898},[167,37930,34351],{"class":2268},[167,37932,37933,37935,37937],{"class":169,"line":11925},[167,37934,34356],{"class":512},[167,37936,523],{"class":731},[167,37938,34361],{"class":512},[167,37940,37941],{"class":169,"line":11934},[167,37942,34366],{"class":2268},[167,37944,37945,37947,37949],{"class":169,"line":11940},[167,37946,34371],{"class":512},[167,37948,523],{"class":731},[167,37950,34361],{"class":512},[167,37952,37953],{"class":169,"line":11948},[167,37954,34380],{"class":2268},[167,37956,37957,37959,37961],{"class":169,"line":11953},[167,37958,34385],{"class":512},[167,37960,523],{"class":731},[167,37962,34361],{"class":512},[167,37964,37965],{"class":169,"line":18630},[167,37966,34394],{"class":2268},[167,37968,37969,37971,37973],{"class":169,"line":18636},[167,37970,34399],{"class":512},[167,37972,523],{"class":731},[167,37974,34361],{"class":512},[167,37976,37977],{"class":169,"line":18659},[167,37978,741],{"emptyLinePlaceholder":740},[167,37980,37981],{"class":169,"line":18665},[167,37982,34412],{"class":2268},[167,37984,37985,37987,37989],{"class":169,"line":18688},[167,37986,34417],{"class":512},[167,37988,523],{"class":731},[167,37990,34422],{"class":512},[167,37992,37993],{"class":169,"line":18702},[167,37994,741],{"emptyLinePlaceholder":740},[167,37996,37997],{"class":169,"line":18722},[167,37998,741],{"emptyLinePlaceholder":740},[167,38000,38001],{"class":169,"line":18728},[167,38002,34435],{"class":2268},[167,38004,38005,38007,38009,38011,38013],{"class":169,"line":18739},[167,38006,967],{"class":731},[167,38008,34442],{"class":512},[167,38010,973],{"class":731},[167,38012,976],{"class":184},[167,38014,34449],{"class":512},[167,38016,38017,38019,38021,38023,38025,38027,38029,38031,38033,38035,38037],{"class":169,"line":18762},[167,38018,34454],{"class":184},[167,38020,898],{"class":512},[167,38022,34459],{"class":177},[167,38024,34462],{"class":184},[167,38026,2784],{"class":177},[167,38028,34462],{"class":184},[167,38030,2452],{"class":177},[167,38032,34471],{"class":512},[167,38034,2732],{"class":731},[167,38036,2418],{"class":184},[167,38038,32505],{"class":512},[167,38040,38041,38043,38045,38047,38049,38051],{"class":169,"line":18784},[167,38042,34454],{"class":184},[167,38044,898],{"class":512},[167,38046,34486],{"class":177},[167,38048,2655],{"class":731},[167,38050,2646],{"class":184},[167,38052,873],{"class":512},[167,38054,38055],{"class":169,"line":18789},[167,38056,741],{"emptyLinePlaceholder":740},[167,38058,38059],{"class":169,"line":18795},[167,38060,34501],{"class":2268},[167,38062,38063],{"class":169,"line":18809},[167,38064,34506],{"class":2268},[167,38066,38067,38069,38071],{"class":169,"line":18822},[167,38068,34511],{"class":512},[167,38070,523],{"class":731},[167,38072,34346],{"class":184},[167,38074,38075],{"class":169,"line":18827},[167,38076,34520],{"class":2268},[167,38078,38079,38081,38083],{"class":169,"line":18841},[167,38080,34525],{"class":512},[167,38082,523],{"class":731},[167,38084,5120],{"class":184},[167,38086,38087],{"class":169,"line":18846},[167,38088,34534],{"class":2268},[167,38090,38091,38093,38095],{"class":169,"line":18852},[167,38092,34539],{"class":512},[167,38094,523],{"class":731},[167,38096,34346],{"class":184},[167,38098,38099],{"class":169,"line":18857},[167,38100,34548],{"class":2268},[167,38102,38103,38105,38107],{"class":169,"line":18871},[167,38104,34553],{"class":512},[167,38106,523],{"class":731},[167,38108,5120],{"class":184},[167,38110,38111],{"class":169,"line":18876},[167,38112,34562],{"class":2268},[167,38114,38115,38117,38119],{"class":169,"line":18881},[167,38116,34567],{"class":512},[167,38118,523],{"class":731},[167,38120,5120],{"class":184},[167,38122,38123],{"class":169,"line":18895},[167,38124,34576],{"class":2268},[167,38126,38127,38129,38131],{"class":169,"line":18907},[167,38128,34581],{"class":512},[167,38130,523],{"class":731},[167,38132,5120],{"class":184},[167,38134,38135],{"class":169,"line":18912},[167,38136,34590],{"class":2268},[167,38138,38139,38141,38143,38145,38147],{"class":169,"line":18925},[167,38140,5437],{"class":731},[167,38142,33606],{"class":512},[167,38144,973],{"class":731},[167,38146,33611],{"class":184},[167,38148,34603],{"class":512},[167,38150,38151],{"class":169,"line":18930},[167,38152,34608],{"class":2268},[167,38154,38155,38157,38159],{"class":169,"line":18935},[167,38156,34613],{"class":512},[167,38158,523],{"class":731},[167,38160,34618],{"class":512},[167,38162,38163],{"class":169,"line":18940},[167,38164,34623],{"class":2268},[167,38166,38167,38169,38171],{"class":169,"line":18953},[167,38168,34628],{"class":512},[167,38170,523],{"class":731},[167,38172,34633],{"class":512},[167,38174,38175],{"class":169,"line":18958},[167,38176,34639],{"class":2268},[167,38178,38179],{"class":169,"line":34636},[167,38180,34645],{"class":512},[167,38182,38183],{"class":169,"line":34642},[167,38184,34651],{"class":2268},[167,38186,38187],{"class":169,"line":34648},[167,38188,34657],{"class":2268},[167,38190,38191,38193,38195],{"class":169,"line":34654},[167,38192,34663],{"class":512},[167,38194,523],{"class":731},[167,38196,34668],{"class":512},[167,38198,38199],{"class":169,"line":34660},[167,38200,34674],{"class":2268},[167,38202,38203,38205,38207,38209,38211,38213,38215],{"class":169,"line":34671},[167,38204,34680],{"class":512},[167,38206,523],{"class":731},[167,38208,34685],{"class":512},[167,38210,34688],{"class":7246},[167,38212,523],{"class":731},[167,38214,2418],{"class":184},[167,38216,873],{"class":512},[167,38218,38219],{"class":169,"line":34677},[167,38220,34700],{"class":2268},[167,38222,38223,38225,38227],{"class":169,"line":34697},[167,38224,34706],{"class":512},[167,38226,523],{"class":731},[167,38228,34711],{"class":512},[167,38230,38231],{"class":169,"line":34703},[167,38232,34717],{"class":2268},[167,38234,38235],{"class":169,"line":34714},[167,38236,34723],{"class":512},[167,38238,38239],{"class":169,"line":34720},[167,38240,34729],{"class":2268},[167,38242,38243],{"class":169,"line":34726},[167,38244,34735],{"class":512},[167,38246,38247],{"class":169,"line":34732},[167,38248,34741],{"class":2268},[167,38250,38251],{"class":169,"line":34738},[167,38252,34747],{"class":512},[167,38254,38255],{"class":169,"line":34744},[167,38256,34753],{"class":2268},[167,38258,38259,38261,38263,38265,38267,38269,38271],{"class":169,"line":34750},[167,38260,34759],{"class":512},[167,38262,11505],{"class":731},[167,38264,34764],{"class":512},[167,38266,2655],{"class":731},[167,38268,34769],{"class":512},[167,38270,1154],{"class":184},[167,38272,873],{"class":512},[167,38274,38275],{"class":169,"line":34756},[167,38276,34779],{"class":2268},[167,38278,38279,38281,38283,38285,38287],{"class":169,"line":34776},[167,38280,34785],{"class":512},[167,38282,11505],{"class":731},[167,38284,34790],{"class":512},[167,38286,4985],{"class":731},[167,38288,34795],{"class":512},[167,38290,38291],{"class":169,"line":34782},[167,38292,34801],{"class":2268},[167,38294,38295,38297,38299,38301,38303],{"class":169,"line":34798},[167,38296,34807],{"class":512},[167,38298,11505],{"class":731},[167,38300,34769],{"class":512},[167,38302,1154],{"class":184},[167,38304,873],{"class":512},[167,38306,38307],{"class":169,"line":34804},[167,38308,34821],{"class":2268},[167,38310,38311,38313,38315,38317,38319],{"class":169,"line":34818},[167,38312,5437],{"class":731},[167,38314,34829],{"class":512},[167,38316,973],{"class":731},[167,38318,33611],{"class":184},[167,38320,34836],{"class":512},[167,38322,38323],{"class":169,"line":34824},[167,38324,34842],{"class":2268},[167,38326,38327,38329,38331],{"class":169,"line":34839},[167,38328,34613],{"class":512},[167,38330,523],{"class":731},[167,38332,34618],{"class":512},[167,38334,38335],{"class":169,"line":34845},[167,38336,34857],{"class":2268},[167,38338,38339,38341,38343],{"class":169,"line":34854},[167,38340,34628],{"class":512},[167,38342,523],{"class":731},[167,38344,34633],{"class":512},[167,38346,38347],{"class":169,"line":34860},[167,38348,34872],{"class":2268},[167,38350,38351],{"class":169,"line":34869},[167,38352,34878],{"class":512},[167,38354,38355],{"class":169,"line":34875},[167,38356,38357],{"class":2268},"            # 验证时不计算梯度以节省内存\u002F计算\n",[167,38359,38360,38362],{"class":169,"line":34881},[167,38361,34884],{"class":731},[167,38363,34887],{"class":512},[167,38365,38366],{"class":169,"line":34890},[167,38367,34893],{"class":2268},[167,38369,38370,38373,38375],{"class":169,"line":34896},[167,38371,38372],{"class":512},"                output",[167,38374,523],{"class":731},[167,38376,34668],{"class":512},[167,38378,38379],{"class":169,"line":34907},[167,38380,34910],{"class":2268},[167,38382,38383,38386,38388,38390,38392,38394,38396],{"class":169,"line":34913},[167,38384,38385],{"class":512},"                pre_lab",[167,38387,523],{"class":731},[167,38389,34685],{"class":512},[167,38391,34688],{"class":7246},[167,38393,523],{"class":731},[167,38395,2418],{"class":184},[167,38397,873],{"class":512},[167,38399,38400],{"class":169,"line":34932},[167,38401,34935],{"class":2268},[167,38403,38404,38407,38409],{"class":169,"line":34938},[167,38405,38406],{"class":512},"                val_batch_loss",[167,38408,523],{"class":731},[167,38410,34711],{"class":512},[167,38412,38413],{"class":169,"line":34949},[167,38414,34952],{"class":2268},[167,38416,38417,38420,38422,38425,38427,38429,38431],{"class":169,"line":34955},[167,38418,38419],{"class":512},"                val_loss",[167,38421,11505],{"class":731},[167,38423,38424],{"class":512},"val_batch_loss.item()",[167,38426,2655],{"class":731},[167,38428,34769],{"class":512},[167,38430,1154],{"class":184},[167,38432,873],{"class":512},[167,38434,38435,38438,38440,38442,38444],{"class":169,"line":34975},[167,38436,38437],{"class":512},"                val_corrects",[167,38439,11505],{"class":731},[167,38441,34790],{"class":512},[167,38443,4985],{"class":731},[167,38445,34795],{"class":512},[167,38447,38448],{"class":169,"line":34991},[167,38449,38450],{"class":2268},"            # 当前用于验证的样本数量\n",[167,38452,38453,38456,38458,38460,38462],{"class":169,"line":34997},[167,38454,38455],{"class":512},"            val_num",[167,38457,11505],{"class":731},[167,38459,34769],{"class":512},[167,38461,1154],{"class":184},[167,38463,873],{"class":512},[167,38465,38466],{"class":169,"line":35011},[167,38467,35014],{"class":2268},[167,38469,38470],{"class":169,"line":35017},[167,38471,35020],{"class":2268},[167,38473,38474,38476,38478],{"class":169,"line":35023},[167,38475,35026],{"class":512},[167,38477,2784],{"class":731},[167,38479,35031],{"class":512},[167,38481,38482],{"class":169,"line":35034},[167,38483,35037],{"class":2268},[167,38485,38486],{"class":169,"line":35040},[167,38487,35043],{"class":2268},[167,38489,38490,38492,38494],{"class":169,"line":35046},[167,38491,35049],{"class":512},[167,38493,2784],{"class":731},[167,38495,35031],{"class":512},[167,38497,38498],{"class":169,"line":35056},[167,38499,35059],{"class":2268},[167,38501,38502,38504,38506],{"class":169,"line":35062},[167,38503,35065],{"class":512},[167,38505,2784],{"class":731},[167,38507,35070],{"class":512},[167,38509,38510],{"class":169,"line":35073},[167,38511,35076],{"class":2268},[167,38513,38514,38516,38518],{"class":169,"line":35079},[167,38515,35082],{"class":512},[167,38517,2784],{"class":731},[167,38519,35070],{"class":512},[167,38521,38522],{"class":169,"line":35089},[167,38523,741],{"emptyLinePlaceholder":740},[167,38525,38526],{"class":169,"line":35094},[167,38527,35097],{"class":2268},[167,38529,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568],{"class":169,"line":35100},[167,38531,34454],{"class":184},[167,38533,898],{"class":512},[167,38535,5626],{"class":177},[167,38537,34462],{"class":184},[167,38539,35111],{"class":177},[167,38541,3096],{"class":184},[167,38543,35116],{"class":731},[167,38545,3145],{"class":184},[167,38547,35121],{"class":177},[167,38549,3096],{"class":184},[167,38551,35116],{"class":731},[167,38553,3145],{"class":184},[167,38555,5626],{"class":177},[167,38557,35132],{"class":512},[167,38559,2732],{"class":731},[167,38561,2418],{"class":184},[167,38563,35139],{"class":512},[167,38565,2732],{"class":731},[167,38567,2418],{"class":184},[167,38569,35146],{"class":512},[167,38571,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610],{"class":169,"line":35149},[167,38573,34454],{"class":184},[167,38575,898],{"class":512},[167,38577,5626],{"class":177},[167,38579,34462],{"class":184},[167,38581,35160],{"class":177},[167,38583,3096],{"class":184},[167,38585,35116],{"class":731},[167,38587,3145],{"class":184},[167,38589,35169],{"class":177},[167,38591,3096],{"class":184},[167,38593,35116],{"class":731},[167,38595,3145],{"class":184},[167,38597,5626],{"class":177},[167,38599,35180],{"class":512},[167,38601,2732],{"class":731},[167,38603,2418],{"class":184},[167,38605,35187],{"class":512},[167,38607,2732],{"class":731},[167,38609,2418],{"class":184},[167,38611,35146],{"class":512},[167,38613,38614],{"class":169,"line":35196},[167,38615,741],{"emptyLinePlaceholder":740},[167,38617,38618],{"class":169,"line":35201},[167,38619,35204],{"class":2268},[167,38621,38622,38624,38626,38628,38630,38632,38634],{"class":169,"line":35207},[167,38623,4540],{"class":731},[167,38625,35212],{"class":512},[167,38627,2732],{"class":731},[167,38629,2418],{"class":184},[167,38631,3139],{"class":512},[167,38633,3159],{"class":731},[167,38635,35223],{"class":512},[167,38637,38638],{"class":169,"line":35226},[167,38639,35229],{"class":2268},[167,38641,38642,38644,38646,38648,38650,38652,38654],{"class":169,"line":35232},[167,38643,35235],{"class":512},[167,38645,2251],{"class":184},[167,38647,523],{"class":731},[167,38649,35242],{"class":512},[167,38651,2732],{"class":731},[167,38653,2418],{"class":184},[167,38655,35249],{"class":512},[167,38657,38658],{"class":169,"line":35252},[167,38659,35255],{"class":2268},[167,38661,38662],{"class":169,"line":35258},[167,38663,35261],{"class":2268},[167,38665,38666,38668,38670],{"class":169,"line":35264},[167,38667,35267],{"class":512},[167,38669,523],{"class":731},[167,38671,34318],{"class":512},[167,38673,38674],{"class":169,"line":35274},[167,38675,741],{"emptyLinePlaceholder":740},[167,38677,38678],{"class":169,"line":35279},[167,38679,35282],{"class":2268},[167,38681,38682,38684,38686,38688,38690],{"class":169,"line":35285},[167,38683,35288],{"class":512},[167,38685,523],{"class":731},[167,38687,35293],{"class":512},[167,38689,2732],{"class":731},[167,38691,35298],{"class":512},[167,38693,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728],{"class":169,"line":35301},[167,38695,34454],{"class":184},[167,38697,898],{"class":512},[167,38699,35308],{"class":177},[167,38701,3096],{"class":184},[167,38703,35313],{"class":731},[167,38705,3145],{"class":184},[167,38707,2744],{"class":177},[167,38709,3096],{"class":184},[167,38711,35313],{"class":731},[167,38713,3145],{"class":184},[167,38715,35326],{"class":177},[167,38717,35329],{"class":512},[167,38719,35332],{"class":731},[167,38721,3107],{"class":184},[167,38723,35337],{"class":512},[167,38725,2528],{"class":731},[167,38727,3107],{"class":184},[167,38729,32505],{"class":512},[167,38731,38732],{"class":169,"line":35346},[167,38733,38734],{"class":2268},"    # 选择最优参数并保存\n",[167,38736,38737],{"class":169,"line":35352},[167,38738,38739],{"class":2268},"    # 保存最佳模型权重字典\n",[167,38741,38742,38745,38747],{"class":169,"line":35358},[167,38743,38744],{"class":512},"    torch.save(best_model_wts,",[167,38746,35370],{"class":177},[167,38748,873],{"class":512},[167,38750,38751],{"class":169,"line":35364},[167,38752,35390],{"class":2268},[167,38754,38755,38757,38759,38761,38763,38765],{"class":169,"line":35375},[167,38756,35396],{"class":512},[167,38758,523],{"class":731},[167,38760,35401],{"class":512},[167,38762,1150],{"class":7246},[167,38764,523],{"class":731},[167,38766,3611],{"class":512},[167,38768,38769,38771,38773,38775],{"class":169,"line":35381},[167,38770,35413],{"class":177},[167,38772,3059],{"class":512},[167,38774,35418],{"class":184},[167,38776,35421],{"class":512},[167,38778,38779,38781],{"class":169,"line":35387},[167,38780,35427],{"class":177},[167,38782,35430],{"class":512},[167,38784,38785,38787],{"class":169,"line":35393},[167,38786,35436],{"class":177},[167,38788,35439],{"class":512},[167,38790,38791,38793],{"class":169,"line":35410},[167,38792,35445],{"class":177},[167,38794,35448],{"class":512},[167,38796,38797,38799],{"class":169,"line":35424},[167,38798,35454],{"class":177},[167,38800,35457],{"class":512},[167,38802,38803],{"class":169,"line":35433},[167,38804,35463],{"class":512},[167,38806,38807],{"class":169,"line":35442},[167,38808,35469],{"class":2268},[167,38810,38811,38813],{"class":169,"line":35451},[167,38812,6122],{"class":731},[167,38814,35477],{"class":512},[167,38816,38817],{"class":169,"line":35460},[167,38818,741],{"emptyLinePlaceholder":740},[167,38820,38821],{"class":169,"line":35466},[167,38822,35488],{"class":2268},[167,38824,38825,38827,38829],{"class":169,"line":35472},[167,38826,845],{"class":731},[167,38828,35496],{"class":173},[167,38830,35499],{"class":512},[167,38832,38833],{"class":169,"line":35480},[167,38834,35505],{"class":2268},[167,38836,38837,38839,38841,38843,38845,38847,38849,38851],{"class":169,"line":35485},[167,38838,35511],{"class":512},[167,38840,33698],{"class":7246},[167,38842,523],{"class":731},[167,38844,898],{"class":512},[167,38846,2698],{"class":184},[167,38848,2578],{"class":512},[167,38850,2494],{"class":184},[167,38852,32505],{"class":512},[167,38854,38855],{"class":169,"line":35491},[167,38856,35531],{"class":2268},[167,38858,38859],{"class":169,"line":35502},[167,38860,35537],{"class":2268},[167,38862,38863],{"class":169,"line":35508},[167,38864,35543],{"class":2268},[167,38866,38867,38869,38871,38873,38875,38877,38879],{"class":169,"line":35528},[167,38868,33732],{"class":512},[167,38870,2418],{"class":184},[167,38872,2578],{"class":512},[167,38874,2287],{"class":184},[167,38876,2578],{"class":512},[167,38878,2418],{"class":184},[167,38880,873],{"class":512},[167,38882,38883],{"class":169,"line":35534},[167,38884,35566],{"class":2268},[167,38886,38887],{"class":169,"line":35540},[167,38888,35572],{"class":2268},[167,38890,38891],{"class":169,"line":35546},[167,38892,35578],{"class":2268},[167,38894,38895],{"class":169,"line":35563},[167,38896,35584],{"class":2268},[167,38898,38899],{"class":169,"line":35569},[167,38900,35590],{"class":2268},[167,38902,38903,38905,38907,38909,38911,38913,38915,38917,38919],{"class":169,"line":35575},[167,38904,35596],{"class":512},[167,38906,35599],{"class":177},[167,38908,35602],{"class":512},[167,38910,35605],{"class":177},[167,38912,2578],{"class":512},[167,38914,35610],{"class":7246},[167,38916,523],{"class":731},[167,38918,35615],{"class":177},[167,38920,873],{"class":512},[167,38922,38923,38925,38927,38929,38931,38933,38935,38937,38939],{"class":169,"line":35581},[167,38924,35596],{"class":512},[167,38926,35599],{"class":177},[167,38928,35627],{"class":512},[167,38930,35630],{"class":177},[167,38932,2578],{"class":512},[167,38934,35610],{"class":7246},[167,38936,523],{"class":731},[167,38938,35639],{"class":177},[167,38940,873],{"class":512},[167,38942,38943],{"class":169,"line":35587},[167,38944,35647],{"class":2268},[167,38946,38947],{"class":169,"line":35593},[167,38948,35653],{"class":512},[167,38950,38951],{"class":169,"line":35620},[167,38952,35659],{"class":2268},[167,38954,38955,38957,38959],{"class":169,"line":35644},[167,38956,35665],{"class":512},[167,38958,35668],{"class":177},[167,38960,873],{"class":512},[167,38962,38963,38965,38967],{"class":169,"line":35650},[167,38964,35676],{"class":512},[167,38966,35679],{"class":177},[167,38968,873],{"class":512},[167,38970,38971],{"class":169,"line":35656},[167,38972,35687],{"class":2268},[167,38974,38975,38977,38979,38981,38983,38985,38987],{"class":169,"line":35662},[167,38976,33732],{"class":512},[167,38978,2418],{"class":184},[167,38980,2578],{"class":512},[167,38982,2287],{"class":184},[167,38984,2578],{"class":512},[167,38986,2287],{"class":184},[167,38988,873],{"class":512},[167,38990,38991,38993,38995,38997,38999,39001,39003,39005,39007],{"class":169,"line":35673},[167,38992,35596],{"class":512},[167,38994,35599],{"class":177},[167,38996,35714],{"class":512},[167,38998,35605],{"class":177},[167,39000,2578],{"class":512},[167,39002,35610],{"class":7246},[167,39004,523],{"class":731},[167,39006,35725],{"class":177},[167,39008,873],{"class":512},[167,39010,39011,39013,39015,39017,39019,39021,39023,39025,39027],{"class":169,"line":35684},[167,39012,35596],{"class":512},[167,39014,35599],{"class":177},[167,39016,35737],{"class":512},[167,39018,35630],{"class":177},[167,39020,2578],{"class":512},[167,39022,35610],{"class":7246},[167,39024,523],{"class":731},[167,39026,35748],{"class":177},[167,39028,873],{"class":512},[167,39030,39031],{"class":169,"line":35690},[167,39032,35756],{"class":2268},[167,39034,39035],{"class":169,"line":35707},[167,39036,35653],{"class":512},[167,39038,39039,39041,39043],{"class":169,"line":35730},[167,39040,35665],{"class":512},[167,39042,35599],{"class":177},[167,39044,873],{"class":512},[167,39046,39047,39049,39051],{"class":169,"line":35753},[167,39048,35676],{"class":512},[167,39050,35778],{"class":177},[167,39052,873],{"class":512},[167,39054,39055],{"class":169,"line":35759},[167,39056,35786],{"class":512},[167,39058,39059],{"class":169,"line":35764},[167,39060,741],{"emptyLinePlaceholder":740},[167,39062,39063],{"class":169,"line":35773},[167,39064,35797],{"class":2268},[167,39066,39067,39069,39071,39073,39075],{"class":169,"line":35783},[167,39068,1035],{"class":731},[167,39070,1038],{"class":184},[167,39072,4985],{"class":731},[167,39074,33231],{"class":177},[167,39076,857],{"class":512},[167,39078,39079],{"class":169,"line":35789},[167,39080,35816],{"class":2268},[167,39082,39083,39086,39088],{"class":169,"line":35794},[167,39084,39085],{"class":512},"    AlexNet",[167,39087,523],{"class":731},[167,39089,39090],{"class":512},"AlexNet()\n",[167,39092,39093,39095,39097],{"class":169,"line":35800},[167,39094,35833],{"class":512},[167,39096,523],{"class":731},[167,39098,35838],{"class":512},[167,39100,39101,39103,39105,39108,39110,39112,39114],{"class":169,"line":35813},[167,39102,35396],{"class":512},[167,39104,523],{"class":731},[167,39106,39107],{"class":512},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[167,39109,35851],{"class":7246},[167,39111,523],{"class":731},[167,39113,2900],{"class":184},[167,39115,873],{"class":512},[167,39117,39118],{"class":169,"line":35819},[167,39119,35863],{"class":512},[40,39121,39122],{"start":205},[43,39123,35876],{},[26,39125,39127],{"className":723,"code":39126,"language":305,"meta":32,"style":32},"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",[34,39128,39129,39135,39145,39155,39165,39169,39179,39189,39200,39204,39208,39212,39220,39236,39246,39262,39272,39286,39290,39300,39310,39320,39326,39330,39334,39342,39346,39362,39370,39374,39378,39386,39394,39398,39402,39406,39410,39416,39420,39430,39438,39446,39450,39454,39458,39466,39470,39486,39490,39494,39498,39510,39514,39526,39530,39534,39546,39550,39560,39564,39568,39580,39584,39592,39596,39600,39608,39612,39620,39624,39628,39632,39636,39640,39656,39664,39668,39672,39720,39726,39730,39740,39748,39756,39760,39764,39768,39772,39780,39784,39800,39804,39812,39820],{"__ignoreMap":32},[167,39130,39131,39133],{"class":169,"line":170},[167,39132,732],{"class":731},[167,39134,32404],{"class":512},[167,39136,39137,39139,39141,39143],{"class":169,"line":191},[167,39138,732],{"class":731},[167,39140,33420],{"class":512},[167,39142,33388],{"class":731},[167,39144,33425],{"class":512},[167,39146,39147,39149,39151,39153],{"class":169,"line":205},[167,39148,32745],{"class":731},[167,39150,35904],{"class":512},[167,39152,732],{"class":731},[167,39154,35909],{"class":512},[167,39156,39157,39159,39161,39163],{"class":169,"line":219},[167,39158,32745],{"class":731},[167,39160,33403],{"class":512},[167,39162,732],{"class":731},[167,39164,33408],{"class":512},[167,39166,39167],{"class":169,"line":230},[167,39168,35924],{"class":2268},[167,39170,39171,39173,39175,39177],{"class":169,"line":241},[167,39172,32745],{"class":731},[167,39174,33373],{"class":512},[167,39176,732],{"class":731},[167,39178,33378],{"class":512},[167,39180,39181,39183,39185,39187],{"class":169,"line":261},[167,39182,32745],{"class":731},[167,39184,33919],{"class":512},[167,39186,732],{"class":731},[167,39188,37558],{"class":512},[167,39190,39191,39193,39196,39198],{"class":169,"line":773},[167,39192,32745],{"class":731},[167,39194,39195],{"class":512}," 练习.AlexNet.model ",[167,39197,732],{"class":731},[167,39199,37558],{"class":512},[167,39201,39202],{"class":169,"line":779},[167,39203,741],{"emptyLinePlaceholder":740},[167,39205,39206],{"class":169,"line":785},[167,39207,741],{"emptyLinePlaceholder":740},[167,39209,39210],{"class":169,"line":790},[167,39211,35953],{"class":2268},[167,39213,39214,39216,39218],{"class":169,"line":796},[167,39215,845],{"class":731},[167,39217,35960],{"class":173},[167,39219,33957],{"class":512},[167,39221,39222,39224,39226,39228,39230,39232,39234],{"class":169,"line":802},[167,39223,35967],{"class":512},[167,39225,523],{"class":731},[167,39227,33460],{"class":512},[167,39229,33463],{"class":7246},[167,39231,523],{"class":731},[167,39233,33468],{"class":177},[167,39235,33471],{"class":512},[167,39237,39238,39240,39242,39244],{"class":169,"line":808},[167,39239,35984],{"class":7246},[167,39241,523],{"class":731},[167,39243,35989],{"class":184},[167,39245,33471],{"class":512},[167,39247,39248,39250,39252,39254,39256,39258,39260],{"class":169,"line":814},[167,39249,35996],{"class":7246},[167,39251,523],{"class":731},[167,39253,33498],{"class":512},[167,39255,33501],{"class":7246},[167,39257,523],{"class":731},[167,39259,37450],{"class":184},[167,39261,33509],{"class":512},[167,39263,39264,39266,39268,39270],{"class":169,"line":820},[167,39265,36013],{"class":7246},[167,39267,523],{"class":731},[167,39269,33481],{"class":184},[167,39271,873],{"class":512},[167,39273,39274,39276,39278,39280,39282,39284],{"class":169,"line":826},[167,39275,36024],{"class":512},[167,39277,523],{"class":731},[167,39279,33539],{"class":512},[167,39281,33542],{"class":7246},[167,39283,523],{"class":731},[167,39285,36035],{"class":512},[167,39287,39288],{"class":169,"line":832},[167,39289,36040],{"class":2268},[167,39291,39292,39294,39296,39298],{"class":169,"line":837},[167,39293,36045],{"class":7246},[167,39295,523],{"class":731},[167,39297,2418],{"class":184},[167,39299,33471],{"class":512},[167,39301,39302,39304,39306,39308],{"class":169,"line":842},[167,39303,36056],{"class":7246},[167,39305,523],{"class":731},[167,39307,33481],{"class":184},[167,39309,33471],{"class":512},[167,39311,39312,39314,39316,39318],{"class":169,"line":860},[167,39313,36067],{"class":7246},[167,39315,523],{"class":731},[167,39317,1154],{"class":184},[167,39319,873],{"class":512},[167,39321,39322,39324],{"class":169,"line":876},[167,39323,6122],{"class":731},[167,39325,36080],{"class":512},[167,39327,39328],{"class":169,"line":887},[167,39329,741],{"emptyLinePlaceholder":740},[167,39331,39332],{"class":169,"line":892},[167,39333,36089],{"class":2268},[167,39335,39336,39338,39340],{"class":169,"line":907},[167,39337,845],{"class":731},[167,39339,36096],{"class":173},[167,39341,36099],{"class":512},[167,39343,39344],{"class":169,"line":920},[167,39345,36104],{"class":2268},[167,39347,39348,39350,39352,39354,39356,39358,39360],{"class":169,"line":933},[167,39349,33243],{"class":512},[167,39351,523],{"class":731},[167,39353,33250],{"class":177},[167,39355,3758],{"class":731},[167,39357,33255],{"class":512},[167,39359,3755],{"class":731},[167,39361,36121],{"class":177},[167,39363,39364,39366,39368],{"class":169,"line":946},[167,39365,33295],{"class":512},[167,39367,523],{"class":731},[167,39369,34293],{"class":512},[167,39371,39372],{"class":169,"line":959},[167,39373,741],{"emptyLinePlaceholder":740},[167,39375,39376],{"class":169,"line":964},[167,39377,36138],{"class":2268},[167,39379,39380,39382,39384],{"class":169,"line":987},[167,39381,36143],{"class":512},[167,39383,523],{"class":731},[167,39385,34346],{"class":184},[167,39387,39388,39390,39392],{"class":169,"line":993},[167,39389,36152],{"class":512},[167,39391,523],{"class":731},[167,39393,5120],{"class":184},[167,39395,39396],{"class":169,"line":998},[167,39397,741],{"emptyLinePlaceholder":740},[167,39399,39400],{"class":169,"line":1010},[167,39401,36165],{"class":2268},[167,39403,39404],{"class":169,"line":1022},[167,39405,36170],{"class":2268},[167,39407,39408],{"class":169,"line":1027},[167,39409,36175],{"class":2268},[167,39411,39412,39414],{"class":169,"line":1032},[167,39413,36180],{"class":731},[167,39415,34887],{"class":512},[167,39417,39418],{"class":169,"line":1049},[167,39419,36187],{"class":2268},[167,39421,39422,39424,39426,39428],{"class":169,"line":10005},[167,39423,5437],{"class":731},[167,39425,36194],{"class":512},[167,39427,973],{"class":731},[167,39429,36199],{"class":512},[167,39431,39432,39434,39436],{"class":169,"line":10011},[167,39433,36204],{"class":512},[167,39435,523],{"class":731},[167,39437,36209],{"class":512},[167,39439,39440,39442,39444],{"class":169,"line":10038},[167,39441,36214],{"class":512},[167,39443,523],{"class":731},[167,39445,36219],{"class":512},[167,39447,39448],{"class":169,"line":10043},[167,39449,36224],{"class":2268},[167,39451,39452],{"class":169,"line":10049},[167,39453,34878],{"class":512},[167,39455,39456],{"class":169,"line":10061},[167,39457,36233],{"class":2268},[167,39459,39460,39462,39464],{"class":169,"line":10073},[167,39461,34663],{"class":512},[167,39463,523],{"class":731},[167,39465,36242],{"class":512},[167,39467,39468],{"class":169,"line":10085},[167,39469,36247],{"class":2268},[167,39471,39472,39474,39476,39478,39480,39482,39484],{"class":169,"line":11744},[167,39473,34680],{"class":512},[167,39475,523],{"class":731},[167,39477,34685],{"class":512},[167,39479,34688],{"class":7246},[167,39481,523],{"class":731},[167,39483,2418],{"class":184},[167,39485,873],{"class":512},[167,39487,39488],{"class":169,"line":11769},[167,39489,36268],{"class":2268},[167,39491,39492],{"class":169,"line":11792},[167,39493,36273],{"class":2268},[167,39495,39496],{"class":169,"line":11816},[167,39497,36278],{"class":2268},[167,39499,39500,39502,39504,39506,39508],{"class":169,"line":11821},[167,39501,36283],{"class":512},[167,39503,11505],{"class":731},[167,39505,34790],{"class":512},[167,39507,4985],{"class":731},[167,39509,36292],{"class":512},[167,39511,39512],{"class":169,"line":11826},[167,39513,36297],{"class":2268},[167,39515,39516,39518,39520,39522,39524],{"class":169,"line":11831},[167,39517,36302],{"class":512},[167,39519,11505],{"class":731},[167,39521,36307],{"class":512},[167,39523,1154],{"class":184},[167,39525,873],{"class":512},[167,39527,39528],{"class":169,"line":11840},[167,39529,741],{"emptyLinePlaceholder":740},[167,39531,39532],{"class":169,"line":11845},[167,39533,36320],{"class":2268},[167,39535,39536,39538,39540,39542,39544],{"class":169,"line":11851},[167,39537,36325],{"class":512},[167,39539,523],{"class":731},[167,39541,36330],{"class":512},[167,39543,2784],{"class":731},[167,39545,36335],{"class":512},[167,39547,39548],{"class":169,"line":11872},[167,39549,36340],{"class":2268},[167,39551,39552,39554,39556,39558],{"class":169,"line":11878},[167,39553,34454],{"class":184},[167,39555,898],{"class":512},[167,39557,36349],{"class":177},[167,39559,36352],{"class":512},[167,39561,39562],{"class":169,"line":11892},[167,39563,741],{"emptyLinePlaceholder":740},[167,39565,39566],{"class":169,"line":11898},[167,39567,36361],{"class":2268},[167,39569,39570,39572,39574,39576,39578],{"class":169,"line":11925},[167,39571,1035],{"class":731},[167,39573,1038],{"class":184},[167,39575,4985],{"class":731},[167,39577,33231],{"class":177},[167,39579,857],{"class":512},[167,39581,39582],{"class":169,"line":11934},[167,39583,36378],{"class":2268},[167,39585,39586,39588,39590],{"class":169,"line":11940},[167,39587,33295],{"class":512},[167,39589,523],{"class":731},[167,39591,39090],{"class":512},[167,39593,39594],{"class":169,"line":11948},[167,39595,36391],{"class":2268},[167,39597,39598],{"class":169,"line":11953},[167,39599,36396],{"class":2268},[167,39601,39602,39604,39606],{"class":169,"line":18630},[167,39603,36401],{"class":512},[167,39605,36404],{"class":177},[167,39607,32505],{"class":512},[167,39609,39610],{"class":169,"line":18636},[167,39611,36411],{"class":2268},[167,39613,39614,39616,39618],{"class":169,"line":18659},[167,39615,36024],{"class":512},[167,39617,523],{"class":731},[167,39619,36420],{"class":512},[167,39621,39622],{"class":169,"line":18665},[167,39623,36425],{"class":2268},[167,39625,39626],{"class":169,"line":18688},[167,39627,36430],{"class":512},[167,39629,39630],{"class":169,"line":18702},[167,39631,741],{"emptyLinePlaceholder":740},[167,39633,39634],{"class":169,"line":18722},[167,39635,36439],{"class":2268},[167,39637,39638],{"class":169,"line":18728},[167,39639,36444],{"class":2268},[167,39641,39642,39644,39646,39648,39650,39652,39654],{"class":169,"line":18739},[167,39643,33243],{"class":512},[167,39645,523],{"class":731},[167,39647,33250],{"class":177},[167,39649,3758],{"class":731},[167,39651,33255],{"class":512},[167,39653,3755],{"class":731},[167,39655,36121],{"class":177},[167,39657,39658,39660,39662],{"class":169,"line":18762},[167,39659,33295],{"class":512},[167,39661,523],{"class":731},[167,39663,34293],{"class":512},[167,39665,39666],{"class":169,"line":18784},[167,39667,36473],{"class":2268},[167,39669,39670],{"class":169,"line":18789},[167,39671,36478],{"class":2268},[167,39673,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718],{"class":169,"line":18795},[167,39675,36483],{"class":512},[167,39677,523],{"class":731},[167,39679,3090],{"class":512},[167,39681,36490],{"class":177},[167,39683,2578],{"class":512},[167,39685,36495],{"class":177},[167,39687,2578],{"class":512},[167,39689,36500],{"class":177},[167,39691,2578],{"class":512},[167,39693,36505],{"class":177},[167,39695,2578],{"class":512},[167,39697,36510],{"class":177},[167,39699,2578],{"class":512},[167,39701,36515],{"class":177},[167,39703,2578],{"class":512},[167,39705,36520],{"class":177},[167,39707,2578],{"class":512},[167,39709,36525],{"class":177},[167,39711,2578],{"class":512},[167,39713,36530],{"class":177},[167,39715,2578],{"class":512},[167,39717,36535],{"class":177},[167,39719,35249],{"class":512},[167,39721,39722,39724],{"class":169,"line":18809},[167,39723,36180],{"class":731},[167,39725,34887],{"class":512},[167,39727,39728],{"class":169,"line":18822},[167,39729,36548],{"class":2268},[167,39731,39732,39734,39736,39738],{"class":169,"line":18827},[167,39733,5437],{"class":731},[167,39735,36555],{"class":512},[167,39737,973],{"class":731},[167,39739,36199],{"class":512},[167,39741,39742,39744,39746],{"class":169,"line":18841},[167,39743,34613],{"class":512},[167,39745,523],{"class":731},[167,39747,34618],{"class":512},[167,39749,39750,39752,39754],{"class":169,"line":18846},[167,39751,34628],{"class":512},[167,39753,523],{"class":731},[167,39755,34633],{"class":512},[167,39757,39758],{"class":169,"line":18852},[167,39759,741],{"emptyLinePlaceholder":740},[167,39761,39762],{"class":169,"line":18857},[167,39763,36584],{"class":2268},[167,39765,39766],{"class":169,"line":18871},[167,39767,34878],{"class":512},[167,39769,39770],{"class":169,"line":18876},[167,39771,36593],{"class":2268},[167,39773,39774,39776,39778],{"class":169,"line":18881},[167,39775,34663],{"class":512},[167,39777,523],{"class":731},[167,39779,34668],{"class":512},[167,39781,39782],{"class":169,"line":18895},[167,39783,36606],{"class":2268},[167,39785,39786,39788,39790,39792,39794,39796,39798],{"class":169,"line":18907},[167,39787,34680],{"class":512},[167,39789,523],{"class":731},[167,39791,34685],{"class":512},[167,39793,34688],{"class":7246},[167,39795,523],{"class":731},[167,39797,2418],{"class":184},[167,39799,873],{"class":512},[167,39801,39802],{"class":169,"line":18912},[167,39803,36627],{"class":2268},[167,39805,39806,39808,39810],{"class":169,"line":18925},[167,39807,36632],{"class":512},[167,39809,523],{"class":731},[167,39811,36637],{"class":512},[167,39813,39814,39816,39818],{"class":169,"line":18930},[167,39815,36642],{"class":512},[167,39817,523],{"class":731},[167,39819,36647],{"class":512},[167,39821,39822,39824,39826,39828,39830,39832,39834,39836],{"class":169,"line":18935},[167,39823,36652],{"class":184},[167,39825,898],{"class":512},[167,39827,36657],{"class":177},[167,39829,36660],{"class":512},[167,39831,36663],{"class":177},[167,39833,2578],{"class":512},[167,39835,36668],{"class":177},[167,39837,36671],{"class":512},[494,39839,39841],{"id":39840},"_22vgg","2.2.VGG",[24024,39843,39845],{"id":39844},"_221原理","2.2.1.原理",[19,39847,39848],{},[3528,39849],{"alt":32,"src":39850},"\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,39852,39853],{},[3528,39854],{"alt":32,"src":39855},"\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,39857,39858],{},[3528,39859],{"alt":32,"src":39860},"\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,39862,39863],{},"参数详细描述：",[19,39865,39866],{},[3528,39867],{"alt":32,"src":39868},"\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,39870,39871],{},[3528,39872],{"alt":32,"src":39873},"\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,39875,39876],{},[3528,39877],{"alt":32,"src":39878},"\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,39880,39881],{},[3528,39882],{"alt":32,"src":39883},"\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,39885,39886],{},[3528,39887],{"alt":32,"src":39888},"\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",[24024,39890,39892],{"id":39891},"_222代码实现","2.2.2.代码实现",[40,39894,39895],{},[43,39896,39897],{},"网络搭建",[26,39899,39901],{"className":723,"code":39900,"language":305,"meta":32,"style":32},"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",[34,39902,39903,39909,39921,39931,39941,39945,39962,39970,39989,39994,39999,40011,40049,40054,40090,40094,40123,40128,40133,40144,40180,40184,40220,40224,40252,40256,40261,40272,40308,40312,40348,40352,40388,40392,40420,40424,40429,40440,40477,40481,40517,40521,40557,40561,40589,40593,40598,40609,40645,40649,40685,40689,40725,40729,40757,40761,40766,40777,40782,40787,40792,40813,40817,40829,40833,40845,40849,40853,40858,40863,40878,40883,40893,40898,40913,40918,40937,40942,40951,40956,40966,40971,40976,40989,40994,41008,41016,41020,41024,41032,41043,41054,41065,41076,41087,41098,41104,41108,41113,41126,41146,41152,41161],{"__ignoreMap":32},[167,39904,39905,39907],{"class":169,"line":170},[167,39906,732],{"class":731},[167,39908,32404],{"class":512},[167,39910,39911,39913,39916,39918],{"class":169,"line":191},[167,39912,32745],{"class":731},[167,39914,39915],{"class":512}," sympy.core.sympify ",[167,39917,732],{"class":731},[167,39919,39920],{"class":512}," kernS\n",[167,39922,39923,39925,39927,39929],{"class":169,"line":205},[167,39924,32745],{"class":731},[167,39926,32748],{"class":512},[167,39928,732],{"class":731},[167,39930,32753],{"class":512},[167,39932,39933,39935,39937,39939],{"class":169,"line":219},[167,39934,32745],{"class":731},[167,39936,32765],{"class":512},[167,39938,732],{"class":731},[167,39940,32770],{"class":512},[167,39942,39943],{"class":169,"line":230},[167,39944,741],{"emptyLinePlaceholder":740},[167,39946,39947,39949,39952,39954,39956,39958,39960],{"class":169,"line":241},[167,39948,16721],{"class":731},[167,39950,39951],{"class":173}," VGG16",[167,39953,898],{"class":512},[167,39955,32786],{"class":173},[167,39957,2758],{"class":512},[167,39959,32791],{"class":173},[167,39961,984],{"class":512},[167,39963,39964,39966,39968],{"class":169,"line":261},[167,39965,32808],{"class":731},[167,39967,32811],{"class":184},[167,39969,32814],{"class":512},[167,39971,39972,39974,39976,39979,39981,39983,39985,39987],{"class":169,"line":773},[167,39973,32824],{"class":184},[167,39975,898],{"class":512},[167,39977,39978],{"class":184},"VGG16",[167,39980,14463],{"class":512},[167,39982,32830],{"class":184},[167,39984,32833],{"class":512},[167,39986,32836],{"class":184},[167,39988,4020],{"class":512},[167,39990,39991],{"class":169,"line":779},[167,39992,39993],{"class":2268},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[167,39995,39996],{"class":169,"line":785},[167,39997,39998],{"class":2268},"        # 这里用的是灰度图\n",[167,40000,40001,40003,40006,40008],{"class":169,"line":790},[167,40002,32852],{"class":184},[167,40004,40005],{"class":512},".block1",[167,40007,523],{"class":731},[167,40009,40010],{"class":512},"nn.Sequential(\n",[167,40012,40013,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046],{"class":169,"line":796},[167,40014,40015],{"class":512},"            nn.Conv2d(",[167,40017,32863],{"class":7246},[167,40019,523],{"class":731},[167,40021,2418],{"class":184},[167,40023,2578],{"class":512},[167,40025,32872],{"class":7246},[167,40027,523],{"class":731},[167,40029,2405],{"class":184},[167,40031,2578],{"class":512},[167,40033,32881],{"class":7246},[167,40035,523],{"class":731},[167,40037,2281],{"class":184},[167,40039,2578],{"class":512},[167,40041,32890],{"class":7246},[167,40043,523],{"class":731},[167,40045,2418],{"class":184},[167,40047,40048],{"class":512},"),\n",[167,40050,40051],{"class":169,"line":802},[167,40052,40053],{"class":512},"            nn.ReLU(),\n",[167,40055,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088],{"class":169,"line":808},[167,40057,40015],{"class":512},[167,40059,32863],{"class":7246},[167,40061,523],{"class":731},[167,40063,2405],{"class":184},[167,40065,2578],{"class":512},[167,40067,32872],{"class":7246},[167,40069,523],{"class":731},[167,40071,2405],{"class":184},[167,40073,2578],{"class":512},[167,40075,32881],{"class":7246},[167,40077,523],{"class":731},[167,40079,2281],{"class":184},[167,40081,2578],{"class":512},[167,40083,32890],{"class":7246},[167,40085,523],{"class":731},[167,40087,2418],{"class":184},[167,40089,40048],{"class":512},[167,40091,40092],{"class":169,"line":814},[167,40093,40053],{"class":512},[167,40095,40096,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121],{"class":169,"line":820},[167,40097,40098],{"class":512},"            nn.MaxPool2d(",[167,40100,32881],{"class":7246},[167,40102,523],{"class":731},[167,40104,2287],{"class":184},[167,40106,2578],{"class":512},[167,40108,32936],{"class":7246},[167,40110,523],{"class":731},[167,40112,2287],{"class":184},[167,40114,2578],{"class":512},[167,40116,32890],{"class":7246},[167,40118,523],{"class":731},[167,40120,1154],{"class":184},[167,40122,873],{"class":512},[167,40124,40125],{"class":169,"line":826},[167,40126,40127],{"class":512},"        )\n",[167,40129,40130],{"class":169,"line":832},[167,40131,40132],{"class":2268},"        # 第二层\n",[167,40134,40135,40137,40140,40142],{"class":169,"line":837},[167,40136,32852],{"class":184},[167,40138,40139],{"class":512},".block2",[167,40141,523],{"class":731},[167,40143,40010],{"class":512},[167,40145,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178],{"class":169,"line":842},[167,40147,40015],{"class":512},[167,40149,32863],{"class":7246},[167,40151,523],{"class":731},[167,40153,2405],{"class":184},[167,40155,2578],{"class":512},[167,40157,32872],{"class":7246},[167,40159,523],{"class":731},[167,40161,34074],{"class":184},[167,40163,2578],{"class":512},[167,40165,32881],{"class":7246},[167,40167,523],{"class":731},[167,40169,2281],{"class":184},[167,40171,2578],{"class":512},[167,40173,32890],{"class":7246},[167,40175,523],{"class":731},[167,40177,2418],{"class":184},[167,40179,40048],{"class":512},[167,40181,40182],{"class":169,"line":860},[167,40183,40053],{"class":512},[167,40185,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216,40218],{"class":169,"line":876},[167,40187,40015],{"class":512},[167,40189,32863],{"class":7246},[167,40191,523],{"class":731},[167,40193,34074],{"class":184},[167,40195,2578],{"class":512},[167,40197,32872],{"class":7246},[167,40199,523],{"class":731},[167,40201,34074],{"class":184},[167,40203,2578],{"class":512},[167,40205,32881],{"class":7246},[167,40207,523],{"class":731},[167,40209,2281],{"class":184},[167,40211,2578],{"class":512},[167,40213,32890],{"class":7246},[167,40215,523],{"class":731},[167,40217,2418],{"class":184},[167,40219,40048],{"class":512},[167,40221,40222],{"class":169,"line":887},[167,40223,40053],{"class":512},[167,40225,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250],{"class":169,"line":892},[167,40227,40098],{"class":512},[167,40229,32881],{"class":7246},[167,40231,523],{"class":731},[167,40233,2287],{"class":184},[167,40235,2578],{"class":512},[167,40237,32936],{"class":7246},[167,40239,523],{"class":731},[167,40241,2287],{"class":184},[167,40243,2578],{"class":512},[167,40245,32890],{"class":7246},[167,40247,523],{"class":731},[167,40249,1154],{"class":184},[167,40251,873],{"class":512},[167,40253,40254],{"class":169,"line":907},[167,40255,40127],{"class":512},[167,40257,40258],{"class":169,"line":920},[167,40259,40260],{"class":2268},"        # 第三层\n",[167,40262,40263,40265,40268,40270],{"class":169,"line":933},[167,40264,32852],{"class":184},[167,40266,40267],{"class":512},".block3",[167,40269,523],{"class":731},[167,40271,40010],{"class":512},[167,40273,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306],{"class":169,"line":946},[167,40275,40015],{"class":512},[167,40277,32863],{"class":7246},[167,40279,523],{"class":731},[167,40281,34074],{"class":184},[167,40283,2578],{"class":512},[167,40285,32872],{"class":7246},[167,40287,523],{"class":731},[167,40289,36872],{"class":184},[167,40291,2578],{"class":512},[167,40293,32881],{"class":7246},[167,40295,523],{"class":731},[167,40297,2281],{"class":184},[167,40299,2578],{"class":512},[167,40301,32890],{"class":7246},[167,40303,523],{"class":731},[167,40305,2418],{"class":184},[167,40307,40048],{"class":512},[167,40309,40310],{"class":169,"line":959},[167,40311,40053],{"class":512},[167,40313,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346],{"class":169,"line":964},[167,40315,40015],{"class":512},[167,40317,32863],{"class":7246},[167,40319,523],{"class":731},[167,40321,36872],{"class":184},[167,40323,2578],{"class":512},[167,40325,32872],{"class":7246},[167,40327,523],{"class":731},[167,40329,36872],{"class":184},[167,40331,2578],{"class":512},[167,40333,32881],{"class":7246},[167,40335,523],{"class":731},[167,40337,2281],{"class":184},[167,40339,2578],{"class":512},[167,40341,32890],{"class":7246},[167,40343,523],{"class":731},[167,40345,2418],{"class":184},[167,40347,40048],{"class":512},[167,40349,40350],{"class":169,"line":987},[167,40351,40053],{"class":512},[167,40353,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386],{"class":169,"line":993},[167,40355,40015],{"class":512},[167,40357,32863],{"class":7246},[167,40359,523],{"class":731},[167,40361,36872],{"class":184},[167,40363,2578],{"class":512},[167,40365,32872],{"class":7246},[167,40367,523],{"class":731},[167,40369,36872],{"class":184},[167,40371,2578],{"class":512},[167,40373,32881],{"class":7246},[167,40375,523],{"class":731},[167,40377,2281],{"class":184},[167,40379,2578],{"class":512},[167,40381,32890],{"class":7246},[167,40383,523],{"class":731},[167,40385,2418],{"class":184},[167,40387,40048],{"class":512},[167,40389,40390],{"class":169,"line":998},[167,40391,40053],{"class":512},[167,40393,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418],{"class":169,"line":1010},[167,40395,40098],{"class":512},[167,40397,32881],{"class":7246},[167,40399,523],{"class":731},[167,40401,2287],{"class":184},[167,40403,2578],{"class":512},[167,40405,32936],{"class":7246},[167,40407,523],{"class":731},[167,40409,2287],{"class":184},[167,40411,2578],{"class":512},[167,40413,32890],{"class":7246},[167,40415,523],{"class":731},[167,40417,1154],{"class":184},[167,40419,873],{"class":512},[167,40421,40422],{"class":169,"line":1022},[167,40423,40127],{"class":512},[167,40425,40426],{"class":169,"line":1027},[167,40427,40428],{"class":2268},"        # 第四层\n",[167,40430,40431,40433,40436,40438],{"class":169,"line":1032},[167,40432,32852],{"class":184},[167,40434,40435],{"class":512},".block4",[167,40437,523],{"class":731},[167,40439,40010],{"class":512},[167,40441,40442,40444,40446,40448,40450,40452,40454,40456,40459,40461,40463,40465,40467,40469,40471,40473,40475],{"class":169,"line":1049},[167,40443,40015],{"class":512},[167,40445,32863],{"class":7246},[167,40447,523],{"class":731},[167,40449,36872],{"class":184},[167,40451,2578],{"class":512},[167,40453,32872],{"class":7246},[167,40455,523],{"class":731},[167,40457,40458],{"class":184},"512",[167,40460,2578],{"class":512},[167,40462,32881],{"class":7246},[167,40464,523],{"class":731},[167,40466,2281],{"class":184},[167,40468,2578],{"class":512},[167,40470,32890],{"class":7246},[167,40472,523],{"class":731},[167,40474,2418],{"class":184},[167,40476,40048],{"class":512},[167,40478,40479],{"class":169,"line":10005},[167,40480,40053],{"class":512},[167,40482,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515],{"class":169,"line":10011},[167,40484,40015],{"class":512},[167,40486,32863],{"class":7246},[167,40488,523],{"class":731},[167,40490,40458],{"class":184},[167,40492,2578],{"class":512},[167,40494,32872],{"class":7246},[167,40496,523],{"class":731},[167,40498,40458],{"class":184},[167,40500,2578],{"class":512},[167,40502,32881],{"class":7246},[167,40504,523],{"class":731},[167,40506,2281],{"class":184},[167,40508,2578],{"class":512},[167,40510,32890],{"class":7246},[167,40512,523],{"class":731},[167,40514,2418],{"class":184},[167,40516,40048],{"class":512},[167,40518,40519],{"class":169,"line":10038},[167,40520,40053],{"class":512},[167,40522,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553,40555],{"class":169,"line":10043},[167,40524,40015],{"class":512},[167,40526,32863],{"class":7246},[167,40528,523],{"class":731},[167,40530,40458],{"class":184},[167,40532,2578],{"class":512},[167,40534,32872],{"class":7246},[167,40536,523],{"class":731},[167,40538,40458],{"class":184},[167,40540,2578],{"class":512},[167,40542,32881],{"class":7246},[167,40544,523],{"class":731},[167,40546,2281],{"class":184},[167,40548,2578],{"class":512},[167,40550,32890],{"class":7246},[167,40552,523],{"class":731},[167,40554,2418],{"class":184},[167,40556,40048],{"class":512},[167,40558,40559],{"class":169,"line":10049},[167,40560,40053],{"class":512},[167,40562,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587],{"class":169,"line":10061},[167,40564,40098],{"class":512},[167,40566,32881],{"class":7246},[167,40568,523],{"class":731},[167,40570,2287],{"class":184},[167,40572,2578],{"class":512},[167,40574,32936],{"class":7246},[167,40576,523],{"class":731},[167,40578,2287],{"class":184},[167,40580,2578],{"class":512},[167,40582,32890],{"class":7246},[167,40584,523],{"class":731},[167,40586,1154],{"class":184},[167,40588,873],{"class":512},[167,40590,40591],{"class":169,"line":10073},[167,40592,40127],{"class":512},[167,40594,40595],{"class":169,"line":10085},[167,40596,40597],{"class":2268},"        # 第五层\n",[167,40599,40600,40602,40605,40607],{"class":169,"line":11744},[167,40601,32852],{"class":184},[167,40603,40604],{"class":512},".block5",[167,40606,523],{"class":731},[167,40608,40010],{"class":512},[167,40610,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643],{"class":169,"line":11769},[167,40612,40015],{"class":512},[167,40614,32863],{"class":7246},[167,40616,523],{"class":731},[167,40618,40458],{"class":184},[167,40620,2578],{"class":512},[167,40622,32872],{"class":7246},[167,40624,523],{"class":731},[167,40626,40458],{"class":184},[167,40628,2578],{"class":512},[167,40630,32881],{"class":7246},[167,40632,523],{"class":731},[167,40634,2281],{"class":184},[167,40636,2578],{"class":512},[167,40638,32890],{"class":7246},[167,40640,523],{"class":731},[167,40642,2418],{"class":184},[167,40644,40048],{"class":512},[167,40646,40647],{"class":169,"line":11792},[167,40648,40053],{"class":512},[167,40650,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683],{"class":169,"line":11816},[167,40652,40015],{"class":512},[167,40654,32863],{"class":7246},[167,40656,523],{"class":731},[167,40658,40458],{"class":184},[167,40660,2578],{"class":512},[167,40662,32872],{"class":7246},[167,40664,523],{"class":731},[167,40666,40458],{"class":184},[167,40668,2578],{"class":512},[167,40670,32881],{"class":7246},[167,40672,523],{"class":731},[167,40674,2281],{"class":184},[167,40676,2578],{"class":512},[167,40678,32890],{"class":7246},[167,40680,523],{"class":731},[167,40682,2418],{"class":184},[167,40684,40048],{"class":512},[167,40686,40687],{"class":169,"line":11821},[167,40688,40053],{"class":512},[167,40690,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723],{"class":169,"line":11826},[167,40692,40015],{"class":512},[167,40694,32863],{"class":7246},[167,40696,523],{"class":731},[167,40698,40458],{"class":184},[167,40700,2578],{"class":512},[167,40702,32872],{"class":7246},[167,40704,523],{"class":731},[167,40706,40458],{"class":184},[167,40708,2578],{"class":512},[167,40710,32881],{"class":7246},[167,40712,523],{"class":731},[167,40714,2281],{"class":184},[167,40716,2578],{"class":512},[167,40718,32890],{"class":7246},[167,40720,523],{"class":731},[167,40722,2418],{"class":184},[167,40724,40048],{"class":512},[167,40726,40727],{"class":169,"line":11831},[167,40728,40053],{"class":512},[167,40730,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749,40751,40753,40755],{"class":169,"line":11840},[167,40732,40098],{"class":512},[167,40734,32881],{"class":7246},[167,40736,523],{"class":731},[167,40738,2287],{"class":184},[167,40740,2578],{"class":512},[167,40742,32936],{"class":7246},[167,40744,523],{"class":731},[167,40746,2287],{"class":184},[167,40748,2578],{"class":512},[167,40750,32890],{"class":7246},[167,40752,523],{"class":731},[167,40754,1154],{"class":184},[167,40756,873],{"class":512},[167,40758,40759],{"class":169,"line":11845},[167,40760,40127],{"class":512},[167,40762,40763],{"class":169,"line":11851},[167,40764,40765],{"class":2268},"        # 全连接层\n",[167,40767,40768,40770,40773,40775],{"class":169,"line":11872},[167,40769,32852],{"class":184},[167,40771,40772],{"class":512},".block6",[167,40774,523],{"class":731},[167,40776,40010],{"class":512},[167,40778,40779],{"class":169,"line":11878},[167,40780,40781],{"class":2268},"            # 平展操作\n",[167,40783,40784],{"class":169,"line":11892},[167,40785,40786],{"class":2268},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[167,40788,40789],{"class":169,"line":11898},[167,40790,40791],{"class":512},"            nn.Flatten(),\n",[167,40793,40794,40797,40799,40801,40803,40805,40807,40809,40811],{"class":169,"line":11925},[167,40795,40796],{"class":512},"            nn.Linear(",[167,40798,2569],{"class":184},[167,40800,2655],{"class":731},[167,40802,2569],{"class":184},[167,40804,2655],{"class":731},[167,40806,40458],{"class":184},[167,40808,2578],{"class":512},[167,40810,36872],{"class":184},[167,40812,40048],{"class":512},[167,40814,40815],{"class":169,"line":11934},[167,40816,40053],{"class":512},[167,40818,40819,40821,40823,40825,40827],{"class":169,"line":11940},[167,40820,40796],{"class":512},[167,40822,36872],{"class":184},[167,40824,2578],{"class":512},[167,40826,34074],{"class":184},[167,40828,40048],{"class":512},[167,40830,40831],{"class":169,"line":11948},[167,40832,40053],{"class":512},[167,40834,40835,40837,40839,40841,40843],{"class":169,"line":11953},[167,40836,40796],{"class":512},[167,40838,34074],{"class":184},[167,40840,2578],{"class":512},[167,40842,2646],{"class":184},[167,40844,873],{"class":512},[167,40846,40847],{"class":169,"line":18630},[167,40848,40127],{"class":512},[167,40850,40851],{"class":169,"line":18636},[167,40852,741],{"emptyLinePlaceholder":740},[167,40854,40855],{"class":169,"line":18659},[167,40856,40857],{"class":2268},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[167,40859,40860],{"class":169,"line":18665},[167,40861,40862],{"class":2268},"        # 循环遍历模型\n",[167,40864,40865,40867,40870,40872,40875],{"class":169,"line":18688},[167,40866,5437],{"class":731},[167,40868,40869],{"class":512}," m ",[167,40871,973],{"class":731},[167,40873,40874],{"class":184}," self",[167,40876,40877],{"class":512},".modules():\n",[167,40879,40880],{"class":169,"line":18702},[167,40881,40882],{"class":2268},"            # print(m)\n",[167,40884,40885,40887,40890],{"class":169,"line":18722},[167,40886,6674],{"class":731},[167,40888,40889],{"class":184}," isinstance",[167,40891,40892],{"class":512},"(m,nn.Conv2d):\n",[167,40894,40895],{"class":169,"line":18728},[167,40896,40897],{"class":2268},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[167,40899,40900,40903,40906,40908,40911],{"class":169,"line":18739},[167,40901,40902],{"class":512},"                nn.init.kaiming_normal_(m.weight,",[167,40904,40905],{"class":7246},"nonlinearity",[167,40907,523],{"class":731},[167,40909,40910],{"class":177},"'relu'",[167,40912,873],{"class":512},[167,40914,40915],{"class":169,"line":18762},[167,40916,40917],{"class":2268},"                # 判断b参数是否存在\n",[167,40919,40920,40923,40926,40929,40932,40935],{"class":169,"line":18784},[167,40921,40922],{"class":731},"                if",[167,40924,40925],{"class":512}," m.bias ",[167,40927,40928],{"class":731},"is",[167,40930,40931],{"class":731}," not",[167,40933,40934],{"class":184}," None",[167,40936,857],{"class":512},[167,40938,40939],{"class":169,"line":18789},[167,40940,40941],{"class":2268},"                    # 如果参数不存在的化初始化b=0\n",[167,40943,40944,40947,40949],{"class":169,"line":18795},[167,40945,40946],{"class":512},"                    nn.init.constant_(m.bias,",[167,40948,1154],{"class":184},[167,40950,873],{"class":512},[167,40952,40953],{"class":169,"line":18809},[167,40954,40955],{"class":2268},"            # 全连接层初始化\n",[167,40957,40958,40961,40963],{"class":169,"line":18822},[167,40959,40960],{"class":731},"            elif",[167,40962,40889],{"class":184},[167,40964,40965],{"class":512},"(m,nn.Linear):\n",[167,40967,40968],{"class":169,"line":18827},[167,40969,40970],{"class":2268},"                # 这个初始化方法是利用的是正太分布的方式\n",[167,40972,40973],{"class":169,"line":18841},[167,40974,40975],{"class":2268},"                # 均值为0，方差为0.01\n",[167,40977,40978,40981,40983,40985,40987],{"class":169,"line":18846},[167,40979,40980],{"class":512},"                nn.init.normal_(m.weight,",[167,40982,1154],{"class":184},[167,40984,2578],{"class":512},[167,40986,648],{"class":184},[167,40988,873],{"class":512},[167,40990,40991],{"class":169,"line":18852},[167,40992,40993],{"class":2268},"                # 初始化b参数\n",[167,40995,40996,40998,41000,41002,41004,41006],{"class":169,"line":18857},[167,40997,40922],{"class":731},[167,40999,40925],{"class":512},[167,41001,40928],{"class":731},[167,41003,40931],{"class":731},[167,41005,40934],{"class":184},[167,41007,857],{"class":512},[167,41009,41010,41012,41014],{"class":169,"line":18871},[167,41011,40946],{"class":512},[167,41013,1154],{"class":184},[167,41015,873],{"class":512},[167,41017,41018],{"class":169,"line":18876},[167,41019,741],{"emptyLinePlaceholder":740},[167,41021,41022],{"class":169,"line":18881},[167,41023,37167],{"class":2268},[167,41025,41026,41028,41030],{"class":169,"line":18895},[167,41027,32808],{"class":731},[167,41029,33100],{"class":173},[167,41031,33103],{"class":512},[167,41033,41034,41036,41038,41040],{"class":169,"line":18907},[167,41035,33108],{"class":512},[167,41037,523],{"class":731},[167,41039,32830],{"class":184},[167,41041,41042],{"class":512},".block1(x)\n",[167,41044,41045,41047,41049,41051],{"class":169,"line":18912},[167,41046,33108],{"class":512},[167,41048,523],{"class":731},[167,41050,32830],{"class":184},[167,41052,41053],{"class":512},".block2(x)\n",[167,41055,41056,41058,41060,41062],{"class":169,"line":18925},[167,41057,33108],{"class":512},[167,41059,523],{"class":731},[167,41061,32830],{"class":184},[167,41063,41064],{"class":512},".block3(x)\n",[167,41066,41067,41069,41071,41073],{"class":169,"line":18930},[167,41068,33108],{"class":512},[167,41070,523],{"class":731},[167,41072,32830],{"class":184},[167,41074,41075],{"class":512},".block4(x)\n",[167,41077,41078,41080,41082,41084],{"class":169,"line":18935},[167,41079,33108],{"class":512},[167,41081,523],{"class":731},[167,41083,32830],{"class":184},[167,41085,41086],{"class":512},".block5(x)\n",[167,41088,41089,41091,41093,41095],{"class":169,"line":18940},[167,41090,33108],{"class":512},[167,41092,523],{"class":731},[167,41094,32830],{"class":184},[167,41096,41097],{"class":512},".block6(x)\n",[167,41099,41100,41102],{"class":169,"line":18953},[167,41101,16779],{"class":731},[167,41103,33216],{"class":512},[167,41105,41106],{"class":169,"line":18958},[167,41107,741],{"emptyLinePlaceholder":740},[167,41109,41110],{"class":169,"line":34636},[167,41111,41112],{"class":2268},"# 验证模型\n",[167,41114,41115,41117,41119,41121,41124],{"class":169,"line":34642},[167,41116,1035],{"class":731},[167,41118,1038],{"class":184},[167,41120,4985],{"class":731},[167,41122,41123],{"class":177},"'__main__'",[167,41125,857],{"class":512},[167,41127,41128,41130,41132,41134,41136,41138,41140,41142,41144],{"class":169,"line":34648},[167,41129,33243],{"class":512},[167,41131,523],{"class":731},[167,41133,32459],{"class":512},[167,41135,33250],{"class":177},[167,41137,3758],{"class":731},[167,41139,33255],{"class":512},[167,41141,3755],{"class":731},[167,41143,32484],{"class":177},[167,41145,873],{"class":512},[167,41147,41148,41150],{"class":169,"line":34654},[167,41149,895],{"class":184},[167,41151,32493],{"class":512},[167,41153,41154,41156,41158],{"class":169,"line":34660},[167,41155,33295],{"class":512},[167,41157,523],{"class":731},[167,41159,41160],{"class":512},"VGG16().to(device)\n",[167,41162,41163,41165,41167,41169,41171,41173,41175,41177],{"class":169,"line":34671},[167,41164,895],{"class":184},[167,41166,33307],{"class":512},[167,41168,2418],{"class":184},[167,41170,2578],{"class":512},[167,41172,33506],{"class":184},[167,41174,2578],{"class":512},[167,41176,33506],{"class":184},[167,41178,33320],{"class":512},[40,41180,41181],{"start":191},[43,41182,41183],{},"训练代码",[19,41185,41186],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41188,41189],{},"解决方式:",[19,41191,41192],{},"①权重初始化",[26,41194,41196],{"className":723,"code":41195,"language":305,"meta":32,"style":32},"# 权重初始化,保证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",[34,41197,41198,41203,41208,41220,41225,41233,41238,41251,41256,41270,41275,41284,41289,41298,41303,41308,41321,41326,41340],{"__ignoreMap":32},[167,41199,41200],{"class":169,"line":170},[167,41201,41202],{"class":2268},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[167,41204,41205],{"class":169,"line":191},[167,41206,41207],{"class":2268},"# 循环遍历模型\n",[167,41209,41210,41212,41214,41216,41218],{"class":169,"line":205},[167,41211,1168],{"class":731},[167,41213,40869],{"class":512},[167,41215,973],{"class":731},[167,41217,40874],{"class":184},[167,41219,40877],{"class":512},[167,41221,41222],{"class":169,"line":219},[167,41223,41224],{"class":2268},"    # print(m)\n",[167,41226,41227,41229,41231],{"class":169,"line":230},[167,41228,5136],{"class":731},[167,41230,40889],{"class":184},[167,41232,40892],{"class":512},[167,41234,41235],{"class":169,"line":241},[167,41236,41237],{"class":2268},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[167,41239,41240,41243,41245,41247,41249],{"class":169,"line":261},[167,41241,41242],{"class":512},"        nn.init.kaiming_normal_(m.weight,",[167,41244,40905],{"class":7246},[167,41246,523],{"class":731},[167,41248,40910],{"class":177},[167,41250,873],{"class":512},[167,41252,41253],{"class":169,"line":773},[167,41254,41255],{"class":2268},"        # 判断b参数是否存在\n",[167,41257,41258,41260,41262,41264,41266,41268],{"class":169,"line":779},[167,41259,4540],{"class":731},[167,41261,40925],{"class":512},[167,41263,40928],{"class":731},[167,41265,40931],{"class":731},[167,41267,40934],{"class":184},[167,41269,857],{"class":512},[167,41271,41272],{"class":169,"line":785},[167,41273,41274],{"class":2268},"            # 如果参数不存在的化初始化b=0\n",[167,41276,41277,41280,41282],{"class":169,"line":790},[167,41278,41279],{"class":512},"            nn.init.constant_(m.bias,",[167,41281,1154],{"class":184},[167,41283,873],{"class":512},[167,41285,41286],{"class":169,"line":796},[167,41287,41288],{"class":2268},"    # 全连接层初始化\n",[167,41290,41291,41294,41296],{"class":169,"line":802},[167,41292,41293],{"class":731},"    elif",[167,41295,40889],{"class":184},[167,41297,40965],{"class":512},[167,41299,41300],{"class":169,"line":808},[167,41301,41302],{"class":2268},"        # 这个初始化方法是利用的是正太分布的方式\n",[167,41304,41305],{"class":169,"line":814},[167,41306,41307],{"class":2268},"        # 均值为0，方差为0.01\n",[167,41309,41310,41313,41315,41317,41319],{"class":169,"line":820},[167,41311,41312],{"class":512},"        nn.init.normal_(m.weight,",[167,41314,1154],{"class":184},[167,41316,2578],{"class":512},[167,41318,648],{"class":184},[167,41320,873],{"class":512},[167,41322,41323],{"class":169,"line":826},[167,41324,41325],{"class":2268},"        # 初始化b参数\n",[167,41327,41328,41330,41332,41334,41336,41338],{"class":169,"line":832},[167,41329,4540],{"class":731},[167,41331,40925],{"class":512},[167,41333,40928],{"class":731},[167,41335,40931],{"class":731},[167,41337,40934],{"class":184},[167,41339,857],{"class":512},[167,41341,41342,41344,41346],{"class":169,"line":837},[167,41343,41279],{"class":512},[167,41345,1154],{"class":184},[167,41347,873],{"class":512},[19,41349,41350],{},"②尽可能地增加批次",[19,41352,41353],{},"训练完整代码：",[26,41355,41356],{"className":723,"code":39900,"language":305,"meta":32,"style":32},[34,41357,41358,41364,41374,41384,41394,41398,41414,41422,41440,41444,41448,41458,41494,41498,41534,41538,41566,41570,41574,41584,41620,41624,41660,41664,41692,41696,41700,41710,41746,41750,41786,41790,41826,41830,41858,41862,41866,41876,41912,41916,41952,41956,41992,41996,42024,42028,42032,42042,42078,42082,42118,42122,42158,42162,42190,42194,42198,42208,42212,42216,42220,42240,42244,42256,42260,42272,42276,42280,42284,42288,42300,42304,42312,42316,42328,42332,42346,42350,42358,42362,42370,42374,42378,42390,42394,42408,42416,42420,42424,42432,42442,42452,42462,42472,42482,42492,42498,42502,42506,42518,42538,42544,42552],{"__ignoreMap":32},[167,41359,41360,41362],{"class":169,"line":170},[167,41361,732],{"class":731},[167,41363,32404],{"class":512},[167,41365,41366,41368,41370,41372],{"class":169,"line":191},[167,41367,32745],{"class":731},[167,41369,39915],{"class":512},[167,41371,732],{"class":731},[167,41373,39920],{"class":512},[167,41375,41376,41378,41380,41382],{"class":169,"line":205},[167,41377,32745],{"class":731},[167,41379,32748],{"class":512},[167,41381,732],{"class":731},[167,41383,32753],{"class":512},[167,41385,41386,41388,41390,41392],{"class":169,"line":219},[167,41387,32745],{"class":731},[167,41389,32765],{"class":512},[167,41391,732],{"class":731},[167,41393,32770],{"class":512},[167,41395,41396],{"class":169,"line":230},[167,41397,741],{"emptyLinePlaceholder":740},[167,41399,41400,41402,41404,41406,41408,41410,41412],{"class":169,"line":241},[167,41401,16721],{"class":731},[167,41403,39951],{"class":173},[167,41405,898],{"class":512},[167,41407,32786],{"class":173},[167,41409,2758],{"class":512},[167,41411,32791],{"class":173},[167,41413,984],{"class":512},[167,41415,41416,41418,41420],{"class":169,"line":261},[167,41417,32808],{"class":731},[167,41419,32811],{"class":184},[167,41421,32814],{"class":512},[167,41423,41424,41426,41428,41430,41432,41434,41436,41438],{"class":169,"line":773},[167,41425,32824],{"class":184},[167,41427,898],{"class":512},[167,41429,39978],{"class":184},[167,41431,14463],{"class":512},[167,41433,32830],{"class":184},[167,41435,32833],{"class":512},[167,41437,32836],{"class":184},[167,41439,4020],{"class":512},[167,41441,41442],{"class":169,"line":779},[167,41443,39993],{"class":2268},[167,41445,41446],{"class":169,"line":785},[167,41447,39998],{"class":2268},[167,41449,41450,41452,41454,41456],{"class":169,"line":790},[167,41451,32852],{"class":184},[167,41453,40005],{"class":512},[167,41455,523],{"class":731},[167,41457,40010],{"class":512},[167,41459,41460,41462,41464,41466,41468,41470,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490,41492],{"class":169,"line":796},[167,41461,40015],{"class":512},[167,41463,32863],{"class":7246},[167,41465,523],{"class":731},[167,41467,2418],{"class":184},[167,41469,2578],{"class":512},[167,41471,32872],{"class":7246},[167,41473,523],{"class":731},[167,41475,2405],{"class":184},[167,41477,2578],{"class":512},[167,41479,32881],{"class":7246},[167,41481,523],{"class":731},[167,41483,2281],{"class":184},[167,41485,2578],{"class":512},[167,41487,32890],{"class":7246},[167,41489,523],{"class":731},[167,41491,2418],{"class":184},[167,41493,40048],{"class":512},[167,41495,41496],{"class":169,"line":802},[167,41497,40053],{"class":512},[167,41499,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530,41532],{"class":169,"line":808},[167,41501,40015],{"class":512},[167,41503,32863],{"class":7246},[167,41505,523],{"class":731},[167,41507,2405],{"class":184},[167,41509,2578],{"class":512},[167,41511,32872],{"class":7246},[167,41513,523],{"class":731},[167,41515,2405],{"class":184},[167,41517,2578],{"class":512},[167,41519,32881],{"class":7246},[167,41521,523],{"class":731},[167,41523,2281],{"class":184},[167,41525,2578],{"class":512},[167,41527,32890],{"class":7246},[167,41529,523],{"class":731},[167,41531,2418],{"class":184},[167,41533,40048],{"class":512},[167,41535,41536],{"class":169,"line":814},[167,41537,40053],{"class":512},[167,41539,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562,41564],{"class":169,"line":820},[167,41541,40098],{"class":512},[167,41543,32881],{"class":7246},[167,41545,523],{"class":731},[167,41547,2287],{"class":184},[167,41549,2578],{"class":512},[167,41551,32936],{"class":7246},[167,41553,523],{"class":731},[167,41555,2287],{"class":184},[167,41557,2578],{"class":512},[167,41559,32890],{"class":7246},[167,41561,523],{"class":731},[167,41563,1154],{"class":184},[167,41565,873],{"class":512},[167,41567,41568],{"class":169,"line":826},[167,41569,40127],{"class":512},[167,41571,41572],{"class":169,"line":832},[167,41573,40132],{"class":2268},[167,41575,41576,41578,41580,41582],{"class":169,"line":837},[167,41577,32852],{"class":184},[167,41579,40139],{"class":512},[167,41581,523],{"class":731},[167,41583,40010],{"class":512},[167,41585,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618],{"class":169,"line":842},[167,41587,40015],{"class":512},[167,41589,32863],{"class":7246},[167,41591,523],{"class":731},[167,41593,2405],{"class":184},[167,41595,2578],{"class":512},[167,41597,32872],{"class":7246},[167,41599,523],{"class":731},[167,41601,34074],{"class":184},[167,41603,2578],{"class":512},[167,41605,32881],{"class":7246},[167,41607,523],{"class":731},[167,41609,2281],{"class":184},[167,41611,2578],{"class":512},[167,41613,32890],{"class":7246},[167,41615,523],{"class":731},[167,41617,2418],{"class":184},[167,41619,40048],{"class":512},[167,41621,41622],{"class":169,"line":860},[167,41623,40053],{"class":512},[167,41625,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658],{"class":169,"line":876},[167,41627,40015],{"class":512},[167,41629,32863],{"class":7246},[167,41631,523],{"class":731},[167,41633,34074],{"class":184},[167,41635,2578],{"class":512},[167,41637,32872],{"class":7246},[167,41639,523],{"class":731},[167,41641,34074],{"class":184},[167,41643,2578],{"class":512},[167,41645,32881],{"class":7246},[167,41647,523],{"class":731},[167,41649,2281],{"class":184},[167,41651,2578],{"class":512},[167,41653,32890],{"class":7246},[167,41655,523],{"class":731},[167,41657,2418],{"class":184},[167,41659,40048],{"class":512},[167,41661,41662],{"class":169,"line":887},[167,41663,40053],{"class":512},[167,41665,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686,41688,41690],{"class":169,"line":892},[167,41667,40098],{"class":512},[167,41669,32881],{"class":7246},[167,41671,523],{"class":731},[167,41673,2287],{"class":184},[167,41675,2578],{"class":512},[167,41677,32936],{"class":7246},[167,41679,523],{"class":731},[167,41681,2287],{"class":184},[167,41683,2578],{"class":512},[167,41685,32890],{"class":7246},[167,41687,523],{"class":731},[167,41689,1154],{"class":184},[167,41691,873],{"class":512},[167,41693,41694],{"class":169,"line":907},[167,41695,40127],{"class":512},[167,41697,41698],{"class":169,"line":920},[167,41699,40260],{"class":2268},[167,41701,41702,41704,41706,41708],{"class":169,"line":933},[167,41703,32852],{"class":184},[167,41705,40267],{"class":512},[167,41707,523],{"class":731},[167,41709,40010],{"class":512},[167,41711,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744],{"class":169,"line":946},[167,41713,40015],{"class":512},[167,41715,32863],{"class":7246},[167,41717,523],{"class":731},[167,41719,34074],{"class":184},[167,41721,2578],{"class":512},[167,41723,32872],{"class":7246},[167,41725,523],{"class":731},[167,41727,36872],{"class":184},[167,41729,2578],{"class":512},[167,41731,32881],{"class":7246},[167,41733,523],{"class":731},[167,41735,2281],{"class":184},[167,41737,2578],{"class":512},[167,41739,32890],{"class":7246},[167,41741,523],{"class":731},[167,41743,2418],{"class":184},[167,41745,40048],{"class":512},[167,41747,41748],{"class":169,"line":959},[167,41749,40053],{"class":512},[167,41751,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784],{"class":169,"line":964},[167,41753,40015],{"class":512},[167,41755,32863],{"class":7246},[167,41757,523],{"class":731},[167,41759,36872],{"class":184},[167,41761,2578],{"class":512},[167,41763,32872],{"class":7246},[167,41765,523],{"class":731},[167,41767,36872],{"class":184},[167,41769,2578],{"class":512},[167,41771,32881],{"class":7246},[167,41773,523],{"class":731},[167,41775,2281],{"class":184},[167,41777,2578],{"class":512},[167,41779,32890],{"class":7246},[167,41781,523],{"class":731},[167,41783,2418],{"class":184},[167,41785,40048],{"class":512},[167,41787,41788],{"class":169,"line":987},[167,41789,40053],{"class":512},[167,41791,41792,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824],{"class":169,"line":993},[167,41793,40015],{"class":512},[167,41795,32863],{"class":7246},[167,41797,523],{"class":731},[167,41799,36872],{"class":184},[167,41801,2578],{"class":512},[167,41803,32872],{"class":7246},[167,41805,523],{"class":731},[167,41807,36872],{"class":184},[167,41809,2578],{"class":512},[167,41811,32881],{"class":7246},[167,41813,523],{"class":731},[167,41815,2281],{"class":184},[167,41817,2578],{"class":512},[167,41819,32890],{"class":7246},[167,41821,523],{"class":731},[167,41823,2418],{"class":184},[167,41825,40048],{"class":512},[167,41827,41828],{"class":169,"line":998},[167,41829,40053],{"class":512},[167,41831,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856],{"class":169,"line":1010},[167,41833,40098],{"class":512},[167,41835,32881],{"class":7246},[167,41837,523],{"class":731},[167,41839,2287],{"class":184},[167,41841,2578],{"class":512},[167,41843,32936],{"class":7246},[167,41845,523],{"class":731},[167,41847,2287],{"class":184},[167,41849,2578],{"class":512},[167,41851,32890],{"class":7246},[167,41853,523],{"class":731},[167,41855,1154],{"class":184},[167,41857,873],{"class":512},[167,41859,41860],{"class":169,"line":1022},[167,41861,40127],{"class":512},[167,41863,41864],{"class":169,"line":1027},[167,41865,40428],{"class":2268},[167,41867,41868,41870,41872,41874],{"class":169,"line":1032},[167,41869,32852],{"class":184},[167,41871,40435],{"class":512},[167,41873,523],{"class":731},[167,41875,40010],{"class":512},[167,41877,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896,41898,41900,41902,41904,41906,41908,41910],{"class":169,"line":1049},[167,41879,40015],{"class":512},[167,41881,32863],{"class":7246},[167,41883,523],{"class":731},[167,41885,36872],{"class":184},[167,41887,2578],{"class":512},[167,41889,32872],{"class":7246},[167,41891,523],{"class":731},[167,41893,40458],{"class":184},[167,41895,2578],{"class":512},[167,41897,32881],{"class":7246},[167,41899,523],{"class":731},[167,41901,2281],{"class":184},[167,41903,2578],{"class":512},[167,41905,32890],{"class":7246},[167,41907,523],{"class":731},[167,41909,2418],{"class":184},[167,41911,40048],{"class":512},[167,41913,41914],{"class":169,"line":10005},[167,41915,40053],{"class":512},[167,41917,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944,41946,41948,41950],{"class":169,"line":10011},[167,41919,40015],{"class":512},[167,41921,32863],{"class":7246},[167,41923,523],{"class":731},[167,41925,40458],{"class":184},[167,41927,2578],{"class":512},[167,41929,32872],{"class":7246},[167,41931,523],{"class":731},[167,41933,40458],{"class":184},[167,41935,2578],{"class":512},[167,41937,32881],{"class":7246},[167,41939,523],{"class":731},[167,41941,2281],{"class":184},[167,41943,2578],{"class":512},[167,41945,32890],{"class":7246},[167,41947,523],{"class":731},[167,41949,2418],{"class":184},[167,41951,40048],{"class":512},[167,41953,41954],{"class":169,"line":10038},[167,41955,40053],{"class":512},[167,41957,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990],{"class":169,"line":10043},[167,41959,40015],{"class":512},[167,41961,32863],{"class":7246},[167,41963,523],{"class":731},[167,41965,40458],{"class":184},[167,41967,2578],{"class":512},[167,41969,32872],{"class":7246},[167,41971,523],{"class":731},[167,41973,40458],{"class":184},[167,41975,2578],{"class":512},[167,41977,32881],{"class":7246},[167,41979,523],{"class":731},[167,41981,2281],{"class":184},[167,41983,2578],{"class":512},[167,41985,32890],{"class":7246},[167,41987,523],{"class":731},[167,41989,2418],{"class":184},[167,41991,40048],{"class":512},[167,41993,41994],{"class":169,"line":10049},[167,41995,40053],{"class":512},[167,41997,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022],{"class":169,"line":10061},[167,41999,40098],{"class":512},[167,42001,32881],{"class":7246},[167,42003,523],{"class":731},[167,42005,2287],{"class":184},[167,42007,2578],{"class":512},[167,42009,32936],{"class":7246},[167,42011,523],{"class":731},[167,42013,2287],{"class":184},[167,42015,2578],{"class":512},[167,42017,32890],{"class":7246},[167,42019,523],{"class":731},[167,42021,1154],{"class":184},[167,42023,873],{"class":512},[167,42025,42026],{"class":169,"line":10073},[167,42027,40127],{"class":512},[167,42029,42030],{"class":169,"line":10085},[167,42031,40597],{"class":2268},[167,42033,42034,42036,42038,42040],{"class":169,"line":11744},[167,42035,32852],{"class":184},[167,42037,40604],{"class":512},[167,42039,523],{"class":731},[167,42041,40010],{"class":512},[167,42043,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076],{"class":169,"line":11769},[167,42045,40015],{"class":512},[167,42047,32863],{"class":7246},[167,42049,523],{"class":731},[167,42051,40458],{"class":184},[167,42053,2578],{"class":512},[167,42055,32872],{"class":7246},[167,42057,523],{"class":731},[167,42059,40458],{"class":184},[167,42061,2578],{"class":512},[167,42063,32881],{"class":7246},[167,42065,523],{"class":731},[167,42067,2281],{"class":184},[167,42069,2578],{"class":512},[167,42071,32890],{"class":7246},[167,42073,523],{"class":731},[167,42075,2418],{"class":184},[167,42077,40048],{"class":512},[167,42079,42080],{"class":169,"line":11792},[167,42081,40053],{"class":512},[167,42083,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116],{"class":169,"line":11816},[167,42085,40015],{"class":512},[167,42087,32863],{"class":7246},[167,42089,523],{"class":731},[167,42091,40458],{"class":184},[167,42093,2578],{"class":512},[167,42095,32872],{"class":7246},[167,42097,523],{"class":731},[167,42099,40458],{"class":184},[167,42101,2578],{"class":512},[167,42103,32881],{"class":7246},[167,42105,523],{"class":731},[167,42107,2281],{"class":184},[167,42109,2578],{"class":512},[167,42111,32890],{"class":7246},[167,42113,523],{"class":731},[167,42115,2418],{"class":184},[167,42117,40048],{"class":512},[167,42119,42120],{"class":169,"line":11821},[167,42121,40053],{"class":512},[167,42123,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156],{"class":169,"line":11826},[167,42125,40015],{"class":512},[167,42127,32863],{"class":7246},[167,42129,523],{"class":731},[167,42131,40458],{"class":184},[167,42133,2578],{"class":512},[167,42135,32872],{"class":7246},[167,42137,523],{"class":731},[167,42139,40458],{"class":184},[167,42141,2578],{"class":512},[167,42143,32881],{"class":7246},[167,42145,523],{"class":731},[167,42147,2281],{"class":184},[167,42149,2578],{"class":512},[167,42151,32890],{"class":7246},[167,42153,523],{"class":731},[167,42155,2418],{"class":184},[167,42157,40048],{"class":512},[167,42159,42160],{"class":169,"line":11831},[167,42161,40053],{"class":512},[167,42163,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188],{"class":169,"line":11840},[167,42165,40098],{"class":512},[167,42167,32881],{"class":7246},[167,42169,523],{"class":731},[167,42171,2287],{"class":184},[167,42173,2578],{"class":512},[167,42175,32936],{"class":7246},[167,42177,523],{"class":731},[167,42179,2287],{"class":184},[167,42181,2578],{"class":512},[167,42183,32890],{"class":7246},[167,42185,523],{"class":731},[167,42187,1154],{"class":184},[167,42189,873],{"class":512},[167,42191,42192],{"class":169,"line":11845},[167,42193,40127],{"class":512},[167,42195,42196],{"class":169,"line":11851},[167,42197,40765],{"class":2268},[167,42199,42200,42202,42204,42206],{"class":169,"line":11872},[167,42201,32852],{"class":184},[167,42203,40772],{"class":512},[167,42205,523],{"class":731},[167,42207,40010],{"class":512},[167,42209,42210],{"class":169,"line":11878},[167,42211,40781],{"class":2268},[167,42213,42214],{"class":169,"line":11892},[167,42215,40786],{"class":2268},[167,42217,42218],{"class":169,"line":11898},[167,42219,40791],{"class":512},[167,42221,42222,42224,42226,42228,42230,42232,42234,42236,42238],{"class":169,"line":11925},[167,42223,40796],{"class":512},[167,42225,2569],{"class":184},[167,42227,2655],{"class":731},[167,42229,2569],{"class":184},[167,42231,2655],{"class":731},[167,42233,40458],{"class":184},[167,42235,2578],{"class":512},[167,42237,36872],{"class":184},[167,42239,40048],{"class":512},[167,42241,42242],{"class":169,"line":11934},[167,42243,40053],{"class":512},[167,42245,42246,42248,42250,42252,42254],{"class":169,"line":11940},[167,42247,40796],{"class":512},[167,42249,36872],{"class":184},[167,42251,2578],{"class":512},[167,42253,34074],{"class":184},[167,42255,40048],{"class":512},[167,42257,42258],{"class":169,"line":11948},[167,42259,40053],{"class":512},[167,42261,42262,42264,42266,42268,42270],{"class":169,"line":11953},[167,42263,40796],{"class":512},[167,42265,34074],{"class":184},[167,42267,2578],{"class":512},[167,42269,2646],{"class":184},[167,42271,873],{"class":512},[167,42273,42274],{"class":169,"line":18630},[167,42275,40127],{"class":512},[167,42277,42278],{"class":169,"line":18636},[167,42279,741],{"emptyLinePlaceholder":740},[167,42281,42282],{"class":169,"line":18659},[167,42283,40857],{"class":2268},[167,42285,42286],{"class":169,"line":18665},[167,42287,40862],{"class":2268},[167,42289,42290,42292,42294,42296,42298],{"class":169,"line":18688},[167,42291,5437],{"class":731},[167,42293,40869],{"class":512},[167,42295,973],{"class":731},[167,42297,40874],{"class":184},[167,42299,40877],{"class":512},[167,42301,42302],{"class":169,"line":18702},[167,42303,40882],{"class":2268},[167,42305,42306,42308,42310],{"class":169,"line":18722},[167,42307,6674],{"class":731},[167,42309,40889],{"class":184},[167,42311,40892],{"class":512},[167,42313,42314],{"class":169,"line":18728},[167,42315,40897],{"class":2268},[167,42317,42318,42320,42322,42324,42326],{"class":169,"line":18739},[167,42319,40902],{"class":512},[167,42321,40905],{"class":7246},[167,42323,523],{"class":731},[167,42325,40910],{"class":177},[167,42327,873],{"class":512},[167,42329,42330],{"class":169,"line":18762},[167,42331,40917],{"class":2268},[167,42333,42334,42336,42338,42340,42342,42344],{"class":169,"line":18784},[167,42335,40922],{"class":731},[167,42337,40925],{"class":512},[167,42339,40928],{"class":731},[167,42341,40931],{"class":731},[167,42343,40934],{"class":184},[167,42345,857],{"class":512},[167,42347,42348],{"class":169,"line":18789},[167,42349,40941],{"class":2268},[167,42351,42352,42354,42356],{"class":169,"line":18795},[167,42353,40946],{"class":512},[167,42355,1154],{"class":184},[167,42357,873],{"class":512},[167,42359,42360],{"class":169,"line":18809},[167,42361,40955],{"class":2268},[167,42363,42364,42366,42368],{"class":169,"line":18822},[167,42365,40960],{"class":731},[167,42367,40889],{"class":184},[167,42369,40965],{"class":512},[167,42371,42372],{"class":169,"line":18827},[167,42373,40970],{"class":2268},[167,42375,42376],{"class":169,"line":18841},[167,42377,40975],{"class":2268},[167,42379,42380,42382,42384,42386,42388],{"class":169,"line":18846},[167,42381,40980],{"class":512},[167,42383,1154],{"class":184},[167,42385,2578],{"class":512},[167,42387,648],{"class":184},[167,42389,873],{"class":512},[167,42391,42392],{"class":169,"line":18852},[167,42393,40993],{"class":2268},[167,42395,42396,42398,42400,42402,42404,42406],{"class":169,"line":18857},[167,42397,40922],{"class":731},[167,42399,40925],{"class":512},[167,42401,40928],{"class":731},[167,42403,40931],{"class":731},[167,42405,40934],{"class":184},[167,42407,857],{"class":512},[167,42409,42410,42412,42414],{"class":169,"line":18871},[167,42411,40946],{"class":512},[167,42413,1154],{"class":184},[167,42415,873],{"class":512},[167,42417,42418],{"class":169,"line":18876},[167,42419,741],{"emptyLinePlaceholder":740},[167,42421,42422],{"class":169,"line":18881},[167,42423,37167],{"class":2268},[167,42425,42426,42428,42430],{"class":169,"line":18895},[167,42427,32808],{"class":731},[167,42429,33100],{"class":173},[167,42431,33103],{"class":512},[167,42433,42434,42436,42438,42440],{"class":169,"line":18907},[167,42435,33108],{"class":512},[167,42437,523],{"class":731},[167,42439,32830],{"class":184},[167,42441,41042],{"class":512},[167,42443,42444,42446,42448,42450],{"class":169,"line":18912},[167,42445,33108],{"class":512},[167,42447,523],{"class":731},[167,42449,32830],{"class":184},[167,42451,41053],{"class":512},[167,42453,42454,42456,42458,42460],{"class":169,"line":18925},[167,42455,33108],{"class":512},[167,42457,523],{"class":731},[167,42459,32830],{"class":184},[167,42461,41064],{"class":512},[167,42463,42464,42466,42468,42470],{"class":169,"line":18930},[167,42465,33108],{"class":512},[167,42467,523],{"class":731},[167,42469,32830],{"class":184},[167,42471,41075],{"class":512},[167,42473,42474,42476,42478,42480],{"class":169,"line":18935},[167,42475,33108],{"class":512},[167,42477,523],{"class":731},[167,42479,32830],{"class":184},[167,42481,41086],{"class":512},[167,42483,42484,42486,42488,42490],{"class":169,"line":18940},[167,42485,33108],{"class":512},[167,42487,523],{"class":731},[167,42489,32830],{"class":184},[167,42491,41097],{"class":512},[167,42493,42494,42496],{"class":169,"line":18953},[167,42495,16779],{"class":731},[167,42497,33216],{"class":512},[167,42499,42500],{"class":169,"line":18958},[167,42501,741],{"emptyLinePlaceholder":740},[167,42503,42504],{"class":169,"line":34636},[167,42505,41112],{"class":2268},[167,42507,42508,42510,42512,42514,42516],{"class":169,"line":34642},[167,42509,1035],{"class":731},[167,42511,1038],{"class":184},[167,42513,4985],{"class":731},[167,42515,41123],{"class":177},[167,42517,857],{"class":512},[167,42519,42520,42522,42524,42526,42528,42530,42532,42534,42536],{"class":169,"line":34648},[167,42521,33243],{"class":512},[167,42523,523],{"class":731},[167,42525,32459],{"class":512},[167,42527,33250],{"class":177},[167,42529,3758],{"class":731},[167,42531,33255],{"class":512},[167,42533,3755],{"class":731},[167,42535,32484],{"class":177},[167,42537,873],{"class":512},[167,42539,42540,42542],{"class":169,"line":34654},[167,42541,895],{"class":184},[167,42543,32493],{"class":512},[167,42545,42546,42548,42550],{"class":169,"line":34660},[167,42547,33295],{"class":512},[167,42549,523],{"class":731},[167,42551,41160],{"class":512},[167,42553,42554,42556,42558,42560,42562,42564,42566,42568],{"class":169,"line":34671},[167,42555,895],{"class":184},[167,42557,33307],{"class":512},[167,42559,2418],{"class":184},[167,42561,2578],{"class":512},[167,42563,33506],{"class":184},[167,42565,2578],{"class":512},[167,42567,33506],{"class":184},[167,42569,33320],{"class":512},[40,42571,42572],{"start":205},[43,42573,42574],{},"测试代码",[26,42576,42578],{"className":723,"code":42577,"language":305,"meta":32,"style":32},"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",[34,42579,42580,42586,42596,42606,42610,42620,42631,42635,42639,42643,42651,42667,42677,42693,42703,42717,42721,42731,42741,42751,42757,42761,42765,42773,42777,42793,42801,42805,42809,42817,42825,42829,42833,42837,42841,42847,42851,42861,42869,42877,42881,42885,42889,42897,42901,42917,42921,42925,42929,42941,42945,42957,42961,42965,42977,42981,42991,42995,42999,43011,43015,43024,43028,43032,43040,43044,43052,43056,43060,43064,43068,43072,43088,43096,43100,43104,43152,43158,43162,43172,43180,43188,43192,43196,43200,43204,43212,43216,43232,43236,43244,43252],{"__ignoreMap":32},[167,42581,42582,42584],{"class":169,"line":170},[167,42583,732],{"class":731},[167,42585,32404],{"class":512},[167,42587,42588,42590,42592,42594],{"class":169,"line":191},[167,42589,732],{"class":731},[167,42591,33420],{"class":512},[167,42593,33388],{"class":731},[167,42595,33425],{"class":512},[167,42597,42598,42600,42602,42604],{"class":169,"line":205},[167,42599,32745],{"class":731},[167,42601,33403],{"class":512},[167,42603,732],{"class":731},[167,42605,33408],{"class":512},[167,42607,42608],{"class":169,"line":219},[167,42609,35924],{"class":2268},[167,42611,42612,42614,42616,42618],{"class":169,"line":230},[167,42613,32745],{"class":731},[167,42615,33373],{"class":512},[167,42617,732],{"class":731},[167,42619,33378],{"class":512},[167,42621,42622,42624,42626,42628],{"class":169,"line":241},[167,42623,32745],{"class":731},[167,42625,33919],{"class":512},[167,42627,732],{"class":731},[167,42629,42630],{"class":184}," VGG16\n",[167,42632,42633],{"class":169,"line":261},[167,42634,741],{"emptyLinePlaceholder":740},[167,42636,42637],{"class":169,"line":773},[167,42638,741],{"emptyLinePlaceholder":740},[167,42640,42641],{"class":169,"line":779},[167,42642,35953],{"class":2268},[167,42644,42645,42647,42649],{"class":169,"line":785},[167,42646,845],{"class":731},[167,42648,35960],{"class":173},[167,42650,33957],{"class":512},[167,42652,42653,42655,42657,42659,42661,42663,42665],{"class":169,"line":790},[167,42654,35967],{"class":512},[167,42656,523],{"class":731},[167,42658,33460],{"class":512},[167,42660,33463],{"class":7246},[167,42662,523],{"class":731},[167,42664,33468],{"class":177},[167,42666,33471],{"class":512},[167,42668,42669,42671,42673,42675],{"class":169,"line":796},[167,42670,35984],{"class":7246},[167,42672,523],{"class":731},[167,42674,35989],{"class":184},[167,42676,33471],{"class":512},[167,42678,42679,42681,42683,42685,42687,42689,42691],{"class":169,"line":802},[167,42680,35996],{"class":7246},[167,42682,523],{"class":731},[167,42684,33498],{"class":512},[167,42686,33501],{"class":7246},[167,42688,523],{"class":731},[167,42690,33506],{"class":184},[167,42692,33509],{"class":512},[167,42694,42695,42697,42699,42701],{"class":169,"line":808},[167,42696,36013],{"class":7246},[167,42698,523],{"class":731},[167,42700,33481],{"class":184},[167,42702,873],{"class":512},[167,42704,42705,42707,42709,42711,42713,42715],{"class":169,"line":814},[167,42706,36024],{"class":512},[167,42708,523],{"class":731},[167,42710,33539],{"class":512},[167,42712,33542],{"class":7246},[167,42714,523],{"class":731},[167,42716,36035],{"class":512},[167,42718,42719],{"class":169,"line":820},[167,42720,36040],{"class":2268},[167,42722,42723,42725,42727,42729],{"class":169,"line":826},[167,42724,36045],{"class":7246},[167,42726,523],{"class":731},[167,42728,2418],{"class":184},[167,42730,33471],{"class":512},[167,42732,42733,42735,42737,42739],{"class":169,"line":832},[167,42734,36056],{"class":7246},[167,42736,523],{"class":731},[167,42738,33481],{"class":184},[167,42740,33471],{"class":512},[167,42742,42743,42745,42747,42749],{"class":169,"line":837},[167,42744,36067],{"class":7246},[167,42746,523],{"class":731},[167,42748,1154],{"class":184},[167,42750,873],{"class":512},[167,42752,42753,42755],{"class":169,"line":842},[167,42754,6122],{"class":731},[167,42756,36080],{"class":512},[167,42758,42759],{"class":169,"line":860},[167,42760,741],{"emptyLinePlaceholder":740},[167,42762,42763],{"class":169,"line":876},[167,42764,36089],{"class":2268},[167,42766,42767,42769,42771],{"class":169,"line":887},[167,42768,845],{"class":731},[167,42770,36096],{"class":173},[167,42772,36099],{"class":512},[167,42774,42775],{"class":169,"line":892},[167,42776,36104],{"class":2268},[167,42778,42779,42781,42783,42785,42787,42789,42791],{"class":169,"line":907},[167,42780,33243],{"class":512},[167,42782,523],{"class":731},[167,42784,33250],{"class":177},[167,42786,3758],{"class":731},[167,42788,33255],{"class":512},[167,42790,3755],{"class":731},[167,42792,36121],{"class":177},[167,42794,42795,42797,42799],{"class":169,"line":920},[167,42796,33295],{"class":512},[167,42798,523],{"class":731},[167,42800,34293],{"class":512},[167,42802,42803],{"class":169,"line":933},[167,42804,741],{"emptyLinePlaceholder":740},[167,42806,42807],{"class":169,"line":946},[167,42808,36138],{"class":2268},[167,42810,42811,42813,42815],{"class":169,"line":959},[167,42812,36143],{"class":512},[167,42814,523],{"class":731},[167,42816,34346],{"class":184},[167,42818,42819,42821,42823],{"class":169,"line":964},[167,42820,36152],{"class":512},[167,42822,523],{"class":731},[167,42824,5120],{"class":184},[167,42826,42827],{"class":169,"line":987},[167,42828,741],{"emptyLinePlaceholder":740},[167,42830,42831],{"class":169,"line":993},[167,42832,36165],{"class":2268},[167,42834,42835],{"class":169,"line":998},[167,42836,36170],{"class":2268},[167,42838,42839],{"class":169,"line":1010},[167,42840,36175],{"class":2268},[167,42842,42843,42845],{"class":169,"line":1022},[167,42844,36180],{"class":731},[167,42846,34887],{"class":512},[167,42848,42849],{"class":169,"line":1027},[167,42850,36187],{"class":2268},[167,42852,42853,42855,42857,42859],{"class":169,"line":1032},[167,42854,5437],{"class":731},[167,42856,36194],{"class":512},[167,42858,973],{"class":731},[167,42860,36199],{"class":512},[167,42862,42863,42865,42867],{"class":169,"line":1049},[167,42864,36204],{"class":512},[167,42866,523],{"class":731},[167,42868,36209],{"class":512},[167,42870,42871,42873,42875],{"class":169,"line":10005},[167,42872,36214],{"class":512},[167,42874,523],{"class":731},[167,42876,36219],{"class":512},[167,42878,42879],{"class":169,"line":10011},[167,42880,36224],{"class":2268},[167,42882,42883],{"class":169,"line":10038},[167,42884,34878],{"class":512},[167,42886,42887],{"class":169,"line":10043},[167,42888,36233],{"class":2268},[167,42890,42891,42893,42895],{"class":169,"line":10049},[167,42892,34663],{"class":512},[167,42894,523],{"class":731},[167,42896,36242],{"class":512},[167,42898,42899],{"class":169,"line":10061},[167,42900,36247],{"class":2268},[167,42902,42903,42905,42907,42909,42911,42913,42915],{"class":169,"line":10073},[167,42904,34680],{"class":512},[167,42906,523],{"class":731},[167,42908,34685],{"class":512},[167,42910,34688],{"class":7246},[167,42912,523],{"class":731},[167,42914,2418],{"class":184},[167,42916,873],{"class":512},[167,42918,42919],{"class":169,"line":10085},[167,42920,36268],{"class":2268},[167,42922,42923],{"class":169,"line":11744},[167,42924,36273],{"class":2268},[167,42926,42927],{"class":169,"line":11769},[167,42928,36278],{"class":2268},[167,42930,42931,42933,42935,42937,42939],{"class":169,"line":11792},[167,42932,36283],{"class":512},[167,42934,11505],{"class":731},[167,42936,34790],{"class":512},[167,42938,4985],{"class":731},[167,42940,36292],{"class":512},[167,42942,42943],{"class":169,"line":11816},[167,42944,36297],{"class":2268},[167,42946,42947,42949,42951,42953,42955],{"class":169,"line":11821},[167,42948,36302],{"class":512},[167,42950,11505],{"class":731},[167,42952,36307],{"class":512},[167,42954,1154],{"class":184},[167,42956,873],{"class":512},[167,42958,42959],{"class":169,"line":11826},[167,42960,741],{"emptyLinePlaceholder":740},[167,42962,42963],{"class":169,"line":11831},[167,42964,36320],{"class":2268},[167,42966,42967,42969,42971,42973,42975],{"class":169,"line":11840},[167,42968,36325],{"class":512},[167,42970,523],{"class":731},[167,42972,36330],{"class":512},[167,42974,2784],{"class":731},[167,42976,36335],{"class":512},[167,42978,42979],{"class":169,"line":11845},[167,42980,36340],{"class":2268},[167,42982,42983,42985,42987,42989],{"class":169,"line":11851},[167,42984,34454],{"class":184},[167,42986,898],{"class":512},[167,42988,36349],{"class":177},[167,42990,36352],{"class":512},[167,42992,42993],{"class":169,"line":11872},[167,42994,741],{"emptyLinePlaceholder":740},[167,42996,42997],{"class":169,"line":11878},[167,42998,36361],{"class":2268},[167,43000,43001,43003,43005,43007,43009],{"class":169,"line":11892},[167,43002,1035],{"class":731},[167,43004,1038],{"class":184},[167,43006,4985],{"class":731},[167,43008,33231],{"class":177},[167,43010,857],{"class":512},[167,43012,43013],{"class":169,"line":11898},[167,43014,36378],{"class":2268},[167,43016,43017,43019,43021],{"class":169,"line":11925},[167,43018,33295],{"class":512},[167,43020,523],{"class":731},[167,43022,43023],{"class":512},"VGG16()\n",[167,43025,43026],{"class":169,"line":11934},[167,43027,36391],{"class":2268},[167,43029,43030],{"class":169,"line":11940},[167,43031,36396],{"class":2268},[167,43033,43034,43036,43038],{"class":169,"line":11948},[167,43035,36401],{"class":512},[167,43037,36404],{"class":177},[167,43039,32505],{"class":512},[167,43041,43042],{"class":169,"line":11953},[167,43043,36411],{"class":2268},[167,43045,43046,43048,43050],{"class":169,"line":18630},[167,43047,36024],{"class":512},[167,43049,523],{"class":731},[167,43051,36420],{"class":512},[167,43053,43054],{"class":169,"line":18636},[167,43055,36425],{"class":2268},[167,43057,43058],{"class":169,"line":18659},[167,43059,36430],{"class":512},[167,43061,43062],{"class":169,"line":18665},[167,43063,741],{"emptyLinePlaceholder":740},[167,43065,43066],{"class":169,"line":18688},[167,43067,36439],{"class":2268},[167,43069,43070],{"class":169,"line":18702},[167,43071,36444],{"class":2268},[167,43073,43074,43076,43078,43080,43082,43084,43086],{"class":169,"line":18722},[167,43075,33243],{"class":512},[167,43077,523],{"class":731},[167,43079,33250],{"class":177},[167,43081,3758],{"class":731},[167,43083,33255],{"class":512},[167,43085,3755],{"class":731},[167,43087,36121],{"class":177},[167,43089,43090,43092,43094],{"class":169,"line":18728},[167,43091,33295],{"class":512},[167,43093,523],{"class":731},[167,43095,34293],{"class":512},[167,43097,43098],{"class":169,"line":18739},[167,43099,36473],{"class":2268},[167,43101,43102],{"class":169,"line":18762},[167,43103,36478],{"class":2268},[167,43105,43106,43108,43110,43112,43114,43116,43118,43120,43122,43124,43126,43128,43130,43132,43134,43136,43138,43140,43142,43144,43146,43148,43150],{"class":169,"line":18784},[167,43107,36483],{"class":512},[167,43109,523],{"class":731},[167,43111,3090],{"class":512},[167,43113,36490],{"class":177},[167,43115,2578],{"class":512},[167,43117,36495],{"class":177},[167,43119,2578],{"class":512},[167,43121,36500],{"class":177},[167,43123,2578],{"class":512},[167,43125,36505],{"class":177},[167,43127,2578],{"class":512},[167,43129,36510],{"class":177},[167,43131,2578],{"class":512},[167,43133,36515],{"class":177},[167,43135,2578],{"class":512},[167,43137,36520],{"class":177},[167,43139,2578],{"class":512},[167,43141,36525],{"class":177},[167,43143,2578],{"class":512},[167,43145,36530],{"class":177},[167,43147,2578],{"class":512},[167,43149,36535],{"class":177},[167,43151,35249],{"class":512},[167,43153,43154,43156],{"class":169,"line":18789},[167,43155,36180],{"class":731},[167,43157,34887],{"class":512},[167,43159,43160],{"class":169,"line":18795},[167,43161,36548],{"class":2268},[167,43163,43164,43166,43168,43170],{"class":169,"line":18809},[167,43165,5437],{"class":731},[167,43167,36555],{"class":512},[167,43169,973],{"class":731},[167,43171,36199],{"class":512},[167,43173,43174,43176,43178],{"class":169,"line":18822},[167,43175,34613],{"class":512},[167,43177,523],{"class":731},[167,43179,34618],{"class":512},[167,43181,43182,43184,43186],{"class":169,"line":18827},[167,43183,34628],{"class":512},[167,43185,523],{"class":731},[167,43187,34633],{"class":512},[167,43189,43190],{"class":169,"line":18841},[167,43191,741],{"emptyLinePlaceholder":740},[167,43193,43194],{"class":169,"line":18846},[167,43195,36584],{"class":2268},[167,43197,43198],{"class":169,"line":18852},[167,43199,34878],{"class":512},[167,43201,43202],{"class":169,"line":18857},[167,43203,36593],{"class":2268},[167,43205,43206,43208,43210],{"class":169,"line":18871},[167,43207,34663],{"class":512},[167,43209,523],{"class":731},[167,43211,34668],{"class":512},[167,43213,43214],{"class":169,"line":18876},[167,43215,36606],{"class":2268},[167,43217,43218,43220,43222,43224,43226,43228,43230],{"class":169,"line":18881},[167,43219,34680],{"class":512},[167,43221,523],{"class":731},[167,43223,34685],{"class":512},[167,43225,34688],{"class":7246},[167,43227,523],{"class":731},[167,43229,2418],{"class":184},[167,43231,873],{"class":512},[167,43233,43234],{"class":169,"line":18895},[167,43235,36627],{"class":2268},[167,43237,43238,43240,43242],{"class":169,"line":18907},[167,43239,36632],{"class":512},[167,43241,523],{"class":731},[167,43243,36637],{"class":512},[167,43245,43246,43248,43250],{"class":169,"line":18912},[167,43247,36642],{"class":512},[167,43249,523],{"class":731},[167,43251,36647],{"class":512},[167,43253,43254,43256,43258,43260,43262,43264,43266,43268],{"class":169,"line":18925},[167,43255,36652],{"class":184},[167,43257,898],{"class":512},[167,43259,36657],{"class":177},[167,43261,36660],{"class":512},[167,43263,36663],{"class":177},[167,43265,2578],{"class":512},[167,43267,36668],{"class":177},[167,43269,36671],{"class":512},[494,43271,43273],{"id":43272},"_23googlenet","2.3.GoogLeNet",[24024,43275,43277],{"id":43276},"_231原理","2.3.1.原理",[40,43279,43280],{},[43,43281,43282],{},"网络结构",[19,43284,43285],{},[3528,43286],{"alt":32,"src":43287},"\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,43289,43290],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43292,43293],{},[3528,43294],{"alt":32,"src":43295},"\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,43297,43298],{},[3528,43299],{"alt":32,"src":43300},"\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,43302,43303],{},[3528,43304],{"alt":32,"src":43305},"\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",[40,43307,43308],{"start":191},[43,43309,43310],{},"1x1卷积的优点",[19,43312,43313],{},[3528,43314],{"alt":32,"src":43315},"\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",[40,43317,43318],{"start":205},[43,43319,43320],{},"全局平均池化层优点",[19,43322,43323],{},[3528,43324],{"alt":32,"src":43325},"\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,43327,43328],{},[3528,43329],{"alt":32,"src":43330},"\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",[40,43332,43333],{"start":219},[43,43334,43335],{},"参数详细描述",[19,43337,43338],{},[3528,43339],{"alt":32,"src":43340},"\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,43342,43343],{},[3528,43344],{"alt":32,"src":43345},"\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,43347,43348],{},[3528,43349],{"alt":32,"src":43350},"\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,43352,43353],{},[3528,43354],{"alt":32,"src":43355},"\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,43357,43358],{},[3528,43359],{"alt":32,"src":43360},"\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,43362,43363],{},[3528,43364],{"alt":32,"src":43365},"\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,43367,43368],{},[3528,43369],{"alt":32,"src":43370},"\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,43372,43373],{},[3528,43374],{"alt":32,"src":43375},"\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,43377,43378],{},[3528,43379],{"alt":32,"src":43380},"\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,43382,43383],{},[3528,43384],{"alt":32,"src":43385},"\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,43387,43388],{},[3528,43389],{"alt":32,"src":43390},"\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,43392,43393],{},[3528,43394],{"alt":32,"src":43395},"\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,43397,43398],{},[3528,43399],{"alt":32,"src":43400},"\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,43402,43403],{},[3528,43404],{"alt":32,"src":43405},"\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,43407,43408],{},[3528,43409],{"alt":32,"src":43410},"\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,43412,43413],{},[3528,43414],{"alt":32,"src":43415},"\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,43417,43418],{},[3528,43419],{"alt":32,"src":43420},"\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,43422,43423],{},[3528,43424],{"alt":32,"src":43425},"\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,43427,43428],{},[3528,43429],{"alt":32,"src":43430},"\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,43432,43433],{},[3528,43434],{"alt":32,"src":43435},"\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,43437,43438],{},[3528,43439],{"alt":32,"src":43440},"\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",[24024,43442,43444],{"id":43443},"_232代码实现","2.3.2.代码实现",[40,43446,43447],{},[43,43448,32719],{},[19,43450,43451],{},"根据原理一步一步搭建即可",[26,43453,43455],{"className":723,"code":43454,"language":305,"meta":32,"style":32},"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",[34,43456,43457,43463,43473,43483,43487,43504,43513,43528,43538,43543,43576,43581,43618,43665,43670,43706,43753,43758,43763,43798,43830,43834,43842,43858,43882,43907,43928,43933,43948,43952,43956,43961,43978,43983,43992,44007,44018,44062,44066,44094,44098,44109,44137,44141,44178,44182,44210,44214,44225,44261,44293,44321,44325,44336,44370,44402,44434,44467,44501,44529,44533,44544,44577,44609,44623,44627,44640,44644,44649,44661,44669,44691,44696,44701,44706,44711,44716,44721,44735,44743,44752,44765,44780,44789,44793,44801,44812,44823,44834,44845,44856,44862,44866,44871,44883,44903,44912],{"__ignoreMap":32},[167,43458,43459,43461],{"class":169,"line":170},[167,43460,732],{"class":731},[167,43462,32404],{"class":512},[167,43464,43465,43467,43469,43471],{"class":169,"line":191},[167,43466,32745],{"class":731},[167,43468,32748],{"class":512},[167,43470,732],{"class":731},[167,43472,32753],{"class":512},[167,43474,43475,43477,43479,43481],{"class":169,"line":205},[167,43476,32745],{"class":731},[167,43478,32765],{"class":512},[167,43480,732],{"class":731},[167,43482,32770],{"class":512},[167,43484,43485],{"class":169,"line":219},[167,43486,741],{"emptyLinePlaceholder":740},[167,43488,43489,43491,43494,43496,43498,43500,43502],{"class":169,"line":230},[167,43490,16721],{"class":731},[167,43492,43493],{"class":173}," Inception",[167,43495,898],{"class":512},[167,43497,32786],{"class":173},[167,43499,2758],{"class":512},[167,43501,32791],{"class":173},[167,43503,984],{"class":512},[167,43505,43506,43508,43510],{"class":169,"line":241},[167,43507,32808],{"class":731},[167,43509,32811],{"class":184},[167,43511,43512],{"class":512},"(self,in_channels,c1,c2,c3,c4):\n",[167,43514,43515,43517,43520,43522,43524,43526],{"class":169,"line":261},[167,43516,32824],{"class":184},[167,43518,43519],{"class":512},"(Inception,",[167,43521,32830],{"class":184},[167,43523,32833],{"class":512},[167,43525,32836],{"class":184},[167,43527,4020],{"class":512},[167,43529,43530,43532,43534,43536],{"class":169,"line":773},[167,43531,32852],{"class":184},[167,43533,36773],{"class":512},[167,43535,523],{"class":731},[167,43537,36778],{"class":512},[167,43539,43540],{"class":169,"line":779},[167,43541,43542],{"class":2268},"        # 路线1：定义1*1卷积\n",[167,43544,43545,43547,43550,43552,43554,43556,43558,43561,43563,43565,43568,43570,43572,43574],{"class":169,"line":785},[167,43546,32852],{"class":184},[167,43548,43549],{"class":512},".p1_1",[167,43551,523],{"class":731},[167,43553,32860],{"class":512},[167,43555,32863],{"class":7246},[167,43557,523],{"class":731},[167,43559,43560],{"class":512},"in_channels,",[167,43562,32872],{"class":7246},[167,43564,523],{"class":731},[167,43566,43567],{"class":512},"c1,",[167,43569,32881],{"class":7246},[167,43571,523],{"class":731},[167,43573,2418],{"class":184},[167,43575,873],{"class":512},[167,43577,43578],{"class":169,"line":790},[167,43579,43580],{"class":2268},"        # 路线2：定义1*1卷积和3*3\n",[167,43582,43583,43585,43588,43590,43592,43594,43596,43598,43600,43602,43605,43607,43610,43612,43614,43616],{"class":169,"line":796},[167,43584,32852],{"class":184},[167,43586,43587],{"class":512},".p2_1",[167,43589,523],{"class":731},[167,43591,32860],{"class":512},[167,43593,32863],{"class":7246},[167,43595,523],{"class":731},[167,43597,43560],{"class":512},[167,43599,32872],{"class":7246},[167,43601,523],{"class":731},[167,43603,43604],{"class":512},"c2[",[167,43606,1154],{"class":184},[167,43608,43609],{"class":512},"],",[167,43611,32881],{"class":7246},[167,43613,523],{"class":731},[167,43615,2418],{"class":184},[167,43617,873],{"class":512},[167,43619,43620,43622,43625,43627,43629,43631,43633,43635,43637,43639,43641,43643,43645,43647,43649,43651,43653,43655,43657,43659,43661,43663],{"class":169,"line":802},[167,43621,32852],{"class":184},[167,43623,43624],{"class":512},".p2_2",[167,43626,523],{"class":731},[167,43628,32860],{"class":512},[167,43630,32863],{"class":7246},[167,43632,523],{"class":731},[167,43634,43604],{"class":512},[167,43636,1154],{"class":184},[167,43638,43609],{"class":512},[167,43640,32872],{"class":7246},[167,43642,523],{"class":731},[167,43644,43604],{"class":512},[167,43646,2418],{"class":184},[167,43648,43609],{"class":512},[167,43650,32881],{"class":7246},[167,43652,523],{"class":731},[167,43654,2281],{"class":184},[167,43656,2578],{"class":512},[167,43658,32890],{"class":7246},[167,43660,523],{"class":731},[167,43662,2418],{"class":184},[167,43664,873],{"class":512},[167,43666,43667],{"class":169,"line":808},[167,43668,43669],{"class":2268},"        # 路线3：定义1*1卷积和5*5\n",[167,43671,43672,43674,43677,43679,43681,43683,43685,43687,43689,43691,43694,43696,43698,43700,43702,43704],{"class":169,"line":814},[167,43673,32852],{"class":184},[167,43675,43676],{"class":512},".p3_1",[167,43678,523],{"class":731},[167,43680,32860],{"class":512},[167,43682,32863],{"class":7246},[167,43684,523],{"class":731},[167,43686,43560],{"class":512},[167,43688,32872],{"class":7246},[167,43690,523],{"class":731},[167,43692,43693],{"class":512},"c3[",[167,43695,1154],{"class":184},[167,43697,43609],{"class":512},[167,43699,32881],{"class":7246},[167,43701,523],{"class":731},[167,43703,2418],{"class":184},[167,43705,873],{"class":512},[167,43707,43708,43710,43713,43715,43717,43719,43721,43723,43725,43727,43729,43731,43733,43735,43737,43739,43741,43743,43745,43747,43749,43751],{"class":169,"line":820},[167,43709,32852],{"class":184},[167,43711,43712],{"class":512},".p3_2",[167,43714,523],{"class":731},[167,43716,32860],{"class":512},[167,43718,32863],{"class":7246},[167,43720,523],{"class":731},[167,43722,43693],{"class":512},[167,43724,1154],{"class":184},[167,43726,43609],{"class":512},[167,43728,32872],{"class":7246},[167,43730,523],{"class":731},[167,43732,43693],{"class":512},[167,43734,2418],{"class":184},[167,43736,43609],{"class":512},[167,43738,32881],{"class":7246},[167,43740,523],{"class":731},[167,43742,2519],{"class":184},[167,43744,2578],{"class":512},[167,43746,32890],{"class":7246},[167,43748,523],{"class":731},[167,43750,2287],{"class":184},[167,43752,873],{"class":512},[167,43754,43755],{"class":169,"line":826},[167,43756,43757],{"class":2268},"        # 路线4：定义3*3最大池化和1*1卷积\n",[167,43759,43760],{"class":169,"line":832},[167,43761,43762],{"class":2268},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[167,43764,43765,43767,43770,43772,43774,43776,43778,43780,43782,43784,43786,43788,43790,43792,43794,43796],{"class":169,"line":837},[167,43766,32852],{"class":184},[167,43768,43769],{"class":512},".p4_1",[167,43771,523],{"class":731},[167,43773,36831],{"class":512},[167,43775,32881],{"class":7246},[167,43777,523],{"class":731},[167,43779,2281],{"class":184},[167,43781,2578],{"class":512},[167,43783,32936],{"class":7246},[167,43785,523],{"class":731},[167,43787,2418],{"class":184},[167,43789,2578],{"class":512},[167,43791,32890],{"class":7246},[167,43793,523],{"class":731},[167,43795,2418],{"class":184},[167,43797,873],{"class":512},[167,43799,43800,43802,43805,43807,43809,43811,43813,43815,43817,43819,43822,43824,43826,43828],{"class":169,"line":842},[167,43801,32852],{"class":184},[167,43803,43804],{"class":512},".p4_2",[167,43806,523],{"class":731},[167,43808,32860],{"class":512},[167,43810,32863],{"class":7246},[167,43812,523],{"class":731},[167,43814,43560],{"class":512},[167,43816,32872],{"class":7246},[167,43818,523],{"class":731},[167,43820,43821],{"class":512},"c4,",[167,43823,32881],{"class":7246},[167,43825,523],{"class":731},[167,43827,2418],{"class":184},[167,43829,873],{"class":512},[167,43831,43832],{"class":169,"line":860},[167,43833,741],{"emptyLinePlaceholder":740},[167,43835,43836,43838,43840],{"class":169,"line":876},[167,43837,32808],{"class":731},[167,43839,33100],{"class":173},[167,43841,33103],{"class":512},[167,43843,43844,43847,43849,43851,43853,43855],{"class":169,"line":887},[167,43845,43846],{"class":512},"        p1",[167,43848,523],{"class":731},[167,43850,32830],{"class":184},[167,43852,37186],{"class":512},[167,43854,32830],{"class":184},[167,43856,43857],{"class":512},".p1_1(x))\n",[167,43859,43860,43862,43864,43866,43868,43870,43873,43875,43877,43879],{"class":169,"line":892},[167,43861,9115],{"class":512},[167,43863,523],{"class":731},[167,43865,32830],{"class":184},[167,43867,37186],{"class":512},[167,43869,32830],{"class":184},[167,43871,43872],{"class":512},".p2_2(",[167,43874,32830],{"class":184},[167,43876,37186],{"class":512},[167,43878,32830],{"class":184},[167,43880,43881],{"class":512},".p2_1(x))))\n",[167,43883,43884,43887,43889,43891,43893,43895,43898,43900,43902,43904],{"class":169,"line":907},[167,43885,43886],{"class":512},"        p3",[167,43888,523],{"class":731},[167,43890,32830],{"class":184},[167,43892,37186],{"class":512},[167,43894,32830],{"class":184},[167,43896,43897],{"class":512},".p3_2(",[167,43899,32830],{"class":184},[167,43901,37186],{"class":512},[167,43903,32830],{"class":184},[167,43905,43906],{"class":512},".p3_1(x))))\n",[167,43908,43909,43912,43914,43916,43918,43920,43923,43925],{"class":169,"line":920},[167,43910,43911],{"class":512},"        p4",[167,43913,523],{"class":731},[167,43915,32830],{"class":184},[167,43917,37186],{"class":512},[167,43919,32830],{"class":184},[167,43921,43922],{"class":512},".p4_2(",[167,43924,32830],{"class":184},[167,43926,43927],{"class":512},".p4_1(x)))\n",[167,43929,43930],{"class":169,"line":933},[167,43931,43932],{"class":2268},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[167,43934,43935,43937,43940,43942,43944,43946],{"class":169,"line":946},[167,43936,16779],{"class":731},[167,43938,43939],{"class":512}," torch.cat((p1,p2,p3,p4),",[167,43941,34688],{"class":7246},[167,43943,523],{"class":731},[167,43945,2418],{"class":184},[167,43947,873],{"class":512},[167,43949,43950],{"class":169,"line":959},[167,43951,741],{"emptyLinePlaceholder":740},[167,43953,43954],{"class":169,"line":964},[167,43955,741],{"emptyLinePlaceholder":740},[167,43957,43958],{"class":169,"line":987},[167,43959,43960],{"class":2268},"# 搭建GoogLeNet网络\n",[167,43962,43963,43965,43968,43970,43972,43974,43976],{"class":169,"line":993},[167,43964,16721],{"class":731},[167,43966,43967],{"class":173}," GoogLeNet",[167,43969,898],{"class":512},[167,43971,32786],{"class":173},[167,43973,2758],{"class":512},[167,43975,32791],{"class":173},[167,43977,984],{"class":512},[167,43979,43980],{"class":169,"line":998},[167,43981,43982],{"class":2268},"    # 必须把Inception导入到里边\n",[167,43984,43985,43987,43989],{"class":169,"line":1010},[167,43986,32808],{"class":731},[167,43988,32811],{"class":184},[167,43990,43991],{"class":512},"(self,Inception):\n",[167,43993,43994,43996,43999,44001,44003,44005],{"class":169,"line":1022},[167,43995,32824],{"class":184},[167,43997,43998],{"class":512},"(GoogLeNet,",[167,44000,32830],{"class":184},[167,44002,32833],{"class":512},[167,44004,32836],{"class":184},[167,44006,4020],{"class":512},[167,44008,44009,44011,44014,44016],{"class":169,"line":1027},[167,44010,32852],{"class":184},[167,44012,44013],{"class":512},".b1",[167,44015,523],{"class":731},[167,44017,40010],{"class":512},[167,44019,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038,44040,44042,44044,44046,44048,44050,44052,44054,44056,44058,44060],{"class":169,"line":1032},[167,44021,40015],{"class":512},[167,44023,32863],{"class":7246},[167,44025,523],{"class":731},[167,44027,2418],{"class":184},[167,44029,2578],{"class":512},[167,44031,32872],{"class":7246},[167,44033,523],{"class":731},[167,44035,2405],{"class":184},[167,44037,2578],{"class":512},[167,44039,32881],{"class":7246},[167,44041,523],{"class":731},[167,44043,2569],{"class":184},[167,44045,2578],{"class":512},[167,44047,32936],{"class":7246},[167,44049,523],{"class":731},[167,44051,2287],{"class":184},[167,44053,2578],{"class":512},[167,44055,32890],{"class":7246},[167,44057,523],{"class":731},[167,44059,2281],{"class":184},[167,44061,40048],{"class":512},[167,44063,44064],{"class":169,"line":1049},[167,44065,40053],{"class":512},[167,44067,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086,44088,44090,44092],{"class":169,"line":10005},[167,44069,40098],{"class":512},[167,44071,32881],{"class":7246},[167,44073,523],{"class":731},[167,44075,2281],{"class":184},[167,44077,2578],{"class":512},[167,44079,32936],{"class":7246},[167,44081,523],{"class":731},[167,44083,2287],{"class":184},[167,44085,2578],{"class":512},[167,44087,32890],{"class":7246},[167,44089,523],{"class":731},[167,44091,2418],{"class":184},[167,44093,873],{"class":512},[167,44095,44096],{"class":169,"line":10011},[167,44097,40127],{"class":512},[167,44099,44100,44102,44105,44107],{"class":169,"line":10038},[167,44101,32852],{"class":184},[167,44103,44104],{"class":512},".b2",[167,44106,523],{"class":731},[167,44108,40010],{"class":512},[167,44110,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135],{"class":169,"line":10043},[167,44112,40015],{"class":512},[167,44114,32863],{"class":7246},[167,44116,523],{"class":731},[167,44118,2405],{"class":184},[167,44120,2578],{"class":512},[167,44122,32872],{"class":7246},[167,44124,523],{"class":731},[167,44126,2405],{"class":184},[167,44128,2578],{"class":512},[167,44130,32881],{"class":7246},[167,44132,523],{"class":731},[167,44134,2418],{"class":184},[167,44136,40048],{"class":512},[167,44138,44139],{"class":169,"line":10049},[167,44140,40053],{"class":512},[167,44142,44143,44145,44147,44149,44151,44153,44155,44157,44160,44162,44164,44166,44168,44170,44172,44174,44176],{"class":169,"line":10061},[167,44144,40015],{"class":512},[167,44146,32863],{"class":7246},[167,44148,523],{"class":731},[167,44150,2405],{"class":184},[167,44152,2578],{"class":512},[167,44154,32872],{"class":7246},[167,44156,523],{"class":731},[167,44158,44159],{"class":184},"192",[167,44161,2578],{"class":512},[167,44163,32881],{"class":7246},[167,44165,523],{"class":731},[167,44167,2281],{"class":184},[167,44169,2578],{"class":512},[167,44171,32890],{"class":7246},[167,44173,523],{"class":731},[167,44175,2418],{"class":184},[167,44177,40048],{"class":512},[167,44179,44180],{"class":169,"line":10073},[167,44181,40053],{"class":512},[167,44183,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208],{"class":169,"line":10085},[167,44185,40098],{"class":512},[167,44187,32881],{"class":7246},[167,44189,523],{"class":731},[167,44191,2281],{"class":184},[167,44193,2578],{"class":512},[167,44195,32936],{"class":7246},[167,44197,523],{"class":731},[167,44199,2287],{"class":184},[167,44201,2578],{"class":512},[167,44203,32890],{"class":7246},[167,44205,523],{"class":731},[167,44207,2418],{"class":184},[167,44209,873],{"class":512},[167,44211,44212],{"class":169,"line":11744},[167,44213,40127],{"class":512},[167,44215,44216,44218,44221,44223],{"class":169,"line":11769},[167,44217,32852],{"class":184},[167,44219,44220],{"class":512},".b3",[167,44222,523],{"class":731},[167,44224,40010],{"class":512},[167,44226,44227,44230,44232,44234,44236,44239,44241,44243,44245,44248,44250,44252,44254,44257,44259],{"class":169,"line":11792},[167,44228,44229],{"class":512},"            Inception(",[167,44231,44159],{"class":184},[167,44233,2578],{"class":512},[167,44235,2405],{"class":184},[167,44237,44238],{"class":512},",(",[167,44240,2411],{"class":184},[167,44242,2578],{"class":512},[167,44244,34074],{"class":184},[167,44246,44247],{"class":512},"),(",[167,44249,2801],{"class":184},[167,44251,2578],{"class":512},[167,44253,2399],{"class":184},[167,44255,44256],{"class":512},"),",[167,44258,2399],{"class":184},[167,44260,40048],{"class":512},[167,44262,44263,44265,44267,44269,44271,44273,44275,44277,44279,44281,44283,44285,44287,44289,44291],{"class":169,"line":11816},[167,44264,44229],{"class":512},[167,44266,36872],{"class":184},[167,44268,2578],{"class":512},[167,44270,34074],{"class":184},[167,44272,44238],{"class":512},[167,44274,34074],{"class":184},[167,44276,2578],{"class":512},[167,44278,44159],{"class":184},[167,44280,44247],{"class":512},[167,44282,2399],{"class":184},[167,44284,2578],{"class":512},[167,44286,2411],{"class":184},[167,44288,44256],{"class":512},[167,44290,2405],{"class":184},[167,44292,40048],{"class":512},[167,44294,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313,44315,44317,44319],{"class":169,"line":11821},[167,44296,40098],{"class":512},[167,44298,32881],{"class":7246},[167,44300,523],{"class":731},[167,44302,2281],{"class":184},[167,44304,2578],{"class":512},[167,44306,32936],{"class":7246},[167,44308,523],{"class":731},[167,44310,2287],{"class":184},[167,44312,2578],{"class":512},[167,44314,32890],{"class":7246},[167,44316,523],{"class":731},[167,44318,2418],{"class":184},[167,44320,873],{"class":512},[167,44322,44323],{"class":169,"line":11826},[167,44324,40127],{"class":512},[167,44326,44327,44329,44332,44334],{"class":169,"line":11831},[167,44328,32852],{"class":184},[167,44330,44331],{"class":512},".b4",[167,44333,523],{"class":731},[167,44335,40010],{"class":512},[167,44337,44338,44340,44343,44345,44347,44349,44351,44353,44356,44358,44360,44362,44364,44366,44368],{"class":169,"line":11840},[167,44339,44229],{"class":512},[167,44341,44342],{"class":184},"480",[167,44344,2578],{"class":512},[167,44346,44159],{"class":184},[167,44348,44238],{"class":512},[167,44350,2411],{"class":184},[167,44352,2578],{"class":512},[167,44354,44355],{"class":184},"208",[167,44357,44247],{"class":512},[167,44359,2801],{"class":184},[167,44361,2578],{"class":512},[167,44363,2807],{"class":184},[167,44365,44256],{"class":512},[167,44367,2405],{"class":184},[167,44369,40048],{"class":512},[167,44371,44372,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394,44396,44398,44400],{"class":169,"line":11845},[167,44373,44229],{"class":512},[167,44375,40458],{"class":184},[167,44377,2578],{"class":512},[167,44379,23074],{"class":184},[167,44381,44238],{"class":512},[167,44383,2818],{"class":184},[167,44385,2578],{"class":512},[167,44387,33506],{"class":184},[167,44389,44247],{"class":512},[167,44391,3000],{"class":184},[167,44393,2578],{"class":512},[167,44395,2405],{"class":184},[167,44397,44256],{"class":512},[167,44399,2405],{"class":184},[167,44401,40048],{"class":512},[167,44403,44404,44406,44408,44410,44412,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432],{"class":169,"line":11851},[167,44405,44229],{"class":512},[167,44407,40458],{"class":184},[167,44409,2578],{"class":512},[167,44411,34074],{"class":184},[167,44413,44238],{"class":512},[167,44415,34074],{"class":184},[167,44417,2578],{"class":512},[167,44419,36872],{"class":184},[167,44421,44247],{"class":512},[167,44423,3000],{"class":184},[167,44425,2578],{"class":512},[167,44427,2405],{"class":184},[167,44429,44256],{"class":512},[167,44431,2405],{"class":184},[167,44433,40048],{"class":512},[167,44435,44436,44438,44440,44442,44444,44446,44448,44450,44453,44455,44457,44459,44461,44463,44465],{"class":169,"line":11872},[167,44437,44229],{"class":512},[167,44439,40458],{"class":184},[167,44441,2578],{"class":512},[167,44443,2818],{"class":184},[167,44445,44238],{"class":512},[167,44447,34074],{"class":184},[167,44449,2578],{"class":512},[167,44451,44452],{"class":184},"288",[167,44454,44247],{"class":512},[167,44456,2399],{"class":184},[167,44458,2578],{"class":512},[167,44460,2405],{"class":184},[167,44462,44256],{"class":512},[167,44464,2405],{"class":184},[167,44466,40048],{"class":512},[167,44468,44469,44471,44474,44476,44478,44480,44482,44484,44487,44489,44491,44493,44495,44497,44499],{"class":169,"line":11878},[167,44470,44229],{"class":512},[167,44472,44473],{"class":184},"528",[167,44475,2578],{"class":512},[167,44477,36872],{"class":184},[167,44479,44238],{"class":512},[167,44481,23074],{"class":184},[167,44483,2578],{"class":512},[167,44485,44486],{"class":184},"320",[167,44488,44247],{"class":512},[167,44490,2399],{"class":184},[167,44492,2578],{"class":512},[167,44494,34074],{"class":184},[167,44496,44256],{"class":512},[167,44498,34074],{"class":184},[167,44500,40048],{"class":512},[167,44502,44503,44505,44507,44509,44511,44513,44515,44517,44519,44521,44523,44525,44527],{"class":169,"line":11892},[167,44504,40098],{"class":512},[167,44506,32881],{"class":7246},[167,44508,523],{"class":731},[167,44510,2281],{"class":184},[167,44512,2578],{"class":512},[167,44514,32936],{"class":7246},[167,44516,523],{"class":731},[167,44518,2287],{"class":184},[167,44520,2578],{"class":512},[167,44522,32890],{"class":7246},[167,44524,523],{"class":731},[167,44526,2418],{"class":184},[167,44528,873],{"class":512},[167,44530,44531],{"class":169,"line":11898},[167,44532,40127],{"class":512},[167,44534,44535,44537,44540,44542],{"class":169,"line":11925},[167,44536,32852],{"class":184},[167,44538,44539],{"class":512},".b5",[167,44541,523],{"class":731},[167,44543,40010],{"class":512},[167,44545,44546,44548,44551,44553,44555,44557,44559,44561,44563,44565,44567,44569,44571,44573,44575],{"class":169,"line":11934},[167,44547,44229],{"class":512},[167,44549,44550],{"class":184},"832",[167,44552,2578],{"class":512},[167,44554,36872],{"class":184},[167,44556,44238],{"class":512},[167,44558,23074],{"class":184},[167,44560,2578],{"class":512},[167,44562,44486],{"class":184},[167,44564,44247],{"class":512},[167,44566,2399],{"class":184},[167,44568,2578],{"class":512},[167,44570,34074],{"class":184},[167,44572,44256],{"class":512},[167,44574,34074],{"class":184},[167,44576,40048],{"class":512},[167,44578,44579,44581,44583,44585,44587,44589,44591,44593,44595,44597,44599,44601,44603,44605,44607],{"class":169,"line":11940},[167,44580,44229],{"class":512},[167,44582,44550],{"class":184},[167,44584,2578],{"class":512},[167,44586,36942],{"class":184},[167,44588,44238],{"class":512},[167,44590,44159],{"class":184},[167,44592,2578],{"class":512},[167,44594,36942],{"class":184},[167,44596,44247],{"class":512},[167,44598,2807],{"class":184},[167,44600,2578],{"class":512},[167,44602,34074],{"class":184},[167,44604,44256],{"class":512},[167,44606,34074],{"class":184},[167,44608,40048],{"class":512},[167,44610,44611,44614,44616,44618,44620],{"class":169,"line":11948},[167,44612,44613],{"class":512},"            nn.AdaptiveAvgPool2d((",[167,44615,2418],{"class":184},[167,44617,2578],{"class":512},[167,44619,2418],{"class":184},[167,44621,44622],{"class":512},")),\n",[167,44624,44625],{"class":169,"line":11953},[167,44626,40791],{"class":512},[167,44628,44629,44631,44634,44636,44638],{"class":169,"line":18630},[167,44630,40796],{"class":512},[167,44632,44633],{"class":184},"1024",[167,44635,2578],{"class":512},[167,44637,2646],{"class":184},[167,44639,873],{"class":512},[167,44641,44642],{"class":169,"line":18636},[167,44643,40127],{"class":512},[167,44645,44646],{"class":169,"line":18659},[167,44647,44648],{"class":2268},"        # 对模型参数初始化\n",[167,44650,44651,44653,44655,44657,44659],{"class":169,"line":18665},[167,44652,5437],{"class":731},[167,44654,40869],{"class":512},[167,44656,973],{"class":731},[167,44658,40874],{"class":184},[167,44660,40877],{"class":512},[167,44662,44663,44665,44667],{"class":169,"line":18688},[167,44664,6674],{"class":731},[167,44666,40889],{"class":184},[167,44668,40892],{"class":512},[167,44670,44671,44673,44676,44678,44681,44683,44685,44687,44689],{"class":169,"line":18702},[167,44672,40902],{"class":512},[167,44674,44675],{"class":7246},"mode",[167,44677,523],{"class":731},[167,44679,44680],{"class":177},"'fan_out'",[167,44682,2578],{"class":512},[167,44684,40905],{"class":7246},[167,44686,523],{"class":731},[167,44688,40910],{"class":177},[167,44690,873],{"class":512},[167,44692,44693],{"class":169,"line":18722},[167,44694,44695],{"class":2268},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[167,44697,44698],{"class":169,"line":18728},[167,44699,44700],{"class":2268},"                # ② mode = 'fan_out'决定使用的fan值：\n",[167,44702,44703],{"class":169,"line":18739},[167,44704,44705],{"class":2268},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[167,44707,44708],{"class":169,"line":18762},[167,44709,44710],{"class":2268},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[167,44712,44713],{"class":169,"line":18784},[167,44714,44715],{"class":2268},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[167,44717,44718],{"class":169,"line":18789},[167,44719,44720],{"class":2268},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[167,44722,44723,44725,44727,44729,44731,44733],{"class":169,"line":18795},[167,44724,40922],{"class":731},[167,44726,40925],{"class":512},[167,44728,40928],{"class":731},[167,44730,40931],{"class":731},[167,44732,40934],{"class":184},[167,44734,857],{"class":512},[167,44736,44737,44739,44741],{"class":169,"line":18809},[167,44738,40946],{"class":512},[167,44740,1154],{"class":184},[167,44742,873],{"class":512},[167,44744,44745,44748,44750],{"class":169,"line":18822},[167,44746,44747],{"class":731},"                elif",[167,44749,40889],{"class":184},[167,44751,40965],{"class":512},[167,44753,44754,44757,44759,44761,44763],{"class":169,"line":18827},[167,44755,44756],{"class":512},"                    nn.init.normal_(m.weight,",[167,44758,1154],{"class":184},[167,44760,2578],{"class":512},[167,44762,648],{"class":184},[167,44764,873],{"class":512},[167,44766,44767,44770,44772,44774,44776,44778],{"class":169,"line":18841},[167,44768,44769],{"class":731},"                    if",[167,44771,40925],{"class":512},[167,44773,40928],{"class":731},[167,44775,40931],{"class":731},[167,44777,40934],{"class":184},[167,44779,857],{"class":512},[167,44781,44782,44785,44787],{"class":169,"line":18846},[167,44783,44784],{"class":512},"                        nn.init.constant_(m.bias,",[167,44786,1154],{"class":184},[167,44788,873],{"class":512},[167,44790,44791],{"class":169,"line":18852},[167,44792,37167],{"class":2268},[167,44794,44795,44797,44799],{"class":169,"line":18857},[167,44796,32808],{"class":731},[167,44798,33100],{"class":173},[167,44800,33103],{"class":512},[167,44802,44803,44805,44807,44809],{"class":169,"line":18871},[167,44804,33108],{"class":512},[167,44806,523],{"class":731},[167,44808,32830],{"class":184},[167,44810,44811],{"class":512},".b1(x)\n",[167,44813,44814,44816,44818,44820],{"class":169,"line":18876},[167,44815,33108],{"class":512},[167,44817,523],{"class":731},[167,44819,32830],{"class":184},[167,44821,44822],{"class":512},".b2(x)\n",[167,44824,44825,44827,44829,44831],{"class":169,"line":18881},[167,44826,33108],{"class":512},[167,44828,523],{"class":731},[167,44830,32830],{"class":184},[167,44832,44833],{"class":512},".b3(x)\n",[167,44835,44836,44838,44840,44842],{"class":169,"line":18895},[167,44837,33108],{"class":512},[167,44839,523],{"class":731},[167,44841,32830],{"class":184},[167,44843,44844],{"class":512},".b4(x)\n",[167,44846,44847,44849,44851,44853],{"class":169,"line":18907},[167,44848,33108],{"class":512},[167,44850,523],{"class":731},[167,44852,32830],{"class":184},[167,44854,44855],{"class":512},".b5(x)\n",[167,44857,44858,44860],{"class":169,"line":18912},[167,44859,16779],{"class":731},[167,44861,33216],{"class":512},[167,44863,44864],{"class":169,"line":18925},[167,44865,741],{"emptyLinePlaceholder":740},[167,44867,44868],{"class":169,"line":18930},[167,44869,44870],{"class":2268},"# 模型展示\n",[167,44872,44873,44875,44877,44879,44881],{"class":169,"line":18935},[167,44874,1035],{"class":731},[167,44876,1038],{"class":184},[167,44878,4985],{"class":731},[167,44880,33231],{"class":177},[167,44882,857],{"class":512},[167,44884,44885,44887,44889,44891,44893,44895,44897,44899,44901],{"class":169,"line":18940},[167,44886,33243],{"class":512},[167,44888,523],{"class":731},[167,44890,32459],{"class":512},[167,44892,33250],{"class":177},[167,44894,3758],{"class":731},[167,44896,33255],{"class":512},[167,44898,3755],{"class":731},[167,44900,32484],{"class":177},[167,44902,873],{"class":512},[167,44904,44905,44907,44909],{"class":169,"line":18953},[167,44906,33295],{"class":512},[167,44908,523],{"class":731},[167,44910,44911],{"class":512},"GoogLeNet(Inception).to(device)\n",[167,44913,44914,44916,44918,44920,44922,44924,44926,44928],{"class":169,"line":18958},[167,44915,895],{"class":184},[167,44917,33307],{"class":512},[167,44919,2418],{"class":184},[167,44921,2578],{"class":512},[167,44923,33506],{"class":184},[167,44925,2578],{"class":512},[167,44927,33506],{"class":184},[167,44929,33320],{"class":512},[40,44931,44932],{"start":191},[43,44933,41183],{},[26,44935,44937],{"className":723,"code":44936,"language":305,"meta":32,"style":32},"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",[34,44938,44939,44945,44951,44961,44967,44977,44987,44997,45007,45017,45021,45032,45042,45046,45050,45054,45062,45074,45084,45100,45110,45142,45156,45166,45176,45180,45190,45204,45214,45224,45234,45240,45244,45248,45252,45256,45260,45268,45288,45292,45296,45300,45304,45308,45324,45328,45332,45340,45344,45348,45356,45360,45364,45368,45376,45380,45384,45388,45392,45400,45404,45412,45416,45424,45428,45436,45440,45448,45452,45456,45464,45468,45472,45476,45488,45512,45526,45530,45534,45538,45546,45550,45558,45562,45570,45574,45582,45586,45594,45598,45606,45610,45622,45626,45634,45638,45646,45650,45654,45658,45662,45670,45674,45690,45694,45702,45706,45710,45714,45718,45722,45726,45730,45746,45750,45762,45766,45778,45782,45794,45798,45806,45810,45818,45822,45826,45830,45836,45840,45848,45852,45868,45872,45880,45884,45900,45912,45916,45928,45932,45936,45944,45948,45952,45960,45964,45972,45976,45984,45988,45992,46034,46076,46080,46084,46100,46104,46120,46124,46128,46136,46140,46144,46156,46194,46198,46202,46210,46214,46228,46238,46244,46250,46256,46262,46266,46270,46276,46280,46284,46292,46296,46314,46318,46322,46326,46342,46346,46350,46354,46358,46362,46382,46402,46406,46410,46414,46422,46430,46434,46450,46470,46490,46494,46498,46506,46514,46518,46522,46526,46538,46542,46552,46560,46577],{"__ignoreMap":32},[167,44940,44941,44943],{"class":169,"line":170},[167,44942,732],{"class":731},[167,44944,33827],{"class":512},[167,44946,44947,44949],{"class":169,"line":191},[167,44948,732],{"class":731},[167,44950,33834],{"class":512},[167,44952,44953,44955,44957,44959],{"class":169,"line":205},[167,44954,732],{"class":731},[167,44956,33845],{"class":512},[167,44958,33388],{"class":731},[167,44960,33850],{"class":512},[167,44962,44963,44965],{"class":169,"line":219},[167,44964,732],{"class":731},[167,44966,32404],{"class":512},[167,44968,44969,44971,44973,44975],{"class":169,"line":230},[167,44970,32745],{"class":731},[167,44972,33420],{"class":512},[167,44974,732],{"class":731},[167,44976,33867],{"class":512},[167,44978,44979,44981,44983,44985],{"class":169,"line":241},[167,44980,32745],{"class":731},[167,44982,33373],{"class":512},[167,44984,732],{"class":731},[167,44986,33378],{"class":512},[167,44988,44989,44991,44993,44995],{"class":169,"line":261},[167,44990,32745],{"class":731},[167,44992,33403],{"class":512},[167,44994,732],{"class":731},[167,44996,33408],{"class":512},[167,44998,44999,45001,45003,45005],{"class":169,"line":773},[167,45000,732],{"class":731},[167,45002,33420],{"class":512},[167,45004,33388],{"class":731},[167,45006,33425],{"class":512},[167,45008,45009,45011,45013,45015],{"class":169,"line":779},[167,45010,732],{"class":731},[167,45012,33437],{"class":512},[167,45014,33388],{"class":731},[167,45016,33442],{"class":512},[167,45018,45019],{"class":169,"line":785},[167,45020,33912],{"class":2268},[167,45022,45023,45025,45027,45029],{"class":169,"line":790},[167,45024,32745],{"class":731},[167,45026,33919],{"class":512},[167,45028,732],{"class":731},[167,45030,45031],{"class":512}," GoogLeNet, Inception\n",[167,45033,45034,45036,45038,45040],{"class":169,"line":796},[167,45035,32745],{"class":731},[167,45037,32748],{"class":512},[167,45039,732],{"class":731},[167,45041,32753],{"class":512},[167,45043,45044],{"class":169,"line":802},[167,45045,741],{"emptyLinePlaceholder":740},[167,45047,45048],{"class":169,"line":808},[167,45049,741],{"emptyLinePlaceholder":740},[167,45051,45052],{"class":169,"line":814},[167,45053,33947],{"class":2268},[167,45055,45056,45058,45060],{"class":169,"line":820},[167,45057,845],{"class":731},[167,45059,33954],{"class":173},[167,45061,33957],{"class":512},[167,45063,45064,45066,45068,45070,45072],{"class":169,"line":826},[167,45065,33962],{"class":512},[167,45067,523],{"class":731},[167,45069,33460],{"class":512},[167,45071,33468],{"class":177},[167,45073,33471],{"class":512},[167,45075,45076,45078,45080,45082],{"class":169,"line":832},[167,45077,33975],{"class":7246},[167,45079,523],{"class":731},[167,45081,33481],{"class":184},[167,45083,33471],{"class":512},[167,45085,45086,45088,45090,45092,45094,45096,45098],{"class":169,"line":837},[167,45087,33986],{"class":7246},[167,45089,523],{"class":731},[167,45091,33498],{"class":512},[167,45093,33501],{"class":7246},[167,45095,523],{"class":731},[167,45097,37450],{"class":184},[167,45099,33509],{"class":512},[167,45101,45102,45104,45106,45108],{"class":169,"line":842},[167,45103,34003],{"class":7246},[167,45105,523],{"class":731},[167,45107,33481],{"class":184},[167,45109,873],{"class":512},[167,45111,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140],{"class":169,"line":860},[167,45113,34014],{"class":512},[167,45115,523],{"class":731},[167,45117,34019],{"class":512},[167,45119,34022],{"class":184},[167,45121,898],{"class":512},[167,45123,34027],{"class":184},[167,45125,2655],{"class":731},[167,45127,9388],{"class":184},[167,45129,34034],{"class":512},[167,45131,34022],{"class":184},[167,45133,898],{"class":512},[167,45135,34041],{"class":184},[167,45137,2655],{"class":731},[167,45139,9388],{"class":184},[167,45141,34048],{"class":512},[167,45143,45144,45146,45148,45150,45152,45154],{"class":169,"line":876},[167,45145,34053],{"class":512},[167,45147,523],{"class":731},[167,45149,34058],{"class":512},[167,45151,33542],{"class":7246},[167,45153,523],{"class":731},[167,45155,33547],{"class":512},[167,45157,45158,45160,45162,45164],{"class":169,"line":887},[167,45159,34069],{"class":7246},[167,45161,523],{"class":731},[167,45163,2399],{"class":184},[167,45165,33471],{"class":512},[167,45167,45168,45170,45172,45174],{"class":169,"line":892},[167,45169,34081],{"class":7246},[167,45171,523],{"class":731},[167,45173,33481],{"class":184},[167,45175,33471],{"class":512},[167,45177,45178],{"class":169,"line":907},[167,45179,34092],{"class":2268},[167,45181,45182,45184,45186,45188],{"class":169,"line":920},[167,45183,34097],{"class":7246},[167,45185,523],{"class":731},[167,45187,2595],{"class":184},[167,45189,873],{"class":512},[167,45191,45192,45194,45196,45198,45200,45202],{"class":169,"line":933},[167,45193,34108],{"class":512},[167,45195,523],{"class":731},[167,45197,33539],{"class":512},[167,45199,33542],{"class":7246},[167,45201,523],{"class":731},[167,45203,34119],{"class":512},[167,45205,45206,45208,45210,45212],{"class":169,"line":946},[167,45207,34124],{"class":7246},[167,45209,523],{"class":731},[167,45211,2399],{"class":184},[167,45213,33471],{"class":512},[167,45215,45216,45218,45220,45222],{"class":169,"line":959},[167,45217,34135],{"class":7246},[167,45219,523],{"class":731},[167,45221,33481],{"class":184},[167,45223,33471],{"class":512},[167,45225,45226,45228,45230,45232],{"class":169,"line":964},[167,45227,34146],{"class":7246},[167,45229,523],{"class":731},[167,45231,2595],{"class":184},[167,45233,873],{"class":512},[167,45235,45236,45238],{"class":169,"line":987},[167,45237,6122],{"class":731},[167,45239,34159],{"class":512},[167,45241,45242],{"class":169,"line":993},[167,45243,741],{"emptyLinePlaceholder":740},[167,45245,45246],{"class":169,"line":998},[167,45247,34168],{"class":2268},[167,45249,45250],{"class":169,"line":1010},[167,45251,34173],{"class":2268},[167,45253,45254],{"class":169,"line":1022},[167,45255,741],{"emptyLinePlaceholder":740},[167,45257,45258],{"class":169,"line":1027},[167,45259,34182],{"class":2268},[167,45261,45262,45264,45266],{"class":169,"line":1032},[167,45263,845],{"class":731},[167,45265,34189],{"class":173},[167,45267,34192],{"class":512},[167,45269,45270,45272,45274,45276,45278,45280,45282,45284,45286],{"class":169,"line":1049},[167,45271,33243],{"class":512},[167,45273,523],{"class":731},[167,45275,32459],{"class":512},[167,45277,33250],{"class":177},[167,45279,3758],{"class":731},[167,45281,33255],{"class":512},[167,45283,3755],{"class":731},[167,45285,34211],{"class":177},[167,45287,873],{"class":512},[167,45289,45290],{"class":169,"line":10005},[167,45291,741],{"emptyLinePlaceholder":740},[167,45293,45294],{"class":169,"line":10011},[167,45295,741],{"emptyLinePlaceholder":740},[167,45297,45298],{"class":169,"line":10038},[167,45299,34226],{"class":2268},[167,45301,45302],{"class":169,"line":10043},[167,45303,34231],{"class":2268},[167,45305,45306],{"class":169,"line":10049},[167,45307,34236],{"class":2268},[167,45309,45310,45312,45314,45316,45318,45320,45322],{"class":169,"line":10061},[167,45311,34241],{"class":512},[167,45313,523],{"class":731},[167,45315,34246],{"class":512},[167,45317,34249],{"class":7246},[167,45319,523],{"class":731},[167,45321,34254],{"class":184},[167,45323,873],{"class":512},[167,45325,45326],{"class":169,"line":10073},[167,45327,741],{"emptyLinePlaceholder":740},[167,45329,45330],{"class":169,"line":10085},[167,45331,34265],{"class":2268},[167,45333,45334,45336,45338],{"class":169,"line":11744},[167,45335,34270],{"class":512},[167,45337,523],{"class":731},[167,45339,34275],{"class":512},[167,45341,45342],{"class":169,"line":11769},[167,45343,741],{"emptyLinePlaceholder":740},[167,45345,45346],{"class":169,"line":11792},[167,45347,34284],{"class":2268},[167,45349,45350,45352,45354],{"class":169,"line":11816},[167,45351,33295],{"class":512},[167,45353,523],{"class":731},[167,45355,34293],{"class":512},[167,45357,45358],{"class":169,"line":11821},[167,45359,34298],{"class":2268},[167,45361,45362],{"class":169,"line":11826},[167,45363,34303],{"class":2268},[167,45365,45366],{"class":169,"line":11831},[167,45367,34308],{"class":2268},[167,45369,45370,45372,45374],{"class":169,"line":11840},[167,45371,34313],{"class":512},[167,45373,523],{"class":731},[167,45375,34318],{"class":512},[167,45377,45378],{"class":169,"line":11845},[167,45379,741],{"emptyLinePlaceholder":740},[167,45381,45382],{"class":169,"line":11851},[167,45383,741],{"emptyLinePlaceholder":740},[167,45385,45386],{"class":169,"line":11872},[167,45387,34331],{"class":2268},[167,45389,45390],{"class":169,"line":11878},[167,45391,34336],{"class":2268},[167,45393,45394,45396,45398],{"class":169,"line":11892},[167,45395,34341],{"class":512},[167,45397,523],{"class":731},[167,45399,34346],{"class":184},[167,45401,45402],{"class":169,"line":11898},[167,45403,34351],{"class":2268},[167,45405,45406,45408,45410],{"class":169,"line":11925},[167,45407,34356],{"class":512},[167,45409,523],{"class":731},[167,45411,34361],{"class":512},[167,45413,45414],{"class":169,"line":11934},[167,45415,34366],{"class":2268},[167,45417,45418,45420,45422],{"class":169,"line":11940},[167,45419,34371],{"class":512},[167,45421,523],{"class":731},[167,45423,34361],{"class":512},[167,45425,45426],{"class":169,"line":11948},[167,45427,34380],{"class":2268},[167,45429,45430,45432,45434],{"class":169,"line":11953},[167,45431,34385],{"class":512},[167,45433,523],{"class":731},[167,45435,34361],{"class":512},[167,45437,45438],{"class":169,"line":18630},[167,45439,34394],{"class":2268},[167,45441,45442,45444,45446],{"class":169,"line":18636},[167,45443,34399],{"class":512},[167,45445,523],{"class":731},[167,45447,34361],{"class":512},[167,45449,45450],{"class":169,"line":18659},[167,45451,741],{"emptyLinePlaceholder":740},[167,45453,45454],{"class":169,"line":18665},[167,45455,34412],{"class":2268},[167,45457,45458,45460,45462],{"class":169,"line":18688},[167,45459,34417],{"class":512},[167,45461,523],{"class":731},[167,45463,34422],{"class":512},[167,45465,45466],{"class":169,"line":18702},[167,45467,741],{"emptyLinePlaceholder":740},[167,45469,45470],{"class":169,"line":18722},[167,45471,741],{"emptyLinePlaceholder":740},[167,45473,45474],{"class":169,"line":18728},[167,45475,34435],{"class":2268},[167,45477,45478,45480,45482,45484,45486],{"class":169,"line":18739},[167,45479,967],{"class":731},[167,45481,34442],{"class":512},[167,45483,973],{"class":731},[167,45485,976],{"class":184},[167,45487,34449],{"class":512},[167,45489,45490,45492,45494,45496,45498,45500,45502,45504,45506,45508,45510],{"class":169,"line":18762},[167,45491,34454],{"class":184},[167,45493,898],{"class":512},[167,45495,34459],{"class":177},[167,45497,34462],{"class":184},[167,45499,2784],{"class":177},[167,45501,34462],{"class":184},[167,45503,2452],{"class":177},[167,45505,34471],{"class":512},[167,45507,2732],{"class":731},[167,45509,2418],{"class":184},[167,45511,32505],{"class":512},[167,45513,45514,45516,45518,45520,45522,45524],{"class":169,"line":18784},[167,45515,34454],{"class":184},[167,45517,898],{"class":512},[167,45519,34486],{"class":177},[167,45521,2655],{"class":731},[167,45523,2646],{"class":184},[167,45525,873],{"class":512},[167,45527,45528],{"class":169,"line":18789},[167,45529,741],{"emptyLinePlaceholder":740},[167,45531,45532],{"class":169,"line":18795},[167,45533,34501],{"class":2268},[167,45535,45536],{"class":169,"line":18809},[167,45537,34506],{"class":2268},[167,45539,45540,45542,45544],{"class":169,"line":18822},[167,45541,34511],{"class":512},[167,45543,523],{"class":731},[167,45545,34346],{"class":184},[167,45547,45548],{"class":169,"line":18827},[167,45549,34520],{"class":2268},[167,45551,45552,45554,45556],{"class":169,"line":18841},[167,45553,34525],{"class":512},[167,45555,523],{"class":731},[167,45557,5120],{"class":184},[167,45559,45560],{"class":169,"line":18846},[167,45561,34534],{"class":2268},[167,45563,45564,45566,45568],{"class":169,"line":18852},[167,45565,34539],{"class":512},[167,45567,523],{"class":731},[167,45569,34346],{"class":184},[167,45571,45572],{"class":169,"line":18857},[167,45573,34548],{"class":2268},[167,45575,45576,45578,45580],{"class":169,"line":18871},[167,45577,34553],{"class":512},[167,45579,523],{"class":731},[167,45581,5120],{"class":184},[167,45583,45584],{"class":169,"line":18876},[167,45585,34562],{"class":2268},[167,45587,45588,45590,45592],{"class":169,"line":18881},[167,45589,34567],{"class":512},[167,45591,523],{"class":731},[167,45593,5120],{"class":184},[167,45595,45596],{"class":169,"line":18895},[167,45597,34576],{"class":2268},[167,45599,45600,45602,45604],{"class":169,"line":18907},[167,45601,34581],{"class":512},[167,45603,523],{"class":731},[167,45605,5120],{"class":184},[167,45607,45608],{"class":169,"line":18912},[167,45609,34590],{"class":2268},[167,45611,45612,45614,45616,45618,45620],{"class":169,"line":18925},[167,45613,5437],{"class":731},[167,45615,33606],{"class":512},[167,45617,973],{"class":731},[167,45619,33611],{"class":184},[167,45621,34603],{"class":512},[167,45623,45624],{"class":169,"line":18930},[167,45625,34608],{"class":2268},[167,45627,45628,45630,45632],{"class":169,"line":18935},[167,45629,34613],{"class":512},[167,45631,523],{"class":731},[167,45633,34618],{"class":512},[167,45635,45636],{"class":169,"line":18940},[167,45637,34623],{"class":2268},[167,45639,45640,45642,45644],{"class":169,"line":18953},[167,45641,34628],{"class":512},[167,45643,523],{"class":731},[167,45645,34633],{"class":512},[167,45647,45648],{"class":169,"line":18958},[167,45649,34639],{"class":2268},[167,45651,45652],{"class":169,"line":34636},[167,45653,34645],{"class":512},[167,45655,45656],{"class":169,"line":34642},[167,45657,34651],{"class":2268},[167,45659,45660],{"class":169,"line":34648},[167,45661,34657],{"class":2268},[167,45663,45664,45666,45668],{"class":169,"line":34654},[167,45665,34663],{"class":512},[167,45667,523],{"class":731},[167,45669,34668],{"class":512},[167,45671,45672],{"class":169,"line":34660},[167,45673,34674],{"class":2268},[167,45675,45676,45678,45680,45682,45684,45686,45688],{"class":169,"line":34671},[167,45677,34680],{"class":512},[167,45679,523],{"class":731},[167,45681,34685],{"class":512},[167,45683,34688],{"class":7246},[167,45685,523],{"class":731},[167,45687,2418],{"class":184},[167,45689,873],{"class":512},[167,45691,45692],{"class":169,"line":34677},[167,45693,34700],{"class":2268},[167,45695,45696,45698,45700],{"class":169,"line":34697},[167,45697,34706],{"class":512},[167,45699,523],{"class":731},[167,45701,34711],{"class":512},[167,45703,45704],{"class":169,"line":34703},[167,45705,34717],{"class":2268},[167,45707,45708],{"class":169,"line":34714},[167,45709,34723],{"class":512},[167,45711,45712],{"class":169,"line":34720},[167,45713,34729],{"class":2268},[167,45715,45716],{"class":169,"line":34726},[167,45717,34735],{"class":512},[167,45719,45720],{"class":169,"line":34732},[167,45721,34741],{"class":2268},[167,45723,45724],{"class":169,"line":34738},[167,45725,34747],{"class":512},[167,45727,45728],{"class":169,"line":34744},[167,45729,34753],{"class":2268},[167,45731,45732,45734,45736,45738,45740,45742,45744],{"class":169,"line":34750},[167,45733,34759],{"class":512},[167,45735,11505],{"class":731},[167,45737,34764],{"class":512},[167,45739,2655],{"class":731},[167,45741,34769],{"class":512},[167,45743,1154],{"class":184},[167,45745,873],{"class":512},[167,45747,45748],{"class":169,"line":34756},[167,45749,34779],{"class":2268},[167,45751,45752,45754,45756,45758,45760],{"class":169,"line":34776},[167,45753,34785],{"class":512},[167,45755,11505],{"class":731},[167,45757,34790],{"class":512},[167,45759,4985],{"class":731},[167,45761,34795],{"class":512},[167,45763,45764],{"class":169,"line":34782},[167,45765,34801],{"class":2268},[167,45767,45768,45770,45772,45774,45776],{"class":169,"line":34798},[167,45769,34807],{"class":512},[167,45771,11505],{"class":731},[167,45773,34769],{"class":512},[167,45775,1154],{"class":184},[167,45777,873],{"class":512},[167,45779,45780],{"class":169,"line":34804},[167,45781,34821],{"class":2268},[167,45783,45784,45786,45788,45790,45792],{"class":169,"line":34818},[167,45785,5437],{"class":731},[167,45787,34829],{"class":512},[167,45789,973],{"class":731},[167,45791,33611],{"class":184},[167,45793,34836],{"class":512},[167,45795,45796],{"class":169,"line":34824},[167,45797,34842],{"class":2268},[167,45799,45800,45802,45804],{"class":169,"line":34839},[167,45801,34613],{"class":512},[167,45803,523],{"class":731},[167,45805,34618],{"class":512},[167,45807,45808],{"class":169,"line":34845},[167,45809,34857],{"class":2268},[167,45811,45812,45814,45816],{"class":169,"line":34854},[167,45813,34628],{"class":512},[167,45815,523],{"class":731},[167,45817,34633],{"class":512},[167,45819,45820],{"class":169,"line":34860},[167,45821,34872],{"class":2268},[167,45823,45824],{"class":169,"line":34869},[167,45825,34878],{"class":512},[167,45827,45828],{"class":169,"line":34875},[167,45829,38357],{"class":2268},[167,45831,45832,45834],{"class":169,"line":34881},[167,45833,34884],{"class":731},[167,45835,34887],{"class":512},[167,45837,45838],{"class":169,"line":34890},[167,45839,34893],{"class":2268},[167,45841,45842,45844,45846],{"class":169,"line":34896},[167,45843,38372],{"class":512},[167,45845,523],{"class":731},[167,45847,34668],{"class":512},[167,45849,45850],{"class":169,"line":34907},[167,45851,34910],{"class":2268},[167,45853,45854,45856,45858,45860,45862,45864,45866],{"class":169,"line":34913},[167,45855,38385],{"class":512},[167,45857,523],{"class":731},[167,45859,34685],{"class":512},[167,45861,34688],{"class":7246},[167,45863,523],{"class":731},[167,45865,2418],{"class":184},[167,45867,873],{"class":512},[167,45869,45870],{"class":169,"line":34932},[167,45871,34935],{"class":2268},[167,45873,45874,45876,45878],{"class":169,"line":34938},[167,45875,38406],{"class":512},[167,45877,523],{"class":731},[167,45879,34711],{"class":512},[167,45881,45882],{"class":169,"line":34949},[167,45883,34952],{"class":2268},[167,45885,45886,45888,45890,45892,45894,45896,45898],{"class":169,"line":34955},[167,45887,38419],{"class":512},[167,45889,11505],{"class":731},[167,45891,38424],{"class":512},[167,45893,2655],{"class":731},[167,45895,34769],{"class":512},[167,45897,1154],{"class":184},[167,45899,873],{"class":512},[167,45901,45902,45904,45906,45908,45910],{"class":169,"line":34975},[167,45903,38437],{"class":512},[167,45905,11505],{"class":731},[167,45907,34790],{"class":512},[167,45909,4985],{"class":731},[167,45911,34795],{"class":512},[167,45913,45914],{"class":169,"line":34991},[167,45915,38450],{"class":2268},[167,45917,45918,45920,45922,45924,45926],{"class":169,"line":34997},[167,45919,38455],{"class":512},[167,45921,11505],{"class":731},[167,45923,34769],{"class":512},[167,45925,1154],{"class":184},[167,45927,873],{"class":512},[167,45929,45930],{"class":169,"line":35011},[167,45931,35014],{"class":2268},[167,45933,45934],{"class":169,"line":35017},[167,45935,35020],{"class":2268},[167,45937,45938,45940,45942],{"class":169,"line":35023},[167,45939,35026],{"class":512},[167,45941,2784],{"class":731},[167,45943,35031],{"class":512},[167,45945,45946],{"class":169,"line":35034},[167,45947,35037],{"class":2268},[167,45949,45950],{"class":169,"line":35040},[167,45951,35043],{"class":2268},[167,45953,45954,45956,45958],{"class":169,"line":35046},[167,45955,35049],{"class":512},[167,45957,2784],{"class":731},[167,45959,35031],{"class":512},[167,45961,45962],{"class":169,"line":35056},[167,45963,35059],{"class":2268},[167,45965,45966,45968,45970],{"class":169,"line":35062},[167,45967,35065],{"class":512},[167,45969,2784],{"class":731},[167,45971,35070],{"class":512},[167,45973,45974],{"class":169,"line":35073},[167,45975,35076],{"class":2268},[167,45977,45978,45980,45982],{"class":169,"line":35079},[167,45979,35082],{"class":512},[167,45981,2784],{"class":731},[167,45983,35070],{"class":512},[167,45985,45986],{"class":169,"line":35089},[167,45987,741],{"emptyLinePlaceholder":740},[167,45989,45990],{"class":169,"line":35094},[167,45991,35097],{"class":2268},[167,45993,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032],{"class":169,"line":35100},[167,45995,34454],{"class":184},[167,45997,898],{"class":512},[167,45999,5626],{"class":177},[167,46001,34462],{"class":184},[167,46003,35111],{"class":177},[167,46005,3096],{"class":184},[167,46007,35116],{"class":731},[167,46009,3145],{"class":184},[167,46011,35121],{"class":177},[167,46013,3096],{"class":184},[167,46015,35116],{"class":731},[167,46017,3145],{"class":184},[167,46019,5626],{"class":177},[167,46021,35132],{"class":512},[167,46023,2732],{"class":731},[167,46025,2418],{"class":184},[167,46027,35139],{"class":512},[167,46029,2732],{"class":731},[167,46031,2418],{"class":184},[167,46033,35146],{"class":512},[167,46035,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072,46074],{"class":169,"line":35149},[167,46037,34454],{"class":184},[167,46039,898],{"class":512},[167,46041,5626],{"class":177},[167,46043,34462],{"class":184},[167,46045,35160],{"class":177},[167,46047,3096],{"class":184},[167,46049,35116],{"class":731},[167,46051,3145],{"class":184},[167,46053,35169],{"class":177},[167,46055,3096],{"class":184},[167,46057,35116],{"class":731},[167,46059,3145],{"class":184},[167,46061,5626],{"class":177},[167,46063,35180],{"class":512},[167,46065,2732],{"class":731},[167,46067,2418],{"class":184},[167,46069,35187],{"class":512},[167,46071,2732],{"class":731},[167,46073,2418],{"class":184},[167,46075,35146],{"class":512},[167,46077,46078],{"class":169,"line":35196},[167,46079,741],{"emptyLinePlaceholder":740},[167,46081,46082],{"class":169,"line":35201},[167,46083,35204],{"class":2268},[167,46085,46086,46088,46090,46092,46094,46096,46098],{"class":169,"line":35207},[167,46087,4540],{"class":731},[167,46089,35212],{"class":512},[167,46091,2732],{"class":731},[167,46093,2418],{"class":184},[167,46095,3139],{"class":512},[167,46097,3159],{"class":731},[167,46099,35223],{"class":512},[167,46101,46102],{"class":169,"line":35226},[167,46103,35229],{"class":2268},[167,46105,46106,46108,46110,46112,46114,46116,46118],{"class":169,"line":35232},[167,46107,35235],{"class":512},[167,46109,2251],{"class":184},[167,46111,523],{"class":731},[167,46113,35242],{"class":512},[167,46115,2732],{"class":731},[167,46117,2418],{"class":184},[167,46119,35249],{"class":512},[167,46121,46122],{"class":169,"line":35252},[167,46123,35255],{"class":2268},[167,46125,46126],{"class":169,"line":35258},[167,46127,35261],{"class":2268},[167,46129,46130,46132,46134],{"class":169,"line":35264},[167,46131,35267],{"class":512},[167,46133,523],{"class":731},[167,46135,34318],{"class":512},[167,46137,46138],{"class":169,"line":35274},[167,46139,741],{"emptyLinePlaceholder":740},[167,46141,46142],{"class":169,"line":35279},[167,46143,35282],{"class":2268},[167,46145,46146,46148,46150,46152,46154],{"class":169,"line":35285},[167,46147,35288],{"class":512},[167,46149,523],{"class":731},[167,46151,35293],{"class":512},[167,46153,2732],{"class":731},[167,46155,35298],{"class":512},[167,46157,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192],{"class":169,"line":35301},[167,46159,34454],{"class":184},[167,46161,898],{"class":512},[167,46163,35308],{"class":177},[167,46165,3096],{"class":184},[167,46167,35313],{"class":731},[167,46169,3145],{"class":184},[167,46171,2744],{"class":177},[167,46173,3096],{"class":184},[167,46175,35313],{"class":731},[167,46177,3145],{"class":184},[167,46179,35326],{"class":177},[167,46181,35329],{"class":512},[167,46183,35332],{"class":731},[167,46185,3107],{"class":184},[167,46187,35337],{"class":512},[167,46189,2528],{"class":731},[167,46191,3107],{"class":184},[167,46193,32505],{"class":512},[167,46195,46196],{"class":169,"line":35346},[167,46197,38734],{"class":2268},[167,46199,46200],{"class":169,"line":35352},[167,46201,38739],{"class":2268},[167,46203,46204,46206,46208],{"class":169,"line":35358},[167,46205,38744],{"class":512},[167,46207,35370],{"class":177},[167,46209,873],{"class":512},[167,46211,46212],{"class":169,"line":35364},[167,46213,35390],{"class":2268},[167,46215,46216,46218,46220,46222,46224,46226],{"class":169,"line":35375},[167,46217,35396],{"class":512},[167,46219,523],{"class":731},[167,46221,35401],{"class":512},[167,46223,1150],{"class":7246},[167,46225,523],{"class":731},[167,46227,3611],{"class":512},[167,46229,46230,46232,46234,46236],{"class":169,"line":35381},[167,46231,35413],{"class":177},[167,46233,3059],{"class":512},[167,46235,35418],{"class":184},[167,46237,35421],{"class":512},[167,46239,46240,46242],{"class":169,"line":35387},[167,46241,35427],{"class":177},[167,46243,35430],{"class":512},[167,46245,46246,46248],{"class":169,"line":35393},[167,46247,35436],{"class":177},[167,46249,35439],{"class":512},[167,46251,46252,46254],{"class":169,"line":35410},[167,46253,35445],{"class":177},[167,46255,35448],{"class":512},[167,46257,46258,46260],{"class":169,"line":35424},[167,46259,35454],{"class":177},[167,46261,35457],{"class":512},[167,46263,46264],{"class":169,"line":35433},[167,46265,35463],{"class":512},[167,46267,46268],{"class":169,"line":35442},[167,46269,35469],{"class":2268},[167,46271,46272,46274],{"class":169,"line":35451},[167,46273,6122],{"class":731},[167,46275,35477],{"class":512},[167,46277,46278],{"class":169,"line":35460},[167,46279,741],{"emptyLinePlaceholder":740},[167,46281,46282],{"class":169,"line":35466},[167,46283,35488],{"class":2268},[167,46285,46286,46288,46290],{"class":169,"line":35472},[167,46287,845],{"class":731},[167,46289,35496],{"class":173},[167,46291,35499],{"class":512},[167,46293,46294],{"class":169,"line":35480},[167,46295,35505],{"class":2268},[167,46297,46298,46300,46302,46304,46306,46308,46310,46312],{"class":169,"line":35485},[167,46299,35511],{"class":512},[167,46301,33698],{"class":7246},[167,46303,523],{"class":731},[167,46305,898],{"class":512},[167,46307,2698],{"class":184},[167,46309,2578],{"class":512},[167,46311,2494],{"class":184},[167,46313,32505],{"class":512},[167,46315,46316],{"class":169,"line":35491},[167,46317,35531],{"class":2268},[167,46319,46320],{"class":169,"line":35502},[167,46321,35537],{"class":2268},[167,46323,46324],{"class":169,"line":35508},[167,46325,35543],{"class":2268},[167,46327,46328,46330,46332,46334,46336,46338,46340],{"class":169,"line":35528},[167,46329,33732],{"class":512},[167,46331,2418],{"class":184},[167,46333,2578],{"class":512},[167,46335,2287],{"class":184},[167,46337,2578],{"class":512},[167,46339,2418],{"class":184},[167,46341,873],{"class":512},[167,46343,46344],{"class":169,"line":35534},[167,46345,35566],{"class":2268},[167,46347,46348],{"class":169,"line":35540},[167,46349,35572],{"class":2268},[167,46351,46352],{"class":169,"line":35546},[167,46353,35578],{"class":2268},[167,46355,46356],{"class":169,"line":35563},[167,46357,35584],{"class":2268},[167,46359,46360],{"class":169,"line":35569},[167,46361,35590],{"class":2268},[167,46363,46364,46366,46368,46370,46372,46374,46376,46378,46380],{"class":169,"line":35575},[167,46365,35596],{"class":512},[167,46367,35599],{"class":177},[167,46369,35602],{"class":512},[167,46371,35605],{"class":177},[167,46373,2578],{"class":512},[167,46375,35610],{"class":7246},[167,46377,523],{"class":731},[167,46379,35615],{"class":177},[167,46381,873],{"class":512},[167,46383,46384,46386,46388,46390,46392,46394,46396,46398,46400],{"class":169,"line":35581},[167,46385,35596],{"class":512},[167,46387,35599],{"class":177},[167,46389,35627],{"class":512},[167,46391,35630],{"class":177},[167,46393,2578],{"class":512},[167,46395,35610],{"class":7246},[167,46397,523],{"class":731},[167,46399,35639],{"class":177},[167,46401,873],{"class":512},[167,46403,46404],{"class":169,"line":35587},[167,46405,35647],{"class":2268},[167,46407,46408],{"class":169,"line":35593},[167,46409,35653],{"class":512},[167,46411,46412],{"class":169,"line":35620},[167,46413,35659],{"class":2268},[167,46415,46416,46418,46420],{"class":169,"line":35644},[167,46417,35665],{"class":512},[167,46419,35668],{"class":177},[167,46421,873],{"class":512},[167,46423,46424,46426,46428],{"class":169,"line":35650},[167,46425,35676],{"class":512},[167,46427,35679],{"class":177},[167,46429,873],{"class":512},[167,46431,46432],{"class":169,"line":35656},[167,46433,35687],{"class":2268},[167,46435,46436,46438,46440,46442,46444,46446,46448],{"class":169,"line":35662},[167,46437,33732],{"class":512},[167,46439,2418],{"class":184},[167,46441,2578],{"class":512},[167,46443,2287],{"class":184},[167,46445,2578],{"class":512},[167,46447,2287],{"class":184},[167,46449,873],{"class":512},[167,46451,46452,46454,46456,46458,46460,46462,46464,46466,46468],{"class":169,"line":35673},[167,46453,35596],{"class":512},[167,46455,35599],{"class":177},[167,46457,35714],{"class":512},[167,46459,35605],{"class":177},[167,46461,2578],{"class":512},[167,46463,35610],{"class":7246},[167,46465,523],{"class":731},[167,46467,35725],{"class":177},[167,46469,873],{"class":512},[167,46471,46472,46474,46476,46478,46480,46482,46484,46486,46488],{"class":169,"line":35684},[167,46473,35596],{"class":512},[167,46475,35599],{"class":177},[167,46477,35737],{"class":512},[167,46479,35630],{"class":177},[167,46481,2578],{"class":512},[167,46483,35610],{"class":7246},[167,46485,523],{"class":731},[167,46487,35748],{"class":177},[167,46489,873],{"class":512},[167,46491,46492],{"class":169,"line":35690},[167,46493,35756],{"class":2268},[167,46495,46496],{"class":169,"line":35707},[167,46497,35653],{"class":512},[167,46499,46500,46502,46504],{"class":169,"line":35730},[167,46501,35665],{"class":512},[167,46503,35599],{"class":177},[167,46505,873],{"class":512},[167,46507,46508,46510,46512],{"class":169,"line":35753},[167,46509,35676],{"class":512},[167,46511,35778],{"class":177},[167,46513,873],{"class":512},[167,46515,46516],{"class":169,"line":35759},[167,46517,35786],{"class":512},[167,46519,46520],{"class":169,"line":35764},[167,46521,741],{"emptyLinePlaceholder":740},[167,46523,46524],{"class":169,"line":35773},[167,46525,35797],{"class":2268},[167,46527,46528,46530,46532,46534,46536],{"class":169,"line":35783},[167,46529,1035],{"class":731},[167,46531,1038],{"class":184},[167,46533,4985],{"class":731},[167,46535,33231],{"class":177},[167,46537,857],{"class":512},[167,46539,46540],{"class":169,"line":35789},[167,46541,35816],{"class":2268},[167,46543,46544,46547,46549],{"class":169,"line":35794},[167,46545,46546],{"class":512},"    GoogLeNet",[167,46548,523],{"class":731},[167,46550,46551],{"class":512},"GoogLeNet(Inception)\n",[167,46553,46554,46556,46558],{"class":169,"line":35800},[167,46555,35833],{"class":512},[167,46557,523],{"class":731},[167,46559,35838],{"class":512},[167,46561,46562,46564,46566,46569,46571,46573,46575],{"class":169,"line":35813},[167,46563,35396],{"class":512},[167,46565,523],{"class":731},[167,46567,46568],{"class":512},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[167,46570,35851],{"class":7246},[167,46572,523],{"class":731},[167,46574,3150],{"class":184},[167,46576,873],{"class":512},[167,46578,46579],{"class":169,"line":35819},[167,46580,35863],{"class":512},[40,46582,46583],{"start":205},[43,46584,42574],{},[26,46586,46588],{"className":723,"code":46587,"language":305,"meta":32,"style":32},"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",[34,46589,46590,46596,46606,46616,46620,46630,46641,46645,46649,46653,46661,46677,46687,46703,46713,46727,46731,46741,46751,46761,46767,46771,46775,46783,46787,46803,46811,46815,46819,46827,46835,46839,46843,46847,46851,46857,46861,46871,46879,46887,46891,46895,46899,46907,46911,46927,46931,46935,46939,46951,46955,46967,46971,46975,46987,46991,47001,47005,47009,47021,47025,47033,47037,47041,47049,47053,47061,47065,47069,47073,47077,47081,47097,47105,47109,47113,47161,47167,47171,47181,47189,47197,47201,47205,47209,47213,47221,47225,47241,47245,47253,47261],{"__ignoreMap":32},[167,46591,46592,46594],{"class":169,"line":170},[167,46593,732],{"class":731},[167,46595,32404],{"class":512},[167,46597,46598,46600,46602,46604],{"class":169,"line":191},[167,46599,732],{"class":731},[167,46601,33420],{"class":512},[167,46603,33388],{"class":731},[167,46605,33425],{"class":512},[167,46607,46608,46610,46612,46614],{"class":169,"line":205},[167,46609,32745],{"class":731},[167,46611,33403],{"class":512},[167,46613,732],{"class":731},[167,46615,33408],{"class":512},[167,46617,46618],{"class":169,"line":219},[167,46619,35924],{"class":2268},[167,46621,46622,46624,46626,46628],{"class":169,"line":230},[167,46623,32745],{"class":731},[167,46625,33373],{"class":512},[167,46627,732],{"class":731},[167,46629,33378],{"class":512},[167,46631,46632,46634,46636,46638],{"class":169,"line":241},[167,46633,32745],{"class":731},[167,46635,33919],{"class":512},[167,46637,732],{"class":731},[167,46639,46640],{"class":512}," GoogLeNet,Inception\n",[167,46642,46643],{"class":169,"line":261},[167,46644,741],{"emptyLinePlaceholder":740},[167,46646,46647],{"class":169,"line":773},[167,46648,741],{"emptyLinePlaceholder":740},[167,46650,46651],{"class":169,"line":779},[167,46652,35953],{"class":2268},[167,46654,46655,46657,46659],{"class":169,"line":785},[167,46656,845],{"class":731},[167,46658,35960],{"class":173},[167,46660,33957],{"class":512},[167,46662,46663,46665,46667,46669,46671,46673,46675],{"class":169,"line":790},[167,46664,35967],{"class":512},[167,46666,523],{"class":731},[167,46668,33460],{"class":512},[167,46670,33463],{"class":7246},[167,46672,523],{"class":731},[167,46674,33468],{"class":177},[167,46676,33471],{"class":512},[167,46678,46679,46681,46683,46685],{"class":169,"line":796},[167,46680,35984],{"class":7246},[167,46682,523],{"class":731},[167,46684,35989],{"class":184},[167,46686,33471],{"class":512},[167,46688,46689,46691,46693,46695,46697,46699,46701],{"class":169,"line":802},[167,46690,35996],{"class":7246},[167,46692,523],{"class":731},[167,46694,33498],{"class":512},[167,46696,33501],{"class":7246},[167,46698,523],{"class":731},[167,46700,37450],{"class":184},[167,46702,33509],{"class":512},[167,46704,46705,46707,46709,46711],{"class":169,"line":808},[167,46706,36013],{"class":7246},[167,46708,523],{"class":731},[167,46710,33481],{"class":184},[167,46712,873],{"class":512},[167,46714,46715,46717,46719,46721,46723,46725],{"class":169,"line":814},[167,46716,36024],{"class":512},[167,46718,523],{"class":731},[167,46720,33539],{"class":512},[167,46722,33542],{"class":7246},[167,46724,523],{"class":731},[167,46726,36035],{"class":512},[167,46728,46729],{"class":169,"line":820},[167,46730,36040],{"class":2268},[167,46732,46733,46735,46737,46739],{"class":169,"line":826},[167,46734,36045],{"class":7246},[167,46736,523],{"class":731},[167,46738,2418],{"class":184},[167,46740,33471],{"class":512},[167,46742,46743,46745,46747,46749],{"class":169,"line":832},[167,46744,36056],{"class":7246},[167,46746,523],{"class":731},[167,46748,33481],{"class":184},[167,46750,33471],{"class":512},[167,46752,46753,46755,46757,46759],{"class":169,"line":837},[167,46754,36067],{"class":7246},[167,46756,523],{"class":731},[167,46758,1154],{"class":184},[167,46760,873],{"class":512},[167,46762,46763,46765],{"class":169,"line":842},[167,46764,6122],{"class":731},[167,46766,36080],{"class":512},[167,46768,46769],{"class":169,"line":860},[167,46770,741],{"emptyLinePlaceholder":740},[167,46772,46773],{"class":169,"line":876},[167,46774,36089],{"class":2268},[167,46776,46777,46779,46781],{"class":169,"line":887},[167,46778,845],{"class":731},[167,46780,36096],{"class":173},[167,46782,36099],{"class":512},[167,46784,46785],{"class":169,"line":892},[167,46786,36104],{"class":2268},[167,46788,46789,46791,46793,46795,46797,46799,46801],{"class":169,"line":907},[167,46790,33243],{"class":512},[167,46792,523],{"class":731},[167,46794,33250],{"class":177},[167,46796,3758],{"class":731},[167,46798,33255],{"class":512},[167,46800,3755],{"class":731},[167,46802,36121],{"class":177},[167,46804,46805,46807,46809],{"class":169,"line":920},[167,46806,33295],{"class":512},[167,46808,523],{"class":731},[167,46810,34293],{"class":512},[167,46812,46813],{"class":169,"line":933},[167,46814,741],{"emptyLinePlaceholder":740},[167,46816,46817],{"class":169,"line":946},[167,46818,36138],{"class":2268},[167,46820,46821,46823,46825],{"class":169,"line":959},[167,46822,36143],{"class":512},[167,46824,523],{"class":731},[167,46826,34346],{"class":184},[167,46828,46829,46831,46833],{"class":169,"line":964},[167,46830,36152],{"class":512},[167,46832,523],{"class":731},[167,46834,5120],{"class":184},[167,46836,46837],{"class":169,"line":987},[167,46838,741],{"emptyLinePlaceholder":740},[167,46840,46841],{"class":169,"line":993},[167,46842,36165],{"class":2268},[167,46844,46845],{"class":169,"line":998},[167,46846,36170],{"class":2268},[167,46848,46849],{"class":169,"line":1010},[167,46850,36175],{"class":2268},[167,46852,46853,46855],{"class":169,"line":1022},[167,46854,36180],{"class":731},[167,46856,34887],{"class":512},[167,46858,46859],{"class":169,"line":1027},[167,46860,36187],{"class":2268},[167,46862,46863,46865,46867,46869],{"class":169,"line":1032},[167,46864,5437],{"class":731},[167,46866,36194],{"class":512},[167,46868,973],{"class":731},[167,46870,36199],{"class":512},[167,46872,46873,46875,46877],{"class":169,"line":1049},[167,46874,36204],{"class":512},[167,46876,523],{"class":731},[167,46878,36209],{"class":512},[167,46880,46881,46883,46885],{"class":169,"line":10005},[167,46882,36214],{"class":512},[167,46884,523],{"class":731},[167,46886,36219],{"class":512},[167,46888,46889],{"class":169,"line":10011},[167,46890,36224],{"class":2268},[167,46892,46893],{"class":169,"line":10038},[167,46894,34878],{"class":512},[167,46896,46897],{"class":169,"line":10043},[167,46898,36233],{"class":2268},[167,46900,46901,46903,46905],{"class":169,"line":10049},[167,46902,34663],{"class":512},[167,46904,523],{"class":731},[167,46906,36242],{"class":512},[167,46908,46909],{"class":169,"line":10061},[167,46910,36247],{"class":2268},[167,46912,46913,46915,46917,46919,46921,46923,46925],{"class":169,"line":10073},[167,46914,34680],{"class":512},[167,46916,523],{"class":731},[167,46918,34685],{"class":512},[167,46920,34688],{"class":7246},[167,46922,523],{"class":731},[167,46924,2418],{"class":184},[167,46926,873],{"class":512},[167,46928,46929],{"class":169,"line":10085},[167,46930,36268],{"class":2268},[167,46932,46933],{"class":169,"line":11744},[167,46934,36273],{"class":2268},[167,46936,46937],{"class":169,"line":11769},[167,46938,36278],{"class":2268},[167,46940,46941,46943,46945,46947,46949],{"class":169,"line":11792},[167,46942,36283],{"class":512},[167,46944,11505],{"class":731},[167,46946,34790],{"class":512},[167,46948,4985],{"class":731},[167,46950,36292],{"class":512},[167,46952,46953],{"class":169,"line":11816},[167,46954,36297],{"class":2268},[167,46956,46957,46959,46961,46963,46965],{"class":169,"line":11821},[167,46958,36302],{"class":512},[167,46960,11505],{"class":731},[167,46962,36307],{"class":512},[167,46964,1154],{"class":184},[167,46966,873],{"class":512},[167,46968,46969],{"class":169,"line":11826},[167,46970,741],{"emptyLinePlaceholder":740},[167,46972,46973],{"class":169,"line":11831},[167,46974,36320],{"class":2268},[167,46976,46977,46979,46981,46983,46985],{"class":169,"line":11840},[167,46978,36325],{"class":512},[167,46980,523],{"class":731},[167,46982,36330],{"class":512},[167,46984,2784],{"class":731},[167,46986,36335],{"class":512},[167,46988,46989],{"class":169,"line":11845},[167,46990,36340],{"class":2268},[167,46992,46993,46995,46997,46999],{"class":169,"line":11851},[167,46994,34454],{"class":184},[167,46996,898],{"class":512},[167,46998,36349],{"class":177},[167,47000,36352],{"class":512},[167,47002,47003],{"class":169,"line":11872},[167,47004,741],{"emptyLinePlaceholder":740},[167,47006,47007],{"class":169,"line":11878},[167,47008,36361],{"class":2268},[167,47010,47011,47013,47015,47017,47019],{"class":169,"line":11892},[167,47012,1035],{"class":731},[167,47014,1038],{"class":184},[167,47016,4985],{"class":731},[167,47018,33231],{"class":177},[167,47020,857],{"class":512},[167,47022,47023],{"class":169,"line":11898},[167,47024,36378],{"class":2268},[167,47026,47027,47029,47031],{"class":169,"line":11925},[167,47028,33295],{"class":512},[167,47030,523],{"class":731},[167,47032,46551],{"class":512},[167,47034,47035],{"class":169,"line":11934},[167,47036,36391],{"class":2268},[167,47038,47039],{"class":169,"line":11940},[167,47040,36396],{"class":2268},[167,47042,47043,47045,47047],{"class":169,"line":11948},[167,47044,36401],{"class":512},[167,47046,36404],{"class":177},[167,47048,32505],{"class":512},[167,47050,47051],{"class":169,"line":11953},[167,47052,36411],{"class":2268},[167,47054,47055,47057,47059],{"class":169,"line":18630},[167,47056,36024],{"class":512},[167,47058,523],{"class":731},[167,47060,36420],{"class":512},[167,47062,47063],{"class":169,"line":18636},[167,47064,36425],{"class":2268},[167,47066,47067],{"class":169,"line":18659},[167,47068,36430],{"class":512},[167,47070,47071],{"class":169,"line":18665},[167,47072,741],{"emptyLinePlaceholder":740},[167,47074,47075],{"class":169,"line":18688},[167,47076,36439],{"class":2268},[167,47078,47079],{"class":169,"line":18702},[167,47080,36444],{"class":2268},[167,47082,47083,47085,47087,47089,47091,47093,47095],{"class":169,"line":18722},[167,47084,33243],{"class":512},[167,47086,523],{"class":731},[167,47088,33250],{"class":177},[167,47090,3758],{"class":731},[167,47092,33255],{"class":512},[167,47094,3755],{"class":731},[167,47096,36121],{"class":177},[167,47098,47099,47101,47103],{"class":169,"line":18728},[167,47100,33295],{"class":512},[167,47102,523],{"class":731},[167,47104,34293],{"class":512},[167,47106,47107],{"class":169,"line":18739},[167,47108,36473],{"class":2268},[167,47110,47111],{"class":169,"line":18762},[167,47112,36478],{"class":2268},[167,47114,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159],{"class":169,"line":18784},[167,47116,36483],{"class":512},[167,47118,523],{"class":731},[167,47120,3090],{"class":512},[167,47122,36490],{"class":177},[167,47124,2578],{"class":512},[167,47126,36495],{"class":177},[167,47128,2578],{"class":512},[167,47130,36500],{"class":177},[167,47132,2578],{"class":512},[167,47134,36505],{"class":177},[167,47136,2578],{"class":512},[167,47138,36510],{"class":177},[167,47140,2578],{"class":512},[167,47142,36515],{"class":177},[167,47144,2578],{"class":512},[167,47146,36520],{"class":177},[167,47148,2578],{"class":512},[167,47150,36525],{"class":177},[167,47152,2578],{"class":512},[167,47154,36530],{"class":177},[167,47156,2578],{"class":512},[167,47158,36535],{"class":177},[167,47160,35249],{"class":512},[167,47162,47163,47165],{"class":169,"line":18789},[167,47164,36180],{"class":731},[167,47166,34887],{"class":512},[167,47168,47169],{"class":169,"line":18795},[167,47170,36548],{"class":2268},[167,47172,47173,47175,47177,47179],{"class":169,"line":18809},[167,47174,5437],{"class":731},[167,47176,36555],{"class":512},[167,47178,973],{"class":731},[167,47180,36199],{"class":512},[167,47182,47183,47185,47187],{"class":169,"line":18822},[167,47184,34613],{"class":512},[167,47186,523],{"class":731},[167,47188,34618],{"class":512},[167,47190,47191,47193,47195],{"class":169,"line":18827},[167,47192,34628],{"class":512},[167,47194,523],{"class":731},[167,47196,34633],{"class":512},[167,47198,47199],{"class":169,"line":18841},[167,47200,741],{"emptyLinePlaceholder":740},[167,47202,47203],{"class":169,"line":18846},[167,47204,36584],{"class":2268},[167,47206,47207],{"class":169,"line":18852},[167,47208,34878],{"class":512},[167,47210,47211],{"class":169,"line":18857},[167,47212,36593],{"class":2268},[167,47214,47215,47217,47219],{"class":169,"line":18871},[167,47216,34663],{"class":512},[167,47218,523],{"class":731},[167,47220,34668],{"class":512},[167,47222,47223],{"class":169,"line":18876},[167,47224,36606],{"class":2268},[167,47226,47227,47229,47231,47233,47235,47237,47239],{"class":169,"line":18881},[167,47228,34680],{"class":512},[167,47230,523],{"class":731},[167,47232,34685],{"class":512},[167,47234,34688],{"class":7246},[167,47236,523],{"class":731},[167,47238,2418],{"class":184},[167,47240,873],{"class":512},[167,47242,47243],{"class":169,"line":18895},[167,47244,36627],{"class":2268},[167,47246,47247,47249,47251],{"class":169,"line":18907},[167,47248,36632],{"class":512},[167,47250,523],{"class":731},[167,47252,36637],{"class":512},[167,47254,47255,47257,47259],{"class":169,"line":18912},[167,47256,36642],{"class":512},[167,47258,523],{"class":731},[167,47260,36647],{"class":512},[167,47262,47263,47265,47267,47269,47271,47273,47275,47277],{"class":169,"line":18925},[167,47264,36652],{"class":184},[167,47266,898],{"class":512},[167,47268,36657],{"class":177},[167,47270,36660],{"class":512},[167,47272,36663],{"class":177},[167,47274,2578],{"class":512},[167,47276,36668],{"class":177},[167,47278,36671],{"class":512},[494,47280,47282],{"id":47281},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47284,47285],{},"猫狗分类任务",[19,47287,47288],{},"划分数据集和验证集",[26,47290,47292],{"className":723,"code":47291,"language":305,"meta":32,"style":32},"# 创建脚本，用于划分数据集和验证集\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",[34,47293,47294,47299,47306,47311,47322,47329,47333,47343,47357,47366,47370,47375,47385,47405,47409,47414,47424,47435,47448,47452,47457,47466,47476,47487,47491,47496,47506,47510,47515,47520,47525,47530,47535,47539,47549,47576,47589,47601,47628,47633,47638,47652,47657,47669,47684,47699,47707,47711,47716,47722,47734,47747,47752,47757,47762,47812,47818,47822],{"__ignoreMap":32},[167,47295,47296],{"class":169,"line":170},[167,47297,47298],{"class":2268},"# 创建脚本，用于划分数据集和验证集\n",[167,47300,47301,47303],{"class":169,"line":191},[167,47302,732],{"class":731},[167,47304,47305],{"class":512}," os\n",[167,47307,47308],{"class":169,"line":205},[167,47309,47310],{"class":2268},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[167,47312,47313,47315,47318,47320],{"class":169,"line":219},[167,47314,32745],{"class":731},[167,47316,47317],{"class":512}," shutil ",[167,47319,732],{"class":731},[167,47321,33827],{"class":512},[167,47323,47324,47326],{"class":169,"line":230},[167,47325,732],{"class":731},[167,47327,47328],{"class":512}," random\n",[167,47330,47331],{"class":169,"line":241},[167,47332,741],{"emptyLinePlaceholder":740},[167,47334,47335,47337,47340],{"class":169,"line":261},[167,47336,845],{"class":731},[167,47338,47339],{"class":173}," mkfile",[167,47341,47342],{"class":512},"(file):\n",[167,47344,47345,47347,47349,47352,47355],{"class":169,"line":773},[167,47346,5136],{"class":731},[167,47348,40931],{"class":731},[167,47350,47351],{"class":512}," os.path.exists(",[167,47353,47354],{"class":7246},"file",[167,47356,984],{"class":512},[167,47358,47359,47362,47364],{"class":169,"line":779},[167,47360,47361],{"class":512},"        os.makedirs(",[167,47363,47354],{"class":7246},[167,47365,873],{"class":512},[167,47367,47368],{"class":169,"line":785},[167,47369,741],{"emptyLinePlaceholder":740},[167,47371,47372],{"class":169,"line":790},[167,47373,47374],{"class":2268},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[167,47376,47377,47380,47382],{"class":169,"line":796},[167,47378,47379],{"class":512},"file_path",[167,47381,523],{"class":731},[167,47383,47384],{"class":177},"'data_cat_dog'\n",[167,47386,47387,47390,47392,47395,47397,47400,47402],{"class":169,"line":802},[167,47388,47389],{"class":512},"flower_class",[167,47391,523],{"class":731},[167,47393,47394],{"class":512},"[cla ",[167,47396,1168],{"class":731},[167,47398,47399],{"class":512}," cla ",[167,47401,973],{"class":731},[167,47403,47404],{"class":512}," os.listdir(file_path)]\n",[167,47406,47407],{"class":169,"line":808},[167,47408,741],{"emptyLinePlaceholder":740},[167,47410,47411],{"class":169,"line":814},[167,47412,47413],{"class":2268},"# 创建训练集train文件夹\n",[167,47415,47416,47419,47422],{"class":169,"line":820},[167,47417,47418],{"class":512},"mkfile(",[167,47420,47421],{"class":177},"'data\u002Ftrain'",[167,47423,873],{"class":512},[167,47425,47426,47428,47430,47432],{"class":169,"line":826},[167,47427,1168],{"class":731},[167,47429,47399],{"class":512},[167,47431,973],{"class":731},[167,47433,47434],{"class":512}," flower_class:\n",[167,47436,47437,47440,47443,47445],{"class":169,"line":832},[167,47438,47439],{"class":512},"    mkfile(",[167,47441,47442],{"class":177},"'data\u002Ftrain\u002F'",[167,47444,2681],{"class":731},[167,47446,47447],{"class":512},"cla)\n",[167,47449,47450],{"class":169,"line":837},[167,47451,741],{"emptyLinePlaceholder":740},[167,47453,47454],{"class":169,"line":842},[167,47455,47456],{"class":2268},"# 创建验证集val文件夹\n",[167,47458,47459,47461,47464],{"class":169,"line":860},[167,47460,47418],{"class":512},[167,47462,47463],{"class":177},"'data\u002Ftest'",[167,47465,873],{"class":512},[167,47467,47468,47470,47472,47474],{"class":169,"line":876},[167,47469,1168],{"class":731},[167,47471,47399],{"class":512},[167,47473,973],{"class":731},[167,47475,47434],{"class":512},[167,47477,47478,47480,47483,47485],{"class":169,"line":887},[167,47479,47439],{"class":512},[167,47481,47482],{"class":177},"'data\u002Ftest\u002F'",[167,47484,2681],{"class":731},[167,47486,47447],{"class":512},[167,47488,47489],{"class":169,"line":892},[167,47490,741],{"emptyLinePlaceholder":740},[167,47492,47493],{"class":169,"line":907},[167,47494,47495],{"class":2268},"# 划分比例，训练集：测试集=9：1\n",[167,47497,47498,47501,47503],{"class":169,"line":920},[167,47499,47500],{"class":512},"split_rate",[167,47502,523],{"class":731},[167,47504,47505],{"class":184},"0.1\n",[167,47507,47508],{"class":169,"line":933},[167,47509,741],{"emptyLinePlaceholder":740},[167,47511,47512],{"class":169,"line":946},[167,47513,47514],{"class":2268},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[167,47516,47517],{"class":169,"line":959},[167,47518,47519],{"class":2268},"# cla_path：当前类别的原始图片路径\n",[167,47521,47522],{"class":169,"line":964},[167,47523,47524],{"class":2268},"# images：当前类别下所有图片的文件名列表\n",[167,47526,47527],{"class":169,"line":987},[167,47528,47529],{"class":2268},"# num：该类别图片总数\n",[167,47531,47532],{"class":169,"line":993},[167,47533,47534],{"class":2268},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[167,47536,47537],{"class":169,"line":998},[167,47538,741],{"emptyLinePlaceholder":740},[167,47540,47541,47543,47545,47547],{"class":169,"line":1010},[167,47542,1168],{"class":731},[167,47544,47399],{"class":512},[167,47546,973],{"class":731},[167,47548,47434],{"class":512},[167,47550,47551,47554,47556,47559,47561,47564,47567,47569,47571,47573],{"class":169,"line":1022},[167,47552,47553],{"class":512},"    cla_path ",[167,47555,523],{"class":731},[167,47557,47558],{"class":512}," file_path ",[167,47560,2681],{"class":731},[167,47562,47563],{"class":177}," '\u002F'",[167,47565,47566],{"class":731}," +",[167,47568,47399],{"class":512},[167,47570,2681],{"class":731},[167,47572,47563],{"class":177},[167,47574,47575],{"class":2268},"  # 某一类别的子目录\n",[167,47577,47578,47581,47583,47586],{"class":169,"line":1027},[167,47579,47580],{"class":512},"    images ",[167,47582,523],{"class":731},[167,47584,47585],{"class":512}," os.listdir(cla_path)  ",[167,47587,47588],{"class":2268},"# iamges 列表存储了该目录下所有图像的名称\n",[167,47590,47591,47594,47596,47598],{"class":169,"line":1032},[167,47592,47593],{"class":512},"    num ",[167,47595,523],{"class":731},[167,47597,9361],{"class":184},[167,47599,47600],{"class":512},"(images)\n",[167,47602,47603,47606,47608,47611,47613,47615,47617,47620,47622,47625],{"class":169,"line":1049},[167,47604,47605],{"class":512},"    eval_index ",[167,47607,523],{"class":731},[167,47609,47610],{"class":512}," random.sample(images, ",[167,47612,2693],{"class":7246},[167,47614,523],{"class":731},[167,47616,2216],{"class":184},[167,47618,47619],{"class":512},"(num ",[167,47621,2655],{"class":731},[167,47623,47624],{"class":512}," split_rate))  ",[167,47626,47627],{"class":2268},"# 从images列表中随机抽取 k 个图像名称\n",[167,47629,47630],{"class":169,"line":10005},[167,47631,47632],{"class":2268},"    # 遍历该类别下的所有图片\n",[167,47634,47635],{"class":169,"line":10011},[167,47636,47637],{"class":2268},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[167,47639,47640,47642,47645,47647,47649],{"class":169,"line":10038},[167,47641,967],{"class":731},[167,47643,47644],{"class":512}," index, image ",[167,47646,973],{"class":731},[167,47648,33611],{"class":184},[167,47650,47651],{"class":512},"(images):\n",[167,47653,47654],{"class":169,"line":10043},[167,47655,47656],{"class":2268},"        # eval_index 中保存验证集val的图像名称\n",[167,47658,47659,47661,47664,47666],{"class":169,"line":10049},[167,47660,4540],{"class":731},[167,47662,47663],{"class":512}," image ",[167,47665,973],{"class":731},[167,47667,47668],{"class":512}," eval_index:\n",[167,47670,47671,47674,47676,47679,47681],{"class":169,"line":10061},[167,47672,47673],{"class":512},"            image_path ",[167,47675,523],{"class":731},[167,47677,47678],{"class":512}," cla_path ",[167,47680,2681],{"class":731},[167,47682,47683],{"class":512}," image\n",[167,47685,47686,47689,47691,47694,47696],{"class":169,"line":10073},[167,47687,47688],{"class":512},"            new_path ",[167,47690,523],{"class":731},[167,47692,47693],{"class":177}," 'data\u002Ftest\u002F'",[167,47695,47566],{"class":731},[167,47697,47698],{"class":512}," cla\n",[167,47700,47701,47704],{"class":169,"line":10085},[167,47702,47703],{"class":512},"            copy(image_path, new_path)  ",[167,47705,47706],{"class":2268},"# 将选中的图像复制到新路径\n",[167,47708,47709],{"class":169,"line":11744},[167,47710,741],{"emptyLinePlaceholder":740},[167,47712,47713],{"class":169,"line":11769},[167,47714,47715],{"class":2268},"        # 其余的图像保存在训练集train中\n",[167,47717,47718,47720],{"class":169,"line":11792},[167,47719,4577],{"class":731},[167,47721,857],{"class":512},[167,47723,47724,47726,47728,47730,47732],{"class":169,"line":11816},[167,47725,47673],{"class":512},[167,47727,523],{"class":731},[167,47729,47678],{"class":512},[167,47731,2681],{"class":731},[167,47733,47683],{"class":512},[167,47735,47736,47738,47740,47743,47745],{"class":169,"line":11821},[167,47737,47688],{"class":512},[167,47739,523],{"class":731},[167,47741,47742],{"class":177}," 'data\u002Ftrain\u002F'",[167,47744,47566],{"class":731},[167,47746,47698],{"class":512},[167,47748,47749],{"class":169,"line":11826},[167,47750,47751],{"class":512},"            copy(image_path, new_path)\n",[167,47753,47754],{"class":169,"line":11831},[167,47755,47756],{"class":2268},"            # 打印进度条信息\n",[167,47758,47759],{"class":169,"line":11840},[167,47760,47761],{"class":2268},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[167,47763,47764,47766,47768,47770,47773,47775,47777,47780,47782,47784,47786,47789,47792,47794,47796,47799,47802,47804,47806,47809],{"class":169,"line":11845},[167,47765,34454],{"class":184},[167,47767,898],{"class":512},[167,47769,2452],{"class":177},[167,47771,47772],{"class":184},"\\r",[167,47774,3090],{"class":177},[167,47776,34462],{"class":184},[167,47778,47779],{"class":177},"] processing [",[167,47781,34462],{"class":184},[167,47783,2784],{"class":177},[167,47785,34462],{"class":184},[167,47787,47788],{"class":177},"]\"",[167,47790,47791],{"class":512},".format(cla, index ",[167,47793,2681],{"class":731},[167,47795,27138],{"class":184},[167,47797,47798],{"class":512},", num), ",[167,47800,47801],{"class":7246},"end",[167,47803,523],{"class":731},[167,47805,9682],{"class":177},[167,47807,47808],{"class":512},")  ",[167,47810,47811],{"class":2268},"# processing bar\n",[167,47813,47814,47816],{"class":169,"line":11851},[167,47815,895],{"class":184},[167,47817,4020],{"class":512},[167,47819,47820],{"class":169,"line":11872},[167,47821,741],{"emptyLinePlaceholder":740},[167,47823,47824,47826,47828,47831],{"class":169,"line":11878},[167,47825,1606],{"class":184},[167,47827,898],{"class":512},[167,47829,47830],{"class":177},"\"processing done!\"",[167,47832,873],{"class":512},[19,47834,47835],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24024,47837,47839],{"id":47838},"_242模型代码","2.4.2.模型代码",[19,47841,47842],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,47844,47846],{"className":723,"code":47845,"language":305,"meta":32,"style":32},"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",[34,47847,47848,47854,47864,47874,47878,47894,47902,47916,47926,47930,47960,47964,47998,48044,48048,48082,48128,48132,48136,48170,48200,48204,48212,48226,48248,48270,48288,48292,48306,48310,48314,48330,48334,48342,48356,48366,48410,48414,48442,48446,48456,48484,48488,48524,48528,48556,48560,48570,48602,48634,48662,48666,48676,48708,48740,48772,48804,48836,48864,48868,48878,48910,48942,48954,48958,48970,48974,48978,48990,48998,49018,49022,49026,49030,49034,49038,49042,49056,49064,49072,49084,49098,49106,49110,49118,49128,49138,49148,49158,49168,49174,49178,49182,49194,49214,49222],{"__ignoreMap":32},[167,47849,47850,47852],{"class":169,"line":170},[167,47851,732],{"class":731},[167,47853,32404],{"class":512},[167,47855,47856,47858,47860,47862],{"class":169,"line":191},[167,47857,32745],{"class":731},[167,47859,32748],{"class":512},[167,47861,732],{"class":731},[167,47863,32753],{"class":512},[167,47865,47866,47868,47870,47872],{"class":169,"line":205},[167,47867,32745],{"class":731},[167,47869,32765],{"class":512},[167,47871,732],{"class":731},[167,47873,32770],{"class":512},[167,47875,47876],{"class":169,"line":219},[167,47877,741],{"emptyLinePlaceholder":740},[167,47879,47880,47882,47884,47886,47888,47890,47892],{"class":169,"line":230},[167,47881,16721],{"class":731},[167,47883,43493],{"class":173},[167,47885,898],{"class":512},[167,47887,32786],{"class":173},[167,47889,2758],{"class":512},[167,47891,32791],{"class":173},[167,47893,984],{"class":512},[167,47895,47896,47898,47900],{"class":169,"line":241},[167,47897,32808],{"class":731},[167,47899,32811],{"class":184},[167,47901,43512],{"class":512},[167,47903,47904,47906,47908,47910,47912,47914],{"class":169,"line":261},[167,47905,32824],{"class":184},[167,47907,43519],{"class":512},[167,47909,32830],{"class":184},[167,47911,32833],{"class":512},[167,47913,32836],{"class":184},[167,47915,4020],{"class":512},[167,47917,47918,47920,47922,47924],{"class":169,"line":773},[167,47919,32852],{"class":184},[167,47921,36773],{"class":512},[167,47923,523],{"class":731},[167,47925,36778],{"class":512},[167,47927,47928],{"class":169,"line":779},[167,47929,43542],{"class":2268},[167,47931,47932,47934,47936,47938,47940,47942,47944,47946,47948,47950,47952,47954,47956,47958],{"class":169,"line":785},[167,47933,32852],{"class":184},[167,47935,43549],{"class":512},[167,47937,523],{"class":731},[167,47939,32860],{"class":512},[167,47941,32863],{"class":7246},[167,47943,523],{"class":731},[167,47945,43560],{"class":512},[167,47947,32872],{"class":7246},[167,47949,523],{"class":731},[167,47951,43567],{"class":512},[167,47953,32881],{"class":7246},[167,47955,523],{"class":731},[167,47957,2418],{"class":184},[167,47959,873],{"class":512},[167,47961,47962],{"class":169,"line":790},[167,47963,43580],{"class":2268},[167,47965,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984,47986,47988,47990,47992,47994,47996],{"class":169,"line":796},[167,47967,32852],{"class":184},[167,47969,43587],{"class":512},[167,47971,523],{"class":731},[167,47973,32860],{"class":512},[167,47975,32863],{"class":7246},[167,47977,523],{"class":731},[167,47979,43560],{"class":512},[167,47981,32872],{"class":7246},[167,47983,523],{"class":731},[167,47985,43604],{"class":512},[167,47987,1154],{"class":184},[167,47989,43609],{"class":512},[167,47991,32881],{"class":7246},[167,47993,523],{"class":731},[167,47995,2418],{"class":184},[167,47997,873],{"class":512},[167,47999,48000,48002,48004,48006,48008,48010,48012,48014,48016,48018,48020,48022,48024,48026,48028,48030,48032,48034,48036,48038,48040,48042],{"class":169,"line":802},[167,48001,32852],{"class":184},[167,48003,43624],{"class":512},[167,48005,523],{"class":731},[167,48007,32860],{"class":512},[167,48009,32863],{"class":7246},[167,48011,523],{"class":731},[167,48013,43604],{"class":512},[167,48015,1154],{"class":184},[167,48017,43609],{"class":512},[167,48019,32872],{"class":7246},[167,48021,523],{"class":731},[167,48023,43604],{"class":512},[167,48025,2418],{"class":184},[167,48027,43609],{"class":512},[167,48029,32881],{"class":7246},[167,48031,523],{"class":731},[167,48033,2281],{"class":184},[167,48035,2578],{"class":512},[167,48037,32890],{"class":7246},[167,48039,523],{"class":731},[167,48041,2418],{"class":184},[167,48043,873],{"class":512},[167,48045,48046],{"class":169,"line":808},[167,48047,43669],{"class":2268},[167,48049,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076,48078,48080],{"class":169,"line":814},[167,48051,32852],{"class":184},[167,48053,43676],{"class":512},[167,48055,523],{"class":731},[167,48057,32860],{"class":512},[167,48059,32863],{"class":7246},[167,48061,523],{"class":731},[167,48063,43560],{"class":512},[167,48065,32872],{"class":7246},[167,48067,523],{"class":731},[167,48069,43693],{"class":512},[167,48071,1154],{"class":184},[167,48073,43609],{"class":512},[167,48075,32881],{"class":7246},[167,48077,523],{"class":731},[167,48079,2418],{"class":184},[167,48081,873],{"class":512},[167,48083,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114,48116,48118,48120,48122,48124,48126],{"class":169,"line":820},[167,48085,32852],{"class":184},[167,48087,43712],{"class":512},[167,48089,523],{"class":731},[167,48091,32860],{"class":512},[167,48093,32863],{"class":7246},[167,48095,523],{"class":731},[167,48097,43693],{"class":512},[167,48099,1154],{"class":184},[167,48101,43609],{"class":512},[167,48103,32872],{"class":7246},[167,48105,523],{"class":731},[167,48107,43693],{"class":512},[167,48109,2418],{"class":184},[167,48111,43609],{"class":512},[167,48113,32881],{"class":7246},[167,48115,523],{"class":731},[167,48117,2519],{"class":184},[167,48119,2578],{"class":512},[167,48121,32890],{"class":7246},[167,48123,523],{"class":731},[167,48125,2287],{"class":184},[167,48127,873],{"class":512},[167,48129,48130],{"class":169,"line":826},[167,48131,43757],{"class":2268},[167,48133,48134],{"class":169,"line":832},[167,48135,43762],{"class":2268},[167,48137,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168],{"class":169,"line":837},[167,48139,32852],{"class":184},[167,48141,43769],{"class":512},[167,48143,523],{"class":731},[167,48145,36831],{"class":512},[167,48147,32881],{"class":7246},[167,48149,523],{"class":731},[167,48151,2281],{"class":184},[167,48153,2578],{"class":512},[167,48155,32936],{"class":7246},[167,48157,523],{"class":731},[167,48159,2418],{"class":184},[167,48161,2578],{"class":512},[167,48163,32890],{"class":7246},[167,48165,523],{"class":731},[167,48167,2418],{"class":184},[167,48169,873],{"class":512},[167,48171,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192,48194,48196,48198],{"class":169,"line":842},[167,48173,32852],{"class":184},[167,48175,43804],{"class":512},[167,48177,523],{"class":731},[167,48179,32860],{"class":512},[167,48181,32863],{"class":7246},[167,48183,523],{"class":731},[167,48185,43560],{"class":512},[167,48187,32872],{"class":7246},[167,48189,523],{"class":731},[167,48191,43821],{"class":512},[167,48193,32881],{"class":7246},[167,48195,523],{"class":731},[167,48197,2418],{"class":184},[167,48199,873],{"class":512},[167,48201,48202],{"class":169,"line":860},[167,48203,741],{"emptyLinePlaceholder":740},[167,48205,48206,48208,48210],{"class":169,"line":876},[167,48207,32808],{"class":731},[167,48209,33100],{"class":173},[167,48211,33103],{"class":512},[167,48213,48214,48216,48218,48220,48222,48224],{"class":169,"line":887},[167,48215,43846],{"class":512},[167,48217,523],{"class":731},[167,48219,32830],{"class":184},[167,48221,37186],{"class":512},[167,48223,32830],{"class":184},[167,48225,43857],{"class":512},[167,48227,48228,48230,48232,48234,48236,48238,48240,48242,48244,48246],{"class":169,"line":892},[167,48229,9115],{"class":512},[167,48231,523],{"class":731},[167,48233,32830],{"class":184},[167,48235,37186],{"class":512},[167,48237,32830],{"class":184},[167,48239,43872],{"class":512},[167,48241,32830],{"class":184},[167,48243,37186],{"class":512},[167,48245,32830],{"class":184},[167,48247,43881],{"class":512},[167,48249,48250,48252,48254,48256,48258,48260,48262,48264,48266,48268],{"class":169,"line":907},[167,48251,43886],{"class":512},[167,48253,523],{"class":731},[167,48255,32830],{"class":184},[167,48257,37186],{"class":512},[167,48259,32830],{"class":184},[167,48261,43897],{"class":512},[167,48263,32830],{"class":184},[167,48265,37186],{"class":512},[167,48267,32830],{"class":184},[167,48269,43906],{"class":512},[167,48271,48272,48274,48276,48278,48280,48282,48284,48286],{"class":169,"line":920},[167,48273,43911],{"class":512},[167,48275,523],{"class":731},[167,48277,32830],{"class":184},[167,48279,37186],{"class":512},[167,48281,32830],{"class":184},[167,48283,43922],{"class":512},[167,48285,32830],{"class":184},[167,48287,43927],{"class":512},[167,48289,48290],{"class":169,"line":933},[167,48291,43932],{"class":2268},[167,48293,48294,48296,48298,48300,48302,48304],{"class":169,"line":946},[167,48295,16779],{"class":731},[167,48297,43939],{"class":512},[167,48299,34688],{"class":7246},[167,48301,523],{"class":731},[167,48303,2418],{"class":184},[167,48305,873],{"class":512},[167,48307,48308],{"class":169,"line":959},[167,48309,741],{"emptyLinePlaceholder":740},[167,48311,48312],{"class":169,"line":964},[167,48313,43960],{"class":2268},[167,48315,48316,48318,48320,48322,48324,48326,48328],{"class":169,"line":987},[167,48317,16721],{"class":731},[167,48319,43967],{"class":173},[167,48321,898],{"class":512},[167,48323,32786],{"class":173},[167,48325,2758],{"class":512},[167,48327,32791],{"class":173},[167,48329,984],{"class":512},[167,48331,48332],{"class":169,"line":993},[167,48333,43982],{"class":2268},[167,48335,48336,48338,48340],{"class":169,"line":998},[167,48337,32808],{"class":731},[167,48339,32811],{"class":184},[167,48341,43991],{"class":512},[167,48343,48344,48346,48348,48350,48352,48354],{"class":169,"line":1010},[167,48345,32824],{"class":184},[167,48347,43998],{"class":512},[167,48349,32830],{"class":184},[167,48351,32833],{"class":512},[167,48353,32836],{"class":184},[167,48355,4020],{"class":512},[167,48357,48358,48360,48362,48364],{"class":169,"line":1022},[167,48359,32852],{"class":184},[167,48361,44013],{"class":512},[167,48363,523],{"class":731},[167,48365,40010],{"class":512},[167,48367,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392,48394,48396,48398,48400,48402,48404,48406,48408],{"class":169,"line":1027},[167,48369,40015],{"class":512},[167,48371,32863],{"class":7246},[167,48373,523],{"class":731},[167,48375,2281],{"class":184},[167,48377,2578],{"class":512},[167,48379,32872],{"class":7246},[167,48381,523],{"class":731},[167,48383,2405],{"class":184},[167,48385,2578],{"class":512},[167,48387,32881],{"class":7246},[167,48389,523],{"class":731},[167,48391,2569],{"class":184},[167,48393,2578],{"class":512},[167,48395,32936],{"class":7246},[167,48397,523],{"class":731},[167,48399,2287],{"class":184},[167,48401,2578],{"class":512},[167,48403,32890],{"class":7246},[167,48405,523],{"class":731},[167,48407,2281],{"class":184},[167,48409,40048],{"class":512},[167,48411,48412],{"class":169,"line":1032},[167,48413,40053],{"class":512},[167,48415,48416,48418,48420,48422,48424,48426,48428,48430,48432,48434,48436,48438,48440],{"class":169,"line":1049},[167,48417,40098],{"class":512},[167,48419,32881],{"class":7246},[167,48421,523],{"class":731},[167,48423,2281],{"class":184},[167,48425,2578],{"class":512},[167,48427,32936],{"class":7246},[167,48429,523],{"class":731},[167,48431,2287],{"class":184},[167,48433,2578],{"class":512},[167,48435,32890],{"class":7246},[167,48437,523],{"class":731},[167,48439,2418],{"class":184},[167,48441,873],{"class":512},[167,48443,48444],{"class":169,"line":10005},[167,48445,40127],{"class":512},[167,48447,48448,48450,48452,48454],{"class":169,"line":10011},[167,48449,32852],{"class":184},[167,48451,44104],{"class":512},[167,48453,523],{"class":731},[167,48455,40010],{"class":512},[167,48457,48458,48460,48462,48464,48466,48468,48470,48472,48474,48476,48478,48480,48482],{"class":169,"line":10038},[167,48459,40015],{"class":512},[167,48461,32863],{"class":7246},[167,48463,523],{"class":731},[167,48465,2405],{"class":184},[167,48467,2578],{"class":512},[167,48469,32872],{"class":7246},[167,48471,523],{"class":731},[167,48473,2405],{"class":184},[167,48475,2578],{"class":512},[167,48477,32881],{"class":7246},[167,48479,523],{"class":731},[167,48481,2418],{"class":184},[167,48483,40048],{"class":512},[167,48485,48486],{"class":169,"line":10043},[167,48487,40053],{"class":512},[167,48489,48490,48492,48494,48496,48498,48500,48502,48504,48506,48508,48510,48512,48514,48516,48518,48520,48522],{"class":169,"line":10049},[167,48491,40015],{"class":512},[167,48493,32863],{"class":7246},[167,48495,523],{"class":731},[167,48497,2405],{"class":184},[167,48499,2578],{"class":512},[167,48501,32872],{"class":7246},[167,48503,523],{"class":731},[167,48505,44159],{"class":184},[167,48507,2578],{"class":512},[167,48509,32881],{"class":7246},[167,48511,523],{"class":731},[167,48513,2281],{"class":184},[167,48515,2578],{"class":512},[167,48517,32890],{"class":7246},[167,48519,523],{"class":731},[167,48521,2418],{"class":184},[167,48523,40048],{"class":512},[167,48525,48526],{"class":169,"line":10061},[167,48527,40053],{"class":512},[167,48529,48530,48532,48534,48536,48538,48540,48542,48544,48546,48548,48550,48552,48554],{"class":169,"line":10073},[167,48531,40098],{"class":512},[167,48533,32881],{"class":7246},[167,48535,523],{"class":731},[167,48537,2281],{"class":184},[167,48539,2578],{"class":512},[167,48541,32936],{"class":7246},[167,48543,523],{"class":731},[167,48545,2287],{"class":184},[167,48547,2578],{"class":512},[167,48549,32890],{"class":7246},[167,48551,523],{"class":731},[167,48553,2418],{"class":184},[167,48555,873],{"class":512},[167,48557,48558],{"class":169,"line":10085},[167,48559,40127],{"class":512},[167,48561,48562,48564,48566,48568],{"class":169,"line":11744},[167,48563,32852],{"class":184},[167,48565,44220],{"class":512},[167,48567,523],{"class":731},[167,48569,40010],{"class":512},[167,48571,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600],{"class":169,"line":11769},[167,48573,44229],{"class":512},[167,48575,44159],{"class":184},[167,48577,2578],{"class":512},[167,48579,2405],{"class":184},[167,48581,44238],{"class":512},[167,48583,2411],{"class":184},[167,48585,2578],{"class":512},[167,48587,34074],{"class":184},[167,48589,44247],{"class":512},[167,48591,2801],{"class":184},[167,48593,2578],{"class":512},[167,48595,2399],{"class":184},[167,48597,44256],{"class":512},[167,48599,2399],{"class":184},[167,48601,40048],{"class":512},[167,48603,48604,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632],{"class":169,"line":11792},[167,48605,44229],{"class":512},[167,48607,36872],{"class":184},[167,48609,2578],{"class":512},[167,48611,34074],{"class":184},[167,48613,44238],{"class":512},[167,48615,34074],{"class":184},[167,48617,2578],{"class":512},[167,48619,44159],{"class":184},[167,48621,44247],{"class":512},[167,48623,2399],{"class":184},[167,48625,2578],{"class":512},[167,48627,2411],{"class":184},[167,48629,44256],{"class":512},[167,48631,2405],{"class":184},[167,48633,40048],{"class":512},[167,48635,48636,48638,48640,48642,48644,48646,48648,48650,48652,48654,48656,48658,48660],{"class":169,"line":11816},[167,48637,40098],{"class":512},[167,48639,32881],{"class":7246},[167,48641,523],{"class":731},[167,48643,2281],{"class":184},[167,48645,2578],{"class":512},[167,48647,32936],{"class":7246},[167,48649,523],{"class":731},[167,48651,2287],{"class":184},[167,48653,2578],{"class":512},[167,48655,32890],{"class":7246},[167,48657,523],{"class":731},[167,48659,2418],{"class":184},[167,48661,873],{"class":512},[167,48663,48664],{"class":169,"line":11821},[167,48665,40127],{"class":512},[167,48667,48668,48670,48672,48674],{"class":169,"line":11826},[167,48669,32852],{"class":184},[167,48671,44331],{"class":512},[167,48673,523],{"class":731},[167,48675,40010],{"class":512},[167,48677,48678,48680,48682,48684,48686,48688,48690,48692,48694,48696,48698,48700,48702,48704,48706],{"class":169,"line":11831},[167,48679,44229],{"class":512},[167,48681,44342],{"class":184},[167,48683,2578],{"class":512},[167,48685,44159],{"class":184},[167,48687,44238],{"class":512},[167,48689,2411],{"class":184},[167,48691,2578],{"class":512},[167,48693,44355],{"class":184},[167,48695,44247],{"class":512},[167,48697,2801],{"class":184},[167,48699,2578],{"class":512},[167,48701,2807],{"class":184},[167,48703,44256],{"class":512},[167,48705,2405],{"class":184},[167,48707,40048],{"class":512},[167,48709,48710,48712,48714,48716,48718,48720,48722,48724,48726,48728,48730,48732,48734,48736,48738],{"class":169,"line":11840},[167,48711,44229],{"class":512},[167,48713,40458],{"class":184},[167,48715,2578],{"class":512},[167,48717,23074],{"class":184},[167,48719,44238],{"class":512},[167,48721,2818],{"class":184},[167,48723,2578],{"class":512},[167,48725,33506],{"class":184},[167,48727,44247],{"class":512},[167,48729,3000],{"class":184},[167,48731,2578],{"class":512},[167,48733,2405],{"class":184},[167,48735,44256],{"class":512},[167,48737,2405],{"class":184},[167,48739,40048],{"class":512},[167,48741,48742,48744,48746,48748,48750,48752,48754,48756,48758,48760,48762,48764,48766,48768,48770],{"class":169,"line":11845},[167,48743,44229],{"class":512},[167,48745,40458],{"class":184},[167,48747,2578],{"class":512},[167,48749,34074],{"class":184},[167,48751,44238],{"class":512},[167,48753,34074],{"class":184},[167,48755,2578],{"class":512},[167,48757,36872],{"class":184},[167,48759,44247],{"class":512},[167,48761,3000],{"class":184},[167,48763,2578],{"class":512},[167,48765,2405],{"class":184},[167,48767,44256],{"class":512},[167,48769,2405],{"class":184},[167,48771,40048],{"class":512},[167,48773,48774,48776,48778,48780,48782,48784,48786,48788,48790,48792,48794,48796,48798,48800,48802],{"class":169,"line":11851},[167,48775,44229],{"class":512},[167,48777,40458],{"class":184},[167,48779,2578],{"class":512},[167,48781,2818],{"class":184},[167,48783,44238],{"class":512},[167,48785,34074],{"class":184},[167,48787,2578],{"class":512},[167,48789,44452],{"class":184},[167,48791,44247],{"class":512},[167,48793,2399],{"class":184},[167,48795,2578],{"class":512},[167,48797,2405],{"class":184},[167,48799,44256],{"class":512},[167,48801,2405],{"class":184},[167,48803,40048],{"class":512},[167,48805,48806,48808,48810,48812,48814,48816,48818,48820,48822,48824,48826,48828,48830,48832,48834],{"class":169,"line":11872},[167,48807,44229],{"class":512},[167,48809,44473],{"class":184},[167,48811,2578],{"class":512},[167,48813,36872],{"class":184},[167,48815,44238],{"class":512},[167,48817,23074],{"class":184},[167,48819,2578],{"class":512},[167,48821,44486],{"class":184},[167,48823,44247],{"class":512},[167,48825,2399],{"class":184},[167,48827,2578],{"class":512},[167,48829,34074],{"class":184},[167,48831,44256],{"class":512},[167,48833,34074],{"class":184},[167,48835,40048],{"class":512},[167,48837,48838,48840,48842,48844,48846,48848,48850,48852,48854,48856,48858,48860,48862],{"class":169,"line":11878},[167,48839,40098],{"class":512},[167,48841,32881],{"class":7246},[167,48843,523],{"class":731},[167,48845,2281],{"class":184},[167,48847,2578],{"class":512},[167,48849,32936],{"class":7246},[167,48851,523],{"class":731},[167,48853,2287],{"class":184},[167,48855,2578],{"class":512},[167,48857,32890],{"class":7246},[167,48859,523],{"class":731},[167,48861,2418],{"class":184},[167,48863,873],{"class":512},[167,48865,48866],{"class":169,"line":11892},[167,48867,40127],{"class":512},[167,48869,48870,48872,48874,48876],{"class":169,"line":11898},[167,48871,32852],{"class":184},[167,48873,44539],{"class":512},[167,48875,523],{"class":731},[167,48877,40010],{"class":512},[167,48879,48880,48882,48884,48886,48888,48890,48892,48894,48896,48898,48900,48902,48904,48906,48908],{"class":169,"line":11925},[167,48881,44229],{"class":512},[167,48883,44550],{"class":184},[167,48885,2578],{"class":512},[167,48887,36872],{"class":184},[167,48889,44238],{"class":512},[167,48891,23074],{"class":184},[167,48893,2578],{"class":512},[167,48895,44486],{"class":184},[167,48897,44247],{"class":512},[167,48899,2399],{"class":184},[167,48901,2578],{"class":512},[167,48903,34074],{"class":184},[167,48905,44256],{"class":512},[167,48907,34074],{"class":184},[167,48909,40048],{"class":512},[167,48911,48912,48914,48916,48918,48920,48922,48924,48926,48928,48930,48932,48934,48936,48938,48940],{"class":169,"line":11934},[167,48913,44229],{"class":512},[167,48915,44550],{"class":184},[167,48917,2578],{"class":512},[167,48919,36942],{"class":184},[167,48921,44238],{"class":512},[167,48923,44159],{"class":184},[167,48925,2578],{"class":512},[167,48927,36942],{"class":184},[167,48929,44247],{"class":512},[167,48931,2807],{"class":184},[167,48933,2578],{"class":512},[167,48935,34074],{"class":184},[167,48937,44256],{"class":512},[167,48939,34074],{"class":184},[167,48941,40048],{"class":512},[167,48943,48944,48946,48948,48950,48952],{"class":169,"line":11940},[167,48945,44613],{"class":512},[167,48947,2418],{"class":184},[167,48949,2578],{"class":512},[167,48951,2418],{"class":184},[167,48953,44622],{"class":512},[167,48955,48956],{"class":169,"line":11948},[167,48957,40791],{"class":512},[167,48959,48960,48962,48964,48966,48968],{"class":169,"line":11953},[167,48961,40796],{"class":512},[167,48963,44633],{"class":184},[167,48965,2578],{"class":512},[167,48967,2287],{"class":184},[167,48969,873],{"class":512},[167,48971,48972],{"class":169,"line":18630},[167,48973,40127],{"class":512},[167,48975,48976],{"class":169,"line":18636},[167,48977,44648],{"class":2268},[167,48979,48980,48982,48984,48986,48988],{"class":169,"line":18659},[167,48981,5437],{"class":731},[167,48983,40869],{"class":512},[167,48985,973],{"class":731},[167,48987,40874],{"class":184},[167,48989,40877],{"class":512},[167,48991,48992,48994,48996],{"class":169,"line":18665},[167,48993,6674],{"class":731},[167,48995,40889],{"class":184},[167,48997,40892],{"class":512},[167,48999,49000,49002,49004,49006,49008,49010,49012,49014,49016],{"class":169,"line":18688},[167,49001,40902],{"class":512},[167,49003,44675],{"class":7246},[167,49005,523],{"class":731},[167,49007,44680],{"class":177},[167,49009,2578],{"class":512},[167,49011,40905],{"class":7246},[167,49013,523],{"class":731},[167,49015,40910],{"class":177},[167,49017,873],{"class":512},[167,49019,49020],{"class":169,"line":18702},[167,49021,44695],{"class":2268},[167,49023,49024],{"class":169,"line":18722},[167,49025,44700],{"class":2268},[167,49027,49028],{"class":169,"line":18728},[167,49029,44705],{"class":2268},[167,49031,49032],{"class":169,"line":18739},[167,49033,44710],{"class":2268},[167,49035,49036],{"class":169,"line":18762},[167,49037,44715],{"class":2268},[167,49039,49040],{"class":169,"line":18784},[167,49041,44720],{"class":2268},[167,49043,49044,49046,49048,49050,49052,49054],{"class":169,"line":18789},[167,49045,40922],{"class":731},[167,49047,40925],{"class":512},[167,49049,40928],{"class":731},[167,49051,40931],{"class":731},[167,49053,40934],{"class":184},[167,49055,857],{"class":512},[167,49057,49058,49060,49062],{"class":169,"line":18795},[167,49059,40946],{"class":512},[167,49061,1154],{"class":184},[167,49063,873],{"class":512},[167,49065,49066,49068,49070],{"class":169,"line":18809},[167,49067,44747],{"class":731},[167,49069,40889],{"class":184},[167,49071,40965],{"class":512},[167,49073,49074,49076,49078,49080,49082],{"class":169,"line":18822},[167,49075,44756],{"class":512},[167,49077,1154],{"class":184},[167,49079,2578],{"class":512},[167,49081,648],{"class":184},[167,49083,873],{"class":512},[167,49085,49086,49088,49090,49092,49094,49096],{"class":169,"line":18827},[167,49087,44769],{"class":731},[167,49089,40925],{"class":512},[167,49091,40928],{"class":731},[167,49093,40931],{"class":731},[167,49095,40934],{"class":184},[167,49097,857],{"class":512},[167,49099,49100,49102,49104],{"class":169,"line":18841},[167,49101,44784],{"class":512},[167,49103,1154],{"class":184},[167,49105,873],{"class":512},[167,49107,49108],{"class":169,"line":18846},[167,49109,37167],{"class":2268},[167,49111,49112,49114,49116],{"class":169,"line":18852},[167,49113,32808],{"class":731},[167,49115,33100],{"class":173},[167,49117,33103],{"class":512},[167,49119,49120,49122,49124,49126],{"class":169,"line":18857},[167,49121,33108],{"class":512},[167,49123,523],{"class":731},[167,49125,32830],{"class":184},[167,49127,44811],{"class":512},[167,49129,49130,49132,49134,49136],{"class":169,"line":18871},[167,49131,33108],{"class":512},[167,49133,523],{"class":731},[167,49135,32830],{"class":184},[167,49137,44822],{"class":512},[167,49139,49140,49142,49144,49146],{"class":169,"line":18876},[167,49141,33108],{"class":512},[167,49143,523],{"class":731},[167,49145,32830],{"class":184},[167,49147,44833],{"class":512},[167,49149,49150,49152,49154,49156],{"class":169,"line":18881},[167,49151,33108],{"class":512},[167,49153,523],{"class":731},[167,49155,32830],{"class":184},[167,49157,44844],{"class":512},[167,49159,49160,49162,49164,49166],{"class":169,"line":18895},[167,49161,33108],{"class":512},[167,49163,523],{"class":731},[167,49165,32830],{"class":184},[167,49167,44855],{"class":512},[167,49169,49170,49172],{"class":169,"line":18907},[167,49171,16779],{"class":731},[167,49173,33216],{"class":512},[167,49175,49176],{"class":169,"line":18912},[167,49177,741],{"emptyLinePlaceholder":740},[167,49179,49180],{"class":169,"line":18925},[167,49181,44870],{"class":2268},[167,49183,49184,49186,49188,49190,49192],{"class":169,"line":18930},[167,49185,1035],{"class":731},[167,49187,1038],{"class":184},[167,49189,4985],{"class":731},[167,49191,33231],{"class":177},[167,49193,857],{"class":512},[167,49195,49196,49198,49200,49202,49204,49206,49208,49210,49212],{"class":169,"line":18935},[167,49197,33243],{"class":512},[167,49199,523],{"class":731},[167,49201,32459],{"class":512},[167,49203,33250],{"class":177},[167,49205,3758],{"class":731},[167,49207,33255],{"class":512},[167,49209,3755],{"class":731},[167,49211,32484],{"class":177},[167,49213,873],{"class":512},[167,49215,49216,49218,49220],{"class":169,"line":18940},[167,49217,33295],{"class":512},[167,49219,523],{"class":731},[167,49221,44911],{"class":512},[167,49223,49224,49226,49228,49230,49232,49234,49236,49238],{"class":169,"line":18953},[167,49225,895],{"class":184},[167,49227,33307],{"class":512},[167,49229,2418],{"class":184},[167,49231,2578],{"class":512},[167,49233,33506],{"class":184},[167,49235,2578],{"class":512},[167,49237,33506],{"class":184},[167,49239,33320],{"class":512},[24024,49241,49243],{"id":49242},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49245,49246],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,49248,49250],{"className":723,"code":49249,"language":305,"meta":32,"style":32},"# 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",[34,49251,49252,49257,49270,49275,49281,49286,49296,49300,49305,49315,49319,49324,49334,49351,49355,49360,49372,49384,49415,49424,49434,49444,49448,49453,49468,49472,49477,49482,49487,49497,49502,49527,49531,49536,49551,49555,49568,49572,49577,49582,49587,49592,49597,49607,49617,49640,49648,49656,49664,49668,49680,49684,49689,49693,49697,49704,49724,49748,49755,49769,49774,49779,49783,49797,49801,49813],{"__ignoreMap":32},[167,49253,49254],{"class":169,"line":170},[167,49255,49256],{"class":2268},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[167,49258,49259,49261,49264,49267],{"class":169,"line":191},[167,49260,32745],{"class":731},[167,49262,49263],{"class":184}," PIL",[167,49265,49266],{"class":731}," import",[167,49268,49269],{"class":512}," Image\n",[167,49271,49272],{"class":169,"line":205},[167,49273,49274],{"class":2268},"# os 用来处理文件夹和文件路径\n",[167,49276,49277,49279],{"class":169,"line":219},[167,49278,732],{"class":731},[167,49280,47305],{"class":512},[167,49282,49283],{"class":169,"line":230},[167,49284,49285],{"class":2268},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[167,49287,49288,49290,49292,49294],{"class":169,"line":241},[167,49289,732],{"class":731},[167,49291,33385],{"class":512},[167,49293,33388],{"class":731},[167,49295,33391],{"class":512},[167,49297,49298],{"class":169,"line":261},[167,49299,741],{"emptyLinePlaceholder":740},[167,49301,49302],{"class":169,"line":773},[167,49303,49304],{"class":2268},"# 文件夹路径，包含所有图片文件\n",[167,49306,49307,49310,49312],{"class":169,"line":779},[167,49308,49309],{"class":512},"folder_path ",[167,49311,523],{"class":731},[167,49313,49314],{"class":177}," 'data_cat_dog'\n",[167,49316,49317],{"class":169,"line":785},[167,49318,741],{"emptyLinePlaceholder":740},[167,49320,49321],{"class":169,"line":790},[167,49322,49323],{"class":2268},"# 初始化累积变量\n",[167,49325,49326,49329,49331],{"class":169,"line":796},[167,49327,49328],{"class":512},"total_pixels ",[167,49330,523],{"class":731},[167,49332,49333],{"class":184}," 0\n",[167,49335,49336,49339,49341,49344,49346,49348],{"class":169,"line":802},[167,49337,49338],{"class":512},"sum_normalized_pixel_values ",[167,49340,523],{"class":731},[167,49342,49343],{"class":512}," np.zeros(",[167,49345,2281],{"class":184},[167,49347,47808],{"class":512},[167,49349,49350],{"class":2268},"# 如果是RGB图像，需要三个通道的均值和方差\n",[167,49352,49353],{"class":169,"line":808},[167,49354,741],{"emptyLinePlaceholder":740},[167,49356,49357],{"class":169,"line":814},[167,49358,49359],{"class":2268},"# 遍历文件夹中的图片文件\n",[167,49361,49362,49364,49367,49369],{"class":169,"line":820},[167,49363,1168],{"class":731},[167,49365,49366],{"class":512}," root, dirs, files ",[167,49368,973],{"class":731},[167,49370,49371],{"class":512}," os.walk(folder_path):\n",[167,49373,49374,49376,49379,49381],{"class":169,"line":826},[167,49375,967],{"class":731},[167,49377,49378],{"class":512}," filename ",[167,49380,973],{"class":731},[167,49382,49383],{"class":512}," files:\n",[167,49385,49386,49388,49391,49394,49396,49399,49401,49404,49406,49409,49412],{"class":169,"line":832},[167,49387,4540],{"class":731},[167,49389,49390],{"class":512}," filename.endswith((",[167,49392,49393],{"class":177},"'.jpg'",[167,49395,14463],{"class":512},[167,49397,49398],{"class":177},"'.jpeg'",[167,49400,14463],{"class":512},[167,49402,49403],{"class":177},"'.png'",[167,49405,14463],{"class":512},[167,49407,49408],{"class":177},"'.bmp'",[167,49410,49411],{"class":512},")):  ",[167,49413,49414],{"class":2268},"# 可根据实际情况添加其他格式\n",[167,49416,49417,49419,49421],{"class":169,"line":837},[167,49418,47673],{"class":512},[167,49420,523],{"class":731},[167,49422,49423],{"class":512}," os.path.join(root, filename)\n",[167,49425,49426,49429,49431],{"class":169,"line":842},[167,49427,49428],{"class":512},"            image ",[167,49430,523],{"class":731},[167,49432,49433],{"class":512}," Image.open(image_path)\n",[167,49435,49436,49439,49441],{"class":169,"line":860},[167,49437,49438],{"class":512},"            image_array ",[167,49440,523],{"class":731},[167,49442,49443],{"class":512}," np.array(image)\n",[167,49445,49446],{"class":169,"line":876},[167,49447,741],{"emptyLinePlaceholder":740},[167,49449,49450],{"class":169,"line":887},[167,49451,49452],{"class":2268},"            # 归一化像素值到0-1之间\n",[167,49454,49455,49458,49460,49463,49465],{"class":169,"line":892},[167,49456,49457],{"class":512},"            normalized_image_array ",[167,49459,523],{"class":731},[167,49461,49462],{"class":512}," image_array ",[167,49464,2784],{"class":731},[167,49466,49467],{"class":184}," 255.0\n",[167,49469,49470],{"class":169,"line":907},[167,49471,741],{"emptyLinePlaceholder":740},[167,49473,49474],{"class":169,"line":920},[167,49475,49476],{"class":2268},"            # print(image_path)\n",[167,49478,49479],{"class":169,"line":933},[167,49480,49481],{"class":2268},"            # print(normalized_image_array.shape)\n",[167,49483,49484],{"class":169,"line":946},[167,49485,49486],{"class":2268},"            # 累积归一化后的像素值和像素数量\n",[167,49488,49489,49492,49494],{"class":169,"line":959},[167,49490,49491],{"class":512},"            total_pixels ",[167,49493,11505],{"class":731},[167,49495,49496],{"class":512}," normalized_image_array.size\n",[167,49498,49499],{"class":169,"line":964},[167,49500,49501],{"class":2268},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[167,49503,49504,49507,49509,49512,49515,49517,49519,49521,49523,49525],{"class":169,"line":987},[167,49505,49506],{"class":512},"            sum_normalized_pixel_values ",[167,49508,11505],{"class":731},[167,49510,49511],{"class":512}," np.sum(normalized_image_array, ",[167,49513,49514],{"class":7246},"axis",[167,49516,523],{"class":731},[167,49518,898],{"class":512},[167,49520,1154],{"class":184},[167,49522,14463],{"class":512},[167,49524,2418],{"class":184},[167,49526,32505],{"class":512},[167,49528,49529],{"class":169,"line":993},[167,49530,741],{"emptyLinePlaceholder":740},[167,49532,49533],{"class":169,"line":998},[167,49534,49535],{"class":2268},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[167,49537,49538,49541,49543,49546,49548],{"class":169,"line":1010},[167,49539,49540],{"class":512},"mean ",[167,49542,523],{"class":731},[167,49544,49545],{"class":512}," sum_normalized_pixel_values ",[167,49547,2784],{"class":731},[167,49549,49550],{"class":512}," total_pixels\n",[167,49552,49553],{"class":169,"line":1022},[167,49554,741],{"emptyLinePlaceholder":740},[167,49556,49557,49560,49562,49564,49566],{"class":169,"line":1027},[167,49558,49559],{"class":512},"sum_squared_diff ",[167,49561,523],{"class":731},[167,49563,49343],{"class":512},[167,49565,2281],{"class":184},[167,49567,873],{"class":512},[167,49569,49570],{"class":169,"line":1032},[167,49571,741],{"emptyLinePlaceholder":740},[167,49573,49574],{"class":169,"line":1049},[167,49575,49576],{"class":2268},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[167,49578,49579],{"class":169,"line":10005},[167,49580,49581],{"class":2268},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[167,49583,49584],{"class":169,"line":10011},[167,49585,49586],{"class":2268},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[167,49588,49589],{"class":169,"line":10038},[167,49590,49591],{"class":2268},"# Image.open(image_path)：打开图片\n",[167,49593,49594],{"class":169,"line":10043},[167,49595,49596],{"class":2268},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[167,49598,49599,49601,49603,49605],{"class":169,"line":10049},[167,49600,1168],{"class":731},[167,49602,49366],{"class":512},[167,49604,973],{"class":731},[167,49606,49371],{"class":512},[167,49608,49609,49611,49613,49615],{"class":169,"line":10061},[167,49610,967],{"class":731},[167,49612,49378],{"class":512},[167,49614,973],{"class":731},[167,49616,49383],{"class":512},[167,49618,49619,49621,49623,49625,49627,49629,49631,49633,49635,49637],{"class":169,"line":10073},[167,49620,4540],{"class":731},[167,49622,49390],{"class":512},[167,49624,49393],{"class":177},[167,49626,14463],{"class":512},[167,49628,49398],{"class":177},[167,49630,14463],{"class":512},[167,49632,49403],{"class":177},[167,49634,14463],{"class":512},[167,49636,49408],{"class":177},[167,49638,49639],{"class":512},")):\n",[167,49641,49642,49644,49646],{"class":169,"line":10085},[167,49643,47673],{"class":512},[167,49645,523],{"class":731},[167,49647,49423],{"class":512},[167,49649,49650,49652,49654],{"class":169,"line":11744},[167,49651,49428],{"class":512},[167,49653,523],{"class":731},[167,49655,49433],{"class":512},[167,49657,49658,49660,49662],{"class":169,"line":11769},[167,49659,49438],{"class":512},[167,49661,523],{"class":731},[167,49663,49443],{"class":512},[167,49665,49666],{"class":169,"line":11792},[167,49667,49452],{"class":2268},[167,49669,49670,49672,49674,49676,49678],{"class":169,"line":11816},[167,49671,49457],{"class":512},[167,49673,523],{"class":731},[167,49675,49462],{"class":512},[167,49677,2784],{"class":731},[167,49679,49467],{"class":184},[167,49681,49682],{"class":169,"line":11821},[167,49683,49481],{"class":2268},[167,49685,49686],{"class":169,"line":11826},[167,49687,49688],{"class":2268},"            # print(mean.shape)\n",[167,49690,49691],{"class":169,"line":11831},[167,49692,49476],{"class":2268},[167,49694,49695],{"class":169,"line":11840},[167,49696,741],{"emptyLinePlaceholder":740},[167,49698,49699,49702],{"class":169,"line":11845},[167,49700,49701],{"class":731},"            try",[167,49703,857],{"class":512},[167,49705,49706,49709,49711,49714,49716,49719,49721],{"class":169,"line":11851},[167,49707,49708],{"class":512},"                diff ",[167,49710,523],{"class":731},[167,49712,49713],{"class":512}," (normalized_image_array ",[167,49715,2732],{"class":731},[167,49717,49718],{"class":512}," mean) ",[167,49720,12689],{"class":731},[167,49722,49723],{"class":184}," 2\n",[167,49725,49726,49729,49731,49734,49736,49738,49740,49742,49744,49746],{"class":169,"line":11872},[167,49727,49728],{"class":512},"                sum_squared_diff ",[167,49730,11505],{"class":731},[167,49732,49733],{"class":512}," np.sum(diff, ",[167,49735,49514],{"class":7246},[167,49737,523],{"class":731},[167,49739,898],{"class":512},[167,49741,1154],{"class":184},[167,49743,14463],{"class":512},[167,49745,2418],{"class":184},[167,49747,32505],{"class":512},[167,49749,49750,49753],{"class":169,"line":11878},[167,49751,49752],{"class":731},"            except",[167,49754,857],{"class":512},[167,49756,49757,49760,49762,49764,49767],{"class":169,"line":11892},[167,49758,49759],{"class":184},"                print",[167,49761,898],{"class":512},[167,49763,2262],{"class":731},[167,49765,49766],{"class":177},"\"捕获到自定义异常\"",[167,49768,873],{"class":512},[167,49770,49771],{"class":169,"line":11898},[167,49772,49773],{"class":2268},"            # diff = (normalized_image_array - mean) ** 2\n",[167,49775,49776],{"class":169,"line":11925},[167,49777,49778],{"class":2268},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[167,49780,49781],{"class":169,"line":11934},[167,49782,741],{"emptyLinePlaceholder":740},[167,49784,49785,49788,49790,49793,49795],{"class":169,"line":11940},[167,49786,49787],{"class":512},"variance ",[167,49789,523],{"class":731},[167,49791,49792],{"class":512}," sum_squared_diff ",[167,49794,2784],{"class":731},[167,49796,49550],{"class":512},[167,49798,49799],{"class":169,"line":11948},[167,49800,741],{"emptyLinePlaceholder":740},[167,49802,49803,49805,49807,49810],{"class":169,"line":11953},[167,49804,1606],{"class":184},[167,49806,898],{"class":512},[167,49808,49809],{"class":177},"\"Mean:\"",[167,49811,49812],{"class":512},", mean)\n",[167,49814,49815,49817,49819,49822],{"class":169,"line":18630},[167,49816,1606],{"class":184},[167,49818,898],{"class":512},[167,49820,49821],{"class":177},"\"Variance:\"",[167,49823,49824],{"class":512},", variance)\n",[26,49826,49828],{"className":723,"code":49827,"language":305,"meta":32,"style":32},"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",[34,49829,49830,49836,49842,49852,49858,49868,49882,49892,49902,49912,49916,49926,49936,49940,49944,49952,49957,49962,49981,49985,49990,49995,50000,50005,50046,50051,50061,50066,50079,50084,50089,50094,50099,50104,50108,50113,50118,50140,50144,50176,50190,50200,50210,50214,50224,50238,50248,50258,50268,50274,50278,50282,50286,50290,50294,50302,50322,50326,50330,50334,50338,50354,50358,50362,50370,50374,50378,50386,50390,50394,50398,50406,50410,50414,50418,50426,50430,50438,50442,50450,50454,50462,50466,50474,50478,50482,50490,50494,50498,50510,50534,50548,50552,50556,50560,50568,50572,50580,50584,50592,50596,50604,50608,50616,50620,50628,50632,50644,50648,50656,50660,50668,50672,50676,50680,50684,50692,50696,50712,50716,50724,50728,50732,50736,50740,50744,50748,50752,50768,50772,50784,50788,50800,50804,50816,50820,50828,50832,50840,50844,50848,50852,50858,50862,50870,50874,50890,50894,50902,50906,50922,50934,50938,50950,50954,50958,50966,50970,50974,50982,50986,50994,50998,51006,51010,51014,51056,51098,51102,51106,51122,51126,51142,51146,51150,51158,51162,51166,51178,51216,51220,51224,51232,51236,51250,51260,51266,51272,51278,51284,51288,51292,51298,51302,51306,51314,51318,51336,51340,51344,51348,51364,51368,51372,51376,51380,51384,51404,51424,51428,51432,51436,51444,51452,51456,51472,51492,51512,51516,51521,51530,51539,51544,51549,51554,51567,51572,51581,51590,51607],{"__ignoreMap":32},[167,49831,49832,49834],{"class":169,"line":170},[167,49833,732],{"class":731},[167,49835,33827],{"class":512},[167,49837,49838,49840],{"class":169,"line":191},[167,49839,732],{"class":731},[167,49841,33834],{"class":512},[167,49843,49844,49846,49848,49850],{"class":169,"line":205},[167,49845,732],{"class":731},[167,49847,33845],{"class":512},[167,49849,33388],{"class":731},[167,49851,33850],{"class":512},[167,49853,49854,49856],{"class":169,"line":219},[167,49855,732],{"class":731},[167,49857,32404],{"class":512},[167,49859,49860,49862,49864,49866],{"class":169,"line":230},[167,49861,32745],{"class":731},[167,49863,33420],{"class":512},[167,49865,732],{"class":731},[167,49867,33867],{"class":512},[167,49869,49870,49872,49874,49876,49879],{"class":169,"line":241},[167,49871,32745],{"class":731},[167,49873,33373],{"class":512},[167,49875,732],{"class":731},[167,49877,49878],{"class":512}," ImageFolder ",[167,49880,49881],{"class":2268},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[167,49883,49884,49886,49888,49890],{"class":169,"line":261},[167,49885,32745],{"class":731},[167,49887,33403],{"class":512},[167,49889,732],{"class":731},[167,49891,33408],{"class":512},[167,49893,49894,49896,49898,49900],{"class":169,"line":773},[167,49895,732],{"class":731},[167,49897,33420],{"class":512},[167,49899,33388],{"class":731},[167,49901,33425],{"class":512},[167,49903,49904,49906,49908,49910],{"class":169,"line":779},[167,49905,732],{"class":731},[167,49907,33437],{"class":512},[167,49909,33388],{"class":731},[167,49911,33442],{"class":512},[167,49913,49914],{"class":169,"line":785},[167,49915,33912],{"class":2268},[167,49917,49918,49920,49922,49924],{"class":169,"line":790},[167,49919,32745],{"class":731},[167,49921,33919],{"class":512},[167,49923,732],{"class":731},[167,49925,45031],{"class":512},[167,49927,49928,49930,49932,49934],{"class":169,"line":796},[167,49929,32745],{"class":731},[167,49931,32748],{"class":512},[167,49933,732],{"class":731},[167,49935,32753],{"class":512},[167,49937,49938],{"class":169,"line":802},[167,49939,741],{"emptyLinePlaceholder":740},[167,49941,49942],{"class":169,"line":808},[167,49943,33947],{"class":2268},[167,49945,49946,49948,49950],{"class":169,"line":814},[167,49947,845],{"class":731},[167,49949,33954],{"class":173},[167,49951,33957],{"class":512},[167,49953,49954],{"class":169,"line":820},[167,49955,49956],{"class":2268},"    # 导入自己的数据集，并进行数据处理\n",[167,49958,49959],{"class":169,"line":826},[167,49960,49961],{"class":2268},"    # 定义数据集的路径\n",[167,49963,49964,49967,49969,49971,49973,49975,49979],{"class":169,"line":832},[167,49965,49966],{"class":184},"    ROOT_PATH",[167,49968,523],{"class":731},[167,49970,2870],{"class":731},[167,49972,2452],{"class":177},[167,49974,2758],{"class":184},[167,49976,49978],{"class":49977},"sA_wV","\u002Fdata\u002Ftrain",[167,49980,27153],{"class":177},[167,49982,49983],{"class":169,"line":837},[167,49984,741],{"emptyLinePlaceholder":740},[167,49986,49987],{"class":169,"line":842},[167,49988,49989],{"class":2268},"    # 定义归一化方法\n",[167,49991,49992],{"class":169,"line":860},[167,49993,49994],{"class":2268},"    # 这里需要先计算一下数据集的均值和方差\n",[167,49996,49997],{"class":169,"line":876},[167,49998,49999],{"class":2268},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[167,50001,50002],{"class":169,"line":887},[167,50003,50004],{"class":2268},"    # 第一个参数是均值，第二个参数是方差\n",[167,50006,50007,50010,50012,50015,50018,50020,50023,50025,50028,50031,50034,50036,50039,50041,50044],{"class":169,"line":892},[167,50008,50009],{"class":512},"    normalize",[167,50011,523],{"class":731},[167,50013,50014],{"class":512},"transforms.Normalize([",[167,50016,50017],{"class":184},"0.162",[167,50019,2578],{"class":512},[167,50021,50022],{"class":184},"0.151",[167,50024,2578],{"class":512},[167,50026,50027],{"class":184},"0.138",[167,50029,50030],{"class":512},"],[",[167,50032,50033],{"class":184},"0.058",[167,50035,2578],{"class":512},[167,50037,50038],{"class":184},"0.052",[167,50040,2578],{"class":512},[167,50042,50043],{"class":184},"0.048",[167,50045,6689],{"class":512},[167,50047,50048],{"class":169,"line":907},[167,50049,50050],{"class":2268},"    # 定义数据集处理方法变量\n",[167,50052,50053,50056,50058],{"class":169,"line":920},[167,50054,50055],{"class":512},"    train_transform",[167,50057,523],{"class":731},[167,50059,50060],{"class":512},"transforms.Compose([\n",[167,50062,50063],{"class":169,"line":933},[167,50064,50065],{"class":2268},"        # 调整图像大小为224*224\n",[167,50067,50068,50071,50073,50075,50077],{"class":169,"line":946},[167,50069,50070],{"class":512},"        transforms.Resize((",[167,50072,33506],{"class":184},[167,50074,2578],{"class":512},[167,50076,33506],{"class":184},[167,50078,44622],{"class":512},[167,50080,50081],{"class":169,"line":959},[167,50082,50083],{"class":2268},"        # 将图像转换为张量\n",[167,50085,50086],{"class":169,"line":964},[167,50087,50088],{"class":512},"        transforms.ToTensor(),\n",[167,50090,50091],{"class":169,"line":987},[167,50092,50093],{"class":512},"        normalize])\n",[167,50095,50096],{"class":169,"line":993},[167,50097,50098],{"class":2268},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[167,50100,50101],{"class":169,"line":998},[167,50102,50103],{"class":2268},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[167,50105,50106],{"class":169,"line":1010},[167,50107,741],{"emptyLinePlaceholder":740},[167,50109,50110],{"class":169,"line":1022},[167,50111,50112],{"class":2268},"    # 加载数据集\n",[167,50114,50115],{"class":169,"line":1027},[167,50116,50117],{"class":2268},"    # 传入数据集路径与处理方法\n",[167,50119,50120,50122,50124,50127,50130,50132,50135,50137],{"class":169,"line":1032},[167,50121,33962],{"class":512},[167,50123,523],{"class":731},[167,50125,50126],{"class":512},"ImageFolder(",[167,50128,50129],{"class":184},"ROOT_PATH",[167,50131,2578],{"class":512},[167,50133,50134],{"class":7246},"transform",[167,50136,523],{"class":731},[167,50138,50139],{"class":512},"train_transform)\n",[167,50141,50142],{"class":169,"line":1049},[167,50143,741],{"emptyLinePlaceholder":740},[167,50145,50146,50148,50150,50152,50154,50156,50158,50160,50162,50164,50166,50168,50170,50172,50174],{"class":169,"line":10005},[167,50147,34014],{"class":512},[167,50149,523],{"class":731},[167,50151,34019],{"class":512},[167,50153,34022],{"class":184},[167,50155,898],{"class":512},[167,50157,34027],{"class":184},[167,50159,2655],{"class":731},[167,50161,9388],{"class":184},[167,50163,34034],{"class":512},[167,50165,34022],{"class":184},[167,50167,898],{"class":512},[167,50169,34041],{"class":184},[167,50171,2655],{"class":731},[167,50173,9388],{"class":184},[167,50175,34048],{"class":512},[167,50177,50178,50180,50182,50184,50186,50188],{"class":169,"line":10011},[167,50179,34053],{"class":512},[167,50181,523],{"class":731},[167,50183,34058],{"class":512},[167,50185,33542],{"class":7246},[167,50187,523],{"class":731},[167,50189,33547],{"class":512},[167,50191,50192,50194,50196,50198],{"class":169,"line":10038},[167,50193,34069],{"class":7246},[167,50195,523],{"class":731},[167,50197,2399],{"class":184},[167,50199,33471],{"class":512},[167,50201,50202,50204,50206,50208],{"class":169,"line":10043},[167,50203,34081],{"class":7246},[167,50205,523],{"class":731},[167,50207,33481],{"class":184},[167,50209,33471],{"class":512},[167,50211,50212],{"class":169,"line":10049},[167,50213,34092],{"class":2268},[167,50215,50216,50218,50220,50222],{"class":169,"line":10061},[167,50217,34097],{"class":7246},[167,50219,523],{"class":731},[167,50221,2595],{"class":184},[167,50223,873],{"class":512},[167,50225,50226,50228,50230,50232,50234,50236],{"class":169,"line":10073},[167,50227,34108],{"class":512},[167,50229,523],{"class":731},[167,50231,33539],{"class":512},[167,50233,33542],{"class":7246},[167,50235,523],{"class":731},[167,50237,34119],{"class":512},[167,50239,50240,50242,50244,50246],{"class":169,"line":10085},[167,50241,34124],{"class":7246},[167,50243,523],{"class":731},[167,50245,2399],{"class":184},[167,50247,33471],{"class":512},[167,50249,50250,50252,50254,50256],{"class":169,"line":11744},[167,50251,34135],{"class":7246},[167,50253,523],{"class":731},[167,50255,33481],{"class":184},[167,50257,33471],{"class":512},[167,50259,50260,50262,50264,50266],{"class":169,"line":11769},[167,50261,34146],{"class":7246},[167,50263,523],{"class":731},[167,50265,2595],{"class":184},[167,50267,873],{"class":512},[167,50269,50270,50272],{"class":169,"line":11792},[167,50271,6122],{"class":731},[167,50273,34159],{"class":512},[167,50275,50276],{"class":169,"line":11816},[167,50277,741],{"emptyLinePlaceholder":740},[167,50279,50280],{"class":169,"line":11821},[167,50281,34168],{"class":2268},[167,50283,50284],{"class":169,"line":11826},[167,50285,34173],{"class":2268},[167,50287,50288],{"class":169,"line":11831},[167,50289,741],{"emptyLinePlaceholder":740},[167,50291,50292],{"class":169,"line":11840},[167,50293,34182],{"class":2268},[167,50295,50296,50298,50300],{"class":169,"line":11845},[167,50297,845],{"class":731},[167,50299,34189],{"class":173},[167,50301,34192],{"class":512},[167,50303,50304,50306,50308,50310,50312,50314,50316,50318,50320],{"class":169,"line":11851},[167,50305,33243],{"class":512},[167,50307,523],{"class":731},[167,50309,32459],{"class":512},[167,50311,33250],{"class":177},[167,50313,3758],{"class":731},[167,50315,33255],{"class":512},[167,50317,3755],{"class":731},[167,50319,34211],{"class":177},[167,50321,873],{"class":512},[167,50323,50324],{"class":169,"line":11872},[167,50325,741],{"emptyLinePlaceholder":740},[167,50327,50328],{"class":169,"line":11878},[167,50329,34226],{"class":2268},[167,50331,50332],{"class":169,"line":11892},[167,50333,34231],{"class":2268},[167,50335,50336],{"class":169,"line":11898},[167,50337,34236],{"class":2268},[167,50339,50340,50342,50344,50346,50348,50350,50352],{"class":169,"line":11925},[167,50341,34241],{"class":512},[167,50343,523],{"class":731},[167,50345,34246],{"class":512},[167,50347,34249],{"class":7246},[167,50349,523],{"class":731},[167,50351,34254],{"class":184},[167,50353,873],{"class":512},[167,50355,50356],{"class":169,"line":11934},[167,50357,741],{"emptyLinePlaceholder":740},[167,50359,50360],{"class":169,"line":11940},[167,50361,34265],{"class":2268},[167,50363,50364,50366,50368],{"class":169,"line":11948},[167,50365,34270],{"class":512},[167,50367,523],{"class":731},[167,50369,34275],{"class":512},[167,50371,50372],{"class":169,"line":11953},[167,50373,741],{"emptyLinePlaceholder":740},[167,50375,50376],{"class":169,"line":18630},[167,50377,34284],{"class":2268},[167,50379,50380,50382,50384],{"class":169,"line":18636},[167,50381,33295],{"class":512},[167,50383,523],{"class":731},[167,50385,34293],{"class":512},[167,50387,50388],{"class":169,"line":18659},[167,50389,34298],{"class":2268},[167,50391,50392],{"class":169,"line":18665},[167,50393,34303],{"class":2268},[167,50395,50396],{"class":169,"line":18688},[167,50397,34308],{"class":2268},[167,50399,50400,50402,50404],{"class":169,"line":18702},[167,50401,34313],{"class":512},[167,50403,523],{"class":731},[167,50405,34318],{"class":512},[167,50407,50408],{"class":169,"line":18722},[167,50409,741],{"emptyLinePlaceholder":740},[167,50411,50412],{"class":169,"line":18728},[167,50413,34331],{"class":2268},[167,50415,50416],{"class":169,"line":18739},[167,50417,34336],{"class":2268},[167,50419,50420,50422,50424],{"class":169,"line":18762},[167,50421,34341],{"class":512},[167,50423,523],{"class":731},[167,50425,34346],{"class":184},[167,50427,50428],{"class":169,"line":18784},[167,50429,34351],{"class":2268},[167,50431,50432,50434,50436],{"class":169,"line":18789},[167,50433,34356],{"class":512},[167,50435,523],{"class":731},[167,50437,34361],{"class":512},[167,50439,50440],{"class":169,"line":18795},[167,50441,34366],{"class":2268},[167,50443,50444,50446,50448],{"class":169,"line":18809},[167,50445,34371],{"class":512},[167,50447,523],{"class":731},[167,50449,34361],{"class":512},[167,50451,50452],{"class":169,"line":18822},[167,50453,34380],{"class":2268},[167,50455,50456,50458,50460],{"class":169,"line":18827},[167,50457,34385],{"class":512},[167,50459,523],{"class":731},[167,50461,34361],{"class":512},[167,50463,50464],{"class":169,"line":18841},[167,50465,34394],{"class":2268},[167,50467,50468,50470,50472],{"class":169,"line":18846},[167,50469,34399],{"class":512},[167,50471,523],{"class":731},[167,50473,34361],{"class":512},[167,50475,50476],{"class":169,"line":18852},[167,50477,741],{"emptyLinePlaceholder":740},[167,50479,50480],{"class":169,"line":18857},[167,50481,34412],{"class":2268},[167,50483,50484,50486,50488],{"class":169,"line":18871},[167,50485,34417],{"class":512},[167,50487,523],{"class":731},[167,50489,34422],{"class":512},[167,50491,50492],{"class":169,"line":18876},[167,50493,741],{"emptyLinePlaceholder":740},[167,50495,50496],{"class":169,"line":18881},[167,50497,34435],{"class":2268},[167,50499,50500,50502,50504,50506,50508],{"class":169,"line":18895},[167,50501,967],{"class":731},[167,50503,34442],{"class":512},[167,50505,973],{"class":731},[167,50507,976],{"class":184},[167,50509,34449],{"class":512},[167,50511,50512,50514,50516,50518,50520,50522,50524,50526,50528,50530,50532],{"class":169,"line":18907},[167,50513,34454],{"class":184},[167,50515,898],{"class":512},[167,50517,34459],{"class":177},[167,50519,34462],{"class":184},[167,50521,2784],{"class":177},[167,50523,34462],{"class":184},[167,50525,2452],{"class":177},[167,50527,34471],{"class":512},[167,50529,2732],{"class":731},[167,50531,2418],{"class":184},[167,50533,32505],{"class":512},[167,50535,50536,50538,50540,50542,50544,50546],{"class":169,"line":18912},[167,50537,34454],{"class":184},[167,50539,898],{"class":512},[167,50541,34486],{"class":177},[167,50543,2655],{"class":731},[167,50545,2646],{"class":184},[167,50547,873],{"class":512},[167,50549,50550],{"class":169,"line":18925},[167,50551,741],{"emptyLinePlaceholder":740},[167,50553,50554],{"class":169,"line":18930},[167,50555,34501],{"class":2268},[167,50557,50558],{"class":169,"line":18935},[167,50559,34506],{"class":2268},[167,50561,50562,50564,50566],{"class":169,"line":18940},[167,50563,34511],{"class":512},[167,50565,523],{"class":731},[167,50567,34346],{"class":184},[167,50569,50570],{"class":169,"line":18953},[167,50571,34520],{"class":2268},[167,50573,50574,50576,50578],{"class":169,"line":18958},[167,50575,34525],{"class":512},[167,50577,523],{"class":731},[167,50579,5120],{"class":184},[167,50581,50582],{"class":169,"line":34636},[167,50583,34534],{"class":2268},[167,50585,50586,50588,50590],{"class":169,"line":34642},[167,50587,34539],{"class":512},[167,50589,523],{"class":731},[167,50591,34346],{"class":184},[167,50593,50594],{"class":169,"line":34648},[167,50595,34548],{"class":2268},[167,50597,50598,50600,50602],{"class":169,"line":34654},[167,50599,34553],{"class":512},[167,50601,523],{"class":731},[167,50603,5120],{"class":184},[167,50605,50606],{"class":169,"line":34660},[167,50607,34562],{"class":2268},[167,50609,50610,50612,50614],{"class":169,"line":34671},[167,50611,34567],{"class":512},[167,50613,523],{"class":731},[167,50615,5120],{"class":184},[167,50617,50618],{"class":169,"line":34677},[167,50619,34576],{"class":2268},[167,50621,50622,50624,50626],{"class":169,"line":34697},[167,50623,34581],{"class":512},[167,50625,523],{"class":731},[167,50627,5120],{"class":184},[167,50629,50630],{"class":169,"line":34703},[167,50631,34590],{"class":2268},[167,50633,50634,50636,50638,50640,50642],{"class":169,"line":34714},[167,50635,5437],{"class":731},[167,50637,33606],{"class":512},[167,50639,973],{"class":731},[167,50641,33611],{"class":184},[167,50643,34603],{"class":512},[167,50645,50646],{"class":169,"line":34720},[167,50647,34608],{"class":2268},[167,50649,50650,50652,50654],{"class":169,"line":34726},[167,50651,34613],{"class":512},[167,50653,523],{"class":731},[167,50655,34618],{"class":512},[167,50657,50658],{"class":169,"line":34732},[167,50659,34623],{"class":2268},[167,50661,50662,50664,50666],{"class":169,"line":34738},[167,50663,34628],{"class":512},[167,50665,523],{"class":731},[167,50667,34633],{"class":512},[167,50669,50670],{"class":169,"line":34744},[167,50671,34639],{"class":2268},[167,50673,50674],{"class":169,"line":34750},[167,50675,34645],{"class":512},[167,50677,50678],{"class":169,"line":34756},[167,50679,34651],{"class":2268},[167,50681,50682],{"class":169,"line":34776},[167,50683,34657],{"class":2268},[167,50685,50686,50688,50690],{"class":169,"line":34782},[167,50687,34663],{"class":512},[167,50689,523],{"class":731},[167,50691,34668],{"class":512},[167,50693,50694],{"class":169,"line":34798},[167,50695,34674],{"class":2268},[167,50697,50698,50700,50702,50704,50706,50708,50710],{"class":169,"line":34804},[167,50699,34680],{"class":512},[167,50701,523],{"class":731},[167,50703,34685],{"class":512},[167,50705,34688],{"class":7246},[167,50707,523],{"class":731},[167,50709,2418],{"class":184},[167,50711,873],{"class":512},[167,50713,50714],{"class":169,"line":34818},[167,50715,34700],{"class":2268},[167,50717,50718,50720,50722],{"class":169,"line":34824},[167,50719,34706],{"class":512},[167,50721,523],{"class":731},[167,50723,34711],{"class":512},[167,50725,50726],{"class":169,"line":34839},[167,50727,34717],{"class":2268},[167,50729,50730],{"class":169,"line":34845},[167,50731,34723],{"class":512},[167,50733,50734],{"class":169,"line":34854},[167,50735,34729],{"class":2268},[167,50737,50738],{"class":169,"line":34860},[167,50739,34735],{"class":512},[167,50741,50742],{"class":169,"line":34869},[167,50743,34741],{"class":2268},[167,50745,50746],{"class":169,"line":34875},[167,50747,34747],{"class":512},[167,50749,50750],{"class":169,"line":34881},[167,50751,34753],{"class":2268},[167,50753,50754,50756,50758,50760,50762,50764,50766],{"class":169,"line":34890},[167,50755,34759],{"class":512},[167,50757,11505],{"class":731},[167,50759,34764],{"class":512},[167,50761,2655],{"class":731},[167,50763,34769],{"class":512},[167,50765,1154],{"class":184},[167,50767,873],{"class":512},[167,50769,50770],{"class":169,"line":34896},[167,50771,34779],{"class":2268},[167,50773,50774,50776,50778,50780,50782],{"class":169,"line":34907},[167,50775,34785],{"class":512},[167,50777,11505],{"class":731},[167,50779,34790],{"class":512},[167,50781,4985],{"class":731},[167,50783,34795],{"class":512},[167,50785,50786],{"class":169,"line":34913},[167,50787,34801],{"class":2268},[167,50789,50790,50792,50794,50796,50798],{"class":169,"line":34932},[167,50791,34807],{"class":512},[167,50793,11505],{"class":731},[167,50795,34769],{"class":512},[167,50797,1154],{"class":184},[167,50799,873],{"class":512},[167,50801,50802],{"class":169,"line":34938},[167,50803,34821],{"class":2268},[167,50805,50806,50808,50810,50812,50814],{"class":169,"line":34949},[167,50807,5437],{"class":731},[167,50809,34829],{"class":512},[167,50811,973],{"class":731},[167,50813,33611],{"class":184},[167,50815,34836],{"class":512},[167,50817,50818],{"class":169,"line":34955},[167,50819,34842],{"class":2268},[167,50821,50822,50824,50826],{"class":169,"line":34975},[167,50823,34613],{"class":512},[167,50825,523],{"class":731},[167,50827,34618],{"class":512},[167,50829,50830],{"class":169,"line":34991},[167,50831,34857],{"class":2268},[167,50833,50834,50836,50838],{"class":169,"line":34997},[167,50835,34628],{"class":512},[167,50837,523],{"class":731},[167,50839,34633],{"class":512},[167,50841,50842],{"class":169,"line":35011},[167,50843,34872],{"class":2268},[167,50845,50846],{"class":169,"line":35017},[167,50847,34878],{"class":512},[167,50849,50850],{"class":169,"line":35023},[167,50851,38357],{"class":2268},[167,50853,50854,50856],{"class":169,"line":35034},[167,50855,34884],{"class":731},[167,50857,34887],{"class":512},[167,50859,50860],{"class":169,"line":35040},[167,50861,34893],{"class":2268},[167,50863,50864,50866,50868],{"class":169,"line":35046},[167,50865,38372],{"class":512},[167,50867,523],{"class":731},[167,50869,34668],{"class":512},[167,50871,50872],{"class":169,"line":35056},[167,50873,34910],{"class":2268},[167,50875,50876,50878,50880,50882,50884,50886,50888],{"class":169,"line":35062},[167,50877,38385],{"class":512},[167,50879,523],{"class":731},[167,50881,34685],{"class":512},[167,50883,34688],{"class":7246},[167,50885,523],{"class":731},[167,50887,2418],{"class":184},[167,50889,873],{"class":512},[167,50891,50892],{"class":169,"line":35073},[167,50893,34935],{"class":2268},[167,50895,50896,50898,50900],{"class":169,"line":35079},[167,50897,38406],{"class":512},[167,50899,523],{"class":731},[167,50901,34711],{"class":512},[167,50903,50904],{"class":169,"line":35089},[167,50905,34952],{"class":2268},[167,50907,50908,50910,50912,50914,50916,50918,50920],{"class":169,"line":35094},[167,50909,38419],{"class":512},[167,50911,11505],{"class":731},[167,50913,38424],{"class":512},[167,50915,2655],{"class":731},[167,50917,34769],{"class":512},[167,50919,1154],{"class":184},[167,50921,873],{"class":512},[167,50923,50924,50926,50928,50930,50932],{"class":169,"line":35100},[167,50925,38437],{"class":512},[167,50927,11505],{"class":731},[167,50929,34790],{"class":512},[167,50931,4985],{"class":731},[167,50933,34795],{"class":512},[167,50935,50936],{"class":169,"line":35149},[167,50937,38450],{"class":2268},[167,50939,50940,50942,50944,50946,50948],{"class":169,"line":35196},[167,50941,38455],{"class":512},[167,50943,11505],{"class":731},[167,50945,34769],{"class":512},[167,50947,1154],{"class":184},[167,50949,873],{"class":512},[167,50951,50952],{"class":169,"line":35201},[167,50953,35014],{"class":2268},[167,50955,50956],{"class":169,"line":35207},[167,50957,35020],{"class":2268},[167,50959,50960,50962,50964],{"class":169,"line":35226},[167,50961,35026],{"class":512},[167,50963,2784],{"class":731},[167,50965,35031],{"class":512},[167,50967,50968],{"class":169,"line":35232},[167,50969,35037],{"class":2268},[167,50971,50972],{"class":169,"line":35252},[167,50973,35043],{"class":2268},[167,50975,50976,50978,50980],{"class":169,"line":35258},[167,50977,35049],{"class":512},[167,50979,2784],{"class":731},[167,50981,35031],{"class":512},[167,50983,50984],{"class":169,"line":35264},[167,50985,35059],{"class":2268},[167,50987,50988,50990,50992],{"class":169,"line":35274},[167,50989,35065],{"class":512},[167,50991,2784],{"class":731},[167,50993,35070],{"class":512},[167,50995,50996],{"class":169,"line":35279},[167,50997,35076],{"class":2268},[167,50999,51000,51002,51004],{"class":169,"line":35285},[167,51001,35082],{"class":512},[167,51003,2784],{"class":731},[167,51005,35070],{"class":512},[167,51007,51008],{"class":169,"line":35301},[167,51009,741],{"emptyLinePlaceholder":740},[167,51011,51012],{"class":169,"line":35346},[167,51013,35097],{"class":2268},[167,51015,51016,51018,51020,51022,51024,51026,51028,51030,51032,51034,51036,51038,51040,51042,51044,51046,51048,51050,51052,51054],{"class":169,"line":35352},[167,51017,34454],{"class":184},[167,51019,898],{"class":512},[167,51021,5626],{"class":177},[167,51023,34462],{"class":184},[167,51025,35111],{"class":177},[167,51027,3096],{"class":184},[167,51029,35116],{"class":731},[167,51031,3145],{"class":184},[167,51033,35121],{"class":177},[167,51035,3096],{"class":184},[167,51037,35116],{"class":731},[167,51039,3145],{"class":184},[167,51041,5626],{"class":177},[167,51043,35132],{"class":512},[167,51045,2732],{"class":731},[167,51047,2418],{"class":184},[167,51049,35139],{"class":512},[167,51051,2732],{"class":731},[167,51053,2418],{"class":184},[167,51055,35146],{"class":512},[167,51057,51058,51060,51062,51064,51066,51068,51070,51072,51074,51076,51078,51080,51082,51084,51086,51088,51090,51092,51094,51096],{"class":169,"line":35358},[167,51059,34454],{"class":184},[167,51061,898],{"class":512},[167,51063,5626],{"class":177},[167,51065,34462],{"class":184},[167,51067,35160],{"class":177},[167,51069,3096],{"class":184},[167,51071,35116],{"class":731},[167,51073,3145],{"class":184},[167,51075,35169],{"class":177},[167,51077,3096],{"class":184},[167,51079,35116],{"class":731},[167,51081,3145],{"class":184},[167,51083,5626],{"class":177},[167,51085,35180],{"class":512},[167,51087,2732],{"class":731},[167,51089,2418],{"class":184},[167,51091,35187],{"class":512},[167,51093,2732],{"class":731},[167,51095,2418],{"class":184},[167,51097,35146],{"class":512},[167,51099,51100],{"class":169,"line":35364},[167,51101,741],{"emptyLinePlaceholder":740},[167,51103,51104],{"class":169,"line":35375},[167,51105,35204],{"class":2268},[167,51107,51108,51110,51112,51114,51116,51118,51120],{"class":169,"line":35381},[167,51109,4540],{"class":731},[167,51111,35212],{"class":512},[167,51113,2732],{"class":731},[167,51115,2418],{"class":184},[167,51117,3139],{"class":512},[167,51119,3159],{"class":731},[167,51121,35223],{"class":512},[167,51123,51124],{"class":169,"line":35387},[167,51125,35229],{"class":2268},[167,51127,51128,51130,51132,51134,51136,51138,51140],{"class":169,"line":35393},[167,51129,35235],{"class":512},[167,51131,2251],{"class":184},[167,51133,523],{"class":731},[167,51135,35242],{"class":512},[167,51137,2732],{"class":731},[167,51139,2418],{"class":184},[167,51141,35249],{"class":512},[167,51143,51144],{"class":169,"line":35410},[167,51145,35255],{"class":2268},[167,51147,51148],{"class":169,"line":35424},[167,51149,35261],{"class":2268},[167,51151,51152,51154,51156],{"class":169,"line":35433},[167,51153,35267],{"class":512},[167,51155,523],{"class":731},[167,51157,34318],{"class":512},[167,51159,51160],{"class":169,"line":35442},[167,51161,741],{"emptyLinePlaceholder":740},[167,51163,51164],{"class":169,"line":35451},[167,51165,35282],{"class":2268},[167,51167,51168,51170,51172,51174,51176],{"class":169,"line":35460},[167,51169,35288],{"class":512},[167,51171,523],{"class":731},[167,51173,35293],{"class":512},[167,51175,2732],{"class":731},[167,51177,35298],{"class":512},[167,51179,51180,51182,51184,51186,51188,51190,51192,51194,51196,51198,51200,51202,51204,51206,51208,51210,51212,51214],{"class":169,"line":35466},[167,51181,34454],{"class":184},[167,51183,898],{"class":512},[167,51185,35308],{"class":177},[167,51187,3096],{"class":184},[167,51189,35313],{"class":731},[167,51191,3145],{"class":184},[167,51193,2744],{"class":177},[167,51195,3096],{"class":184},[167,51197,35313],{"class":731},[167,51199,3145],{"class":184},[167,51201,35326],{"class":177},[167,51203,35329],{"class":512},[167,51205,35332],{"class":731},[167,51207,3107],{"class":184},[167,51209,35337],{"class":512},[167,51211,2528],{"class":731},[167,51213,3107],{"class":184},[167,51215,32505],{"class":512},[167,51217,51218],{"class":169,"line":35472},[167,51219,38734],{"class":2268},[167,51221,51222],{"class":169,"line":35480},[167,51223,38739],{"class":2268},[167,51225,51226,51228,51230],{"class":169,"line":35485},[167,51227,38744],{"class":512},[167,51229,35370],{"class":177},[167,51231,873],{"class":512},[167,51233,51234],{"class":169,"line":35491},[167,51235,35390],{"class":2268},[167,51237,51238,51240,51242,51244,51246,51248],{"class":169,"line":35502},[167,51239,35396],{"class":512},[167,51241,523],{"class":731},[167,51243,35401],{"class":512},[167,51245,1150],{"class":7246},[167,51247,523],{"class":731},[167,51249,3611],{"class":512},[167,51251,51252,51254,51256,51258],{"class":169,"line":35508},[167,51253,35413],{"class":177},[167,51255,3059],{"class":512},[167,51257,35418],{"class":184},[167,51259,35421],{"class":512},[167,51261,51262,51264],{"class":169,"line":35528},[167,51263,35427],{"class":177},[167,51265,35430],{"class":512},[167,51267,51268,51270],{"class":169,"line":35534},[167,51269,35436],{"class":177},[167,51271,35439],{"class":512},[167,51273,51274,51276],{"class":169,"line":35540},[167,51275,35445],{"class":177},[167,51277,35448],{"class":512},[167,51279,51280,51282],{"class":169,"line":35546},[167,51281,35454],{"class":177},[167,51283,35457],{"class":512},[167,51285,51286],{"class":169,"line":35563},[167,51287,35463],{"class":512},[167,51289,51290],{"class":169,"line":35569},[167,51291,35469],{"class":2268},[167,51293,51294,51296],{"class":169,"line":35575},[167,51295,6122],{"class":731},[167,51297,35477],{"class":512},[167,51299,51300],{"class":169,"line":35581},[167,51301,741],{"emptyLinePlaceholder":740},[167,51303,51304],{"class":169,"line":35587},[167,51305,35488],{"class":2268},[167,51307,51308,51310,51312],{"class":169,"line":35593},[167,51309,845],{"class":731},[167,51311,35496],{"class":173},[167,51313,35499],{"class":512},[167,51315,51316],{"class":169,"line":35620},[167,51317,35505],{"class":2268},[167,51319,51320,51322,51324,51326,51328,51330,51332,51334],{"class":169,"line":35644},[167,51321,35511],{"class":512},[167,51323,33698],{"class":7246},[167,51325,523],{"class":731},[167,51327,898],{"class":512},[167,51329,2698],{"class":184},[167,51331,2578],{"class":512},[167,51333,2494],{"class":184},[167,51335,32505],{"class":512},[167,51337,51338],{"class":169,"line":35650},[167,51339,35531],{"class":2268},[167,51341,51342],{"class":169,"line":35656},[167,51343,35537],{"class":2268},[167,51345,51346],{"class":169,"line":35662},[167,51347,35543],{"class":2268},[167,51349,51350,51352,51354,51356,51358,51360,51362],{"class":169,"line":35673},[167,51351,33732],{"class":512},[167,51353,2418],{"class":184},[167,51355,2578],{"class":512},[167,51357,2287],{"class":184},[167,51359,2578],{"class":512},[167,51361,2418],{"class":184},[167,51363,873],{"class":512},[167,51365,51366],{"class":169,"line":35684},[167,51367,35566],{"class":2268},[167,51369,51370],{"class":169,"line":35690},[167,51371,35572],{"class":2268},[167,51373,51374],{"class":169,"line":35707},[167,51375,35578],{"class":2268},[167,51377,51378],{"class":169,"line":35730},[167,51379,35584],{"class":2268},[167,51381,51382],{"class":169,"line":35753},[167,51383,35590],{"class":2268},[167,51385,51386,51388,51390,51392,51394,51396,51398,51400,51402],{"class":169,"line":35759},[167,51387,35596],{"class":512},[167,51389,35599],{"class":177},[167,51391,35602],{"class":512},[167,51393,35605],{"class":177},[167,51395,2578],{"class":512},[167,51397,35610],{"class":7246},[167,51399,523],{"class":731},[167,51401,35615],{"class":177},[167,51403,873],{"class":512},[167,51405,51406,51408,51410,51412,51414,51416,51418,51420,51422],{"class":169,"line":35764},[167,51407,35596],{"class":512},[167,51409,35599],{"class":177},[167,51411,35627],{"class":512},[167,51413,35630],{"class":177},[167,51415,2578],{"class":512},[167,51417,35610],{"class":7246},[167,51419,523],{"class":731},[167,51421,35639],{"class":177},[167,51423,873],{"class":512},[167,51425,51426],{"class":169,"line":35773},[167,51427,35647],{"class":2268},[167,51429,51430],{"class":169,"line":35783},[167,51431,35653],{"class":512},[167,51433,51434],{"class":169,"line":35789},[167,51435,35659],{"class":2268},[167,51437,51438,51440,51442],{"class":169,"line":35794},[167,51439,35665],{"class":512},[167,51441,35668],{"class":177},[167,51443,873],{"class":512},[167,51445,51446,51448,51450],{"class":169,"line":35800},[167,51447,35676],{"class":512},[167,51449,35679],{"class":177},[167,51451,873],{"class":512},[167,51453,51454],{"class":169,"line":35813},[167,51455,35687],{"class":2268},[167,51457,51458,51460,51462,51464,51466,51468,51470],{"class":169,"line":35819},[167,51459,33732],{"class":512},[167,51461,2418],{"class":184},[167,51463,2578],{"class":512},[167,51465,2287],{"class":184},[167,51467,2578],{"class":512},[167,51469,2287],{"class":184},[167,51471,873],{"class":512},[167,51473,51474,51476,51478,51480,51482,51484,51486,51488,51490],{"class":169,"line":35830},[167,51475,35596],{"class":512},[167,51477,35599],{"class":177},[167,51479,35714],{"class":512},[167,51481,35605],{"class":177},[167,51483,2578],{"class":512},[167,51485,35610],{"class":7246},[167,51487,523],{"class":731},[167,51489,35725],{"class":177},[167,51491,873],{"class":512},[167,51493,51494,51496,51498,51500,51502,51504,51506,51508,51510],{"class":169,"line":35841},[167,51495,35596],{"class":512},[167,51497,35599],{"class":177},[167,51499,35737],{"class":512},[167,51501,35630],{"class":177},[167,51503,2578],{"class":512},[167,51505,35610],{"class":7246},[167,51507,523],{"class":731},[167,51509,35748],{"class":177},[167,51511,873],{"class":512},[167,51513,51514],{"class":169,"line":35860},[167,51515,35756],{"class":2268},[167,51517,51519],{"class":169,"line":51518},219,[167,51520,35653],{"class":512},[167,51522,51524,51526,51528],{"class":169,"line":51523},220,[167,51525,35665],{"class":512},[167,51527,35599],{"class":177},[167,51529,873],{"class":512},[167,51531,51533,51535,51537],{"class":169,"line":51532},221,[167,51534,35676],{"class":512},[167,51536,35778],{"class":177},[167,51538,873],{"class":512},[167,51540,51542],{"class":169,"line":51541},222,[167,51543,35786],{"class":512},[167,51545,51547],{"class":169,"line":51546},223,[167,51548,741],{"emptyLinePlaceholder":740},[167,51550,51552],{"class":169,"line":51551},224,[167,51553,35797],{"class":2268},[167,51555,51557,51559,51561,51563,51565],{"class":169,"line":51556},225,[167,51558,1035],{"class":731},[167,51560,1038],{"class":184},[167,51562,4985],{"class":731},[167,51564,33231],{"class":177},[167,51566,857],{"class":512},[167,51568,51570],{"class":169,"line":51569},226,[167,51571,35816],{"class":2268},[167,51573,51575,51577,51579],{"class":169,"line":51574},227,[167,51576,46546],{"class":512},[167,51578,523],{"class":731},[167,51580,46551],{"class":512},[167,51582,51584,51586,51588],{"class":169,"line":51583},228,[167,51585,35833],{"class":512},[167,51587,523],{"class":731},[167,51589,35838],{"class":512},[167,51591,51593,51595,51597,51599,51601,51603,51605],{"class":169,"line":51592},229,[167,51594,35396],{"class":512},[167,51596,523],{"class":731},[167,51598,46568],{"class":512},[167,51600,35851],{"class":7246},[167,51602,523],{"class":731},[167,51604,3107],{"class":184},[167,51606,873],{"class":512},[167,51608,51610],{"class":169,"line":51609},230,[167,51611,35863],{"class":512},[24024,51613,51615],{"id":51614},"_242测试代码","2.4.2.测试代码",[19,51617,51618],{},"使用测试集进行测试与推理",[26,51620,51622],{"className":723,"code":51621,"language":305,"meta":32,"style":32},"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",[34,51623,51624,51630,51640,51650,51661,51671,51675,51679,51687,51692,51696,51713,51717,51721,51725,51729,51733,51765,51769,51777,51781,51793,51797,51801,51805,51809,51813,51817,51821,51825,51843,51857,51861,51871,51881,51891,51897,51901,51905,51913,51917,51933,51941,51945,51949,51957,51965,51969,51973,51977,51981,51987,51991,52001,52009,52017,52021,52025,52029,52037,52041,52057,52061,52065,52069,52081,52085,52097,52101,52105,52117,52121,52131,52135,52139,52151,52155,52163,52167,52171,52179,52183,52191,52195,52199,52203,52207,52211,52227,52235,52239,52243,52261,52267,52271,52281,52289,52297,52301,52305,52309,52313,52321,52325,52341,52345,52353,52361],{"__ignoreMap":32},[167,51625,51626,51628],{"class":169,"line":170},[167,51627,732],{"class":731},[167,51629,32404],{"class":512},[167,51631,51632,51634,51636,51638],{"class":169,"line":191},[167,51633,732],{"class":731},[167,51635,33420],{"class":512},[167,51637,33388],{"class":731},[167,51639,33425],{"class":512},[167,51641,51642,51644,51646,51648],{"class":169,"line":205},[167,51643,32745],{"class":731},[167,51645,33403],{"class":512},[167,51647,732],{"class":731},[167,51649,33408],{"class":512},[167,51651,51652,51654,51656,51658],{"class":169,"line":219},[167,51653,32745],{"class":731},[167,51655,33373],{"class":512},[167,51657,732],{"class":731},[167,51659,51660],{"class":512}," ImageFolder\n",[167,51662,51663,51665,51667,51669],{"class":169,"line":230},[167,51664,32745],{"class":731},[167,51666,33919],{"class":512},[167,51668,732],{"class":731},[167,51670,46640],{"class":512},[167,51672,51673],{"class":169,"line":241},[167,51674,741],{"emptyLinePlaceholder":740},[167,51676,51677],{"class":169,"line":261},[167,51678,35953],{"class":2268},[167,51680,51681,51683,51685],{"class":169,"line":773},[167,51682,845],{"class":731},[167,51684,35960],{"class":173},[167,51686,33957],{"class":512},[167,51688,51689],{"class":169,"line":779},[167,51690,51691],{"class":2268},"   # 导入自己的数据集，并进行数据处理\n",[167,51693,51694],{"class":169,"line":785},[167,51695,49961],{"class":2268},[167,51697,51698,51700,51702,51704,51706,51708,51711],{"class":169,"line":790},[167,51699,49966],{"class":184},[167,51701,523],{"class":731},[167,51703,2870],{"class":731},[167,51705,2452],{"class":177},[167,51707,2758],{"class":184},[167,51709,51710],{"class":49977},"\u002Fdata\u002Ftest",[167,51712,27153],{"class":177},[167,51714,51715],{"class":169,"line":796},[167,51716,741],{"emptyLinePlaceholder":740},[167,51718,51719],{"class":169,"line":802},[167,51720,49989],{"class":2268},[167,51722,51723],{"class":169,"line":808},[167,51724,49994],{"class":2268},[167,51726,51727],{"class":169,"line":814},[167,51728,49999],{"class":2268},[167,51730,51731],{"class":169,"line":820},[167,51732,50004],{"class":2268},[167,51734,51735,51737,51739,51741,51743,51745,51747,51749,51751,51753,51755,51757,51759,51761,51763],{"class":169,"line":826},[167,51736,50009],{"class":512},[167,51738,523],{"class":731},[167,51740,50014],{"class":512},[167,51742,50017],{"class":184},[167,51744,2578],{"class":512},[167,51746,50022],{"class":184},[167,51748,2578],{"class":512},[167,51750,50027],{"class":184},[167,51752,50030],{"class":512},[167,51754,50033],{"class":184},[167,51756,2578],{"class":512},[167,51758,50038],{"class":184},[167,51760,2578],{"class":512},[167,51762,50043],{"class":184},[167,51764,6689],{"class":512},[167,51766,51767],{"class":169,"line":832},[167,51768,50050],{"class":2268},[167,51770,51771,51773,51775],{"class":169,"line":837},[167,51772,50055],{"class":512},[167,51774,523],{"class":731},[167,51776,50060],{"class":512},[167,51778,51779],{"class":169,"line":842},[167,51780,50065],{"class":2268},[167,51782,51783,51785,51787,51789,51791],{"class":169,"line":860},[167,51784,50070],{"class":512},[167,51786,33506],{"class":184},[167,51788,2578],{"class":512},[167,51790,33506],{"class":184},[167,51792,44622],{"class":512},[167,51794,51795],{"class":169,"line":876},[167,51796,50083],{"class":2268},[167,51798,51799],{"class":169,"line":887},[167,51800,50088],{"class":512},[167,51802,51803],{"class":169,"line":892},[167,51804,50093],{"class":512},[167,51806,51807],{"class":169,"line":907},[167,51808,50098],{"class":2268},[167,51810,51811],{"class":169,"line":920},[167,51812,50103],{"class":2268},[167,51814,51815],{"class":169,"line":933},[167,51816,741],{"emptyLinePlaceholder":740},[167,51818,51819],{"class":169,"line":946},[167,51820,50112],{"class":2268},[167,51822,51823],{"class":169,"line":959},[167,51824,50117],{"class":2268},[167,51826,51827,51829,51831,51833,51835,51837,51839,51841],{"class":169,"line":964},[167,51828,35967],{"class":512},[167,51830,523],{"class":731},[167,51832,50126],{"class":512},[167,51834,50129],{"class":184},[167,51836,2578],{"class":512},[167,51838,50134],{"class":7246},[167,51840,523],{"class":731},[167,51842,50139],{"class":512},[167,51844,51845,51847,51849,51851,51853,51855],{"class":169,"line":987},[167,51846,36024],{"class":512},[167,51848,523],{"class":731},[167,51850,33539],{"class":512},[167,51852,33542],{"class":7246},[167,51854,523],{"class":731},[167,51856,36035],{"class":512},[167,51858,51859],{"class":169,"line":993},[167,51860,36040],{"class":2268},[167,51862,51863,51865,51867,51869],{"class":169,"line":998},[167,51864,36045],{"class":7246},[167,51866,523],{"class":731},[167,51868,2418],{"class":184},[167,51870,33471],{"class":512},[167,51872,51873,51875,51877,51879],{"class":169,"line":1010},[167,51874,36056],{"class":7246},[167,51876,523],{"class":731},[167,51878,33481],{"class":184},[167,51880,33471],{"class":512},[167,51882,51883,51885,51887,51889],{"class":169,"line":1022},[167,51884,36067],{"class":7246},[167,51886,523],{"class":731},[167,51888,1154],{"class":184},[167,51890,873],{"class":512},[167,51892,51893,51895],{"class":169,"line":1027},[167,51894,6122],{"class":731},[167,51896,36080],{"class":512},[167,51898,51899],{"class":169,"line":1032},[167,51900,741],{"emptyLinePlaceholder":740},[167,51902,51903],{"class":169,"line":1049},[167,51904,36089],{"class":2268},[167,51906,51907,51909,51911],{"class":169,"line":10005},[167,51908,845],{"class":731},[167,51910,36096],{"class":173},[167,51912,36099],{"class":512},[167,51914,51915],{"class":169,"line":10011},[167,51916,36104],{"class":2268},[167,51918,51919,51921,51923,51925,51927,51929,51931],{"class":169,"line":10038},[167,51920,33243],{"class":512},[167,51922,523],{"class":731},[167,51924,33250],{"class":177},[167,51926,3758],{"class":731},[167,51928,33255],{"class":512},[167,51930,3755],{"class":731},[167,51932,36121],{"class":177},[167,51934,51935,51937,51939],{"class":169,"line":10043},[167,51936,33295],{"class":512},[167,51938,523],{"class":731},[167,51940,34293],{"class":512},[167,51942,51943],{"class":169,"line":10049},[167,51944,741],{"emptyLinePlaceholder":740},[167,51946,51947],{"class":169,"line":10061},[167,51948,36138],{"class":2268},[167,51950,51951,51953,51955],{"class":169,"line":10073},[167,51952,36143],{"class":512},[167,51954,523],{"class":731},[167,51956,34346],{"class":184},[167,51958,51959,51961,51963],{"class":169,"line":10085},[167,51960,36152],{"class":512},[167,51962,523],{"class":731},[167,51964,5120],{"class":184},[167,51966,51967],{"class":169,"line":11744},[167,51968,741],{"emptyLinePlaceholder":740},[167,51970,51971],{"class":169,"line":11769},[167,51972,36165],{"class":2268},[167,51974,51975],{"class":169,"line":11792},[167,51976,36170],{"class":2268},[167,51978,51979],{"class":169,"line":11816},[167,51980,36175],{"class":2268},[167,51982,51983,51985],{"class":169,"line":11821},[167,51984,36180],{"class":731},[167,51986,34887],{"class":512},[167,51988,51989],{"class":169,"line":11826},[167,51990,36187],{"class":2268},[167,51992,51993,51995,51997,51999],{"class":169,"line":11831},[167,51994,5437],{"class":731},[167,51996,36194],{"class":512},[167,51998,973],{"class":731},[167,52000,36199],{"class":512},[167,52002,52003,52005,52007],{"class":169,"line":11840},[167,52004,36204],{"class":512},[167,52006,523],{"class":731},[167,52008,36209],{"class":512},[167,52010,52011,52013,52015],{"class":169,"line":11845},[167,52012,36214],{"class":512},[167,52014,523],{"class":731},[167,52016,36219],{"class":512},[167,52018,52019],{"class":169,"line":11851},[167,52020,36224],{"class":2268},[167,52022,52023],{"class":169,"line":11872},[167,52024,34878],{"class":512},[167,52026,52027],{"class":169,"line":11878},[167,52028,36233],{"class":2268},[167,52030,52031,52033,52035],{"class":169,"line":11892},[167,52032,34663],{"class":512},[167,52034,523],{"class":731},[167,52036,36242],{"class":512},[167,52038,52039],{"class":169,"line":11898},[167,52040,36247],{"class":2268},[167,52042,52043,52045,52047,52049,52051,52053,52055],{"class":169,"line":11925},[167,52044,34680],{"class":512},[167,52046,523],{"class":731},[167,52048,34685],{"class":512},[167,52050,34688],{"class":7246},[167,52052,523],{"class":731},[167,52054,2418],{"class":184},[167,52056,873],{"class":512},[167,52058,52059],{"class":169,"line":11934},[167,52060,36268],{"class":2268},[167,52062,52063],{"class":169,"line":11940},[167,52064,36273],{"class":2268},[167,52066,52067],{"class":169,"line":11948},[167,52068,36278],{"class":2268},[167,52070,52071,52073,52075,52077,52079],{"class":169,"line":11953},[167,52072,36283],{"class":512},[167,52074,11505],{"class":731},[167,52076,34790],{"class":512},[167,52078,4985],{"class":731},[167,52080,36292],{"class":512},[167,52082,52083],{"class":169,"line":18630},[167,52084,36297],{"class":2268},[167,52086,52087,52089,52091,52093,52095],{"class":169,"line":18636},[167,52088,36302],{"class":512},[167,52090,11505],{"class":731},[167,52092,36307],{"class":512},[167,52094,1154],{"class":184},[167,52096,873],{"class":512},[167,52098,52099],{"class":169,"line":18659},[167,52100,741],{"emptyLinePlaceholder":740},[167,52102,52103],{"class":169,"line":18665},[167,52104,36320],{"class":2268},[167,52106,52107,52109,52111,52113,52115],{"class":169,"line":18688},[167,52108,36325],{"class":512},[167,52110,523],{"class":731},[167,52112,36330],{"class":512},[167,52114,2784],{"class":731},[167,52116,36335],{"class":512},[167,52118,52119],{"class":169,"line":18702},[167,52120,36340],{"class":2268},[167,52122,52123,52125,52127,52129],{"class":169,"line":18722},[167,52124,34454],{"class":184},[167,52126,898],{"class":512},[167,52128,36349],{"class":177},[167,52130,36352],{"class":512},[167,52132,52133],{"class":169,"line":18728},[167,52134,741],{"emptyLinePlaceholder":740},[167,52136,52137],{"class":169,"line":18739},[167,52138,36361],{"class":2268},[167,52140,52141,52143,52145,52147,52149],{"class":169,"line":18762},[167,52142,1035],{"class":731},[167,52144,1038],{"class":184},[167,52146,4985],{"class":731},[167,52148,33231],{"class":177},[167,52150,857],{"class":512},[167,52152,52153],{"class":169,"line":18784},[167,52154,36378],{"class":2268},[167,52156,52157,52159,52161],{"class":169,"line":18789},[167,52158,33295],{"class":512},[167,52160,523],{"class":731},[167,52162,46551],{"class":512},[167,52164,52165],{"class":169,"line":18795},[167,52166,36391],{"class":2268},[167,52168,52169],{"class":169,"line":18809},[167,52170,36396],{"class":2268},[167,52172,52173,52175,52177],{"class":169,"line":18822},[167,52174,36401],{"class":512},[167,52176,36404],{"class":177},[167,52178,32505],{"class":512},[167,52180,52181],{"class":169,"line":18827},[167,52182,36411],{"class":2268},[167,52184,52185,52187,52189],{"class":169,"line":18841},[167,52186,36024],{"class":512},[167,52188,523],{"class":731},[167,52190,36420],{"class":512},[167,52192,52193],{"class":169,"line":18846},[167,52194,36425],{"class":2268},[167,52196,52197],{"class":169,"line":18852},[167,52198,36430],{"class":512},[167,52200,52201],{"class":169,"line":18857},[167,52202,741],{"emptyLinePlaceholder":740},[167,52204,52205],{"class":169,"line":18871},[167,52206,36439],{"class":2268},[167,52208,52209],{"class":169,"line":18876},[167,52210,36444],{"class":2268},[167,52212,52213,52215,52217,52219,52221,52223,52225],{"class":169,"line":18881},[167,52214,33243],{"class":512},[167,52216,523],{"class":731},[167,52218,33250],{"class":177},[167,52220,3758],{"class":731},[167,52222,33255],{"class":512},[167,52224,3755],{"class":731},[167,52226,36121],{"class":177},[167,52228,52229,52231,52233],{"class":169,"line":18895},[167,52230,33295],{"class":512},[167,52232,523],{"class":731},[167,52234,34293],{"class":512},[167,52236,52237],{"class":169,"line":18907},[167,52238,36473],{"class":2268},[167,52240,52241],{"class":169,"line":18912},[167,52242,36478],{"class":2268},[167,52244,52245,52247,52249,52251,52254,52256,52259],{"class":169,"line":18925},[167,52246,36483],{"class":512},[167,52248,523],{"class":731},[167,52250,3090],{"class":512},[167,52252,52253],{"class":177},"'猫'",[167,52255,2578],{"class":512},[167,52257,52258],{"class":177},"'狗'",[167,52260,35249],{"class":512},[167,52262,52263,52265],{"class":169,"line":18930},[167,52264,36180],{"class":731},[167,52266,34887],{"class":512},[167,52268,52269],{"class":169,"line":18935},[167,52270,36548],{"class":2268},[167,52272,52273,52275,52277,52279],{"class":169,"line":18940},[167,52274,5437],{"class":731},[167,52276,36555],{"class":512},[167,52278,973],{"class":731},[167,52280,36199],{"class":512},[167,52282,52283,52285,52287],{"class":169,"line":18953},[167,52284,34613],{"class":512},[167,52286,523],{"class":731},[167,52288,34618],{"class":512},[167,52290,52291,52293,52295],{"class":169,"line":18958},[167,52292,34628],{"class":512},[167,52294,523],{"class":731},[167,52296,34633],{"class":512},[167,52298,52299],{"class":169,"line":34636},[167,52300,741],{"emptyLinePlaceholder":740},[167,52302,52303],{"class":169,"line":34642},[167,52304,36584],{"class":2268},[167,52306,52307],{"class":169,"line":34648},[167,52308,34878],{"class":512},[167,52310,52311],{"class":169,"line":34654},[167,52312,36593],{"class":2268},[167,52314,52315,52317,52319],{"class":169,"line":34660},[167,52316,34663],{"class":512},[167,52318,523],{"class":731},[167,52320,34668],{"class":512},[167,52322,52323],{"class":169,"line":34671},[167,52324,36606],{"class":2268},[167,52326,52327,52329,52331,52333,52335,52337,52339],{"class":169,"line":34677},[167,52328,34680],{"class":512},[167,52330,523],{"class":731},[167,52332,34685],{"class":512},[167,52334,34688],{"class":7246},[167,52336,523],{"class":731},[167,52338,2418],{"class":184},[167,52340,873],{"class":512},[167,52342,52343],{"class":169,"line":34697},[167,52344,36627],{"class":2268},[167,52346,52347,52349,52351],{"class":169,"line":34703},[167,52348,36632],{"class":512},[167,52350,523],{"class":731},[167,52352,36637],{"class":512},[167,52354,52355,52357,52359],{"class":169,"line":34714},[167,52356,36642],{"class":512},[167,52358,523],{"class":731},[167,52360,36647],{"class":512},[167,52362,52363,52365,52367,52369,52371,52373,52375,52377],{"class":169,"line":34720},[167,52364,36652],{"class":184},[167,52366,898],{"class":512},[167,52368,36657],{"class":177},[167,52370,36660],{"class":512},[167,52372,36663],{"class":177},[167,52374,2578],{"class":512},[167,52376,36668],{"class":177},[167,52378,36671],{"class":512},[2113,52380,52381],{},"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":32,"searchDepth":191,"depth":191,"links":52383},[52384,52385,52386,52387],{"id":32599,"depth":205,"text":32600},{"id":39840,"depth":205,"text":39841},{"id":43272,"depth":205,"text":43273},{"id":47281,"depth":205,"text":47282},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32591,"description":25403},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52394,"title":52395,"body":52396,"description":25403,"extension":2140,"meta":52403,"navigation":740,"path":52404,"seo":52405,"stem":52406,"__hash__":52407},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52397,"toc":52401},[52398],[10,52399,52395],{"id":52400},"_3yolo模型学习",{"title":32,"searchDepth":191,"depth":191,"links":52402},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52395,"description":25403},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52409,"title":52410,"body":52411,"description":52418,"extension":2140,"meta":52419,"navigation":740,"path":52421,"seo":52422,"stem":52423,"__hash__":52424},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52412,"toc":52416},[52413],[19,52414,52415],{},"yolo模型还未补充",{"title":32,"searchDepth":191,"depth":191,"links":52417},[],"深度学习学习",{"category":52420},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52410,"description":52418},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52426,"title":52427,"body":52428,"description":25403,"extension":2140,"meta":52453,"navigation":740,"path":52454,"seo":52455,"stem":52456,"__hash__":52457},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52429,"toc":52451},[52430,52433,52436,52441,52448],[10,52431,52427],{"id":52432},"_1工具",[19,52434,52435],{},"提示错误插件：有问题会提前报错",[19,52437,52438],{},[3528,52439],{"alt":32,"src":52440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52442,52443],{},[2439,52444,52447],{"href":52445,"rel":52446},"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",[25887],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52449,52450],{},"alt键加上下箭头可以实现语句的移动",{"title":32,"searchDepth":191,"depth":191,"links":52452},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52427,"description":25403},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52459,"title":52460,"body":52461,"description":25403,"extension":2140,"meta":55318,"navigation":740,"path":55319,"seo":55320,"stem":55321,"__hash__":55322},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52462,"toc":55269},[52463,52466,52470,52474,52479,52482,52487,52491,52498,52503,52510,52515,52522,52527,52531,52536,52539,52543,52548,52552,52557,52560,52563,52566,52569,52572,52575,52578,52581,52586,52591,52596,52600,52603,52606,52610,52615,52618,52626,52631,52648,52656,52661,52666,52671,52676,52681,52684,52689,52694,52698,52707,52712,52717,52721,52726,52729,52733,52738,52746,52751,52756,52759,52764,52769,52774,52777,52780,52783,52788,52793,52796,52801,52804,52809,52812,52815,52818,52823,52826,52829,52844,52849,52854,52859,52862,52865,52868,52882,52885,52890,52895,52898,52901,52904,52907,52910,52913,52916,52920,52924,52929,52933,52936,52941,52946,52949,52954,52957,52961,52966,52969,52972,52975,52978,52981,52984,52987,52990,52993,52997,53002,53007,53012,53015,53018,53022,53027,53030,53034,53037,53040,53045,53048,53051,53055,53059,53062,53067,53072,53075,53104,53109,53114,53119,53124,53128,53133,53137,53142,53145,53149,53153,53158,53162,53167,53172,53176,53181,53184,53186,53189,53194,53198,53203,53207,53211,53216,53221,53226,53231,53235,53240,53245,53250,53253,53256,53261,53264,53269,53274,53279,53284,53288,54091,54095,54437,54442,54445,54448,54451,54454,54457,54460,54463,54466,54468,54471,54473,54476,54480,54485,54488,54491,54494,54498,54503,54508,54528,54531,54535,54540,54545,54562,54566,54595,54599,54621,54623,54662,54670,54676,54680,54683,54686,54691,54696,54699,54702,54705,54710,54715,54718,54721,54724,54727,54730,54733,54736,54739,54742,54745,54748,54750,54753,54756,54759,54762,54765,54768,54771,54774,54778,54783,54786,54791,54794,54797,54800,54803,54806,54809,54812,54814,54817,54820,54823,54826,54829,54832,54836,54839,54848,54851,54856,54859,54864,54867,54870,54873,54876,54879,54882,54885,54889,54893,54896,54899,54904,54909,54914,54918,54923,54928,54931,54934,54937,54940,54943,54948,54951,54956,54958,54963,54966,54970,54975,54978,54981,54986,54990,54993,54998,55001,55004,55033,55038,55041,55044,55047,55050,55053,55057,55060,55144,55148,55151,55156,55161,55168,55171,55174,55177,55180,55183,55188,55193,55196,55199,55202,55205,55208,55211,55214,55217,55220,55222,55225,55229,55234,55239,55244,55247,55252,55257,55260,55263,55266],[10,52464,52460],{"id":52465},"_2基础语法",[14,52467,52469],{"id":52468},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[494,52471,52473],{"id":52472},"_211-js组成","2.1.1 js组成",[40,52475,52476],{},[43,52477,52478],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52480,52481],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[40,52483,52484],{"start":191},[43,52485,52486],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[494,52488,52490],{"id":52489},"_212-js书写位置","2.1.2 js书写位置",[40,52492,52493],{},[43,52494,52495],{},[2354,52496,52497],{},"内部 JavaScript",[19,52499,52500],{},[3528,52501],{"alt":32,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[40,52504,52505],{"start":191},[43,52506,52507],{},[2354,52508,52509],{},"外部 JavaScript",[19,52511,52512],{},[3528,52513],{"alt":32,"src":52514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[40,52516,52517],{"start":205},[43,52518,52519],{},[2354,52520,52521],{},"内联 JavaScript",[19,52523,52524],{},[3528,52525],{"alt":32,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[494,52528,52530],{"id":52529},"_213-javascript注释","2.1.3 JavaScript注释",[19,52532,52533],{},[3528,52534],{"alt":32,"src":52535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52537,52538],{},"alt+shift+a一定要记住！",[494,52540,52542],{"id":52541},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52544,52545],{},[3528,52546],{"alt":32,"src":52547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[494,52549,52551],{"id":52550},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[40,52553,52554],{},[43,52555,52556],{},"输出语法：",[19,52558,52559],{},"①document.write('要出的内容')",[19,52561,52562],{},"向body内输出内容；",[19,52564,52565],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52567,52568],{},"②alert('要出的内容')",[19,52570,52571],{},"页面弹出警告对话框",[19,52573,52574],{},"③console.log('控制台打印')",[19,52576,52577],{},"控制台输出语法，程序员调试使用",[19,52579,52580],{},"输入log就行，自动生成：",[19,52582,52583],{},[3528,52584],{"alt":32,"src":52585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[40,52587,52588],{"start":191},[43,52589,52590],{},"输入语法：",[19,52592,52593],{},[3528,52594],{"alt":32,"src":52595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[494,52597,52599],{"id":52598},"_2116-字面量","21.1.6 字面量",[19,52601,52602],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52604,52605],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52607,52609],{"id":52608},"_22-变量","2.2 变量",[40,52611,52612],{},[43,52613,52614],{},"变量声明",[19,52616,52617],{},"let 变量名",[3205,52619,52620,52623],{},[43,52621,52622],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[43,52624,52625],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[40,52627,52628],{"start":191},[43,52629,52630],{},"变量赋值",[26,52632,52636],{"className":52633,"code":52634,"language":52635,"meta":32,"style":32},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[34,52637,52638,52643],{"__ignoreMap":32},[167,52639,52640],{"class":169,"line":170},[167,52641,52642],{"class":512},"let age\n",[167,52644,52645],{"class":169,"line":191},[167,52646,52647],{"class":512},"age=18\n",[40,52649,52650,52653],{"start":205},[43,52651,52652],{},"连这些（变量的初始化）：let age=18",[43,52654,52655],{},"更新变量",[19,52657,52658],{},[3528,52659],{"alt":32,"src":52660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[40,52662,52663],{"start":230},[43,52664,52665],{},"声明多个变量",[19,52667,52668],{},[3528,52669],{"alt":32,"src":52670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[40,52672,52673],{"start":241},[43,52674,52675],{},"变量命名规则与规范",[19,52677,52678],{},[3528,52679],{"alt":32,"src":52680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52682,52683],{},"遵守小驼峰！",[40,52685,52686],{"start":261},[43,52687,52688],{},"变量拓展-let和var的区别",[19,52690,52691],{},[3528,52692],{"alt":32,"src":52693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52695,52697],{"id":52696},"_23-数组","2.3 数组",[26,52699,52701],{"className":52633,"code":52700,"language":52635,"meta":32,"style":32},"let arr = []\n",[34,52702,52703],{"__ignoreMap":32},[167,52704,52705],{"class":169,"line":170},[167,52706,52700],{"class":512},[19,52708,52709],{},[3528,52710],{"alt":32,"src":52711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52713,52714],{},[3528,52715],{"alt":32,"src":52716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52718,52720],{"id":52719},"_24-常量","2.4 常量",[19,52722,52723],{},[3528,52724],{"alt":32,"src":52725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52727,52728],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52730,52732],{"id":52731},"_25-数据类型","2.5 数据类型",[19,52734,52735],{},[3528,52736],{"alt":32,"src":52737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[40,52739,52740,52743],{},[43,52741,52742],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[43,52744,52745],{},"算数运算符：",[19,52747,52748],{},[3528,52749],{"alt":32,"src":52750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[40,52752,52753],{"start":205},[43,52754,52755],{},"数字类型（Number）",[19,52757,52758],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52760,52761],{},[3528,52762],{"alt":32,"src":52763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[40,52765,52766],{"start":219},[43,52767,52768],{},"字符串类型（string）",[19,52770,52771],{},[3528,52772],{"alt":32,"src":52773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52775,52776],{},"反引号也是可以使用的",[19,52778,52779],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52781,52782],{},"例如：document.write(\"我今年\"+age+\"岁\")",[40,52784,52785],{"start":230},[43,52786,52787],{},"模板字符串",[19,52789,52790],{},[3528,52791],{"alt":32,"src":52792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52794,52795],{},"类似于python的字符串格式化",[40,52797,52798],{"start":241},[43,52799,52800],{},"布尔类型",[19,52802,52803],{},"true 和 false",[40,52805,52806],{"start":261},[43,52807,52808],{},"未定义类型（underfined）",[19,52810,52811],{},"表示没有赋值",[19,52813,52814],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52816,52817],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[40,52819,52820],{"start":773},[43,52821,52822],{},"null（空类型）",[19,52824,52825],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52827,52828],{},"赋值了，但是内容为空",[26,52830,52832],{"className":52633,"code":52831,"language":52635,"meta":32,"style":32},"typeof null\n输出的是'object'，是一个对象数据类型\n",[34,52833,52834,52839],{"__ignoreMap":32},[167,52835,52836],{"class":169,"line":170},[167,52837,52838],{"class":512},"typeof null\n",[167,52840,52841],{"class":169,"line":191},[167,52842,52843],{"class":512},"输出的是'object'，是一个对象数据类型\n",[40,52845,52846],{"start":779},[43,52847,52848],{},"控制台检测数据类型",[19,52850,52851],{},[3528,52852],{"alt":32,"src":52853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[40,52855,52856],{"start":785},[43,52857,52858],{},"类型转换",[19,52860,52861],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52863,52864],{},"转换方式：隐式转换和显示转换",[19,52866,52867],{},"①隐式转换",[3205,52869,52870,52873,52876,52879],{},[43,52871,52872],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[43,52874,52875],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[43,52877,52878],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[43,52880,52881],{},"任何数据和字符串相加结果都是字符串",[19,52883,52884],{},"②显示转换",[19,52886,52887],{},[3528,52888],{"alt":32,"src":52889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52891,52892],{},[3528,52893],{"alt":32,"src":52894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52896,52897],{},"在输入的时候要用好隐式转换，简单写起来",[19,52899,52900],{},"let num = +prompt(’请输入数字：‘)",[19,52902,52903],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52905,52906],{},"console.log(parseInt('12.333px'))",[19,52908,52909],{},"输出为：12",[19,52911,52912],{},"console.log(parseInt('a'a'a12.333px'))",[19,52914,52915],{},"输出：NaN",[14,52917,52919],{"id":52918},"_26-运算符","2.6 运算符",[494,52921,52923],{"id":52922},"_261-赋值运算符","2.6.1 赋值运算符",[19,52925,52926],{},[3528,52927],{"alt":32,"src":52928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[494,52930,52932],{"id":52931},"_262-一元运算符","2.6.2 一元运算符",[19,52934,52935],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52937,52938],{},[3528,52939],{"alt":32,"src":52940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52942,52943],{},[3528,52944],{"alt":32,"src":52945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52947,52948],{},"两者的区别：",[19,52950,52951],{},[3528,52952],{"alt":32,"src":52953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52955,52956],{},"前置先自加；后置后加，代码执行完之后再加",[494,52958,52960],{"id":52959},"_263-比较运算符","2.6.3 比较运算符",[19,52962,52963],{},[3528,52964],{"alt":32,"src":52965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52967,52968],{},"比较运算符也有隐式转换",[19,52970,52971],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52973,52974],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52976,52977],{},"要使用三等，开发的时候",[19,52979,52980],{},"NaN不等于任何人，包括它自己",[19,52982,52983],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52985,52986],{},"7\u002F10=0.7",[19,52988,52989],{},"最后：0.5+0.2=0.7",[19,52991,52992],{},"字符串比较，比较的是字符对应的ASCII码",[494,52994,52996],{"id":52995},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52998,52999],{},[3528,53000],{"alt":32,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53003,53004],{},[3528,53005],{"alt":32,"src":53006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53008,53009],{},[3528,53010],{"alt":32,"src":53011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53013,53014],{},"上述题目选D",[19,53016,53017],{},"与真2假1；或真1假2",[494,53019,53021],{"id":53020},"_265-运算符优先级","2.6.5 运算符优先级",[19,53023,53024],{},[3528,53025],{"alt":32,"src":53026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53028,53029],{},"先算逻辑与，后算逻辑或",[14,53031,53033],{"id":53032},"_27-语句","2.7 语句",[19,53035,53036],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53038,53039],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53041,53042],{},[3528,53043],{"alt":32,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53046,53047],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53049,53050],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[494,53052,53054],{"id":53053},"_271-分支语句","2.7.1 分支语句",[24024,53056,53058],{"id":53057},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53060,53061],{},"if语句单行简单的话，可以不写{}，写在一行就行",[40,53063,53064],{},[43,53065,53066],{},"单分支语句",[19,53068,53069],{},[3528,53070],{"alt":32,"src":53071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53073,53074],{},"除了0，所有数字都为真",[26,53076,53078],{"className":52633,"code":53077,"language":52635,"meta":32,"style":32},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[34,53079,53080,53085,53090,53095,53099],{"__ignoreMap":32},[167,53081,53082],{"class":169,"line":170},[167,53083,53084],{"class":512},"if（0) {\n",[167,53086,53087],{"class":169,"line":191},[167,53088,53089],{"class":512},"    let a=1\n",[167,53091,53092],{"class":169,"line":205},[167,53093,53094],{"class":512},"    alert(typeof a)\n",[167,53096,53097],{"class":169,"line":219},[167,53098,3630],{"class":512},[167,53100,53101],{"class":169,"line":230},[167,53102,53103],{"class":512},"不输出，括号为假\n",[40,53105,53106],{"start":191},[43,53107,53108],{},"双分支语句",[19,53110,53111],{},[3528,53112],{"alt":32,"src":53113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[40,53115,53116],{"start":205},[43,53117,53118],{},"多分支语句",[19,53120,53121],{},[3528,53122],{"alt":32,"src":53123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24024,53125,53127],{"id":53126},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53129,53130],{},[3528,53131],{"alt":32,"src":53132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24024,53134,53136],{"id":53135},"_2713-switch语句","2.7.1.3 switch语句",[19,53138,53139],{},[3528,53140],{"alt":32,"src":53141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53143,53144],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[494,53146,53148],{"id":53147},"_272-循环语句","2.7.2 循环语句",[24024,53150,53152],{"id":53151},"_2721-断点演示","2.7.2.1 断点演示",[19,53154,53155],{},[3528,53156],{"alt":32,"src":53157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24024,53159,53161],{"id":53160},"_2722-while循环","2.7.2.2 while循环",[19,53163,53164],{},[3528,53165],{"alt":32,"src":53166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53168,53169],{},[3528,53170],{"alt":32,"src":53171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24024,53173,53175],{"id":53174},"_2723-for循环","2.7.2.3 for循环",[19,53177,53178],{},[3528,53179],{"alt":32,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53182,53183],{},"for(;;) {",[19,53185,3145],{},[19,53187,53188],{},"表示无限循环",[19,53190,53191],{},[3528,53192],{"alt":32,"src":53193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24024,53195,53197],{"id":53196},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53199,53200],{},[3528,53201],{"alt":32,"src":53202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53204,53206],{"id":53205},"_28-数组","2.8 数组",[494,53208,53210],{"id":53209},"_281-基础认识","2.8.1 基础认识",[19,53212,53213],{},[3528,53214],{"alt":32,"src":53215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53217,53218],{},[3528,53219],{"alt":32,"src":53220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53222,53223],{},[3528,53224],{"alt":32,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53227,53228],{},[3528,53229],{"alt":32,"src":53230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[494,53232,53234],{"id":53233},"_282-操作数组","2.8.2 操作数组",[19,53236,53237],{},[3528,53238],{"alt":32,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[40,53241,53242],{},[43,53243,53244],{},"添加元素",[19,53246,53247],{},[3528,53248],{"alt":32,"src":53249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53251,53252],{},"console.log(arr.push('green'))",[19,53254,53255],{},"输出结果：为新数组的长度",[19,53257,53258],{},[3528,53259],{"alt":32,"src":53260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53262,53263],{},"push用的非常多，一定要记住",[40,53265,53266],{},[43,53267,53268],{},"删除元素",[19,53270,53271],{},[3528,53272],{"alt":32,"src":53273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53275,53276],{},[3528,53277],{"alt":32,"src":53278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53280,53281],{},[3528,53282],{"alt":32,"src":53283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[494,53285,53287],{"id":53286},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,53289,53291],{"className":52633,"code":53290,"language":52635,"meta":32,"style":32},"\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",[34,53292,53293,53306,53322,53326,53335,53353,53377,53399,53413,53421,53428,53440,53451,53455,53459,53466,53478,53493,53506,53525,53542,53557,53569,53581,53593,53597,53601,53612,53622,53634,53646,53658,53669,53673,53677,53689,53693,53707,53711,53715,53726,53740,53752,53766,53770,53779,53787,53791,53799,53803,53812,53817,53822,53835,53863,53868,53873,53898,53903,53907,53912,53917,53932,53936,53941,53971,53983,53999,54015,54029,54034,54041,54045,54050,54063,54071,54079,54083],{"__ignoreMap":32},[167,53294,53295,53298,53301,53304],{"class":169,"line":170},[167,53296,53297],{"class":512},"\u003C!",[167,53299,53300],{"class":516},"DOCTYPE",[167,53302,53303],{"class":173}," html",[167,53305,537],{"class":512},[167,53307,53308,53310,53312,53315,53317,53320],{"class":169,"line":191},[167,53309,513],{"class":512},[167,53311,52635],{"class":516},[167,53313,53314],{"class":173}," lang",[167,53316,523],{"class":512},[167,53318,53319],{"class":177},"\"en\"",[167,53321,537],{"class":512},[167,53323,53324],{"class":169,"line":205},[167,53325,741],{"emptyLinePlaceholder":740},[167,53327,53328,53330,53333],{"class":169,"line":219},[167,53329,513],{"class":512},[167,53331,53332],{"class":516},"head",[167,53334,537],{"class":512},[167,53336,53337,53340,53343,53346,53348,53351],{"class":169,"line":230},[167,53338,53339],{"class":512},"    \u003C",[167,53341,53342],{"class":516},"meta",[167,53344,53345],{"class":173}," charset",[167,53347,523],{"class":512},[167,53349,53350],{"class":177},"\"UTF-8\"",[167,53352,537],{"class":512},[167,53354,53355,53357,53359,53362,53364,53367,53370,53372,53375],{"class":169,"line":241},[167,53356,53339],{"class":512},[167,53358,53342],{"class":516},[167,53360,53361],{"class":173}," http-equiv",[167,53363,523],{"class":512},[167,53365,53366],{"class":177},"\"X-UA-Compatible\"",[167,53368,53369],{"class":173}," content",[167,53371,523],{"class":512},[167,53373,53374],{"class":177},"\"IE=edge\"",[167,53376,537],{"class":512},[167,53378,53379,53381,53383,53385,53387,53390,53392,53394,53397],{"class":169,"line":261},[167,53380,53339],{"class":512},[167,53382,53342],{"class":516},[167,53384,520],{"class":173},[167,53386,523],{"class":512},[167,53388,53389],{"class":177},"\"viewport\"",[167,53391,53369],{"class":173},[167,53393,523],{"class":512},[167,53395,53396],{"class":177},"\"width=device-width, initial-scale=1.0\"",[167,53398,537],{"class":512},[167,53400,53401,53403,53406,53409,53411],{"class":169,"line":773},[167,53402,53339],{"class":512},[167,53404,53405],{"class":516},"title",[167,53407,53408],{"class":512},">Document\u003C\u002F",[167,53410,53405],{"class":516},[167,53412,537],{"class":512},[167,53414,53415,53417,53419],{"class":169,"line":779},[167,53416,53339],{"class":512},[167,53418,2113],{"class":516},[167,53420,537],{"class":512},[167,53422,53423,53426],{"class":169,"line":785},[167,53424,53425],{"class":516},"        *",[167,53427,17598],{"class":512},[167,53429,53430,53433,53436,53438],{"class":169,"line":790},[167,53431,53432],{"class":184},"            margin",[167,53434,53435],{"class":512},": ",[167,53437,1154],{"class":184},[167,53439,3359],{"class":512},[167,53441,53442,53445,53447,53449],{"class":169,"line":796},[167,53443,53444],{"class":184},"            padding",[167,53446,53435],{"class":512},[167,53448,1154],{"class":184},[167,53450,3359],{"class":512},[167,53452,53453],{"class":169,"line":802},[167,53454,4572],{"class":512},[167,53456,53457],{"class":169,"line":808},[167,53458,741],{"emptyLinePlaceholder":740},[167,53460,53461,53464],{"class":169,"line":814},[167,53462,53463],{"class":173},"        .box",[167,53465,17598],{"class":512},[167,53467,53468,53471,53473,53476],{"class":169,"line":820},[167,53469,53470],{"class":184},"            display",[167,53472,53435],{"class":512},[167,53474,53475],{"class":184},"flex",[167,53477,3359],{"class":512},[167,53479,53480,53483,53485,53488,53491],{"class":169,"line":826},[167,53481,53482],{"class":184},"            width",[167,53484,53435],{"class":512},[167,53486,53487],{"class":184},"700",[167,53489,53490],{"class":731},"px",[167,53492,3359],{"class":512},[167,53494,53495,53498,53500,53502,53504],{"class":169,"line":832},[167,53496,53497],{"class":184},"            height",[167,53499,53435],{"class":512},[167,53501,6005],{"class":184},[167,53503,53490],{"class":731},[167,53505,3359],{"class":512},[167,53507,53508,53511,53513,53515,53517,53520,53523],{"class":169,"line":837},[167,53509,53510],{"class":184},"            border-left",[167,53512,53435],{"class":512},[167,53514,2418],{"class":184},[167,53516,53490],{"class":731},[167,53518,53519],{"class":184}," solid",[167,53521,53522],{"class":184}," pink",[167,53524,3359],{"class":512},[167,53526,53527,53530,53532,53534,53536,53538,53540],{"class":169,"line":842},[167,53528,53529],{"class":184},"            border-bottom",[167,53531,53435],{"class":512},[167,53533,2418],{"class":184},[167,53535,53490],{"class":731},[167,53537,53519],{"class":184},[167,53539,53522],{"class":184},[167,53541,3359],{"class":512},[167,53543,53544,53546,53548,53550,53552,53555],{"class":169,"line":860},[167,53545,53432],{"class":184},[167,53547,53435],{"class":512},[167,53549,2856],{"class":184},[167,53551,53490],{"class":731},[167,53553,53554],{"class":184}," auto",[167,53556,3359],{"class":512},[167,53558,53559,53562,53564,53567],{"class":169,"line":876},[167,53560,53561],{"class":184},"            justify-content",[167,53563,53435],{"class":512},[167,53565,53566],{"class":184},"space-around",[167,53568,3359],{"class":512},[167,53570,53571,53574,53576,53579],{"class":169,"line":887},[167,53572,53573],{"class":184},"            align-items",[167,53575,53435],{"class":512},[167,53577,53578],{"class":184},"flex-end",[167,53580,3359],{"class":512},[167,53582,53583,53586,53588,53591],{"class":169,"line":892},[167,53584,53585],{"class":184},"            text-align",[167,53587,53435],{"class":512},[167,53589,53590],{"class":184},"center",[167,53592,3359],{"class":512},[167,53594,53595],{"class":169,"line":907},[167,53596,4572],{"class":512},[167,53598,53599],{"class":169,"line":920},[167,53600,741],{"emptyLinePlaceholder":740},[167,53602,53603,53605,53607,53610],{"class":169,"line":933},[167,53604,53463],{"class":173},[167,53606,3159],{"class":731},[167,53608,53609],{"class":516},"div",[167,53611,17598],{"class":512},[167,53613,53614,53616,53618,53620],{"class":169,"line":946},[167,53615,53470],{"class":184},[167,53617,53435],{"class":512},[167,53619,53475],{"class":184},[167,53621,3359],{"class":512},[167,53623,53624,53626,53628,53630,53632],{"class":169,"line":959},[167,53625,53482],{"class":184},[167,53627,53435],{"class":512},[167,53629,2856],{"class":184},[167,53631,53490],{"class":731},[167,53633,3359],{"class":512},[167,53635,53636,53639,53641,53644],{"class":169,"line":964},[167,53637,53638],{"class":184},"            background-color",[167,53640,53435],{"class":512},[167,53642,53643],{"class":184},"pink",[167,53645,3359],{"class":512},[167,53647,53648,53651,53653,53656],{"class":169,"line":987},[167,53649,53650],{"class":184},"            flex-direction",[167,53652,53435],{"class":512},[167,53654,53655],{"class":184},"column",[167,53657,3359],{"class":512},[167,53659,53660,53662,53664,53667],{"class":169,"line":993},[167,53661,53561],{"class":184},[167,53663,53435],{"class":512},[167,53665,53666],{"class":184},"space-between",[167,53668,3359],{"class":512},[167,53670,53671],{"class":169,"line":998},[167,53672,4572],{"class":512},[167,53674,53675],{"class":169,"line":1010},[167,53676,741],{"emptyLinePlaceholder":740},[167,53678,53679,53681,53684,53687],{"class":169,"line":1022},[167,53680,53463],{"class":173},[167,53682,53683],{"class":516}," div",[167,53685,53686],{"class":516}," span",[167,53688,17598],{"class":512},[167,53690,53691],{"class":169,"line":1027},[167,53692,741],{"emptyLinePlaceholder":740},[167,53694,53695,53698,53700,53703,53705],{"class":169,"line":1032},[167,53696,53697],{"class":184},"            margin-top",[167,53699,53435],{"class":512},[167,53701,53702],{"class":184},"-20",[167,53704,53490],{"class":731},[167,53706,3359],{"class":512},[167,53708,53709],{"class":169,"line":1049},[167,53710,4572],{"class":512},[167,53712,53713],{"class":169,"line":10005},[167,53714,741],{"emptyLinePlaceholder":740},[167,53716,53717,53719,53721,53724],{"class":169,"line":10011},[167,53718,53463],{"class":173},[167,53720,53683],{"class":516},[167,53722,53723],{"class":516}," h4",[167,53725,17598],{"class":512},[167,53727,53728,53731,53733,53736,53738],{"class":169,"line":10038},[167,53729,53730],{"class":184},"            margin-bottom",[167,53732,53435],{"class":512},[167,53734,53735],{"class":184},"-35",[167,53737,53490],{"class":731},[167,53739,3359],{"class":512},[167,53741,53742,53744,53746,53748,53750],{"class":169,"line":10043},[167,53743,53482],{"class":184},[167,53745,53435],{"class":512},[167,53747,2556],{"class":184},[167,53749,53490],{"class":731},[167,53751,3359],{"class":512},[167,53753,53754,53757,53759,53762,53764],{"class":169,"line":10049},[167,53755,53756],{"class":184},"            margin-left",[167,53758,53435],{"class":512},[167,53760,53761],{"class":184},"-10",[167,53763,53490],{"class":731},[167,53765,3359],{"class":512},[167,53767,53768],{"class":169,"line":10061},[167,53769,4572],{"class":512},[167,53771,53772,53775,53777],{"class":169,"line":10073},[167,53773,53774],{"class":512},"    \u003C\u002F",[167,53776,2113],{"class":516},[167,53778,537],{"class":512},[167,53780,53781,53783,53785],{"class":169,"line":10085},[167,53782,575],{"class":512},[167,53784,53332],{"class":516},[167,53786,537],{"class":512},[167,53788,53789],{"class":169,"line":11744},[167,53790,741],{"emptyLinePlaceholder":740},[167,53792,53793,53795,53797],{"class":169,"line":11769},[167,53794,513],{"class":512},[167,53796,517],{"class":516},[167,53798,537],{"class":512},[167,53800,53801],{"class":169,"line":11792},[167,53802,741],{"emptyLinePlaceholder":740},[167,53804,53805,53807,53810],{"class":169,"line":11816},[167,53806,53339],{"class":512},[167,53808,53809],{"class":516},"script",[167,53811,537],{"class":512},[167,53813,53814],{"class":169,"line":11821},[167,53815,53816],{"class":2268},"        \u002F\u002F 1. 四次弹框效果\n",[167,53818,53819],{"class":169,"line":11826},[167,53820,53821],{"class":2268},"        \u002F\u002F 声明一个新的数组\n",[167,53823,53824,53827,53830,53832],{"class":169,"line":11831},[167,53825,53826],{"class":731},"        let",[167,53828,53829],{"class":512}," arr ",[167,53831,523],{"class":731},[167,53833,53834],{"class":512}," []\n",[167,53836,53837,53839,53841,53844,53846,53848,53850,53852,53854,53857,53859,53861],{"class":169,"line":11840},[167,53838,5437],{"class":731},[167,53840,3716],{"class":512},[167,53842,53843],{"class":731},"let",[167,53845,11466],{"class":512},[167,53847,523],{"class":731},[167,53849,27138],{"class":184},[167,53851,11473],{"class":512},[167,53853,3653],{"class":731},[167,53855,53856],{"class":184}," 4",[167,53858,5248],{"class":512},[167,53860,4336],{"class":731},[167,53862,14470],{"class":512},[167,53864,53865],{"class":169,"line":11845},[167,53866,53867],{"class":2268},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[167,53869,53870],{"class":169,"line":11851},[167,53871,53872],{"class":2268},"            \u002F\u002F arr.push(num)\n",[167,53874,53875,53878,53881,53883,53886,53888,53891,53893,53896],{"class":169,"line":11872},[167,53876,53877],{"class":512},"            arr.",[167,53879,53880],{"class":173},"push",[167,53882,898],{"class":512},[167,53884,53885],{"class":173},"prompt",[167,53887,898],{"class":512},[167,53889,53890],{"class":177},"`请输入第${",[167,53892,2641],{"class":512},[167,53894,53895],{"class":177},"}季度的数据:`",[167,53897,32505],{"class":512},[167,53899,53900],{"class":169,"line":11878},[167,53901,53902],{"class":2268},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[167,53904,53905],{"class":169,"line":11892},[167,53906,4572],{"class":512},[167,53908,53909],{"class":169,"line":11898},[167,53910,53911],{"class":2268},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[167,53913,53914],{"class":169,"line":11925},[167,53915,53916],{"class":2268},"        \u002F\u002F 盒子开头\n",[167,53918,53919,53922,53925,53927,53930],{"class":169,"line":11934},[167,53920,53921],{"class":512},"        document.",[167,53923,53924],{"class":173},"write",[167,53926,898],{"class":512},[167,53928,53929],{"class":177},"` \u003Cdiv class=\"box\">`",[167,53931,873],{"class":512},[167,53933,53934],{"class":169,"line":11940},[167,53935,741],{"emptyLinePlaceholder":740},[167,53937,53938],{"class":169,"line":11948},[167,53939,53940],{"class":2268},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[167,53942,53943,53945,53947,53949,53951,53953,53955,53957,53959,53962,53965,53967,53969],{"class":169,"line":11953},[167,53944,5437],{"class":731},[167,53946,3716],{"class":512},[167,53948,53843],{"class":731},[167,53950,11466],{"class":512},[167,53952,523],{"class":731},[167,53954,6125],{"class":184},[167,53956,11473],{"class":512},[167,53958,513],{"class":731},[167,53960,53961],{"class":512}," arr.",[167,53963,53964],{"class":184},"length",[167,53966,5248],{"class":512},[167,53968,4336],{"class":731},[167,53970,14470],{"class":512},[167,53972,53973,53976,53978,53980],{"class":169,"line":18630},[167,53974,53975],{"class":512},"            document.",[167,53977,53924],{"class":173},[167,53979,898],{"class":512},[167,53981,53982],{"class":177},"`\n",[167,53984,53985,53988,53990,53992,53994,53996],{"class":169,"line":18636},[167,53986,53987],{"class":177},"              \u003Cdiv style=\"height: ${",[167,53989,5912],{"class":512},[167,53991,3090],{"class":177},[167,53993,2641],{"class":512},[167,53995,3139],{"class":177},[167,53997,53998],{"class":177},"}px;\">\n",[167,54000,54001,54004,54006,54008,54010,54012],{"class":169,"line":18659},[167,54002,54003],{"class":177},"                \u003Cspan>${",[167,54005,5912],{"class":512},[167,54007,3090],{"class":177},[167,54009,2641],{"class":512},[167,54011,3139],{"class":177},[167,54013,54014],{"class":177},"}\u003C\u002Fspan>\n",[167,54016,54017,54020,54022,54024,54026],{"class":169,"line":18665},[167,54018,54019],{"class":177},"                \u003Ch4>第${",[167,54021,2641],{"class":512},[167,54023,47566],{"class":731},[167,54025,27138],{"class":184},[167,54027,54028],{"class":177},"}季度\u003C\u002Fh4>\n",[167,54030,54031],{"class":169,"line":18688},[167,54032,54033],{"class":177},"              \u003C\u002Fdiv>          \n",[167,54035,54036,54039],{"class":169,"line":18702},[167,54037,54038],{"class":177},"            `",[167,54040,873],{"class":512},[167,54042,54043],{"class":169,"line":18722},[167,54044,4572],{"class":512},[167,54046,54047],{"class":169,"line":18728},[167,54048,54049],{"class":2268},"        \u002F\u002F 盒子结尾\n",[167,54051,54052,54054,54056,54058,54061],{"class":169,"line":18739},[167,54053,53921],{"class":512},[167,54055,53924],{"class":173},[167,54057,898],{"class":512},[167,54059,54060],{"class":177},"` \u003C\u002Fdiv>`",[167,54062,873],{"class":512},[167,54064,54065,54067,54069],{"class":169,"line":18762},[167,54066,53774],{"class":512},[167,54068,53809],{"class":516},[167,54070,537],{"class":512},[167,54072,54073,54075,54077],{"class":169,"line":18784},[167,54074,575],{"class":512},[167,54076,517],{"class":516},[167,54078,537],{"class":512},[167,54080,54081],{"class":169,"line":18789},[167,54082,741],{"emptyLinePlaceholder":740},[167,54084,54085,54087,54089],{"class":169,"line":18795},[167,54086,575],{"class":512},[167,54088,52635],{"class":516},[167,54090,537],{"class":512},[494,54092,54094],{"id":54093},"_284-冒泡排序","2.8.4 冒泡排序",[26,54096,54098],{"className":52633,"code":54097,"language":52635,"meta":32,"style":32},"\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",[34,54099,54100,54110,54124,54128,54136,54150,54170,54182,54190,54194,54202,54210,54242,54275,54312,54317,54336,54341,54354,54369,54385,54389,54394,54398,54408,54417,54425,54429],{"__ignoreMap":32},[167,54101,54102,54104,54106,54108],{"class":169,"line":170},[167,54103,53297],{"class":512},[167,54105,53300],{"class":516},[167,54107,53303],{"class":173},[167,54109,537],{"class":512},[167,54111,54112,54114,54116,54118,54120,54122],{"class":169,"line":191},[167,54113,513],{"class":512},[167,54115,52635],{"class":516},[167,54117,53314],{"class":173},[167,54119,523],{"class":512},[167,54121,53319],{"class":177},[167,54123,537],{"class":512},[167,54125,54126],{"class":169,"line":205},[167,54127,741],{"emptyLinePlaceholder":740},[167,54129,54130,54132,54134],{"class":169,"line":219},[167,54131,513],{"class":512},[167,54133,53332],{"class":516},[167,54135,537],{"class":512},[167,54137,54138,54140,54142,54144,54146,54148],{"class":169,"line":230},[167,54139,542],{"class":512},[167,54141,53342],{"class":516},[167,54143,53345],{"class":173},[167,54145,523],{"class":512},[167,54147,53350],{"class":177},[167,54149,537],{"class":512},[167,54151,54152,54154,54156,54158,54160,54162,54164,54166,54168],{"class":169,"line":241},[167,54153,542],{"class":512},[167,54155,53342],{"class":516},[167,54157,520],{"class":173},[167,54159,523],{"class":512},[167,54161,53389],{"class":177},[167,54163,53369],{"class":173},[167,54165,523],{"class":512},[167,54167,53396],{"class":177},[167,54169,537],{"class":512},[167,54171,54172,54174,54176,54178,54180],{"class":169,"line":261},[167,54173,542],{"class":512},[167,54175,53405],{"class":516},[167,54177,53408],{"class":512},[167,54179,53405],{"class":516},[167,54181,537],{"class":512},[167,54183,54184,54186,54188],{"class":169,"line":773},[167,54185,575],{"class":512},[167,54187,53332],{"class":516},[167,54189,537],{"class":512},[167,54191,54192],{"class":169,"line":779},[167,54193,741],{"emptyLinePlaceholder":740},[167,54195,54196,54198,54200],{"class":169,"line":785},[167,54197,513],{"class":512},[167,54199,517],{"class":516},[167,54201,537],{"class":512},[167,54203,54204,54206,54208],{"class":169,"line":790},[167,54205,542],{"class":512},[167,54207,53809],{"class":516},[167,54209,537],{"class":512},[167,54211,54212,54215,54217,54219,54222,54224,54226,54228,54230,54232,54234,54236,54238,54240],{"class":169,"line":796},[167,54213,54214],{"class":731},"    let",[167,54216,53829],{"class":512},[167,54218,523],{"class":731},[167,54220,54221],{"class":512}," [",[167,54223,2519],{"class":184},[167,54225,14463],{"class":512},[167,54227,2494],{"class":184},[167,54229,14463],{"class":512},[167,54231,2281],{"class":184},[167,54233,14463],{"class":512},[167,54235,2287],{"class":184},[167,54237,14463],{"class":512},[167,54239,2418],{"class":184},[167,54241,35249],{"class":512},[167,54243,54244,54246,54248,54250,54252,54254,54256,54258,54260,54262,54264,54267,54269,54271,54273],{"class":169,"line":802},[167,54245,967],{"class":731},[167,54247,3716],{"class":512},[167,54249,53843],{"class":731},[167,54251,11466],{"class":512},[167,54253,523],{"class":731},[167,54255,6125],{"class":184},[167,54257,11473],{"class":512},[167,54259,513],{"class":731},[167,54261,53961],{"class":512},[167,54263,53964],{"class":184},[167,54265,54266],{"class":731}," -",[167,54268,27138],{"class":184},[167,54270,5248],{"class":512},[167,54272,4336],{"class":731},[167,54274,14470],{"class":512},[167,54276,54277,54280,54282,54284,54286,54288,54290,54292,54294,54296,54298,54300,54302,54304,54306,54308,54310],{"class":169,"line":808},[167,54278,54279],{"class":731},"      for",[167,54281,3716],{"class":512},[167,54283,53843],{"class":731},[167,54285,11528],{"class":512},[167,54287,523],{"class":731},[167,54289,6125],{"class":184},[167,54291,11535],{"class":512},[167,54293,513],{"class":731},[167,54295,53961],{"class":512},[167,54297,53964],{"class":184},[167,54299,54266],{"class":731},[167,54301,11466],{"class":512},[167,54303,2732],{"class":731},[167,54305,27138],{"class":184},[167,54307,11542],{"class":512},[167,54309,4336],{"class":731},[167,54311,14470],{"class":512},[167,54313,54314],{"class":169,"line":814},[167,54315,54316],{"class":2268},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[167,54318,54319,54321,54324,54326,54329,54331,54333],{"class":169,"line":820},[167,54320,4540],{"class":731},[167,54322,54323],{"class":512}," (arr[j] ",[167,54325,3159],{"class":731},[167,54327,54328],{"class":512}," arr[j ",[167,54330,2681],{"class":731},[167,54332,27138],{"class":184},[167,54334,54335],{"class":512},"]) {\n",[167,54337,54338],{"class":169,"line":826},[167,54339,54340],{"class":2268},"          \u002F\u002F 交换两个变量\n",[167,54342,54343,54346,54349,54351],{"class":169,"line":832},[167,54344,54345],{"class":731},"          let",[167,54347,54348],{"class":512}," tmp ",[167,54350,523],{"class":731},[167,54352,54353],{"class":512}," arr[j]\n",[167,54355,54356,54359,54361,54363,54365,54367],{"class":169,"line":837},[167,54357,54358],{"class":512},"          arr[j] ",[167,54360,523],{"class":731},[167,54362,54328],{"class":512},[167,54364,2681],{"class":731},[167,54366,27138],{"class":184},[167,54368,35249],{"class":512},[167,54370,54371,54374,54376,54378,54380,54382],{"class":169,"line":842},[167,54372,54373],{"class":512},"          arr[j ",[167,54375,2681],{"class":731},[167,54377,27138],{"class":184},[167,54379,6475],{"class":512},[167,54381,523],{"class":731},[167,54383,54384],{"class":512}," tmp\n",[167,54386,54387],{"class":169,"line":860},[167,54388,4572],{"class":512},[167,54390,54391],{"class":169,"line":876},[167,54392,54393],{"class":512},"      }\n",[167,54395,54396],{"class":169,"line":887},[167,54397,4231],{"class":512},[167,54399,54400,54403,54405],{"class":169,"line":892},[167,54401,54402],{"class":512},"    document.",[167,54404,53924],{"class":173},[167,54406,54407],{"class":512},"(arr)\n",[167,54409,54410,54413,54415],{"class":169,"line":907},[167,54411,54412],{"class":512},"  \u003C\u002F",[167,54414,53809],{"class":516},[167,54416,537],{"class":512},[167,54418,54419,54421,54423],{"class":169,"line":920},[167,54420,575],{"class":512},[167,54422,517],{"class":516},[167,54424,537],{"class":512},[167,54426,54427],{"class":169,"line":933},[167,54428,741],{"emptyLinePlaceholder":740},[167,54430,54431,54433,54435],{"class":169,"line":946},[167,54432,575],{"class":512},[167,54434,52635],{"class":516},[167,54436,537],{"class":512},[19,54438,54439],{},[3528,54440],{"alt":32,"src":54441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54443,54444],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54446,54447],{},"let arr = [4, 2, 5, 1, 3]",[19,54449,54450],{},"\u002F\u002F 1.升序排列写法",[19,54452,54453],{},"arr.sort(function (a, b) {",[19,54455,54456],{},"return a - b",[19,54458,54459],{},"})",[19,54461,54462],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54464,54465],{},"\u002F\u002F 降序排列写法",[19,54467,54453],{},[19,54469,54470],{},"return b - a",[19,54472,54459],{},[19,54474,54475],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54477,54479],{"id":54478},"_29-函数","2.9 函数",[19,54481,54482],{},[3528,54483],{"alt":32,"src":54484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54486,54487],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54489,54490],{},"函数的声明用function",[19,54492,54493],{},"函数里边可以嵌套函数",[494,54495,54497],{"id":54496},"_291-函数传参","2.9.1 函数传参",[19,54499,54500],{},[3528,54501],{"alt":32,"src":54502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54504,54505],{},[3528,54506],{"alt":32,"src":54507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3205,54509,54510,54513,54516,54519,54522,54525],{},[43,54511,54512],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[43,54514,54515],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[43,54517,54518],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[43,54520,54521],{},"开发中尽量保持形参和实参个数一致",[43,54523,54524],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[43,54526,54527],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54529,54530],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[494,54532,54534],{"id":54533},"_292-函数的返回值","2.9.2 函数的返回值",[19,54536,54537],{},[3528,54538],{"alt":32,"src":54539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54541,54542],{},[3528,54543],{"alt":32,"src":54544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3205,54546,54547,54550,54553,54556,54559],{},[43,54548,54549],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[43,54551,54552],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[43,54554,54555],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[43,54557,54558],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[43,54560,54561],{},"断点调试:进入函数内部看执行过程F11",[494,54563,54565],{"id":54564},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,54567,54569],{"className":52633,"code":54568,"language":52635,"meta":32,"style":32},"    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",[34,54570,54571,54576,54581,54585,54590],{"__ignoreMap":32},[167,54572,54573],{"class":169,"line":170},[167,54574,54575],{"class":512},"    function fn(a, b) {\n",[167,54577,54578],{"class":169,"line":191},[167,54579,54580],{"class":512},"      console.log(a + b);\n",[167,54582,54583],{"class":169,"line":205},[167,54584,4231],{"class":512},[167,54586,54587],{"class":169,"line":219},[167,54588,54589],{"class":512},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[167,54591,54592],{"class":169,"line":230},[167,54593,54594],{"class":512},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[494,54596,54598],{"id":54597},"_294-作用域","2.9.4 作用域",[3205,54600,54601,54607,54612,54615,54618],{},[43,54602,54603,54604],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2354,54605,54606],{},"作用域",[43,54608,54609],{},[2354,54610,54611],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[43,54613,54614],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[43,54616,54617],{},"函数内部可以直接所使用全局变量",[43,54619,54620],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54622,16660],{},[26,54624,54626],{"className":52633,"code":54625,"language":52635,"meta":32,"style":32},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[34,54627,54628,54633,54638,54642,54647,54652,54657],{"__ignoreMap":32},[167,54629,54630],{"class":169,"line":170},[167,54631,54632],{"class":512},"    function fun() {\n",[167,54634,54635],{"class":169,"line":191},[167,54636,54637],{"class":512},"      num = 10\n",[167,54639,54640],{"class":169,"line":205},[167,54641,4231],{"class":512},[167,54643,54644],{"class":169,"line":219},[167,54645,54646],{"class":512},"    fun()\n",[167,54648,54649],{"class":169,"line":230},[167,54650,54651],{"class":512},"    console.log(num)\n",[167,54653,54654],{"class":169,"line":241},[167,54655,54656],{"class":512},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[167,54658,54659],{"class":169,"line":261},[167,54660,54661],{"class":512},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3205,54663,54664,54667],{},[43,54665,54666],{},"函数内部的形参可以看做是局部变量",[43,54668,54669],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54671,54672,54673],{},"变量访问原则： ",[2354,54674,54675],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[494,54677,54679],{"id":54678},"_295-匿名函数","2.9.5 匿名函数",[19,54681,54682],{},"函数可以分为具名函数和匿名函数",[19,54684,54685],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[40,54687,54688],{},[43,54689,54690],{},"函数表达式",[19,54692,54693],{},[3528,54694],{"alt":32,"src":54695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54697,54698],{},"里边也可以写参数",[19,54700,54701],{},"具名函数调用位置可以随意调整；",[19,54703,54704],{},"匿名函数函数表达式形式只能在声明后才可以使用",[40,54706,54707],{"start":191},[43,54708,54709],{},"立即执行函数",[19,54711,54712],{},[3528,54713],{"alt":32,"src":54714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54716,54717],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54719,54720],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54722,54723],{},"(function () {})();",[19,54725,54726],{},"不要落下最后的;",[19,54728,54729],{},"立即执行函数必须要加;",[19,54731,54732],{},"分号写前写后都没问题",[19,54734,54735],{},"写前：",[19,54737,54738],{},"(function() {})()",[19,54740,54741],{},";(function () {})();",[19,54743,54744],{},"写后:",[19,54746,54747],{},"(function() {})();",[19,54749,54723],{},[19,54751,54752],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54754,54755],{},"还有一种写法：",[19,54757,54758],{},"(function(){}());",[19,54760,54761],{},"或者:",[19,54763,54764],{},"!function(){}();",[19,54766,54767],{},"立即执行函数有时候也是可以加名字的：",[19,54769,54770],{},"(function flexible(window,document) {}(window,document));",[19,54772,54773],{},"省一些调用方法",[494,54775,54777],{"id":54776},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54779,54780],{},[3528,54781],{"alt":32,"src":54782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54784,54785],{},"这样就不用非得给x,y初始化了",[19,54787,54788],{},[3528,54789],{"alt":32,"src":54790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54792,54793],{},"代码执行时先看左边",[19,54795,54796],{},"例如：console.log(false && 3+5)",[19,54798,54799],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54801,54802],{},"&&都是真时，就返回最后一个真值",[19,54804,54805],{},"console.log(11 && 22)",[19,54807,54808],{},"输出22",[19,54810,54811],{},"逻辑与：遇真则真",[19,54813,16660],{},[19,54815,54816],{},"let age=1",[19,54818,54819],{},"console.log(11 || age++)",[19,54821,54822],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54824,54825],{},"console.log(11 || 22)",[19,54827,54828],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54830,54831],{},"||如果都是假的话，就取最后一个假的值了",[494,54833,54835],{"id":54834},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54837,54838],{},"显示转换：",[19,54840,54841,54844,54845],{},[2354,54842,54843],{},"记忆","： ",[2354,54846,54847],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54849,54850],{},"空字符串为假，其他字符串全为真",[19,54852,54853],{},[3528,54854],{"alt":32,"src":54855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54857,54858],{},"隐式转换：",[19,54860,54861],{},[3528,54862],{"alt":32,"src":54863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54865,54866],{},"隐式转换:",[19,54868,54869],{},"null+3=3",[19,54871,54872],{},"undefined+3=NaN",[19,54874,54875],{},"null==undefined 输出true,他两个都当0看",[19,54877,54878],{},"null===undefined 输出false",[19,54880,54881],{},"undefined做任何操作都是NaN",[19,54883,54884],{},"NaN不等于NaN，NaN表示计算错误",[14,54886,54888],{"id":54887},"_210-对象","2.10 对象",[494,54890,54892],{"id":54891},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54894,54895],{},"对象也是一种数据类型，里边的数据是无序的",[19,54897,54898],{},"对象由属性和方法组成",[19,54900,54901],{},[3528,54902],{"alt":32,"src":54903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54905,54906],{},[3528,54907],{"alt":32,"src":54908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54910,54911],{},[3528,54912],{"alt":32,"src":54913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[494,54915,54917],{"id":54916},"_2102-对象属性","2.10.2 对象属性",[19,54919,54920],{},[3528,54921],{"alt":32,"src":54922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[40,54924,54925],{},[43,54926,54927],{},"查询对象",[19,54929,54930],{},"对象名.属性 goods.uname",[19,54932,54933],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54935,54936],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54938,54939],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54941,54942],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[40,54944,54945],{"start":191},[43,54946,54947],{},"重新赋值",[19,54949,54950],{},"对象名.属性=新值",[40,54952,54953],{"start":205},[43,54954,54955],{},"增加新数据",[19,54957,54950],{},[40,54959,54960],{"start":219},[43,54961,54962],{},"删除对象中的属性",[19,54964,54965],{},"delete 对象名.属性",[494,54967,54969],{"id":54968},"_2103-对象方法","2.10.3 对象方法",[19,54971,54972],{},[3528,54973],{"alt":32,"src":54974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54976,54977],{},"后边跟的是匿名函数",[19,54979,54980],{},"对象外面的叫函数；对象内部的叫方法",[19,54982,54983],{},[3528,54984],{"alt":32,"src":54985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[494,54987,54989],{"id":54988},"_2104-遍历对象","2.10.4 遍历对象",[19,54991,54992],{},"理解为加括号的python字典遍历",[19,54994,54995],{},[3528,54996],{"alt":32,"src":54997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54999,55000],{},"k是字符串类型",[19,55002,55003],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,55005,55007],{"className":52633,"code":55006,"language":52635,"meta":32,"style":32},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[34,55008,55009,55014,55019,55024,55029],{"__ignoreMap":32},[167,55010,55011],{"class":169,"line":170},[167,55012,55013],{"class":512},"   let arr = [1, 2, 3]\n",[167,55015,55016],{"class":169,"line":191},[167,55017,55018],{"class":512},"    for (let k in arr) {\n",[167,55020,55021],{"class":169,"line":205},[167,55022,55023],{"class":512},"      console.log(k)\n",[167,55025,55026],{"class":169,"line":219},[167,55027,55028],{"class":512},"      console.log(arr[k])\n",[167,55030,55031],{"class":169,"line":230},[167,55032,4231],{"class":512},[19,55034,55035],{},[3528,55036],{"alt":32,"src":55037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55039,55040],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55042,55043],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55045,55046],{},"for in 得到的k是属性名",[53809,55048,55049],{},"\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,55051,55052],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[494,55054,55056],{"id":55055},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55058,55059],{},"数组中放对象信息",[26,55061,55063],{"className":503,"code":55062,"language":505,"meta":32,"style":32},"\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",[34,55064,55065,55073,55078,55083,55088,55093,55098,55103,55108,55113,55118,55123,55128,55132,55136],{"__ignoreMap":32},[167,55066,55067,55069,55071],{"class":169,"line":170},[167,55068,513],{"class":512},[167,55070,53809],{"class":516},[167,55072,537],{"class":512},[167,55074,55075],{"class":169,"line":191},[167,55076,55077],{"class":512},"    let students = [\n",[167,55079,55080],{"class":169,"line":205},[167,55081,55082],{"class":512},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[167,55084,55085],{"class":169,"line":219},[167,55086,55087],{"class":512},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[167,55089,55090],{"class":169,"line":230},[167,55091,55092],{"class":512},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[167,55094,55095],{"class":169,"line":241},[167,55096,55097],{"class":512},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[167,55099,55100],{"class":169,"line":261},[167,55101,55102],{"class":512},"    ]\n",[167,55104,55105],{"class":169,"line":773},[167,55106,55107],{"class":512},"    for (let i = 0; i \u003C students.length; i++) {\n",[167,55109,55110],{"class":169,"line":779},[167,55111,55112],{"class":512},"      for (let k in students[i]) {\n",[167,55114,55115],{"class":169,"line":785},[167,55116,55117],{"class":512},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[167,55119,55120],{"class":169,"line":790},[167,55121,55122],{"class":512},"        \u002F\u002F输出每个人的名字：\n",[167,55124,55125],{"class":169,"line":796},[167,55126,55127],{"class":512},"        \u002F\u002Fconsole.log(students[i].name)\n",[167,55129,55130],{"class":169,"line":802},[167,55131,54393],{"class":512},[167,55133,55134],{"class":169,"line":808},[167,55135,4231],{"class":512},[167,55137,55138,55140,55142],{"class":169,"line":814},[167,55139,54412],{"class":512},[167,55141,53809],{"class":516},[167,55143,537],{"class":512},[494,55145,55147],{"id":55146},"_2106-内置对象","2.10.6 内置对象",[19,55149,55150],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[40,55152,55153],{},[43,55154,55155],{},"数学对象Math",[19,55157,55158],{},[3528,55159],{"alt":32,"src":55160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55162,55163],{},[2439,55164,55167],{"href":55165,"rel":55166},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25887],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55169,55170],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55172,55173],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55175,55176],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55178,55179],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55181,55182],{},"null属于对象数据类型",[40,55184,55185],{"start":191},[43,55186,55187],{},"生成任意范围随机数",[19,55189,55190],{},[3528,55191],{"alt":32,"src":55192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55194,55195],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55197,55198],{},"乘以几就取不到几",[19,55200,55201],{},"取数组中的随机元素：",[19,55203,55204],{},"let arr = ['red', 'green', 'blue']",[19,55206,55207],{},"let random = Math.floor(Math.random() * arr.length)",[19,55209,55210],{},"console.log(arr[random])",[19,55212,55213],{},"这个函数得到的是全闭区间",[19,55215,55216],{},"function getRandom(N, M) {",[19,55218,55219],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55221,3145],{},[19,55223,55224],{},"console.log(getRandom(4, 8))",[494,55226,55228],{"id":55227},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55230,55231],{},[3528,55232],{"alt":32,"src":55233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55235,55236],{},[3528,55237],{"alt":32,"src":55238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55240,55241],{},[3528,55242],{"alt":32,"src":55243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55245,55246],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55248,55249],{},[3528,55250],{"alt":32,"src":55251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55253,55254],{},[3528,55255],{"alt":32,"src":55256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55258,55259],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55261,55262],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55264,55265],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2113,55267,55268],{},"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":32,"searchDepth":191,"depth":191,"links":55270},[55271,55279,55280,55281,55282,55283,55290,55294,55300,55309],{"id":52468,"depth":191,"text":52469,"children":55272},[55273,55274,55275,55276,55277,55278],{"id":52472,"depth":205,"text":52473},{"id":52489,"depth":205,"text":52490},{"id":52529,"depth":205,"text":52530},{"id":52541,"depth":205,"text":52542},{"id":52550,"depth":205,"text":52551},{"id":52598,"depth":205,"text":52599},{"id":52608,"depth":191,"text":52609},{"id":52696,"depth":191,"text":52697},{"id":52719,"depth":191,"text":52720},{"id":52731,"depth":191,"text":52732},{"id":52918,"depth":191,"text":52919,"children":55284},[55285,55286,55287,55288,55289],{"id":52922,"depth":205,"text":52923},{"id":52931,"depth":205,"text":52932},{"id":52959,"depth":205,"text":52960},{"id":52995,"depth":205,"text":52996},{"id":53020,"depth":205,"text":53021},{"id":53032,"depth":191,"text":53033,"children":55291},[55292,55293],{"id":53053,"depth":205,"text":53054},{"id":53147,"depth":205,"text":53148},{"id":53205,"depth":191,"text":53206,"children":55295},[55296,55297,55298,55299],{"id":53209,"depth":205,"text":53210},{"id":53233,"depth":205,"text":53234},{"id":53286,"depth":205,"text":53287},{"id":54093,"depth":205,"text":54094},{"id":54478,"depth":191,"text":54479,"children":55301},[55302,55303,55304,55305,55306,55307,55308],{"id":54496,"depth":205,"text":54497},{"id":54533,"depth":205,"text":54534},{"id":54564,"depth":205,"text":54565},{"id":54597,"depth":205,"text":54598},{"id":54678,"depth":205,"text":54679},{"id":54776,"depth":205,"text":54777},{"id":54834,"depth":205,"text":54835},{"id":54887,"depth":191,"text":54888,"children":55310},[55311,55312,55313,55314,55315,55316,55317],{"id":54891,"depth":205,"text":54892},{"id":54916,"depth":205,"text":54917},{"id":54968,"depth":205,"text":54969},{"id":54988,"depth":205,"text":54989},{"id":55055,"depth":205,"text":55056},{"id":55146,"depth":205,"text":55147},{"id":55227,"depth":205,"text":55228},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52460,"description":25403},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55324,"title":55325,"body":55326,"description":25403,"extension":2140,"meta":78661,"navigation":740,"path":78662,"seo":78663,"stem":78664,"__hash__":78665},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55327,"toc":78601},[55328,55331,55334,55337,55342,55345,55348,55351,55355,55359,55365,55370,55378,55385,55388,55392,55397,55402,55407,55410,55413,55424,55427,55431,55434,55437,55442,55447,55452,55455,55458,55549,55552,55557,55560,55565,55568,55571,55576,55579,55584,55588,55591,55605,55609,55614,55617,55620,55624,55629,55632,55636,55640,55645,55649,55654,55657,55660,55663,55666,55669,55672,55677,55682,55709,55712,55715,55718,55723,55726,55729,55732,55735,55739,55768,55772,55777,55782,55785,55788,55791,55796,55910,55915,55920,56081,56086,56089,56093,56098,56103,56106,56109,56112,56115,56118,56121,56124,56127,56130,56133,56136,56139,56142,56145,56147,56150,56153,56156,56161,56165,56562,56565,56571,56575,56580,57861,57866,57869,57872,57875,57880,59076,59080,59086,59091,59094,59099,59104,59108,59112,59117,59120,59125,59128,59131,59135,60043,60046,60050,60271,60274,60277,60280,60506,60509,60733,60736,60740,60745,60748,60751,60979,60982,61015,61018,61022,61027,61031,61034,61037,61040,61043,61046,61049,61052,61057,62337,62341,62344,63437,63441,63444,63447,63450,63453,63457,63460,63463,63465,63473,64954,64958,64961,64964,64967,65176,65179,65183,65187,65192,65197,65200,65203,65208,65212,65217,65220,65329,65333,65338,65343,65346,65349,65353,65358,65363,65368,65371,65374,65385,65388,65393,65398,65401,65404,65477,65481,65486,65489,65491,65502,65506,65511,66837,66840,66843,66846,66848,66851,66854,66857,66860,66863,66866,66869,66872,66875,66878,66881,66884,66886,66888,66891,66895,67989,67992,67995,68011,68025,68028,68033,68039,68044,68048,68052,68057,68061,68066,68508,68513,68516,68520,68525,68528,68531,68535,68540,68544,68549,68554,68558,68563,68568,68571,68576,68581,68585,68590,68595,68699,68702,68706,68711,69077,69080,69083,69086,69089,69092,69095,69098,69101,70397,70401,70406,70411,70414,70417,70420,70423,70425,70430,70435,70438,70442,70447,70452,70457,70460,70463,70466,70469,70472,70477,70480,70484,70489,70494,70498,70503,70506,70511,70514,70517,70520,70523,70526,70531,70534,70537,70540,70543,70547,70552,70555,70559,70564,70567,70570,70574,70603,70606,70610,70614,70619,70623,70628,70631,70634,70637,70640,70643,70646,70649,70652,70655,70658,70661,70664,70667,70670,70674,70679,70684,70687,70691,70695,70700,70703,70707,70710,70713,70718,70723,70728,70733,70738,70741,70744,70749,70754,70758,70763,70766,70771,70774,70777,70780,70783,70788,70791,70800,70804,70809,70812,70815,70819,70822,70827,70831,70834,70840,70846,70850,70876,70879,72439,72442,72938,72941,72946,72951,72956,72960,72965,72970,72975,72979,72984,72987,72990,72993,72996,73000,73003,73008,73011,73016,73020,73025,73028,73033,73038,73043,73046,73049,73054,73059,73062,73065,73069,73072,73077,73080,73085,73088,73093,73098,73103,73106,73111,73176,73179,73190,73194,73199,73371,73375,73380,73383,73386,73389,73393,73404,73408,73411,73416,73421,73424,73427,73430,73433,73436,73438,73441,73444,73447,73452,73455,73460,73463,73467,73470,73473,73487,73491,73494,73549,73554,73557,73560,73565,73568,73572,73577,73707,73711,73716,73721,73802,73807,73811,73814,73819,73824,73830,73833,73836,73839,73843,73848,73851,73862,73866,73883,76930,76934,76937,76940,76943,76964,76968,76971,76979,76982,76987,76990,76993,76998,77003,77007,77028,77032,77037,77040,77043,77046,77049,77053,77058,77061,77065,77070,77073,77078,77081,77086,77089,77094,78297,78301,78306,78309,78314,78598],[10,55329,55325],{"id":55330},"_3web-apis",[19,55332,55333],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55335,55336],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55338,55339],{},[3528,55340],{"alt":32,"src":55341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55343,55344],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55346,55347],{},"建议数组和对象使用 const 来声明",[19,55349,55350],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55352,55354],{"id":55353},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[494,55356,55358],{"id":55357},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55360,55361,55364],{},[34,55362,55363],{},"document"," = HTML 文件解析后的对象化表示；",[19,55366,55367,55369],{},[34,55368,55363],{}," ≠ HTML 文件本身",[19,55371,55372,55377],{},[2354,55373,55374],{},[34,55375,55376],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55379,55380,55384],{},[2354,55381,55382],{},[34,55383,55363],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55386,55387],{},"document实际上为window.document的简写",[494,55389,55391],{"id":55390},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55393,55394],{},[3528,55395],{"alt":32,"src":55396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55398,55399],{},[3528,55400],{"alt":32,"src":55401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55403,55404],{},[3528,55405],{"alt":32,"src":55406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55408,55409],{},"console.dir()",[19,55411,55412],{},"dir用来打印对象",[3205,55414,55415,55418,55421],{},[43,55416,55417],{},"任何一个标签，都是一个对象",[43,55419,55420],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[43,55422,55423],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55425,55426],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[494,55428,55430],{"id":55429},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55432,55433],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55435,55436],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55438,55439],{},[2354,55440,55441],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[40,55443,55444],{},[43,55445,55446],{},"利用CSS选择器来获取标签元素",[19,55448,55449],{},[3528,55450],{"alt":32,"src":55451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55453,55454],{},"里边的选择器必须必须加引号！！！",[19,55456,55457],{},"只选择第一个元素",[26,55459,55461],{"className":503,"code":55460,"language":505,"meta":32,"style":32},"\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",[34,55462,55463,55471,55491,55510,55518,55523,55528,55533,55541],{"__ignoreMap":32},[167,55464,55465,55467,55469],{"class":169,"line":170},[167,55466,513],{"class":512},[167,55468,517],{"class":516},[167,55470,537],{"class":512},[167,55472,55473,55475,55477,55480,55482,55484,55487,55489],{"class":169,"line":191},[167,55474,542],{"class":512},[167,55476,53609],{"class":516},[167,55478,55479],{"class":173}," class",[167,55481,523],{"class":512},[167,55483,526],{"class":177},[167,55485,55486],{"class":512},">123\u003C\u002F",[167,55488,53609],{"class":516},[167,55490,537],{"class":512},[167,55492,55493,55495,55497,55499,55501,55503,55506,55508],{"class":169,"line":205},[167,55494,542],{"class":512},[167,55496,53609],{"class":516},[167,55498,55479],{"class":173},[167,55500,523],{"class":512},[167,55502,526],{"class":177},[167,55504,55505],{"class":512},">456\u003C\u002F",[167,55507,53609],{"class":516},[167,55509,537],{"class":512},[167,55511,55512,55514,55516],{"class":169,"line":219},[167,55513,542],{"class":512},[167,55515,53809],{"class":516},[167,55517,537],{"class":512},[167,55519,55520],{"class":169,"line":230},[167,55521,55522],{"class":512},"    \u002F\u002F 1.获取匹配的第一个元素\n",[167,55524,55525],{"class":169,"line":241},[167,55526,55527],{"class":512},"    const box = document.querySelector('div')\n",[167,55529,55530],{"class":169,"line":261},[167,55531,55532],{"class":512},"    console.dir(box)\n",[167,55534,55535,55537,55539],{"class":169,"line":773},[167,55536,54412],{"class":512},[167,55538,53809],{"class":516},[167,55540,537],{"class":512},[167,55542,55543,55545,55547],{"class":169,"line":779},[167,55544,575],{"class":512},[167,55546,517],{"class":516},[167,55548,537],{"class":512},[19,55550,55551],{},"只选123，不选456",[19,55553,55554],{},[3528,55555],{"alt":32,"src":55556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55558,55559],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55561,55562],{},[3528,55563],{"alt":32,"src":55564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55566,55567],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55569,55570],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[40,55572,55573],{"start":191},[43,55574,55575],{},"其他方法来获取标签元素",[19,55577,55578],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55580,55581],{},[3528,55582],{"alt":32,"src":55583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[494,55585,55587],{"id":55586},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55589,55590],{},"设置修改DOM元素内容有两种方式：",[3205,55592,55593,55596,55599,55602],{},[43,55594,55595],{},"元素.innerText=''",[43,55597,55598],{},"元素.innerHTML=''",[43,55600,55601],{},"不写字符串输出数字也是可以的",[43,55603,55604],{},"元素.innerHtml=1",[24024,55606,55608],{"id":55607},"_3131-innertext","3.1.3.1 innerText",[19,55610,55611],{},[3528,55612],{"alt":32,"src":55613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55615,55616],{},"思路：实现了修改盒子中的内容！",[19,55618,55619],{},"它只显示纯文本，不解析标签",[24024,55621,55623],{"id":55622},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55625,55626],{},[3528,55627],{"alt":32,"src":55628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55630,55631],{},"相比于innerText，他的强大之处在于可以解析标签",[494,55633,55635],{"id":55634},"_314-操作元素属性","3.1.4 操作元素属性",[24024,55637,55639],{"id":55638},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55641,55642],{},[3528,55643],{"alt":32,"src":55644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24024,55646,55648],{"id":55647},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55650,55651],{},[3528,55652],{"alt":32,"src":55653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55655,55656],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55658,55659],{},"div.style.backgroundColor = 'hotpink'",[19,55661,55662],{},"如果按照css的写法，-表示减，就会出错",[19,55664,55665],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55667,55668],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55670,55671],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55673,55674],{},[3528,55675],{"alt":32,"src":55676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55678,55679],{},[3528,55680],{"alt":32,"src":55681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[40,55683,55684,55687,55690,55693,55696,55699],{},[43,55685,55686],{},"className这个方式就是修改很多样式的时候来使用的！",[43,55688,55689],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[43,55691,55692],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[43,55694,55695],{},"className为属性名，如果还用class的话就导致与关键字冲突",[43,55697,55698],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[43,55700,55701,55702,55706],{},"解析标签的时候就变为了",[53609,55703],{"className":55704},[55705,590],"nav",[55707,55708],"br",{},[19,55710,55711],{},"例子：",[53609,55713],{"className":55714},[55705],[53809,55716,55717],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55719,55720],{},[3528,55721],{"alt":32,"src":55722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55724,55725],{},"追加和删除类名用classList",[19,55727,55728],{},"常用于类似于开关的操作",[19,55730,55731],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55733,55734],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24024,55736,55738],{"id":55737},"_3143-牢记点","3.1.4.3 牢记点",[40,55740,55741,55744,55747,55750,55753,55756,55759,55762,55765],{},[43,55742,55743],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[43,55745,55746],{},"使用style属性操作css时不要忘记引号",[43,55748,55749],{},"使用className或者classList时也不要忘记引号",[43,55751,55752],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[43,55754,55755],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[43,55757,55758],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[43,55760,55761],{},"若： let arr=['1','2',3] arr[0]=1",[43,55763,55764],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[43,55766,55767],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[494,55769,55771],{"id":55770},"_315-操作表单元素","3.1.5 操作表单元素",[40,55773,55774],{},[43,55775,55776],{},"天生的属性",[19,55778,55779],{},[3528,55780],{"alt":32,"src":55781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55783,55784],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55786,55787],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55789,55790],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55792,55793],{},[3528,55794],{"alt":32,"src":55795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,55797,55799],{"className":52633,"code":55798,"language":52635,"meta":32,"style":32},"在复选框中如果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",[34,55800,55801,55806,55837,55842,55847,55852,55857,55861,55866,55871,55888,55900,55905],{"__ignoreMap":32},[167,55802,55803],{"class":169,"line":170},[167,55804,55805],{"class":512},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[167,55807,55808,55810,55813,55815,55817,55820,55822,55824,55826,55828,55830,55832,55835],{"class":169,"line":191},[167,55809,513],{"class":512},[167,55811,55812],{"class":516},"input",[167,55814,555],{"class":173},[167,55816,523],{"class":512},[167,55818,55819],{"class":177},"\"checkbox\"",[167,55821,520],{"class":173},[167,55823,523],{"class":512},[167,55825,9682],{"class":177},[167,55827,16985],{"class":173},[167,55829,523],{"class":512},[167,55831,9682],{"class":177},[167,55833,55834],{"class":173}," checked",[167,55836,537],{"class":512},[167,55838,55839],{"class":169,"line":205},[167,55840,55841],{"class":512},"不选的话：\n",[167,55843,55844],{"class":169,"line":219},[167,55845,55846],{"class":512},"const input = document.querySelector('input')\n",[167,55848,55849],{"class":169,"line":230},[167,55850,55851],{"class":512},"input.checked=false\n",[167,55853,55854],{"class":169,"line":241},[167,55855,55856],{"class":512},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[167,55858,55859],{"class":169,"line":261},[167,55860,741],{"emptyLinePlaceholder":740},[167,55862,55863],{"class":169,"line":773},[167,55864,55865],{"class":512},"禁用按钮：\n",[167,55867,55868],{"class":169,"line":779},[167,55869,55870],{"class":512},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[167,55872,55873,55875,55878,55881,55884,55886],{"class":169,"line":785},[167,55874,513],{"class":512},[167,55876,55877],{"class":516},"button",[167,55879,55880],{"class":173}," disabled",[167,55882,55883],{"class":512},">点击\u003C\u002F",[167,55885,55877],{"class":516},[167,55887,537],{"class":512},[167,55889,55890,55892,55894,55896,55898],{"class":169,"line":790},[167,55891,513],{"class":512},[167,55893,55877],{"class":516},[167,55895,55883],{"class":512},[167,55897,55877],{"class":516},[167,55899,537],{"class":512},[167,55901,55902],{"class":169,"line":796},[167,55903,55904],{"class":512},"const bt = document.querySelector('button')\n",[167,55906,55907],{"class":169,"line":802},[167,55908,55909],{"class":512},"bt.disabled = false\n",[40,55911,55912],{"start":191},[43,55913,55914],{},"自定义属性",[19,55916,55917],{},[3528,55918],{"alt":32,"src":55919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,55921,55923],{"className":503,"code":55922,"language":505,"meta":32,"style":32},"\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",[34,55924,55925,55933,55961,55980,55999,56018,56037,56045,56050,56055,56060,56065,56073],{"__ignoreMap":32},[167,55926,55927,55929,55931],{"class":169,"line":170},[167,55928,513],{"class":512},[167,55930,517],{"class":516},[167,55932,537],{"class":512},[167,55934,55935,55937,55939,55942,55944,55946,55949,55951,55954,55957,55959],{"class":169,"line":191},[167,55936,542],{"class":512},[167,55938,53609],{"class":516},[167,55940,55941],{"class":173}," data-id",[167,55943,523],{"class":512},[167,55945,1494],{"class":177},[167,55947,55948],{"class":173}," data-spm",[167,55950,523],{"class":512},[167,55952,55953],{"class":177},"\"我不知道\"",[167,55955,55956],{"class":512},">1\u003C\u002F",[167,55958,53609],{"class":516},[167,55960,537],{"class":512},[167,55962,55963,55965,55967,55969,55971,55973,55976,55978],{"class":169,"line":205},[167,55964,542],{"class":512},[167,55966,53609],{"class":516},[167,55968,55941],{"class":173},[167,55970,523],{"class":512},[167,55972,5734],{"class":177},[167,55974,55975],{"class":512},">2\u003C\u002F",[167,55977,53609],{"class":516},[167,55979,537],{"class":512},[167,55981,55982,55984,55986,55988,55990,55992,55995,55997],{"class":169,"line":219},[167,55983,542],{"class":512},[167,55985,53609],{"class":516},[167,55987,55941],{"class":173},[167,55989,523],{"class":512},[167,55991,5747],{"class":177},[167,55993,55994],{"class":512},">3\u003C\u002F",[167,55996,53609],{"class":516},[167,55998,537],{"class":512},[167,56000,56001,56003,56005,56007,56009,56011,56014,56016],{"class":169,"line":230},[167,56002,542],{"class":512},[167,56004,53609],{"class":516},[167,56006,55941],{"class":173},[167,56008,523],{"class":512},[167,56010,5760],{"class":177},[167,56012,56013],{"class":512},">4\u003C\u002F",[167,56015,53609],{"class":516},[167,56017,537],{"class":512},[167,56019,56020,56022,56024,56026,56028,56030,56033,56035],{"class":169,"line":241},[167,56021,542],{"class":512},[167,56023,53609],{"class":516},[167,56025,55941],{"class":173},[167,56027,523],{"class":512},[167,56029,5780],{"class":177},[167,56031,56032],{"class":512},">5\u003C\u002F",[167,56034,53609],{"class":516},[167,56036,537],{"class":512},[167,56038,56039,56041,56043],{"class":169,"line":261},[167,56040,542],{"class":512},[167,56042,53809],{"class":516},[167,56044,537],{"class":512},[167,56046,56047],{"class":169,"line":773},[167,56048,56049],{"class":512},"    const one = document.querySelector('div')\n",[167,56051,56052],{"class":169,"line":779},[167,56053,56054],{"class":512},"    console.log(one.dataset)\n",[167,56056,56057],{"class":169,"line":785},[167,56058,56059],{"class":512},"    console.log(one.dataset.id)\n",[167,56061,56062],{"class":169,"line":790},[167,56063,56064],{"class":512},"    console.log(one.dataset.spm)\n",[167,56066,56067,56069,56071],{"class":169,"line":796},[167,56068,54412],{"class":512},[167,56070,53809],{"class":516},[167,56072,537],{"class":512},[167,56074,56075,56077,56079],{"class":169,"line":802},[167,56076,575],{"class":512},[167,56078,517],{"class":516},[167,56080,537],{"class":512},[19,56082,56083],{},[3528,56084],{"alt":32,"src":56085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56087,56088],{},"document.querySelector选择的是第一个对象（元素）",[494,56090,56092],{"id":56091},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56094,56095],{},[3528,56096],{"alt":32,"src":56097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56099,56100],{},[3528,56101],{"alt":32,"src":56102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56104,56105],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53809,56107,56108],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56110,56111],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53809,56113,56114],{},"\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,56116,56117],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56119,56120],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56122,56123],{},"单位为毫秒！！！",[19,56125,56126],{},"可以搭配匿名函数来用！！！",[19,56128,56129],{},"setInterval(function () {",[19,56131,56132],{},"alert('两秒执行一次')",[19,56134,56135],{},"}, 2000)",[19,56137,56138],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56140,56141],{},"function fn() {",[19,56143,56144],{},"document.write(1)",[19,56146,3145],{},[19,56148,56149],{},"setInterval(fn, 1000)",[19,56151,56152],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56154,56155],{},"setInterval('fn()', 1000)",[19,56157,56158],{},[3528,56159],{"alt":32,"src":56160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24024,56162,56164],{"id":56163},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,56166,56168],{"className":52633,"code":56167,"language":52635,"meta":32,"style":32},"\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",[34,56169,56170,56180,56194,56198,56206,56220,56240,56252,56260,56264,56272,56309,56314,56319,56324,56332,56340,56362,56370,56375,56397,56402,56407,56418,56423,56443,56451,56466,56481,56492,56497,56507,56517,56521,56530,56534,56542,56550,56554],{"__ignoreMap":32},[167,56171,56172,56174,56176,56178],{"class":169,"line":170},[167,56173,53297],{"class":512},[167,56175,53300],{"class":516},[167,56177,53303],{"class":173},[167,56179,537],{"class":512},[167,56181,56182,56184,56186,56188,56190,56192],{"class":169,"line":191},[167,56183,513],{"class":512},[167,56185,52635],{"class":516},[167,56187,53314],{"class":173},[167,56189,523],{"class":512},[167,56191,53319],{"class":177},[167,56193,537],{"class":512},[167,56195,56196],{"class":169,"line":205},[167,56197,741],{"emptyLinePlaceholder":740},[167,56199,56200,56202,56204],{"class":169,"line":219},[167,56201,513],{"class":512},[167,56203,53332],{"class":516},[167,56205,537],{"class":512},[167,56207,56208,56210,56212,56214,56216,56218],{"class":169,"line":230},[167,56209,542],{"class":512},[167,56211,53342],{"class":516},[167,56213,53345],{"class":173},[167,56215,523],{"class":512},[167,56217,53350],{"class":177},[167,56219,537],{"class":512},[167,56221,56222,56224,56226,56228,56230,56232,56234,56236,56238],{"class":169,"line":241},[167,56223,542],{"class":512},[167,56225,53342],{"class":516},[167,56227,520],{"class":173},[167,56229,523],{"class":512},[167,56231,53389],{"class":177},[167,56233,53369],{"class":173},[167,56235,523],{"class":512},[167,56237,53396],{"class":177},[167,56239,537],{"class":512},[167,56241,56242,56244,56246,56248,56250],{"class":169,"line":261},[167,56243,542],{"class":512},[167,56245,53405],{"class":516},[167,56247,53408],{"class":512},[167,56249,53405],{"class":516},[167,56251,537],{"class":512},[167,56253,56254,56256,56258],{"class":169,"line":773},[167,56255,575],{"class":512},[167,56257,53332],{"class":516},[167,56259,537],{"class":512},[167,56261,56262],{"class":169,"line":779},[167,56263,741],{"emptyLinePlaceholder":740},[167,56265,56266,56268,56270],{"class":169,"line":785},[167,56267,513],{"class":512},[167,56269,517],{"class":516},[167,56271,537],{"class":512},[167,56273,56274,56276,56279,56281,56283,56285,56287,56289,56291,56294,56296,56299,56302,56304,56307],{"class":169,"line":790},[167,56275,542],{"class":512},[167,56277,56278],{"class":516},"textarea",[167,56280,520],{"class":173},[167,56282,523],{"class":512},[167,56284,9682],{"class":177},[167,56286,16985],{"class":173},[167,56288,523],{"class":512},[167,56290,9682],{"class":177},[167,56292,56293],{"class":173}," cols",[167,56295,523],{"class":512},[167,56297,56298],{"class":177},"\"30\"",[167,56300,56301],{"class":173}," rows",[167,56303,523],{"class":512},[167,56305,56306],{"class":177},"\"10\"",[167,56308,537],{"class":512},[167,56310,56311],{"class":169,"line":796},[167,56312,56313],{"class":512},"        用户注册协议\n",[167,56315,56316],{"class":169,"line":802},[167,56317,56318],{"class":512},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[167,56320,56321],{"class":169,"line":808},[167,56322,56323],{"class":512},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[167,56325,56326,56328,56330],{"class":169,"line":814},[167,56327,53774],{"class":512},[167,56329,56278],{"class":516},[167,56331,537],{"class":512},[167,56333,56334,56336,56338],{"class":169,"line":820},[167,56335,542],{"class":512},[167,56337,55707],{"class":516},[167,56339,537],{"class":512},[167,56341,56342,56344,56346,56348,56350,56353,56355,56358,56360],{"class":169,"line":826},[167,56343,542],{"class":512},[167,56345,55877],{"class":516},[167,56347,55479],{"class":173},[167,56349,523],{"class":512},[167,56351,56352],{"class":177},"\"btn\"",[167,56354,55880],{"class":173},[167,56356,56357],{"class":512},">我已经阅读用户协议(5)\u003C\u002F",[167,56359,55877],{"class":516},[167,56361,537],{"class":512},[167,56363,56364,56366,56368],{"class":169,"line":832},[167,56365,542],{"class":512},[167,56367,53809],{"class":516},[167,56369,537],{"class":512},[167,56371,56372],{"class":169,"line":837},[167,56373,56374],{"class":2268},"    \u002F\u002F 1. 获取元素\n",[167,56376,56377,56379,56382,56384,56387,56390,56392,56395],{"class":169,"line":842},[167,56378,13249],{"class":731},[167,56380,56381],{"class":184}," btn",[167,56383,753],{"class":731},[167,56385,56386],{"class":512}," document.",[167,56388,56389],{"class":173},"querySelector",[167,56391,898],{"class":512},[167,56393,56394],{"class":177},"'.btn'",[167,56396,873],{"class":512},[167,56398,56399],{"class":169,"line":860},[167,56400,56401],{"class":2268},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[167,56403,56404],{"class":169,"line":876},[167,56405,56406],{"class":2268},"    \u002F\u002F 2. 倒计时\n",[167,56408,56409,56411,56413,56415],{"class":169,"line":887},[167,56410,54214],{"class":731},[167,56412,11466],{"class":512},[167,56414,523],{"class":731},[167,56416,56417],{"class":184}," 5\n",[167,56419,56420],{"class":169,"line":892},[167,56421,56422],{"class":2268},"    \u002F\u002F 2.1 开启定时器\n",[167,56424,56425,56427,56430,56432,56435,56437,56440],{"class":169,"line":907},[167,56426,54214],{"class":731},[167,56428,56429],{"class":512}," n ",[167,56431,523],{"class":731},[167,56433,56434],{"class":173}," setInterval",[167,56436,898],{"class":512},[167,56438,56439],{"class":731},"function",[167,56441,56442],{"class":512}," () {\n",[167,56444,56445,56448],{"class":169,"line":920},[167,56446,56447],{"class":512},"      i",[167,56449,56450],{"class":731},"--\n",[167,56452,56453,56456,56458,56461,56463],{"class":169,"line":933},[167,56454,56455],{"class":512},"      btn.innerHTML ",[167,56457,523],{"class":731},[167,56459,56460],{"class":177}," `我已经阅读用户协议(${",[167,56462,2641],{"class":512},[167,56464,56465],{"class":177},"})`\n",[167,56467,56468,56471,56474,56477,56479],{"class":169,"line":946},[167,56469,56470],{"class":731},"      if",[167,56472,56473],{"class":512}," (i ",[167,56475,56476],{"class":731},"===",[167,56478,6125],{"class":184},[167,56480,14470],{"class":512},[167,56482,56483,56486,56489],{"class":169,"line":959},[167,56484,56485],{"class":173},"        clearInterval",[167,56487,56488],{"class":512},"(n)  ",[167,56490,56491],{"class":2268},"\u002F\u002F 关闭定时器\n",[167,56493,56494],{"class":169,"line":964},[167,56495,56496],{"class":2268},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[167,56498,56499,56502,56504],{"class":169,"line":987},[167,56500,56501],{"class":512},"        btn.disabled ",[167,56503,523],{"class":731},[167,56505,56506],{"class":184}," false\n",[167,56508,56509,56512,56514],{"class":169,"line":993},[167,56510,56511],{"class":512},"        btn.innerHTML ",[167,56513,523],{"class":731},[167,56515,56516],{"class":177}," '同意'\n",[167,56518,56519],{"class":169,"line":998},[167,56520,54393],{"class":512},[167,56522,56523,56526,56528],{"class":169,"line":1010},[167,56524,56525],{"class":512},"    }, ",[167,56527,8440],{"class":184},[167,56529,873],{"class":512},[167,56531,56532],{"class":169,"line":1022},[167,56533,741],{"emptyLinePlaceholder":740},[167,56535,56536,56538,56540],{"class":169,"line":1027},[167,56537,54412],{"class":512},[167,56539,53809],{"class":516},[167,56541,537],{"class":512},[167,56543,56544,56546,56548],{"class":169,"line":1032},[167,56545,575],{"class":512},[167,56547,517],{"class":516},[167,56549,537],{"class":512},[167,56551,56552],{"class":169,"line":1049},[167,56553,741],{"emptyLinePlaceholder":740},[167,56555,56556,56558,56560],{"class":169,"line":10005},[167,56557,575],{"class":512},[167,56559,52635],{"class":516},[167,56561,537],{"class":512},[19,56563,56564],{},"不要一直想着用死循环,避免死循环",[19,56566,56567,56570],{},[34,56568,56569],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24024,56572,56574],{"id":56573},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[40,56576,56577],{},[43,56578,56579],{},"法1",[26,56581,56583],{"className":52633,"code":56582,"language":52635,"meta":32,"style":32},"\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",[34,56584,56585,56595,56609,56613,56621,56635,56655,56667,56675,56681,56692,56703,56707,56711,56718,56730,56734,56738,56745,56757,56771,56784,56798,56802,56806,56813,56824,56835,56846,56858,56870,56882,56886,56890,56898,56908,56921,56933,56946,56950,56954,56961,56971,56983,56995,57006,57017,57027,57039,57051,57055,57059,57068,57080,57092,57119,57132,57136,57140,57147,57158,57162,57170,57178,57182,57190,57204,57219,57243,57251,57266,57279,57287,57308,57320,57332,57344,57356,57368,57380,57392,57401,57409,57417,57425,57437,57460,57479,57498,57517,57536,57555,57574,57594,57598,57618,57637,57657,57678,57689,57706,57716,57726,57736,57741,57746,57751,57756,57781,57794,57798,57821,57825,57833,57841,57849,57853],{"__ignoreMap":32},[167,56586,56587,56589,56591,56593],{"class":169,"line":170},[167,56588,53297],{"class":512},[167,56590,53300],{"class":516},[167,56592,53303],{"class":173},[167,56594,537],{"class":512},[167,56596,56597,56599,56601,56603,56605,56607],{"class":169,"line":191},[167,56598,513],{"class":512},[167,56600,52635],{"class":516},[167,56602,53314],{"class":173},[167,56604,523],{"class":512},[167,56606,53319],{"class":177},[167,56608,537],{"class":512},[167,56610,56611],{"class":169,"line":205},[167,56612,741],{"emptyLinePlaceholder":740},[167,56614,56615,56617,56619],{"class":169,"line":219},[167,56616,513],{"class":512},[167,56618,53332],{"class":516},[167,56620,537],{"class":512},[167,56622,56623,56625,56627,56629,56631,56633],{"class":169,"line":230},[167,56624,542],{"class":512},[167,56626,53342],{"class":516},[167,56628,53345],{"class":173},[167,56630,523],{"class":512},[167,56632,53350],{"class":177},[167,56634,537],{"class":512},[167,56636,56637,56639,56641,56643,56645,56647,56649,56651,56653],{"class":169,"line":241},[167,56638,542],{"class":512},[167,56640,53342],{"class":516},[167,56642,520],{"class":173},[167,56644,523],{"class":512},[167,56646,53389],{"class":177},[167,56648,53369],{"class":173},[167,56650,523],{"class":512},[167,56652,53396],{"class":177},[167,56654,537],{"class":512},[167,56656,56657,56659,56661,56663,56665],{"class":169,"line":261},[167,56658,542],{"class":512},[167,56660,53405],{"class":516},[167,56662,53408],{"class":512},[167,56664,53405],{"class":516},[167,56666,537],{"class":512},[167,56668,56669,56671,56673],{"class":169,"line":773},[167,56670,542],{"class":512},[167,56672,2113],{"class":516},[167,56674,537],{"class":512},[167,56676,56677,56679],{"class":169,"line":779},[167,56678,8433],{"class":516},[167,56680,17598],{"class":512},[167,56682,56683,56686,56688,56690],{"class":169,"line":785},[167,56684,56685],{"class":184},"      padding",[167,56687,53435],{"class":512},[167,56689,1154],{"class":184},[167,56691,3359],{"class":512},[167,56693,56694,56697,56699,56701],{"class":169,"line":790},[167,56695,56696],{"class":184},"      margin",[167,56698,53435],{"class":512},[167,56700,1154],{"class":184},[167,56702,3359],{"class":512},[167,56704,56705],{"class":169,"line":796},[167,56706,4231],{"class":512},[167,56708,56709],{"class":169,"line":802},[167,56710,741],{"emptyLinePlaceholder":740},[167,56712,56713,56716],{"class":169,"line":808},[167,56714,56715],{"class":516},"    li",[167,56717,17598],{"class":512},[167,56719,56720,56723,56725,56728],{"class":169,"line":814},[167,56721,56722],{"class":184},"      list-style",[167,56724,53435],{"class":512},[167,56726,56727],{"class":184},"none",[167,56729,3359],{"class":512},[167,56731,56732],{"class":169,"line":820},[167,56733,4231],{"class":512},[167,56735,56736],{"class":169,"line":826},[167,56737,741],{"emptyLinePlaceholder":740},[167,56739,56740,56743],{"class":169,"line":832},[167,56741,56742],{"class":173},"    .box",[167,56744,17598],{"class":512},[167,56746,56747,56750,56752,56755],{"class":169,"line":837},[167,56748,56749],{"class":184},"      position",[167,56751,53435],{"class":512},[167,56753,56754],{"class":184},"relative",[167,56756,3359],{"class":512},[167,56758,56759,56762,56764,56767,56769],{"class":169,"line":842},[167,56760,56761],{"class":184},"      width",[167,56763,53435],{"class":512},[167,56765,56766],{"class":184},"976",[167,56768,53490],{"class":731},[167,56770,3359],{"class":512},[167,56772,56773,56776,56778,56780,56782],{"class":169,"line":860},[167,56774,56775],{"class":184},"      height",[167,56777,53435],{"class":512},[167,56779,3604],{"class":184},[167,56781,53490],{"class":731},[167,56783,3359],{"class":512},[167,56785,56786,56788,56790,56792,56794,56796],{"class":169,"line":876},[167,56787,56696],{"class":184},[167,56789,53435],{"class":512},[167,56791,981],{"class":184},[167,56793,53490],{"class":731},[167,56795,53554],{"class":184},[167,56797,3359],{"class":512},[167,56799,56800],{"class":169,"line":887},[167,56801,4231],{"class":512},[167,56803,56804],{"class":169,"line":892},[167,56805,741],{"emptyLinePlaceholder":740},[167,56807,56808,56811],{"class":169,"line":907},[167,56809,56810],{"class":173},"    .slider-footer",[167,56812,17598],{"class":512},[167,56814,56815,56817,56819,56822],{"class":169,"line":920},[167,56816,56749],{"class":184},[167,56818,53435],{"class":512},[167,56820,56821],{"class":184},"absolute",[167,56823,3359],{"class":512},[167,56825,56826,56829,56831,56833],{"class":169,"line":933},[167,56827,56828],{"class":184},"      left",[167,56830,53435],{"class":512},[167,56832,1154],{"class":184},[167,56834,3359],{"class":512},[167,56836,56837,56840,56842,56844],{"class":169,"line":946},[167,56838,56839],{"class":184},"      bottom",[167,56841,53435],{"class":512},[167,56843,1154],{"class":184},[167,56845,3359],{"class":512},[167,56847,56848,56850,56852,56854,56856],{"class":169,"line":959},[167,56849,56761],{"class":184},[167,56851,53435],{"class":512},[167,56853,981],{"class":184},[167,56855,2528],{"class":731},[167,56857,3359],{"class":512},[167,56859,56860,56862,56864,56866,56868],{"class":169,"line":964},[167,56861,56775],{"class":184},[167,56863,53435],{"class":512},[167,56865,2775],{"class":184},[167,56867,2528],{"class":731},[167,56869,3359],{"class":512},[167,56871,56872,56875,56877,56880],{"class":169,"line":987},[167,56873,56874],{"class":184},"      background-color",[167,56876,53435],{"class":512},[167,56878,56879],{"class":184},"skyblue",[167,56881,3359],{"class":512},[167,56883,56884],{"class":169,"line":993},[167,56885,4231],{"class":512},[167,56887,56888],{"class":169,"line":998},[167,56889,741],{"emptyLinePlaceholder":740},[167,56891,56892,56894,56896],{"class":169,"line":1010},[167,56893,56810],{"class":173},[167,56895,8855],{"class":516},[167,56897,17598],{"class":512},[167,56899,56900,56902,56904,56906],{"class":169,"line":1022},[167,56901,56749],{"class":184},[167,56903,53435],{"class":512},[167,56905,56821],{"class":184},[167,56907,3359],{"class":512},[167,56909,56910,56913,56915,56917,56919],{"class":169,"line":1027},[167,56911,56912],{"class":184},"      font-size",[167,56914,53435],{"class":512},[167,56916,3101],{"class":184},[167,56918,53490],{"class":731},[167,56920,3359],{"class":512},[167,56922,56923,56925,56927,56929,56931],{"class":169,"line":1032},[167,56924,56828],{"class":184},[167,56926,53435],{"class":512},[167,56928,2900],{"class":184},[167,56930,53490],{"class":731},[167,56932,3359],{"class":512},[167,56934,56935,56938,56940,56942,56944],{"class":169,"line":1049},[167,56936,56937],{"class":184},"      top",[167,56939,53435],{"class":512},[167,56941,2519],{"class":184},[167,56943,53490],{"class":731},[167,56945,3359],{"class":512},[167,56947,56948],{"class":169,"line":10005},[167,56949,4231],{"class":512},[167,56951,56952],{"class":169,"line":10011},[167,56953,741],{"emptyLinePlaceholder":740},[167,56955,56956,56959],{"class":169,"line":10038},[167,56957,56958],{"class":516},"    ul",[167,56960,17598],{"class":512},[167,56962,56963,56965,56967,56969],{"class":169,"line":10043},[167,56964,56749],{"class":184},[167,56966,53435],{"class":512},[167,56968,56821],{"class":184},[167,56970,3359],{"class":512},[167,56972,56973,56975,56977,56979,56981],{"class":169,"line":10049},[167,56974,56937],{"class":184},[167,56976,53435],{"class":512},[167,56978,2981],{"class":184},[167,56980,53490],{"class":731},[167,56982,3359],{"class":512},[167,56984,56985,56987,56989,56991,56993],{"class":169,"line":10061},[167,56986,56828],{"class":184},[167,56988,53435],{"class":512},[167,56990,2900],{"class":184},[167,56992,53490],{"class":731},[167,56994,3359],{"class":512},[167,56996,56997,57000,57002,57004],{"class":169,"line":10073},[167,56998,56999],{"class":184},"      display",[167,57001,53435],{"class":512},[167,57003,53475],{"class":184},[167,57005,3359],{"class":512},[167,57007,57008,57011,57013,57015],{"class":169,"line":10085},[167,57009,57010],{"class":184},"      justify-content",[167,57012,53435],{"class":512},[167,57014,53666],{"class":184},[167,57016,3359],{"class":512},[167,57018,57019,57021,57023,57025],{"class":169,"line":11744},[167,57020,56749],{"class":184},[167,57022,53435],{"class":512},[167,57024,56821],{"class":184},[167,57026,3359],{"class":512},[167,57028,57029,57031,57033,57035,57037],{"class":169,"line":11769},[167,57030,56761],{"class":184},[167,57032,53435],{"class":512},[167,57034,6024],{"class":184},[167,57036,53490],{"class":731},[167,57038,3359],{"class":512},[167,57040,57041,57043,57045,57047,57049],{"class":169,"line":11792},[167,57042,56775],{"class":184},[167,57044,53435],{"class":512},[167,57046,2900],{"class":184},[167,57048,53490],{"class":731},[167,57050,3359],{"class":512},[167,57052,57053],{"class":169,"line":11816},[167,57054,4231],{"class":512},[167,57056,57057],{"class":169,"line":11821},[167,57058,741],{"emptyLinePlaceholder":740},[167,57060,57061,57063,57066],{"class":169,"line":11826},[167,57062,56958],{"class":516},[167,57064,57065],{"class":516}," li",[167,57067,17598],{"class":512},[167,57069,57070,57072,57074,57076,57078],{"class":169,"line":11831},[167,57071,56761],{"class":184},[167,57073,53435],{"class":512},[167,57075,2900],{"class":184},[167,57077,53490],{"class":731},[167,57079,3359],{"class":512},[167,57081,57082,57084,57086,57088,57090],{"class":169,"line":11840},[167,57083,56775],{"class":184},[167,57085,53435],{"class":512},[167,57087,2900],{"class":184},[167,57089,53490],{"class":731},[167,57091,3359],{"class":512},[167,57093,57094,57096,57098,57100,57102,57104,57106,57108,57110,57112,57114,57117],{"class":169,"line":11845},[167,57095,56874],{"class":184},[167,57097,53435],{"class":512},[167,57099,1393],{"class":184},[167,57101,898],{"class":512},[167,57103,1154],{"class":184},[167,57105,14463],{"class":512},[167,57107,1154],{"class":184},[167,57109,14463],{"class":512},[167,57111,1154],{"class":184},[167,57113,14463],{"class":512},[167,57115,57116],{"class":184},".4",[167,57118,4755],{"class":512},[167,57120,57121,57124,57126,57128,57130],{"class":169,"line":11851},[167,57122,57123],{"class":184},"      border-radius",[167,57125,53435],{"class":512},[167,57127,2646],{"class":184},[167,57129,53490],{"class":731},[167,57131,3359],{"class":512},[167,57133,57134],{"class":169,"line":11872},[167,57135,4231],{"class":512},[167,57137,57138],{"class":169,"line":11878},[167,57139,741],{"emptyLinePlaceholder":740},[167,57141,57142,57145],{"class":169,"line":11892},[167,57143,57144],{"class":173},"    .activate",[167,57146,17598],{"class":512},[167,57148,57149,57151,57153,57156],{"class":169,"line":11898},[167,57150,56874],{"class":184},[167,57152,53435],{"class":512},[167,57154,57155],{"class":184},"#f7f7f7",[167,57157,3359],{"class":512},[167,57159,57160],{"class":169,"line":11925},[167,57161,4231],{"class":512},[167,57163,57164,57166,57168],{"class":169,"line":11934},[167,57165,54412],{"class":512},[167,57167,2113],{"class":516},[167,57169,537],{"class":512},[167,57171,57172,57174,57176],{"class":169,"line":11940},[167,57173,575],{"class":512},[167,57175,53332],{"class":516},[167,57177,537],{"class":512},[167,57179,57180],{"class":169,"line":11948},[167,57181,741],{"emptyLinePlaceholder":740},[167,57183,57184,57186,57188],{"class":169,"line":11953},[167,57185,513],{"class":512},[167,57187,517],{"class":516},[167,57189,537],{"class":512},[167,57191,57192,57194,57196,57198,57200,57202],{"class":169,"line":18630},[167,57193,542],{"class":512},[167,57195,53609],{"class":516},[167,57197,55479],{"class":173},[167,57199,523],{"class":512},[167,57201,526],{"class":177},[167,57203,537],{"class":512},[167,57205,57206,57208,57210,57212,57214,57217],{"class":169,"line":18636},[167,57207,53339],{"class":512},[167,57209,53609],{"class":516},[167,57211,55479],{"class":173},[167,57213,523],{"class":512},[167,57215,57216],{"class":177},"\"slider-wrapper\"",[167,57218,537],{"class":512},[167,57220,57221,57224,57226,57229,57231,57234,57237,57239,57241],{"class":169,"line":18659},[167,57222,57223],{"class":512},"      \u003C",[167,57225,3528],{"class":516},[167,57227,57228],{"class":173}," src",[167,57230,523],{"class":512},[167,57232,57233],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[167,57235,57236],{"class":173}," alt",[167,57238,523],{"class":512},[167,57240,9682],{"class":177},[167,57242,537],{"class":512},[167,57244,57245,57247,57249],{"class":169,"line":18665},[167,57246,53774],{"class":512},[167,57248,53609],{"class":516},[167,57250,537],{"class":512},[167,57252,57253,57255,57257,57259,57261,57264],{"class":169,"line":18688},[167,57254,53339],{"class":512},[167,57256,53609],{"class":516},[167,57258,55479],{"class":173},[167,57260,523],{"class":512},[167,57262,57263],{"class":177},"\"slider-footer\"",[167,57265,537],{"class":512},[167,57267,57268,57270,57272,57275,57277],{"class":169,"line":18702},[167,57269,57223],{"class":512},[167,57271,19],{"class":516},[167,57273,57274],{"class":512},">对人类来说会不会太超前了?\u003C\u002F",[167,57276,19],{"class":516},[167,57278,537],{"class":512},[167,57280,57281,57283,57285],{"class":169,"line":18722},[167,57282,57223],{"class":512},[167,57284,3205],{"class":516},[167,57286,537],{"class":512},[167,57288,57289,57292,57294,57296,57298,57301,57304,57306],{"class":169,"line":18728},[167,57290,57291],{"class":512},"        \u003C",[167,57293,43],{"class":516},[167,57295,55479],{"class":173},[167,57297,523],{"class":512},[167,57299,57300],{"class":177},"\"activate\"",[167,57302,57303],{"class":512},">\u003C\u002F",[167,57305,43],{"class":516},[167,57307,537],{"class":512},[167,57309,57310,57312,57314,57316,57318],{"class":169,"line":18739},[167,57311,57291],{"class":512},[167,57313,43],{"class":516},[167,57315,57303],{"class":512},[167,57317,43],{"class":516},[167,57319,537],{"class":512},[167,57321,57322,57324,57326,57328,57330],{"class":169,"line":18762},[167,57323,57291],{"class":512},[167,57325,43],{"class":516},[167,57327,57303],{"class":512},[167,57329,43],{"class":516},[167,57331,537],{"class":512},[167,57333,57334,57336,57338,57340,57342],{"class":169,"line":18784},[167,57335,57291],{"class":512},[167,57337,43],{"class":516},[167,57339,57303],{"class":512},[167,57341,43],{"class":516},[167,57343,537],{"class":512},[167,57345,57346,57348,57350,57352,57354],{"class":169,"line":18789},[167,57347,57291],{"class":512},[167,57349,43],{"class":516},[167,57351,57303],{"class":512},[167,57353,43],{"class":516},[167,57355,537],{"class":512},[167,57357,57358,57360,57362,57364,57366],{"class":169,"line":18795},[167,57359,57291],{"class":512},[167,57361,43],{"class":516},[167,57363,57303],{"class":512},[167,57365,43],{"class":516},[167,57367,537],{"class":512},[167,57369,57370,57372,57374,57376,57378],{"class":169,"line":18809},[167,57371,57291],{"class":512},[167,57373,43],{"class":516},[167,57375,57303],{"class":512},[167,57377,43],{"class":516},[167,57379,537],{"class":512},[167,57381,57382,57384,57386,57388,57390],{"class":169,"line":18822},[167,57383,57291],{"class":512},[167,57385,43],{"class":516},[167,57387,57303],{"class":512},[167,57389,43],{"class":516},[167,57391,537],{"class":512},[167,57393,57394,57397,57399],{"class":169,"line":18827},[167,57395,57396],{"class":512},"      \u003C\u002F",[167,57398,3205],{"class":516},[167,57400,537],{"class":512},[167,57402,57403,57405,57407],{"class":169,"line":18841},[167,57404,53774],{"class":512},[167,57406,53609],{"class":516},[167,57408,537],{"class":512},[167,57410,57411,57413,57415],{"class":169,"line":18846},[167,57412,54412],{"class":512},[167,57414,53609],{"class":516},[167,57416,537],{"class":512},[167,57418,57419,57421,57423],{"class":169,"line":18852},[167,57420,542],{"class":512},[167,57422,53809],{"class":516},[167,57424,537],{"class":512},[167,57426,57427,57429,57432,57434],{"class":169,"line":18857},[167,57428,13249],{"class":731},[167,57430,57431],{"class":184}," arrImage",[167,57433,753],{"class":731},[167,57435,57436],{"class":512}," [\n",[167,57438,57439,57442,57445,57448,57451,57454,57457],{"class":169,"line":18871},[167,57440,57441],{"class":512},"      { url: ",[167,57443,57444],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[167,57446,57447],{"class":512},", title: ",[167,57449,57450],{"class":177},"'对人类来说会不会太超前了?'",[167,57452,57453],{"class":512},", color: ",[167,57455,57456],{"class":177},"'rgba(100,67,68)'",[167,57458,57459],{"class":512}," },\n",[167,57461,57462,57464,57467,57469,57472,57474,57477],{"class":169,"line":18876},[167,57463,57441],{"class":512},[167,57465,57466],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[167,57468,57447],{"class":512},[167,57470,57471],{"class":177},"'开启剑与雪的黑暗传说!'",[167,57473,57453],{"class":512},[167,57475,57476],{"class":177},"'rgba(43,35,26)'",[167,57478,57459],{"class":512},[167,57480,57481,57483,57486,57488,57491,57493,57496],{"class":169,"line":18881},[167,57482,57441],{"class":512},[167,57484,57485],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[167,57487,57447],{"class":512},[167,57489,57490],{"class":177},"'真正的jo厨出现了!'",[167,57492,57453],{"class":512},[167,57494,57495],{"class":177},"'rgba(36,31,33)'",[167,57497,57459],{"class":512},[167,57499,57500,57502,57505,57507,57510,57512,57515],{"class":169,"line":18895},[167,57501,57441],{"class":512},[167,57503,57504],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[167,57506,57447],{"class":512},[167,57508,57509],{"class":177},"'李玉刚:让世界通过b站看到东方大国文化'",[167,57511,57453],{"class":512},[167,57513,57514],{"class":177},"'rgba(139,98,66)'",[167,57516,57459],{"class":512},[167,57518,57519,57521,57524,57526,57529,57531,57534],{"class":169,"line":18907},[167,57520,57441],{"class":512},[167,57522,57523],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[167,57525,57447],{"class":512},[167,57527,57528],{"class":177},"'快来分享你的寒假日常吧'",[167,57530,57453],{"class":512},[167,57532,57533],{"class":177},"'rgba(67,90,92)'",[167,57535,57459],{"class":512},[167,57537,57538,57540,57543,57545,57548,57550,57553],{"class":169,"line":18912},[167,57539,57441],{"class":512},[167,57541,57542],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[167,57544,57447],{"class":512},[167,57546,57547],{"class":177},"'哔哩哔哩小年YEAR'",[167,57549,57453],{"class":512},[167,57551,57552],{"class":177},"'rgba(166,131,143)'",[167,57554,57459],{"class":512},[167,57556,57557,57559,57562,57564,57567,57569,57572],{"class":169,"line":18925},[167,57558,57441],{"class":512},[167,57560,57561],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[167,57563,57447],{"class":512},[167,57565,57566],{"class":177},"'一站式解决你的电脑配置问题'",[167,57568,57453],{"class":512},[167,57570,57571],{"class":177},"'rgba(53,29,25)'",[167,57573,57459],{"class":512},[167,57575,57576,57578,57581,57583,57586,57588,57591],{"class":169,"line":18930},[167,57577,57441],{"class":512},[167,57579,57580],{"class":177},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[167,57582,57447],{"class":512},[167,57584,57585],{"class":177},"'谁不想和小猫咪贴贴呢?'",[167,57587,57453],{"class":512},[167,57589,57590],{"class":177},"'rgba(99,72,114)'",[167,57592,57593],{"class":512}," }\n",[167,57595,57596],{"class":169,"line":18935},[167,57597,55102],{"class":512},[167,57599,57600,57602,57605,57607,57609,57611,57613,57616],{"class":169,"line":18940},[167,57601,13249],{"class":731},[167,57603,57604],{"class":184}," img",[167,57606,753],{"class":731},[167,57608,56386],{"class":512},[167,57610,56389],{"class":173},[167,57612,898],{"class":512},[167,57614,57615],{"class":177},"'.slider-wrapper img'",[167,57617,873],{"class":512},[167,57619,57620,57622,57624,57626,57628,57630,57632,57635],{"class":169,"line":18953},[167,57621,13249],{"class":731},[167,57623,8855],{"class":184},[167,57625,753],{"class":731},[167,57627,56386],{"class":512},[167,57629,56389],{"class":173},[167,57631,898],{"class":512},[167,57633,57634],{"class":177},"'.slider-footer p'",[167,57636,873],{"class":512},[167,57638,57639,57641,57644,57646,57648,57650,57652,57655],{"class":169,"line":18958},[167,57640,13249],{"class":731},[167,57642,57643],{"class":184}," color",[167,57645,753],{"class":731},[167,57647,56386],{"class":512},[167,57649,56389],{"class":173},[167,57651,898],{"class":512},[167,57653,57654],{"class":177},"'.slider-footer'",[167,57656,873],{"class":512},[167,57658,57659,57661,57664,57666,57668,57671,57673,57676],{"class":169,"line":34636},[167,57660,13249],{"class":731},[167,57662,57663],{"class":184}," lis",[167,57665,753],{"class":731},[167,57667,56386],{"class":512},[167,57669,57670],{"class":173},"querySelectorAll",[167,57672,898],{"class":512},[167,57674,57675],{"class":177},"'.slider-footer ul li'",[167,57677,873],{"class":512},[167,57679,57680,57682,57684,57686],{"class":169,"line":34642},[167,57681,54214],{"class":731},[167,57683,11466],{"class":512},[167,57685,523],{"class":731},[167,57687,57688],{"class":184}," 1\n",[167,57690,57691,57693,57696,57698,57700,57702,57704],{"class":169,"line":34648},[167,57692,54214],{"class":731},[167,57694,57695],{"class":512}," timer ",[167,57697,523],{"class":731},[167,57699,56434],{"class":173},[167,57701,898],{"class":512},[167,57703,56439],{"class":731},[167,57705,56442],{"class":512},[167,57707,57708,57711,57713],{"class":169,"line":34654},[167,57709,57710],{"class":512},"      img.src ",[167,57712,523],{"class":731},[167,57714,57715],{"class":512}," arrImage[i].url\n",[167,57717,57718,57721,57723],{"class":169,"line":34660},[167,57719,57720],{"class":512},"      p.innerHTML ",[167,57722,523],{"class":731},[167,57724,57725],{"class":512}," arrImage[i].title\n",[167,57727,57728,57731,57733],{"class":169,"line":34671},[167,57729,57730],{"class":512},"      color.style.backgroundColor ",[167,57732,523],{"class":731},[167,57734,57735],{"class":512}," arrImage[i].color\n",[167,57737,57738],{"class":169,"line":34677},[167,57739,57740],{"class":2268},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[167,57742,57743],{"class":169,"line":34697},[167,57744,57745],{"class":2268},"      \u002F\u002F li.classList.add('activate')\n",[167,57747,57748],{"class":169,"line":34703},[167,57749,57750],{"class":2268},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[167,57752,57753],{"class":169,"line":34714},[167,57754,57755],{"class":2268},"      \u002F\u002F lis[i].classList.remove('activate')\n",[167,57757,57758,57761,57763,57765,57768,57771,57774,57776,57779],{"class":169,"line":34720},[167,57759,57760],{"class":512},"      document.",[167,57762,56389],{"class":173},[167,57764,898],{"class":512},[167,57766,57767],{"class":177},"'.activate'",[167,57769,57770],{"class":512},")?.classList.",[167,57772,57773],{"class":173},"toggle",[167,57775,898],{"class":512},[167,57777,57778],{"class":177},"'activate'",[167,57780,873],{"class":512},[167,57782,57783,57786,57788,57790,57792],{"class":169,"line":34726},[167,57784,57785],{"class":512},"      lis[i].classList.",[167,57787,7364],{"class":173},[167,57789,898],{"class":512},[167,57791,57778],{"class":177},[167,57793,873],{"class":512},[167,57795,57796],{"class":169,"line":34732},[167,57797,741],{"emptyLinePlaceholder":740},[167,57799,57800,57803,57805,57807,57809,57811,57813,57815,57818],{"class":169,"line":34738},[167,57801,57802],{"class":512},"      i ",[167,57804,523],{"class":731},[167,57806,56473],{"class":512},[167,57808,2681],{"class":731},[167,57810,27138],{"class":184},[167,57812,15741],{"class":512},[167,57814,2528],{"class":731},[167,57816,57817],{"class":512}," arrImage.",[167,57819,57820],{"class":184},"length\n",[167,57822,57823],{"class":169,"line":34744},[167,57824,741],{"emptyLinePlaceholder":740},[167,57826,57827,57829,57831],{"class":169,"line":34750},[167,57828,56525],{"class":512},[167,57830,8440],{"class":184},[167,57832,873],{"class":512},[167,57834,57835,57837,57839],{"class":169,"line":34756},[167,57836,54412],{"class":512},[167,57838,53809],{"class":516},[167,57840,537],{"class":512},[167,57842,57843,57845,57847],{"class":169,"line":34776},[167,57844,575],{"class":512},[167,57846,517],{"class":516},[167,57848,537],{"class":512},[167,57850,57851],{"class":169,"line":34782},[167,57852,741],{"emptyLinePlaceholder":740},[167,57854,57855,57857,57859],{"class":169,"line":34798},[167,57856,575],{"class":512},[167,57858,52635],{"class":516},[167,57860,537],{"class":512},[19,57862,57863],{},[3528,57864],{"alt":32,"src":57865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57867,57868],{},"?.就是短路保护,确保输出正常进行",[19,57870,57871],{},"不要忘记取余%,有时候可以用",[19,57873,57874],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[40,57876,57877],{"start":191},[43,57878,57879],{},"法2",[26,57881,57883],{"className":52633,"code":57882,"language":52635,"meta":32,"style":32},"\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",[34,57884,57885,57895,57909,57913,57921,57935,57955,57967,57975,57981,57991,58001,58005,58009,58015,58025,58029,58033,58039,58049,58061,58073,58087,58091,58095,58101,58111,58121,58131,58143,58155,58165,58169,58173,58181,58191,58203,58215,58227,58231,58235,58241,58251,58263,58275,58285,58295,58305,58317,58329,58333,58337,58345,58357,58369,58395,58407,58411,58415,58421,58431,58435,58443,58451,58455,58463,58477,58491,58511,58519,58533,58545,58553,58571,58583,58595,58607,58619,58631,58643,58655,58663,58671,58679,58687,58698,58714,58730,58746,58762,58778,58794,58810,58826,58830,58835,58853,58871,58881,58886,58891,58902,58908,58923,58932,58936,58941,58950,58955,58964,58969,58974,58979,59002,59032,59036,59044,59048,59056,59064,59068],{"__ignoreMap":32},[167,57886,57887,57889,57891,57893],{"class":169,"line":170},[167,57888,53297],{"class":512},[167,57890,53300],{"class":516},[167,57892,53303],{"class":173},[167,57894,537],{"class":512},[167,57896,57897,57899,57901,57903,57905,57907],{"class":169,"line":191},[167,57898,513],{"class":512},[167,57900,52635],{"class":516},[167,57902,53314],{"class":173},[167,57904,523],{"class":512},[167,57906,53319],{"class":177},[167,57908,537],{"class":512},[167,57910,57911],{"class":169,"line":205},[167,57912,741],{"emptyLinePlaceholder":740},[167,57914,57915,57917,57919],{"class":169,"line":219},[167,57916,513],{"class":512},[167,57918,53332],{"class":516},[167,57920,537],{"class":512},[167,57922,57923,57925,57927,57929,57931,57933],{"class":169,"line":230},[167,57924,542],{"class":512},[167,57926,53342],{"class":516},[167,57928,53345],{"class":173},[167,57930,523],{"class":512},[167,57932,53350],{"class":177},[167,57934,537],{"class":512},[167,57936,57937,57939,57941,57943,57945,57947,57949,57951,57953],{"class":169,"line":241},[167,57938,542],{"class":512},[167,57940,53342],{"class":516},[167,57942,520],{"class":173},[167,57944,523],{"class":512},[167,57946,53389],{"class":177},[167,57948,53369],{"class":173},[167,57950,523],{"class":512},[167,57952,53396],{"class":177},[167,57954,537],{"class":512},[167,57956,57957,57959,57961,57963,57965],{"class":169,"line":261},[167,57958,542],{"class":512},[167,57960,53405],{"class":516},[167,57962,53408],{"class":512},[167,57964,53405],{"class":516},[167,57966,537],{"class":512},[167,57968,57969,57971,57973],{"class":169,"line":773},[167,57970,542],{"class":512},[167,57972,2113],{"class":516},[167,57974,537],{"class":512},[167,57976,57977,57979],{"class":169,"line":779},[167,57978,8433],{"class":516},[167,57980,17598],{"class":512},[167,57982,57983,57985,57987,57989],{"class":169,"line":785},[167,57984,56685],{"class":184},[167,57986,53435],{"class":512},[167,57988,1154],{"class":184},[167,57990,3359],{"class":512},[167,57992,57993,57995,57997,57999],{"class":169,"line":790},[167,57994,56696],{"class":184},[167,57996,53435],{"class":512},[167,57998,1154],{"class":184},[167,58000,3359],{"class":512},[167,58002,58003],{"class":169,"line":796},[167,58004,4231],{"class":512},[167,58006,58007],{"class":169,"line":802},[167,58008,741],{"emptyLinePlaceholder":740},[167,58010,58011,58013],{"class":169,"line":808},[167,58012,56715],{"class":516},[167,58014,17598],{"class":512},[167,58016,58017,58019,58021,58023],{"class":169,"line":814},[167,58018,56722],{"class":184},[167,58020,53435],{"class":512},[167,58022,56727],{"class":184},[167,58024,3359],{"class":512},[167,58026,58027],{"class":169,"line":820},[167,58028,4231],{"class":512},[167,58030,58031],{"class":169,"line":826},[167,58032,741],{"emptyLinePlaceholder":740},[167,58034,58035,58037],{"class":169,"line":832},[167,58036,56742],{"class":173},[167,58038,17598],{"class":512},[167,58040,58041,58043,58045,58047],{"class":169,"line":837},[167,58042,56749],{"class":184},[167,58044,53435],{"class":512},[167,58046,56754],{"class":184},[167,58048,3359],{"class":512},[167,58050,58051,58053,58055,58057,58059],{"class":169,"line":842},[167,58052,56761],{"class":184},[167,58054,53435],{"class":512},[167,58056,56766],{"class":184},[167,58058,53490],{"class":731},[167,58060,3359],{"class":512},[167,58062,58063,58065,58067,58069,58071],{"class":169,"line":860},[167,58064,56775],{"class":184},[167,58066,53435],{"class":512},[167,58068,3604],{"class":184},[167,58070,53490],{"class":731},[167,58072,3359],{"class":512},[167,58074,58075,58077,58079,58081,58083,58085],{"class":169,"line":876},[167,58076,56696],{"class":184},[167,58078,53435],{"class":512},[167,58080,981],{"class":184},[167,58082,53490],{"class":731},[167,58084,53554],{"class":184},[167,58086,3359],{"class":512},[167,58088,58089],{"class":169,"line":887},[167,58090,4231],{"class":512},[167,58092,58093],{"class":169,"line":892},[167,58094,741],{"emptyLinePlaceholder":740},[167,58096,58097,58099],{"class":169,"line":907},[167,58098,56810],{"class":173},[167,58100,17598],{"class":512},[167,58102,58103,58105,58107,58109],{"class":169,"line":920},[167,58104,56749],{"class":184},[167,58106,53435],{"class":512},[167,58108,56821],{"class":184},[167,58110,3359],{"class":512},[167,58112,58113,58115,58117,58119],{"class":169,"line":933},[167,58114,56828],{"class":184},[167,58116,53435],{"class":512},[167,58118,1154],{"class":184},[167,58120,3359],{"class":512},[167,58122,58123,58125,58127,58129],{"class":169,"line":946},[167,58124,56839],{"class":184},[167,58126,53435],{"class":512},[167,58128,1154],{"class":184},[167,58130,3359],{"class":512},[167,58132,58133,58135,58137,58139,58141],{"class":169,"line":959},[167,58134,56761],{"class":184},[167,58136,53435],{"class":512},[167,58138,981],{"class":184},[167,58140,2528],{"class":731},[167,58142,3359],{"class":512},[167,58144,58145,58147,58149,58151,58153],{"class":169,"line":964},[167,58146,56775],{"class":184},[167,58148,53435],{"class":512},[167,58150,2775],{"class":184},[167,58152,2528],{"class":731},[167,58154,3359],{"class":512},[167,58156,58157,58159,58161,58163],{"class":169,"line":987},[167,58158,56874],{"class":184},[167,58160,53435],{"class":512},[167,58162,56879],{"class":184},[167,58164,3359],{"class":512},[167,58166,58167],{"class":169,"line":993},[167,58168,4231],{"class":512},[167,58170,58171],{"class":169,"line":998},[167,58172,741],{"emptyLinePlaceholder":740},[167,58174,58175,58177,58179],{"class":169,"line":1010},[167,58176,56810],{"class":173},[167,58178,8855],{"class":516},[167,58180,17598],{"class":512},[167,58182,58183,58185,58187,58189],{"class":169,"line":1022},[167,58184,56749],{"class":184},[167,58186,53435],{"class":512},[167,58188,56821],{"class":184},[167,58190,3359],{"class":512},[167,58192,58193,58195,58197,58199,58201],{"class":169,"line":1027},[167,58194,56912],{"class":184},[167,58196,53435],{"class":512},[167,58198,3101],{"class":184},[167,58200,53490],{"class":731},[167,58202,3359],{"class":512},[167,58204,58205,58207,58209,58211,58213],{"class":169,"line":1032},[167,58206,56828],{"class":184},[167,58208,53435],{"class":512},[167,58210,2900],{"class":184},[167,58212,53490],{"class":731},[167,58214,3359],{"class":512},[167,58216,58217,58219,58221,58223,58225],{"class":169,"line":1049},[167,58218,56937],{"class":184},[167,58220,53435],{"class":512},[167,58222,2519],{"class":184},[167,58224,53490],{"class":731},[167,58226,3359],{"class":512},[167,58228,58229],{"class":169,"line":10005},[167,58230,4231],{"class":512},[167,58232,58233],{"class":169,"line":10011},[167,58234,741],{"emptyLinePlaceholder":740},[167,58236,58237,58239],{"class":169,"line":10038},[167,58238,56958],{"class":516},[167,58240,17598],{"class":512},[167,58242,58243,58245,58247,58249],{"class":169,"line":10043},[167,58244,56749],{"class":184},[167,58246,53435],{"class":512},[167,58248,56821],{"class":184},[167,58250,3359],{"class":512},[167,58252,58253,58255,58257,58259,58261],{"class":169,"line":10049},[167,58254,56937],{"class":184},[167,58256,53435],{"class":512},[167,58258,2981],{"class":184},[167,58260,53490],{"class":731},[167,58262,3359],{"class":512},[167,58264,58265,58267,58269,58271,58273],{"class":169,"line":10061},[167,58266,56828],{"class":184},[167,58268,53435],{"class":512},[167,58270,2900],{"class":184},[167,58272,53490],{"class":731},[167,58274,3359],{"class":512},[167,58276,58277,58279,58281,58283],{"class":169,"line":10073},[167,58278,56999],{"class":184},[167,58280,53435],{"class":512},[167,58282,53475],{"class":184},[167,58284,3359],{"class":512},[167,58286,58287,58289,58291,58293],{"class":169,"line":10085},[167,58288,57010],{"class":184},[167,58290,53435],{"class":512},[167,58292,53666],{"class":184},[167,58294,3359],{"class":512},[167,58296,58297,58299,58301,58303],{"class":169,"line":11744},[167,58298,56749],{"class":184},[167,58300,53435],{"class":512},[167,58302,56821],{"class":184},[167,58304,3359],{"class":512},[167,58306,58307,58309,58311,58313,58315],{"class":169,"line":11769},[167,58308,56761],{"class":184},[167,58310,53435],{"class":512},[167,58312,6024],{"class":184},[167,58314,53490],{"class":731},[167,58316,3359],{"class":512},[167,58318,58319,58321,58323,58325,58327],{"class":169,"line":11792},[167,58320,56775],{"class":184},[167,58322,53435],{"class":512},[167,58324,2900],{"class":184},[167,58326,53490],{"class":731},[167,58328,3359],{"class":512},[167,58330,58331],{"class":169,"line":11816},[167,58332,4231],{"class":512},[167,58334,58335],{"class":169,"line":11821},[167,58336,741],{"emptyLinePlaceholder":740},[167,58338,58339,58341,58343],{"class":169,"line":11826},[167,58340,56958],{"class":516},[167,58342,57065],{"class":516},[167,58344,17598],{"class":512},[167,58346,58347,58349,58351,58353,58355],{"class":169,"line":11831},[167,58348,56761],{"class":184},[167,58350,53435],{"class":512},[167,58352,2900],{"class":184},[167,58354,53490],{"class":731},[167,58356,3359],{"class":512},[167,58358,58359,58361,58363,58365,58367],{"class":169,"line":11840},[167,58360,56775],{"class":184},[167,58362,53435],{"class":512},[167,58364,2900],{"class":184},[167,58366,53490],{"class":731},[167,58368,3359],{"class":512},[167,58370,58371,58373,58375,58377,58379,58381,58383,58385,58387,58389,58391,58393],{"class":169,"line":11845},[167,58372,56874],{"class":184},[167,58374,53435],{"class":512},[167,58376,1393],{"class":184},[167,58378,898],{"class":512},[167,58380,1154],{"class":184},[167,58382,14463],{"class":512},[167,58384,1154],{"class":184},[167,58386,14463],{"class":512},[167,58388,1154],{"class":184},[167,58390,14463],{"class":512},[167,58392,57116],{"class":184},[167,58394,4755],{"class":512},[167,58396,58397,58399,58401,58403,58405],{"class":169,"line":11851},[167,58398,57123],{"class":184},[167,58400,53435],{"class":512},[167,58402,2646],{"class":184},[167,58404,53490],{"class":731},[167,58406,3359],{"class":512},[167,58408,58409],{"class":169,"line":11872},[167,58410,4231],{"class":512},[167,58412,58413],{"class":169,"line":11878},[167,58414,741],{"emptyLinePlaceholder":740},[167,58416,58417,58419],{"class":169,"line":11892},[167,58418,57144],{"class":173},[167,58420,17598],{"class":512},[167,58422,58423,58425,58427,58429],{"class":169,"line":11898},[167,58424,56874],{"class":184},[167,58426,53435],{"class":512},[167,58428,57155],{"class":184},[167,58430,3359],{"class":512},[167,58432,58433],{"class":169,"line":11925},[167,58434,4231],{"class":512},[167,58436,58437,58439,58441],{"class":169,"line":11934},[167,58438,54412],{"class":512},[167,58440,2113],{"class":516},[167,58442,537],{"class":512},[167,58444,58445,58447,58449],{"class":169,"line":11940},[167,58446,575],{"class":512},[167,58448,53332],{"class":516},[167,58450,537],{"class":512},[167,58452,58453],{"class":169,"line":11948},[167,58454,741],{"emptyLinePlaceholder":740},[167,58456,58457,58459,58461],{"class":169,"line":11953},[167,58458,513],{"class":512},[167,58460,517],{"class":516},[167,58462,537],{"class":512},[167,58464,58465,58467,58469,58471,58473,58475],{"class":169,"line":18630},[167,58466,542],{"class":512},[167,58468,53609],{"class":516},[167,58470,55479],{"class":173},[167,58472,523],{"class":512},[167,58474,526],{"class":177},[167,58476,537],{"class":512},[167,58478,58479,58481,58483,58485,58487,58489],{"class":169,"line":18636},[167,58480,53339],{"class":512},[167,58482,53609],{"class":516},[167,58484,55479],{"class":173},[167,58486,523],{"class":512},[167,58488,57216],{"class":177},[167,58490,537],{"class":512},[167,58492,58493,58495,58497,58499,58501,58503,58505,58507,58509],{"class":169,"line":18659},[167,58494,57223],{"class":512},[167,58496,3528],{"class":516},[167,58498,57228],{"class":173},[167,58500,523],{"class":512},[167,58502,57233],{"class":177},[167,58504,57236],{"class":173},[167,58506,523],{"class":512},[167,58508,9682],{"class":177},[167,58510,537],{"class":512},[167,58512,58513,58515,58517],{"class":169,"line":18665},[167,58514,53774],{"class":512},[167,58516,53609],{"class":516},[167,58518,537],{"class":512},[167,58520,58521,58523,58525,58527,58529,58531],{"class":169,"line":18688},[167,58522,53339],{"class":512},[167,58524,53609],{"class":516},[167,58526,55479],{"class":173},[167,58528,523],{"class":512},[167,58530,57263],{"class":177},[167,58532,537],{"class":512},[167,58534,58535,58537,58539,58541,58543],{"class":169,"line":18702},[167,58536,57223],{"class":512},[167,58538,19],{"class":516},[167,58540,57274],{"class":512},[167,58542,19],{"class":516},[167,58544,537],{"class":512},[167,58546,58547,58549,58551],{"class":169,"line":18722},[167,58548,57223],{"class":512},[167,58550,3205],{"class":516},[167,58552,537],{"class":512},[167,58554,58555,58557,58559,58561,58563,58565,58567,58569],{"class":169,"line":18728},[167,58556,57291],{"class":512},[167,58558,43],{"class":516},[167,58560,55479],{"class":173},[167,58562,523],{"class":512},[167,58564,57300],{"class":177},[167,58566,57303],{"class":512},[167,58568,43],{"class":516},[167,58570,537],{"class":512},[167,58572,58573,58575,58577,58579,58581],{"class":169,"line":18739},[167,58574,57291],{"class":512},[167,58576,43],{"class":516},[167,58578,57303],{"class":512},[167,58580,43],{"class":516},[167,58582,537],{"class":512},[167,58584,58585,58587,58589,58591,58593],{"class":169,"line":18762},[167,58586,57291],{"class":512},[167,58588,43],{"class":516},[167,58590,57303],{"class":512},[167,58592,43],{"class":516},[167,58594,537],{"class":512},[167,58596,58597,58599,58601,58603,58605],{"class":169,"line":18784},[167,58598,57291],{"class":512},[167,58600,43],{"class":516},[167,58602,57303],{"class":512},[167,58604,43],{"class":516},[167,58606,537],{"class":512},[167,58608,58609,58611,58613,58615,58617],{"class":169,"line":18789},[167,58610,57291],{"class":512},[167,58612,43],{"class":516},[167,58614,57303],{"class":512},[167,58616,43],{"class":516},[167,58618,537],{"class":512},[167,58620,58621,58623,58625,58627,58629],{"class":169,"line":18795},[167,58622,57291],{"class":512},[167,58624,43],{"class":516},[167,58626,57303],{"class":512},[167,58628,43],{"class":516},[167,58630,537],{"class":512},[167,58632,58633,58635,58637,58639,58641],{"class":169,"line":18809},[167,58634,57291],{"class":512},[167,58636,43],{"class":516},[167,58638,57303],{"class":512},[167,58640,43],{"class":516},[167,58642,537],{"class":512},[167,58644,58645,58647,58649,58651,58653],{"class":169,"line":18822},[167,58646,57291],{"class":512},[167,58648,43],{"class":516},[167,58650,57303],{"class":512},[167,58652,43],{"class":516},[167,58654,537],{"class":512},[167,58656,58657,58659,58661],{"class":169,"line":18827},[167,58658,57396],{"class":512},[167,58660,3205],{"class":516},[167,58662,537],{"class":512},[167,58664,58665,58667,58669],{"class":169,"line":18841},[167,58666,53774],{"class":512},[167,58668,53609],{"class":516},[167,58670,537],{"class":512},[167,58672,58673,58675,58677],{"class":169,"line":18846},[167,58674,54412],{"class":512},[167,58676,53609],{"class":516},[167,58678,537],{"class":512},[167,58680,58681,58683,58685],{"class":169,"line":18852},[167,58682,542],{"class":512},[167,58684,53809],{"class":516},[167,58686,537],{"class":512},[167,58688,58689,58691,58694,58696],{"class":169,"line":18857},[167,58690,13249],{"class":731},[167,58692,58693],{"class":184}," sliderData",[167,58695,753],{"class":731},[167,58697,57436],{"class":512},[167,58699,58700,58702,58704,58706,58708,58710,58712],{"class":169,"line":18871},[167,58701,57441],{"class":512},[167,58703,57444],{"class":177},[167,58705,57447],{"class":512},[167,58707,57450],{"class":177},[167,58709,57453],{"class":512},[167,58711,57456],{"class":177},[167,58713,57459],{"class":512},[167,58715,58716,58718,58720,58722,58724,58726,58728],{"class":169,"line":18876},[167,58717,57441],{"class":512},[167,58719,57466],{"class":177},[167,58721,57447],{"class":512},[167,58723,57471],{"class":177},[167,58725,57453],{"class":512},[167,58727,57476],{"class":177},[167,58729,57459],{"class":512},[167,58731,58732,58734,58736,58738,58740,58742,58744],{"class":169,"line":18881},[167,58733,57441],{"class":512},[167,58735,57485],{"class":177},[167,58737,57447],{"class":512},[167,58739,57490],{"class":177},[167,58741,57453],{"class":512},[167,58743,57495],{"class":177},[167,58745,57459],{"class":512},[167,58747,58748,58750,58752,58754,58756,58758,58760],{"class":169,"line":18895},[167,58749,57441],{"class":512},[167,58751,57504],{"class":177},[167,58753,57447],{"class":512},[167,58755,57509],{"class":177},[167,58757,57453],{"class":512},[167,58759,57514],{"class":177},[167,58761,57459],{"class":512},[167,58763,58764,58766,58768,58770,58772,58774,58776],{"class":169,"line":18907},[167,58765,57441],{"class":512},[167,58767,57523],{"class":177},[167,58769,57447],{"class":512},[167,58771,57528],{"class":177},[167,58773,57453],{"class":512},[167,58775,57533],{"class":177},[167,58777,57459],{"class":512},[167,58779,58780,58782,58784,58786,58788,58790,58792],{"class":169,"line":18912},[167,58781,57441],{"class":512},[167,58783,57542],{"class":177},[167,58785,57447],{"class":512},[167,58787,57547],{"class":177},[167,58789,57453],{"class":512},[167,58791,57552],{"class":177},[167,58793,57459],{"class":512},[167,58795,58796,58798,58800,58802,58804,58806,58808],{"class":169,"line":18925},[167,58797,57441],{"class":512},[167,58799,57561],{"class":177},[167,58801,57447],{"class":512},[167,58803,57566],{"class":177},[167,58805,57453],{"class":512},[167,58807,57571],{"class":177},[167,58809,57459],{"class":512},[167,58811,58812,58814,58816,58818,58820,58822,58824],{"class":169,"line":18930},[167,58813,57441],{"class":512},[167,58815,57580],{"class":177},[167,58817,57447],{"class":512},[167,58819,57585],{"class":177},[167,58821,57453],{"class":512},[167,58823,57590],{"class":177},[167,58825,57593],{"class":512},[167,58827,58828],{"class":169,"line":18935},[167,58829,55102],{"class":512},[167,58831,58832],{"class":169,"line":18940},[167,58833,58834],{"class":2268},"    \u002F\u002F 1.获取元素\n",[167,58836,58837,58839,58841,58843,58845,58847,58849,58851],{"class":169,"line":18953},[167,58838,13249],{"class":731},[167,58840,57604],{"class":184},[167,58842,753],{"class":731},[167,58844,56386],{"class":512},[167,58846,56389],{"class":173},[167,58848,898],{"class":512},[167,58850,57615],{"class":177},[167,58852,873],{"class":512},[167,58854,58855,58857,58859,58861,58863,58865,58867,58869],{"class":169,"line":18958},[167,58856,13249],{"class":731},[167,58858,8855],{"class":184},[167,58860,753],{"class":731},[167,58862,56386],{"class":512},[167,58864,56389],{"class":173},[167,58866,898],{"class":512},[167,58868,57634],{"class":177},[167,58870,873],{"class":512},[167,58872,58873,58875,58877,58879],{"class":169,"line":34636},[167,58874,54214],{"class":731},[167,58876,11466],{"class":512},[167,58878,523],{"class":731},[167,58880,49333],{"class":184},[167,58882,58883],{"class":169,"line":34642},[167,58884,58885],{"class":2268},"    \u002F\u002F 2.开启定时器\n",[167,58887,58888],{"class":169,"line":34648},[167,58889,58890],{"class":2268},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[167,58892,58893,58896,58898,58900],{"class":169,"line":34654},[167,58894,58895],{"class":173},"    setInterval",[167,58897,898],{"class":512},[167,58899,56439],{"class":731},[167,58901,56442],{"class":512},[167,58903,58904,58906],{"class":169,"line":34660},[167,58905,56447],{"class":512},[167,58907,4738],{"class":731},[167,58909,58910,58912,58914,58916,58919,58921],{"class":169,"line":34671},[167,58911,56470],{"class":731},[167,58913,56473],{"class":512},[167,58915,3764],{"class":731},[167,58917,58918],{"class":512}," sliderData.",[167,58920,53964],{"class":184},[167,58922,14470],{"class":512},[167,58924,58925,58928,58930],{"class":169,"line":34677},[167,58926,58927],{"class":512},"        i ",[167,58929,523],{"class":731},[167,58931,49333],{"class":184},[167,58933,58934],{"class":169,"line":34697},[167,58935,54393],{"class":512},[167,58937,58938],{"class":169,"line":34703},[167,58939,58940],{"class":2268},"      \u002F\u002F 更换图片路径\n",[167,58942,58943,58945,58947],{"class":169,"line":34714},[167,58944,57710],{"class":512},[167,58946,523],{"class":731},[167,58948,58949],{"class":512}," sliderData[i].url\n",[167,58951,58952],{"class":169,"line":34720},[167,58953,58954],{"class":2268},"      \u002F\u002F 把文字写到p里面\n",[167,58956,58957,58959,58961],{"class":169,"line":34726},[167,58958,57720],{"class":512},[167,58960,523],{"class":731},[167,58962,58963],{"class":512}," sliderData[i].title\n",[167,58965,58966],{"class":169,"line":34732},[167,58967,58968],{"class":2268},"      \u002F\u002F 小圆点\n",[167,58970,58971],{"class":169,"line":34738},[167,58972,58973],{"class":2268},"      \u002F\u002F 先删除以前的active\n",[167,58975,58976],{"class":169,"line":34744},[167,58977,58978],{"class":2268},"      \u002F\u002F 只让当前li添加active\n",[167,58980,58981,58983,58985,58987,58990,58993,58996,58998,59000],{"class":169,"line":34750},[167,58982,57760],{"class":512},[167,58984,56389],{"class":173},[167,58986,898],{"class":512},[167,58988,58989],{"class":177},"'.slider-footer .activate'",[167,58991,58992],{"class":512},").classList.",[167,58994,58995],{"class":173},"remove",[167,58997,898],{"class":512},[167,58999,57778],{"class":177},[167,59001,873],{"class":512},[167,59003,59004,59006,59008,59010,59013,59015,59017,59019,59022,59024,59026,59028,59030],{"class":169,"line":34756},[167,59005,57760],{"class":512},[167,59007,56389],{"class":173},[167,59009,898],{"class":512},[167,59011,59012],{"class":177},"`.slider-footer ul li:nth-child(${",[167,59014,2641],{"class":512},[167,59016,47566],{"class":731},[167,59018,27138],{"class":184},[167,59020,59021],{"class":177},"})`",[167,59023,58992],{"class":512},[167,59025,7364],{"class":173},[167,59027,898],{"class":512},[167,59029,57778],{"class":177},[167,59031,873],{"class":512},[167,59033,59034],{"class":169,"line":34776},[167,59035,741],{"emptyLinePlaceholder":740},[167,59037,59038,59040,59042],{"class":169,"line":34782},[167,59039,56525],{"class":512},[167,59041,8440],{"class":184},[167,59043,873],{"class":512},[167,59045,59046],{"class":169,"line":34798},[167,59047,741],{"emptyLinePlaceholder":740},[167,59049,59050,59052,59054],{"class":169,"line":34804},[167,59051,54412],{"class":512},[167,59053,53809],{"class":516},[167,59055,537],{"class":512},[167,59057,59058,59060,59062],{"class":169,"line":34818},[167,59059,575],{"class":512},[167,59061,517],{"class":516},[167,59063,537],{"class":512},[167,59065,59066],{"class":169,"line":34824},[167,59067,741],{"emptyLinePlaceholder":740},[167,59069,59070,59072,59074],{"class":169,"line":34839},[167,59071,575],{"class":512},[167,59073,52635],{"class":516},[167,59075,537],{"class":512},[494,59077,59079],{"id":59078},"_317-重要知识点","3.1.7 重要知识点",[19,59081,59082,59083],{},"浏览器在渲染文本时， ",[2354,59084,59085],{},"没有空格或换行符就没有“断行点”",[19,59087,59088],{},[3528,59089],{"alt":32,"src":59090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59092,59093],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59095,59096],{},[3528,59097],{"alt":32,"src":59098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59100,59101],{},[3528,59102],{"alt":32,"src":59103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59105,59107],{"id":59106},"_32-dom事件基础","3.2 DOM事件基础",[494,59109,59111],{"id":59110},"_321-事件监听","3.2.1 事件监听",[19,59113,59114],{},[3528,59115],{"alt":32,"src":59116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59118,59119],{},"事件监听有响应的发生",[19,59121,59122],{},[3528,59123],{"alt":32,"src":59124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59126,59127],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59129,59130],{},"对于有名函数,要执行的函数名后边不要加()",[494,59132,59134],{"id":59133},"_322-随机点名案例","3.2.2 随机点名案例",[26,59136,59138],{"className":52633,"code":59137,"language":52635,"meta":32,"style":32},"\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",[34,59139,59140,59150,59164,59168,59176,59190,59210,59222,59230,59236,59246,59256,59260,59264,59271,59282,59286,59290,59296,59308,59322,59332,59344,59357,59361,59365,59372,59376,59389,59401,59413,59417,59421,59425,59432,59442,59446,59450,59459,59471,59483,59498,59502,59510,59518,59522,59530,59543,59557,59570,59590,59598,59613,59633,59653,59661,59665,59673,59678,59714,59734,59739,59758,59763,59774,59779,59790,59795,59814,59829,59834,59860,59870,59879,59884,59900,59905,59910,59915,59930,59934,59938,59943,59962,59979,59987,59992,60007,60011,60015,60023,60031,60035],{"__ignoreMap":32},[167,59141,59142,59144,59146,59148],{"class":169,"line":170},[167,59143,53297],{"class":512},[167,59145,53300],{"class":516},[167,59147,53303],{"class":173},[167,59149,537],{"class":512},[167,59151,59152,59154,59156,59158,59160,59162],{"class":169,"line":191},[167,59153,513],{"class":512},[167,59155,52635],{"class":516},[167,59157,53314],{"class":173},[167,59159,523],{"class":512},[167,59161,53319],{"class":177},[167,59163,537],{"class":512},[167,59165,59166],{"class":169,"line":205},[167,59167,741],{"emptyLinePlaceholder":740},[167,59169,59170,59172,59174],{"class":169,"line":219},[167,59171,513],{"class":512},[167,59173,53332],{"class":516},[167,59175,537],{"class":512},[167,59177,59178,59180,59182,59184,59186,59188],{"class":169,"line":230},[167,59179,542],{"class":512},[167,59181,53342],{"class":516},[167,59183,53345],{"class":173},[167,59185,523],{"class":512},[167,59187,53350],{"class":177},[167,59189,537],{"class":512},[167,59191,59192,59194,59196,59198,59200,59202,59204,59206,59208],{"class":169,"line":241},[167,59193,542],{"class":512},[167,59195,53342],{"class":516},[167,59197,520],{"class":173},[167,59199,523],{"class":512},[167,59201,53389],{"class":177},[167,59203,53369],{"class":173},[167,59205,523],{"class":512},[167,59207,53396],{"class":177},[167,59209,537],{"class":512},[167,59211,59212,59214,59216,59218,59220],{"class":169,"line":261},[167,59213,542],{"class":512},[167,59215,53405],{"class":516},[167,59217,53408],{"class":512},[167,59219,53405],{"class":516},[167,59221,537],{"class":512},[167,59223,59224,59226,59228],{"class":169,"line":773},[167,59225,542],{"class":512},[167,59227,2113],{"class":516},[167,59229,537],{"class":512},[167,59231,59232,59234],{"class":169,"line":779},[167,59233,8433],{"class":516},[167,59235,17598],{"class":512},[167,59237,59238,59240,59242,59244],{"class":169,"line":785},[167,59239,56696],{"class":184},[167,59241,53435],{"class":512},[167,59243,1154],{"class":184},[167,59245,3359],{"class":512},[167,59247,59248,59250,59252,59254],{"class":169,"line":790},[167,59249,56685],{"class":184},[167,59251,53435],{"class":512},[167,59253,1154],{"class":184},[167,59255,3359],{"class":512},[167,59257,59258],{"class":169,"line":796},[167,59259,4231],{"class":512},[167,59261,59262],{"class":169,"line":802},[167,59263,741],{"emptyLinePlaceholder":740},[167,59265,59266,59269],{"class":169,"line":808},[167,59267,59268],{"class":516},"    h2",[167,59270,17598],{"class":512},[167,59272,59273,59276,59278,59280],{"class":169,"line":814},[167,59274,59275],{"class":184},"      text-align",[167,59277,53435],{"class":512},[167,59279,53590],{"class":184},[167,59281,3359],{"class":512},[167,59283,59284],{"class":169,"line":820},[167,59285,4231],{"class":512},[167,59287,59288],{"class":169,"line":826},[167,59289,741],{"emptyLinePlaceholder":740},[167,59291,59292,59294],{"class":169,"line":832},[167,59293,56742],{"class":173},[167,59295,17598],{"class":512},[167,59297,59298,59300,59302,59304,59306],{"class":169,"line":837},[167,59299,56761],{"class":184},[167,59301,53435],{"class":512},[167,59303,3604],{"class":184},[167,59305,53490],{"class":731},[167,59307,3359],{"class":512},[167,59309,59310,59312,59314,59316,59318,59320],{"class":169,"line":842},[167,59311,56696],{"class":184},[167,59313,53435],{"class":512},[167,59315,2856],{"class":184},[167,59317,53490],{"class":731},[167,59319,53554],{"class":184},[167,59321,3359],{"class":512},[167,59323,59324,59326,59328,59330],{"class":169,"line":860},[167,59325,56999],{"class":184},[167,59327,53435],{"class":512},[167,59329,53475],{"class":184},[167,59331,3359],{"class":512},[167,59333,59334,59336,59338,59340,59342],{"class":169,"line":876},[167,59335,56912],{"class":184},[167,59337,53435],{"class":512},[167,59339,3025],{"class":184},[167,59341,53490],{"class":731},[167,59343,3359],{"class":512},[167,59345,59346,59349,59351,59353,59355],{"class":169,"line":887},[167,59347,59348],{"class":184},"      line-height",[167,59350,53435],{"class":512},[167,59352,2601],{"class":184},[167,59354,53490],{"class":731},[167,59356,3359],{"class":512},[167,59358,59359],{"class":169,"line":892},[167,59360,4231],{"class":512},[167,59362,59363],{"class":169,"line":907},[167,59364,741],{"emptyLinePlaceholder":740},[167,59366,59367,59370],{"class":169,"line":920},[167,59368,59369],{"class":173},"    .qs",[167,59371,17598],{"class":512},[167,59373,59374],{"class":169,"line":933},[167,59375,741],{"emptyLinePlaceholder":740},[167,59377,59378,59380,59382,59385,59387],{"class":169,"line":946},[167,59379,56761],{"class":184},[167,59381,53435],{"class":512},[167,59383,59384],{"class":184},"450",[167,59386,53490],{"class":731},[167,59388,3359],{"class":512},[167,59390,59391,59393,59395,59397,59399],{"class":169,"line":959},[167,59392,56775],{"class":184},[167,59394,53435],{"class":512},[167,59396,2601],{"class":184},[167,59398,53490],{"class":731},[167,59400,3359],{"class":512},[167,59402,59403,59406,59408,59411],{"class":169,"line":964},[167,59404,59405],{"class":184},"      color",[167,59407,53435],{"class":512},[167,59409,59410],{"class":184},"red",[167,59412,3359],{"class":512},[167,59414,59415],{"class":169,"line":987},[167,59416,741],{"emptyLinePlaceholder":740},[167,59418,59419],{"class":169,"line":993},[167,59420,4231],{"class":512},[167,59422,59423],{"class":169,"line":998},[167,59424,741],{"emptyLinePlaceholder":740},[167,59426,59427,59430],{"class":169,"line":1010},[167,59428,59429],{"class":173},"    .btns",[167,59431,17598],{"class":512},[167,59433,59434,59436,59438,59440],{"class":169,"line":1022},[167,59435,59275],{"class":184},[167,59437,53435],{"class":512},[167,59439,53590],{"class":184},[167,59441,3359],{"class":512},[167,59443,59444],{"class":169,"line":1027},[167,59445,4231],{"class":512},[167,59447,59448],{"class":169,"line":1032},[167,59449,741],{"emptyLinePlaceholder":740},[167,59451,59452,59454,59457],{"class":169,"line":1049},[167,59453,59429],{"class":173},[167,59455,59456],{"class":516}," button",[167,59458,17598],{"class":512},[167,59460,59461,59463,59465,59467,59469],{"class":169,"line":10005},[167,59462,56761],{"class":184},[167,59464,53435],{"class":512},[167,59466,3017],{"class":184},[167,59468,53490],{"class":731},[167,59470,3359],{"class":512},[167,59472,59473,59475,59477,59479,59481],{"class":169,"line":10011},[167,59474,56775],{"class":184},[167,59476,53435],{"class":512},[167,59478,2474],{"class":184},[167,59480,53490],{"class":731},[167,59482,3359],{"class":512},[167,59484,59485,59487,59489,59491,59494,59496],{"class":169,"line":10038},[167,59486,56696],{"class":184},[167,59488,53435],{"class":512},[167,59490,1154],{"class":184},[167,59492,59493],{"class":184}," 50",[167,59495,53490],{"class":731},[167,59497,3359],{"class":512},[167,59499,59500],{"class":169,"line":10043},[167,59501,4231],{"class":512},[167,59503,59504,59506,59508],{"class":169,"line":10049},[167,59505,54412],{"class":512},[167,59507,2113],{"class":516},[167,59509,537],{"class":512},[167,59511,59512,59514,59516],{"class":169,"line":10061},[167,59513,575],{"class":512},[167,59515,53332],{"class":516},[167,59517,537],{"class":512},[167,59519,59520],{"class":169,"line":10073},[167,59521,741],{"emptyLinePlaceholder":740},[167,59523,59524,59526,59528],{"class":169,"line":10085},[167,59525,513],{"class":512},[167,59527,517],{"class":516},[167,59529,537],{"class":512},[167,59531,59532,59534,59536,59539,59541],{"class":169,"line":11744},[167,59533,542],{"class":512},[167,59535,14],{"class":516},[167,59537,59538],{"class":512},">随机点名\u003C\u002F",[167,59540,14],{"class":516},[167,59542,537],{"class":512},[167,59544,59545,59547,59549,59551,59553,59555],{"class":169,"line":11769},[167,59546,542],{"class":512},[167,59548,53609],{"class":516},[167,59550,55479],{"class":173},[167,59552,523],{"class":512},[167,59554,526],{"class":177},[167,59556,537],{"class":512},[167,59558,59559,59561,59563,59566,59568],{"class":169,"line":11792},[167,59560,53339],{"class":512},[167,59562,167],{"class":516},[167,59564,59565],{"class":512},">名字是：\u003C\u002F",[167,59567,167],{"class":516},[167,59569,537],{"class":512},[167,59571,59572,59574,59576,59578,59580,59583,59586,59588],{"class":169,"line":11816},[167,59573,53339],{"class":512},[167,59575,53609],{"class":516},[167,59577,55479],{"class":173},[167,59579,523],{"class":512},[167,59581,59582],{"class":177},"\"qs\"",[167,59584,59585],{"class":512},">这里显示姓名\u003C\u002F",[167,59587,53609],{"class":516},[167,59589,537],{"class":512},[167,59591,59592,59594,59596],{"class":169,"line":11821},[167,59593,54412],{"class":512},[167,59595,53609],{"class":516},[167,59597,537],{"class":512},[167,59599,59600,59602,59604,59606,59608,59611],{"class":169,"line":11826},[167,59601,542],{"class":512},[167,59603,53609],{"class":516},[167,59605,55479],{"class":173},[167,59607,523],{"class":512},[167,59609,59610],{"class":177},"\"btns\"",[167,59612,537],{"class":512},[167,59614,59615,59617,59619,59621,59623,59626,59629,59631],{"class":169,"line":11831},[167,59616,53339],{"class":512},[167,59618,55877],{"class":516},[167,59620,55479],{"class":173},[167,59622,523],{"class":512},[167,59624,59625],{"class":177},"\"start\"",[167,59627,59628],{"class":512},">开始\u003C\u002F",[167,59630,55877],{"class":516},[167,59632,537],{"class":512},[167,59634,59635,59637,59639,59641,59643,59646,59649,59651],{"class":169,"line":11840},[167,59636,53339],{"class":512},[167,59638,55877],{"class":516},[167,59640,55479],{"class":173},[167,59642,523],{"class":512},[167,59644,59645],{"class":177},"\"end\"",[167,59647,59648],{"class":512},">结束\u003C\u002F",[167,59650,55877],{"class":516},[167,59652,537],{"class":512},[167,59654,59655,59657,59659],{"class":169,"line":11845},[167,59656,54412],{"class":512},[167,59658,53609],{"class":516},[167,59660,537],{"class":512},[167,59662,59663],{"class":169,"line":11851},[167,59664,741],{"emptyLinePlaceholder":740},[167,59666,59667,59669,59671],{"class":169,"line":11872},[167,59668,542],{"class":512},[167,59670,53809],{"class":516},[167,59672,537],{"class":512},[167,59674,59675],{"class":169,"line":11878},[167,59676,59677],{"class":2268},"    \u002F\u002F 数据数组\n",[167,59679,59680,59682,59685,59687,59689,59692,59694,59697,59699,59702,59704,59707,59709,59712],{"class":169,"line":11892},[167,59681,13249],{"class":731},[167,59683,59684],{"class":184}," arr",[167,59686,753],{"class":731},[167,59688,54221],{"class":512},[167,59690,59691],{"class":177},"'马超'",[167,59693,14463],{"class":512},[167,59695,59696],{"class":177},"'黄忠'",[167,59698,14463],{"class":512},[167,59700,59701],{"class":177},"'赵云'",[167,59703,14463],{"class":512},[167,59705,59706],{"class":177},"'关羽'",[167,59708,14463],{"class":512},[167,59710,59711],{"class":177},"'张飞'",[167,59713,35249],{"class":512},[167,59715,59716,59718,59721,59723,59725,59727,59729,59732],{"class":169,"line":11898},[167,59717,13249],{"class":731},[167,59719,59720],{"class":184}," qs",[167,59722,753],{"class":731},[167,59724,56386],{"class":512},[167,59726,56389],{"class":173},[167,59728,898],{"class":512},[167,59730,59731],{"class":177},"'.qs'",[167,59733,873],{"class":512},[167,59735,59736],{"class":169,"line":11925},[167,59737,59738],{"class":2268},"    \u002F\u002F 1.业务1.开始按钮模块\n",[167,59740,59741,59743,59745,59747,59749,59751,59753,59756],{"class":169,"line":11934},[167,59742,13249],{"class":731},[167,59744,6216],{"class":184},[167,59746,753],{"class":731},[167,59748,56386],{"class":512},[167,59750,56389],{"class":173},[167,59752,898],{"class":512},[167,59754,59755],{"class":177},"'.start'",[167,59757,873],{"class":512},[167,59759,59760],{"class":169,"line":11940},[167,59761,59762],{"class":2268},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[167,59764,59765,59767,59770,59772],{"class":169,"line":11948},[167,59766,54214],{"class":731},[167,59768,59769],{"class":512}," timerId ",[167,59771,523],{"class":731},[167,59773,49333],{"class":184},[167,59775,59776],{"class":169,"line":11953},[167,59777,59778],{"class":2268},"    \u002F\u002F 随机号要全局变量\n",[167,59780,59781,59783,59786,59788],{"class":169,"line":18630},[167,59782,54214],{"class":731},[167,59784,59785],{"class":512}," random ",[167,59787,523],{"class":731},[167,59789,49333],{"class":184},[167,59791,59792],{"class":169,"line":18636},[167,59793,59794],{"class":2268},"    \u002F\u002F 1.1 添加点击事件\n",[167,59796,59797,59800,59803,59805,59808,59810,59812],{"class":169,"line":18659},[167,59798,59799],{"class":512},"    start.",[167,59801,59802],{"class":173},"addEventListener",[167,59804,898],{"class":512},[167,59806,59807],{"class":177},"'click'",[167,59809,14463],{"class":512},[167,59811,56439],{"class":731},[167,59813,56442],{"class":512},[167,59815,59816,59819,59821,59823,59825,59827],{"class":169,"line":18665},[167,59817,59818],{"class":512},"      timerId ",[167,59820,523],{"class":731},[167,59822,56434],{"class":173},[167,59824,898],{"class":512},[167,59826,56439],{"class":731},[167,59828,56442],{"class":512},[167,59830,59831],{"class":169,"line":18688},[167,59832,59833],{"class":2268},"        \u002F\u002F 随机数\n",[167,59835,59836,59839,59841,59844,59847,59850,59852,59854,59856,59858],{"class":169,"line":18702},[167,59837,59838],{"class":512},"        random ",[167,59840,523],{"class":731},[167,59842,59843],{"class":173}," parseInt",[167,59845,59846],{"class":512},"(Math.",[167,59848,59849],{"class":173},"random",[167,59851,15078],{"class":512},[167,59853,2655],{"class":731},[167,59855,53961],{"class":512},[167,59857,53964],{"class":184},[167,59859,873],{"class":512},[167,59861,59862,59865,59867],{"class":169,"line":18722},[167,59863,59864],{"class":512},"        qs.innerHTML ",[167,59866,523],{"class":731},[167,59868,59869],{"class":512}," arr[random]\n",[167,59871,59872,59875,59877],{"class":169,"line":18728},[167,59873,59874],{"class":512},"      }, ",[167,59876,2474],{"class":184},[167,59878,873],{"class":512},[167,59880,59881],{"class":169,"line":18739},[167,59882,59883],{"class":2268},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[167,59885,59886,59888,59891,59893,59896,59898],{"class":169,"line":18762},[167,59887,56470],{"class":731},[167,59889,59890],{"class":512}," (arr.",[167,59892,53964],{"class":184},[167,59894,59895],{"class":731}," ===",[167,59897,27138],{"class":184},[167,59899,14470],{"class":512},[167,59901,59902],{"class":169,"line":18784},[167,59903,59904],{"class":2268},"        \u002F\u002F start.disabled = true\n",[167,59906,59907],{"class":169,"line":18789},[167,59908,59909],{"class":2268},"        \u002F\u002F end.disabled = true\n",[167,59911,59912],{"class":169,"line":18795},[167,59913,59914],{"class":2268},"        \u002F\u002F 可以合起来写\n",[167,59916,59917,59920,59922,59925,59927],{"class":169,"line":18809},[167,59918,59919],{"class":512},"        start.disabled ",[167,59921,523],{"class":731},[167,59923,59924],{"class":512}," end.disabled ",[167,59926,523],{"class":731},[167,59928,59929],{"class":184}," true\n",[167,59931,59932],{"class":169,"line":18822},[167,59933,54393],{"class":512},[167,59935,59936],{"class":169,"line":18827},[167,59937,35463],{"class":512},[167,59939,59940],{"class":169,"line":18841},[167,59941,59942],{"class":2268},"    \u002F\u002F 1.2 关闭按钮模块\n",[167,59944,59945,59947,59949,59951,59953,59955,59957,59960],{"class":169,"line":18846},[167,59946,13249],{"class":731},[167,59948,6232],{"class":184},[167,59950,753],{"class":731},[167,59952,56386],{"class":512},[167,59954,56389],{"class":173},[167,59956,898],{"class":512},[167,59958,59959],{"class":177},"'.end'",[167,59961,873],{"class":512},[167,59963,59964,59967,59969,59971,59973,59975,59977],{"class":169,"line":18852},[167,59965,59966],{"class":512},"    end.",[167,59968,59802],{"class":173},[167,59970,898],{"class":512},[167,59972,59807],{"class":177},[167,59974,14463],{"class":512},[167,59976,56439],{"class":731},[167,59978,56442],{"class":512},[167,59980,59981,59984],{"class":169,"line":18857},[167,59982,59983],{"class":173},"      clearInterval",[167,59985,59986],{"class":512},"(timerId)\n",[167,59988,59989],{"class":169,"line":18871},[167,59990,59991],{"class":2268},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[167,59993,59994,59997,60000,60003,60005],{"class":169,"line":18876},[167,59995,59996],{"class":512},"      arr.",[167,59998,59999],{"class":173},"splice",[167,60001,60002],{"class":512},"(random, ",[167,60004,2418],{"class":184},[167,60006,873],{"class":512},[167,60008,60009],{"class":169,"line":18881},[167,60010,35463],{"class":512},[167,60012,60013],{"class":169,"line":18895},[167,60014,741],{"emptyLinePlaceholder":740},[167,60016,60017,60019,60021],{"class":169,"line":18907},[167,60018,54412],{"class":512},[167,60020,53809],{"class":516},[167,60022,537],{"class":512},[167,60024,60025,60027,60029],{"class":169,"line":18912},[167,60026,575],{"class":512},[167,60028,517],{"class":516},[167,60030,537],{"class":512},[167,60032,60033],{"class":169,"line":18925},[167,60034,741],{"emptyLinePlaceholder":740},[167,60036,60037,60039,60041],{"class":169,"line":18930},[167,60038,575],{"class":512},[167,60040,52635],{"class":516},[167,60042,537],{"class":512},[19,60044,60045],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[494,60047,60049],{"id":60048},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,60051,60053],{"className":52633,"code":60052,"language":52635,"meta":32,"style":32},"\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",[34,60054,60055,60065,60079,60083,60091,60105,60125,60137,60145,60149,60157,60169,60177,60196,60213,60229,60239,60243,60251,60259,60263],{"__ignoreMap":32},[167,60056,60057,60059,60061,60063],{"class":169,"line":170},[167,60058,53297],{"class":512},[167,60060,53300],{"class":516},[167,60062,53303],{"class":173},[167,60064,537],{"class":512},[167,60066,60067,60069,60071,60073,60075,60077],{"class":169,"line":191},[167,60068,513],{"class":512},[167,60070,52635],{"class":516},[167,60072,53314],{"class":173},[167,60074,523],{"class":512},[167,60076,53319],{"class":177},[167,60078,537],{"class":512},[167,60080,60081],{"class":169,"line":205},[167,60082,741],{"emptyLinePlaceholder":740},[167,60084,60085,60087,60089],{"class":169,"line":219},[167,60086,513],{"class":512},[167,60088,53332],{"class":516},[167,60090,537],{"class":512},[167,60092,60093,60095,60097,60099,60101,60103],{"class":169,"line":230},[167,60094,542],{"class":512},[167,60096,53342],{"class":516},[167,60098,53345],{"class":173},[167,60100,523],{"class":512},[167,60102,53350],{"class":177},[167,60104,537],{"class":512},[167,60106,60107,60109,60111,60113,60115,60117,60119,60121,60123],{"class":169,"line":241},[167,60108,542],{"class":512},[167,60110,53342],{"class":516},[167,60112,520],{"class":173},[167,60114,523],{"class":512},[167,60116,53389],{"class":177},[167,60118,53369],{"class":173},[167,60120,523],{"class":512},[167,60122,53396],{"class":177},[167,60124,537],{"class":512},[167,60126,60127,60129,60131,60133,60135],{"class":169,"line":261},[167,60128,542],{"class":512},[167,60130,53405],{"class":516},[167,60132,53408],{"class":512},[167,60134,53405],{"class":516},[167,60136,537],{"class":512},[167,60138,60139,60141,60143],{"class":169,"line":773},[167,60140,575],{"class":512},[167,60142,53332],{"class":516},[167,60144,537],{"class":512},[167,60146,60147],{"class":169,"line":779},[167,60148,741],{"emptyLinePlaceholder":740},[167,60150,60151,60153,60155],{"class":169,"line":785},[167,60152,513],{"class":512},[167,60154,517],{"class":516},[167,60156,537],{"class":512},[167,60158,60159,60161,60163,60165,60167],{"class":169,"line":790},[167,60160,542],{"class":512},[167,60162,55877],{"class":516},[167,60164,55883],{"class":512},[167,60166,55877],{"class":516},[167,60168,537],{"class":512},[167,60170,60171,60173,60175],{"class":169,"line":796},[167,60172,542],{"class":512},[167,60174,53809],{"class":516},[167,60176,537],{"class":512},[167,60178,60179,60181,60183,60185,60187,60189,60191,60194],{"class":169,"line":802},[167,60180,13249],{"class":731},[167,60182,56381],{"class":184},[167,60184,753],{"class":731},[167,60186,56386],{"class":512},[167,60188,56389],{"class":173},[167,60190,898],{"class":512},[167,60192,60193],{"class":177},"'button'",[167,60195,873],{"class":512},[167,60197,60198,60201,60203,60205,60207,60209,60211],{"class":169,"line":808},[167,60199,60200],{"class":512},"    btn.",[167,60202,59802],{"class":173},[167,60204,898],{"class":512},[167,60206,59807],{"class":177},[167,60208,14463],{"class":512},[167,60210,56439],{"class":731},[167,60212,56442],{"class":512},[167,60214,60215,60218,60220,60222,60225,60227],{"class":169,"line":814},[167,60216,60217],{"class":731},"      const",[167,60219,4284],{"class":184},[167,60221,753],{"class":731},[167,60223,60224],{"class":512}," Math.",[167,60226,59849],{"class":173},[167,60228,4020],{"class":512},[167,60230,60231,60234,60237],{"class":169,"line":820},[167,60232,60233],{"class":512},"      console.",[167,60235,60236],{"class":173},"log",[167,60238,2225],{"class":512},[167,60240,60241],{"class":169,"line":826},[167,60242,35463],{"class":512},[167,60244,60245,60247,60249],{"class":169,"line":832},[167,60246,54412],{"class":512},[167,60248,53809],{"class":516},[167,60250,537],{"class":512},[167,60252,60253,60255,60257],{"class":169,"line":837},[167,60254,575],{"class":512},[167,60256,517],{"class":516},[167,60258,537],{"class":512},[167,60260,60261],{"class":169,"line":842},[167,60262,741],{"emptyLinePlaceholder":740},[167,60264,60265,60267,60269],{"class":169,"line":860},[167,60266,575],{"class":512},[167,60268,52635],{"class":516},[167,60270,537],{"class":512},[19,60272,60273],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60275,60276],{},"常量不可以重新赋值",[19,60278,60279],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,60281,60283],{"className":52633,"code":60282,"language":52635,"meta":32,"style":32},"\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",[34,60284,60285,60295,60309,60313,60321,60335,60355,60367,60375,60379,60387,60399,60407,60418,60436,60452,60466,60474,60478,60486,60494,60498],{"__ignoreMap":32},[167,60286,60287,60289,60291,60293],{"class":169,"line":170},[167,60288,53297],{"class":512},[167,60290,53300],{"class":516},[167,60292,53303],{"class":173},[167,60294,537],{"class":512},[167,60296,60297,60299,60301,60303,60305,60307],{"class":169,"line":191},[167,60298,513],{"class":512},[167,60300,52635],{"class":516},[167,60302,53314],{"class":173},[167,60304,523],{"class":512},[167,60306,53319],{"class":177},[167,60308,537],{"class":512},[167,60310,60311],{"class":169,"line":205},[167,60312,741],{"emptyLinePlaceholder":740},[167,60314,60315,60317,60319],{"class":169,"line":219},[167,60316,513],{"class":512},[167,60318,53332],{"class":516},[167,60320,537],{"class":512},[167,60322,60323,60325,60327,60329,60331,60333],{"class":169,"line":230},[167,60324,542],{"class":512},[167,60326,53342],{"class":516},[167,60328,53345],{"class":173},[167,60330,523],{"class":512},[167,60332,53350],{"class":177},[167,60334,537],{"class":512},[167,60336,60337,60339,60341,60343,60345,60347,60349,60351,60353],{"class":169,"line":241},[167,60338,542],{"class":512},[167,60340,53342],{"class":516},[167,60342,520],{"class":173},[167,60344,523],{"class":512},[167,60346,53389],{"class":177},[167,60348,53369],{"class":173},[167,60350,523],{"class":512},[167,60352,53396],{"class":177},[167,60354,537],{"class":512},[167,60356,60357,60359,60361,60363,60365],{"class":169,"line":261},[167,60358,542],{"class":512},[167,60360,53405],{"class":516},[167,60362,53408],{"class":512},[167,60364,53405],{"class":516},[167,60366,537],{"class":512},[167,60368,60369,60371,60373],{"class":169,"line":773},[167,60370,575],{"class":512},[167,60372,53332],{"class":516},[167,60374,537],{"class":512},[167,60376,60377],{"class":169,"line":779},[167,60378,741],{"emptyLinePlaceholder":740},[167,60380,60381,60383,60385],{"class":169,"line":785},[167,60382,513],{"class":512},[167,60384,517],{"class":516},[167,60386,537],{"class":512},[167,60388,60389,60391,60393,60395,60397],{"class":169,"line":790},[167,60390,542],{"class":512},[167,60392,55877],{"class":516},[167,60394,55883],{"class":512},[167,60396,55877],{"class":516},[167,60398,537],{"class":512},[167,60400,60401,60403,60405],{"class":169,"line":796},[167,60402,542],{"class":512},[167,60404,53809],{"class":516},[167,60406,537],{"class":512},[167,60408,60409,60411,60413,60415],{"class":169,"line":802},[167,60410,13249],{"class":731},[167,60412,4284],{"class":184},[167,60414,753],{"class":731},[167,60416,60417],{"class":184}," 10\n",[167,60419,60420,60422,60424,60426,60428,60430,60432,60434],{"class":169,"line":808},[167,60421,13249],{"class":731},[167,60423,56381],{"class":184},[167,60425,753],{"class":731},[167,60427,56386],{"class":512},[167,60429,56389],{"class":173},[167,60431,898],{"class":512},[167,60433,60193],{"class":177},[167,60435,873],{"class":512},[167,60437,60438,60440,60442,60444,60446,60448,60450],{"class":169,"line":814},[167,60439,60200],{"class":512},[167,60441,59802],{"class":173},[167,60443,898],{"class":512},[167,60445,59807],{"class":177},[167,60447,14463],{"class":512},[167,60449,56439],{"class":731},[167,60451,56442],{"class":512},[167,60453,60454,60456,60458,60460,60462,60464],{"class":169,"line":820},[167,60455,60217],{"class":731},[167,60457,4284],{"class":184},[167,60459,753],{"class":731},[167,60461,60224],{"class":512},[167,60463,59849],{"class":173},[167,60465,4020],{"class":512},[167,60467,60468,60470,60472],{"class":169,"line":826},[167,60469,60233],{"class":512},[167,60471,60236],{"class":173},[167,60473,2225],{"class":512},[167,60475,60476],{"class":169,"line":832},[167,60477,35463],{"class":512},[167,60479,60480,60482,60484],{"class":169,"line":837},[167,60481,54412],{"class":512},[167,60483,53809],{"class":516},[167,60485,537],{"class":512},[167,60487,60488,60490,60492],{"class":169,"line":842},[167,60489,575],{"class":512},[167,60491,517],{"class":516},[167,60493,537],{"class":512},[167,60495,60496],{"class":169,"line":860},[167,60497,741],{"emptyLinePlaceholder":740},[167,60499,60500,60502,60504],{"class":169,"line":876},[167,60501,575],{"class":512},[167,60503,52635],{"class":516},[167,60505,537],{"class":512},[19,60507,60508],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,60510,60512],{"className":52633,"code":60511,"language":52635,"meta":32,"style":32},"\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",[34,60513,60514,60524,60538,60542,60550,60564,60584,60596,60604,60608,60616,60628,60636,60646,60664,60680,60693,60701,60705,60713,60721,60725],{"__ignoreMap":32},[167,60515,60516,60518,60520,60522],{"class":169,"line":170},[167,60517,53297],{"class":512},[167,60519,53300],{"class":516},[167,60521,53303],{"class":173},[167,60523,537],{"class":512},[167,60525,60526,60528,60530,60532,60534,60536],{"class":169,"line":191},[167,60527,513],{"class":512},[167,60529,52635],{"class":516},[167,60531,53314],{"class":173},[167,60533,523],{"class":512},[167,60535,53319],{"class":177},[167,60537,537],{"class":512},[167,60539,60540],{"class":169,"line":205},[167,60541,741],{"emptyLinePlaceholder":740},[167,60543,60544,60546,60548],{"class":169,"line":219},[167,60545,513],{"class":512},[167,60547,53332],{"class":516},[167,60549,537],{"class":512},[167,60551,60552,60554,60556,60558,60560,60562],{"class":169,"line":230},[167,60553,542],{"class":512},[167,60555,53342],{"class":516},[167,60557,53345],{"class":173},[167,60559,523],{"class":512},[167,60561,53350],{"class":177},[167,60563,537],{"class":512},[167,60565,60566,60568,60570,60572,60574,60576,60578,60580,60582],{"class":169,"line":241},[167,60567,542],{"class":512},[167,60569,53342],{"class":516},[167,60571,520],{"class":173},[167,60573,523],{"class":512},[167,60575,53389],{"class":177},[167,60577,53369],{"class":173},[167,60579,523],{"class":512},[167,60581,53396],{"class":177},[167,60583,537],{"class":512},[167,60585,60586,60588,60590,60592,60594],{"class":169,"line":261},[167,60587,542],{"class":512},[167,60589,53405],{"class":516},[167,60591,53408],{"class":512},[167,60593,53405],{"class":516},[167,60595,537],{"class":512},[167,60597,60598,60600,60602],{"class":169,"line":773},[167,60599,575],{"class":512},[167,60601,53332],{"class":516},[167,60603,537],{"class":512},[167,60605,60606],{"class":169,"line":779},[167,60607,741],{"emptyLinePlaceholder":740},[167,60609,60610,60612,60614],{"class":169,"line":785},[167,60611,513],{"class":512},[167,60613,517],{"class":516},[167,60615,537],{"class":512},[167,60617,60618,60620,60622,60624,60626],{"class":169,"line":790},[167,60619,542],{"class":512},[167,60621,55877],{"class":516},[167,60623,55883],{"class":512},[167,60625,55877],{"class":516},[167,60627,537],{"class":512},[167,60629,60630,60632,60634],{"class":169,"line":796},[167,60631,542],{"class":512},[167,60633,53809],{"class":516},[167,60635,537],{"class":512},[167,60637,60638,60640,60642,60644],{"class":169,"line":802},[167,60639,13249],{"class":731},[167,60641,4284],{"class":184},[167,60643,753],{"class":731},[167,60645,60417],{"class":184},[167,60647,60648,60650,60652,60654,60656,60658,60660,60662],{"class":169,"line":808},[167,60649,13249],{"class":731},[167,60651,56381],{"class":184},[167,60653,753],{"class":731},[167,60655,56386],{"class":512},[167,60657,56389],{"class":173},[167,60659,898],{"class":512},[167,60661,60193],{"class":177},[167,60663,873],{"class":512},[167,60665,60666,60668,60670,60672,60674,60676,60678],{"class":169,"line":814},[167,60667,60200],{"class":512},[167,60669,59802],{"class":173},[167,60671,898],{"class":512},[167,60673,59807],{"class":177},[167,60675,14463],{"class":512},[167,60677,56439],{"class":731},[167,60679,56442],{"class":512},[167,60681,60682,60685,60687,60689,60691],{"class":169,"line":820},[167,60683,60684],{"class":512},"      num ",[167,60686,523],{"class":731},[167,60688,60224],{"class":512},[167,60690,59849],{"class":173},[167,60692,4020],{"class":512},[167,60694,60695,60697,60699],{"class":169,"line":826},[167,60696,60233],{"class":512},[167,60698,60236],{"class":173},[167,60700,2225],{"class":512},[167,60702,60703],{"class":169,"line":832},[167,60704,35463],{"class":512},[167,60706,60707,60709,60711],{"class":169,"line":837},[167,60708,54412],{"class":512},[167,60710,53809],{"class":516},[167,60712,537],{"class":512},[167,60714,60715,60717,60719],{"class":169,"line":842},[167,60716,575],{"class":512},[167,60718,517],{"class":516},[167,60720,537],{"class":512},[167,60722,60723],{"class":169,"line":860},[167,60724,741],{"emptyLinePlaceholder":740},[167,60726,60727,60729,60731],{"class":169,"line":876},[167,60728,575],{"class":512},[167,60730,52635],{"class":516},[167,60732,537],{"class":512},[19,60734,60735],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[494,60737,60739],{"id":60738},"_324-事件监听版本","3.2.4 事件监听版本",[19,60741,60742],{},[3528,60743],{"alt":32,"src":60744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60746,60747],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60749,60750],{},"这种方式会覆盖前边的事件监听:",[26,60752,60754],{"className":52633,"code":60753,"language":52635,"meta":32,"style":32},"\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",[34,60755,60756,60766,60780,60784,60792,60806,60826,60838,60846,60850,60858,60870,60878,60896,60910,60921,60925,60937,60947,60951,60959,60967,60971],{"__ignoreMap":32},[167,60757,60758,60760,60762,60764],{"class":169,"line":170},[167,60759,53297],{"class":512},[167,60761,53300],{"class":516},[167,60763,53303],{"class":173},[167,60765,537],{"class":512},[167,60767,60768,60770,60772,60774,60776,60778],{"class":169,"line":191},[167,60769,513],{"class":512},[167,60771,52635],{"class":516},[167,60773,53314],{"class":173},[167,60775,523],{"class":512},[167,60777,53319],{"class":177},[167,60779,537],{"class":512},[167,60781,60782],{"class":169,"line":205},[167,60783,741],{"emptyLinePlaceholder":740},[167,60785,60786,60788,60790],{"class":169,"line":219},[167,60787,513],{"class":512},[167,60789,53332],{"class":516},[167,60791,537],{"class":512},[167,60793,60794,60796,60798,60800,60802,60804],{"class":169,"line":230},[167,60795,542],{"class":512},[167,60797,53342],{"class":516},[167,60799,53345],{"class":173},[167,60801,523],{"class":512},[167,60803,53350],{"class":177},[167,60805,537],{"class":512},[167,60807,60808,60810,60812,60814,60816,60818,60820,60822,60824],{"class":169,"line":241},[167,60809,542],{"class":512},[167,60811,53342],{"class":516},[167,60813,520],{"class":173},[167,60815,523],{"class":512},[167,60817,53389],{"class":177},[167,60819,53369],{"class":173},[167,60821,523],{"class":512},[167,60823,53396],{"class":177},[167,60825,537],{"class":512},[167,60827,60828,60830,60832,60834,60836],{"class":169,"line":261},[167,60829,542],{"class":512},[167,60831,53405],{"class":516},[167,60833,53408],{"class":512},[167,60835,53405],{"class":516},[167,60837,537],{"class":512},[167,60839,60840,60842,60844],{"class":169,"line":773},[167,60841,575],{"class":512},[167,60843,53332],{"class":516},[167,60845,537],{"class":512},[167,60847,60848],{"class":169,"line":779},[167,60849,741],{"emptyLinePlaceholder":740},[167,60851,60852,60854,60856],{"class":169,"line":785},[167,60853,513],{"class":512},[167,60855,517],{"class":516},[167,60857,537],{"class":512},[167,60859,60860,60862,60864,60866,60868],{"class":169,"line":790},[167,60861,542],{"class":512},[167,60863,55877],{"class":516},[167,60865,55883],{"class":512},[167,60867,55877],{"class":516},[167,60869,537],{"class":512},[167,60871,60872,60874,60876],{"class":169,"line":796},[167,60873,542],{"class":512},[167,60875,53809],{"class":516},[167,60877,537],{"class":512},[167,60879,60880,60882,60884,60886,60888,60890,60892,60894],{"class":169,"line":802},[167,60881,13249],{"class":731},[167,60883,56381],{"class":184},[167,60885,753],{"class":731},[167,60887,56386],{"class":512},[167,60889,56389],{"class":173},[167,60891,898],{"class":512},[167,60893,60193],{"class":177},[167,60895,873],{"class":512},[167,60897,60898,60900,60903,60905,60908],{"class":169,"line":808},[167,60899,60200],{"class":512},[167,60901,60902],{"class":173},"onclick",[167,60904,753],{"class":731},[167,60906,60907],{"class":731}," function",[167,60909,56442],{"class":512},[167,60911,60912,60915,60917,60919],{"class":169,"line":814},[167,60913,60914],{"class":173},"      alert",[167,60916,898],{"class":512},[167,60918,2672],{"class":184},[167,60920,873],{"class":512},[167,60922,60923],{"class":169,"line":820},[167,60924,4231],{"class":512},[167,60926,60927,60929,60931,60933,60935],{"class":169,"line":826},[167,60928,60200],{"class":512},[167,60930,60902],{"class":173},[167,60932,753],{"class":731},[167,60934,60907],{"class":731},[167,60936,56442],{"class":512},[167,60938,60939,60941,60943,60945],{"class":169,"line":832},[167,60940,60914],{"class":173},[167,60942,898],{"class":512},[167,60944,2950],{"class":184},[167,60946,873],{"class":512},[167,60948,60949],{"class":169,"line":837},[167,60950,4231],{"class":512},[167,60952,60953,60955,60957],{"class":169,"line":842},[167,60954,54412],{"class":512},[167,60956,53809],{"class":516},[167,60958,537],{"class":512},[167,60960,60961,60963,60965],{"class":169,"line":860},[167,60962,575],{"class":512},[167,60964,517],{"class":516},[167,60966,537],{"class":512},[167,60968,60969],{"class":169,"line":876},[167,60970,741],{"emptyLinePlaceholder":740},[167,60972,60973,60975,60977],{"class":169,"line":887},[167,60974,575],{"class":512},[167,60976,52635],{"class":516},[167,60978,537],{"class":512},[19,60980,60981],{},"只要点击就输出结果为22,前边11被覆盖了",[26,60983,60985],{"className":52633,"code":60984,"language":52635,"meta":32,"style":32},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[34,60986,60987,60992,60997,61001,61006,61011],{"__ignoreMap":32},[167,60988,60989],{"class":169,"line":170},[167,60990,60991],{"class":512},"  btn.addEventListener('click', function () {\n",[167,60993,60994],{"class":169,"line":191},[167,60995,60996],{"class":512},"      alert(11)\n",[167,60998,60999],{"class":169,"line":205},[167,61000,35463],{"class":512},[167,61002,61003],{"class":169,"line":219},[167,61004,61005],{"class":512},"    btn.addEventListener('click', function () {\n",[167,61007,61008],{"class":169,"line":230},[167,61009,61010],{"class":512},"      alert(22)\n",[167,61012,61013],{"class":169,"line":241},[167,61014,35463],{"class":512},[19,61016,61017],{},"点击第一次输出11,第二次点击为22",[494,61019,61021],{"id":61020},"_325-事件类型","3.2.5 事件类型",[19,61023,61024],{},[3528,61025],{"alt":32,"src":61026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24024,61028,61030],{"id":61029},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61032,61033],{},"补充知识:",[19,61035,61036],{},"轮播图自动播放模块,可以使用",[19,61038,61039],{},"let timerId = setInterval(function () {",[19,61041,61042],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61044,61045],{},"用js方法模拟进行点击事件,click必须加()",[19,61047,61048],{},"next.click()",[19,61050,61051],{},"}, 1000)",[19,61053,61054],{},[3528,61055],{"alt":32,"src":61056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,61058,61060],{"className":503,"code":61059,"language":505,"meta":32,"style":32},"\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",[34,61061,61062,61066,61076,61090,61094,61102,61117,61137,61157,61170,61178,61183,61188,61192,61196,61201,61206,61211,61216,61220,61224,61229,61234,61239,61243,61247,61252,61256,61261,61266,61270,61274,61279,61284,61289,61294,61299,61303,61307,61312,61317,61322,61327,61332,61336,61340,61345,61350,61355,61360,61365,61370,61375,61380,61385,61390,61394,61398,61403,61408,61412,61416,61421,61426,61430,61435,61440,61444,61448,61453,61457,61462,61467,61471,61476,61480,61484,61489,61494,61499,61504,61509,61514,61519,61523,61527,61531,61536,61541,61546,61551,61555,61563,61571,61575,61583,61598,61612,61633,61641,61655,61668,61683,61702,61714,61726,61738,61750,61762,61774,61786,61794,61809,61833,61857,61865,61873,61881,61889,61894,61899,61904,61909,61914,61919,61924,61929,61934,61939,61943,61948,61953,61958,61963,61968,61973,61978,61983,61988,61992,61997,62002,62007,62012,62017,62022,62027,62032,62037,62042,62047,62052,62056,62060,62065,62070,62075,62079,62084,62089,62094,62099,62104,62108,62113,62117,62121,62125,62129,62133,62137,62142,62147,62152,62157,62162,62167,62172,62177,62182,62186,62190,62195,62200,62205,62210,62215,62219,62224,62229,62234,62239,62244,62249,62253,62257,62262,62266,62271,62275,62280,62285,62290,62295,62300,62305,62309,62317,62325,62329],{"__ignoreMap":32},[167,61063,61064],{"class":169,"line":170},[167,61065,741],{"emptyLinePlaceholder":740},[167,61067,61068,61070,61072,61074],{"class":169,"line":191},[167,61069,53297],{"class":512},[167,61071,53300],{"class":731},[167,61073,53303],{"class":184},[167,61075,537],{"class":512},[167,61077,61078,61080,61082,61084,61086,61088],{"class":169,"line":205},[167,61079,513],{"class":512},[167,61081,52635],{"class":516},[167,61083,53314],{"class":173},[167,61085,523],{"class":512},[167,61087,53319],{"class":177},[167,61089,537],{"class":512},[167,61091,61092],{"class":169,"line":219},[167,61093,741],{"emptyLinePlaceholder":740},[167,61095,61096,61098,61100],{"class":169,"line":230},[167,61097,513],{"class":512},[167,61099,53332],{"class":516},[167,61101,537],{"class":512},[167,61103,61104,61106,61108,61110,61112,61114],{"class":169,"line":241},[167,61105,542],{"class":512},[167,61107,53342],{"class":516},[167,61109,53345],{"class":173},[167,61111,523],{"class":512},[167,61113,53350],{"class":177},[167,61115,61116],{"class":512}," \u002F>\n",[167,61118,61119,61121,61123,61125,61127,61129,61131,61133,61135],{"class":169,"line":261},[167,61120,542],{"class":512},[167,61122,53342],{"class":516},[167,61124,53361],{"class":173},[167,61126,523],{"class":512},[167,61128,53366],{"class":177},[167,61130,53369],{"class":173},[167,61132,523],{"class":512},[167,61134,53374],{"class":177},[167,61136,61116],{"class":512},[167,61138,61139,61141,61143,61145,61147,61149,61151,61153,61155],{"class":169,"line":773},[167,61140,542],{"class":512},[167,61142,53342],{"class":516},[167,61144,520],{"class":173},[167,61146,523],{"class":512},[167,61148,53389],{"class":177},[167,61150,53369],{"class":173},[167,61152,523],{"class":512},[167,61154,53396],{"class":177},[167,61156,61116],{"class":512},[167,61158,61159,61161,61163,61166,61168],{"class":169,"line":779},[167,61160,542],{"class":512},[167,61162,53405],{"class":516},[167,61164,61165],{"class":512},">轮播图点击切换\u003C\u002F",[167,61167,53405],{"class":516},[167,61169,537],{"class":512},[167,61171,61172,61174,61176],{"class":169,"line":785},[167,61173,542],{"class":512},[167,61175,2113],{"class":516},[167,61177,537],{"class":512},[167,61179,61180],{"class":169,"line":790},[167,61181,61182],{"class":512},"    * {\n",[167,61184,61185],{"class":169,"line":796},[167,61186,61187],{"class":512},"      box-sizing: border-box;\n",[167,61189,61190],{"class":169,"line":802},[167,61191,4231],{"class":512},[167,61193,61194],{"class":169,"line":808},[167,61195,741],{"emptyLinePlaceholder":740},[167,61197,61198],{"class":169,"line":814},[167,61199,61200],{"class":512},"    .slider {\n",[167,61202,61203],{"class":169,"line":820},[167,61204,61205],{"class":512},"      width: 560px;\n",[167,61207,61208],{"class":169,"line":826},[167,61209,61210],{"class":512},"      height: 400px;\n",[167,61212,61213],{"class":169,"line":832},[167,61214,61215],{"class":512},"      overflow: hidden;\n",[167,61217,61218],{"class":169,"line":837},[167,61219,4231],{"class":512},[167,61221,61222],{"class":169,"line":842},[167,61223,741],{"emptyLinePlaceholder":740},[167,61225,61226],{"class":169,"line":860},[167,61227,61228],{"class":512},"    .slider-wrapper {\n",[167,61230,61231],{"class":169,"line":876},[167,61232,61233],{"class":512},"      width: 100%;\n",[167,61235,61236],{"class":169,"line":887},[167,61237,61238],{"class":512},"      height: 320px;\n",[167,61240,61241],{"class":169,"line":892},[167,61242,4231],{"class":512},[167,61244,61245],{"class":169,"line":907},[167,61246,741],{"emptyLinePlaceholder":740},[167,61248,61249],{"class":169,"line":920},[167,61250,61251],{"class":512},"    .slider-wrapper img {\n",[167,61253,61254],{"class":169,"line":933},[167,61255,61233],{"class":512},[167,61257,61258],{"class":169,"line":946},[167,61259,61260],{"class":512},"      height: 100%;\n",[167,61262,61263],{"class":169,"line":959},[167,61264,61265],{"class":512},"      display: block;\n",[167,61267,61268],{"class":169,"line":964},[167,61269,4231],{"class":512},[167,61271,61272],{"class":169,"line":987},[167,61273,741],{"emptyLinePlaceholder":740},[167,61275,61276],{"class":169,"line":993},[167,61277,61278],{"class":512},"    .slider-footer {\n",[167,61280,61281],{"class":169,"line":998},[167,61282,61283],{"class":512},"      height: 80px;\n",[167,61285,61286],{"class":169,"line":1010},[167,61287,61288],{"class":512},"      background-color: rgb(100, 67, 68);\n",[167,61290,61291],{"class":169,"line":1022},[167,61292,61293],{"class":512},"      padding: 12px 12px 0 12px;\n",[167,61295,61296],{"class":169,"line":1027},[167,61297,61298],{"class":512},"      position: relative;\n",[167,61300,61301],{"class":169,"line":1032},[167,61302,4231],{"class":512},[167,61304,61305],{"class":169,"line":1049},[167,61306,741],{"emptyLinePlaceholder":740},[167,61308,61309],{"class":169,"line":10005},[167,61310,61311],{"class":512},"    .slider-footer .toggle {\n",[167,61313,61314],{"class":169,"line":10011},[167,61315,61316],{"class":512},"      position: absolute;\n",[167,61318,61319],{"class":169,"line":10038},[167,61320,61321],{"class":512},"      right: 0;\n",[167,61323,61324],{"class":169,"line":10043},[167,61325,61326],{"class":512},"      top: 12px;\n",[167,61328,61329],{"class":169,"line":10049},[167,61330,61331],{"class":512},"      display: flex;\n",[167,61333,61334],{"class":169,"line":10061},[167,61335,4231],{"class":512},[167,61337,61338],{"class":169,"line":10073},[167,61339,741],{"emptyLinePlaceholder":740},[167,61341,61342],{"class":169,"line":10085},[167,61343,61344],{"class":512},"    .slider-footer .toggle button {\n",[167,61346,61347],{"class":169,"line":11744},[167,61348,61349],{"class":512},"      margin-right: 12px;\n",[167,61351,61352],{"class":169,"line":11769},[167,61353,61354],{"class":512},"      width: 28px;\n",[167,61356,61357],{"class":169,"line":11792},[167,61358,61359],{"class":512},"      height: 28px;\n",[167,61361,61362],{"class":169,"line":11816},[167,61363,61364],{"class":512},"      appearance: none;\n",[167,61366,61367],{"class":169,"line":11821},[167,61368,61369],{"class":512},"      border: none;\n",[167,61371,61372],{"class":169,"line":11826},[167,61373,61374],{"class":512},"      background: rgba(255, 255, 255, 0.1);\n",[167,61376,61377],{"class":169,"line":11831},[167,61378,61379],{"class":512},"      color: #fff;\n",[167,61381,61382],{"class":169,"line":11840},[167,61383,61384],{"class":512},"      border-radius: 4px;\n",[167,61386,61387],{"class":169,"line":11845},[167,61388,61389],{"class":512},"      cursor: pointer;\n",[167,61391,61392],{"class":169,"line":11851},[167,61393,4231],{"class":512},[167,61395,61396],{"class":169,"line":11872},[167,61397,741],{"emptyLinePlaceholder":740},[167,61399,61400],{"class":169,"line":11878},[167,61401,61402],{"class":512},"    .slider-footer .toggle button:hover {\n",[167,61404,61405],{"class":169,"line":11892},[167,61406,61407],{"class":512},"      background: rgba(255, 255, 255, 0.2);\n",[167,61409,61410],{"class":169,"line":11898},[167,61411,4231],{"class":512},[167,61413,61414],{"class":169,"line":11925},[167,61415,741],{"emptyLinePlaceholder":740},[167,61417,61418],{"class":169,"line":11934},[167,61419,61420],{"class":512},"    .slider-footer p {\n",[167,61422,61423],{"class":169,"line":11940},[167,61424,61425],{"class":512},"      margin: 0;\n",[167,61427,61428],{"class":169,"line":11948},[167,61429,61379],{"class":512},[167,61431,61432],{"class":169,"line":11953},[167,61433,61434],{"class":512},"      font-size: 18px;\n",[167,61436,61437],{"class":169,"line":18630},[167,61438,61439],{"class":512},"      margin-bottom: 10px;\n",[167,61441,61442],{"class":169,"line":18636},[167,61443,4231],{"class":512},[167,61445,61446],{"class":169,"line":18659},[167,61447,741],{"emptyLinePlaceholder":740},[167,61449,61450],{"class":169,"line":18665},[167,61451,61452],{"class":512},"    .slider-indicator {\n",[167,61454,61455],{"class":169,"line":18688},[167,61456,61425],{"class":512},[167,61458,61459],{"class":169,"line":18702},[167,61460,61461],{"class":512},"      padding: 0;\n",[167,61463,61464],{"class":169,"line":18722},[167,61465,61466],{"class":512},"      list-style: none;\n",[167,61468,61469],{"class":169,"line":18728},[167,61470,61331],{"class":512},[167,61472,61473],{"class":169,"line":18739},[167,61474,61475],{"class":512},"      align-items: center;\n",[167,61477,61478],{"class":169,"line":18762},[167,61479,4231],{"class":512},[167,61481,61482],{"class":169,"line":18784},[167,61483,741],{"emptyLinePlaceholder":740},[167,61485,61486],{"class":169,"line":18789},[167,61487,61488],{"class":512},"    .slider-indicator li {\n",[167,61490,61491],{"class":169,"line":18795},[167,61492,61493],{"class":512},"      width: 8px;\n",[167,61495,61496],{"class":169,"line":18809},[167,61497,61498],{"class":512},"      height: 8px;\n",[167,61500,61501],{"class":169,"line":18822},[167,61502,61503],{"class":512},"      margin: 4px;\n",[167,61505,61506],{"class":169,"line":18827},[167,61507,61508],{"class":512},"      border-radius: 50%;\n",[167,61510,61511],{"class":169,"line":18841},[167,61512,61513],{"class":512},"      background: #fff;\n",[167,61515,61516],{"class":169,"line":18846},[167,61517,61518],{"class":512},"      opacity: 0.4;\n",[167,61520,61521],{"class":169,"line":18852},[167,61522,61389],{"class":512},[167,61524,61525],{"class":169,"line":18857},[167,61526,4231],{"class":512},[167,61528,61529],{"class":169,"line":18871},[167,61530,741],{"emptyLinePlaceholder":740},[167,61532,61533],{"class":169,"line":18876},[167,61534,61535],{"class":512},"    .slider-indicator li.active {\n",[167,61537,61538],{"class":169,"line":18881},[167,61539,61540],{"class":512},"      width: 12px;\n",[167,61542,61543],{"class":169,"line":18895},[167,61544,61545],{"class":512},"      height: 12px;\n",[167,61547,61548],{"class":169,"line":18907},[167,61549,61550],{"class":512},"      opacity: 1;\n",[167,61552,61553],{"class":169,"line":18912},[167,61554,4231],{"class":512},[167,61556,61557,61559,61561],{"class":169,"line":18925},[167,61558,54412],{"class":512},[167,61560,2113],{"class":516},[167,61562,537],{"class":512},[167,61564,61565,61567,61569],{"class":169,"line":18930},[167,61566,575],{"class":512},[167,61568,53332],{"class":516},[167,61570,537],{"class":512},[167,61572,61573],{"class":169,"line":18935},[167,61574,741],{"emptyLinePlaceholder":740},[167,61576,61577,61579,61581],{"class":169,"line":18940},[167,61578,513],{"class":512},[167,61580,517],{"class":516},[167,61582,537],{"class":512},[167,61584,61585,61587,61589,61591,61593,61596],{"class":169,"line":18953},[167,61586,542],{"class":512},[167,61588,53609],{"class":516},[167,61590,55479],{"class":173},[167,61592,523],{"class":512},[167,61594,61595],{"class":177},"\"slider\"",[167,61597,537],{"class":512},[167,61599,61600,61602,61604,61606,61608,61610],{"class":169,"line":18958},[167,61601,53339],{"class":512},[167,61603,53609],{"class":516},[167,61605,55479],{"class":173},[167,61607,523],{"class":512},[167,61609,57216],{"class":177},[167,61611,537],{"class":512},[167,61613,61614,61616,61618,61620,61622,61625,61627,61629,61631],{"class":169,"line":34636},[167,61615,57223],{"class":512},[167,61617,3528],{"class":516},[167,61619,57228],{"class":173},[167,61621,523],{"class":512},[167,61623,61624],{"class":177},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[167,61626,57236],{"class":173},[167,61628,523],{"class":512},[167,61630,9682],{"class":177},[167,61632,61116],{"class":512},[167,61634,61635,61637,61639],{"class":169,"line":34642},[167,61636,53774],{"class":512},[167,61638,53609],{"class":516},[167,61640,537],{"class":512},[167,61642,61643,61645,61647,61649,61651,61653],{"class":169,"line":34648},[167,61644,53339],{"class":512},[167,61646,53609],{"class":516},[167,61648,55479],{"class":173},[167,61650,523],{"class":512},[167,61652,57263],{"class":177},[167,61654,537],{"class":512},[167,61656,61657,61659,61661,61664,61666],{"class":169,"line":34654},[167,61658,57223],{"class":512},[167,61660,19],{"class":516},[167,61662,61663],{"class":512},">对人类来说会不会太超前了？\u003C\u002F",[167,61665,19],{"class":516},[167,61667,537],{"class":512},[167,61669,61670,61672,61674,61676,61678,61681],{"class":169,"line":34660},[167,61671,57223],{"class":512},[167,61673,3205],{"class":516},[167,61675,55479],{"class":173},[167,61677,523],{"class":512},[167,61679,61680],{"class":177},"\"slider-indicator\"",[167,61682,537],{"class":512},[167,61684,61685,61687,61689,61691,61693,61696,61698,61700],{"class":169,"line":34671},[167,61686,57291],{"class":512},[167,61688,43],{"class":516},[167,61690,55479],{"class":173},[167,61692,523],{"class":512},[167,61694,61695],{"class":177},"\"active\"",[167,61697,57303],{"class":512},[167,61699,43],{"class":516},[167,61701,537],{"class":512},[167,61703,61704,61706,61708,61710,61712],{"class":169,"line":34677},[167,61705,57291],{"class":512},[167,61707,43],{"class":516},[167,61709,57303],{"class":512},[167,61711,43],{"class":516},[167,61713,537],{"class":512},[167,61715,61716,61718,61720,61722,61724],{"class":169,"line":34697},[167,61717,57291],{"class":512},[167,61719,43],{"class":516},[167,61721,57303],{"class":512},[167,61723,43],{"class":516},[167,61725,537],{"class":512},[167,61727,61728,61730,61732,61734,61736],{"class":169,"line":34703},[167,61729,57291],{"class":512},[167,61731,43],{"class":516},[167,61733,57303],{"class":512},[167,61735,43],{"class":516},[167,61737,537],{"class":512},[167,61739,61740,61742,61744,61746,61748],{"class":169,"line":34714},[167,61741,57291],{"class":512},[167,61743,43],{"class":516},[167,61745,57303],{"class":512},[167,61747,43],{"class":516},[167,61749,537],{"class":512},[167,61751,61752,61754,61756,61758,61760],{"class":169,"line":34720},[167,61753,57291],{"class":512},[167,61755,43],{"class":516},[167,61757,57303],{"class":512},[167,61759,43],{"class":516},[167,61761,537],{"class":512},[167,61763,61764,61766,61768,61770,61772],{"class":169,"line":34726},[167,61765,57291],{"class":512},[167,61767,43],{"class":516},[167,61769,57303],{"class":512},[167,61771,43],{"class":516},[167,61773,537],{"class":512},[167,61775,61776,61778,61780,61782,61784],{"class":169,"line":34732},[167,61777,57291],{"class":512},[167,61779,43],{"class":516},[167,61781,57303],{"class":512},[167,61783,43],{"class":516},[167,61785,537],{"class":512},[167,61787,61788,61790,61792],{"class":169,"line":34738},[167,61789,57396],{"class":512},[167,61791,3205],{"class":516},[167,61793,537],{"class":512},[167,61795,61796,61798,61800,61802,61804,61807],{"class":169,"line":34744},[167,61797,57223],{"class":512},[167,61799,53609],{"class":516},[167,61801,55479],{"class":173},[167,61803,523],{"class":512},[167,61805,61806],{"class":177},"\"toggle\"",[167,61808,537],{"class":512},[167,61810,61811,61813,61815,61817,61819,61822,61824,61827,61829,61831],{"class":169,"line":34750},[167,61812,57291],{"class":512},[167,61814,55877],{"class":516},[167,61816,55479],{"class":173},[167,61818,523],{"class":512},[167,61820,61821],{"class":177},"\"prev\"",[167,61823,3159],{"class":512},[167,61825,61826],{"class":184},"&lt;",[167,61828,575],{"class":512},[167,61830,55877],{"class":516},[167,61832,537],{"class":512},[167,61834,61835,61837,61839,61841,61843,61846,61848,61851,61853,61855],{"class":169,"line":34756},[167,61836,57291],{"class":512},[167,61838,55877],{"class":516},[167,61840,55479],{"class":173},[167,61842,523],{"class":512},[167,61844,61845],{"class":177},"\"next\"",[167,61847,3159],{"class":512},[167,61849,61850],{"class":184},"&gt;",[167,61852,575],{"class":512},[167,61854,55877],{"class":516},[167,61856,537],{"class":512},[167,61858,61859,61861,61863],{"class":169,"line":34776},[167,61860,57396],{"class":512},[167,61862,53609],{"class":516},[167,61864,537],{"class":512},[167,61866,61867,61869,61871],{"class":169,"line":34782},[167,61868,53774],{"class":512},[167,61870,53609],{"class":516},[167,61872,537],{"class":512},[167,61874,61875,61877,61879],{"class":169,"line":34798},[167,61876,54412],{"class":512},[167,61878,53609],{"class":516},[167,61880,537],{"class":512},[167,61882,61883,61885,61887],{"class":169,"line":34804},[167,61884,542],{"class":512},[167,61886,53809],{"class":516},[167,61888,537],{"class":512},[167,61890,61891],{"class":169,"line":34818},[167,61892,61893],{"class":512},"    \u002F\u002F 1. 初始数据\n",[167,61895,61896],{"class":169,"line":34824},[167,61897,61898],{"class":512},"    const data = [\n",[167,61900,61901],{"class":169,"line":34839},[167,61902,61903],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[167,61905,61906],{"class":169,"line":34845},[167,61907,61908],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[167,61910,61911],{"class":169,"line":34854},[167,61912,61913],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[167,61915,61916],{"class":169,"line":34860},[167,61917,61918],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[167,61920,61921],{"class":169,"line":34869},[167,61922,61923],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[167,61925,61926],{"class":169,"line":34875},[167,61927,61928],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[167,61930,61931],{"class":169,"line":34881},[167,61932,61933],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[167,61935,61936],{"class":169,"line":34890},[167,61937,61938],{"class":512},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[167,61940,61941],{"class":169,"line":34896},[167,61942,55102],{"class":512},[167,61944,61945],{"class":169,"line":34907},[167,61946,61947],{"class":512},"    \u002F\u002F 获取元素\n",[167,61949,61950],{"class":169,"line":34913},[167,61951,61952],{"class":512},"    const img = document.querySelector('.slider-wrapper img')\n",[167,61954,61955],{"class":169,"line":34932},[167,61956,61957],{"class":512},"    const p = document.querySelector('.slider-footer p')\n",[167,61959,61960],{"class":169,"line":34938},[167,61961,61962],{"class":512},"    const footer = document.querySelector('.slider-footer')\n",[167,61964,61965],{"class":169,"line":34949},[167,61966,61967],{"class":512},"    \u002F\u002F 1. 右按钮业务\n",[167,61969,61970],{"class":169,"line":34955},[167,61971,61972],{"class":512},"    \u002F\u002F 1.1 获取右侧按钮 \n",[167,61974,61975],{"class":169,"line":34975},[167,61976,61977],{"class":512},"    const next = document.querySelector('.next')\n",[167,61979,61980],{"class":169,"line":34991},[167,61981,61982],{"class":512},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[167,61984,61985],{"class":169,"line":34997},[167,61986,61987],{"class":512},"    \u002F\u002F 1.2 注册点击事件\n",[167,61989,61990],{"class":169,"line":35011},[167,61991,741],{"emptyLinePlaceholder":740},[167,61993,61994],{"class":169,"line":35017},[167,61995,61996],{"class":512},"    next.addEventListener('click', function () {\n",[167,61998,61999],{"class":169,"line":35023},[167,62000,62001],{"class":512},"      \u002F\u002F console.log(11)\n",[167,62003,62004],{"class":169,"line":35034},[167,62005,62006],{"class":512},"      i++\n",[167,62008,62009],{"class":169,"line":35040},[167,62010,62011],{"class":512},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[167,62013,62014],{"class":169,"line":35046},[167,62015,62016],{"class":512},"      \u002F\u002F if (i >= 8) {\n",[167,62018,62019],{"class":169,"line":35056},[167,62020,62021],{"class":512},"      \u002F\u002F   i = 0\n",[167,62023,62024],{"class":169,"line":35062},[167,62025,62026],{"class":512},"      \u002F\u002F }\n",[167,62028,62029],{"class":169,"line":35073},[167,62030,62031],{"class":512},"      i = i >= data.length ? 0 : i\n",[167,62033,62034],{"class":169,"line":35079},[167,62035,62036],{"class":512},"      \u002F\u002F 1.3 得到对应的对象\n",[167,62038,62039],{"class":169,"line":35089},[167,62040,62041],{"class":512},"      \u002F\u002F console.log(data[i])\n",[167,62043,62044],{"class":169,"line":35094},[167,62045,62046],{"class":512},"      \u002F\u002F 调用函数\n",[167,62048,62049],{"class":169,"line":35100},[167,62050,62051],{"class":512},"      toggle()\n",[167,62053,62054],{"class":169,"line":35149},[167,62055,35463],{"class":512},[167,62057,62058],{"class":169,"line":35196},[167,62059,741],{"emptyLinePlaceholder":740},[167,62061,62062],{"class":169,"line":35201},[167,62063,62064],{"class":512},"    \u002F\u002F 2. 左侧按钮业务\n",[167,62066,62067],{"class":169,"line":35207},[167,62068,62069],{"class":512},"    \u002F\u002F 2.1 获取左侧按钮 \n",[167,62071,62072],{"class":169,"line":35226},[167,62073,62074],{"class":512},"    const prev = document.querySelector('.prev')\n",[167,62076,62077],{"class":169,"line":35232},[167,62078,61987],{"class":512},[167,62080,62081],{"class":169,"line":35252},[167,62082,62083],{"class":512},"    prev.addEventListener('click', function () {\n",[167,62085,62086],{"class":169,"line":35258},[167,62087,62088],{"class":512},"      i--\n",[167,62090,62091],{"class":169,"line":35264},[167,62092,62093],{"class":512},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[167,62095,62096],{"class":169,"line":35274},[167,62097,62098],{"class":512},"      \u002F\u002F if (i \u003C 0) {\n",[167,62100,62101],{"class":169,"line":35279},[167,62102,62103],{"class":512},"      \u002F\u002F   i = 7\n",[167,62105,62106],{"class":169,"line":35285},[167,62107,62026],{"class":512},[167,62109,62110],{"class":169,"line":35301},[167,62111,62112],{"class":512},"      i = i \u003C 0 ? data.length - 1 : i\n",[167,62114,62115],{"class":169,"line":35346},[167,62116,62036],{"class":512},[167,62118,62119],{"class":169,"line":35352},[167,62120,62041],{"class":512},[167,62122,62123],{"class":169,"line":35358},[167,62124,62046],{"class":512},[167,62126,62127],{"class":169,"line":35364},[167,62128,62051],{"class":512},[167,62130,62131],{"class":169,"line":35375},[167,62132,35463],{"class":512},[167,62134,62135],{"class":169,"line":35381},[167,62136,741],{"emptyLinePlaceholder":740},[167,62138,62139],{"class":169,"line":35387},[167,62140,62141],{"class":512},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[167,62143,62144],{"class":169,"line":35393},[167,62145,62146],{"class":512},"    function toggle() {\n",[167,62148,62149],{"class":169,"line":35410},[167,62150,62151],{"class":512},"      \u002F\u002F 1.4 渲染对应的数据\n",[167,62153,62154],{"class":169,"line":35424},[167,62155,62156],{"class":512},"      img.src = data[i].url\n",[167,62158,62159],{"class":169,"line":35433},[167,62160,62161],{"class":512},"      p.innerHTML = data[i].title\n",[167,62163,62164],{"class":169,"line":35442},[167,62165,62166],{"class":512},"      footer.style.backgroundColor = data[i].color\n",[167,62168,62169],{"class":169,"line":35451},[167,62170,62171],{"class":512},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[167,62173,62174],{"class":169,"line":35460},[167,62175,62176],{"class":512},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[167,62178,62179],{"class":169,"line":35466},[167,62180,62181],{"class":512},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[167,62183,62184],{"class":169,"line":35472},[167,62185,4231],{"class":512},[167,62187,62188],{"class":169,"line":35480},[167,62189,741],{"emptyLinePlaceholder":740},[167,62191,62192],{"class":169,"line":35485},[167,62193,62194],{"class":512},"    \u002F\u002F 3. 自动播放模块\n",[167,62196,62197],{"class":169,"line":35491},[167,62198,62199],{"class":512},"    let timerId = setInterval(function () {\n",[167,62201,62202],{"class":169,"line":35502},[167,62203,62204],{"class":512},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[167,62206,62207],{"class":169,"line":35508},[167,62208,62209],{"class":512},"      next.click()\n",[167,62211,62212],{"class":169,"line":35528},[167,62213,62214],{"class":512},"    }, 1000)\n",[167,62216,62217],{"class":169,"line":35534},[167,62218,741],{"emptyLinePlaceholder":740},[167,62220,62221],{"class":169,"line":35540},[167,62222,62223],{"class":512},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[167,62225,62226],{"class":169,"line":35546},[167,62227,62228],{"class":512},"    const slider = document.querySelector('.slider')\n",[167,62230,62231],{"class":169,"line":35563},[167,62232,62233],{"class":512},"    \u002F\u002F 注册事件\n",[167,62235,62236],{"class":169,"line":35569},[167,62237,62238],{"class":512},"    slider.addEventListener('mouseenter', function () {\n",[167,62240,62241],{"class":169,"line":35575},[167,62242,62243],{"class":512},"      \u002F\u002F 停止定时器\n",[167,62245,62246],{"class":169,"line":35581},[167,62247,62248],{"class":512},"      clearInterval(timerId)\n",[167,62250,62251],{"class":169,"line":35587},[167,62252,35463],{"class":512},[167,62254,62255],{"class":169,"line":35593},[167,62256,741],{"emptyLinePlaceholder":740},[167,62258,62259],{"class":169,"line":35620},[167,62260,62261],{"class":512},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[167,62263,62264],{"class":169,"line":35644},[167,62265,62233],{"class":512},[167,62267,62268],{"class":169,"line":35650},[167,62269,62270],{"class":512},"    slider.addEventListener('mouseleave', function () {\n",[167,62272,62273],{"class":169,"line":35656},[167,62274,62243],{"class":512},[167,62276,62277],{"class":169,"line":35662},[167,62278,62279],{"class":512},"      if (timerId) clearInterval(timerId)\n",[167,62281,62282],{"class":169,"line":35673},[167,62283,62284],{"class":512},"      \u002F\u002F 开启定时器\n",[167,62286,62287],{"class":169,"line":35684},[167,62288,62289],{"class":512},"      timerId = setInterval(function () {\n",[167,62291,62292],{"class":169,"line":35690},[167,62293,62294],{"class":512},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[167,62296,62297],{"class":169,"line":35707},[167,62298,62299],{"class":512},"        next.click()\n",[167,62301,62302],{"class":169,"line":35730},[167,62303,62304],{"class":512},"      }, 1000)\n",[167,62306,62307],{"class":169,"line":35753},[167,62308,35463],{"class":512},[167,62310,62311,62313,62315],{"class":169,"line":35759},[167,62312,54412],{"class":512},[167,62314,53809],{"class":516},[167,62316,537],{"class":512},[167,62318,62319,62321,62323],{"class":169,"line":35764},[167,62320,575],{"class":512},[167,62322,517],{"class":516},[167,62324,537],{"class":512},[167,62326,62327],{"class":169,"line":35773},[167,62328,741],{"emptyLinePlaceholder":740},[167,62330,62331,62333,62335],{"class":169,"line":35783},[167,62332,575],{"class":512},[167,62334,52635],{"class":516},[167,62336,537],{"class":512},[24024,62338,62340],{"id":62339},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62342,62343],{},"小米搜索框案例：",[26,62345,62347],{"className":52633,"code":62346,"language":52635,"meta":32,"style":32},"\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",[34,62348,62349,62359,62373,62377,62385,62399,62419,62439,62451,62459,62465,62475,62485,62497,62501,62505,62512,62516,62527,62531,62535,62542,62553,62566,62580,62584,62588,62597,62609,62621,62635,62648,62661,62679,62690,62694,62698,62707,62724,62728,62732,62739,62749,62759,62770,62783,62795,62811,62822,62834,62838,62842,62850,62861,62878,62890,62902,62913,62917,62921,62932,62943,62947,62955,62959,62967,62971,62979,62994,63017,63032,63063,63090,63117,63144,63171,63198,63225,63234,63242,63250,63255,63275,63295,63300,63305,63323,63328,63338,63343,63357,63362,63367,63384,63393,63405,63409,63417,63425,63429],{"__ignoreMap":32},[167,62350,62351,62353,62355,62357],{"class":169,"line":170},[167,62352,53297],{"class":512},[167,62354,53300],{"class":516},[167,62356,53303],{"class":173},[167,62358,537],{"class":512},[167,62360,62361,62363,62365,62367,62369,62371],{"class":169,"line":191},[167,62362,513],{"class":512},[167,62364,52635],{"class":516},[167,62366,53314],{"class":173},[167,62368,523],{"class":512},[167,62370,53319],{"class":177},[167,62372,537],{"class":512},[167,62374,62375],{"class":169,"line":205},[167,62376,741],{"emptyLinePlaceholder":740},[167,62378,62379,62381,62383],{"class":169,"line":219},[167,62380,513],{"class":512},[167,62382,53332],{"class":516},[167,62384,537],{"class":512},[167,62386,62387,62389,62391,62393,62395,62397],{"class":169,"line":230},[167,62388,53339],{"class":512},[167,62390,53342],{"class":516},[167,62392,53345],{"class":173},[167,62394,523],{"class":512},[167,62396,53350],{"class":177},[167,62398,537],{"class":512},[167,62400,62401,62403,62405,62407,62409,62411,62413,62415,62417],{"class":169,"line":241},[167,62402,53339],{"class":512},[167,62404,53342],{"class":516},[167,62406,53361],{"class":173},[167,62408,523],{"class":512},[167,62410,53366],{"class":177},[167,62412,53369],{"class":173},[167,62414,523],{"class":512},[167,62416,53374],{"class":177},[167,62418,537],{"class":512},[167,62420,62421,62423,62425,62427,62429,62431,62433,62435,62437],{"class":169,"line":261},[167,62422,53339],{"class":512},[167,62424,53342],{"class":516},[167,62426,520],{"class":173},[167,62428,523],{"class":512},[167,62430,53389],{"class":177},[167,62432,53369],{"class":173},[167,62434,523],{"class":512},[167,62436,53396],{"class":177},[167,62438,537],{"class":512},[167,62440,62441,62443,62445,62447,62449],{"class":169,"line":773},[167,62442,53339],{"class":512},[167,62444,53405],{"class":516},[167,62446,53408],{"class":512},[167,62448,53405],{"class":516},[167,62450,537],{"class":512},[167,62452,62453,62455,62457],{"class":169,"line":779},[167,62454,53339],{"class":512},[167,62456,2113],{"class":516},[167,62458,537],{"class":512},[167,62460,62461,62463],{"class":169,"line":785},[167,62462,53425],{"class":516},[167,62464,17598],{"class":512},[167,62466,62467,62469,62471,62473],{"class":169,"line":790},[167,62468,53432],{"class":184},[167,62470,53435],{"class":512},[167,62472,1154],{"class":184},[167,62474,3359],{"class":512},[167,62476,62477,62479,62481,62483],{"class":169,"line":796},[167,62478,53444],{"class":184},[167,62480,53435],{"class":512},[167,62482,1154],{"class":184},[167,62484,3359],{"class":512},[167,62486,62487,62490,62492,62495],{"class":169,"line":802},[167,62488,62489],{"class":184},"            box-sizing",[167,62491,53435],{"class":512},[167,62493,62494],{"class":184},"border-box",[167,62496,3359],{"class":512},[167,62498,62499],{"class":169,"line":808},[167,62500,4572],{"class":512},[167,62502,62503],{"class":169,"line":814},[167,62504,741],{"emptyLinePlaceholder":740},[167,62506,62507,62510],{"class":169,"line":820},[167,62508,62509],{"class":516},"        ul",[167,62511,17598],{"class":512},[167,62513,62514],{"class":169,"line":826},[167,62515,741],{"emptyLinePlaceholder":740},[167,62517,62518,62521,62523,62525],{"class":169,"line":832},[167,62519,62520],{"class":184},"            list-style",[167,62522,53435],{"class":512},[167,62524,56727],{"class":184},[167,62526,3359],{"class":512},[167,62528,62529],{"class":169,"line":837},[167,62530,4572],{"class":512},[167,62532,62533],{"class":169,"line":842},[167,62534,741],{"emptyLinePlaceholder":740},[167,62536,62537,62540],{"class":169,"line":860},[167,62538,62539],{"class":173},"        .mi",[167,62541,17598],{"class":512},[167,62543,62544,62547,62549,62551],{"class":169,"line":876},[167,62545,62546],{"class":184},"            position",[167,62548,53435],{"class":512},[167,62550,56754],{"class":184},[167,62552,3359],{"class":512},[167,62554,62555,62557,62559,62562,62564],{"class":169,"line":887},[167,62556,53482],{"class":184},[167,62558,53435],{"class":512},[167,62560,62561],{"class":184},"223",[167,62563,53490],{"class":731},[167,62565,3359],{"class":512},[167,62567,62568,62570,62572,62574,62576,62578],{"class":169,"line":892},[167,62569,53432],{"class":184},[167,62571,53435],{"class":512},[167,62573,981],{"class":184},[167,62575,53490],{"class":731},[167,62577,53554],{"class":184},[167,62579,3359],{"class":512},[167,62581,62582],{"class":169,"line":907},[167,62583,4572],{"class":512},[167,62585,62586],{"class":169,"line":920},[167,62587,741],{"emptyLinePlaceholder":740},[167,62589,62590,62592,62595],{"class":169,"line":933},[167,62591,62539],{"class":173},[167,62593,62594],{"class":516}," input",[167,62596,17598],{"class":512},[167,62598,62599,62601,62603,62605,62607],{"class":169,"line":946},[167,62600,53482],{"class":184},[167,62602,53435],{"class":512},[167,62604,62561],{"class":184},[167,62606,53490],{"class":731},[167,62608,3359],{"class":512},[167,62610,62611,62613,62615,62617,62619],{"class":169,"line":959},[167,62612,53497],{"class":184},[167,62614,53435],{"class":512},[167,62616,2807],{"class":184},[167,62618,53490],{"class":731},[167,62620,3359],{"class":512},[167,62622,62623,62625,62627,62629,62631,62633],{"class":169,"line":964},[167,62624,53444],{"class":184},[167,62626,53435],{"class":512},[167,62628,1154],{"class":184},[167,62630,4082],{"class":184},[167,62632,53490],{"class":731},[167,62634,3359],{"class":512},[167,62636,62637,62640,62642,62644,62646],{"class":169,"line":987},[167,62638,62639],{"class":184},"            font-size",[167,62641,53435],{"class":512},[167,62643,2749],{"class":184},[167,62645,53490],{"class":731},[167,62647,3359],{"class":512},[167,62649,62650,62653,62655,62657,62659],{"class":169,"line":993},[167,62651,62652],{"class":184},"            line-height",[167,62654,53435],{"class":512},[167,62656,2807],{"class":184},[167,62658,53490],{"class":731},[167,62660,3359],{"class":512},[167,62662,62663,62666,62668,62670,62672,62674,62677],{"class":169,"line":998},[167,62664,62665],{"class":184},"            border",[167,62667,53435],{"class":512},[167,62669,2418],{"class":184},[167,62671,53490],{"class":731},[167,62673,53519],{"class":184},[167,62675,62676],{"class":184}," #e0e0e0",[167,62678,3359],{"class":512},[167,62680,62681,62684,62686,62688],{"class":169,"line":1010},[167,62682,62683],{"class":184},"            outline",[167,62685,53435],{"class":512},[167,62687,56727],{"class":184},[167,62689,3359],{"class":512},[167,62691,62692],{"class":169,"line":1022},[167,62693,4572],{"class":512},[167,62695,62696],{"class":169,"line":1027},[167,62697,741],{"emptyLinePlaceholder":740},[167,62699,62700,62702,62705],{"class":169,"line":1032},[167,62701,62539],{"class":173},[167,62703,62704],{"class":173}," .search",[167,62706,17598],{"class":512},[167,62708,62709,62711,62713,62715,62717,62719,62722],{"class":169,"line":1049},[167,62710,62665],{"class":184},[167,62712,53435],{"class":512},[167,62714,2418],{"class":184},[167,62716,53490],{"class":731},[167,62718,53519],{"class":184},[167,62720,62721],{"class":184}," #ff6700",[167,62723,3359],{"class":512},[167,62725,62726],{"class":169,"line":10005},[167,62727,4572],{"class":512},[167,62729,62730],{"class":169,"line":10011},[167,62731,741],{"emptyLinePlaceholder":740},[167,62733,62734,62737],{"class":169,"line":10038},[167,62735,62736],{"class":173},"        .result-list",[167,62738,17598],{"class":512},[167,62740,62741,62743,62745,62747],{"class":169,"line":10043},[167,62742,53470],{"class":184},[167,62744,53435],{"class":512},[167,62746,56727],{"class":184},[167,62748,3359],{"class":512},[167,62750,62751,62753,62755,62757],{"class":169,"line":10049},[167,62752,62546],{"class":184},[167,62754,53435],{"class":512},[167,62756,56821],{"class":184},[167,62758,3359],{"class":512},[167,62760,62761,62764,62766,62768],{"class":169,"line":10061},[167,62762,62763],{"class":184},"            left",[167,62765,53435],{"class":512},[167,62767,1154],{"class":184},[167,62769,3359],{"class":512},[167,62771,62772,62775,62777,62779,62781],{"class":169,"line":10073},[167,62773,62774],{"class":184},"            top",[167,62776,53435],{"class":512},[167,62778,2807],{"class":184},[167,62780,53490],{"class":731},[167,62782,3359],{"class":512},[167,62784,62785,62787,62789,62791,62793],{"class":169,"line":10085},[167,62786,53482],{"class":184},[167,62788,53435],{"class":512},[167,62790,62561],{"class":184},[167,62792,53490],{"class":731},[167,62794,3359],{"class":512},[167,62796,62797,62799,62801,62803,62805,62807,62809],{"class":169,"line":11744},[167,62798,62665],{"class":184},[167,62800,53435],{"class":512},[167,62802,2418],{"class":184},[167,62804,53490],{"class":731},[167,62806,53519],{"class":184},[167,62808,62721],{"class":184},[167,62810,3359],{"class":512},[167,62812,62813,62816,62818,62820],{"class":169,"line":11769},[167,62814,62815],{"class":184},"            border-top",[167,62817,53435],{"class":512},[167,62819,1154],{"class":184},[167,62821,3359],{"class":512},[167,62823,62824,62827,62829,62832],{"class":169,"line":11792},[167,62825,62826],{"class":184},"            background",[167,62828,53435],{"class":512},[167,62830,62831],{"class":184},"#fff",[167,62833,3359],{"class":512},[167,62835,62836],{"class":169,"line":11816},[167,62837,4572],{"class":512},[167,62839,62840],{"class":169,"line":11821},[167,62841,741],{"emptyLinePlaceholder":740},[167,62843,62844,62846,62848],{"class":169,"line":11826},[167,62845,62736],{"class":173},[167,62847,3464],{"class":516},[167,62849,17598],{"class":512},[167,62851,62852,62854,62856,62859],{"class":169,"line":11831},[167,62853,53470],{"class":184},[167,62855,53435],{"class":512},[167,62857,62858],{"class":184},"block",[167,62860,3359],{"class":512},[167,62862,62863,62865,62867,62869,62871,62874,62876],{"class":169,"line":11840},[167,62864,53444],{"class":184},[167,62866,53435],{"class":512},[167,62868,2544],{"class":184},[167,62870,53490],{"class":731},[167,62872,62873],{"class":184}," 15",[167,62875,53490],{"class":731},[167,62877,3359],{"class":512},[167,62879,62880,62882,62884,62886,62888],{"class":169,"line":11845},[167,62881,62639],{"class":184},[167,62883,53435],{"class":512},[167,62885,2698],{"class":184},[167,62887,53490],{"class":731},[167,62889,3359],{"class":512},[167,62891,62892,62895,62897,62900],{"class":169,"line":11851},[167,62893,62894],{"class":184},"            color",[167,62896,53435],{"class":512},[167,62898,62899],{"class":184},"#424242",[167,62901,3359],{"class":512},[167,62903,62904,62907,62909,62911],{"class":169,"line":11872},[167,62905,62906],{"class":184},"            text-decoration",[167,62908,53435],{"class":512},[167,62910,56727],{"class":184},[167,62912,3359],{"class":512},[167,62914,62915],{"class":169,"line":11878},[167,62916,4572],{"class":512},[167,62918,62919],{"class":169,"line":11892},[167,62920,741],{"emptyLinePlaceholder":740},[167,62922,62923,62925,62927,62930],{"class":169,"line":11898},[167,62924,62736],{"class":173},[167,62926,3464],{"class":516},[167,62928,62929],{"class":173},":hover",[167,62931,17598],{"class":512},[167,62933,62934,62936,62938,62941],{"class":169,"line":11925},[167,62935,53638],{"class":184},[167,62937,53435],{"class":512},[167,62939,62940],{"class":184},"#eee",[167,62942,3359],{"class":512},[167,62944,62945],{"class":169,"line":11934},[167,62946,4572],{"class":512},[167,62948,62949,62951,62953],{"class":169,"line":11940},[167,62950,53774],{"class":512},[167,62952,2113],{"class":516},[167,62954,537],{"class":512},[167,62956,62957],{"class":169,"line":11948},[167,62958,741],{"emptyLinePlaceholder":740},[167,62960,62961,62963,62965],{"class":169,"line":11953},[167,62962,575],{"class":512},[167,62964,53332],{"class":516},[167,62966,537],{"class":512},[167,62968,62969],{"class":169,"line":18630},[167,62970,741],{"emptyLinePlaceholder":740},[167,62972,62973,62975,62977],{"class":169,"line":18636},[167,62974,513],{"class":512},[167,62976,517],{"class":516},[167,62978,537],{"class":512},[167,62980,62981,62983,62985,62987,62989,62992],{"class":169,"line":18659},[167,62982,53339],{"class":512},[167,62984,53609],{"class":516},[167,62986,55479],{"class":173},[167,62988,523],{"class":512},[167,62990,62991],{"class":177},"\"mi\"",[167,62993,537],{"class":512},[167,62995,62996,62998,63000,63002,63004,63007,63010,63012,63015],{"class":169,"line":18665},[167,62997,57291],{"class":512},[167,62999,55812],{"class":516},[167,63001,555],{"class":173},[167,63003,523],{"class":512},[167,63005,63006],{"class":177},"\"search\"",[167,63008,63009],{"class":173}," placeholder",[167,63011,523],{"class":512},[167,63013,63014],{"class":177},"\"小米笔记本\"",[167,63016,537],{"class":512},[167,63018,63019,63021,63023,63025,63027,63030],{"class":169,"line":18688},[167,63020,57291],{"class":512},[167,63022,3205],{"class":516},[167,63024,55479],{"class":173},[167,63026,523],{"class":512},[167,63028,63029],{"class":177},"\"result-list\"",[167,63031,537],{"class":512},[167,63033,63034,63037,63039,63042,63044,63047,63049,63052,63055,63057,63059,63061],{"class":169,"line":18702},[167,63035,63036],{"class":512},"            \u003C",[167,63038,43],{"class":516},[167,63040,63041],{"class":512},">\u003C",[167,63043,2439],{"class":516},[167,63045,63046],{"class":173}," href",[167,63048,523],{"class":512},[167,63050,63051],{"class":177},"\"#\"",[167,63053,63054],{"class":512},">全部商品\u003C\u002F",[167,63056,2439],{"class":516},[167,63058,57303],{"class":512},[167,63060,43],{"class":516},[167,63062,537],{"class":512},[167,63064,63065,63067,63069,63071,63073,63075,63077,63079,63082,63084,63086,63088],{"class":169,"line":18722},[167,63066,63036],{"class":512},[167,63068,43],{"class":516},[167,63070,63041],{"class":512},[167,63072,2439],{"class":516},[167,63074,63046],{"class":173},[167,63076,523],{"class":512},[167,63078,63051],{"class":177},[167,63080,63081],{"class":512},">小米11\u003C\u002F",[167,63083,2439],{"class":516},[167,63085,57303],{"class":512},[167,63087,43],{"class":516},[167,63089,537],{"class":512},[167,63091,63092,63094,63096,63098,63100,63102,63104,63106,63109,63111,63113,63115],{"class":169,"line":18728},[167,63093,63036],{"class":512},[167,63095,43],{"class":516},[167,63097,63041],{"class":512},[167,63099,2439],{"class":516},[167,63101,63046],{"class":173},[167,63103,523],{"class":512},[167,63105,63051],{"class":177},[167,63107,63108],{"class":512},">小米10S\u003C\u002F",[167,63110,2439],{"class":516},[167,63112,57303],{"class":512},[167,63114,43],{"class":516},[167,63116,537],{"class":512},[167,63118,63119,63121,63123,63125,63127,63129,63131,63133,63136,63138,63140,63142],{"class":169,"line":18739},[167,63120,63036],{"class":512},[167,63122,43],{"class":516},[167,63124,63041],{"class":512},[167,63126,2439],{"class":516},[167,63128,63046],{"class":173},[167,63130,523],{"class":512},[167,63132,63051],{"class":177},[167,63134,63135],{"class":512},">小米笔记本\u003C\u002F",[167,63137,2439],{"class":516},[167,63139,57303],{"class":512},[167,63141,43],{"class":516},[167,63143,537],{"class":512},[167,63145,63146,63148,63150,63152,63154,63156,63158,63160,63163,63165,63167,63169],{"class":169,"line":18762},[167,63147,63036],{"class":512},[167,63149,43],{"class":516},[167,63151,63041],{"class":512},[167,63153,2439],{"class":516},[167,63155,63046],{"class":173},[167,63157,523],{"class":512},[167,63159,63051],{"class":177},[167,63161,63162],{"class":512},">小米手机\u003C\u002F",[167,63164,2439],{"class":516},[167,63166,57303],{"class":512},[167,63168,43],{"class":516},[167,63170,537],{"class":512},[167,63172,63173,63175,63177,63179,63181,63183,63185,63187,63190,63192,63194,63196],{"class":169,"line":18784},[167,63174,63036],{"class":512},[167,63176,43],{"class":516},[167,63178,63041],{"class":512},[167,63180,2439],{"class":516},[167,63182,63046],{"class":173},[167,63184,523],{"class":512},[167,63186,63051],{"class":177},[167,63188,63189],{"class":512},">黑鲨4\u003C\u002F",[167,63191,2439],{"class":516},[167,63193,57303],{"class":512},[167,63195,43],{"class":516},[167,63197,537],{"class":512},[167,63199,63200,63202,63204,63206,63208,63210,63212,63214,63217,63219,63221,63223],{"class":169,"line":18789},[167,63201,63036],{"class":512},[167,63203,43],{"class":516},[167,63205,63041],{"class":512},[167,63207,2439],{"class":516},[167,63209,63046],{"class":173},[167,63211,523],{"class":512},[167,63213,63051],{"class":177},[167,63215,63216],{"class":512},">空调\u003C\u002F",[167,63218,2439],{"class":516},[167,63220,57303],{"class":512},[167,63222,43],{"class":516},[167,63224,537],{"class":512},[167,63226,63227,63230,63232],{"class":169,"line":18795},[167,63228,63229],{"class":512},"        \u003C\u002F",[167,63231,3205],{"class":516},[167,63233,537],{"class":512},[167,63235,63236,63238,63240],{"class":169,"line":18809},[167,63237,53774],{"class":512},[167,63239,53609],{"class":516},[167,63241,537],{"class":512},[167,63243,63244,63246,63248],{"class":169,"line":18822},[167,63245,53339],{"class":512},[167,63247,53809],{"class":516},[167,63249,537],{"class":512},[167,63251,63252],{"class":169,"line":18827},[167,63253,63254],{"class":2268},"        \u002F\u002F 1. 获取元素\n",[167,63256,63257,63260,63262,63264,63266,63268,63270,63273],{"class":169,"line":18841},[167,63258,63259],{"class":731},"        const",[167,63261,62594],{"class":184},[167,63263,753],{"class":731},[167,63265,56386],{"class":512},[167,63267,56389],{"class":173},[167,63269,898],{"class":512},[167,63271,63272],{"class":177},"'[type=search]'",[167,63274,873],{"class":512},[167,63276,63277,63279,63282,63284,63286,63288,63290,63293],{"class":169,"line":18846},[167,63278,63259],{"class":731},[167,63280,63281],{"class":184}," ul",[167,63283,753],{"class":731},[167,63285,56386],{"class":512},[167,63287,56389],{"class":173},[167,63289,898],{"class":512},[167,63291,63292],{"class":177},"'.result-list'",[167,63294,873],{"class":512},[167,63296,63297],{"class":169,"line":18852},[167,63298,63299],{"class":2268},"        \u002F\u002F console.log(input)\n",[167,63301,63302],{"class":169,"line":18857},[167,63303,63304],{"class":2268},"        \u002F\u002F 2. 监听事件 获得焦点\n",[167,63306,63307,63310,63312,63314,63317,63319,63321],{"class":169,"line":18871},[167,63308,63309],{"class":512},"        input.",[167,63311,59802],{"class":173},[167,63313,898],{"class":512},[167,63315,63316],{"class":177},"'focus'",[167,63318,14463],{"class":512},[167,63320,56439],{"class":731},[167,63322,56442],{"class":512},[167,63324,63325],{"class":169,"line":18876},[167,63326,63327],{"class":2268},"            \u002F\u002F ul显示\n",[167,63329,63330,63333,63335],{"class":169,"line":18881},[167,63331,63332],{"class":512},"            ul.style.display ",[167,63334,523],{"class":731},[167,63336,63337],{"class":177}," 'block'\n",[167,63339,63340],{"class":169,"line":18895},[167,63341,63342],{"class":2268},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[167,63344,63345,63348,63350,63352,63355],{"class":169,"line":18907},[167,63346,63347],{"class":512},"            input.classList.",[167,63349,7364],{"class":173},[167,63351,898],{"class":512},[167,63353,63354],{"class":177},"'search'",[167,63356,873],{"class":512},[167,63358,63359],{"class":169,"line":18912},[167,63360,63361],{"class":512},"        })\n",[167,63363,63364],{"class":169,"line":18925},[167,63365,63366],{"class":2268},"        \u002F\u002F 3. 监听事件 失去焦点\n",[167,63368,63369,63371,63373,63375,63378,63380,63382],{"class":169,"line":18930},[167,63370,63309],{"class":512},[167,63372,59802],{"class":173},[167,63374,898],{"class":512},[167,63376,63377],{"class":177},"'blur'",[167,63379,14463],{"class":512},[167,63381,56439],{"class":731},[167,63383,56442],{"class":512},[167,63385,63386,63388,63390],{"class":169,"line":18935},[167,63387,63332],{"class":512},[167,63389,523],{"class":731},[167,63391,63392],{"class":177}," 'none'\n",[167,63394,63395,63397,63399,63401,63403],{"class":169,"line":18940},[167,63396,63347],{"class":512},[167,63398,58995],{"class":173},[167,63400,898],{"class":512},[167,63402,63354],{"class":177},[167,63404,873],{"class":512},[167,63406,63407],{"class":169,"line":18953},[167,63408,63361],{"class":512},[167,63410,63411,63413,63415],{"class":169,"line":18958},[167,63412,53774],{"class":512},[167,63414,53809],{"class":516},[167,63416,537],{"class":512},[167,63418,63419,63421,63423],{"class":169,"line":34636},[167,63420,575],{"class":512},[167,63422,517],{"class":516},[167,63424,537],{"class":512},[167,63426,63427],{"class":169,"line":34642},[167,63428,741],{"emptyLinePlaceholder":740},[167,63430,63431,63433,63435],{"class":169,"line":34648},[167,63432,575],{"class":512},[167,63434,52635],{"class":516},[167,63436,537],{"class":512},[24024,63438,63440],{"id":63439},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63442,63443],{},"评论字数统计案例",[19,63445,63446],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63448,63449],{},"牢记focus伪类选择器",[53342,63451],{"charSet":63452},"UTF-8",[53342,63454],{"name":63455,"content":63456},"viewport","width=device-width, initial-scale=1.0",[53405,63458,63459],{},"Document",[2113,63461,63462],{},"\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",[55812,63464],{"type":31},[3205,63466,63467,63470],{},[43,63468,63469],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[43,63471,63472],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,63474,63476],{"className":52633,"code":63475,"language":52635,"meta":32,"style":32},"\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",[34,63477,63478,63488,63502,63506,63514,63528,63548,63568,63581,63589,63596,63609,63623,63633,63643,63647,63651,63658,63670,63682,63694,63706,63735,63748,63752,63756,63765,63776,63788,63799,63810,63822,63833,63845,63861,63873,63877,63881,63892,63903,63913,63925,63929,63933,63941,63952,63962,63973,63985,63998,64010,64022,64026,64030,64039,64051,64062,64075,64086,64100,64104,64108,64115,64127,64139,64149,64153,64157,64166,64178,64188,64192,64196,64207,64217,64236,64249,64253,64257,64267,64277,64281,64285,64296,64307,64319,64331,64335,64339,64350,64361,64375,64379,64383,64394,64404,64416,64420,64428,64436,64440,64448,64463,64482,64522,64535,64543,64557,64577,64585,64600,64623,64641,64656,64676,64696,64716,64724,64732,64740,64748,64768,64788,64793,64810,64819,64823,64828,64844,64852,64856,64861,64878,64883,64908,64912,64916,64921,64926,64934,64942,64946],{"__ignoreMap":32},[167,63479,63480,63482,63484,63486],{"class":169,"line":170},[167,63481,53297],{"class":512},[167,63483,53300],{"class":516},[167,63485,53303],{"class":173},[167,63487,537],{"class":512},[167,63489,63490,63492,63494,63496,63498,63500],{"class":169,"line":191},[167,63491,513],{"class":512},[167,63493,52635],{"class":516},[167,63495,53314],{"class":173},[167,63497,523],{"class":512},[167,63499,53319],{"class":177},[167,63501,537],{"class":512},[167,63503,63504],{"class":169,"line":205},[167,63505,741],{"emptyLinePlaceholder":740},[167,63507,63508,63510,63512],{"class":169,"line":219},[167,63509,513],{"class":512},[167,63511,53332],{"class":516},[167,63513,537],{"class":512},[167,63515,63516,63518,63520,63522,63524,63526],{"class":169,"line":230},[167,63517,542],{"class":512},[167,63519,53342],{"class":516},[167,63521,53345],{"class":173},[167,63523,523],{"class":512},[167,63525,53350],{"class":177},[167,63527,537],{"class":512},[167,63529,63530,63532,63534,63536,63538,63540,63542,63544,63546],{"class":169,"line":241},[167,63531,542],{"class":512},[167,63533,53342],{"class":516},[167,63535,53361],{"class":173},[167,63537,523],{"class":512},[167,63539,53366],{"class":177},[167,63541,53369],{"class":173},[167,63543,523],{"class":512},[167,63545,53374],{"class":177},[167,63547,537],{"class":512},[167,63549,63550,63552,63554,63556,63558,63560,63562,63564,63566],{"class":169,"line":261},[167,63551,542],{"class":512},[167,63553,53342],{"class":516},[167,63555,520],{"class":173},[167,63557,523],{"class":512},[167,63559,53389],{"class":177},[167,63561,53369],{"class":173},[167,63563,523],{"class":512},[167,63565,53396],{"class":177},[167,63567,537],{"class":512},[167,63569,63570,63572,63574,63577,63579],{"class":169,"line":773},[167,63571,542],{"class":512},[167,63573,53405],{"class":516},[167,63575,63576],{"class":512},">评论回车发布\u003C\u002F",[167,63578,53405],{"class":516},[167,63580,537],{"class":512},[167,63582,63583,63585,63587],{"class":169,"line":779},[167,63584,542],{"class":512},[167,63586,2113],{"class":516},[167,63588,537],{"class":512},[167,63590,63591,63594],{"class":169,"line":785},[167,63592,63593],{"class":173},"    .wrapper",[167,63595,17598],{"class":512},[167,63597,63598,63601,63603,63605,63607],{"class":169,"line":790},[167,63599,63600],{"class":184},"      min-width",[167,63602,53435],{"class":512},[167,63604,6019],{"class":184},[167,63606,53490],{"class":731},[167,63608,3359],{"class":512},[167,63610,63611,63614,63616,63619,63621],{"class":169,"line":796},[167,63612,63613],{"class":184},"      max-width",[167,63615,53435],{"class":512},[167,63617,63618],{"class":184},"800",[167,63620,53490],{"class":731},[167,63622,3359],{"class":512},[167,63624,63625,63627,63629,63631],{"class":169,"line":802},[167,63626,56999],{"class":184},[167,63628,53435],{"class":512},[167,63630,53475],{"class":184},[167,63632,3359],{"class":512},[167,63634,63635,63637,63639,63641],{"class":169,"line":808},[167,63636,57010],{"class":184},[167,63638,53435],{"class":512},[167,63640,53578],{"class":184},[167,63642,3359],{"class":512},[167,63644,63645],{"class":169,"line":814},[167,63646,4231],{"class":512},[167,63648,63649],{"class":169,"line":820},[167,63650,741],{"emptyLinePlaceholder":740},[167,63652,63653,63656],{"class":169,"line":826},[167,63654,63655],{"class":173},"    .avatar",[167,63657,17598],{"class":512},[167,63659,63660,63662,63664,63666,63668],{"class":169,"line":832},[167,63661,56761],{"class":184},[167,63663,53435],{"class":512},[167,63665,2807],{"class":184},[167,63667,53490],{"class":731},[167,63669,3359],{"class":512},[167,63671,63672,63674,63676,63678,63680],{"class":169,"line":837},[167,63673,56775],{"class":184},[167,63675,53435],{"class":512},[167,63677,2807],{"class":184},[167,63679,53490],{"class":731},[167,63681,3359],{"class":512},[167,63683,63684,63686,63688,63690,63692],{"class":169,"line":842},[167,63685,57123],{"class":184},[167,63687,53435],{"class":512},[167,63689,2856],{"class":184},[167,63691,2528],{"class":731},[167,63693,3359],{"class":512},[167,63695,63696,63699,63701,63704],{"class":169,"line":860},[167,63697,63698],{"class":184},"      overflow",[167,63700,53435],{"class":512},[167,63702,63703],{"class":184},"hidden",[167,63705,3359],{"class":512},[167,63707,63708,63711,63713,63716,63718,63721,63723,63726,63728,63730,63733],{"class":169,"line":876},[167,63709,63710],{"class":184},"      background",[167,63712,53435],{"class":512},[167,63714,63715],{"class":184},"url",[167,63717,898],{"class":512},[167,63719,63720],{"class":7246},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[167,63722,15741],{"class":512},[167,63724,63725],{"class":184},"no-repeat",[167,63727,19170],{"class":184},[167,63729,26999],{"class":512},[167,63731,63732],{"class":184},"cover",[167,63734,3359],{"class":512},[167,63736,63737,63740,63742,63744,63746],{"class":169,"line":887},[167,63738,63739],{"class":184},"      margin-right",[167,63741,53435],{"class":512},[167,63743,2900],{"class":184},[167,63745,53490],{"class":731},[167,63747,3359],{"class":512},[167,63749,63750],{"class":169,"line":892},[167,63751,4231],{"class":512},[167,63753,63754],{"class":169,"line":907},[167,63755,741],{"emptyLinePlaceholder":740},[167,63757,63758,63760,63763],{"class":169,"line":920},[167,63759,63593],{"class":173},[167,63761,63762],{"class":516}," textarea",[167,63764,17598],{"class":512},[167,63766,63767,63770,63772,63774],{"class":169,"line":933},[167,63768,63769],{"class":184},"      outline",[167,63771,53435],{"class":512},[167,63773,56727],{"class":184},[167,63775,3359],{"class":512},[167,63777,63778,63781,63783,63786],{"class":169,"line":946},[167,63779,63780],{"class":184},"      border-color",[167,63782,53435],{"class":512},[167,63784,63785],{"class":184},"transparent",[167,63787,3359],{"class":512},[167,63789,63790,63793,63795,63797],{"class":169,"line":959},[167,63791,63792],{"class":184},"      resize",[167,63794,53435],{"class":512},[167,63796,56727],{"class":184},[167,63798,3359],{"class":512},[167,63800,63801,63803,63805,63808],{"class":169,"line":964},[167,63802,63710],{"class":184},[167,63804,53435],{"class":512},[167,63806,63807],{"class":184},"#f5f5f5",[167,63809,3359],{"class":512},[167,63811,63812,63814,63816,63818,63820],{"class":169,"line":987},[167,63813,57123],{"class":184},[167,63815,53435],{"class":512},[167,63817,2494],{"class":184},[167,63819,53490],{"class":731},[167,63821,3359],{"class":512},[167,63823,63824,63827,63829,63831],{"class":169,"line":993},[167,63825,63826],{"class":184},"      flex",[167,63828,53435],{"class":512},[167,63830,2418],{"class":184},[167,63832,3359],{"class":512},[167,63834,63835,63837,63839,63841,63843],{"class":169,"line":998},[167,63836,56685],{"class":184},[167,63838,53435],{"class":512},[167,63840,2646],{"class":184},[167,63842,53490],{"class":731},[167,63844,3359],{"class":512},[167,63846,63847,63850,63852,63854,63857,63859],{"class":169,"line":1010},[167,63848,63849],{"class":184},"      transition",[167,63851,53435],{"class":512},[167,63853,30138],{"class":184},[167,63855,63856],{"class":184}," 0.5",[167,63858,2895],{"class":731},[167,63860,3359],{"class":512},[167,63862,63863,63865,63867,63869,63871],{"class":169,"line":1022},[167,63864,56775],{"class":184},[167,63866,53435],{"class":512},[167,63868,3150],{"class":184},[167,63870,53490],{"class":731},[167,63872,3359],{"class":512},[167,63874,63875],{"class":169,"line":1027},[167,63876,4231],{"class":512},[167,63878,63879],{"class":169,"line":1032},[167,63880,741],{"emptyLinePlaceholder":740},[167,63882,63883,63885,63887,63890],{"class":169,"line":1049},[167,63884,63593],{"class":173},[167,63886,63762],{"class":516},[167,63888,63889],{"class":173},":focus",[167,63891,17598],{"class":512},[167,63893,63894,63896,63898,63901],{"class":169,"line":10005},[167,63895,63780],{"class":184},[167,63897,53435],{"class":512},[167,63899,63900],{"class":184},"#e4e4e4",[167,63902,3359],{"class":512},[167,63904,63905,63907,63909,63911],{"class":169,"line":10011},[167,63906,63710],{"class":184},[167,63908,53435],{"class":512},[167,63910,62831],{"class":184},[167,63912,3359],{"class":512},[167,63914,63915,63917,63919,63921,63923],{"class":169,"line":10038},[167,63916,56775],{"class":184},[167,63918,53435],{"class":512},[167,63920,2856],{"class":184},[167,63922,53490],{"class":731},[167,63924,3359],{"class":512},[167,63926,63927],{"class":169,"line":10043},[167,63928,4231],{"class":512},[167,63930,63931],{"class":169,"line":10049},[167,63932,741],{"emptyLinePlaceholder":740},[167,63934,63935,63937,63939],{"class":169,"line":10061},[167,63936,63593],{"class":173},[167,63938,59456],{"class":516},[167,63940,17598],{"class":512},[167,63942,63943,63945,63947,63950],{"class":169,"line":10073},[167,63944,63710],{"class":184},[167,63946,53435],{"class":512},[167,63948,63949],{"class":184},"#00aeec",[167,63951,3359],{"class":512},[167,63953,63954,63956,63958,63960],{"class":169,"line":10085},[167,63955,59405],{"class":184},[167,63957,53435],{"class":512},[167,63959,62831],{"class":184},[167,63961,3359],{"class":512},[167,63963,63964,63967,63969,63971],{"class":169,"line":11744},[167,63965,63966],{"class":184},"      border",[167,63968,53435],{"class":512},[167,63970,56727],{"class":184},[167,63972,3359],{"class":512},[167,63974,63975,63977,63979,63981,63983],{"class":169,"line":11769},[167,63976,57123],{"class":184},[167,63978,53435],{"class":512},[167,63980,2494],{"class":184},[167,63982,53490],{"class":731},[167,63984,3359],{"class":512},[167,63986,63987,63990,63992,63994,63996],{"class":169,"line":11792},[167,63988,63989],{"class":184},"      margin-left",[167,63991,53435],{"class":512},[167,63993,2646],{"class":184},[167,63995,53490],{"class":731},[167,63997,3359],{"class":512},[167,63999,64000,64002,64004,64006,64008],{"class":169,"line":11816},[167,64001,56761],{"class":184},[167,64003,53435],{"class":512},[167,64005,2556],{"class":184},[167,64007,53490],{"class":731},[167,64009,3359],{"class":512},[167,64011,64012,64015,64017,64020],{"class":169,"line":11821},[167,64013,64014],{"class":184},"      cursor",[167,64016,53435],{"class":512},[167,64018,64019],{"class":184},"pointer",[167,64021,3359],{"class":512},[167,64023,64024],{"class":169,"line":11826},[167,64025,4231],{"class":512},[167,64027,64028],{"class":169,"line":11831},[167,64029,741],{"emptyLinePlaceholder":740},[167,64031,64032,64034,64037],{"class":169,"line":11840},[167,64033,63593],{"class":173},[167,64035,64036],{"class":173}," .total",[167,64038,17598],{"class":512},[167,64040,64041,64043,64045,64047,64049],{"class":169,"line":11845},[167,64042,63739],{"class":184},[167,64044,53435],{"class":512},[167,64046,2812],{"class":184},[167,64048,53490],{"class":731},[167,64050,3359],{"class":512},[167,64052,64053,64055,64057,64060],{"class":169,"line":11851},[167,64054,59405],{"class":184},[167,64056,53435],{"class":512},[167,64058,64059],{"class":184},"#999",[167,64061,3359],{"class":512},[167,64063,64064,64067,64069,64071,64073],{"class":169,"line":11872},[167,64065,64066],{"class":184},"      margin-top",[167,64068,53435],{"class":512},[167,64070,2519],{"class":184},[167,64072,53490],{"class":731},[167,64074,3359],{"class":512},[167,64076,64077,64080,64082,64084],{"class":169,"line":11878},[167,64078,64079],{"class":184},"      opacity",[167,64081,53435],{"class":512},[167,64083,1154],{"class":184},[167,64085,3359],{"class":512},[167,64087,64088,64090,64092,64094,64096,64098],{"class":169,"line":11892},[167,64089,63849],{"class":184},[167,64091,53435],{"class":512},[167,64093,30138],{"class":184},[167,64095,63856],{"class":184},[167,64097,2895],{"class":731},[167,64099,3359],{"class":512},[167,64101,64102],{"class":169,"line":11898},[167,64103,4231],{"class":512},[167,64105,64106],{"class":169,"line":11925},[167,64107,741],{"emptyLinePlaceholder":740},[167,64109,64110,64113],{"class":169,"line":11934},[167,64111,64112],{"class":173},"    .list",[167,64114,17598],{"class":512},[167,64116,64117,64119,64121,64123,64125],{"class":169,"line":11940},[167,64118,63600],{"class":184},[167,64120,53435],{"class":512},[167,64122,6019],{"class":184},[167,64124,53490],{"class":731},[167,64126,3359],{"class":512},[167,64128,64129,64131,64133,64135,64137],{"class":169,"line":11948},[167,64130,63613],{"class":184},[167,64132,53435],{"class":512},[167,64134,63618],{"class":184},[167,64136,53490],{"class":731},[167,64138,3359],{"class":512},[167,64140,64141,64143,64145,64147],{"class":169,"line":11953},[167,64142,56999],{"class":184},[167,64144,53435],{"class":512},[167,64146,53475],{"class":184},[167,64148,3359],{"class":512},[167,64150,64151],{"class":169,"line":18630},[167,64152,4231],{"class":512},[167,64154,64155],{"class":169,"line":18636},[167,64156,741],{"emptyLinePlaceholder":740},[167,64158,64159,64161,64164],{"class":169,"line":18659},[167,64160,64112],{"class":173},[167,64162,64163],{"class":173}," .item",[167,64165,17598],{"class":512},[167,64167,64168,64170,64172,64174,64176],{"class":169,"line":18665},[167,64169,56761],{"class":184},[167,64171,53435],{"class":512},[167,64173,981],{"class":184},[167,64175,2528],{"class":731},[167,64177,3359],{"class":512},[167,64179,64180,64182,64184,64186],{"class":169,"line":18688},[167,64181,56999],{"class":184},[167,64183,53435],{"class":512},[167,64185,53475],{"class":184},[167,64187,3359],{"class":512},[167,64189,64190],{"class":169,"line":18702},[167,64191,4231],{"class":512},[167,64193,64194],{"class":169,"line":18722},[167,64195,741],{"emptyLinePlaceholder":740},[167,64197,64198,64200,64202,64205],{"class":169,"line":18728},[167,64199,64112],{"class":173},[167,64201,64163],{"class":173},[167,64203,64204],{"class":173}," .info",[167,64206,17598],{"class":512},[167,64208,64209,64211,64213,64215],{"class":169,"line":18739},[167,64210,63826],{"class":184},[167,64212,53435],{"class":512},[167,64214,2418],{"class":184},[167,64216,3359],{"class":512},[167,64218,64219,64222,64224,64226,64228,64231,64234],{"class":169,"line":18762},[167,64220,64221],{"class":184},"      border-bottom",[167,64223,53435],{"class":512},[167,64225,2418],{"class":184},[167,64227,53490],{"class":731},[167,64229,64230],{"class":184}," dashed",[167,64232,64233],{"class":184}," #e4e4e4",[167,64235,3359],{"class":512},[167,64237,64238,64241,64243,64245,64247],{"class":169,"line":18784},[167,64239,64240],{"class":184},"      padding-bottom",[167,64242,53435],{"class":512},[167,64244,2646],{"class":184},[167,64246,53490],{"class":731},[167,64248,3359],{"class":512},[167,64250,64251],{"class":169,"line":18789},[167,64252,4231],{"class":512},[167,64254,64255],{"class":169,"line":18795},[167,64256,741],{"emptyLinePlaceholder":740},[167,64258,64259,64261,64263,64265],{"class":169,"line":18809},[167,64260,64112],{"class":173},[167,64262,64163],{"class":173},[167,64264,8855],{"class":516},[167,64266,17598],{"class":512},[167,64268,64269,64271,64273,64275],{"class":169,"line":18822},[167,64270,56696],{"class":184},[167,64272,53435],{"class":512},[167,64274,1154],{"class":184},[167,64276,3359],{"class":512},[167,64278,64279],{"class":169,"line":18827},[167,64280,4231],{"class":512},[167,64282,64283],{"class":169,"line":18841},[167,64284,741],{"emptyLinePlaceholder":740},[167,64286,64287,64289,64291,64294],{"class":169,"line":18846},[167,64288,64112],{"class":173},[167,64290,64163],{"class":173},[167,64292,64293],{"class":173}," .name",[167,64295,17598],{"class":512},[167,64297,64298,64300,64302,64305],{"class":169,"line":18852},[167,64299,59405],{"class":184},[167,64301,53435],{"class":512},[167,64303,64304],{"class":184},"#FB7299",[167,64306,3359],{"class":512},[167,64308,64309,64311,64313,64315,64317],{"class":169,"line":18857},[167,64310,56912],{"class":184},[167,64312,53435],{"class":512},[167,64314,2749],{"class":184},[167,64316,53490],{"class":731},[167,64318,3359],{"class":512},[167,64320,64321,64324,64326,64329],{"class":169,"line":18871},[167,64322,64323],{"class":184},"      font-weight",[167,64325,53435],{"class":512},[167,64327,64328],{"class":184},"bold",[167,64330,3359],{"class":512},[167,64332,64333],{"class":169,"line":18876},[167,64334,4231],{"class":512},[167,64336,64337],{"class":169,"line":18881},[167,64338,741],{"emptyLinePlaceholder":740},[167,64340,64341,64343,64345,64348],{"class":169,"line":18895},[167,64342,64112],{"class":173},[167,64344,64163],{"class":173},[167,64346,64347],{"class":173}," .text",[167,64349,17598],{"class":512},[167,64351,64352,64354,64356,64359],{"class":169,"line":18907},[167,64353,59405],{"class":184},[167,64355,53435],{"class":512},[167,64357,64358],{"class":184},"#333",[167,64360,3359],{"class":512},[167,64362,64363,64365,64367,64369,64371,64373],{"class":169,"line":18912},[167,64364,56685],{"class":184},[167,64366,53435],{"class":512},[167,64368,2646],{"class":184},[167,64370,53490],{"class":731},[167,64372,6125],{"class":184},[167,64374,3359],{"class":512},[167,64376,64377],{"class":169,"line":18925},[167,64378,4231],{"class":512},[167,64380,64381],{"class":169,"line":18930},[167,64382,741],{"emptyLinePlaceholder":740},[167,64384,64385,64387,64389,64392],{"class":169,"line":18935},[167,64386,64112],{"class":173},[167,64388,64163],{"class":173},[167,64390,64391],{"class":173}," .time",[167,64393,17598],{"class":512},[167,64395,64396,64398,64400,64402],{"class":169,"line":18940},[167,64397,59405],{"class":184},[167,64399,53435],{"class":512},[167,64401,64059],{"class":184},[167,64403,3359],{"class":512},[167,64405,64406,64408,64410,64412,64414],{"class":169,"line":18953},[167,64407,56912],{"class":184},[167,64409,53435],{"class":512},[167,64411,2698],{"class":184},[167,64413,53490],{"class":731},[167,64415,3359],{"class":512},[167,64417,64418],{"class":169,"line":18958},[167,64419,4231],{"class":512},[167,64421,64422,64424,64426],{"class":169,"line":34636},[167,64423,54412],{"class":512},[167,64425,2113],{"class":516},[167,64427,537],{"class":512},[167,64429,64430,64432,64434],{"class":169,"line":34642},[167,64431,575],{"class":512},[167,64433,53332],{"class":516},[167,64435,537],{"class":512},[167,64437,64438],{"class":169,"line":34648},[167,64439,741],{"emptyLinePlaceholder":740},[167,64441,64442,64444,64446],{"class":169,"line":34654},[167,64443,513],{"class":512},[167,64445,517],{"class":516},[167,64447,537],{"class":512},[167,64449,64450,64452,64454,64456,64458,64461],{"class":169,"line":34660},[167,64451,542],{"class":512},[167,64453,53609],{"class":516},[167,64455,55479],{"class":173},[167,64457,523],{"class":512},[167,64459,64460],{"class":177},"\"wrapper\"",[167,64462,537],{"class":512},[167,64464,64465,64467,64469,64471,64473,64476,64478,64480],{"class":169,"line":34671},[167,64466,53339],{"class":512},[167,64468,2641],{"class":516},[167,64470,55479],{"class":173},[167,64472,523],{"class":512},[167,64474,64475],{"class":177},"\"avatar\"",[167,64477,57303],{"class":512},[167,64479,2641],{"class":516},[167,64481,537],{"class":512},[167,64483,64484,64486,64488,64490,64492,64495,64497,64499,64502,64504,64506,64508,64511,64513,64516,64518,64520],{"class":169,"line":34677},[167,64485,53339],{"class":512},[167,64487,56278],{"class":516},[167,64489,16985],{"class":173},[167,64491,523],{"class":512},[167,64493,64494],{"class":177},"\"tx\"",[167,64496,63009],{"class":173},[167,64498,523],{"class":512},[167,64500,64501],{"class":177},"\"发一条友善的评论\"",[167,64503,56301],{"class":173},[167,64505,523],{"class":512},[167,64507,5734],{"class":177},[167,64509,64510],{"class":173}," maxlength",[167,64512,523],{"class":512},[167,64514,64515],{"class":177},"\"200\"",[167,64517,57303],{"class":512},[167,64519,56278],{"class":516},[167,64521,537],{"class":512},[167,64523,64524,64526,64528,64531,64533],{"class":169,"line":34697},[167,64525,53339],{"class":512},[167,64527,55877],{"class":516},[167,64529,64530],{"class":512},">发布\u003C\u002F",[167,64532,55877],{"class":516},[167,64534,537],{"class":512},[167,64536,64537,64539,64541],{"class":169,"line":34703},[167,64538,54412],{"class":512},[167,64540,53609],{"class":516},[167,64542,537],{"class":512},[167,64544,64545,64547,64549,64551,64553,64555],{"class":169,"line":34714},[167,64546,542],{"class":512},[167,64548,53609],{"class":516},[167,64550,55479],{"class":173},[167,64552,523],{"class":512},[167,64554,64460],{"class":177},[167,64556,537],{"class":512},[167,64558,64559,64561,64563,64565,64567,64570,64573,64575],{"class":169,"line":34720},[167,64560,53339],{"class":512},[167,64562,167],{"class":516},[167,64564,55479],{"class":173},[167,64566,523],{"class":512},[167,64568,64569],{"class":177},"\"total\"",[167,64571,64572],{"class":512},">0\u002F200字\u003C\u002F",[167,64574,167],{"class":516},[167,64576,537],{"class":512},[167,64578,64579,64581,64583],{"class":169,"line":34726},[167,64580,54412],{"class":512},[167,64582,53609],{"class":516},[167,64584,537],{"class":512},[167,64586,64587,64589,64591,64593,64595,64598],{"class":169,"line":34732},[167,64588,542],{"class":512},[167,64590,53609],{"class":516},[167,64592,55479],{"class":173},[167,64594,523],{"class":512},[167,64596,64597],{"class":177},"\"list\"",[167,64599,537],{"class":512},[167,64601,64602,64604,64606,64608,64610,64613,64616,64618,64621],{"class":169,"line":34738},[167,64603,53339],{"class":512},[167,64605,53609],{"class":516},[167,64607,55479],{"class":173},[167,64609,523],{"class":512},[167,64611,64612],{"class":177},"\"item\"",[167,64614,64615],{"class":173}," style",[167,64617,523],{"class":512},[167,64619,64620],{"class":177},"\"display: none;\"",[167,64622,537],{"class":512},[167,64624,64625,64627,64629,64631,64633,64635,64637,64639],{"class":169,"line":34744},[167,64626,57223],{"class":512},[167,64628,2641],{"class":516},[167,64630,55479],{"class":173},[167,64632,523],{"class":512},[167,64634,64475],{"class":177},[167,64636,57303],{"class":512},[167,64638,2641],{"class":516},[167,64640,537],{"class":512},[167,64642,64643,64645,64647,64649,64651,64654],{"class":169,"line":34750},[167,64644,57223],{"class":512},[167,64646,53609],{"class":516},[167,64648,55479],{"class":173},[167,64650,523],{"class":512},[167,64652,64653],{"class":177},"\"info\"",[167,64655,537],{"class":512},[167,64657,64658,64660,64662,64664,64666,64669,64672,64674],{"class":169,"line":34756},[167,64659,57291],{"class":512},[167,64661,19],{"class":516},[167,64663,55479],{"class":173},[167,64665,523],{"class":512},[167,64667,64668],{"class":177},"\"name\"",[167,64670,64671],{"class":512},">清风徐来\u003C\u002F",[167,64673,19],{"class":516},[167,64675,537],{"class":512},[167,64677,64678,64680,64682,64684,64686,64689,64692,64694],{"class":169,"line":34776},[167,64679,57291],{"class":512},[167,64681,19],{"class":516},[167,64683,55479],{"class":173},[167,64685,523],{"class":512},[167,64687,64688],{"class":177},"\"text\"",[167,64690,64691],{"class":512},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[167,64693,19],{"class":516},[167,64695,537],{"class":512},[167,64697,64698,64700,64702,64704,64706,64709,64712,64714],{"class":169,"line":34782},[167,64699,57291],{"class":512},[167,64701,19],{"class":516},[167,64703,55479],{"class":173},[167,64705,523],{"class":512},[167,64707,64708],{"class":177},"\"time\"",[167,64710,64711],{"class":512},">2022-10-10 20:29:21\u003C\u002F",[167,64713,19],{"class":516},[167,64715,537],{"class":512},[167,64717,64718,64720,64722],{"class":169,"line":34798},[167,64719,57396],{"class":512},[167,64721,53609],{"class":516},[167,64723,537],{"class":512},[167,64725,64726,64728,64730],{"class":169,"line":34804},[167,64727,53774],{"class":512},[167,64729,53609],{"class":516},[167,64731,537],{"class":512},[167,64733,64734,64736,64738],{"class":169,"line":34818},[167,64735,54412],{"class":512},[167,64737,53609],{"class":516},[167,64739,537],{"class":512},[167,64741,64742,64744,64746],{"class":169,"line":34824},[167,64743,542],{"class":512},[167,64745,53809],{"class":516},[167,64747,537],{"class":512},[167,64749,64750,64752,64755,64757,64759,64761,64763,64766],{"class":169,"line":34839},[167,64751,13249],{"class":731},[167,64753,64754],{"class":184}," tx",[167,64756,753],{"class":731},[167,64758,56386],{"class":512},[167,64760,56389],{"class":173},[167,64762,898],{"class":512},[167,64764,64765],{"class":177},"'#tx'",[167,64767,873],{"class":512},[167,64769,64770,64772,64775,64777,64779,64781,64783,64786],{"class":169,"line":34845},[167,64771,13249],{"class":731},[167,64773,64774],{"class":184}," total",[167,64776,753],{"class":731},[167,64778,56386],{"class":512},[167,64780,56389],{"class":173},[167,64782,898],{"class":512},[167,64784,64785],{"class":177},"'.total'",[167,64787,873],{"class":512},[167,64789,64790],{"class":169,"line":34854},[167,64791,64792],{"class":2268},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[167,64794,64795,64798,64800,64802,64804,64806,64808],{"class":169,"line":34860},[167,64796,64797],{"class":512},"    tx.",[167,64799,59802],{"class":173},[167,64801,898],{"class":512},[167,64803,63316],{"class":177},[167,64805,14463],{"class":512},[167,64807,56439],{"class":731},[167,64809,56442],{"class":512},[167,64811,64812,64815,64817],{"class":169,"line":34869},[167,64813,64814],{"class":512},"      total.style.opacity ",[167,64816,523],{"class":731},[167,64818,57688],{"class":184},[167,64820,64821],{"class":169,"line":34875},[167,64822,35463],{"class":512},[167,64824,64825],{"class":169,"line":34881},[167,64826,64827],{"class":2268},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[167,64829,64830,64832,64834,64836,64838,64840,64842],{"class":169,"line":34890},[167,64831,64797],{"class":512},[167,64833,59802],{"class":173},[167,64835,898],{"class":512},[167,64837,63377],{"class":177},[167,64839,14463],{"class":512},[167,64841,56439],{"class":731},[167,64843,56442],{"class":512},[167,64845,64846,64848,64850],{"class":169,"line":34896},[167,64847,64814],{"class":512},[167,64849,523],{"class":731},[167,64851,49333],{"class":184},[167,64853,64854],{"class":169,"line":34907},[167,64855,35463],{"class":512},[167,64857,64858],{"class":169,"line":34913},[167,64859,64860],{"class":2268},"    \u002F\u002F 3. 检测用户输入\n",[167,64862,64863,64865,64867,64869,64872,64874,64876],{"class":169,"line":34932},[167,64864,64797],{"class":512},[167,64866,59802],{"class":173},[167,64868,898],{"class":512},[167,64870,64871],{"class":177},"'input'",[167,64873,14463],{"class":512},[167,64875,56439],{"class":731},[167,64877,56442],{"class":512},[167,64879,64880],{"class":169,"line":34938},[167,64881,64882],{"class":2268},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[167,64884,64885,64888,64890,64893,64896,64898,64901,64903,64905],{"class":169,"line":34949},[167,64886,64887],{"class":512},"      total.innerHTML ",[167,64889,523],{"class":731},[167,64891,64892],{"class":177}," `${",[167,64894,64895],{"class":512},"tx",[167,64897,2758],{"class":177},[167,64899,64900],{"class":512},"value",[167,64902,2758],{"class":177},[167,64904,53964],{"class":184},[167,64906,64907],{"class":177},"}\u002F200字`\n",[167,64909,64910],{"class":169,"line":34955},[167,64911,35463],{"class":512},[167,64913,64914],{"class":169,"line":34975},[167,64915,741],{"emptyLinePlaceholder":740},[167,64917,64918],{"class":169,"line":34991},[167,64919,64920],{"class":2268},"    \u002F\u002F const str = 'andy'\n",[167,64922,64923],{"class":169,"line":34997},[167,64924,64925],{"class":2268},"    \u002F\u002F console.log(str.length)\n",[167,64927,64928,64930,64932],{"class":169,"line":35011},[167,64929,54412],{"class":512},[167,64931,53809],{"class":516},[167,64933,537],{"class":512},[167,64935,64936,64938,64940],{"class":169,"line":35017},[167,64937,575],{"class":512},[167,64939,517],{"class":516},[167,64941,537],{"class":512},[167,64943,64944],{"class":169,"line":35023},[167,64945,741],{"emptyLinePlaceholder":740},[167,64947,64948,64950,64952],{"class":169,"line":35034},[167,64949,575],{"class":512},[167,64951,52635],{"class":516},[167,64953,537],{"class":512},[24024,64955,64957],{"id":64956},"_3254-change事件","3.2.5.4 change事件",[19,64959,64960],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64962,64963],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64965,64966],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,64968,64970],{"className":52633,"code":64969,"language":52635,"meta":32,"style":32},"\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",[34,64971,64972,64982,64996,65000,65008,65022,65042,65054,65062,65066,65074,65088,65096,65114,65132,65144,65148,65156,65164,65168],{"__ignoreMap":32},[167,64973,64974,64976,64978,64980],{"class":169,"line":170},[167,64975,53297],{"class":512},[167,64977,53300],{"class":516},[167,64979,53303],{"class":173},[167,64981,537],{"class":512},[167,64983,64984,64986,64988,64990,64992,64994],{"class":169,"line":191},[167,64985,513],{"class":512},[167,64987,52635],{"class":516},[167,64989,53314],{"class":173},[167,64991,523],{"class":512},[167,64993,53319],{"class":177},[167,64995,537],{"class":512},[167,64997,64998],{"class":169,"line":205},[167,64999,741],{"emptyLinePlaceholder":740},[167,65001,65002,65004,65006],{"class":169,"line":219},[167,65003,513],{"class":512},[167,65005,53332],{"class":516},[167,65007,537],{"class":512},[167,65009,65010,65012,65014,65016,65018,65020],{"class":169,"line":230},[167,65011,542],{"class":512},[167,65013,53342],{"class":516},[167,65015,53345],{"class":173},[167,65017,523],{"class":512},[167,65019,53350],{"class":177},[167,65021,537],{"class":512},[167,65023,65024,65026,65028,65030,65032,65034,65036,65038,65040],{"class":169,"line":241},[167,65025,542],{"class":512},[167,65027,53342],{"class":516},[167,65029,520],{"class":173},[167,65031,523],{"class":512},[167,65033,53389],{"class":177},[167,65035,53369],{"class":173},[167,65037,523],{"class":512},[167,65039,53396],{"class":177},[167,65041,537],{"class":512},[167,65043,65044,65046,65048,65050,65052],{"class":169,"line":261},[167,65045,542],{"class":512},[167,65047,53405],{"class":516},[167,65049,53408],{"class":512},[167,65051,53405],{"class":516},[167,65053,537],{"class":512},[167,65055,65056,65058,65060],{"class":169,"line":773},[167,65057,575],{"class":512},[167,65059,53332],{"class":516},[167,65061,537],{"class":512},[167,65063,65064],{"class":169,"line":779},[167,65065,741],{"emptyLinePlaceholder":740},[167,65067,65068,65070,65072],{"class":169,"line":785},[167,65069,513],{"class":512},[167,65071,517],{"class":516},[167,65073,537],{"class":512},[167,65075,65076,65078,65080,65082,65084,65086],{"class":169,"line":790},[167,65077,542],{"class":512},[167,65079,55812],{"class":516},[167,65081,555],{"class":173},[167,65083,523],{"class":512},[167,65085,64688],{"class":177},[167,65087,537],{"class":512},[167,65089,65090,65092,65094],{"class":169,"line":796},[167,65091,542],{"class":512},[167,65093,53809],{"class":516},[167,65095,537],{"class":512},[167,65097,65098,65100,65102,65104,65106,65108,65110,65112],{"class":169,"line":802},[167,65099,13249],{"class":731},[167,65101,62594],{"class":184},[167,65103,753],{"class":731},[167,65105,56386],{"class":512},[167,65107,56389],{"class":173},[167,65109,898],{"class":512},[167,65111,64871],{"class":177},[167,65113,873],{"class":512},[167,65115,65116,65119,65121,65123,65126,65128,65130],{"class":169,"line":808},[167,65117,65118],{"class":512},"    input.",[167,65120,59802],{"class":173},[167,65122,898],{"class":512},[167,65124,65125],{"class":177},"'change'",[167,65127,14463],{"class":512},[167,65129,56439],{"class":731},[167,65131,56442],{"class":512},[167,65133,65134,65136,65138,65140,65142],{"class":169,"line":814},[167,65135,60233],{"class":512},[167,65137,60236],{"class":173},[167,65139,898],{"class":512},[167,65141,2793],{"class":184},[167,65143,873],{"class":512},[167,65145,65146],{"class":169,"line":820},[167,65147,35463],{"class":512},[167,65149,65150,65152,65154],{"class":169,"line":826},[167,65151,54412],{"class":512},[167,65153,53809],{"class":516},[167,65155,537],{"class":512},[167,65157,65158,65160,65162],{"class":169,"line":832},[167,65159,575],{"class":512},[167,65161,517],{"class":516},[167,65163,537],{"class":512},[167,65165,65166],{"class":169,"line":837},[167,65167,741],{"emptyLinePlaceholder":740},[167,65169,65170,65172,65174],{"class":169,"line":842},[167,65171,575],{"class":512},[167,65173,52635],{"class":516},[167,65175,537],{"class":512},[19,65177,65178],{},"总结：内容发生改变才回去触发",[494,65180,65182],{"id":65181},"_326-事件对象","3.2.6 事件对象",[24024,65184,65186],{"id":65185},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65188,65189],{},[3528,65190],{"alt":32,"src":65191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65193,65194],{},[3528,65195],{"alt":32,"src":65196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65198,65199],{},"点击一次，就输出了事件对象，它是个对象",[19,65201,65202],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65204,65205],{},[3528,65206],{"alt":32,"src":65207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24024,65209,65211],{"id":65210},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65213,65214],{},[3528,65215],{"alt":32,"src":65216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65218,65219],{},"实现按特殊字符才是实现打印输出效果：",[26,65221,65223],{"className":503,"code":65222,"language":505,"meta":32,"style":32},"\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",[34,65224,65225,65233,65238,65252,65260,65265,65270,65275,65280,65285,65290,65295,65300,65305,65309,65313,65321],{"__ignoreMap":32},[167,65226,65227,65229,65231],{"class":169,"line":170},[167,65228,513],{"class":512},[167,65230,517],{"class":516},[167,65232,537],{"class":512},[167,65234,65235],{"class":169,"line":191},[167,65236,65237],{"class":2268},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[167,65239,65240,65242,65244,65246,65248,65250],{"class":169,"line":205},[167,65241,542],{"class":512},[167,65243,55812],{"class":516},[167,65245,555],{"class":173},[167,65247,523],{"class":512},[167,65249,64688],{"class":177},[167,65251,537],{"class":512},[167,65253,65254,65256,65258],{"class":169,"line":219},[167,65255,542],{"class":512},[167,65257,53809],{"class":516},[167,65259,537],{"class":512},[167,65261,65262],{"class":169,"line":230},[167,65263,65264],{"class":512},"    \u002F\u002F const btn = document.querySelector('button')\n",[167,65266,65267],{"class":169,"line":241},[167,65268,65269],{"class":512},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[167,65271,65272],{"class":169,"line":261},[167,65273,65274],{"class":512},"    \u002F\u002F   console.log(e);\n",[167,65276,65277],{"class":169,"line":773},[167,65278,65279],{"class":512},"    \u002F\u002F })\n",[167,65281,65282],{"class":169,"line":779},[167,65283,65284],{"class":512},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[167,65286,65287],{"class":169,"line":785},[167,65288,65289],{"class":512},"    const input = document.querySelector('input')\n",[167,65291,65292],{"class":169,"line":790},[167,65293,65294],{"class":512},"    input.addEventListener('keyup', function (e) {\n",[167,65296,65297],{"class":169,"line":796},[167,65298,65299],{"class":512},"      if (e.key === 'Enter') {\n",[167,65301,65302],{"class":169,"line":802},[167,65303,65304],{"class":512},"        console.log('我按下了回车键')\n",[167,65306,65307],{"class":169,"line":808},[167,65308,54393],{"class":512},[167,65310,65311],{"class":169,"line":814},[167,65312,35463],{"class":512},[167,65314,65315,65317,65319],{"class":169,"line":820},[167,65316,54412],{"class":512},[167,65318,53809],{"class":516},[167,65320,537],{"class":512},[167,65322,65323,65325,65327],{"class":169,"line":826},[167,65324,575],{"class":512},[167,65326,517],{"class":516},[167,65328,537],{"class":512},[24024,65330,65332],{"id":65331},"_3263-trim方法","3.2.6.3 trim方法",[19,65334,65335],{},[3528,65336],{"alt":32,"src":65337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65339,65340],{},[3528,65341],{"alt":32,"src":65342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65344,65345],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65347,65348],{},"str.trim()",[494,65350,65352],{"id":65351},"_327-环境对象","3.2.7 环境对象",[19,65354,65355],{},[3528,65356],{"alt":32,"src":65357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65359,65360],{},[3528,65361],{"alt":32,"src":65362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65364,65365],{},[3528,65366],{"alt":32,"src":65367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65369,65370],{},"实际函数调用是window.fn()",[19,65372,65373],{},"普通函数里面this指向的是window",[3205,65375,65376,65379,65382],{},[43,65377,65378],{},"在普通函数下，this指向的是window",[43,65380,65381],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[43,65383,65384],{},"箭头函数没有this",[19,65386,65387],{},"粗略记法就是：谁调用，this就指向谁",[19,65389,65390],{},[3528,65391],{"alt":32,"src":65392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65394,65395],{},[3528,65396],{"alt":32,"src":65397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65399,65400],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65402,65403],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,65405,65407],{"className":503,"code":65406,"language":505,"meta":32,"style":32},"\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",[34,65408,65409,65417,65429,65437,65442,65447,65452,65457,65461,65469],{"__ignoreMap":32},[167,65410,65411,65413,65415],{"class":169,"line":170},[167,65412,513],{"class":512},[167,65414,517],{"class":516},[167,65416,537],{"class":512},[167,65418,65419,65421,65423,65425,65427],{"class":169,"line":191},[167,65420,542],{"class":512},[167,65422,55877],{"class":516},[167,65424,55883],{"class":512},[167,65426,55877],{"class":516},[167,65428,537],{"class":512},[167,65430,65431,65433,65435],{"class":169,"line":205},[167,65432,542],{"class":512},[167,65434,53809],{"class":516},[167,65436,537],{"class":512},[167,65438,65439],{"class":169,"line":219},[167,65440,65441],{"class":512},"    const button = document.querySelector('button')\n",[167,65443,65444],{"class":169,"line":230},[167,65445,65446],{"class":512},"    button.addEventListener('click', function () {\n",[167,65448,65449],{"class":169,"line":241},[167,65450,65451],{"class":512},"      \u002F\u002F console.log(this);\n",[167,65453,65454],{"class":169,"line":261},[167,65455,65456],{"class":512},"      this.style.color = 'pink'\n",[167,65458,65459],{"class":169,"line":773},[167,65460,35463],{"class":512},[167,65462,65463,65465,65467],{"class":169,"line":779},[167,65464,54412],{"class":512},[167,65466,53809],{"class":516},[167,65468,537],{"class":512},[167,65470,65471,65473,65475],{"class":169,"line":785},[167,65472,575],{"class":512},[167,65474,517],{"class":516},[167,65476,537],{"class":512},[494,65478,65480],{"id":65479},"_328-回调函数","3.2.8 回调函数",[19,65482,65483],{},[3528,65484],{"alt":32,"src":65485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65487,65488],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65490,13360],{},[3205,65492,65493,65496,65499],{},[43,65494,65495],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[43,65497,65498],{},"回调函数本质还是函数，只不过把它当成参数使用",[43,65500,65501],{},"使用匿名函数做为回调函数比较常见",[494,65503,65505],{"id":65504},"_329-tab栏切换","3.2.9 tab栏切换",[19,65507,65508],{},[3528,65509],{"alt":32,"src":65510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,65512,65514],{"className":52633,"code":65513,"language":52635,"meta":32,"style":32},"\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",[34,65515,65516,65526,65540,65544,65552,65566,65586,65606,65619,65627,65633,65643,65653,65657,65661,65668,65681,65694,65706,65722,65726,65730,65737,65749,65761,65773,65783,65793,65797,65801,65810,65822,65833,65845,65849,65853,65861,65871,65881,65891,65895,65899,65909,65923,65935,65939,65943,65955,65966,65983,65993,65997,66001,66016,66027,66037,66041,66045,66052,66067,66071,66075,66083,66093,66097,66101,66110,66120,66124,66132,66140,66144,66152,66167,66182,66195,66203,66237,66264,66291,66318,66345,66353,66361,66376,66413,66448,66483,66518,66553,66561,66569,66577,66582,66587,66607,66612,66641,66646,66651,66669,66674,66679,66684,66706,66711,66727,66731,66736,66741,66762,66767,66796,66800,66805,66809,66817,66825,66829],{"__ignoreMap":32},[167,65517,65518,65520,65522,65524],{"class":169,"line":170},[167,65519,53297],{"class":512},[167,65521,53300],{"class":516},[167,65523,53303],{"class":173},[167,65525,537],{"class":512},[167,65527,65528,65530,65532,65534,65536,65538],{"class":169,"line":191},[167,65529,513],{"class":512},[167,65531,52635],{"class":516},[167,65533,53314],{"class":173},[167,65535,523],{"class":512},[167,65537,53319],{"class":177},[167,65539,537],{"class":512},[167,65541,65542],{"class":169,"line":205},[167,65543,741],{"emptyLinePlaceholder":740},[167,65545,65546,65548,65550],{"class":169,"line":219},[167,65547,513],{"class":512},[167,65549,53332],{"class":516},[167,65551,537],{"class":512},[167,65553,65554,65556,65558,65560,65562,65564],{"class":169,"line":230},[167,65555,542],{"class":512},[167,65557,53342],{"class":516},[167,65559,53345],{"class":173},[167,65561,523],{"class":512},[167,65563,53350],{"class":177},[167,65565,61116],{"class":512},[167,65567,65568,65570,65572,65574,65576,65578,65580,65582,65584],{"class":169,"line":241},[167,65569,542],{"class":512},[167,65571,53342],{"class":516},[167,65573,53361],{"class":173},[167,65575,523],{"class":512},[167,65577,53366],{"class":177},[167,65579,53369],{"class":173},[167,65581,523],{"class":512},[167,65583,53374],{"class":177},[167,65585,61116],{"class":512},[167,65587,65588,65590,65592,65594,65596,65598,65600,65602,65604],{"class":169,"line":261},[167,65589,542],{"class":512},[167,65591,53342],{"class":516},[167,65593,520],{"class":173},[167,65595,523],{"class":512},[167,65597,53389],{"class":177},[167,65599,53369],{"class":173},[167,65601,523],{"class":512},[167,65603,53396],{"class":177},[167,65605,61116],{"class":512},[167,65607,65608,65610,65612,65615,65617],{"class":169,"line":773},[167,65609,542],{"class":512},[167,65611,53405],{"class":516},[167,65613,65614],{"class":512},">tab栏切换\u003C\u002F",[167,65616,53405],{"class":516},[167,65618,537],{"class":512},[167,65620,65621,65623,65625],{"class":169,"line":779},[167,65622,542],{"class":512},[167,65624,2113],{"class":516},[167,65626,537],{"class":512},[167,65628,65629,65631],{"class":169,"line":785},[167,65630,8433],{"class":516},[167,65632,17598],{"class":512},[167,65634,65635,65637,65639,65641],{"class":169,"line":790},[167,65636,56696],{"class":184},[167,65638,53435],{"class":512},[167,65640,1154],{"class":184},[167,65642,3359],{"class":512},[167,65644,65645,65647,65649,65651],{"class":169,"line":796},[167,65646,56685],{"class":184},[167,65648,53435],{"class":512},[167,65650,1154],{"class":184},[167,65652,3359],{"class":512},[167,65654,65655],{"class":169,"line":802},[167,65656,4231],{"class":512},[167,65658,65659],{"class":169,"line":808},[167,65660,741],{"emptyLinePlaceholder":740},[167,65662,65663,65666],{"class":169,"line":814},[167,65664,65665],{"class":173},"    .tab",[167,65667,17598],{"class":512},[167,65669,65670,65672,65674,65677,65679],{"class":169,"line":820},[167,65671,56761],{"class":184},[167,65673,53435],{"class":512},[167,65675,65676],{"class":184},"590",[167,65678,53490],{"class":731},[167,65680,3359],{"class":512},[167,65682,65683,65685,65687,65690,65692],{"class":169,"line":826},[167,65684,56775],{"class":184},[167,65686,53435],{"class":512},[167,65688,65689],{"class":184},"340",[167,65691,53490],{"class":731},[167,65693,3359],{"class":512},[167,65695,65696,65698,65700,65702,65704],{"class":169,"line":832},[167,65697,56696],{"class":184},[167,65699,53435],{"class":512},[167,65701,2900],{"class":184},[167,65703,53490],{"class":731},[167,65705,3359],{"class":512},[167,65707,65708,65710,65712,65714,65716,65718,65720],{"class":169,"line":837},[167,65709,63966],{"class":184},[167,65711,53435],{"class":512},[167,65713,2418],{"class":184},[167,65715,53490],{"class":731},[167,65717,53519],{"class":184},[167,65719,64233],{"class":184},[167,65721,3359],{"class":512},[167,65723,65724],{"class":169,"line":842},[167,65725,4231],{"class":512},[167,65727,65728],{"class":169,"line":860},[167,65729,741],{"emptyLinePlaceholder":740},[167,65731,65732,65735],{"class":169,"line":876},[167,65733,65734],{"class":173},"    .tab-nav",[167,65736,17598],{"class":512},[167,65738,65739,65741,65743,65745,65747],{"class":169,"line":887},[167,65740,56761],{"class":184},[167,65742,53435],{"class":512},[167,65744,981],{"class":184},[167,65746,2528],{"class":731},[167,65748,3359],{"class":512},[167,65750,65751,65753,65755,65757,65759],{"class":169,"line":892},[167,65752,56775],{"class":184},[167,65754,53435],{"class":512},[167,65756,3107],{"class":184},[167,65758,53490],{"class":731},[167,65760,3359],{"class":512},[167,65762,65763,65765,65767,65769,65771],{"class":169,"line":907},[167,65764,59348],{"class":184},[167,65766,53435],{"class":512},[167,65768,3107],{"class":184},[167,65770,53490],{"class":731},[167,65772,3359],{"class":512},[167,65774,65775,65777,65779,65781],{"class":169,"line":920},[167,65776,56999],{"class":184},[167,65778,53435],{"class":512},[167,65780,53475],{"class":184},[167,65782,3359],{"class":512},[167,65784,65785,65787,65789,65791],{"class":169,"line":933},[167,65786,57010],{"class":184},[167,65788,53435],{"class":512},[167,65790,53666],{"class":184},[167,65792,3359],{"class":512},[167,65794,65795],{"class":169,"line":946},[167,65796,4231],{"class":512},[167,65798,65799],{"class":169,"line":959},[167,65800,741],{"emptyLinePlaceholder":740},[167,65802,65803,65805,65808],{"class":169,"line":964},[167,65804,65734],{"class":173},[167,65806,65807],{"class":516}," h3",[167,65809,17598],{"class":512},[167,65811,65812,65814,65816,65818,65820],{"class":169,"line":987},[167,65813,56912],{"class":184},[167,65815,53435],{"class":512},[167,65817,3000],{"class":184},[167,65819,53490],{"class":731},[167,65821,3359],{"class":512},[167,65823,65824,65826,65828,65831],{"class":169,"line":993},[167,65825,64323],{"class":184},[167,65827,53435],{"class":512},[167,65829,65830],{"class":184},"normal",[167,65832,3359],{"class":512},[167,65834,65835,65837,65839,65841,65843],{"class":169,"line":998},[167,65836,63989],{"class":184},[167,65838,53435],{"class":512},[167,65840,2900],{"class":184},[167,65842,53490],{"class":731},[167,65844,3359],{"class":512},[167,65846,65847],{"class":169,"line":1010},[167,65848,4231],{"class":512},[167,65850,65851],{"class":169,"line":1022},[167,65852,741],{"emptyLinePlaceholder":740},[167,65854,65855,65857,65859],{"class":169,"line":1027},[167,65856,65734],{"class":173},[167,65858,63281],{"class":516},[167,65860,17598],{"class":512},[167,65862,65863,65865,65867,65869],{"class":169,"line":1032},[167,65864,56722],{"class":184},[167,65866,53435],{"class":512},[167,65868,56727],{"class":184},[167,65870,3359],{"class":512},[167,65872,65873,65875,65877,65879],{"class":169,"line":1049},[167,65874,56999],{"class":184},[167,65876,53435],{"class":512},[167,65878,53475],{"class":184},[167,65880,3359],{"class":512},[167,65882,65883,65885,65887,65889],{"class":169,"line":10005},[167,65884,57010],{"class":184},[167,65886,53435],{"class":512},[167,65888,53578],{"class":184},[167,65890,3359],{"class":512},[167,65892,65893],{"class":169,"line":10011},[167,65894,4231],{"class":512},[167,65896,65897],{"class":169,"line":10038},[167,65898,741],{"emptyLinePlaceholder":740},[167,65900,65901,65903,65905,65907],{"class":169,"line":10043},[167,65902,65734],{"class":173},[167,65904,63281],{"class":516},[167,65906,57065],{"class":516},[167,65908,17598],{"class":512},[167,65910,65911,65913,65915,65917,65919,65921],{"class":169,"line":10049},[167,65912,56696],{"class":184},[167,65914,53435],{"class":512},[167,65916,1154],{"class":184},[167,65918,10978],{"class":184},[167,65920,53490],{"class":731},[167,65922,3359],{"class":512},[167,65924,65925,65927,65929,65931,65933],{"class":169,"line":10061},[167,65926,56912],{"class":184},[167,65928,53435],{"class":512},[167,65930,2749],{"class":184},[167,65932,53490],{"class":731},[167,65934,3359],{"class":512},[167,65936,65937],{"class":169,"line":10073},[167,65938,4231],{"class":512},[167,65940,65941],{"class":169,"line":10085},[167,65942,741],{"emptyLinePlaceholder":740},[167,65944,65945,65947,65949,65951,65953],{"class":169,"line":11744},[167,65946,65734],{"class":173},[167,65948,63281],{"class":516},[167,65950,57065],{"class":516},[167,65952,3464],{"class":516},[167,65954,17598],{"class":512},[167,65956,65957,65960,65962,65964],{"class":169,"line":11769},[167,65958,65959],{"class":184},"      text-decoration",[167,65961,53435],{"class":512},[167,65963,56727],{"class":184},[167,65965,3359],{"class":512},[167,65967,65968,65970,65972,65974,65976,65978,65981],{"class":169,"line":11792},[167,65969,64221],{"class":184},[167,65971,53435],{"class":512},[167,65973,2287],{"class":184},[167,65975,53490],{"class":731},[167,65977,53519],{"class":184},[167,65979,65980],{"class":184}," transparent",[167,65982,3359],{"class":512},[167,65984,65985,65987,65989,65991],{"class":169,"line":11816},[167,65986,59405],{"class":184},[167,65988,53435],{"class":512},[167,65990,64358],{"class":184},[167,65992,3359],{"class":512},[167,65994,65995],{"class":169,"line":11821},[167,65996,4231],{"class":512},[167,65998,65999],{"class":169,"line":11826},[167,66000,741],{"emptyLinePlaceholder":740},[167,66002,66003,66005,66007,66009,66011,66014],{"class":169,"line":11831},[167,66004,65734],{"class":173},[167,66006,63281],{"class":516},[167,66008,57065],{"class":516},[167,66010,3464],{"class":516},[167,66012,66013],{"class":173},".active",[167,66015,17598],{"class":512},[167,66017,66018,66020,66022,66025],{"class":169,"line":11840},[167,66019,63780],{"class":184},[167,66021,53435],{"class":512},[167,66023,66024],{"class":184},"#e1251b",[167,66026,3359],{"class":512},[167,66028,66029,66031,66033,66035],{"class":169,"line":11845},[167,66030,59405],{"class":184},[167,66032,53435],{"class":512},[167,66034,66024],{"class":184},[167,66036,3359],{"class":512},[167,66038,66039],{"class":169,"line":11851},[167,66040,4231],{"class":512},[167,66042,66043],{"class":169,"line":11872},[167,66044,741],{"emptyLinePlaceholder":740},[167,66046,66047,66050],{"class":169,"line":11878},[167,66048,66049],{"class":173},"    .tab-content",[167,66051,17598],{"class":512},[167,66053,66054,66056,66058,66060,66063,66065],{"class":169,"line":11892},[167,66055,56685],{"class":184},[167,66057,53435],{"class":512},[167,66059,1154],{"class":184},[167,66061,66062],{"class":184}," 16",[167,66064,53490],{"class":731},[167,66066,3359],{"class":512},[167,66068,66069],{"class":169,"line":11898},[167,66070,4231],{"class":512},[167,66072,66073],{"class":169,"line":11925},[167,66074,741],{"emptyLinePlaceholder":740},[167,66076,66077,66079,66081],{"class":169,"line":11934},[167,66078,66049],{"class":173},[167,66080,64163],{"class":173},[167,66082,17598],{"class":512},[167,66084,66085,66087,66089,66091],{"class":169,"line":11940},[167,66086,56999],{"class":184},[167,66088,53435],{"class":512},[167,66090,56727],{"class":184},[167,66092,3359],{"class":512},[167,66094,66095],{"class":169,"line":11948},[167,66096,4231],{"class":512},[167,66098,66099],{"class":169,"line":11953},[167,66100,741],{"emptyLinePlaceholder":740},[167,66102,66103,66105,66108],{"class":169,"line":18630},[167,66104,66049],{"class":173},[167,66106,66107],{"class":173}," .item.active",[167,66109,17598],{"class":512},[167,66111,66112,66114,66116,66118],{"class":169,"line":18636},[167,66113,56999],{"class":184},[167,66115,53435],{"class":512},[167,66117,62858],{"class":184},[167,66119,3359],{"class":512},[167,66121,66122],{"class":169,"line":18659},[167,66123,4231],{"class":512},[167,66125,66126,66128,66130],{"class":169,"line":18665},[167,66127,54412],{"class":512},[167,66129,2113],{"class":516},[167,66131,537],{"class":512},[167,66133,66134,66136,66138],{"class":169,"line":18688},[167,66135,575],{"class":512},[167,66137,53332],{"class":516},[167,66139,537],{"class":512},[167,66141,66142],{"class":169,"line":18702},[167,66143,741],{"emptyLinePlaceholder":740},[167,66145,66146,66148,66150],{"class":169,"line":18722},[167,66147,513],{"class":512},[167,66149,517],{"class":516},[167,66151,537],{"class":512},[167,66153,66154,66156,66158,66160,66162,66165],{"class":169,"line":18728},[167,66155,542],{"class":512},[167,66157,53609],{"class":516},[167,66159,55479],{"class":173},[167,66161,523],{"class":512},[167,66163,66164],{"class":177},"\"tab\"",[167,66166,537],{"class":512},[167,66168,66169,66171,66173,66175,66177,66180],{"class":169,"line":18739},[167,66170,53339],{"class":512},[167,66172,53609],{"class":516},[167,66174,55479],{"class":173},[167,66176,523],{"class":512},[167,66178,66179],{"class":177},"\"tab-nav\"",[167,66181,537],{"class":512},[167,66183,66184,66186,66188,66191,66193],{"class":169,"line":18762},[167,66185,57223],{"class":512},[167,66187,494],{"class":516},[167,66189,66190],{"class":512},">每日特价\u003C\u002F",[167,66192,494],{"class":516},[167,66194,537],{"class":512},[167,66196,66197,66199,66201],{"class":169,"line":18784},[167,66198,57223],{"class":512},[167,66200,3205],{"class":516},[167,66202,537],{"class":512},[167,66204,66205,66207,66209,66211,66213,66215,66217,66219,66221,66223,66226,66229,66231,66233,66235],{"class":169,"line":18789},[167,66206,57291],{"class":512},[167,66208,43],{"class":516},[167,66210,63041],{"class":512},[167,66212,2439],{"class":516},[167,66214,55479],{"class":173},[167,66216,523],{"class":512},[167,66218,61695],{"class":177},[167,66220,63046],{"class":173},[167,66222,523],{"class":512},[167,66224,66225],{"class":177},"\"javascript:;\"",[167,66227,66228],{"class":512},">精选\u003C\u002F",[167,66230,2439],{"class":516},[167,66232,57303],{"class":512},[167,66234,43],{"class":516},[167,66236,537],{"class":512},[167,66238,66239,66241,66243,66245,66247,66249,66251,66253,66256,66258,66260,66262],{"class":169,"line":18795},[167,66240,57291],{"class":512},[167,66242,43],{"class":516},[167,66244,63041],{"class":512},[167,66246,2439],{"class":516},[167,66248,63046],{"class":173},[167,66250,523],{"class":512},[167,66252,66225],{"class":177},[167,66254,66255],{"class":512},">美食\u003C\u002F",[167,66257,2439],{"class":516},[167,66259,57303],{"class":512},[167,66261,43],{"class":516},[167,66263,537],{"class":512},[167,66265,66266,66268,66270,66272,66274,66276,66278,66280,66283,66285,66287,66289],{"class":169,"line":18809},[167,66267,57291],{"class":512},[167,66269,43],{"class":516},[167,66271,63041],{"class":512},[167,66273,2439],{"class":516},[167,66275,63046],{"class":173},[167,66277,523],{"class":512},[167,66279,66225],{"class":177},[167,66281,66282],{"class":512},">百货\u003C\u002F",[167,66284,2439],{"class":516},[167,66286,57303],{"class":512},[167,66288,43],{"class":516},[167,66290,537],{"class":512},[167,66292,66293,66295,66297,66299,66301,66303,66305,66307,66310,66312,66314,66316],{"class":169,"line":18822},[167,66294,57291],{"class":512},[167,66296,43],{"class":516},[167,66298,63041],{"class":512},[167,66300,2439],{"class":516},[167,66302,63046],{"class":173},[167,66304,523],{"class":512},[167,66306,66225],{"class":177},[167,66308,66309],{"class":512},">个护\u003C\u002F",[167,66311,2439],{"class":516},[167,66313,57303],{"class":512},[167,66315,43],{"class":516},[167,66317,537],{"class":512},[167,66319,66320,66322,66324,66326,66328,66330,66332,66334,66337,66339,66341,66343],{"class":169,"line":18827},[167,66321,57291],{"class":512},[167,66323,43],{"class":516},[167,66325,63041],{"class":512},[167,66327,2439],{"class":516},[167,66329,63046],{"class":173},[167,66331,523],{"class":512},[167,66333,66225],{"class":177},[167,66335,66336],{"class":512},">预告\u003C\u002F",[167,66338,2439],{"class":516},[167,66340,57303],{"class":512},[167,66342,43],{"class":516},[167,66344,537],{"class":512},[167,66346,66347,66349,66351],{"class":169,"line":18841},[167,66348,57396],{"class":512},[167,66350,3205],{"class":516},[167,66352,537],{"class":512},[167,66354,66355,66357,66359],{"class":169,"line":18846},[167,66356,53774],{"class":512},[167,66358,53609],{"class":516},[167,66360,537],{"class":512},[167,66362,66363,66365,66367,66369,66371,66374],{"class":169,"line":18852},[167,66364,53339],{"class":512},[167,66366,53609],{"class":516},[167,66368,55479],{"class":173},[167,66370,523],{"class":512},[167,66372,66373],{"class":177},"\"tab-content\"",[167,66375,537],{"class":512},[167,66377,66378,66380,66382,66384,66386,66389,66391,66393,66395,66397,66400,66402,66404,66406,66409,66411],{"class":169,"line":18857},[167,66379,57223],{"class":512},[167,66381,53609],{"class":516},[167,66383,55479],{"class":173},[167,66385,523],{"class":512},[167,66387,66388],{"class":177},"\"item active\"",[167,66390,63041],{"class":512},[167,66392,3528],{"class":516},[167,66394,57228],{"class":173},[167,66396,523],{"class":512},[167,66398,66399],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[167,66401,57236],{"class":173},[167,66403,523],{"class":512},[167,66405,9682],{"class":177},[167,66407,66408],{"class":512}," \u002F>\u003C\u002F",[167,66410,53609],{"class":516},[167,66412,537],{"class":512},[167,66414,66415,66417,66419,66421,66423,66425,66427,66429,66431,66433,66436,66438,66440,66442,66444,66446],{"class":169,"line":18871},[167,66416,57223],{"class":512},[167,66418,53609],{"class":516},[167,66420,55479],{"class":173},[167,66422,523],{"class":512},[167,66424,64612],{"class":177},[167,66426,63041],{"class":512},[167,66428,3528],{"class":516},[167,66430,57228],{"class":173},[167,66432,523],{"class":512},[167,66434,66435],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[167,66437,57236],{"class":173},[167,66439,523],{"class":512},[167,66441,9682],{"class":177},[167,66443,66408],{"class":512},[167,66445,53609],{"class":516},[167,66447,537],{"class":512},[167,66449,66450,66452,66454,66456,66458,66460,66462,66464,66466,66468,66471,66473,66475,66477,66479,66481],{"class":169,"line":18876},[167,66451,57223],{"class":512},[167,66453,53609],{"class":516},[167,66455,55479],{"class":173},[167,66457,523],{"class":512},[167,66459,64612],{"class":177},[167,66461,63041],{"class":512},[167,66463,3528],{"class":516},[167,66465,57228],{"class":173},[167,66467,523],{"class":512},[167,66469,66470],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[167,66472,57236],{"class":173},[167,66474,523],{"class":512},[167,66476,9682],{"class":177},[167,66478,66408],{"class":512},[167,66480,53609],{"class":516},[167,66482,537],{"class":512},[167,66484,66485,66487,66489,66491,66493,66495,66497,66499,66501,66503,66506,66508,66510,66512,66514,66516],{"class":169,"line":18881},[167,66486,57223],{"class":512},[167,66488,53609],{"class":516},[167,66490,55479],{"class":173},[167,66492,523],{"class":512},[167,66494,64612],{"class":177},[167,66496,63041],{"class":512},[167,66498,3528],{"class":516},[167,66500,57228],{"class":173},[167,66502,523],{"class":512},[167,66504,66505],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[167,66507,57236],{"class":173},[167,66509,523],{"class":512},[167,66511,9682],{"class":177},[167,66513,66408],{"class":512},[167,66515,53609],{"class":516},[167,66517,537],{"class":512},[167,66519,66520,66522,66524,66526,66528,66530,66532,66534,66536,66538,66541,66543,66545,66547,66549,66551],{"class":169,"line":18895},[167,66521,57223],{"class":512},[167,66523,53609],{"class":516},[167,66525,55479],{"class":173},[167,66527,523],{"class":512},[167,66529,64612],{"class":177},[167,66531,63041],{"class":512},[167,66533,3528],{"class":516},[167,66535,57228],{"class":173},[167,66537,523],{"class":512},[167,66539,66540],{"class":177},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[167,66542,57236],{"class":173},[167,66544,523],{"class":512},[167,66546,9682],{"class":177},[167,66548,66408],{"class":512},[167,66550,53609],{"class":516},[167,66552,537],{"class":512},[167,66554,66555,66557,66559],{"class":169,"line":18907},[167,66556,53774],{"class":512},[167,66558,53609],{"class":516},[167,66560,537],{"class":512},[167,66562,66563,66565,66567],{"class":169,"line":18912},[167,66564,54412],{"class":512},[167,66566,53609],{"class":516},[167,66568,537],{"class":512},[167,66570,66571,66573,66575],{"class":169,"line":18925},[167,66572,542],{"class":512},[167,66574,53809],{"class":516},[167,66576,537],{"class":512},[167,66578,66579],{"class":169,"line":18930},[167,66580,66581],{"class":2268},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[167,66583,66584],{"class":169,"line":18935},[167,66585,66586],{"class":2268},"    \u002F\u002F 1.1 获取 a 元素 \n",[167,66588,66589,66591,66594,66596,66598,66600,66602,66605],{"class":169,"line":18940},[167,66590,13249],{"class":731},[167,66592,66593],{"class":184}," as",[167,66595,753],{"class":731},[167,66597,56386],{"class":512},[167,66599,57670],{"class":173},[167,66601,898],{"class":512},[167,66603,66604],{"class":177},"'.tab-nav a'",[167,66606,873],{"class":512},[167,66608,66609],{"class":169,"line":18953},[167,66610,66611],{"class":2268},"    \u002F\u002F console.log(as) \n",[167,66613,66614,66616,66618,66620,66622,66624,66626,66628,66630,66633,66635,66637,66639],{"class":169,"line":18958},[167,66615,967],{"class":731},[167,66617,3716],{"class":512},[167,66619,53843],{"class":731},[167,66621,11466],{"class":512},[167,66623,523],{"class":731},[167,66625,6125],{"class":184},[167,66627,11473],{"class":512},[167,66629,513],{"class":731},[167,66631,66632],{"class":512}," as.",[167,66634,53964],{"class":184},[167,66636,5248],{"class":512},[167,66638,4336],{"class":731},[167,66640,14470],{"class":512},[167,66642,66643],{"class":169,"line":34636},[167,66644,66645],{"class":2268},"      \u002F\u002F console.log(as[i])\n",[167,66647,66648],{"class":169,"line":34642},[167,66649,66650],{"class":2268},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[167,66652,66653,66656,66658,66660,66663,66665,66667],{"class":169,"line":34648},[167,66654,66655],{"class":512},"      as[i].",[167,66657,59802],{"class":173},[167,66659,898],{"class":512},[167,66661,66662],{"class":177},"'mouseenter'",[167,66664,14463],{"class":512},[167,66666,56439],{"class":731},[167,66668,56442],{"class":512},[167,66670,66671],{"class":169,"line":34654},[167,66672,66673],{"class":2268},"        \u002F\u002F console.log('鼠标经过')\n",[167,66675,66676],{"class":169,"line":34660},[167,66677,66678],{"class":2268},"        \u002F\u002F 排他思想  \n",[167,66680,66681],{"class":169,"line":34671},[167,66682,66683],{"class":2268},"        \u002F\u002F 干掉别人 移除类active\n",[167,66685,66686,66688,66690,66692,66695,66697,66699,66701,66704],{"class":169,"line":34677},[167,66687,53921],{"class":512},[167,66689,56389],{"class":173},[167,66691,898],{"class":512},[167,66693,66694],{"class":177},"'.tab-nav .active'",[167,66696,58992],{"class":512},[167,66698,58995],{"class":173},[167,66700,898],{"class":512},[167,66702,66703],{"class":177},"'active'",[167,66705,873],{"class":512},[167,66707,66708],{"class":169,"line":34697},[167,66709,66710],{"class":2268},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[167,66712,66713,66716,66719,66721,66723,66725],{"class":169,"line":34703},[167,66714,66715],{"class":184},"        this",[167,66717,66718],{"class":512},".classList.",[167,66720,7364],{"class":173},[167,66722,898],{"class":512},[167,66724,66703],{"class":177},[167,66726,873],{"class":512},[167,66728,66729],{"class":169,"line":34714},[167,66730,741],{"emptyLinePlaceholder":740},[167,66732,66733],{"class":169,"line":34720},[167,66734,66735],{"class":2268},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[167,66737,66738],{"class":169,"line":34726},[167,66739,66740],{"class":2268},"        \u002F\u002F 干掉别人\n",[167,66742,66743,66745,66747,66749,66752,66754,66756,66758,66760],{"class":169,"line":34732},[167,66744,53921],{"class":512},[167,66746,56389],{"class":173},[167,66748,898],{"class":512},[167,66750,66751],{"class":177},"'.tab-content .active'",[167,66753,58992],{"class":512},[167,66755,58995],{"class":173},[167,66757,898],{"class":512},[167,66759,66703],{"class":177},[167,66761,873],{"class":512},[167,66763,66764],{"class":169,"line":34738},[167,66765,66766],{"class":2268},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[167,66768,66769,66771,66773,66775,66778,66780,66782,66784,66786,66788,66790,66792,66794],{"class":169,"line":34744},[167,66770,53921],{"class":512},[167,66772,56389],{"class":173},[167,66774,898],{"class":512},[167,66776,66777],{"class":177},"`.tab-content .item:nth-child(${",[167,66779,2641],{"class":512},[167,66781,47566],{"class":731},[167,66783,27138],{"class":184},[167,66785,59021],{"class":177},[167,66787,58992],{"class":512},[167,66789,7364],{"class":173},[167,66791,898],{"class":512},[167,66793,66703],{"class":177},[167,66795,873],{"class":512},[167,66797,66798],{"class":169,"line":34750},[167,66799,741],{"emptyLinePlaceholder":740},[167,66801,66802],{"class":169,"line":34756},[167,66803,66804],{"class":512},"      })\n",[167,66806,66807],{"class":169,"line":34776},[167,66808,4231],{"class":512},[167,66810,66811,66813,66815],{"class":169,"line":34782},[167,66812,54412],{"class":512},[167,66814,53809],{"class":516},[167,66816,537],{"class":512},[167,66818,66819,66821,66823],{"class":169,"line":34798},[167,66820,575],{"class":512},[167,66822,517],{"class":516},[167,66824,537],{"class":512},[167,66826,66827],{"class":169,"line":34804},[167,66828,741],{"emptyLinePlaceholder":740},[167,66830,66831,66833,66835],{"class":169,"line":34818},[167,66832,575],{"class":512},[167,66834,52635],{"class":516},[167,66836,537],{"class":512},[19,66838,66839],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66841,66842],{},"在监听事件中，this指向的就是他的调用者",[19,66844,66845],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66847,55711],{},[19,66849,66850],{},"(function () {",[19,66852,66853],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66855,66856],{},"list.addEventListener('click', function (e) {",[19,66858,66859],{},"if (e.target.tagName === 'A') {",[19,66861,66862],{},"\u002F\u002F 排他思想",[19,66864,66865],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66867,66868],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66870,66871],{},"\u002F\u002F console.log(old);",[19,66873,66874],{},"\u002F\u002F 判断",[19,66876,66877],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66879,66880],{},"if (old) old.classList.remove('active')",[19,66882,66883],{},"e.target.classList.add('active')",[19,66885,3145],{},[19,66887,54459],{},[19,66889,66890],{},"})();",[494,66892,66894],{"id":66893},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,66896,66898],{"className":52633,"code":66897,"language":52635,"meta":32,"style":32},"\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",[34,66899,66900,66910,66914,66922,66926,66940,66954,66966,66974,66980,66990,67000,67004,67008,67015,67027,67038,67055,67068,67082,67092,67096,67100,67107,67118,67136,67146,67158,67162,67166,67173,67190,67201,67213,67217,67221,67228,67240,67244,67252,67260,67264,67272,67280,67288,67303,67347,67355,67368,67381,67394,67402,67410,67418,67446,67454,67466,67479,67492,67500,67508,67516,67542,67550,67563,67575,67588,67596,67604,67612,67638,67646,67659,67671,67684,67692,67700,67708,67713,67733,67738,67758,67763,67780,67785,67793,67798,67827,67840,67844,67848,67853,67857,67885,67890,67907,67912,67917,67922,67927,67953,67957,67961,67969,67977,67981],{"__ignoreMap":32},[167,66901,66902,66904,66906,66908],{"class":169,"line":170},[167,66903,53297],{"class":512},[167,66905,53300],{"class":516},[167,66907,53303],{"class":173},[167,66909,537],{"class":512},[167,66911,66912],{"class":169,"line":191},[167,66913,741],{"emptyLinePlaceholder":740},[167,66915,66916,66918,66920],{"class":169,"line":205},[167,66917,513],{"class":512},[167,66919,52635],{"class":516},[167,66921,537],{"class":512},[167,66923,66924],{"class":169,"line":219},[167,66925,741],{"emptyLinePlaceholder":740},[167,66927,66928,66930,66932,66934,66936,66938],{"class":169,"line":230},[167,66929,513],{"class":512},[167,66931,53332],{"class":516},[167,66933,53314],{"class":173},[167,66935,523],{"class":512},[167,66937,53319],{"class":177},[167,66939,537],{"class":512},[167,66941,66942,66944,66946,66948,66950,66952],{"class":169,"line":241},[167,66943,542],{"class":512},[167,66945,53342],{"class":516},[167,66947,53345],{"class":173},[167,66949,523],{"class":512},[167,66951,53350],{"class":177},[167,66953,537],{"class":512},[167,66955,66956,66958,66960,66962,66964],{"class":169,"line":261},[167,66957,542],{"class":512},[167,66959,53405],{"class":516},[167,66961,57303],{"class":512},[167,66963,53405],{"class":516},[167,66965,537],{"class":512},[167,66967,66968,66970,66972],{"class":169,"line":773},[167,66969,542],{"class":512},[167,66971,2113],{"class":516},[167,66973,537],{"class":512},[167,66975,66976,66978],{"class":169,"line":779},[167,66977,8433],{"class":516},[167,66979,17598],{"class":512},[167,66981,66982,66984,66986,66988],{"class":169,"line":785},[167,66983,56696],{"class":184},[167,66985,53435],{"class":512},[167,66987,1154],{"class":184},[167,66989,3359],{"class":512},[167,66991,66992,66994,66996,66998],{"class":169,"line":790},[167,66993,56685],{"class":184},[167,66995,53435],{"class":512},[167,66997,1154],{"class":184},[167,66999,3359],{"class":512},[167,67001,67002],{"class":169,"line":796},[167,67003,4231],{"class":512},[167,67005,67006],{"class":169,"line":802},[167,67007,741],{"emptyLinePlaceholder":740},[167,67009,67010,67013],{"class":169,"line":808},[167,67011,67012],{"class":516},"    table",[167,67014,17598],{"class":512},[167,67016,67017,67020,67022,67025],{"class":169,"line":814},[167,67018,67019],{"class":184},"      border-collapse",[167,67021,53435],{"class":512},[167,67023,67024],{"class":184},"collapse",[167,67026,3359],{"class":512},[167,67028,67029,67032,67034,67036],{"class":169,"line":820},[167,67030,67031],{"class":184},"      border-spacing",[167,67033,53435],{"class":512},[167,67035,1154],{"class":184},[167,67037,3359],{"class":512},[167,67039,67040,67042,67044,67046,67048,67050,67053],{"class":169,"line":826},[167,67041,63966],{"class":184},[167,67043,53435],{"class":512},[167,67045,2418],{"class":184},[167,67047,53490],{"class":731},[167,67049,53519],{"class":184},[167,67051,67052],{"class":184}," #c0c0c0",[167,67054,3359],{"class":512},[167,67056,67057,67059,67061,67064,67066],{"class":169,"line":832},[167,67058,56761],{"class":184},[167,67060,53435],{"class":512},[167,67062,67063],{"class":184},"500",[167,67065,53490],{"class":731},[167,67067,3359],{"class":512},[167,67069,67070,67072,67074,67076,67078,67080],{"class":169,"line":837},[167,67071,56696],{"class":184},[167,67073,53435],{"class":512},[167,67075,981],{"class":184},[167,67077,53490],{"class":731},[167,67079,53554],{"class":184},[167,67081,3359],{"class":512},[167,67083,67084,67086,67088,67090],{"class":169,"line":842},[167,67085,59275],{"class":184},[167,67087,53435],{"class":512},[167,67089,53590],{"class":184},[167,67091,3359],{"class":512},[167,67093,67094],{"class":169,"line":860},[167,67095,4231],{"class":512},[167,67097,67098],{"class":169,"line":876},[167,67099,741],{"emptyLinePlaceholder":740},[167,67101,67102,67105],{"class":169,"line":887},[167,67103,67104],{"class":516},"    th",[167,67106,17598],{"class":512},[167,67108,67109,67111,67113,67116],{"class":169,"line":892},[167,67110,56874],{"class":184},[167,67112,53435],{"class":512},[167,67114,67115],{"class":184},"#09c",[167,67117,3359],{"class":512},[167,67119,67120,67123,67125,67127,67129,67131,67134],{"class":169,"line":907},[167,67121,67122],{"class":184},"      font",[167,67124,53435],{"class":512},[167,67126,64328],{"class":184},[167,67128,66062],{"class":184},[167,67130,53490],{"class":731},[167,67132,67133],{"class":177}," \"微软雅黑\"",[167,67135,3359],{"class":512},[167,67137,67138,67140,67142,67144],{"class":169,"line":920},[167,67139,59405],{"class":184},[167,67141,53435],{"class":512},[167,67143,62831],{"class":184},[167,67145,3359],{"class":512},[167,67147,67148,67150,67152,67154,67156],{"class":169,"line":933},[167,67149,56775],{"class":184},[167,67151,53435],{"class":512},[167,67153,3000],{"class":184},[167,67155,53490],{"class":731},[167,67157,3359],{"class":512},[167,67159,67160],{"class":169,"line":946},[167,67161,4231],{"class":512},[167,67163,67164],{"class":169,"line":959},[167,67165,741],{"emptyLinePlaceholder":740},[167,67167,67168,67171],{"class":169,"line":964},[167,67169,67170],{"class":516},"    td",[167,67172,17598],{"class":512},[167,67174,67175,67177,67179,67181,67183,67185,67188],{"class":169,"line":987},[167,67176,63966],{"class":184},[167,67178,53435],{"class":512},[167,67180,2418],{"class":184},[167,67182,53490],{"class":731},[167,67184,53519],{"class":184},[167,67186,67187],{"class":184}," #d0d0d0",[167,67189,3359],{"class":512},[167,67191,67192,67194,67196,67199],{"class":169,"line":993},[167,67193,59405],{"class":184},[167,67195,53435],{"class":512},[167,67197,67198],{"class":184},"#404060",[167,67200,3359],{"class":512},[167,67202,67203,67205,67207,67209,67211],{"class":169,"line":998},[167,67204,56685],{"class":184},[167,67206,53435],{"class":512},[167,67208,2646],{"class":184},[167,67210,53490],{"class":731},[167,67212,3359],{"class":512},[167,67214,67215],{"class":169,"line":1010},[167,67216,4231],{"class":512},[167,67218,67219],{"class":169,"line":1022},[167,67220,741],{"emptyLinePlaceholder":740},[167,67222,67223,67226],{"class":169,"line":1027},[167,67224,67225],{"class":173},"    .allCheck",[167,67227,17598],{"class":512},[167,67229,67230,67232,67234,67236,67238],{"class":169,"line":1032},[167,67231,56761],{"class":184},[167,67233,53435],{"class":512},[167,67235,2812],{"class":184},[167,67237,53490],{"class":731},[167,67239,3359],{"class":512},[167,67241,67242],{"class":169,"line":1049},[167,67243,4231],{"class":512},[167,67245,67246,67248,67250],{"class":169,"line":10005},[167,67247,54412],{"class":512},[167,67249,2113],{"class":516},[167,67251,537],{"class":512},[167,67253,67254,67256,67258],{"class":169,"line":10011},[167,67255,575],{"class":512},[167,67257,53332],{"class":516},[167,67259,537],{"class":512},[167,67261,67262],{"class":169,"line":10038},[167,67263,741],{"emptyLinePlaceholder":740},[167,67265,67266,67268,67270],{"class":169,"line":10043},[167,67267,513],{"class":512},[167,67269,517],{"class":516},[167,67271,537],{"class":512},[167,67273,67274,67276,67278],{"class":169,"line":10049},[167,67275,542],{"class":512},[167,67277,68],{"class":516},[167,67279,537],{"class":512},[167,67281,67282,67284,67286],{"class":169,"line":10061},[167,67283,53339],{"class":512},[167,67285,74],{"class":516},[167,67287,537],{"class":512},[167,67289,67290,67292,67294,67296,67298,67301],{"class":169,"line":10073},[167,67291,57223],{"class":512},[167,67293,77],{"class":516},[167,67295,55479],{"class":173},[167,67297,523],{"class":512},[167,67299,67300],{"class":177},"\"allCheck\"",[167,67302,537],{"class":512},[167,67304,67305,67307,67309,67311,67313,67315,67317,67319,67321,67323,67325,67328,67331,67333,67335,67337,67340,67343,67345],{"class":169,"line":10085},[167,67306,57291],{"class":512},[167,67308,55812],{"class":516},[167,67310,555],{"class":173},[167,67312,523],{"class":512},[167,67314,55819],{"class":177},[167,67316,520],{"class":173},[167,67318,523],{"class":512},[167,67320,9682],{"class":177},[167,67322,16985],{"class":173},[167,67324,523],{"class":512},[167,67326,67327],{"class":177},"\"checkAll\"",[167,67329,67330],{"class":512},"> \u003C",[167,67332,167],{"class":516},[167,67334,55479],{"class":173},[167,67336,523],{"class":512},[167,67338,67339],{"class":177},"\"all\"",[167,67341,67342],{"class":512},">全选\u003C\u002F",[167,67344,167],{"class":516},[167,67346,537],{"class":512},[167,67348,67349,67351,67353],{"class":169,"line":11744},[167,67350,57396],{"class":512},[167,67352,77],{"class":516},[167,67354,537],{"class":512},[167,67356,67357,67359,67361,67364,67366],{"class":169,"line":11769},[167,67358,57223],{"class":512},[167,67360,77],{"class":516},[167,67362,67363],{"class":512},">商品\u003C\u002F",[167,67365,77],{"class":516},[167,67367,537],{"class":512},[167,67369,67370,67372,67374,67377,67379],{"class":169,"line":11792},[167,67371,57223],{"class":512},[167,67373,77],{"class":516},[167,67375,67376],{"class":512},">商家\u003C\u002F",[167,67378,77],{"class":516},[167,67380,537],{"class":512},[167,67382,67383,67385,67387,67390,67392],{"class":169,"line":11816},[167,67384,57223],{"class":512},[167,67386,77],{"class":516},[167,67388,67389],{"class":512},">价格\u003C\u002F",[167,67391,77],{"class":516},[167,67393,537],{"class":512},[167,67395,67396,67398,67400],{"class":169,"line":11821},[167,67397,53774],{"class":512},[167,67399,74],{"class":516},[167,67401,537],{"class":512},[167,67403,67404,67406,67408],{"class":169,"line":11826},[167,67405,53339],{"class":512},[167,67407,74],{"class":516},[167,67409,537],{"class":512},[167,67411,67412,67414,67416],{"class":169,"line":11831},[167,67413,57223],{"class":512},[167,67415,90],{"class":516},[167,67417,537],{"class":512},[167,67419,67420,67422,67424,67426,67428,67430,67432,67434,67437,67439,67441,67444],{"class":169,"line":11840},[167,67421,57291],{"class":512},[167,67423,55812],{"class":516},[167,67425,555],{"class":173},[167,67427,523],{"class":512},[167,67429,55819],{"class":177},[167,67431,520],{"class":173},[167,67433,523],{"class":512},[167,67435,67436],{"class":177},"\"check\"",[167,67438,55479],{"class":173},[167,67440,523],{"class":512},[167,67442,67443],{"class":177},"\"ck\"",[167,67445,537],{"class":512},[167,67447,67448,67450,67452],{"class":169,"line":11845},[167,67449,57396],{"class":512},[167,67451,90],{"class":516},[167,67453,537],{"class":512},[167,67455,67456,67458,67460,67462,67464],{"class":169,"line":11851},[167,67457,57223],{"class":512},[167,67459,90],{"class":516},[167,67461,63162],{"class":512},[167,67463,90],{"class":516},[167,67465,537],{"class":512},[167,67467,67468,67470,67472,67475,67477],{"class":169,"line":11872},[167,67469,57223],{"class":512},[167,67471,90],{"class":516},[167,67473,67474],{"class":512},">小米\u003C\u002F",[167,67476,90],{"class":516},[167,67478,537],{"class":512},[167,67480,67481,67483,67485,67488,67490],{"class":169,"line":11878},[167,67482,57223],{"class":512},[167,67484,90],{"class":516},[167,67486,67487],{"class":512},">￥1999\u003C\u002F",[167,67489,90],{"class":516},[167,67491,537],{"class":512},[167,67493,67494,67496,67498],{"class":169,"line":11892},[167,67495,53774],{"class":512},[167,67497,74],{"class":516},[167,67499,537],{"class":512},[167,67501,67502,67504,67506],{"class":169,"line":11898},[167,67503,53339],{"class":512},[167,67505,74],{"class":516},[167,67507,537],{"class":512},[167,67509,67510,67512,67514],{"class":169,"line":11925},[167,67511,57223],{"class":512},[167,67513,90],{"class":516},[167,67515,537],{"class":512},[167,67517,67518,67520,67522,67524,67526,67528,67530,67532,67534,67536,67538,67540],{"class":169,"line":11934},[167,67519,57291],{"class":512},[167,67521,55812],{"class":516},[167,67523,555],{"class":173},[167,67525,523],{"class":512},[167,67527,55819],{"class":177},[167,67529,520],{"class":173},[167,67531,523],{"class":512},[167,67533,67436],{"class":177},[167,67535,55479],{"class":173},[167,67537,523],{"class":512},[167,67539,67443],{"class":177},[167,67541,537],{"class":512},[167,67543,67544,67546,67548],{"class":169,"line":11940},[167,67545,57396],{"class":512},[167,67547,90],{"class":516},[167,67549,537],{"class":512},[167,67551,67552,67554,67556,67559,67561],{"class":169,"line":11948},[167,67553,57223],{"class":512},[167,67555,90],{"class":516},[167,67557,67558],{"class":512},">小米净水器\u003C\u002F",[167,67560,90],{"class":516},[167,67562,537],{"class":512},[167,67564,67565,67567,67569,67571,67573],{"class":169,"line":11953},[167,67566,57223],{"class":512},[167,67568,90],{"class":516},[167,67570,67474],{"class":512},[167,67572,90],{"class":516},[167,67574,537],{"class":512},[167,67576,67577,67579,67581,67584,67586],{"class":169,"line":18630},[167,67578,57223],{"class":512},[167,67580,90],{"class":516},[167,67582,67583],{"class":512},">￥4999\u003C\u002F",[167,67585,90],{"class":516},[167,67587,537],{"class":512},[167,67589,67590,67592,67594],{"class":169,"line":18636},[167,67591,53774],{"class":512},[167,67593,74],{"class":516},[167,67595,537],{"class":512},[167,67597,67598,67600,67602],{"class":169,"line":18659},[167,67599,53339],{"class":512},[167,67601,74],{"class":516},[167,67603,537],{"class":512},[167,67605,67606,67608,67610],{"class":169,"line":18665},[167,67607,57223],{"class":512},[167,67609,90],{"class":516},[167,67611,537],{"class":512},[167,67613,67614,67616,67618,67620,67622,67624,67626,67628,67630,67632,67634,67636],{"class":169,"line":18688},[167,67615,57291],{"class":512},[167,67617,55812],{"class":516},[167,67619,555],{"class":173},[167,67621,523],{"class":512},[167,67623,55819],{"class":177},[167,67625,520],{"class":173},[167,67627,523],{"class":512},[167,67629,67436],{"class":177},[167,67631,55479],{"class":173},[167,67633,523],{"class":512},[167,67635,67443],{"class":177},[167,67637,537],{"class":512},[167,67639,67640,67642,67644],{"class":169,"line":18702},[167,67641,57396],{"class":512},[167,67643,90],{"class":516},[167,67645,537],{"class":512},[167,67647,67648,67650,67652,67655,67657],{"class":169,"line":18722},[167,67649,57223],{"class":512},[167,67651,90],{"class":516},[167,67653,67654],{"class":512},">小米电视\u003C\u002F",[167,67656,90],{"class":516},[167,67658,537],{"class":512},[167,67660,67661,67663,67665,67667,67669],{"class":169,"line":18728},[167,67662,57223],{"class":512},[167,67664,90],{"class":516},[167,67666,67474],{"class":512},[167,67668,90],{"class":516},[167,67670,537],{"class":512},[167,67672,67673,67675,67677,67680,67682],{"class":169,"line":18739},[167,67674,57223],{"class":512},[167,67676,90],{"class":516},[167,67678,67679],{"class":512},">￥5999\u003C\u002F",[167,67681,90],{"class":516},[167,67683,537],{"class":512},[167,67685,67686,67688,67690],{"class":169,"line":18762},[167,67687,53774],{"class":512},[167,67689,74],{"class":516},[167,67691,537],{"class":512},[167,67693,67694,67696,67698],{"class":169,"line":18784},[167,67695,54412],{"class":512},[167,67697,68],{"class":516},[167,67699,537],{"class":512},[167,67701,67702,67704,67706],{"class":169,"line":18789},[167,67703,542],{"class":512},[167,67705,53809],{"class":516},[167,67707,537],{"class":512},[167,67709,67710],{"class":169,"line":18795},[167,67711,67712],{"class":2268},"    \u002F\u002F 1. 获取大复选框\n",[167,67714,67715,67717,67720,67722,67724,67726,67728,67731],{"class":169,"line":18809},[167,67716,13249],{"class":731},[167,67718,67719],{"class":184}," checkAll",[167,67721,753],{"class":731},[167,67723,56386],{"class":512},[167,67725,56389],{"class":173},[167,67727,898],{"class":512},[167,67729,67730],{"class":177},"'#checkAll'",[167,67732,873],{"class":512},[167,67734,67735],{"class":169,"line":18822},[167,67736,67737],{"class":2268},"    \u002F\u002F 2. 获取所有的小复选框\n",[167,67739,67740,67742,67745,67747,67749,67751,67753,67756],{"class":169,"line":18827},[167,67741,13249],{"class":731},[167,67743,67744],{"class":184}," cks",[167,67746,753],{"class":731},[167,67748,56386],{"class":512},[167,67750,57670],{"class":173},[167,67752,898],{"class":512},[167,67754,67755],{"class":177},"'.ck'",[167,67757,873],{"class":512},[167,67759,67760],{"class":169,"line":18841},[167,67761,67762],{"class":2268},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[167,67764,67765,67768,67770,67772,67774,67776,67778],{"class":169,"line":18846},[167,67766,67767],{"class":512},"    checkAll.",[167,67769,59802],{"class":173},[167,67771,898],{"class":512},[167,67773,59807],{"class":177},[167,67775,14463],{"class":512},[167,67777,56439],{"class":731},[167,67779,56442],{"class":512},[167,67781,67782],{"class":169,"line":18852},[167,67783,67784],{"class":2268},"      \u002F\u002F 得到当前大复选框的选中状态\n",[167,67786,67787,67790],{"class":169,"line":18857},[167,67788,67789],{"class":2268},"      \u002F\u002F console.log(checkAll.checked)",[167,67791,67792],{"class":2268},"  \u002F\u002F 得到 是 true 或者是 false\n",[167,67794,67795],{"class":169,"line":18871},[167,67796,67797],{"class":2268},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[167,67799,67800,67802,67804,67806,67808,67810,67812,67814,67816,67819,67821,67823,67825],{"class":169,"line":18876},[167,67801,54279],{"class":731},[167,67803,3716],{"class":512},[167,67805,53843],{"class":731},[167,67807,11466],{"class":512},[167,67809,523],{"class":731},[167,67811,6125],{"class":184},[167,67813,11473],{"class":512},[167,67815,513],{"class":731},[167,67817,67818],{"class":512}," cks.",[167,67820,53964],{"class":184},[167,67822,5248],{"class":512},[167,67824,4336],{"class":731},[167,67826,14470],{"class":512},[167,67828,67829,67832,67834,67837],{"class":169,"line":18881},[167,67830,67831],{"class":512},"        cks[i].checked ",[167,67833,523],{"class":731},[167,67835,67836],{"class":184}," this",[167,67838,67839],{"class":512},".checked\n",[167,67841,67842],{"class":169,"line":18895},[167,67843,54393],{"class":512},[167,67845,67846],{"class":169,"line":18907},[167,67847,35463],{"class":512},[167,67849,67850],{"class":169,"line":18912},[167,67851,67852],{"class":2268},"    \u002F\u002F 5. 小复选框控制大复选框\n",[167,67854,67855],{"class":169,"line":18925},[167,67856,741],{"emptyLinePlaceholder":740},[167,67858,67859,67861,67863,67865,67867,67869,67871,67873,67875,67877,67879,67881,67883],{"class":169,"line":18930},[167,67860,967],{"class":731},[167,67862,3716],{"class":512},[167,67864,53843],{"class":731},[167,67866,11466],{"class":512},[167,67868,523],{"class":731},[167,67870,6125],{"class":184},[167,67872,11473],{"class":512},[167,67874,513],{"class":731},[167,67876,67818],{"class":512},[167,67878,53964],{"class":184},[167,67880,5248],{"class":512},[167,67882,4336],{"class":731},[167,67884,14470],{"class":512},[167,67886,67887],{"class":169,"line":18935},[167,67888,67889],{"class":2268},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[167,67891,67892,67895,67897,67899,67901,67903,67905],{"class":169,"line":18940},[167,67893,67894],{"class":512},"      cks[i].",[167,67896,59802],{"class":173},[167,67898,898],{"class":512},[167,67900,59807],{"class":177},[167,67902,14463],{"class":512},[167,67904,56439],{"class":731},[167,67906,56442],{"class":512},[167,67908,67909],{"class":169,"line":18953},[167,67910,67911],{"class":2268},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[167,67913,67914],{"class":169,"line":18958},[167,67915,67916],{"class":2268},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[167,67918,67919],{"class":169,"line":34636},[167,67920,67921],{"class":2268},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[167,67923,67924],{"class":169,"line":34642},[167,67925,67926],{"class":2268},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[167,67928,67929,67932,67934,67936,67938,67940,67943,67945,67947,67949,67951],{"class":169,"line":34648},[167,67930,67931],{"class":512},"        checkAll.checked ",[167,67933,523],{"class":731},[167,67935,56386],{"class":512},[167,67937,57670],{"class":173},[167,67939,898],{"class":512},[167,67941,67942],{"class":177},"'.ck:checked'",[167,67944,32833],{"class":512},[167,67946,53964],{"class":184},[167,67948,59895],{"class":731},[167,67950,67818],{"class":512},[167,67952,57820],{"class":184},[167,67954,67955],{"class":169,"line":34654},[167,67956,66804],{"class":512},[167,67958,67959],{"class":169,"line":34660},[167,67960,4231],{"class":512},[167,67962,67963,67965,67967],{"class":169,"line":34671},[167,67964,54412],{"class":512},[167,67966,53809],{"class":516},[167,67968,537],{"class":512},[167,67970,67971,67973,67975],{"class":169,"line":34677},[167,67972,575],{"class":512},[167,67974,517],{"class":516},[167,67976,537],{"class":512},[167,67978,67979],{"class":169,"line":34697},[167,67980,741],{"emptyLinePlaceholder":740},[167,67982,67983,67985,67987],{"class":169,"line":34703},[167,67984,575],{"class":512},[167,67986,52635],{"class":516},[167,67988,537],{"class":512},[19,67990,67991],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67993,67994],{},"用好之间比较得到的布尔值！！！",[19,67996,67997,67998,68001,68002,3716,68005,2784,68007,68010],{},"在 JS 里访问的时候，",[34,67999,68000],{},"checkbox.checked"," 是一个 ",[2354,68003,68004],{},"布尔值",[34,68006,3428],{},[34,68008,68009],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68012,68013,68014,68017,68018],{},"HTML 的 ",[34,68015,68016],{},"checked=\"checked\""," 只是 ",[2354,68019,68020,68021,68024],{},"初始值；JS 的 ",[34,68022,68023],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68026,68027],{},"：checked是一个伪类选择器",[19,68029,68030],{},[3528,68031],{"alt":32,"src":68032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68034,68035,68038],{},[68036,68037],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68040,68041],{},[3528,68042],{"alt":32,"src":68043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68045,68047],{"id":68046},"_33-dom事件进阶","3.3 DOM事件进阶",[494,68049,68051],{"id":68050},"_331-事件流","3.3.1 事件流",[19,68053,68054],{},[3528,68055],{"alt":32,"src":68056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24024,68058,68060],{"id":68059},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68062,68063],{},[3528,68064],{"alt":32,"src":68065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,68067,68069],{"className":52633,"code":68068,"language":52635,"meta":32,"style":32},"\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",[34,68070,68071,68081,68095,68099,68107,68121,68141,68153,68161,68168,68180,68192,68202,68206,68210,68217,68229,68241,68251,68255,68263,68271,68275,68283,68298,68317,68325,68333,68353,68373,68389,68400,68408,68425,68436,68444,68461,68472,68480,68488,68496,68500],{"__ignoreMap":32},[167,68072,68073,68075,68077,68079],{"class":169,"line":170},[167,68074,53297],{"class":512},[167,68076,53300],{"class":516},[167,68078,53303],{"class":173},[167,68080,537],{"class":512},[167,68082,68083,68085,68087,68089,68091,68093],{"class":169,"line":191},[167,68084,513],{"class":512},[167,68086,52635],{"class":516},[167,68088,53314],{"class":173},[167,68090,523],{"class":512},[167,68092,53319],{"class":177},[167,68094,537],{"class":512},[167,68096,68097],{"class":169,"line":205},[167,68098,741],{"emptyLinePlaceholder":740},[167,68100,68101,68103,68105],{"class":169,"line":219},[167,68102,513],{"class":512},[167,68104,53332],{"class":516},[167,68106,537],{"class":512},[167,68108,68109,68111,68113,68115,68117,68119],{"class":169,"line":230},[167,68110,542],{"class":512},[167,68112,53342],{"class":516},[167,68114,53345],{"class":173},[167,68116,523],{"class":512},[167,68118,53350],{"class":177},[167,68120,537],{"class":512},[167,68122,68123,68125,68127,68129,68131,68133,68135,68137,68139],{"class":169,"line":241},[167,68124,542],{"class":512},[167,68126,53342],{"class":516},[167,68128,520],{"class":173},[167,68130,523],{"class":512},[167,68132,53389],{"class":177},[167,68134,53369],{"class":173},[167,68136,523],{"class":512},[167,68138,53396],{"class":177},[167,68140,537],{"class":512},[167,68142,68143,68145,68147,68149,68151],{"class":169,"line":261},[167,68144,542],{"class":512},[167,68146,53405],{"class":516},[167,68148,53408],{"class":512},[167,68150,53405],{"class":516},[167,68152,537],{"class":512},[167,68154,68155,68157,68159],{"class":169,"line":773},[167,68156,542],{"class":512},[167,68158,2113],{"class":516},[167,68160,537],{"class":512},[167,68162,68163,68166],{"class":169,"line":779},[167,68164,68165],{"class":173},"    .father",[167,68167,17598],{"class":512},[167,68169,68170,68172,68174,68176,68178],{"class":169,"line":785},[167,68171,56761],{"class":184},[167,68173,53435],{"class":512},[167,68175,67063],{"class":184},[167,68177,53490],{"class":731},[167,68179,3359],{"class":512},[167,68181,68182,68184,68186,68188,68190],{"class":169,"line":790},[167,68183,56775],{"class":184},[167,68185,53435],{"class":512},[167,68187,67063],{"class":184},[167,68189,53490],{"class":731},[167,68191,3359],{"class":512},[167,68193,68194,68196,68198,68200],{"class":169,"line":796},[167,68195,56874],{"class":184},[167,68197,53435],{"class":512},[167,68199,53643],{"class":184},[167,68201,3359],{"class":512},[167,68203,68204],{"class":169,"line":802},[167,68205,4231],{"class":512},[167,68207,68208],{"class":169,"line":808},[167,68209,741],{"emptyLinePlaceholder":740},[167,68211,68212,68215],{"class":169,"line":814},[167,68213,68214],{"class":173},"    .son",[167,68216,17598],{"class":512},[167,68218,68219,68221,68223,68225,68227],{"class":169,"line":820},[167,68220,56761],{"class":184},[167,68222,53435],{"class":512},[167,68224,3776],{"class":184},[167,68226,53490],{"class":731},[167,68228,3359],{"class":512},[167,68230,68231,68233,68235,68237,68239],{"class":169,"line":826},[167,68232,56775],{"class":184},[167,68234,53435],{"class":512},[167,68236,3776],{"class":184},[167,68238,53490],{"class":731},[167,68240,3359],{"class":512},[167,68242,68243,68245,68247,68249],{"class":169,"line":832},[167,68244,56874],{"class":184},[167,68246,53435],{"class":512},[167,68248,56879],{"class":184},[167,68250,3359],{"class":512},[167,68252,68253],{"class":169,"line":837},[167,68254,4231],{"class":512},[167,68256,68257,68259,68261],{"class":169,"line":842},[167,68258,54412],{"class":512},[167,68260,2113],{"class":516},[167,68262,537],{"class":512},[167,68264,68265,68267,68269],{"class":169,"line":860},[167,68266,575],{"class":512},[167,68268,53332],{"class":516},[167,68270,537],{"class":512},[167,68272,68273],{"class":169,"line":876},[167,68274,741],{"emptyLinePlaceholder":740},[167,68276,68277,68279,68281],{"class":169,"line":887},[167,68278,513],{"class":512},[167,68280,517],{"class":516},[167,68282,537],{"class":512},[167,68284,68285,68287,68289,68291,68293,68296],{"class":169,"line":892},[167,68286,542],{"class":512},[167,68288,53609],{"class":516},[167,68290,55479],{"class":173},[167,68292,523],{"class":512},[167,68294,68295],{"class":177},"\"father\"",[167,68297,537],{"class":512},[167,68299,68300,68302,68304,68306,68308,68311,68313,68315],{"class":169,"line":907},[167,68301,53339],{"class":512},[167,68303,53609],{"class":516},[167,68305,55479],{"class":173},[167,68307,523],{"class":512},[167,68309,68310],{"class":177},"\"son\"",[167,68312,57303],{"class":512},[167,68314,53609],{"class":516},[167,68316,537],{"class":512},[167,68318,68319,68321,68323],{"class":169,"line":920},[167,68320,54412],{"class":512},[167,68322,53609],{"class":516},[167,68324,537],{"class":512},[167,68326,68327,68329,68331],{"class":169,"line":933},[167,68328,542],{"class":512},[167,68330,53809],{"class":516},[167,68332,537],{"class":512},[167,68334,68335,68337,68340,68342,68344,68346,68348,68351],{"class":169,"line":946},[167,68336,13249],{"class":731},[167,68338,68339],{"class":184}," fa",[167,68341,753],{"class":731},[167,68343,56386],{"class":512},[167,68345,56389],{"class":173},[167,68347,898],{"class":512},[167,68349,68350],{"class":177},"'.father'",[167,68352,873],{"class":512},[167,68354,68355,68357,68360,68362,68364,68366,68368,68371],{"class":169,"line":959},[167,68356,13249],{"class":731},[167,68358,68359],{"class":184}," son",[167,68361,753],{"class":731},[167,68363,56386],{"class":512},[167,68365,56389],{"class":173},[167,68367,898],{"class":512},[167,68369,68370],{"class":177},"'.son'",[167,68372,873],{"class":512},[167,68374,68375,68377,68379,68381,68383,68385,68387],{"class":169,"line":964},[167,68376,54402],{"class":512},[167,68378,59802],{"class":173},[167,68380,898],{"class":512},[167,68382,59807],{"class":177},[167,68384,14463],{"class":512},[167,68386,56439],{"class":731},[167,68388,56442],{"class":512},[167,68390,68391,68393,68395,68398],{"class":169,"line":987},[167,68392,60914],{"class":173},[167,68394,898],{"class":512},[167,68396,68397],{"class":177},"'woshiu1'",[167,68399,873],{"class":512},[167,68401,68402,68404,68406],{"class":169,"line":993},[167,68403,56525],{"class":512},[167,68405,3428],{"class":184},[167,68407,873],{"class":512},[167,68409,68410,68413,68415,68417,68419,68421,68423],{"class":169,"line":998},[167,68411,68412],{"class":512},"    fa.",[167,68414,59802],{"class":173},[167,68416,898],{"class":512},[167,68418,59807],{"class":177},[167,68420,14463],{"class":512},[167,68422,56439],{"class":731},[167,68424,56442],{"class":512},[167,68426,68427,68429,68431,68434],{"class":169,"line":1010},[167,68428,60914],{"class":173},[167,68430,898],{"class":512},[167,68432,68433],{"class":177},"'1'",[167,68435,873],{"class":512},[167,68437,68438,68440,68442],{"class":169,"line":1022},[167,68439,56525],{"class":512},[167,68441,3428],{"class":184},[167,68443,873],{"class":512},[167,68445,68446,68449,68451,68453,68455,68457,68459],{"class":169,"line":1027},[167,68447,68448],{"class":512},"    son.",[167,68450,59802],{"class":173},[167,68452,898],{"class":512},[167,68454,59807],{"class":177},[167,68456,14463],{"class":512},[167,68458,56439],{"class":731},[167,68460,56442],{"class":512},[167,68462,68463,68465,68467,68470],{"class":169,"line":1032},[167,68464,60914],{"class":173},[167,68466,898],{"class":512},[167,68468,68469],{"class":177},"'2'",[167,68471,873],{"class":512},[167,68473,68474,68476,68478],{"class":169,"line":1049},[167,68475,56525],{"class":512},[167,68477,3428],{"class":184},[167,68479,873],{"class":512},[167,68481,68482,68484,68486],{"class":169,"line":10005},[167,68483,54412],{"class":512},[167,68485,53809],{"class":516},[167,68487,537],{"class":512},[167,68489,68490,68492,68494],{"class":169,"line":10011},[167,68491,575],{"class":512},[167,68493,517],{"class":516},[167,68495,537],{"class":512},[167,68497,68498],{"class":169,"line":10038},[167,68499,741],{"emptyLinePlaceholder":740},[167,68501,68502,68504,68506],{"class":169,"line":10043},[167,68503,575],{"class":512},[167,68505,52635],{"class":516},[167,68507,537],{"class":512},[19,68509,68510],{},[3528,68511],{"alt":32,"src":68512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68514,68515],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24024,68517,68519],{"id":68518},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68521,68522],{},[3528,68523],{"alt":32,"src":68524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68526,68527],{},"反着来",[19,68529,68530],{},"注意是同名事件，比如都是‘click’",[24024,68532,68534],{"id":68533},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68536,68537],{},[3528,68538],{"alt":32,"src":68539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24024,68541,68543],{"id":68542},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68545,68546],{},[3528,68547],{"alt":32,"src":68548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68550,68551],{},[3528,68552],{"alt":32,"src":68553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24024,68555,68557],{"id":68556},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[40,68559,68560],{},[43,68561,68562],{},"事件类型的区别",[19,68564,68565],{},[3528,68566],{"alt":32,"src":68567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68569,68570],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[40,68572,68573],{"start":191},[43,68574,68575],{},"注册事件的区别",[19,68577,68578],{},[3528,68579],{"alt":32,"src":68580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24024,68582,68584],{"id":68583},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68586,68587],{},[3528,68588],{"alt":32,"src":68589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68591,68592],{},[3528,68593],{"alt":32,"src":68594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,68596,68598],{"className":503,"code":68597,"language":505,"meta":32,"style":32},"\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",[34,68599,68600,68608,68625,68648,68656,68661,68666,68671,68675,68683,68691],{"__ignoreMap":32},[167,68601,68602,68604,68606],{"class":169,"line":170},[167,68603,513],{"class":512},[167,68605,517],{"class":516},[167,68607,537],{"class":512},[167,68609,68610,68612,68615,68618,68620,68623],{"class":169,"line":191},[167,68611,542],{"class":512},[167,68613,68614],{"class":516},"form",[167,68616,68617],{"class":173}," action",[167,68619,523],{"class":512},[167,68621,68622],{"class":177},"\"http:\u002F\u002Fwww.itcast.cn\"",[167,68624,537],{"class":512},[167,68626,68627,68629,68631,68633,68635,68638,68641,68643,68646],{"class":169,"line":205},[167,68628,53339],{"class":512},[167,68630,55812],{"class":516},[167,68632,555],{"class":173},[167,68634,523],{"class":512},[167,68636,68637],{"class":177},"\"submit\"",[167,68639,68640],{"class":173}," value",[167,68642,523],{"class":512},[167,68644,68645],{"class":177},"\"免费注册\"",[167,68647,537],{"class":512},[167,68649,68650,68652,68654],{"class":169,"line":219},[167,68651,53339],{"class":512},[167,68653,53809],{"class":516},[167,68655,537],{"class":512},[167,68657,68658],{"class":169,"line":230},[167,68659,68660],{"class":512},"      const form = document.querySelector('form')\n",[167,68662,68663],{"class":169,"line":241},[167,68664,68665],{"class":512},"      form.addEventListener('submit', function (e) {\n",[167,68667,68668],{"class":169,"line":261},[167,68669,68670],{"class":512},"        e.preventDefault()\n",[167,68672,68673],{"class":169,"line":773},[167,68674,66804],{"class":512},[167,68676,68677,68679,68681],{"class":169,"line":779},[167,68678,53774],{"class":512},[167,68680,53809],{"class":516},[167,68682,537],{"class":512},[167,68684,68685,68687,68689],{"class":169,"line":785},[167,68686,54412],{"class":512},[167,68688,68614],{"class":516},[167,68690,537],{"class":512},[167,68692,68693,68695,68697],{"class":169,"line":790},[167,68694,575],{"class":512},[167,68696,517],{"class":516},[167,68698,537],{"class":512},[19,68700,68701],{},"点击不在跳转！！！",[494,68703,68705],{"id":68704},"_332-事件委托","3.3.2 事件委托",[19,68707,68708],{},[3528,68709],{"alt":32,"src":68710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,68712,68714],{"className":52633,"code":68713,"language":52635,"meta":32,"style":32},"\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",[34,68715,68716,68726,68740,68744,68752,68766,68786,68798,68806,68810,68818,68826,68838,68850,68862,68874,68886,68899,68907,68915,68920,68939,68960,68965,68970,68975,68980,68989,68993,69003,69007,69012,69017,69031,69041,69045,69049,69057,69065,69069],{"__ignoreMap":32},[167,68717,68718,68720,68722,68724],{"class":169,"line":170},[167,68719,53297],{"class":512},[167,68721,53300],{"class":516},[167,68723,53303],{"class":173},[167,68725,537],{"class":512},[167,68727,68728,68730,68732,68734,68736,68738],{"class":169,"line":191},[167,68729,513],{"class":512},[167,68731,52635],{"class":516},[167,68733,53314],{"class":173},[167,68735,523],{"class":512},[167,68737,53319],{"class":177},[167,68739,537],{"class":512},[167,68741,68742],{"class":169,"line":205},[167,68743,741],{"emptyLinePlaceholder":740},[167,68745,68746,68748,68750],{"class":169,"line":219},[167,68747,513],{"class":512},[167,68749,53332],{"class":516},[167,68751,537],{"class":512},[167,68753,68754,68756,68758,68760,68762,68764],{"class":169,"line":230},[167,68755,542],{"class":512},[167,68757,53342],{"class":516},[167,68759,53345],{"class":173},[167,68761,523],{"class":512},[167,68763,53350],{"class":177},[167,68765,537],{"class":512},[167,68767,68768,68770,68772,68774,68776,68778,68780,68782,68784],{"class":169,"line":241},[167,68769,542],{"class":512},[167,68771,53342],{"class":516},[167,68773,520],{"class":173},[167,68775,523],{"class":512},[167,68777,53389],{"class":177},[167,68779,53369],{"class":173},[167,68781,523],{"class":512},[167,68783,53396],{"class":177},[167,68785,537],{"class":512},[167,68787,68788,68790,68792,68794,68796],{"class":169,"line":261},[167,68789,542],{"class":512},[167,68791,53405],{"class":516},[167,68793,53408],{"class":512},[167,68795,53405],{"class":516},[167,68797,537],{"class":512},[167,68799,68800,68802,68804],{"class":169,"line":773},[167,68801,575],{"class":512},[167,68803,53332],{"class":516},[167,68805,537],{"class":512},[167,68807,68808],{"class":169,"line":779},[167,68809,741],{"emptyLinePlaceholder":740},[167,68811,68812,68814,68816],{"class":169,"line":785},[167,68813,513],{"class":512},[167,68815,517],{"class":516},[167,68817,537],{"class":512},[167,68819,68820,68822,68824],{"class":169,"line":790},[167,68821,542],{"class":512},[167,68823,3205],{"class":516},[167,68825,537],{"class":512},[167,68827,68828,68830,68832,68834,68836],{"class":169,"line":796},[167,68829,53339],{"class":512},[167,68831,43],{"class":516},[167,68833,55956],{"class":512},[167,68835,43],{"class":516},[167,68837,537],{"class":512},[167,68839,68840,68842,68844,68846,68848],{"class":169,"line":802},[167,68841,53339],{"class":512},[167,68843,43],{"class":516},[167,68845,55975],{"class":512},[167,68847,43],{"class":516},[167,68849,537],{"class":512},[167,68851,68852,68854,68856,68858,68860],{"class":169,"line":808},[167,68853,53339],{"class":512},[167,68855,43],{"class":516},[167,68857,55994],{"class":512},[167,68859,43],{"class":516},[167,68861,537],{"class":512},[167,68863,68864,68866,68868,68870,68872],{"class":169,"line":814},[167,68865,53339],{"class":512},[167,68867,43],{"class":516},[167,68869,56013],{"class":512},[167,68871,43],{"class":516},[167,68873,537],{"class":512},[167,68875,68876,68878,68880,68882,68884],{"class":169,"line":820},[167,68877,53339],{"class":512},[167,68879,43],{"class":516},[167,68881,56032],{"class":512},[167,68883,43],{"class":516},[167,68885,537],{"class":512},[167,68887,68888,68890,68892,68895,68897],{"class":169,"line":826},[167,68889,53339],{"class":512},[167,68891,19],{"class":516},[167,68893,68894],{"class":512},">我不需要变色\u003C\u002F",[167,68896,19],{"class":516},[167,68898,537],{"class":512},[167,68900,68901,68903,68905],{"class":169,"line":832},[167,68902,54412],{"class":512},[167,68904,3205],{"class":516},[167,68906,537],{"class":512},[167,68908,68909,68911,68913],{"class":169,"line":837},[167,68910,542],{"class":512},[167,68912,53809],{"class":516},[167,68914,537],{"class":512},[167,68916,68917],{"class":169,"line":842},[167,68918,68919],{"class":2268},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[167,68921,68922,68924,68926,68928,68930,68932,68934,68937],{"class":169,"line":860},[167,68923,13249],{"class":731},[167,68925,63281],{"class":184},[167,68927,753],{"class":731},[167,68929,56386],{"class":512},[167,68931,56389],{"class":173},[167,68933,898],{"class":512},[167,68935,68936],{"class":177},"'ul'",[167,68938,873],{"class":512},[167,68940,68941,68944,68946,68948,68950,68952,68954,68956,68958],{"class":169,"line":876},[167,68942,68943],{"class":512},"    ul.",[167,68945,59802],{"class":173},[167,68947,898],{"class":512},[167,68949,59807],{"class":177},[167,68951,14463],{"class":512},[167,68953,56439],{"class":731},[167,68955,3716],{"class":512},[167,68957,2284],{"class":7246},[167,68959,14470],{"class":512},[167,68961,68962],{"class":169,"line":887},[167,68963,68964],{"class":2268},"      \u002F\u002F alert(1)\n",[167,68966,68967],{"class":169,"line":892},[167,68968,68969],{"class":2268},"      \u002F\u002F e.target就是我们点击的对象\n",[167,68971,68972],{"class":169,"line":907},[167,68973,68974],{"class":2268},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[167,68976,68977],{"class":169,"line":920},[167,68978,68979],{"class":2268},"      \u002F\u002F e.target.style.color = 'red'\n",[167,68981,68982,68984,68986],{"class":169,"line":933},[167,68983,60233],{"class":512},[167,68985,60236],{"class":173},[167,68987,68988],{"class":512},"(e)\n",[167,68990,68991],{"class":169,"line":946},[167,68992,741],{"emptyLinePlaceholder":740},[167,68994,68995,68997,69000],{"class":169,"line":959},[167,68996,60233],{"class":512},[167,68998,68999],{"class":173},"dir",[167,69001,69002],{"class":512},"(e.target)\n",[167,69004,69005],{"class":169,"line":964},[167,69006,741],{"emptyLinePlaceholder":740},[167,69008,69009],{"class":169,"line":987},[167,69010,69011],{"class":2268},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[167,69013,69014],{"class":169,"line":993},[167,69015,69016],{"class":2268},"      \u002F\u002F 通过tagName来进行判断\n",[167,69018,69019,69021,69024,69026,69029],{"class":169,"line":998},[167,69020,56470],{"class":731},[167,69022,69023],{"class":512}," (e.target.tagName ",[167,69025,56476],{"class":731},[167,69027,69028],{"class":177}," 'LI'",[167,69030,14470],{"class":512},[167,69032,69033,69036,69038],{"class":169,"line":1010},[167,69034,69035],{"class":512},"        e.target.style.color ",[167,69037,523],{"class":731},[167,69039,69040],{"class":177}," 'red'\n",[167,69042,69043],{"class":169,"line":1022},[167,69044,54393],{"class":512},[167,69046,69047],{"class":169,"line":1027},[167,69048,35463],{"class":512},[167,69050,69051,69053,69055],{"class":169,"line":1032},[167,69052,54412],{"class":512},[167,69054,53809],{"class":516},[167,69056,537],{"class":512},[167,69058,69059,69061,69063],{"class":169,"line":1049},[167,69060,575],{"class":512},[167,69062,517],{"class":516},[167,69064,537],{"class":512},[167,69066,69067],{"class":169,"line":10005},[167,69068,741],{"emptyLinePlaceholder":740},[167,69070,69071,69073,69075],{"class":169,"line":10011},[167,69072,575],{"class":512},[167,69074,52635],{"class":516},[167,69076,537],{"class":512},[19,69078,69079],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69081,69082],{},"if(e.target.ragName==='P') {}",[19,69084,69085],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69087,69088],{},"通过事件委托的方式实现tab栏切换改造：",[19,69090,69091],{},"一定要记住自定义属性！！！！！！",[19,69093,69094],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69096,69097],{},"id是自定义的属性名",[19,69099,69100],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,69102,69104],{"className":52633,"code":69103,"language":52635,"meta":32,"style":32},"\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",[34,69105,69106,69116,69130,69134,69142,69156,69176,69196,69208,69216,69222,69232,69242,69246,69250,69256,69268,69280,69292,69308,69312,69316,69322,69334,69346,69358,69368,69378,69382,69386,69394,69406,69416,69428,69432,69436,69444,69454,69464,69474,69478,69482,69492,69506,69518,69522,69526,69538,69548,69564,69574,69578,69582,69596,69606,69616,69620,69624,69630,69644,69648,69652,69660,69670,69674,69678,69687,69697,69701,69709,69717,69721,69729,69743,69757,69769,69777,69816,69848,69880,69912,69944,69952,69960,69974,70008,70042,70076,70110,70144,70152,70160,70168,70173,70178,70197,70202,70222,70230,70235,70248,70269,70282,70286,70291,70296,70309,70329,70357,70361,70365,70369,70377,70385,70389],{"__ignoreMap":32},[167,69107,69108,69110,69112,69114],{"class":169,"line":170},[167,69109,53297],{"class":512},[167,69111,53300],{"class":516},[167,69113,53303],{"class":173},[167,69115,537],{"class":512},[167,69117,69118,69120,69122,69124,69126,69128],{"class":169,"line":191},[167,69119,513],{"class":512},[167,69121,52635],{"class":516},[167,69123,53314],{"class":173},[167,69125,523],{"class":512},[167,69127,53319],{"class":177},[167,69129,537],{"class":512},[167,69131,69132],{"class":169,"line":205},[167,69133,741],{"emptyLinePlaceholder":740},[167,69135,69136,69138,69140],{"class":169,"line":219},[167,69137,513],{"class":512},[167,69139,53332],{"class":516},[167,69141,537],{"class":512},[167,69143,69144,69146,69148,69150,69152,69154],{"class":169,"line":230},[167,69145,542],{"class":512},[167,69147,53342],{"class":516},[167,69149,53345],{"class":173},[167,69151,523],{"class":512},[167,69153,53350],{"class":177},[167,69155,61116],{"class":512},[167,69157,69158,69160,69162,69164,69166,69168,69170,69172,69174],{"class":169,"line":241},[167,69159,542],{"class":512},[167,69161,53342],{"class":516},[167,69163,53361],{"class":173},[167,69165,523],{"class":512},[167,69167,53366],{"class":177},[167,69169,53369],{"class":173},[167,69171,523],{"class":512},[167,69173,53374],{"class":177},[167,69175,61116],{"class":512},[167,69177,69178,69180,69182,69184,69186,69188,69190,69192,69194],{"class":169,"line":261},[167,69179,542],{"class":512},[167,69181,53342],{"class":516},[167,69183,520],{"class":173},[167,69185,523],{"class":512},[167,69187,53389],{"class":177},[167,69189,53369],{"class":173},[167,69191,523],{"class":512},[167,69193,53396],{"class":177},[167,69195,61116],{"class":512},[167,69197,69198,69200,69202,69204,69206],{"class":169,"line":773},[167,69199,542],{"class":512},[167,69201,53405],{"class":516},[167,69203,65614],{"class":512},[167,69205,53405],{"class":516},[167,69207,537],{"class":512},[167,69209,69210,69212,69214],{"class":169,"line":779},[167,69211,542],{"class":512},[167,69213,2113],{"class":516},[167,69215,537],{"class":512},[167,69217,69218,69220],{"class":169,"line":785},[167,69219,8433],{"class":516},[167,69221,17598],{"class":512},[167,69223,69224,69226,69228,69230],{"class":169,"line":790},[167,69225,56696],{"class":184},[167,69227,53435],{"class":512},[167,69229,1154],{"class":184},[167,69231,3359],{"class":512},[167,69233,69234,69236,69238,69240],{"class":169,"line":796},[167,69235,56685],{"class":184},[167,69237,53435],{"class":512},[167,69239,1154],{"class":184},[167,69241,3359],{"class":512},[167,69243,69244],{"class":169,"line":802},[167,69245,4231],{"class":512},[167,69247,69248],{"class":169,"line":808},[167,69249,741],{"emptyLinePlaceholder":740},[167,69251,69252,69254],{"class":169,"line":814},[167,69253,65665],{"class":173},[167,69255,17598],{"class":512},[167,69257,69258,69260,69262,69264,69266],{"class":169,"line":820},[167,69259,56761],{"class":184},[167,69261,53435],{"class":512},[167,69263,65676],{"class":184},[167,69265,53490],{"class":731},[167,69267,3359],{"class":512},[167,69269,69270,69272,69274,69276,69278],{"class":169,"line":826},[167,69271,56775],{"class":184},[167,69273,53435],{"class":512},[167,69275,65689],{"class":184},[167,69277,53490],{"class":731},[167,69279,3359],{"class":512},[167,69281,69282,69284,69286,69288,69290],{"class":169,"line":832},[167,69283,56696],{"class":184},[167,69285,53435],{"class":512},[167,69287,2900],{"class":184},[167,69289,53490],{"class":731},[167,69291,3359],{"class":512},[167,69293,69294,69296,69298,69300,69302,69304,69306],{"class":169,"line":837},[167,69295,63966],{"class":184},[167,69297,53435],{"class":512},[167,69299,2418],{"class":184},[167,69301,53490],{"class":731},[167,69303,53519],{"class":184},[167,69305,64233],{"class":184},[167,69307,3359],{"class":512},[167,69309,69310],{"class":169,"line":842},[167,69311,4231],{"class":512},[167,69313,69314],{"class":169,"line":860},[167,69315,741],{"emptyLinePlaceholder":740},[167,69317,69318,69320],{"class":169,"line":876},[167,69319,65734],{"class":173},[167,69321,17598],{"class":512},[167,69323,69324,69326,69328,69330,69332],{"class":169,"line":887},[167,69325,56761],{"class":184},[167,69327,53435],{"class":512},[167,69329,981],{"class":184},[167,69331,2528],{"class":731},[167,69333,3359],{"class":512},[167,69335,69336,69338,69340,69342,69344],{"class":169,"line":892},[167,69337,56775],{"class":184},[167,69339,53435],{"class":512},[167,69341,3107],{"class":184},[167,69343,53490],{"class":731},[167,69345,3359],{"class":512},[167,69347,69348,69350,69352,69354,69356],{"class":169,"line":907},[167,69349,59348],{"class":184},[167,69351,53435],{"class":512},[167,69353,3107],{"class":184},[167,69355,53490],{"class":731},[167,69357,3359],{"class":512},[167,69359,69360,69362,69364,69366],{"class":169,"line":920},[167,69361,56999],{"class":184},[167,69363,53435],{"class":512},[167,69365,53475],{"class":184},[167,69367,3359],{"class":512},[167,69369,69370,69372,69374,69376],{"class":169,"line":933},[167,69371,57010],{"class":184},[167,69373,53435],{"class":512},[167,69375,53666],{"class":184},[167,69377,3359],{"class":512},[167,69379,69380],{"class":169,"line":946},[167,69381,4231],{"class":512},[167,69383,69384],{"class":169,"line":959},[167,69385,741],{"emptyLinePlaceholder":740},[167,69387,69388,69390,69392],{"class":169,"line":964},[167,69389,65734],{"class":173},[167,69391,65807],{"class":516},[167,69393,17598],{"class":512},[167,69395,69396,69398,69400,69402,69404],{"class":169,"line":987},[167,69397,56912],{"class":184},[167,69399,53435],{"class":512},[167,69401,3000],{"class":184},[167,69403,53490],{"class":731},[167,69405,3359],{"class":512},[167,69407,69408,69410,69412,69414],{"class":169,"line":993},[167,69409,64323],{"class":184},[167,69411,53435],{"class":512},[167,69413,65830],{"class":184},[167,69415,3359],{"class":512},[167,69417,69418,69420,69422,69424,69426],{"class":169,"line":998},[167,69419,63989],{"class":184},[167,69421,53435],{"class":512},[167,69423,2900],{"class":184},[167,69425,53490],{"class":731},[167,69427,3359],{"class":512},[167,69429,69430],{"class":169,"line":1010},[167,69431,4231],{"class":512},[167,69433,69434],{"class":169,"line":1022},[167,69435,741],{"emptyLinePlaceholder":740},[167,69437,69438,69440,69442],{"class":169,"line":1027},[167,69439,65734],{"class":173},[167,69441,63281],{"class":516},[167,69443,17598],{"class":512},[167,69445,69446,69448,69450,69452],{"class":169,"line":1032},[167,69447,56722],{"class":184},[167,69449,53435],{"class":512},[167,69451,56727],{"class":184},[167,69453,3359],{"class":512},[167,69455,69456,69458,69460,69462],{"class":169,"line":1049},[167,69457,56999],{"class":184},[167,69459,53435],{"class":512},[167,69461,53475],{"class":184},[167,69463,3359],{"class":512},[167,69465,69466,69468,69470,69472],{"class":169,"line":10005},[167,69467,57010],{"class":184},[167,69469,53435],{"class":512},[167,69471,53578],{"class":184},[167,69473,3359],{"class":512},[167,69475,69476],{"class":169,"line":10011},[167,69477,4231],{"class":512},[167,69479,69480],{"class":169,"line":10038},[167,69481,741],{"emptyLinePlaceholder":740},[167,69483,69484,69486,69488,69490],{"class":169,"line":10043},[167,69485,65734],{"class":173},[167,69487,63281],{"class":516},[167,69489,57065],{"class":516},[167,69491,17598],{"class":512},[167,69493,69494,69496,69498,69500,69502,69504],{"class":169,"line":10049},[167,69495,56696],{"class":184},[167,69497,53435],{"class":512},[167,69499,1154],{"class":184},[167,69501,10978],{"class":184},[167,69503,53490],{"class":731},[167,69505,3359],{"class":512},[167,69507,69508,69510,69512,69514,69516],{"class":169,"line":10061},[167,69509,56912],{"class":184},[167,69511,53435],{"class":512},[167,69513,2749],{"class":184},[167,69515,53490],{"class":731},[167,69517,3359],{"class":512},[167,69519,69520],{"class":169,"line":10073},[167,69521,4231],{"class":512},[167,69523,69524],{"class":169,"line":10085},[167,69525,741],{"emptyLinePlaceholder":740},[167,69527,69528,69530,69532,69534,69536],{"class":169,"line":11744},[167,69529,65734],{"class":173},[167,69531,63281],{"class":516},[167,69533,57065],{"class":516},[167,69535,3464],{"class":516},[167,69537,17598],{"class":512},[167,69539,69540,69542,69544,69546],{"class":169,"line":11769},[167,69541,65959],{"class":184},[167,69543,53435],{"class":512},[167,69545,56727],{"class":184},[167,69547,3359],{"class":512},[167,69549,69550,69552,69554,69556,69558,69560,69562],{"class":169,"line":11792},[167,69551,64221],{"class":184},[167,69553,53435],{"class":512},[167,69555,2287],{"class":184},[167,69557,53490],{"class":731},[167,69559,53519],{"class":184},[167,69561,65980],{"class":184},[167,69563,3359],{"class":512},[167,69565,69566,69568,69570,69572],{"class":169,"line":11816},[167,69567,59405],{"class":184},[167,69569,53435],{"class":512},[167,69571,64358],{"class":184},[167,69573,3359],{"class":512},[167,69575,69576],{"class":169,"line":11821},[167,69577,4231],{"class":512},[167,69579,69580],{"class":169,"line":11826},[167,69581,741],{"emptyLinePlaceholder":740},[167,69583,69584,69586,69588,69590,69592,69594],{"class":169,"line":11831},[167,69585,65734],{"class":173},[167,69587,63281],{"class":516},[167,69589,57065],{"class":516},[167,69591,3464],{"class":516},[167,69593,66013],{"class":173},[167,69595,17598],{"class":512},[167,69597,69598,69600,69602,69604],{"class":169,"line":11840},[167,69599,63780],{"class":184},[167,69601,53435],{"class":512},[167,69603,66024],{"class":184},[167,69605,3359],{"class":512},[167,69607,69608,69610,69612,69614],{"class":169,"line":11845},[167,69609,59405],{"class":184},[167,69611,53435],{"class":512},[167,69613,66024],{"class":184},[167,69615,3359],{"class":512},[167,69617,69618],{"class":169,"line":11851},[167,69619,4231],{"class":512},[167,69621,69622],{"class":169,"line":11872},[167,69623,741],{"emptyLinePlaceholder":740},[167,69625,69626,69628],{"class":169,"line":11878},[167,69627,66049],{"class":173},[167,69629,17598],{"class":512},[167,69631,69632,69634,69636,69638,69640,69642],{"class":169,"line":11892},[167,69633,56685],{"class":184},[167,69635,53435],{"class":512},[167,69637,1154],{"class":184},[167,69639,66062],{"class":184},[167,69641,53490],{"class":731},[167,69643,3359],{"class":512},[167,69645,69646],{"class":169,"line":11898},[167,69647,4231],{"class":512},[167,69649,69650],{"class":169,"line":11925},[167,69651,741],{"emptyLinePlaceholder":740},[167,69653,69654,69656,69658],{"class":169,"line":11934},[167,69655,66049],{"class":173},[167,69657,64163],{"class":173},[167,69659,17598],{"class":512},[167,69661,69662,69664,69666,69668],{"class":169,"line":11940},[167,69663,56999],{"class":184},[167,69665,53435],{"class":512},[167,69667,56727],{"class":184},[167,69669,3359],{"class":512},[167,69671,69672],{"class":169,"line":11948},[167,69673,4231],{"class":512},[167,69675,69676],{"class":169,"line":11953},[167,69677,741],{"emptyLinePlaceholder":740},[167,69679,69680,69682,69685],{"class":169,"line":18630},[167,69681,66049],{"class":173},[167,69683,69684],{"class":173}," .active",[167,69686,17598],{"class":512},[167,69688,69689,69691,69693,69695],{"class":169,"line":18636},[167,69690,56999],{"class":184},[167,69692,53435],{"class":512},[167,69694,62858],{"class":184},[167,69696,3359],{"class":512},[167,69698,69699],{"class":169,"line":18659},[167,69700,4231],{"class":512},[167,69702,69703,69705,69707],{"class":169,"line":18665},[167,69704,54412],{"class":512},[167,69706,2113],{"class":516},[167,69708,537],{"class":512},[167,69710,69711,69713,69715],{"class":169,"line":18688},[167,69712,575],{"class":512},[167,69714,53332],{"class":516},[167,69716,537],{"class":512},[167,69718,69719],{"class":169,"line":18702},[167,69720,741],{"emptyLinePlaceholder":740},[167,69722,69723,69725,69727],{"class":169,"line":18722},[167,69724,513],{"class":512},[167,69726,517],{"class":516},[167,69728,537],{"class":512},[167,69730,69731,69733,69735,69737,69739,69741],{"class":169,"line":18728},[167,69732,542],{"class":512},[167,69734,53609],{"class":516},[167,69736,55479],{"class":173},[167,69738,523],{"class":512},[167,69740,66164],{"class":177},[167,69742,537],{"class":512},[167,69744,69745,69747,69749,69751,69753,69755],{"class":169,"line":18739},[167,69746,53339],{"class":512},[167,69748,53609],{"class":516},[167,69750,55479],{"class":173},[167,69752,523],{"class":512},[167,69754,66179],{"class":177},[167,69756,537],{"class":512},[167,69758,69759,69761,69763,69765,69767],{"class":169,"line":18762},[167,69760,57223],{"class":512},[167,69762,494],{"class":516},[167,69764,66190],{"class":512},[167,69766,494],{"class":516},[167,69768,537],{"class":512},[167,69770,69771,69773,69775],{"class":169,"line":18784},[167,69772,57223],{"class":512},[167,69774,3205],{"class":516},[167,69776,537],{"class":512},[167,69778,69779,69781,69783,69785,69787,69789,69791,69793,69795,69797,69799,69801,69803,69806,69808,69810,69812,69814],{"class":169,"line":18789},[167,69780,57291],{"class":512},[167,69782,43],{"class":516},[167,69784,63041],{"class":512},[167,69786,2439],{"class":516},[167,69788,55479],{"class":173},[167,69790,523],{"class":512},[167,69792,61695],{"class":177},[167,69794,63046],{"class":173},[167,69796,523],{"class":512},[167,69798,66225],{"class":177},[167,69800,55941],{"class":173},[167,69802,523],{"class":512},[167,69804,69805],{"class":177},"\"0\"",[167,69807,66228],{"class":512},[167,69809,2439],{"class":516},[167,69811,57303],{"class":512},[167,69813,43],{"class":516},[167,69815,537],{"class":512},[167,69817,69818,69820,69822,69824,69826,69828,69830,69832,69834,69836,69838,69840,69842,69844,69846],{"class":169,"line":18795},[167,69819,57291],{"class":512},[167,69821,43],{"class":516},[167,69823,63041],{"class":512},[167,69825,2439],{"class":516},[167,69827,63046],{"class":173},[167,69829,523],{"class":512},[167,69831,66225],{"class":177},[167,69833,55941],{"class":173},[167,69835,523],{"class":512},[167,69837,1494],{"class":177},[167,69839,66255],{"class":512},[167,69841,2439],{"class":516},[167,69843,57303],{"class":512},[167,69845,43],{"class":516},[167,69847,537],{"class":512},[167,69849,69850,69852,69854,69856,69858,69860,69862,69864,69866,69868,69870,69872,69874,69876,69878],{"class":169,"line":18809},[167,69851,57291],{"class":512},[167,69853,43],{"class":516},[167,69855,63041],{"class":512},[167,69857,2439],{"class":516},[167,69859,63046],{"class":173},[167,69861,523],{"class":512},[167,69863,66225],{"class":177},[167,69865,55941],{"class":173},[167,69867,523],{"class":512},[167,69869,5734],{"class":177},[167,69871,66282],{"class":512},[167,69873,2439],{"class":516},[167,69875,57303],{"class":512},[167,69877,43],{"class":516},[167,69879,537],{"class":512},[167,69881,69882,69884,69886,69888,69890,69892,69894,69896,69898,69900,69902,69904,69906,69908,69910],{"class":169,"line":18822},[167,69883,57291],{"class":512},[167,69885,43],{"class":516},[167,69887,63041],{"class":512},[167,69889,2439],{"class":516},[167,69891,63046],{"class":173},[167,69893,523],{"class":512},[167,69895,66225],{"class":177},[167,69897,55941],{"class":173},[167,69899,523],{"class":512},[167,69901,5747],{"class":177},[167,69903,66309],{"class":512},[167,69905,2439],{"class":516},[167,69907,57303],{"class":512},[167,69909,43],{"class":516},[167,69911,537],{"class":512},[167,69913,69914,69916,69918,69920,69922,69924,69926,69928,69930,69932,69934,69936,69938,69940,69942],{"class":169,"line":18827},[167,69915,57291],{"class":512},[167,69917,43],{"class":516},[167,69919,63041],{"class":512},[167,69921,2439],{"class":516},[167,69923,63046],{"class":173},[167,69925,523],{"class":512},[167,69927,66225],{"class":177},[167,69929,55941],{"class":173},[167,69931,523],{"class":512},[167,69933,5760],{"class":177},[167,69935,66336],{"class":512},[167,69937,2439],{"class":516},[167,69939,57303],{"class":512},[167,69941,43],{"class":516},[167,69943,537],{"class":512},[167,69945,69946,69948,69950],{"class":169,"line":18841},[167,69947,57396],{"class":512},[167,69949,3205],{"class":516},[167,69951,537],{"class":512},[167,69953,69954,69956,69958],{"class":169,"line":18846},[167,69955,53774],{"class":512},[167,69957,53609],{"class":516},[167,69959,537],{"class":512},[167,69961,69962,69964,69966,69968,69970,69972],{"class":169,"line":18852},[167,69963,53339],{"class":512},[167,69965,53609],{"class":516},[167,69967,55479],{"class":173},[167,69969,523],{"class":512},[167,69971,66373],{"class":177},[167,69973,537],{"class":512},[167,69975,69976,69978,69980,69982,69984,69986,69988,69990,69992,69994,69996,69998,70000,70002,70004,70006],{"class":169,"line":18857},[167,69977,57223],{"class":512},[167,69979,53609],{"class":516},[167,69981,55479],{"class":173},[167,69983,523],{"class":512},[167,69985,66388],{"class":177},[167,69987,63041],{"class":512},[167,69989,3528],{"class":516},[167,69991,57228],{"class":173},[167,69993,523],{"class":512},[167,69995,66399],{"class":177},[167,69997,57236],{"class":173},[167,69999,523],{"class":512},[167,70001,9682],{"class":177},[167,70003,66408],{"class":512},[167,70005,53609],{"class":516},[167,70007,537],{"class":512},[167,70009,70010,70012,70014,70016,70018,70020,70022,70024,70026,70028,70030,70032,70034,70036,70038,70040],{"class":169,"line":18871},[167,70011,57223],{"class":512},[167,70013,53609],{"class":516},[167,70015,55479],{"class":173},[167,70017,523],{"class":512},[167,70019,64612],{"class":177},[167,70021,63041],{"class":512},[167,70023,3528],{"class":516},[167,70025,57228],{"class":173},[167,70027,523],{"class":512},[167,70029,66435],{"class":177},[167,70031,57236],{"class":173},[167,70033,523],{"class":512},[167,70035,9682],{"class":177},[167,70037,66408],{"class":512},[167,70039,53609],{"class":516},[167,70041,537],{"class":512},[167,70043,70044,70046,70048,70050,70052,70054,70056,70058,70060,70062,70064,70066,70068,70070,70072,70074],{"class":169,"line":18876},[167,70045,57223],{"class":512},[167,70047,53609],{"class":516},[167,70049,55479],{"class":173},[167,70051,523],{"class":512},[167,70053,64612],{"class":177},[167,70055,63041],{"class":512},[167,70057,3528],{"class":516},[167,70059,57228],{"class":173},[167,70061,523],{"class":512},[167,70063,66470],{"class":177},[167,70065,57236],{"class":173},[167,70067,523],{"class":512},[167,70069,9682],{"class":177},[167,70071,66408],{"class":512},[167,70073,53609],{"class":516},[167,70075,537],{"class":512},[167,70077,70078,70080,70082,70084,70086,70088,70090,70092,70094,70096,70098,70100,70102,70104,70106,70108],{"class":169,"line":18881},[167,70079,57223],{"class":512},[167,70081,53609],{"class":516},[167,70083,55479],{"class":173},[167,70085,523],{"class":512},[167,70087,64612],{"class":177},[167,70089,63041],{"class":512},[167,70091,3528],{"class":516},[167,70093,57228],{"class":173},[167,70095,523],{"class":512},[167,70097,66505],{"class":177},[167,70099,57236],{"class":173},[167,70101,523],{"class":512},[167,70103,9682],{"class":177},[167,70105,66408],{"class":512},[167,70107,53609],{"class":516},[167,70109,537],{"class":512},[167,70111,70112,70114,70116,70118,70120,70122,70124,70126,70128,70130,70132,70134,70136,70138,70140,70142],{"class":169,"line":18895},[167,70113,57223],{"class":512},[167,70115,53609],{"class":516},[167,70117,55479],{"class":173},[167,70119,523],{"class":512},[167,70121,64612],{"class":177},[167,70123,63041],{"class":512},[167,70125,3528],{"class":516},[167,70127,57228],{"class":173},[167,70129,523],{"class":512},[167,70131,66540],{"class":177},[167,70133,57236],{"class":173},[167,70135,523],{"class":512},[167,70137,9682],{"class":177},[167,70139,66408],{"class":512},[167,70141,53609],{"class":516},[167,70143,537],{"class":512},[167,70145,70146,70148,70150],{"class":169,"line":18907},[167,70147,53774],{"class":512},[167,70149,53609],{"class":516},[167,70151,537],{"class":512},[167,70153,70154,70156,70158],{"class":169,"line":18912},[167,70155,54412],{"class":512},[167,70157,53609],{"class":516},[167,70159,537],{"class":512},[167,70161,70162,70164,70166],{"class":169,"line":18925},[167,70163,542],{"class":512},[167,70165,53809],{"class":516},[167,70167,537],{"class":512},[167,70169,70170],{"class":169,"line":18930},[167,70171,70172],{"class":2268},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[167,70174,70175],{"class":169,"line":18935},[167,70176,70177],{"class":2268},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[167,70179,70180,70182,70184,70186,70188,70190,70192,70195],{"class":169,"line":18940},[167,70181,13249],{"class":731},[167,70183,63281],{"class":184},[167,70185,753],{"class":731},[167,70187,56386],{"class":512},[167,70189,56389],{"class":173},[167,70191,898],{"class":512},[167,70193,70194],{"class":177},"'.tab-nav ul'",[167,70196,873],{"class":512},[167,70198,70199],{"class":169,"line":18953},[167,70200,70201],{"class":2268},"    \u002F\u002F 2.添加事件\n",[167,70203,70204,70206,70208,70210,70212,70214,70216,70218,70220],{"class":169,"line":18958},[167,70205,68943],{"class":512},[167,70207,59802],{"class":173},[167,70209,898],{"class":512},[167,70211,59807],{"class":177},[167,70213,14463],{"class":512},[167,70215,56439],{"class":731},[167,70217,3716],{"class":512},[167,70219,2284],{"class":7246},[167,70221,14470],{"class":512},[167,70223,70224,70226,70228],{"class":169,"line":34636},[167,70225,60233],{"class":512},[167,70227,68999],{"class":173},[167,70229,69002],{"class":512},[167,70231,70232],{"class":169,"line":34642},[167,70233,70234],{"class":2268},"      \u002F\u002Fe.targer是我们点击的对象\n",[167,70236,70237,70239,70241,70243,70246],{"class":169,"line":34648},[167,70238,56470],{"class":731},[167,70240,69023],{"class":512},[167,70242,56476],{"class":731},[167,70244,70245],{"class":177}," 'A'",[167,70247,14470],{"class":512},[167,70249,70250,70252,70254,70256,70259,70261,70263,70265,70267],{"class":169,"line":34654},[167,70251,53921],{"class":512},[167,70253,56389],{"class":173},[167,70255,898],{"class":512},[167,70257,70258],{"class":177},"'.active'",[167,70260,58992],{"class":512},[167,70262,58995],{"class":173},[167,70264,898],{"class":512},[167,70266,66703],{"class":177},[167,70268,873],{"class":512},[167,70270,70271,70274,70276,70278,70280],{"class":169,"line":34660},[167,70272,70273],{"class":512},"        e.target.classList.",[167,70275,7364],{"class":173},[167,70277,898],{"class":512},[167,70279,66703],{"class":177},[167,70281,873],{"class":512},[167,70283,70284],{"class":169,"line":34671},[167,70285,741],{"emptyLinePlaceholder":740},[167,70287,70288],{"class":169,"line":34677},[167,70289,70290],{"class":2268},"        \u002F\u002F 下面大盒子模块\n",[167,70292,70293],{"class":169,"line":34697},[167,70294,70295],{"class":2268},"        \u002F\u002F console.log(e.target.dataset.id)\n",[167,70297,70298,70300,70302,70304,70306],{"class":169,"line":34703},[167,70299,63259],{"class":731},[167,70301,5067],{"class":184},[167,70303,753],{"class":731},[167,70305,47566],{"class":731},[167,70307,70308],{"class":512},"e.target.dataset.id\n",[167,70310,70311,70313,70315,70317,70319,70321,70323,70325,70327],{"class":169,"line":34714},[167,70312,53921],{"class":512},[167,70314,56389],{"class":173},[167,70316,898],{"class":512},[167,70318,66751],{"class":177},[167,70320,58992],{"class":512},[167,70322,58995],{"class":173},[167,70324,898],{"class":512},[167,70326,66703],{"class":177},[167,70328,873],{"class":512},[167,70330,70331,70333,70335,70337,70339,70341,70343,70345,70347,70349,70351,70353,70355],{"class":169,"line":34720},[167,70332,53921],{"class":512},[167,70334,56389],{"class":173},[167,70336,898],{"class":512},[167,70338,66777],{"class":177},[167,70340,2641],{"class":512},[167,70342,47566],{"class":731},[167,70344,27138],{"class":184},[167,70346,59021],{"class":177},[167,70348,58992],{"class":512},[167,70350,7364],{"class":173},[167,70352,898],{"class":512},[167,70354,66703],{"class":177},[167,70356,873],{"class":512},[167,70358,70359],{"class":169,"line":34726},[167,70360,741],{"emptyLinePlaceholder":740},[167,70362,70363],{"class":169,"line":34732},[167,70364,54393],{"class":512},[167,70366,70367],{"class":169,"line":34738},[167,70368,35463],{"class":512},[167,70370,70371,70373,70375],{"class":169,"line":34744},[167,70372,54412],{"class":512},[167,70374,53809],{"class":516},[167,70376,537],{"class":512},[167,70378,70379,70381,70383],{"class":169,"line":34750},[167,70380,575],{"class":512},[167,70382,517],{"class":516},[167,70384,537],{"class":512},[167,70386,70387],{"class":169,"line":34756},[167,70388,741],{"emptyLinePlaceholder":740},[167,70390,70391,70393,70395],{"class":169,"line":34776},[167,70392,575],{"class":512},[167,70394,52635],{"class":516},[167,70396,537],{"class":512},[494,70398,70400],{"id":70399},"_333-页面加载事件","3.3.3 页面加载事件",[40,70402,70403],{},[43,70404,70405],{},"load",[19,70407,70408],{},[3528,70409],{"alt":32,"src":70410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70412,70413],{},"window代表整个窗口，比document还要大",[19,70415,70416],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70418,70419],{},"img.addEventListener('load', function () {",[19,70421,70422],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70424,54459],{},[40,70426,70427],{"start":191},[43,70428,70429],{},"DOMContentLoaded",[19,70431,70432],{},[3528,70433],{"alt":32,"src":70434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70436,70437],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[494,70439,70441],{"id":70440},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70443,70444],{},[3528,70445],{"alt":32,"src":70446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70448,70449],{},[3528,70450],{"alt":32,"src":70451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70453,70454],{},[3528,70455],{"alt":32,"src":70456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70458,70459],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70461,70462],{},"获得的是数字型数据，不带单位",[19,70464,70465],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70467,70468],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70470,70471],{},"它是通过document.documentElement来获取",[19,70473,70474],{},[3528,70475],{"alt":32,"src":70476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70478,70479],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[494,70481,70483],{"id":70482},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70485,70486],{},[3528,70487],{"alt":32,"src":70488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70490,70491],{},[3528,70492],{"alt":32,"src":70493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[494,70495,70497],{"id":70496},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70499,70500],{},[3528,70501],{"alt":32,"src":70502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70504,70505],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70507,70508],{},[3528,70509],{"alt":32,"src":70510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70512,70513],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70515,70516],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70518,70519],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70521,70522],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70524,70525],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70527,70528],{},[3528,70529],{"alt":32,"src":70530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70532,70533],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70535,70536],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70538,70539],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70541,70542],{},"e.pageX-box.getBoundingClientRect()",[494,70544,70546],{"id":70545},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70548,70549],{},[3528,70550],{"alt":32,"src":70551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70553,70554],{},"这个是相对于视口来说的，它是个方法，不是属性值",[494,70556,70558],{"id":70557},"_338-总结","3.3.8 总结",[19,70560,70561],{},[3528,70562],{"alt":32,"src":70563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70565,70566],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70568,70569],{},"修改盒子的宽高只能通过width和height来实现",[494,70571,70573],{"id":70572},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,70575,70577],{"className":52633,"code":70576,"language":52635,"meta":32,"style":32},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[34,70578,70579,70584,70589,70594,70599],{"__ignoreMap":32},[167,70580,70581],{"class":169,"line":170},[167,70582,70583],{"class":512},"\u002F* 页面滑动 *\u002F\n",[167,70585,70586],{"class":169,"line":191},[167,70587,70588],{"class":512},"html {\n",[167,70590,70591],{"class":169,"line":205},[167,70592,70593],{"class":512},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[167,70595,70596],{"class":169,"line":219},[167,70597,70598],{"class":512},"  scroll-behavior: smooth;\n",[167,70600,70601],{"class":169,"line":230},[167,70602,3630],{"class":512},[19,70604,70605],{},"默认是auto",[494,70607,70609],{"id":70608},"_3310-日期对象","3.3.10 日期对象",[24024,70611,70613],{"id":70612},"_33101-实例化","3.3.10.1 实例化",[19,70615,70616],{},[3528,70617],{"alt":32,"src":70618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24024,70620,70622],{"id":70621},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70624,70625],{},[3528,70626],{"alt":32,"src":70627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70629,70630],{},"月份+1",[19,70632,70633],{},"老外认为第一天为0，星期天",[19,70635,70636],{},"方法使用的时候必须要跟括号",[19,70638,70639],{},"快速获得日期",[19,70641,70642],{},"\u002F\u002F 得到年月日",[19,70644,70645],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70647,70648],{},"\u002F\u002F 得到当地日期",[19,70650,70651],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70653,70654],{},"\u002F\u002F 得到当地时间",[19,70656,70657],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70659,70660],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70662,70663],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53809,70665,70666],{},"\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,70668,70669],{},"学会去封装函数！",[24024,70671,70673],{"id":70672},"_33103-时间戳","3.3.10.3 时间戳",[19,70675,70676],{},[3528,70677],{"alt":32,"src":70678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70680,70681],{},[3528,70682],{"alt":32,"src":70683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70685,70686],{},"三种方法记住一个就可以",[494,70688,70690],{"id":70689},"_3311-节点操作","3.3.11 节点操作",[24024,70692,70694],{"id":70693},"_33111-dom节点","3.3.11.1 DOM节点",[19,70696,70697],{},[3528,70698],{"alt":32,"src":70699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70701,70702],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24024,70704,70706],{"id":70705},"_33112-查找节点","3.3.11.2 查找节点",[19,70708,70709],{},"前边的document.querySelector()是获取的元素",[19,70711,70712],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70714,70715],{},[3528,70716],{"alt":32,"src":70717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[40,70719,70720],{},[43,70721,70722],{},"父节点",[19,70724,70725],{},[3528,70726],{"alt":32,"src":70727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[40,70729,70730],{"start":191},[43,70731,70732],{},"子节点",[19,70734,70735],{},[3528,70736],{"alt":32,"src":70737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70739,70740],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70742,70743],{},"children获得的是伪数组，是亲儿子",[40,70745,70746],{"start":205},[43,70747,70748],{},"兄弟节点",[19,70750,70751],{},[3528,70752],{"alt":32,"src":70753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24024,70755,70757],{"id":70756},"_33113-增加节点","3.3.11.3 增加节点",[19,70759,70760],{},[3528,70761],{"alt":32,"src":70762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70764,70765],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70767,70768],{},[3528,70769],{"alt":32,"src":70770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70772,70773],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70775,70776],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70778,70779],{},"例：",[53809,70781,70782],{},"\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,70784,70785],{},[3528,70786],{"alt":32,"src":70787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70789,70790],{},"false只克隆标签，里边的内容不会克隆过来",[26,70792,70794],{"className":52633,"code":70793,"language":52635,"meta":32,"style":32},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[34,70795,70796],{"__ignoreMap":32},[167,70797,70798],{"class":169,"line":170},[167,70799,70793],{"class":512},[24024,70801,70803],{"id":70802},"_33114-删除节点","3.3.11.4 删除节点",[19,70805,70806],{},[3528,70807],{"alt":32,"src":70808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70810,70811],{},"父亲删儿子",[19,70813,70814],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[494,70816,70818],{"id":70817},"_3312-m端事件","3.3.12 M端事件",[19,70820,70821],{},"M端就是移动端",[19,70823,70824],{},[3528,70825],{"alt":32,"src":70826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[494,70828,70830],{"id":70829},"_3313-插件","3.3.13 插件",[19,70832,70833],{},"要熟悉官网！！！",[19,70835,70836],{},[2439,70837,70838],{"href":70838,"rel":70839},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25887],[19,70841,70842],{},[2439,70843,70844],{"href":70844,"rel":70845},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25887],[494,70847,70849],{"id":70848},"_3314-学生信息表","3.3.14 学生信息表",[40,70851,70852,70855,70858,70861,70864,70867,70870,70873],{},[43,70853,70854],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[43,70856,70857],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[43,70859,70860],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[43,70862,70863],{},"用好表单元素自带的属性，value,name等",[43,70865,70866],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[43,70868,70869],{},"不要忘记事件对象",[43,70871,70872],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[43,70874,70875],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70877,70878],{},"结构：",[26,70880,70882],{"className":52633,"code":70881,"language":52635,"meta":32,"style":32},"\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",[34,70883,70884,70894,70908,70912,70920,70934,70954,70975,70988,71012,71020,71024,71032,71045,71066,71094,71122,71127,71149,71168,71187,71195,71223,71245,71265,71285,71305,71325,71345,71353,71373,71381,71385,71398,71406,71414,71422,71435,71448,71461,71474,71487,71500,71513,71521,71529,71537,71542,71547,71552,71557,71562,71567,71572,71577,71582,71587,71592,71597,71602,71610,71618,71626,71630,71650,71669,71689,71709,71729,71749,71753,71758,71778,71783,71793,71798,71803,71823,71845,71850,71860,71864,71868,71873,71878,71907,71921,71936,71940,71944,71948,71953,71964,71977,71982,71987,71992,71997,72002,72006,72011,72016,72025,72030,72035,72047,72052,72059,72063,72068,72078,72083,72093,72098,72126,72147,72157,72177,72195,72212,72229,72246,72263,72267,72277,72282,72287,72292,72303,72307,72311,72315,72320,72325,72346,72358,72363,72368,72373,72387,72392,72399,72403,72407,72415,72419,72427,72431],{"__ignoreMap":32},[167,70885,70886,70888,70890,70892],{"class":169,"line":170},[167,70887,53297],{"class":512},[167,70889,53300],{"class":516},[167,70891,53303],{"class":173},[167,70893,537],{"class":512},[167,70895,70896,70898,70900,70902,70904,70906],{"class":169,"line":191},[167,70897,513],{"class":512},[167,70899,52635],{"class":516},[167,70901,53314],{"class":173},[167,70903,523],{"class":512},[167,70905,53319],{"class":177},[167,70907,537],{"class":512},[167,70909,70910],{"class":169,"line":205},[167,70911,741],{"emptyLinePlaceholder":740},[167,70913,70914,70916,70918],{"class":169,"line":219},[167,70915,513],{"class":512},[167,70917,53332],{"class":516},[167,70919,537],{"class":512},[167,70921,70922,70924,70926,70928,70930,70932],{"class":169,"line":230},[167,70923,542],{"class":512},[167,70925,53342],{"class":516},[167,70927,53345],{"class":173},[167,70929,523],{"class":512},[167,70931,53350],{"class":177},[167,70933,61116],{"class":512},[167,70935,70936,70938,70940,70942,70944,70946,70948,70950,70952],{"class":169,"line":241},[167,70937,542],{"class":512},[167,70939,53342],{"class":516},[167,70941,520],{"class":173},[167,70943,523],{"class":512},[167,70945,53389],{"class":177},[167,70947,53369],{"class":173},[167,70949,523],{"class":512},[167,70951,53396],{"class":177},[167,70953,61116],{"class":512},[167,70955,70956,70958,70960,70962,70964,70966,70968,70970,70973],{"class":169,"line":261},[167,70957,542],{"class":512},[167,70959,53342],{"class":516},[167,70961,53361],{"class":173},[167,70963,523],{"class":512},[167,70965,53366],{"class":177},[167,70967,53369],{"class":173},[167,70969,523],{"class":512},[167,70971,70972],{"class":177},"\"ie=edge\"",[167,70974,61116],{"class":512},[167,70976,70977,70979,70981,70984,70986],{"class":169,"line":773},[167,70978,542],{"class":512},[167,70980,53405],{"class":516},[167,70982,70983],{"class":512},">学生信息管理\u003C\u002F",[167,70985,53405],{"class":516},[167,70987,537],{"class":512},[167,70989,70990,70992,70995,70998,71000,71003,71005,71007,71010],{"class":169,"line":779},[167,70991,542],{"class":512},[167,70993,70994],{"class":516},"link",[167,70996,70997],{"class":173}," rel",[167,70999,523],{"class":512},[167,71001,71002],{"class":177},"\"stylesheet\"",[167,71004,63046],{"class":173},[167,71006,523],{"class":512},[167,71008,71009],{"class":177},"\"css\u002Findex.css\"",[167,71011,61116],{"class":512},[167,71013,71014,71016,71018],{"class":169,"line":785},[167,71015,575],{"class":512},[167,71017,53332],{"class":516},[167,71019,537],{"class":512},[167,71021,71022],{"class":169,"line":790},[167,71023,741],{"emptyLinePlaceholder":740},[167,71025,71026,71028,71030],{"class":169,"line":796},[167,71027,513],{"class":512},[167,71029,517],{"class":516},[167,71031,537],{"class":512},[167,71033,71034,71036,71038,71041,71043],{"class":169,"line":802},[167,71035,542],{"class":512},[167,71037,10],{"class":516},[167,71039,71040],{"class":512},">新增学员\u003C\u002F",[167,71042,10],{"class":516},[167,71044,537],{"class":512},[167,71046,71047,71049,71051,71053,71055,71057,71060,71062,71064],{"class":169,"line":808},[167,71048,542],{"class":512},[167,71050,68614],{"class":516},[167,71052,55479],{"class":173},[167,71054,523],{"class":512},[167,71056,64653],{"class":177},[167,71058,71059],{"class":173}," autocomplete",[167,71061,523],{"class":512},[167,71063,33781],{"class":177},[167,71065,537],{"class":512},[167,71067,71068,71071,71073,71075,71077,71079,71081,71083,71086,71088,71090,71092],{"class":169,"line":814},[167,71069,71070],{"class":512},"    姓名：\u003C",[167,71072,55812],{"class":516},[167,71074,555],{"class":173},[167,71076,523],{"class":512},[167,71078,64688],{"class":177},[167,71080,55479],{"class":173},[167,71082,523],{"class":512},[167,71084,71085],{"class":177},"\"uname\"",[167,71087,520],{"class":173},[167,71089,523],{"class":512},[167,71091,71085],{"class":177},[167,71093,61116],{"class":512},[167,71095,71096,71099,71101,71103,71105,71107,71109,71111,71114,71116,71118,71120],{"class":169,"line":820},[167,71097,71098],{"class":512},"    年龄：\u003C",[167,71100,55812],{"class":516},[167,71102,555],{"class":173},[167,71104,523],{"class":512},[167,71106,64688],{"class":177},[167,71108,55479],{"class":173},[167,71110,523],{"class":512},[167,71112,71113],{"class":177},"\"age\"",[167,71115,520],{"class":173},[167,71117,523],{"class":512},[167,71119,71113],{"class":177},[167,71121,61116],{"class":512},[167,71123,71124],{"class":169,"line":826},[167,71125,71126],{"class":512},"    性别:\n",[167,71128,71129,71131,71134,71136,71138,71141,71143,71145,71147],{"class":169,"line":832},[167,71130,53339],{"class":512},[167,71132,71133],{"class":516},"select",[167,71135,520],{"class":173},[167,71137,523],{"class":512},[167,71139,71140],{"class":177},"\"gender\"",[167,71142,55479],{"class":173},[167,71144,523],{"class":512},[167,71146,71140],{"class":177},[167,71148,537],{"class":512},[167,71150,71151,71153,71155,71157,71159,71161,71164,71166],{"class":169,"line":837},[167,71152,57223],{"class":512},[167,71154,620],{"class":516},[167,71156,68640],{"class":173},[167,71158,523],{"class":512},[167,71160,11989],{"class":177},[167,71162,71163],{"class":512},">男\u003C\u002F",[167,71165,620],{"class":516},[167,71167,537],{"class":512},[167,71169,71170,71172,71174,71176,71178,71180,71183,71185],{"class":169,"line":842},[167,71171,57223],{"class":512},[167,71173,620],{"class":516},[167,71175,68640],{"class":173},[167,71177,523],{"class":512},[167,71179,12058],{"class":177},[167,71181,71182],{"class":512},">女\u003C\u002F",[167,71184,620],{"class":516},[167,71186,537],{"class":512},[167,71188,71189,71191,71193],{"class":169,"line":860},[167,71190,53774],{"class":512},[167,71192,71133],{"class":516},[167,71194,537],{"class":512},[167,71196,71197,71200,71202,71204,71206,71208,71210,71212,71215,71217,71219,71221],{"class":169,"line":876},[167,71198,71199],{"class":512},"    薪资：\u003C",[167,71201,55812],{"class":516},[167,71203,555],{"class":173},[167,71205,523],{"class":512},[167,71207,64688],{"class":177},[167,71209,55479],{"class":173},[167,71211,523],{"class":512},[167,71213,71214],{"class":177},"\"salary\"",[167,71216,520],{"class":173},[167,71218,523],{"class":512},[167,71220,71214],{"class":177},[167,71222,61116],{"class":512},[167,71224,71225,71228,71230,71232,71234,71237,71239,71241,71243],{"class":169,"line":887},[167,71226,71227],{"class":512},"    就业城市：\u003C",[167,71229,71133],{"class":516},[167,71231,520],{"class":173},[167,71233,523],{"class":512},[167,71235,71236],{"class":177},"\"city\"",[167,71238,55479],{"class":173},[167,71240,523],{"class":512},[167,71242,71236],{"class":177},[167,71244,537],{"class":512},[167,71246,71247,71249,71251,71253,71255,71258,71261,71263],{"class":169,"line":892},[167,71248,57223],{"class":512},[167,71250,620],{"class":516},[167,71252,68640],{"class":173},[167,71254,523],{"class":512},[167,71256,71257],{"class":177},"\"北京\"",[167,71259,71260],{"class":512},">北京\u003C\u002F",[167,71262,620],{"class":516},[167,71264,537],{"class":512},[167,71266,71267,71269,71271,71273,71275,71278,71281,71283],{"class":169,"line":907},[167,71268,57223],{"class":512},[167,71270,620],{"class":516},[167,71272,68640],{"class":173},[167,71274,523],{"class":512},[167,71276,71277],{"class":177},"\"上海\"",[167,71279,71280],{"class":512},">上海\u003C\u002F",[167,71282,620],{"class":516},[167,71284,537],{"class":512},[167,71286,71287,71289,71291,71293,71295,71298,71301,71303],{"class":169,"line":920},[167,71288,57223],{"class":512},[167,71290,620],{"class":516},[167,71292,68640],{"class":173},[167,71294,523],{"class":512},[167,71296,71297],{"class":177},"\"广州\"",[167,71299,71300],{"class":512},">广州\u003C\u002F",[167,71302,620],{"class":516},[167,71304,537],{"class":512},[167,71306,71307,71309,71311,71313,71315,71318,71321,71323],{"class":169,"line":933},[167,71308,57223],{"class":512},[167,71310,620],{"class":516},[167,71312,68640],{"class":173},[167,71314,523],{"class":512},[167,71316,71317],{"class":177},"\"深圳\"",[167,71319,71320],{"class":512},">深圳\u003C\u002F",[167,71322,620],{"class":516},[167,71324,537],{"class":512},[167,71326,71327,71329,71331,71333,71335,71338,71341,71343],{"class":169,"line":946},[167,71328,57223],{"class":512},[167,71330,620],{"class":516},[167,71332,68640],{"class":173},[167,71334,523],{"class":512},[167,71336,71337],{"class":177},"\"曹县\"",[167,71339,71340],{"class":512},">曹县\u003C\u002F",[167,71342,620],{"class":516},[167,71344,537],{"class":512},[167,71346,71347,71349,71351],{"class":169,"line":959},[167,71348,53774],{"class":512},[167,71350,71133],{"class":516},[167,71352,537],{"class":512},[167,71354,71355,71357,71359,71361,71363,71366,71369,71371],{"class":169,"line":964},[167,71356,53339],{"class":512},[167,71358,55877],{"class":516},[167,71360,55479],{"class":173},[167,71362,523],{"class":512},[167,71364,71365],{"class":177},"\"add\"",[167,71367,71368],{"class":512},">录入\u003C\u002F",[167,71370,55877],{"class":516},[167,71372,537],{"class":512},[167,71374,71375,71377,71379],{"class":169,"line":987},[167,71376,54412],{"class":512},[167,71378,68614],{"class":516},[167,71380,537],{"class":512},[167,71382,71383],{"class":169,"line":993},[167,71384,741],{"emptyLinePlaceholder":740},[167,71386,71387,71389,71391,71394,71396],{"class":169,"line":998},[167,71388,542],{"class":512},[167,71390,10],{"class":516},[167,71392,71393],{"class":512},">就业榜\u003C\u002F",[167,71395,10],{"class":516},[167,71397,537],{"class":512},[167,71399,71400,71402,71404],{"class":169,"line":1010},[167,71401,542],{"class":512},[167,71403,68],{"class":516},[167,71405,537],{"class":512},[167,71407,71408,71410,71412],{"class":169,"line":1022},[167,71409,53339],{"class":512},[167,71411,71],{"class":516},[167,71413,537],{"class":512},[167,71415,71416,71418,71420],{"class":169,"line":1027},[167,71417,57223],{"class":512},[167,71419,74],{"class":516},[167,71421,537],{"class":512},[167,71423,71424,71426,71428,71431,71433],{"class":169,"line":1032},[167,71425,57291],{"class":512},[167,71427,77],{"class":516},[167,71429,71430],{"class":512},">序号\u003C\u002F",[167,71432,77],{"class":516},[167,71434,537],{"class":512},[167,71436,71437,71439,71441,71444,71446],{"class":169,"line":1049},[167,71438,57291],{"class":512},[167,71440,77],{"class":516},[167,71442,71443],{"class":512},">姓名\u003C\u002F",[167,71445,77],{"class":516},[167,71447,537],{"class":512},[167,71449,71450,71452,71454,71457,71459],{"class":169,"line":10005},[167,71451,57291],{"class":512},[167,71453,77],{"class":516},[167,71455,71456],{"class":512},">年龄\u003C\u002F",[167,71458,77],{"class":516},[167,71460,537],{"class":512},[167,71462,71463,71465,71467,71470,71472],{"class":169,"line":10011},[167,71464,57291],{"class":512},[167,71466,77],{"class":516},[167,71468,71469],{"class":512},">性别\u003C\u002F",[167,71471,77],{"class":516},[167,71473,537],{"class":512},[167,71475,71476,71478,71480,71483,71485],{"class":169,"line":10038},[167,71477,57291],{"class":512},[167,71479,77],{"class":516},[167,71481,71482],{"class":512},">薪资\u003C\u002F",[167,71484,77],{"class":516},[167,71486,537],{"class":512},[167,71488,71489,71491,71493,71496,71498],{"class":169,"line":10043},[167,71490,57291],{"class":512},[167,71492,77],{"class":516},[167,71494,71495],{"class":512},">就业城市\u003C\u002F",[167,71497,77],{"class":516},[167,71499,537],{"class":512},[167,71501,71502,71504,71506,71509,71511],{"class":169,"line":10049},[167,71503,57291],{"class":512},[167,71505,77],{"class":516},[167,71507,71508],{"class":512},">操作\u003C\u002F",[167,71510,77],{"class":516},[167,71512,537],{"class":512},[167,71514,71515,71517,71519],{"class":169,"line":10061},[167,71516,57396],{"class":512},[167,71518,74],{"class":516},[167,71520,537],{"class":512},[167,71522,71523,71525,71527],{"class":169,"line":10073},[167,71524,53774],{"class":512},[167,71526,71],{"class":516},[167,71528,537],{"class":512},[167,71530,71531,71533,71535],{"class":169,"line":10085},[167,71532,53339],{"class":512},[167,71534,85],{"class":516},[167,71536,537],{"class":512},[167,71538,71539],{"class":169,"line":11744},[167,71540,71541],{"class":2268},"      \u003C!-- \n",[167,71543,71544],{"class":169,"line":11769},[167,71545,71546],{"class":2268},"        \u003Ctr>\n",[167,71548,71549],{"class":169,"line":11792},[167,71550,71551],{"class":2268},"          \u003Ctd>1001\u003C\u002Ftd>\n",[167,71553,71554],{"class":169,"line":11816},[167,71555,71556],{"class":2268},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[167,71558,71559],{"class":169,"line":11821},[167,71560,71561],{"class":2268},"          \u003Ctd>19\u003C\u002Ftd>\n",[167,71563,71564],{"class":169,"line":11826},[167,71565,71566],{"class":2268},"          \u003Ctd>男\u003C\u002Ftd>\n",[167,71568,71569],{"class":169,"line":11831},[167,71570,71571],{"class":2268},"          \u003Ctd>15000\u003C\u002Ftd>\n",[167,71573,71574],{"class":169,"line":11840},[167,71575,71576],{"class":2268},"          \u003Ctd>上海\u003C\u002Ftd>\n",[167,71578,71579],{"class":169,"line":11845},[167,71580,71581],{"class":2268},"          \u003Ctd>\n",[167,71583,71584],{"class":169,"line":11851},[167,71585,71586],{"class":2268},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[167,71588,71589],{"class":169,"line":11872},[167,71590,71591],{"class":2268},"          \u003C\u002Ftd>\n",[167,71593,71594],{"class":169,"line":11878},[167,71595,71596],{"class":2268},"        \u003C\u002Ftr> \n",[167,71598,71599],{"class":169,"line":11892},[167,71600,71601],{"class":2268},"        -->\n",[167,71603,71604,71606,71608],{"class":169,"line":11898},[167,71605,53774],{"class":512},[167,71607,85],{"class":516},[167,71609,537],{"class":512},[167,71611,71612,71614,71616],{"class":169,"line":11925},[167,71613,54412],{"class":512},[167,71615,68],{"class":516},[167,71617,537],{"class":512},[167,71619,71620,71622,71624],{"class":169,"line":11934},[167,71621,542],{"class":512},[167,71623,53809],{"class":516},[167,71625,537],{"class":512},[167,71627,71628],{"class":169,"line":11940},[167,71629,61947],{"class":2268},[167,71631,71632,71634,71637,71639,71641,71643,71645,71648],{"class":169,"line":11948},[167,71633,13249],{"class":731},[167,71635,71636],{"class":184}," uname",[167,71638,753],{"class":731},[167,71640,56386],{"class":512},[167,71642,56389],{"class":173},[167,71644,898],{"class":512},[167,71646,71647],{"class":177},"'.uname'",[167,71649,873],{"class":512},[167,71651,71652,71654,71656,71658,71660,71662,71664,71667],{"class":169,"line":11953},[167,71653,13249],{"class":731},[167,71655,17715],{"class":184},[167,71657,753],{"class":731},[167,71659,56386],{"class":512},[167,71661,56389],{"class":173},[167,71663,898],{"class":512},[167,71665,71666],{"class":177},"'.age'",[167,71668,873],{"class":512},[167,71670,71671,71673,71676,71678,71680,71682,71684,71687],{"class":169,"line":18630},[167,71672,13249],{"class":731},[167,71674,71675],{"class":184}," gender",[167,71677,753],{"class":731},[167,71679,56386],{"class":512},[167,71681,56389],{"class":173},[167,71683,898],{"class":512},[167,71685,71686],{"class":177},"'.gender'",[167,71688,873],{"class":512},[167,71690,71691,71693,71696,71698,71700,71702,71704,71707],{"class":169,"line":18636},[167,71692,13249],{"class":731},[167,71694,71695],{"class":184}," salary",[167,71697,753],{"class":731},[167,71699,56386],{"class":512},[167,71701,56389],{"class":173},[167,71703,898],{"class":512},[167,71705,71706],{"class":177},"'.salary'",[167,71708,873],{"class":512},[167,71710,71711,71713,71716,71718,71720,71722,71724,71727],{"class":169,"line":18659},[167,71712,13249],{"class":731},[167,71714,71715],{"class":184}," city",[167,71717,753],{"class":731},[167,71719,56386],{"class":512},[167,71721,56389],{"class":173},[167,71723,898],{"class":512},[167,71725,71726],{"class":177},"'.city'",[167,71728,873],{"class":512},[167,71730,71731,71733,71736,71738,71740,71742,71744,71747],{"class":169,"line":18665},[167,71732,13249],{"class":731},[167,71734,71735],{"class":184}," tbody",[167,71737,753],{"class":731},[167,71739,56386],{"class":512},[167,71741,56389],{"class":173},[167,71743,898],{"class":512},[167,71745,71746],{"class":177},"'tbody'",[167,71748,873],{"class":512},[167,71750,71751],{"class":169,"line":18688},[167,71752,741],{"emptyLinePlaceholder":740},[167,71754,71755],{"class":169,"line":18702},[167,71756,71757],{"class":2268},"    \u002F\u002F 获取所有带有name属性的元素\n",[167,71759,71760,71762,71765,71767,71769,71771,71773,71776],{"class":169,"line":18722},[167,71761,13249],{"class":731},[167,71763,71764],{"class":184}," items",[167,71766,753],{"class":731},[167,71768,56386],{"class":512},[167,71770,57670],{"class":173},[167,71772,898],{"class":512},[167,71774,71775],{"class":177},"'[name]'",[167,71777,873],{"class":512},[167,71779,71780],{"class":169,"line":18728},[167,71781,71782],{"class":2268},"    \u002F\u002F 声明一个空的数组\n",[167,71784,71785,71787,71789,71791],{"class":169,"line":18739},[167,71786,13249],{"class":731},[167,71788,59684],{"class":184},[167,71790,753],{"class":731},[167,71792,53834],{"class":512},[167,71794,71795],{"class":169,"line":18762},[167,71796,71797],{"class":2268},"    \u002F\u002F 1.录入模块\n",[167,71799,71800],{"class":169,"line":18784},[167,71801,71802],{"class":2268},"    \u002F\u002F 1.1这是一个表单提交事件\n",[167,71804,71805,71807,71810,71812,71814,71816,71818,71821],{"class":169,"line":18789},[167,71806,13249],{"class":731},[167,71808,71809],{"class":184}," info",[167,71811,753],{"class":731},[167,71813,56386],{"class":512},[167,71815,56389],{"class":173},[167,71817,898],{"class":512},[167,71819,71820],{"class":177},"'.info'",[167,71822,873],{"class":512},[167,71824,71825,71828,71830,71832,71835,71837,71839,71841,71843],{"class":169,"line":18795},[167,71826,71827],{"class":512},"    info.",[167,71829,59802],{"class":173},[167,71831,898],{"class":512},[167,71833,71834],{"class":177},"'submit'",[167,71836,14463],{"class":512},[167,71838,56439],{"class":731},[167,71840,3716],{"class":512},[167,71842,2284],{"class":7246},[167,71844,14470],{"class":512},[167,71846,71847],{"class":169,"line":18809},[167,71848,71849],{"class":2268},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[167,71851,71852,71855,71858],{"class":169,"line":18822},[167,71853,71854],{"class":512},"      e.",[167,71856,71857],{"class":173},"preventDefault",[167,71859,4020],{"class":512},[167,71861,71862],{"class":169,"line":18827},[167,71863,62001],{"class":2268},[167,71865,71866],{"class":169,"line":18841},[167,71867,741],{"emptyLinePlaceholder":740},[167,71869,71870],{"class":169,"line":18846},[167,71871,71872],{"class":2268},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[167,71874,71875],{"class":169,"line":18852},[167,71876,71877],{"class":2268},"      \u002F\u002F 先遍历循环\n",[167,71879,71880,71882,71884,71886,71888,71890,71892,71894,71896,71899,71901,71903,71905],{"class":169,"line":18857},[167,71881,54279],{"class":731},[167,71883,3716],{"class":512},[167,71885,53843],{"class":731},[167,71887,11466],{"class":512},[167,71889,523],{"class":731},[167,71891,6125],{"class":184},[167,71893,11473],{"class":512},[167,71895,513],{"class":731},[167,71897,71898],{"class":512}," items.",[167,71900,53964],{"class":184},[167,71902,5248],{"class":512},[167,71904,4336],{"class":731},[167,71906,14470],{"class":512},[167,71908,71909,71911,71914,71916,71919],{"class":169,"line":18871},[167,71910,4540],{"class":731},[167,71912,71913],{"class":512}," (items[i].value ",[167,71915,56476],{"class":731},[167,71917,71918],{"class":177}," ''",[167,71920,14470],{"class":512},[167,71922,71923,71926,71929,71931,71934],{"class":169,"line":18876},[167,71924,71925],{"class":731},"          return",[167,71927,71928],{"class":173}," alert",[167,71930,898],{"class":512},[167,71932,71933],{"class":177},"'输入内容不能为空'",[167,71935,873],{"class":512},[167,71937,71938],{"class":169,"line":18881},[167,71939,4572],{"class":512},[167,71941,71942],{"class":169,"line":18895},[167,71943,54393],{"class":512},[167,71945,71946],{"class":169,"line":18907},[167,71947,741],{"emptyLinePlaceholder":740},[167,71949,71950],{"class":169,"line":18912},[167,71951,71952],{"class":2268},"      \u002F\u002F 创建新的对象\n",[167,71954,71955,71957,71960,71962],{"class":169,"line":18925},[167,71956,60217],{"class":731},[167,71958,71959],{"class":184}," obj",[167,71961,753],{"class":731},[167,71963,17598],{"class":512},[167,71965,71966,71969,71971,71973,71975],{"class":169,"line":18930},[167,71967,71968],{"class":512},"        stuID: arr.",[167,71970,53964],{"class":184},[167,71972,47566],{"class":731},[167,71974,27138],{"class":184},[167,71976,33471],{"class":512},[167,71978,71979],{"class":169,"line":18935},[167,71980,71981],{"class":512},"        uname: uname.value,\n",[167,71983,71984],{"class":169,"line":18940},[167,71985,71986],{"class":512},"        age: age.value,\n",[167,71988,71989],{"class":169,"line":18953},[167,71990,71991],{"class":512},"        gender: gender.value,\n",[167,71993,71994],{"class":169,"line":18958},[167,71995,71996],{"class":512},"        salary: salary.value,\n",[167,71998,71999],{"class":169,"line":34636},[167,72000,72001],{"class":512},"        city: city.value\n",[167,72003,72004],{"class":169,"line":34642},[167,72005,54393],{"class":512},[167,72007,72008],{"class":169,"line":34648},[167,72009,72010],{"class":2268},"      \u002F\u002F console.log(obj);\n",[167,72012,72013],{"class":169,"line":34654},[167,72014,72015],{"class":2268},"      \u002F\u002F 追加到数组里面\n",[167,72017,72018,72020,72022],{"class":169,"line":34660},[167,72019,59996],{"class":512},[167,72021,53880],{"class":173},[167,72023,72024],{"class":512},"(obj)\n",[167,72026,72027],{"class":169,"line":34671},[167,72028,72029],{"class":2268},"      \u002F\u002F console.log(arr);\n",[167,72031,72032],{"class":169,"line":34677},[167,72033,72034],{"class":2268},"      \u002F\u002F 清空表单  reset重置表单\n",[167,72036,72037,72040,72042,72045],{"class":169,"line":34697},[167,72038,72039],{"class":184},"      this",[167,72041,2758],{"class":512},[167,72043,72044],{"class":173},"reset",[167,72046,4020],{"class":512},[167,72048,72049],{"class":169,"line":34703},[167,72050,72051],{"class":2268},"      \u002F\u002F 调用渲染函数\n",[167,72053,72054,72057],{"class":169,"line":34714},[167,72055,72056],{"class":173},"      render",[167,72058,4020],{"class":512},[167,72060,72061],{"class":169,"line":34720},[167,72062,35463],{"class":512},[167,72064,72065],{"class":169,"line":34726},[167,72066,72067],{"class":2268},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[167,72069,72070,72073,72076],{"class":169,"line":34732},[167,72071,72072],{"class":731},"    function",[167,72074,72075],{"class":173}," render",[167,72077,12881],{"class":512},[167,72079,72080],{"class":169,"line":34738},[167,72081,72082],{"class":2268},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[167,72084,72085,72088,72090],{"class":169,"line":34744},[167,72086,72087],{"class":512},"      tbody.innerHTML ",[167,72089,523],{"class":731},[167,72091,72092],{"class":177}," ''\n",[167,72094,72095],{"class":169,"line":34750},[167,72096,72097],{"class":2268},"      \u002F\u002F 遍历数组\n",[167,72099,72100,72102,72104,72106,72108,72110,72112,72114,72116,72118,72120,72122,72124],{"class":169,"line":34756},[167,72101,54279],{"class":731},[167,72103,3716],{"class":512},[167,72105,53843],{"class":731},[167,72107,11466],{"class":512},[167,72109,523],{"class":731},[167,72111,6125],{"class":184},[167,72113,11473],{"class":512},[167,72115,513],{"class":731},[167,72117,53961],{"class":512},[167,72119,53964],{"class":184},[167,72121,5248],{"class":512},[167,72123,4336],{"class":731},[167,72125,14470],{"class":512},[167,72127,72128,72130,72133,72135,72137,72140,72142,72145],{"class":169,"line":34776},[167,72129,63259],{"class":731},[167,72131,72132],{"class":184}," tr",[167,72134,753],{"class":731},[167,72136,56386],{"class":512},[167,72138,72139],{"class":173},"createElement",[167,72141,898],{"class":512},[167,72143,72144],{"class":177},"'tr'",[167,72146,873],{"class":512},[167,72148,72149,72152,72154],{"class":169,"line":34782},[167,72150,72151],{"class":512},"        tr.innerHTML ",[167,72153,523],{"class":731},[167,72155,72156],{"class":177}," `\n",[167,72158,72159,72162,72164,72166,72168,72171,72174],{"class":169,"line":34798},[167,72160,72161],{"class":177},"        \u003Ctd>${",[167,72163,5912],{"class":512},[167,72165,3090],{"class":177},[167,72167,2641],{"class":512},[167,72169,72170],{"class":177},"].",[167,72172,72173],{"class":512},"stuID",[167,72175,72176],{"class":177},"}\u003C\u002Ftd>\n",[167,72178,72179,72182,72184,72186,72188,72190,72193],{"class":169,"line":34804},[167,72180,72181],{"class":177},"          \u003Ctd>${",[167,72183,5912],{"class":512},[167,72185,3090],{"class":177},[167,72187,2641],{"class":512},[167,72189,72170],{"class":177},[167,72191,72192],{"class":512},"uname",[167,72194,72176],{"class":177},[167,72196,72197,72199,72201,72203,72205,72207,72210],{"class":169,"line":34818},[167,72198,72181],{"class":177},[167,72200,5912],{"class":512},[167,72202,3090],{"class":177},[167,72204,2641],{"class":512},[167,72206,72170],{"class":177},[167,72208,72209],{"class":512},"age",[167,72211,72176],{"class":177},[167,72213,72214,72216,72218,72220,72222,72224,72227],{"class":169,"line":34824},[167,72215,72181],{"class":177},[167,72217,5912],{"class":512},[167,72219,3090],{"class":177},[167,72221,2641],{"class":512},[167,72223,72170],{"class":177},[167,72225,72226],{"class":512},"gender",[167,72228,72176],{"class":177},[167,72230,72231,72233,72235,72237,72239,72241,72244],{"class":169,"line":34839},[167,72232,72181],{"class":177},[167,72234,5912],{"class":512},[167,72236,3090],{"class":177},[167,72238,2641],{"class":512},[167,72240,72170],{"class":177},[167,72242,72243],{"class":512},"salary",[167,72245,72176],{"class":177},[167,72247,72248,72250,72252,72254,72256,72258,72261],{"class":169,"line":34845},[167,72249,72181],{"class":177},[167,72251,5912],{"class":512},[167,72253,3090],{"class":177},[167,72255,2641],{"class":512},[167,72257,72170],{"class":177},[167,72259,72260],{"class":512},"city",[167,72262,72176],{"class":177},[167,72264,72265],{"class":169,"line":34854},[167,72266,71581],{"class":177},[167,72268,72269,72272,72274],{"class":169,"line":34860},[167,72270,72271],{"class":177},"            \u003Ca href=\"javascript:\" data-id=${",[167,72273,2641],{"class":512},[167,72275,72276],{"class":177},"}>删除\u003C\u002Fa>\n",[167,72278,72279],{"class":169,"line":34869},[167,72280,72281],{"class":177},"          \u003C\u002Ftd> \n",[167,72283,72284],{"class":169,"line":34875},[167,72285,72286],{"class":177},"          `\n",[167,72288,72289],{"class":169,"line":34881},[167,72290,72291],{"class":2268},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[167,72293,72294,72297,72300],{"class":169,"line":34890},[167,72295,72296],{"class":512},"        tbody.",[167,72298,72299],{"class":173},"appendChild",[167,72301,72302],{"class":512},"(tr)\n",[167,72304,72305],{"class":169,"line":34896},[167,72306,54393],{"class":512},[167,72308,72309],{"class":169,"line":34907},[167,72310,4231],{"class":512},[167,72312,72313],{"class":169,"line":34913},[167,72314,741],{"emptyLinePlaceholder":740},[167,72316,72317],{"class":169,"line":34932},[167,72318,72319],{"class":2268},"    \u002F\u002F 3.删除委托\n",[167,72321,72322],{"class":169,"line":34938},[167,72323,72324],{"class":2268},"    \u002F\u002F 3.1 事件委托 tbody\n",[167,72326,72327,72330,72332,72334,72336,72338,72340,72342,72344],{"class":169,"line":34949},[167,72328,72329],{"class":512},"    tbody.",[167,72331,59802],{"class":173},[167,72333,898],{"class":512},[167,72335,59807],{"class":177},[167,72337,14463],{"class":512},[167,72339,56439],{"class":731},[167,72341,3716],{"class":512},[167,72343,2284],{"class":7246},[167,72345,14470],{"class":512},[167,72347,72348,72350,72352,72354,72356],{"class":169,"line":34955},[167,72349,56470],{"class":731},[167,72351,69023],{"class":512},[167,72353,56476],{"class":731},[167,72355,70245],{"class":177},[167,72357,14470],{"class":512},[167,72359,72360],{"class":169,"line":34975},[167,72361,72362],{"class":2268},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[167,72364,72365],{"class":169,"line":34991},[167,72366,72367],{"class":2268},"        \u002F\u002F console.log(e.target.dataset.id);\n",[167,72369,72370],{"class":169,"line":34997},[167,72371,72372],{"class":2268},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[167,72374,72375,72378,72380,72383,72385],{"class":169,"line":35011},[167,72376,72377],{"class":512},"        arr.",[167,72379,59999],{"class":173},[167,72381,72382],{"class":512},"(e.target.dataset.id, ",[167,72384,2418],{"class":184},[167,72386,873],{"class":512},[167,72388,72389],{"class":169,"line":35017},[167,72390,72391],{"class":2268},"        \u002F\u002F 重新渲染一次\n",[167,72393,72394,72397],{"class":169,"line":35023},[167,72395,72396],{"class":173},"        render",[167,72398,4020],{"class":512},[167,72400,72401],{"class":169,"line":35034},[167,72402,54393],{"class":512},[167,72404,72405],{"class":169,"line":35040},[167,72406,35463],{"class":512},[167,72408,72409,72411,72413],{"class":169,"line":35046},[167,72410,54412],{"class":512},[167,72412,53809],{"class":516},[167,72414,537],{"class":512},[167,72416,72417],{"class":169,"line":35056},[167,72418,741],{"emptyLinePlaceholder":740},[167,72420,72421,72423,72425],{"class":169,"line":35062},[167,72422,575],{"class":512},[167,72424,517],{"class":516},[167,72426,537],{"class":512},[167,72428,72429],{"class":169,"line":35073},[167,72430,741],{"emptyLinePlaceholder":740},[167,72432,72433,72435,72437],{"class":169,"line":35079},[167,72434,575],{"class":512},[167,72436,52635],{"class":516},[167,72438,537],{"class":512},[19,72440,72441],{},"样式：",[26,72443,72447],{"className":72444,"code":72445,"language":72446,"meta":32,"style":32},"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",[34,72448,72449,72454,72464,72473,72477,72481,72486,72496,72501,72505,72510,72520,72525,72534,72538,72542,72547,72552,72562,72572,72577,72581,72586,72595,72605,72610,72620,72630,72634,72639,72647,72651,72656,72661,72666,72674,72683,72687,72692,72701,72705,72710,72719,72723,72728,72737,72746,72754,72758,72763,72772,72782,72791,72801,72807,72816,72826,72836,72840,72845,72854,72862,72872,72880,72889,72898,72908,72916,72920,72925,72934],{"__ignoreMap":32},[167,72450,72451],{"class":169,"line":170},[167,72452,72453],{"class":512},"* {\n",[167,72455,72456,72459,72461],{"class":169,"line":191},[167,72457,72458],{"class":516},"  margin",[167,72460,53435],{"class":512},[167,72462,72463],{"class":177},"0;\n",[167,72465,72466,72469,72471],{"class":169,"line":205},[167,72467,72468],{"class":177},"  padding",[167,72470,53435],{"class":512},[167,72472,72463],{"class":177},[167,72474,72475],{"class":169,"line":219},[167,72476,3630],{"class":512},[167,72478,72479],{"class":169,"line":230},[167,72480,741],{"emptyLinePlaceholder":740},[167,72482,72483],{"class":169,"line":241},[167,72484,72485],{"class":177},"a {\n",[167,72487,72488,72491,72493],{"class":169,"line":261},[167,72489,72490],{"class":516},"  text-decoration",[167,72492,53435],{"class":512},[167,72494,72495],{"class":177},"none;\n",[167,72497,72498],{"class":169,"line":773},[167,72499,72500],{"class":177},"  color:#721c24;\n",[167,72502,72503],{"class":169,"line":779},[167,72504,3630],{"class":512},[167,72506,72507],{"class":169,"line":785},[167,72508,72509],{"class":177},"h1 {\n",[167,72511,72512,72515,72517],{"class":169,"line":790},[167,72513,72514],{"class":516},"  text-align",[167,72516,53435],{"class":512},[167,72518,72519],{"class":177},"center;\n",[167,72521,72522],{"class":169,"line":796},[167,72523,72524],{"class":177},"  color:#333;\n",[167,72526,72527,72529,72531],{"class":169,"line":802},[167,72528,72458],{"class":516},[167,72530,53435],{"class":512},[167,72532,72533],{"class":177},"20px 0;\n",[167,72535,72536],{"class":169,"line":808},[167,72537,4710],{"class":512},[167,72539,72540],{"class":169,"line":814},[167,72541,3630],{"class":512},[167,72543,72544],{"class":169,"line":820},[167,72545,72546],{"class":177},"table {\n",[167,72548,72549],{"class":169,"line":826},[167,72550,72551],{"class":177},"  margin:0 auto;\n",[167,72553,72554,72557,72559],{"class":169,"line":832},[167,72555,72556],{"class":516},"  width",[167,72558,53435],{"class":512},[167,72560,72561],{"class":177},"800px;\n",[167,72563,72564,72567,72569],{"class":169,"line":837},[167,72565,72566],{"class":516},"  border-collapse",[167,72568,53435],{"class":512},[167,72570,72571],{"class":177},"collapse;\n",[167,72573,72574],{"class":169,"line":842},[167,72575,72576],{"class":177},"  color:#004085;\n",[167,72578,72579],{"class":169,"line":860},[167,72580,3630],{"class":512},[167,72582,72583],{"class":169,"line":876},[167,72584,72585],{"class":177},"th {\n",[167,72587,72588,72590,72592],{"class":169,"line":887},[167,72589,72468],{"class":516},[167,72591,53435],{"class":512},[167,72593,72594],{"class":177},"10px;\n",[167,72596,72597,72600,72602],{"class":169,"line":892},[167,72598,72599],{"class":516},"  background",[167,72601,53435],{"class":512},[167,72603,72604],{"class":2268},"#cfe5ff;\n",[167,72606,72607],{"class":169,"line":907},[167,72608,72609],{"class":512},"  \n",[167,72611,72612,72615,72617],{"class":169,"line":920},[167,72613,72614],{"class":516},"  font-size",[167,72616,53435],{"class":512},[167,72618,72619],{"class":177},"20px;\n",[167,72621,72622,72625,72627],{"class":169,"line":933},[167,72623,72624],{"class":516},"  font-weight",[167,72626,53435],{"class":512},[167,72628,72629],{"class":177},"400;\n",[167,72631,72632],{"class":169,"line":946},[167,72633,3630],{"class":512},[167,72635,72636],{"class":169,"line":959},[167,72637,72638],{"class":177},"td,th {\n",[167,72640,72641,72644],{"class":169,"line":964},[167,72642,72643],{"class":177},"  border:1px solid",[167,72645,72646],{"class":2268}," #b8daff;\n",[167,72648,72649],{"class":169,"line":987},[167,72650,3630],{"class":512},[167,72652,72653],{"class":169,"line":993},[167,72654,72655],{"class":177},"td {\n",[167,72657,72658],{"class":169,"line":998},[167,72659,72660],{"class":177},"  padding:10px;\n",[167,72662,72663],{"class":169,"line":1010},[167,72664,72665],{"class":177},"  color:#666;\n",[167,72667,72668,72670,72672],{"class":169,"line":1022},[167,72669,72514],{"class":516},[167,72671,53435],{"class":512},[167,72673,72519],{"class":177},[167,72675,72676,72678,72680],{"class":169,"line":1027},[167,72677,72614],{"class":516},[167,72679,53435],{"class":512},[167,72681,72682],{"class":177},"16px;\n",[167,72684,72685],{"class":169,"line":1032},[167,72686,3630],{"class":512},[167,72688,72689],{"class":169,"line":1049},[167,72690,72691],{"class":177},"tbody tr {\n",[167,72693,72694,72696,72698],{"class":169,"line":10005},[167,72695,72599],{"class":516},[167,72697,53435],{"class":512},[167,72699,72700],{"class":2268},"#fff;\n",[167,72702,72703],{"class":169,"line":10011},[167,72704,3630],{"class":512},[167,72706,72707],{"class":169,"line":10038},[167,72708,72709],{"class":177},"tbody tr:hover {\n",[167,72711,72712,72714,72716],{"class":169,"line":10043},[167,72713,72599],{"class":516},[167,72715,53435],{"class":512},[167,72717,72718],{"class":2268},"#e1ecf8;\n",[167,72720,72721],{"class":169,"line":10049},[167,72722,3630],{"class":512},[167,72724,72725],{"class":169,"line":10061},[167,72726,72727],{"class":177},".info {\n",[167,72729,72730,72732,72734],{"class":169,"line":10073},[167,72731,72556],{"class":516},[167,72733,53435],{"class":512},[167,72735,72736],{"class":177},"900px;\n",[167,72738,72739,72741,72743],{"class":169,"line":10085},[167,72740,72458],{"class":516},[167,72742,53435],{"class":512},[167,72744,72745],{"class":177},"50px auto;\n",[167,72747,72748,72750,72752],{"class":169,"line":11744},[167,72749,72514],{"class":516},[167,72751,53435],{"class":512},[167,72753,72519],{"class":177},[167,72755,72756],{"class":169,"line":11769},[167,72757,3630],{"class":512},[167,72759,72760],{"class":169,"line":11792},[167,72761,72762],{"class":177},".info  input, .info select {\n",[167,72764,72765,72767,72769],{"class":169,"line":11816},[167,72766,72556],{"class":516},[167,72768,53435],{"class":512},[167,72770,72771],{"class":177},"80px;\n",[167,72773,72774,72777,72779],{"class":169,"line":11821},[167,72775,72776],{"class":516},"  height",[167,72778,53435],{"class":512},[167,72780,72781],{"class":177},"27px;\n",[167,72783,72784,72787,72789],{"class":169,"line":11826},[167,72785,72786],{"class":516},"  outline",[167,72788,53435],{"class":512},[167,72790,72495],{"class":177},[167,72792,72793,72796,72798],{"class":169,"line":11831},[167,72794,72795],{"class":516},"  border-radius",[167,72797,53435],{"class":512},[167,72799,72800],{"class":177},"5px;\n",[167,72802,72803,72805],{"class":169,"line":11840},[167,72804,72643],{"class":177},[167,72806,72646],{"class":2268},[167,72808,72809,72812,72814],{"class":169,"line":11845},[167,72810,72811],{"class":516},"  padding-left",[167,72813,53435],{"class":512},[167,72815,72800],{"class":177},[167,72817,72818,72821,72823],{"class":169,"line":11851},[167,72819,72820],{"class":516},"  box-sizing",[167,72822,53435],{"class":512},[167,72824,72825],{"class":177},"border-box;\n",[167,72827,72828,72831,72833],{"class":169,"line":11872},[167,72829,72830],{"class":516},"  margin-right",[167,72832,53435],{"class":512},[167,72834,72835],{"class":177},"15px;\n",[167,72837,72838],{"class":169,"line":11878},[167,72839,3630],{"class":512},[167,72841,72842],{"class":169,"line":11892},[167,72843,72844],{"class":177},".info button {\n",[167,72846,72847,72849,72851],{"class":169,"line":11898},[167,72848,72556],{"class":516},[167,72850,53435],{"class":512},[167,72852,72853],{"class":177},"60px;\n",[167,72855,72856,72858,72860],{"class":169,"line":11925},[167,72857,72776],{"class":516},[167,72859,53435],{"class":512},[167,72861,72781],{"class":177},[167,72863,72864,72867,72869],{"class":169,"line":11934},[167,72865,72866],{"class":516},"  background-color",[167,72868,53435],{"class":512},[167,72870,72871],{"class":2268},"#004085;\n",[167,72873,72874,72876,72878],{"class":169,"line":11940},[167,72875,72786],{"class":516},[167,72877,53435],{"class":512},[167,72879,72495],{"class":177},[167,72881,72882,72885,72887],{"class":169,"line":11948},[167,72883,72884],{"class":516},"  border",[167,72886,53435],{"class":512},[167,72888,72463],{"class":177},[167,72890,72891,72894,72896],{"class":169,"line":11953},[167,72892,72893],{"class":516},"  color",[167,72895,53435],{"class":512},[167,72897,72700],{"class":2268},[167,72899,72900,72903,72905],{"class":169,"line":18630},[167,72901,72902],{"class":516},"  cursor",[167,72904,53435],{"class":512},[167,72906,72907],{"class":177},"pointer;\n",[167,72909,72910,72912,72914],{"class":169,"line":18636},[167,72911,72795],{"class":516},[167,72913,53435],{"class":512},[167,72915,72800],{"class":177},[167,72917,72918],{"class":169,"line":18659},[167,72919,3630],{"class":512},[167,72921,72922],{"class":169,"line":18665},[167,72923,72924],{"class":177},".info .age {\n",[167,72926,72927,72929,72931],{"class":169,"line":18688},[167,72928,72556],{"class":516},[167,72930,53435],{"class":512},[167,72932,72933],{"class":177},"50px;\n",[167,72935,72936],{"class":169,"line":18702},[167,72937,3630],{"class":512},[19,72939,72940],{},"思路：",[19,72942,72943],{},[3528,72944],{"alt":32,"src":72945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72947,72948],{},[3528,72949],{"alt":32,"src":72950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72952,72953],{},[3528,72954],{"alt":32,"src":72955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[494,72957,72959],{"id":72958},"_3315-重绘回流","3.3.15 重绘回流",[19,72961,72962],{},[3528,72963],{"alt":32,"src":72964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72966,72967],{},[3528,72968],{"alt":32,"src":72969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72971,72972],{},[3528,72973],{"alt":32,"src":72974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72976,72978],{"id":72977},"_34-bom","3.4 BOM",[19,72980,72981],{},[3528,72982],{"alt":32,"src":72983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72985,72986],{},"平时写的document省略了window而已，实际上是window.document",[19,72988,72989],{},"函数也是这样，调用的时候实际为window.fn()",[19,72991,72992],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72994,72995],{},"window大部分情况下可以省略",[494,72997,72999],{"id":72998},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73001,73002],{},"只执行一次",[19,73004,73005],{},[3528,73006],{"alt":32,"src":73007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73009,73010],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73012,73013],{},[3528,73014],{"alt":32,"src":73015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[494,73017,73019],{"id":73018},"_342-js执行机制","3.4.2 JS执行机制",[19,73021,73022],{},[3528,73023],{"alt":32,"src":73024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73026,73027],{},"两个的结果都是1111 3333 2222",[19,73029,73030],{},[3528,73031],{"alt":32,"src":73032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73034,73035],{},[3528,73036],{"alt":32,"src":73037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73039,73040],{},[3528,73041],{"alt":32,"src":73042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73044,73045],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73047,73048],{},"工作流程：",[19,73050,73051],{},[3528,73052],{"alt":32,"src":73053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73055,73056],{},[3528,73057],{"alt":32,"src":73058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73060,73061],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73063,73064],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[494,73066,73068],{"id":73067},"_343-location对象","3.4.3 location对象",[19,73070,73071],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73073,73074],{},[3528,73075],{"alt":32,"src":73076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73078,73079],{},"href可以跳转页面",[40,73081,73082],{},[43,73083,73084],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73086,73087],{},"search得到提交信息之后网站后边的地址",[19,73089,73090],{},[3528,73091],{"alt":32,"src":73092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73094,73095],{},[3528,73096],{"alt":32,"src":73097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[40,73099,73100],{"start":191},[43,73101,73102],{},"hash:这个获取单页面应用#后边的地址",[19,73104,73105],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73107,73108],{},[3528,73109],{"alt":32,"src":73110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,73112,73114],{"className":503,"code":73113,"language":505,"meta":32,"style":32},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[34,73115,73116,73136,73156],{"__ignoreMap":32},[167,73117,73118,73120,73122,73124,73126,73129,73132,73134],{"class":169,"line":170},[167,73119,542],{"class":512},[167,73121,2439],{"class":516},[167,73123,63046],{"class":173},[167,73125,523],{"class":512},[167,73127,73128],{"class":177},"\"#\u002Fmy\"",[167,73130,73131],{"class":512},">我的\u003C\u002F",[167,73133,2439],{"class":516},[167,73135,537],{"class":512},[167,73137,73138,73140,73142,73144,73146,73149,73152,73154],{"class":169,"line":191},[167,73139,542],{"class":512},[167,73141,2439],{"class":516},[167,73143,63046],{"class":173},[167,73145,523],{"class":512},[167,73147,73148],{"class":177},"\"#\u002Ffriend\"",[167,73150,73151],{"class":512},">关注\u003C\u002F",[167,73153,2439],{"class":516},[167,73155,537],{"class":512},[167,73157,73158,73160,73162,73164,73166,73169,73172,73174],{"class":169,"line":205},[167,73159,542],{"class":512},[167,73161,2439],{"class":516},[167,73163,63046],{"class":173},[167,73165,523],{"class":512},[167,73167,73168],{"class":177},"\"#\u002Fdownload\"",[167,73170,73171],{"class":512},">下载\u003C\u002F",[167,73173,2439],{"class":516},[167,73175,537],{"class":512},[19,73177,73178],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[40,73180,73181],{"start":205},[43,73182,73183,73184,73186,73187,73189],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55707,73185],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55707,73188],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[494,73191,73193],{"id":73192},"_345-navigator对象","3.4.5 navigator对象",[19,73195,73196],{},[3528,73197],{"alt":32,"src":73198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,73200,73204],{"className":73201,"code":73202,"language":73203,"meta":32,"style":32},"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",[34,73205,73206,73211,73222,73234,73239,73290,73331,73336,73349,73361,73366],{"__ignoreMap":32},[167,73207,73208],{"class":169,"line":170},[167,73209,73210],{"class":2268},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[167,73212,73213,73215,73217,73219],{"class":169,"line":191},[167,73214,2427],{"class":731},[167,73216,898],{"class":512},[167,73218,56439],{"class":731},[167,73220,73221],{"class":512}," () { \n",[167,73223,73224,73226,73229,73231],{"class":169,"line":205},[167,73225,8822],{"class":731},[167,73227,73228],{"class":184}," userAgent",[167,73230,753],{"class":731},[167,73232,73233],{"class":512}," navigator.userAgent \n",[167,73235,73236],{"class":169,"line":219},[167,73237,73238],{"class":2268},"\u002F\u002F 验证是否为Android或iPhone \n",[167,73240,73241,73243,73246,73248,73251,73254,73256,73258,73261,73263,73266,73270,73272,73274,73276,73279,73281,73283,73285,73287],{"class":169,"line":230},[167,73242,8822],{"class":731},[167,73244,73245],{"class":184}," android",[167,73247,753],{"class":731},[167,73249,73250],{"class":512}," userAgent.",[167,73252,73253],{"class":173},"match",[167,73255,898],{"class":512},[167,73257,2784],{"class":177},[167,73259,73260],{"class":49977},"(Android);",[167,73262,3185],{"class":731},[167,73264,73265],{"class":184},"[\\s",[167,73267,73269],{"class":73268},"snhLl","\\\u002F",[167,73271,3139],{"class":184},[167,73273,2681],{"class":731},[167,73275,898],{"class":49977},[167,73277,73278],{"class":184},"[\\d.]",[167,73280,2681],{"class":731},[167,73282,2629],{"class":49977},[167,73284,3185],{"class":731},[167,73286,2784],{"class":177},[167,73288,73289],{"class":512},") \n",[167,73291,73292,73294,73297,73299,73301,73303,73305,73307,73310,73313,73316,73318,73320,73323,73325,73327,73329],{"class":169,"line":241},[167,73293,8822],{"class":731},[167,73295,73296],{"class":184}," iphone",[167,73298,753],{"class":731},[167,73300,73250],{"class":512},[167,73302,73253],{"class":173},[167,73304,898],{"class":512},[167,73306,2784],{"class":177},[167,73308,73309],{"class":49977},"(iPhone",[167,73311,73312],{"class":184},"\\s",[167,73314,73315],{"class":49977},"OS)",[167,73317,73312],{"class":184},[167,73319,898],{"class":49977},[167,73321,73322],{"class":184},"[\\d_]",[167,73324,2681],{"class":731},[167,73326,2629],{"class":49977},[167,73328,2784],{"class":177},[167,73330,73289],{"class":512},[167,73332,73333],{"class":169,"line":261},[167,73334,73335],{"class":2268},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[167,73337,73338,73340,73343,73346],{"class":169,"line":773},[167,73339,1035],{"class":731},[167,73341,73342],{"class":512}," (android ",[167,73344,73345],{"class":731},"||",[167,73347,73348],{"class":512}," iphone) { \n",[167,73350,73351,73354,73356,73359],{"class":169,"line":779},[167,73352,73353],{"class":512},"location.href ",[167,73355,523],{"class":731},[167,73357,73358],{"class":177}," 'http:\u002F\u002Fm.itcast.cn'",[167,73360,4710],{"class":512},[167,73362,73363],{"class":169,"line":785},[167,73364,73365],{"class":512},"} \n",[167,73367,73368],{"class":169,"line":790},[167,73369,73370],{"class":512},"})()\n",[494,73372,73374],{"id":73373},"_346-histroy对象","3.4.6 histroy对象",[19,73376,73377],{},[3528,73378],{"alt":32,"src":73379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73381,73382],{},"浏览器地址的前进与后退!!!",[19,73384,73385],{},"history.back() 等效于 history.go(-1)",[19,73387,73388],{},"history.forward() 等效于 history.go(1)",[14,73390,73392],{"id":73391},"_35-本地存储","3.5 本地存储",[40,73394,73395,73398,73401],{},[43,73396,73397],{},"数据存储在用户浏览器中",[43,73399,73400],{},"设置、读取方便、甚至页面刷新不丢失数据",[43,73402,73403],{},"容量较大，sessionStorage和localStorage约 5M 左右",[494,73405,73407],{"id":73406},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73409,73410],{},"只能存储字符串",[19,73412,73413],{},[3528,73414],{"alt":32,"src":73415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73417,73418],{},[3528,73419],{"alt":32,"src":73420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73422,73423],{},"键值对要加引号,不然就会当变量来看了",[19,73425,73426],{},"localStorage.setItem('uname', 'pink')",[19,73428,73429],{},"刷新之后信息不再丢失",[19,73431,73432],{},"操作key,value会跟着变",[19,73434,73435],{},"删除只删除键就可以,即名字",[19,73437,73426],{},[19,73439,73440],{},"改:",[19,73442,73443],{},"localStorage.setItem('uname','red')",[19,73445,73446],{},"有这个键就是改,没有这个键就是改",[19,73448,73449],{},[3528,73450],{"alt":32,"src":73451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73453,73454],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73456,73457],{},[3528,73458],{"alt":32,"src":73459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73461,73462],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[494,73464,73466],{"id":73465},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73468,73469],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73471,73472],{},"特性:",[40,73474,73475,73478,73481,73484],{},[43,73476,73477],{},"生命周期为关闭浏览器窗口",[43,73479,73480],{},"在同一个窗口(页面)下数据可以共享",[43,73482,73483],{},"以键值对的形式存储使用",[43,73485,73486],{},"用法跟localStorage 基本相同",[494,73488,73490],{"id":73489},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73492,73493],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,73495,73497],{"className":503,"code":73496,"language":505,"meta":32,"style":32},"\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",[34,73498,73499,73507,73512,73517,73522,73527,73531,73536,73541],{"__ignoreMap":32},[167,73500,73501,73503,73505],{"class":169,"line":170},[167,73502,513],{"class":512},[167,73504,53809],{"class":516},[167,73506,537],{"class":512},[167,73508,73509],{"class":169,"line":191},[167,73510,73511],{"class":512},"    const obj = {\n",[167,73513,73514],{"class":169,"line":205},[167,73515,73516],{"class":512},"      uname: 'pink老师',\n",[167,73518,73519],{"class":169,"line":219},[167,73520,73521],{"class":512},"      age: 18,\n",[167,73523,73524],{"class":169,"line":230},[167,73525,73526],{"class":512},"      gender: '女'\n",[167,73528,73529],{"class":169,"line":241},[167,73530,4231],{"class":512},[167,73532,73533],{"class":169,"line":261},[167,73534,73535],{"class":512},"    \u002F\u002F 存储复杂数据类型\n",[167,73537,73538],{"class":169,"line":773},[167,73539,73540],{"class":512},"    localStorage.setItem('obj', obj)\n",[167,73542,73543,73545,73547],{"class":169,"line":779},[167,73544,54412],{"class":512},[167,73546,53809],{"class":516},[167,73548,537],{"class":512},[19,73550,73551],{},[3528,73552],{"alt":32,"src":73553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73555,73556],{},"如果获取一下数据:",[19,73558,73559],{},"log(localStorage.getItem('obj'))",[19,73561,73562],{},[3528,73563],{"alt":32,"src":73564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73566,73567],{},"发现直接存对象是使用不了的!!!",[24024,73569,73571],{"id":73570},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73573,73574],{},[3528,73575],{"alt":32,"src":73576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,73578,73580],{"className":52633,"code":73579,"language":52635,"meta":32,"style":32},"\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",[34,73581,73582,73590,73600,73610,73619,73627,73631,73635,73661,73680,73688,73692,73697,73702],{"__ignoreMap":32},[167,73583,73584,73586,73588],{"class":169,"line":170},[167,73585,513],{"class":512},[167,73587,53809],{"class":516},[167,73589,537],{"class":512},[167,73591,73592,73594,73596,73598],{"class":169,"line":191},[167,73593,13249],{"class":731},[167,73595,71959],{"class":184},[167,73597,753],{"class":731},[167,73599,17598],{"class":512},[167,73601,73602,73605,73608],{"class":169,"line":205},[167,73603,73604],{"class":512},"      uname: ",[167,73606,73607],{"class":177},"'pink老师'",[167,73609,33471],{"class":512},[167,73611,73612,73615,73617],{"class":169,"line":219},[167,73613,73614],{"class":512},"      age: ",[167,73616,2850],{"class":184},[167,73618,33471],{"class":512},[167,73620,73621,73624],{"class":169,"line":230},[167,73622,73623],{"class":512},"      gender: ",[167,73625,73626],{"class":177},"'女'\n",[167,73628,73629],{"class":169,"line":241},[167,73630,4231],{"class":512},[167,73632,73633],{"class":169,"line":261},[167,73634,73535],{"class":2268},[167,73636,73637,73640,73643,73645,73648,73650,73653,73655,73658],{"class":169,"line":773},[167,73638,73639],{"class":512},"  localStorage.",[167,73641,73642],{"class":173},"setItem",[167,73644,898],{"class":512},[167,73646,73647],{"class":177},"'obj'",[167,73649,14463],{"class":512},[167,73651,73652],{"class":184},"JSON",[167,73654,2758],{"class":512},[167,73656,73657],{"class":173},"stringify",[167,73659,73660],{"class":512},"(obj))\n",[167,73662,73663,73666,73668,73671,73674,73676,73678],{"class":169,"line":779},[167,73664,73665],{"class":512},"  console.",[167,73667,60236],{"class":173},[167,73669,73670],{"class":512},"(localStorage.",[167,73672,73673],{"class":173},"getItem",[167,73675,898],{"class":512},[167,73677,73647],{"class":177},[167,73679,32505],{"class":512},[167,73681,73682,73684,73686],{"class":169,"line":785},[167,73683,54412],{"class":512},[167,73685,53809],{"class":516},[167,73687,537],{"class":512},[167,73689,73690],{"class":169,"line":790},[167,73691,72609],{"class":512},[167,73693,73694],{"class":169,"line":796},[167,73695,73696],{"class":512},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[167,73698,73699],{"class":169,"line":802},[167,73700,73701],{"class":512},"  类型是字符串的\n",[167,73703,73704],{"class":169,"line":808},[167,73705,73706],{"class":512},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24024,73708,73710],{"id":73709},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73712,73713],{},[3528,73714],{"alt":32,"src":73715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73717,73718],{},[3528,73719],{"alt":32,"src":73720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,73722,73724],{"className":503,"code":73723,"language":505,"meta":32,"style":32},"  \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",[34,73725,73726,73734,73738,73742,73746,73750,73754,73759,73764,73769,73774,73779,73784,73789,73794],{"__ignoreMap":32},[167,73727,73728,73730,73732],{"class":169,"line":170},[167,73729,542],{"class":512},[167,73731,53809],{"class":516},[167,73733,537],{"class":512},[167,73735,73736],{"class":169,"line":191},[167,73737,73511],{"class":512},[167,73739,73740],{"class":169,"line":205},[167,73741,73516],{"class":512},[167,73743,73744],{"class":169,"line":219},[167,73745,73521],{"class":512},[167,73747,73748],{"class":169,"line":230},[167,73749,73526],{"class":512},[167,73751,73752],{"class":169,"line":241},[167,73753,4231],{"class":512},[167,73755,73756],{"class":169,"line":261},[167,73757,73758],{"class":512},"    \u002F\u002F 1.存储复杂数据类型\n",[167,73760,73761],{"class":169,"line":773},[167,73762,73763],{"class":512},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[167,73765,73766],{"class":169,"line":779},[167,73767,73768],{"class":512},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[167,73770,73771],{"class":169,"line":785},[167,73772,73773],{"class":512},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[167,73775,73776],{"class":169,"line":790},[167,73777,73778],{"class":512},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[167,73780,73781],{"class":169,"line":796},[167,73782,73783],{"class":512},"    \u002F\u002F 取\n",[167,73785,73786],{"class":169,"line":802},[167,73787,73788],{"class":512},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[167,73790,73791],{"class":169,"line":808},[167,73792,73793],{"class":512},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[167,73795,73796,73798,73800],{"class":169,"line":814},[167,73797,54412],{"class":512},[167,73799,53809],{"class":516},[167,73801,537],{"class":512},[19,73803,73804],{},[3528,73805],{"alt":32,"src":73806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[494,73808,73810],{"id":73809},"_356-数组map方法","3.5.6 数组map方法",[19,73812,73813],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73815,73816],{},[3528,73817],{"alt":32,"src":73818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73820,73821],{},[3528,73822],{"alt":32,"src":73823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73825,73826,73829],{},[2354,73827,73828],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73831,73832],{},"map有返回值，但是forEach没有返回值",[19,73834,73835],{},"map是个方法。用的时候要加 ()",[19,73837,73838],{},"map返回的是一个数组",[494,73840,73842],{"id":73841},"_357-数组中join方法","3.5.7 数组中join方法",[19,73844,73845],{},[3528,73846],{"alt":32,"src":73847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73849,73850],{},"类似于python中拼接字符串一样！",[40,73852,73853,73856,73859],{},[43,73854,73855],{},"小括号为空则逗号分开",[43,73857,73858],{},"小括号为空字符串 ''，则元素之间没有分隔符",[43,73860,73861],{},"小括号用啥符号就用进行分割",[494,73863,73865],{"id":73864},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[40,73867,73868,73871,73874,73877,73880],{},[43,73869,73870],{},"记住本地时间获取快速方式：new Date().toDateString()",[43,73872,73873],{},"尽量减少DOM操作，用好map+join的渲染方式",[43,73875,73876],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[43,73878,73879],{},"return可以实现函数的结束",[43,73881,73882],{},"禁止跳转是 preventDefault() 不要忘记",[26,73884,73886],{"className":52633,"code":73885,"language":52635,"meta":32,"style":32},"\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",[34,73887,73888,73898,73912,73916,73924,73938,73958,73970,73978,73984,73994,74004,74008,74012,74018,74028,74040,74044,74048,74055,74067,74081,74091,74095,74099,74106,74113,74120,74132,74144,74154,74166,74170,74174,74181,74188,74200,74212,74222,74234,74264,74268,74272,74279,74291,74303,74327,74337,74347,74351,74355,74363,74374,74386,74398,74410,74427,74439,74451,74455,74459,74466,74478,74490,74502,74513,74531,74544,74556,74580,74591,74595,74599,74607,74617,74621,74625,74631,74643,74654,74664,74668,74672,74678,74700,74704,74708,74714,74720,74732,74742,74754,74784,74797,74814,74818,74822,74833,74855,74865,74869,74873,74886,74896,74908,74920,74932,74944,74954,74964,74974,74985,74998,75002,75010,75018,75022,75030,75043,75063,75096,75129,75162,75188,75206,75224,75232,75258,75276,75294,75312,75330,75348,75356,75364,75382,75390,75419,75427,75435,75443,75456,75468,75480,75492,75504,75516,75529,75541,75549,75557,75565,75570,75575,75579,75583,75587,75591,75595,75599,75604,75609,75614,75619,75627,75635,75643,75648,75653,75658,75663,75668,75673,75678,75683,75688,75693,75698,75703,75708,75713,75717,75722,75727,75737,75746,75750,75755,75764,75780,75822,75862,75901,75966,75974,75978,75983,76001,76009,76014,76019,76049,76055,76060,76073,76085,76097,76109,76121,76133,76145,76149,76159,76163,76168,76173,76177,76186,76190,76195,76200,76219,76224,76244,76248,76253,76257,76262,76280,76298,76316,76335,76354,76373,76378,76384,76405,76411,76420,76426,76432,76438,76465,76478,76483,76493,76499,76505,76511,76517,76522,76528,76534,76540,76546,76579,76584,76589,76594,76599,76605,76611,76617,76628,76633,76639,76646,76660,76666,76690,76695,76700,76706,76712,76733,76739,76752,76758,76764,76770,76776,76781,76787,76793,76799,76817,76831,76837,76845,76851,76873,76878,76883,76888,76893,76898,76907,76916,76921],{"__ignoreMap":32},[167,73889,73890,73892,73894,73896],{"class":169,"line":170},[167,73891,53297],{"class":512},[167,73893,53300],{"class":516},[167,73895,53303],{"class":173},[167,73897,537],{"class":512},[167,73899,73900,73902,73904,73906,73908,73910],{"class":169,"line":191},[167,73901,513],{"class":512},[167,73903,52635],{"class":516},[167,73905,53314],{"class":173},[167,73907,523],{"class":512},[167,73909,53319],{"class":177},[167,73911,537],{"class":512},[167,73913,73914],{"class":169,"line":205},[167,73915,741],{"emptyLinePlaceholder":740},[167,73917,73918,73920,73922],{"class":169,"line":219},[167,73919,513],{"class":512},[167,73921,53332],{"class":516},[167,73923,537],{"class":512},[167,73925,73926,73928,73930,73932,73934,73936],{"class":169,"line":230},[167,73927,542],{"class":512},[167,73929,53342],{"class":516},[167,73931,53345],{"class":173},[167,73933,523],{"class":512},[167,73935,53350],{"class":177},[167,73937,537],{"class":512},[167,73939,73940,73942,73944,73946,73948,73950,73952,73954,73956],{"class":169,"line":241},[167,73941,542],{"class":512},[167,73943,53342],{"class":516},[167,73945,520],{"class":173},[167,73947,523],{"class":512},[167,73949,53389],{"class":177},[167,73951,53369],{"class":173},[167,73953,523],{"class":512},[167,73955,53396],{"class":177},[167,73957,537],{"class":512},[167,73959,73960,73962,73964,73966,73968],{"class":169,"line":261},[167,73961,542],{"class":512},[167,73963,53405],{"class":516},[167,73965,53408],{"class":512},[167,73967,53405],{"class":516},[167,73969,537],{"class":512},[167,73971,73972,73974,73976],{"class":169,"line":773},[167,73973,542],{"class":512},[167,73975,2113],{"class":516},[167,73977,537],{"class":512},[167,73979,73980,73982],{"class":169,"line":779},[167,73981,8433],{"class":516},[167,73983,17598],{"class":512},[167,73985,73986,73988,73990,73992],{"class":169,"line":785},[167,73987,56685],{"class":184},[167,73989,53435],{"class":512},[167,73991,1154],{"class":184},[167,73993,3359],{"class":512},[167,73995,73996,73998,74000,74002],{"class":169,"line":790},[167,73997,56696],{"class":184},[167,73999,53435],{"class":512},[167,74001,1154],{"class":184},[167,74003,3359],{"class":512},[167,74005,74006],{"class":169,"line":796},[167,74007,4231],{"class":512},[167,74009,74010],{"class":169,"line":802},[167,74011,741],{"emptyLinePlaceholder":740},[167,74013,74014,74016],{"class":169,"line":808},[167,74015,59268],{"class":516},[167,74017,17598],{"class":512},[167,74019,74020,74022,74024,74026],{"class":169,"line":814},[167,74021,59275],{"class":184},[167,74023,53435],{"class":512},[167,74025,53590],{"class":184},[167,74027,3359],{"class":512},[167,74029,74030,74032,74034,74036,74038],{"class":169,"line":820},[167,74031,64066],{"class":184},[167,74033,53435],{"class":512},[167,74035,2900],{"class":184},[167,74037,53490],{"class":731},[167,74039,3359],{"class":512},[167,74041,74042],{"class":169,"line":826},[167,74043,4231],{"class":512},[167,74045,74046],{"class":169,"line":832},[167,74047,741],{"emptyLinePlaceholder":740},[167,74049,74050,74053],{"class":169,"line":837},[167,74051,74052],{"class":173},"    .info",[167,74054,17598],{"class":512},[167,74056,74057,74059,74061,74063,74065],{"class":169,"line":842},[167,74058,56761],{"class":184},[167,74060,53435],{"class":512},[167,74062,53487],{"class":184},[167,74064,53490],{"class":731},[167,74066,3359],{"class":512},[167,74068,74069,74071,74073,74075,74077,74079],{"class":169,"line":860},[167,74070,56696],{"class":184},[167,74072,53435],{"class":512},[167,74074,2646],{"class":184},[167,74076,53490],{"class":731},[167,74078,53554],{"class":184},[167,74080,3359],{"class":512},[167,74082,74083,74085,74087,74089],{"class":169,"line":876},[167,74084,59275],{"class":184},[167,74086,53435],{"class":512},[167,74088,53590],{"class":184},[167,74090,3359],{"class":512},[167,74092,74093],{"class":169,"line":887},[167,74094,4231],{"class":512},[167,74096,74097],{"class":169,"line":892},[167,74098,741],{"emptyLinePlaceholder":740},[167,74100,74101,74104],{"class":169,"line":907},[167,74102,74103],{"class":173},"    .uname",[167,74105,33471],{"class":512},[167,74107,74108,74111],{"class":169,"line":920},[167,74109,74110],{"class":173},"    .age",[167,74112,33471],{"class":512},[167,74114,74115,74118],{"class":169,"line":933},[167,74116,74117],{"class":173},"    .salary",[167,74119,17598],{"class":512},[167,74121,74122,74124,74126,74128,74130],{"class":169,"line":946},[167,74123,56761],{"class":184},[167,74125,53435],{"class":512},[167,74127,981],{"class":184},[167,74129,53490],{"class":731},[167,74131,3359],{"class":512},[167,74133,74134,74136,74138,74140,74142],{"class":169,"line":959},[167,74135,56775],{"class":184},[167,74137,53435],{"class":512},[167,74139,2900],{"class":184},[167,74141,53490],{"class":731},[167,74143,3359],{"class":512},[167,74145,74146,74148,74150,74152],{"class":169,"line":964},[167,74147,63769],{"class":184},[167,74149,53435],{"class":512},[167,74151,56727],{"class":184},[167,74153,3359],{"class":512},[167,74155,74156,74158,74160,74162,74164],{"class":169,"line":987},[167,74157,63739],{"class":184},[167,74159,53435],{"class":512},[167,74161,2775],{"class":184},[167,74163,53490],{"class":731},[167,74165,3359],{"class":512},[167,74167,74168],{"class":169,"line":993},[167,74169,4231],{"class":512},[167,74171,74172],{"class":169,"line":998},[167,74173,741],{"emptyLinePlaceholder":740},[167,74175,74176,74179],{"class":169,"line":1010},[167,74177,74178],{"class":173},"    .gender",[167,74180,33471],{"class":512},[167,74182,74183,74186],{"class":169,"line":1022},[167,74184,74185],{"class":173},"    .city",[167,74187,17598],{"class":512},[167,74189,74190,74192,74194,74196,74198],{"class":169,"line":1027},[167,74191,56761],{"class":184},[167,74193,53435],{"class":512},[167,74195,981],{"class":184},[167,74197,53490],{"class":731},[167,74199,3359],{"class":512},[167,74201,74202,74204,74206,74208,74210],{"class":169,"line":1032},[167,74203,56775],{"class":184},[167,74205,53435],{"class":512},[167,74207,3025],{"class":184},[167,74209,53490],{"class":731},[167,74211,3359],{"class":512},[167,74213,74214,74216,74218,74220],{"class":169,"line":1049},[167,74215,63769],{"class":184},[167,74217,53435],{"class":512},[167,74219,56727],{"class":184},[167,74221,3359],{"class":512},[167,74223,74224,74226,74228,74230,74232],{"class":169,"line":10005},[167,74225,63739],{"class":184},[167,74227,53435],{"class":512},[167,74229,2775],{"class":184},[167,74231,53490],{"class":731},[167,74233,3359],{"class":512},[167,74235,74236,74238,74240,74242,74244,74246,74249,74251,74253,74255,74258,74260,74262],{"class":169,"line":10011},[167,74237,63966],{"class":184},[167,74239,53435],{"class":512},[167,74241,2418],{"class":184},[167,74243,53490],{"class":731},[167,74245,53519],{"class":184},[167,74247,74248],{"class":184}," rgb",[167,74250,898],{"class":512},[167,74252,3776],{"class":184},[167,74254,14463],{"class":512},[167,74256,74257],{"class":184},"197",[167,74259,14463],{"class":512},[167,74261,74257],{"class":184},[167,74263,4755],{"class":512},[167,74265,74266],{"class":169,"line":10038},[167,74267,4231],{"class":512},[167,74269,74270],{"class":169,"line":10043},[167,74271,741],{"emptyLinePlaceholder":740},[167,74273,74274,74277],{"class":169,"line":10049},[167,74275,74276],{"class":516},"    button",[167,74278,17598],{"class":512},[167,74280,74281,74283,74285,74287,74289],{"class":169,"line":10061},[167,74282,56775],{"class":184},[167,74284,53435],{"class":512},[167,74286,3025],{"class":184},[167,74288,53490],{"class":731},[167,74290,3359],{"class":512},[167,74292,74293,74295,74297,74299,74301],{"class":169,"line":10073},[167,74294,56761],{"class":184},[167,74296,53435],{"class":512},[167,74298,2684],{"class":184},[167,74300,53490],{"class":731},[167,74302,3359],{"class":512},[167,74304,74305,74307,74309,74312,74314,74316,74318,74321,74323,74325],{"class":169,"line":10085},[167,74306,56874],{"class":184},[167,74308,53435],{"class":512},[167,74310,74311],{"class":184},"rgb",[167,74313,898],{"class":512},[167,74315,3168],{"class":184},[167,74317,14463],{"class":512},[167,74319,74320],{"class":184},"187",[167,74322,14463],{"class":512},[167,74324,2500],{"class":184},[167,74326,4755],{"class":512},[167,74328,74329,74331,74333,74335],{"class":169,"line":11744},[167,74330,59405],{"class":184},[167,74332,53435],{"class":512},[167,74334,62831],{"class":184},[167,74336,3359],{"class":512},[167,74338,74339,74341,74343,74345],{"class":169,"line":11769},[167,74340,63966],{"class":184},[167,74342,53435],{"class":512},[167,74344,1154],{"class":184},[167,74346,3359],{"class":512},[167,74348,74349],{"class":169,"line":11792},[167,74350,4231],{"class":512},[167,74352,74353],{"class":169,"line":11816},[167,74354,741],{"emptyLinePlaceholder":740},[167,74356,74357,74359,74361],{"class":169,"line":11821},[167,74358,74276],{"class":516},[167,74360,53686],{"class":516},[167,74362,17598],{"class":512},[167,74364,74365,74367,74369,74372],{"class":169,"line":11826},[167,74366,56999],{"class":184},[167,74368,53435],{"class":512},[167,74370,74371],{"class":184},"inline-block",[167,74373,3359],{"class":512},[167,74375,74376,74378,74380,74382,74384],{"class":169,"line":11831},[167,74377,56761],{"class":184},[167,74379,53435],{"class":512},[167,74381,2646],{"class":184},[167,74383,53490],{"class":731},[167,74385,3359],{"class":512},[167,74387,74388,74390,74392,74394,74396],{"class":169,"line":11840},[167,74389,56775],{"class":184},[167,74391,53435],{"class":512},[167,74393,2646],{"class":184},[167,74395,53490],{"class":731},[167,74397,3359],{"class":512},[167,74399,74400,74402,74404,74406,74408],{"class":169,"line":11845},[167,74401,59348],{"class":184},[167,74403,53435],{"class":512},[167,74405,2672],{"class":184},[167,74407,53490],{"class":731},[167,74409,3359],{"class":512},[167,74411,74412,74414,74416,74418,74420,74422,74425],{"class":169,"line":11851},[167,74413,63966],{"class":184},[167,74415,53435],{"class":512},[167,74417,2418],{"class":184},[167,74419,53490],{"class":731},[167,74421,53519],{"class":184},[167,74423,74424],{"class":184}," #fff",[167,74426,3359],{"class":512},[167,74428,74429,74431,74433,74435,74437],{"class":169,"line":11872},[167,74430,57123],{"class":184},[167,74432,53435],{"class":512},[167,74434,2519],{"class":184},[167,74436,53490],{"class":731},[167,74438,3359],{"class":512},[167,74440,74441,74443,74445,74447,74449],{"class":169,"line":11878},[167,74442,63739],{"class":184},[167,74444,53435],{"class":512},[167,74446,2418],{"class":184},[167,74448,53490],{"class":731},[167,74450,3359],{"class":512},[167,74452,74453],{"class":169,"line":11892},[167,74454,4231],{"class":512},[167,74456,74457],{"class":169,"line":11898},[167,74458,741],{"emptyLinePlaceholder":740},[167,74460,74461,74464],{"class":169,"line":11925},[167,74462,74463],{"class":173},"    .total",[167,74465,17598],{"class":512},[167,74467,74468,74470,74472,74474,74476],{"class":169,"line":11934},[167,74469,56761],{"class":184},[167,74471,53435],{"class":512},[167,74473,63618],{"class":184},[167,74475,53490],{"class":731},[167,74477,3359],{"class":512},[167,74479,74480,74482,74484,74486,74488],{"class":169,"line":11940},[167,74481,56775],{"class":184},[167,74483,53435],{"class":512},[167,74485,2601],{"class":184},[167,74487,53490],{"class":731},[167,74489,3359],{"class":512},[167,74491,74492,74494,74496,74498,74500],{"class":169,"line":11948},[167,74493,59348],{"class":184},[167,74495,53435],{"class":512},[167,74497,2601],{"class":184},[167,74499,53490],{"class":731},[167,74501,3359],{"class":512},[167,74503,74504,74506,74508,74511],{"class":169,"line":11953},[167,74505,59275],{"class":184},[167,74507,53435],{"class":512},[167,74509,74510],{"class":184},"right",[167,74512,3359],{"class":512},[167,74514,74515,74517,74519,74521,74523,74525,74527,74529],{"class":169,"line":18630},[167,74516,56696],{"class":184},[167,74518,53435],{"class":512},[167,74520,2601],{"class":184},[167,74522,53490],{"class":731},[167,74524,53554],{"class":184},[167,74526,4082],{"class":184},[167,74528,53490],{"class":731},[167,74530,3359],{"class":512},[167,74532,74533,74536,74538,74540,74542],{"class":169,"line":18636},[167,74534,74535],{"class":184},"      padding-right",[167,74537,53435],{"class":512},[167,74539,2646],{"class":184},[167,74541,53490],{"class":731},[167,74543,3359],{"class":512},[167,74545,74546,74548,74550,74552,74554],{"class":169,"line":18659},[167,74547,56912],{"class":184},[167,74549,53435],{"class":512},[167,74551,2723],{"class":184},[167,74553,53490],{"class":731},[167,74555,3359],{"class":512},[167,74557,74558,74560,74562,74564,74566,74569,74571,74574,74576,74578],{"class":169,"line":18665},[167,74559,56874],{"class":184},[167,74561,53435],{"class":512},[167,74563,74311],{"class":184},[167,74565,898],{"class":512},[167,74567,74568],{"class":184},"237",[167,74570,14463],{"class":512},[167,74572,74573],{"class":184},"235",[167,74575,14463],{"class":512},[167,74577,74573],{"class":184},[167,74579,4755],{"class":512},[167,74581,74582,74585,74587,74589],{"class":169,"line":18688},[167,74583,74584],{"class":184},"      box-sizing",[167,74586,53435],{"class":512},[167,74588,62494],{"class":184},[167,74590,3359],{"class":512},[167,74592,74593],{"class":169,"line":18702},[167,74594,4231],{"class":512},[167,74596,74597],{"class":169,"line":18722},[167,74598,741],{"emptyLinePlaceholder":740},[167,74600,74601,74603,74605],{"class":169,"line":18728},[167,74602,74463],{"class":173},[167,74604,53686],{"class":516},[167,74606,17598],{"class":512},[167,74608,74609,74611,74613,74615],{"class":169,"line":18739},[167,74610,59405],{"class":184},[167,74612,53435],{"class":512},[167,74614,59410],{"class":184},[167,74616,3359],{"class":512},[167,74618,74619],{"class":169,"line":18762},[167,74620,4231],{"class":512},[167,74622,74623],{"class":169,"line":18784},[167,74624,741],{"emptyLinePlaceholder":740},[167,74626,74627,74629],{"class":169,"line":18789},[167,74628,67012],{"class":516},[167,74630,17598],{"class":512},[167,74632,74633,74635,74637,74639,74641],{"class":169,"line":18795},[167,74634,56761],{"class":184},[167,74636,53435],{"class":512},[167,74638,63618],{"class":184},[167,74640,53490],{"class":731},[167,74642,3359],{"class":512},[167,74644,74645,74647,74649,74652],{"class":169,"line":18809},[167,74646,56696],{"class":184},[167,74648,53435],{"class":512},[167,74650,74651],{"class":184},"auto",[167,74653,3359],{"class":512},[167,74655,74656,74658,74660,74662],{"class":169,"line":18822},[167,74657,67019],{"class":184},[167,74659,53435],{"class":512},[167,74661,67024],{"class":184},[167,74663,3359],{"class":512},[167,74665,74666],{"class":169,"line":18827},[167,74667,4231],{"class":512},[167,74669,74670],{"class":169,"line":18841},[167,74671,741],{"emptyLinePlaceholder":740},[167,74673,74674,74676],{"class":169,"line":18846},[167,74675,67104],{"class":516},[167,74677,17598],{"class":512},[167,74679,74680,74682,74684,74686,74688,74690,74692,74694,74696,74698],{"class":169,"line":18852},[167,74681,56874],{"class":184},[167,74683,53435],{"class":512},[167,74685,74311],{"class":184},[167,74687,898],{"class":512},[167,74689,74568],{"class":184},[167,74691,14463],{"class":512},[167,74693,74573],{"class":184},[167,74695,14463],{"class":512},[167,74697,74573],{"class":184},[167,74699,4755],{"class":512},[167,74701,74702],{"class":169,"line":18857},[167,74703,4231],{"class":512},[167,74705,74706],{"class":169,"line":18871},[167,74707,741],{"emptyLinePlaceholder":740},[167,74709,74710,74712],{"class":169,"line":18876},[167,74711,67104],{"class":516},[167,74713,33471],{"class":512},[167,74715,74716,74718],{"class":169,"line":18881},[167,74717,67170],{"class":516},[167,74719,17598],{"class":512},[167,74721,74722,74724,74726,74728,74730],{"class":169,"line":18895},[167,74723,56775],{"class":184},[167,74725,53435],{"class":512},[167,74727,2474],{"class":184},[167,74729,53490],{"class":731},[167,74731,3359],{"class":512},[167,74733,74734,74736,74738,74740],{"class":169,"line":18907},[167,74735,59275],{"class":184},[167,74737,53435],{"class":512},[167,74739,79],{"class":184},[167,74741,3359],{"class":512},[167,74743,74744,74746,74748,74750,74752],{"class":169,"line":18912},[167,74745,56912],{"class":184},[167,74747,53435],{"class":512},[167,74749,2749],{"class":184},[167,74751,53490],{"class":731},[167,74753,3359],{"class":512},[167,74755,74756,74758,74760,74762,74764,74766,74768,74770,74773,74775,74778,74780,74782],{"class":169,"line":18925},[167,74757,63966],{"class":184},[167,74759,53435],{"class":512},[167,74761,2418],{"class":184},[167,74763,53490],{"class":731},[167,74765,53519],{"class":184},[167,74767,74248],{"class":184},[167,74769,898],{"class":512},[167,74771,74772],{"class":184},"228",[167,74774,14463],{"class":512},[167,74776,74777],{"class":184},"225",[167,74779,14463],{"class":512},[167,74781,74777],{"class":184},[167,74783,4755],{"class":512},[167,74785,74786,74789,74791,74793,74795],{"class":169,"line":18930},[167,74787,74788],{"class":184},"      padding-left",[167,74790,53435],{"class":512},[167,74792,2519],{"class":184},[167,74794,53490],{"class":731},[167,74796,3359],{"class":512},[167,74798,74799,74801,74803,74805,74808,74810,74812],{"class":169,"line":18935},[167,74800,63849],{"class":184},[167,74802,53435],{"class":512},[167,74804,30138],{"class":184},[167,74806,74807],{"class":184}," linear",[167,74809,63856],{"class":184},[167,74811,2895],{"class":731},[167,74813,3359],{"class":512},[167,74815,74816],{"class":169,"line":18940},[167,74817,4231],{"class":512},[167,74819,74820],{"class":169,"line":18953},[167,74821,741],{"emptyLinePlaceholder":740},[167,74823,74824,74827,74829,74831],{"class":169,"line":18958},[167,74825,74826],{"class":516},"    tbody",[167,74828,72132],{"class":516},[167,74830,62929],{"class":173},[167,74832,17598],{"class":512},[167,74834,74835,74837,74839,74841,74843,74845,74847,74849,74851,74853],{"class":169,"line":34636},[167,74836,56874],{"class":184},[167,74838,53435],{"class":512},[167,74840,74311],{"class":184},[167,74842,898],{"class":512},[167,74844,74568],{"class":184},[167,74846,14463],{"class":512},[167,74848,74573],{"class":184},[167,74850,14463],{"class":512},[167,74852,74573],{"class":184},[167,74854,4755],{"class":512},[167,74856,74857,74859,74861,74863],{"class":169,"line":34642},[167,74858,64014],{"class":184},[167,74860,53435],{"class":512},[167,74862,64019],{"class":184},[167,74864,3359],{"class":512},[167,74866,74867],{"class":169,"line":34648},[167,74868,4231],{"class":512},[167,74870,74871],{"class":169,"line":34654},[167,74872,741],{"emptyLinePlaceholder":740},[167,74874,74875,74877,74879,74882,74884],{"class":169,"line":34660},[167,74876,74826],{"class":516},[167,74878,72132],{"class":516},[167,74880,74881],{"class":516}," td",[167,74883,3464],{"class":516},[167,74885,17598],{"class":512},[167,74887,74888,74890,74892,74894],{"class":169,"line":34671},[167,74889,56999],{"class":184},[167,74891,53435],{"class":512},[167,74893,62858],{"class":184},[167,74895,3359],{"class":512},[167,74897,74898,74900,74902,74904,74906],{"class":169,"line":34677},[167,74899,56761],{"class":184},[167,74901,53435],{"class":512},[167,74903,3107],{"class":184},[167,74905,53490],{"class":731},[167,74907,3359],{"class":512},[167,74909,74910,74912,74914,74916,74918],{"class":169,"line":34697},[167,74911,56775],{"class":184},[167,74913,53435],{"class":512},[167,74915,3025],{"class":184},[167,74917,53490],{"class":731},[167,74919,3359],{"class":512},[167,74921,74922,74924,74926,74928,74930],{"class":169,"line":34703},[167,74923,59348],{"class":184},[167,74925,53435],{"class":512},[167,74927,3025],{"class":184},[167,74929,53490],{"class":731},[167,74931,3359],{"class":512},[167,74933,74934,74936,74938,74940,74942],{"class":169,"line":34714},[167,74935,64066],{"class":184},[167,74937,53435],{"class":512},[167,74939,2287],{"class":184},[167,74941,53490],{"class":731},[167,74943,3359],{"class":512},[167,74945,74946,74948,74950,74952],{"class":169,"line":34720},[167,74947,59405],{"class":184},[167,74949,53435],{"class":512},[167,74951,62831],{"class":184},[167,74953,3359],{"class":512},[167,74955,74956,74958,74960,74962],{"class":169,"line":34726},[167,74957,59275],{"class":184},[167,74959,53435],{"class":512},[167,74961,53590],{"class":184},[167,74963,3359],{"class":512},[167,74965,74966,74968,74970,74972],{"class":169,"line":34732},[167,74967,65959],{"class":184},[167,74969,53435],{"class":512},[167,74971,56727],{"class":184},[167,74973,3359],{"class":512},[167,74975,74976,74978,74980,74983],{"class":169,"line":34738},[167,74977,56874],{"class":184},[167,74979,53435],{"class":512},[167,74981,74982],{"class":184},"orange",[167,74984,3359],{"class":512},[167,74986,74987,74989,74991,74994,74996],{"class":169,"line":34744},[167,74988,57123],{"class":184},[167,74990,53435],{"class":512},[167,74992,74993],{"class":184},"12.5",[167,74995,53490],{"class":731},[167,74997,3359],{"class":512},[167,74999,75000],{"class":169,"line":34750},[167,75001,4231],{"class":512},[167,75003,75004,75006,75008],{"class":169,"line":34756},[167,75005,54412],{"class":512},[167,75007,2113],{"class":516},[167,75009,537],{"class":512},[167,75011,75012,75014,75016],{"class":169,"line":34776},[167,75013,575],{"class":512},[167,75015,53332],{"class":516},[167,75017,537],{"class":512},[167,75019,75020],{"class":169,"line":34782},[167,75021,741],{"emptyLinePlaceholder":740},[167,75023,75024,75026,75028],{"class":169,"line":34798},[167,75025,513],{"class":512},[167,75027,517],{"class":516},[167,75029,537],{"class":512},[167,75031,75032,75034,75036,75039,75041],{"class":169,"line":34804},[167,75033,542],{"class":512},[167,75035,14],{"class":516},[167,75037,75038],{"class":512},">学生就业统计表\u003C\u002F",[167,75040,14],{"class":516},[167,75042,537],{"class":512},[167,75044,75045,75047,75049,75051,75053,75055,75057,75059,75061],{"class":169,"line":34818},[167,75046,542],{"class":512},[167,75048,68614],{"class":516},[167,75050,55479],{"class":173},[167,75052,523],{"class":512},[167,75054,64653],{"class":177},[167,75056,71059],{"class":173},[167,75058,523],{"class":512},[167,75060,33781],{"class":177},[167,75062,537],{"class":512},[167,75064,75065,75067,75069,75071,75073,75075,75077,75079,75081,75083,75085,75088,75090,75092,75094],{"class":169,"line":34824},[167,75066,53339],{"class":512},[167,75068,55812],{"class":516},[167,75070,555],{"class":173},[167,75072,523],{"class":512},[167,75074,64688],{"class":177},[167,75076,520],{"class":173},[167,75078,523],{"class":512},[167,75080,71085],{"class":177},[167,75082,63009],{"class":173},[167,75084,523],{"class":512},[167,75086,75087],{"class":177},"\"姓名\"",[167,75089,55479],{"class":173},[167,75091,523],{"class":512},[167,75093,71085],{"class":177},[167,75095,537],{"class":512},[167,75097,75098,75100,75102,75104,75106,75108,75110,75112,75114,75116,75118,75121,75123,75125,75127],{"class":169,"line":34839},[167,75099,53339],{"class":512},[167,75101,55812],{"class":516},[167,75103,555],{"class":173},[167,75105,523],{"class":512},[167,75107,64688],{"class":177},[167,75109,520],{"class":173},[167,75111,523],{"class":512},[167,75113,71113],{"class":177},[167,75115,63009],{"class":173},[167,75117,523],{"class":512},[167,75119,75120],{"class":177},"\"年龄\"",[167,75122,55479],{"class":173},[167,75124,523],{"class":512},[167,75126,71113],{"class":177},[167,75128,537],{"class":512},[167,75130,75131,75133,75135,75137,75139,75141,75143,75145,75147,75149,75151,75154,75156,75158,75160],{"class":169,"line":34845},[167,75132,53339],{"class":512},[167,75134,55812],{"class":516},[167,75136,555],{"class":173},[167,75138,523],{"class":512},[167,75140,64688],{"class":177},[167,75142,520],{"class":173},[167,75144,523],{"class":512},[167,75146,71214],{"class":177},[167,75148,63009],{"class":173},[167,75150,523],{"class":512},[167,75152,75153],{"class":177},"\"薪资\"",[167,75155,55479],{"class":173},[167,75157,523],{"class":512},[167,75159,71214],{"class":177},[167,75161,537],{"class":512},[167,75163,75164,75166,75168,75170,75172,75174,75176,75178,75180,75182,75184,75186],{"class":169,"line":34854},[167,75165,53339],{"class":512},[167,75167,71133],{"class":516},[167,75169,520],{"class":173},[167,75171,523],{"class":512},[167,75173,71140],{"class":177},[167,75175,16985],{"class":173},[167,75177,523],{"class":512},[167,75179,9682],{"class":177},[167,75181,55479],{"class":173},[167,75183,523],{"class":512},[167,75185,71140],{"class":177},[167,75187,537],{"class":512},[167,75189,75190,75192,75194,75196,75198,75200,75202,75204],{"class":169,"line":34860},[167,75191,57223],{"class":512},[167,75193,620],{"class":516},[167,75195,68640],{"class":173},[167,75197,523],{"class":512},[167,75199,11989],{"class":177},[167,75201,71163],{"class":512},[167,75203,620],{"class":516},[167,75205,537],{"class":512},[167,75207,75208,75210,75212,75214,75216,75218,75220,75222],{"class":169,"line":34869},[167,75209,57223],{"class":512},[167,75211,620],{"class":516},[167,75213,68640],{"class":173},[167,75215,523],{"class":512},[167,75217,12058],{"class":177},[167,75219,71182],{"class":512},[167,75221,620],{"class":516},[167,75223,537],{"class":512},[167,75225,75226,75228,75230],{"class":169,"line":34875},[167,75227,53774],{"class":512},[167,75229,71133],{"class":516},[167,75231,537],{"class":512},[167,75233,75234,75236,75238,75240,75242,75244,75246,75248,75250,75252,75254,75256],{"class":169,"line":34881},[167,75235,53339],{"class":512},[167,75237,71133],{"class":516},[167,75239,520],{"class":173},[167,75241,523],{"class":512},[167,75243,71236],{"class":177},[167,75245,16985],{"class":173},[167,75247,523],{"class":512},[167,75249,9682],{"class":177},[167,75251,55479],{"class":173},[167,75253,523],{"class":512},[167,75255,71236],{"class":177},[167,75257,537],{"class":512},[167,75259,75260,75262,75264,75266,75268,75270,75272,75274],{"class":169,"line":34890},[167,75261,57223],{"class":512},[167,75263,620],{"class":516},[167,75265,68640],{"class":173},[167,75267,523],{"class":512},[167,75269,71257],{"class":177},[167,75271,71260],{"class":512},[167,75273,620],{"class":516},[167,75275,537],{"class":512},[167,75277,75278,75280,75282,75284,75286,75288,75290,75292],{"class":169,"line":34896},[167,75279,57223],{"class":512},[167,75281,620],{"class":516},[167,75283,68640],{"class":173},[167,75285,523],{"class":512},[167,75287,71277],{"class":177},[167,75289,71280],{"class":512},[167,75291,620],{"class":516},[167,75293,537],{"class":512},[167,75295,75296,75298,75300,75302,75304,75306,75308,75310],{"class":169,"line":34907},[167,75297,57223],{"class":512},[167,75299,620],{"class":516},[167,75301,68640],{"class":173},[167,75303,523],{"class":512},[167,75305,71297],{"class":177},[167,75307,71300],{"class":512},[167,75309,620],{"class":516},[167,75311,537],{"class":512},[167,75313,75314,75316,75318,75320,75322,75324,75326,75328],{"class":169,"line":34913},[167,75315,57223],{"class":512},[167,75317,620],{"class":516},[167,75319,68640],{"class":173},[167,75321,523],{"class":512},[167,75323,71317],{"class":177},[167,75325,71320],{"class":512},[167,75327,620],{"class":516},[167,75329,537],{"class":512},[167,75331,75332,75334,75336,75338,75340,75342,75344,75346],{"class":169,"line":34932},[167,75333,57223],{"class":512},[167,75335,620],{"class":516},[167,75337,68640],{"class":173},[167,75339,523],{"class":512},[167,75341,71337],{"class":177},[167,75343,71340],{"class":512},[167,75345,620],{"class":516},[167,75347,537],{"class":512},[167,75349,75350,75352,75354],{"class":169,"line":34938},[167,75351,53774],{"class":512},[167,75353,71133],{"class":516},[167,75355,537],{"class":512},[167,75357,75358,75360,75362],{"class":169,"line":34949},[167,75359,53339],{"class":512},[167,75361,55877],{"class":516},[167,75363,537],{"class":512},[167,75365,75366,75368,75370,75373,75375,75378,75380],{"class":169,"line":34955},[167,75367,57223],{"class":512},[167,75369,167],{"class":516},[167,75371,75372],{"class":512},">+\u003C\u002F",[167,75374,167],{"class":516},[167,75376,75377],{"class":512},">添加\u003C\u002F",[167,75379,55877],{"class":516},[167,75381,537],{"class":512},[167,75383,75384,75386,75388],{"class":169,"line":34975},[167,75385,54412],{"class":512},[167,75387,68614],{"class":516},[167,75389,537],{"class":512},[167,75391,75392,75394,75396,75398,75400,75402,75405,75407,75410,75412,75415,75417],{"class":169,"line":34991},[167,75393,542],{"class":512},[167,75395,53609],{"class":516},[167,75397,55479],{"class":173},[167,75399,523],{"class":512},[167,75401,64569],{"class":177},[167,75403,75404],{"class":512},">共有数据 \u003C",[167,75406,167],{"class":516},[167,75408,75409],{"class":512},">0\u003C\u002F",[167,75411,167],{"class":516},[167,75413,75414],{"class":512},"> 条\u003C\u002F",[167,75416,53609],{"class":516},[167,75418,537],{"class":512},[167,75420,75421,75423,75425],{"class":169,"line":34997},[167,75422,542],{"class":512},[167,75424,68],{"class":516},[167,75426,537],{"class":512},[167,75428,75429,75431,75433],{"class":169,"line":35011},[167,75430,53339],{"class":512},[167,75432,71],{"class":516},[167,75434,537],{"class":512},[167,75436,75437,75439,75441],{"class":169,"line":35017},[167,75438,57223],{"class":512},[167,75440,74],{"class":516},[167,75442,537],{"class":512},[167,75444,75445,75447,75449,75452,75454],{"class":169,"line":35023},[167,75446,57291],{"class":512},[167,75448,77],{"class":516},[167,75450,75451],{"class":512},">ID\u003C\u002F",[167,75453,77],{"class":516},[167,75455,537],{"class":512},[167,75457,75458,75460,75462,75464,75466],{"class":169,"line":35034},[167,75459,57291],{"class":512},[167,75461,77],{"class":516},[167,75463,71443],{"class":512},[167,75465,77],{"class":516},[167,75467,537],{"class":512},[167,75469,75470,75472,75474,75476,75478],{"class":169,"line":35040},[167,75471,57291],{"class":512},[167,75473,77],{"class":516},[167,75475,71456],{"class":512},[167,75477,77],{"class":516},[167,75479,537],{"class":512},[167,75481,75482,75484,75486,75488,75490],{"class":169,"line":35046},[167,75483,57291],{"class":512},[167,75485,77],{"class":516},[167,75487,71469],{"class":512},[167,75489,77],{"class":516},[167,75491,537],{"class":512},[167,75493,75494,75496,75498,75500,75502],{"class":169,"line":35056},[167,75495,57291],{"class":512},[167,75497,77],{"class":516},[167,75499,71482],{"class":512},[167,75501,77],{"class":516},[167,75503,537],{"class":512},[167,75505,75506,75508,75510,75512,75514],{"class":169,"line":35062},[167,75507,57291],{"class":512},[167,75509,77],{"class":516},[167,75511,71495],{"class":512},[167,75513,77],{"class":516},[167,75515,537],{"class":512},[167,75517,75518,75520,75522,75525,75527],{"class":169,"line":35073},[167,75519,57291],{"class":512},[167,75521,77],{"class":516},[167,75523,75524],{"class":512},">录入时间\u003C\u002F",[167,75526,77],{"class":516},[167,75528,537],{"class":512},[167,75530,75531,75533,75535,75537,75539],{"class":169,"line":35079},[167,75532,57291],{"class":512},[167,75534,77],{"class":516},[167,75536,71508],{"class":512},[167,75538,77],{"class":516},[167,75540,537],{"class":512},[167,75542,75543,75545,75547],{"class":169,"line":35089},[167,75544,57396],{"class":512},[167,75546,74],{"class":516},[167,75548,537],{"class":512},[167,75550,75551,75553,75555],{"class":169,"line":35094},[167,75552,53774],{"class":512},[167,75554,71],{"class":516},[167,75556,537],{"class":512},[167,75558,75559,75561,75563],{"class":169,"line":35100},[167,75560,53339],{"class":512},[167,75562,85],{"class":516},[167,75564,537],{"class":512},[167,75566,75567],{"class":169,"line":35149},[167,75568,75569],{"class":2268},"      \u003C!-- \u003Ctr>\n",[167,75571,75572],{"class":169,"line":35196},[167,75573,75574],{"class":2268},"        \u003Ctd>1\u003C\u002Ftd>\n",[167,75576,75577],{"class":169,"line":35201},[167,75578,75574],{"class":2268},[167,75580,75581],{"class":169,"line":35207},[167,75582,75574],{"class":2268},[167,75584,75585],{"class":169,"line":35226},[167,75586,75574],{"class":2268},[167,75588,75589],{"class":169,"line":35232},[167,75590,75574],{"class":2268},[167,75592,75593],{"class":169,"line":35252},[167,75594,75574],{"class":2268},[167,75596,75597],{"class":169,"line":35258},[167,75598,75574],{"class":2268},[167,75600,75601],{"class":169,"line":35264},[167,75602,75603],{"class":2268},"        \u003Ctd>\n",[167,75605,75606],{"class":169,"line":35274},[167,75607,75608],{"class":2268},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[167,75610,75611],{"class":169,"line":35279},[167,75612,75613],{"class":2268},"        \u003C\u002Ftd>\n",[167,75615,75616],{"class":169,"line":35285},[167,75617,75618],{"class":2268},"      \u003C\u002Ftr> -->\n",[167,75620,75621,75623,75625],{"class":169,"line":35301},[167,75622,53774],{"class":512},[167,75624,85],{"class":516},[167,75626,537],{"class":512},[167,75628,75629,75631,75633],{"class":169,"line":35346},[167,75630,54412],{"class":512},[167,75632,68],{"class":516},[167,75634,537],{"class":512},[167,75636,75637,75639,75641],{"class":169,"line":35352},[167,75638,542],{"class":512},[167,75640,53809],{"class":516},[167,75642,537],{"class":512},[167,75644,75645],{"class":169,"line":35358},[167,75646,75647],{"class":2268},"    \u002F\u002F const initData = [{\n",[167,75649,75650],{"class":169,"line":35364},[167,75651,75652],{"class":2268},"    \u002F\u002F   unameId: 1,\n",[167,75654,75655],{"class":169,"line":35375},[167,75656,75657],{"class":2268},"    \u002F\u002F   uname: '华晨宇',\n",[167,75659,75660],{"class":169,"line":35381},[167,75661,75662],{"class":2268},"    \u002F\u002F   age: 22,\n",[167,75664,75665],{"class":169,"line":35387},[167,75666,75667],{"class":2268},"    \u002F\u002F   salary: 12000,\n",[167,75669,75670],{"class":169,"line":35393},[167,75671,75672],{"class":2268},"    \u002F\u002F   gender: '男',\n",[167,75674,75675],{"class":169,"line":35410},[167,75676,75677],{"class":2268},"    \u002F\u002F   city: '北京',\n",[167,75679,75680],{"class":169,"line":35424},[167,75681,75682],{"class":2268},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[167,75684,75685],{"class":169,"line":35433},[167,75686,75687],{"class":2268},"    \u002F\u002F }]\n",[167,75689,75690],{"class":169,"line":35442},[167,75691,75692],{"class":2268},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[167,75694,75695],{"class":169,"line":35451},[167,75696,75697],{"class":2268},"    \u002F\u002F 1.渲染业务\n",[167,75699,75700],{"class":169,"line":35460},[167,75701,75702],{"class":2268},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[167,75704,75705],{"class":169,"line":35466},[167,75706,75707],{"class":2268},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[167,75709,75710],{"class":169,"line":35472},[167,75711,75712],{"class":2268},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[167,75714,75715],{"class":169,"line":35480},[167,75716,741],{"emptyLinePlaceholder":740},[167,75718,75719],{"class":169,"line":35485},[167,75720,75721],{"class":2268},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[167,75723,75724],{"class":169,"line":35491},[167,75725,75726],{"class":2268},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[167,75728,75729,75731,75733,75735],{"class":169,"line":35502},[167,75730,13249],{"class":731},[167,75732,59684],{"class":184},[167,75734,753],{"class":731},[167,75736,53834],{"class":512},[167,75738,75739,75742,75744],{"class":169,"line":35508},[167,75740,75741],{"class":512},"    console.",[167,75743,60236],{"class":173},[167,75745,54407],{"class":512},[167,75747,75748],{"class":169,"line":35528},[167,75749,741],{"emptyLinePlaceholder":740},[167,75751,75752],{"class":169,"line":35534},[167,75753,75754],{"class":2268},"    \u002F\u002F 时间函数\n",[167,75756,75757,75759,75762],{"class":169,"line":35540},[167,75758,72072],{"class":731},[167,75760,75761],{"class":173}," getTime",[167,75763,12881],{"class":512},[167,75765,75766,75768,75771,75773,75775,75778],{"class":169,"line":35546},[167,75767,60217],{"class":731},[167,75769,75770],{"class":184}," date",[167,75772,753],{"class":731},[167,75774,13606],{"class":731},[167,75776,75777],{"class":173}," Date",[167,75779,4020],{"class":512},[167,75781,75782,75784,75786,75788,75791,75794,75796,75798,75800,75803,75806,75808,75810,75812,75814,75816,75818,75820],{"class":169,"line":35563},[167,75783,60217],{"class":731},[167,75785,18117],{"class":184},[167,75787,753],{"class":731},[167,75789,75790],{"class":512}," date.",[167,75792,75793],{"class":173},"getHours",[167,75795,15078],{"class":512},[167,75797,513],{"class":731},[167,75799,4082],{"class":184},[167,75801,75802],{"class":731}," ?",[167,75804,75805],{"class":177}," '0'",[167,75807,47566],{"class":731},[167,75809,75790],{"class":512},[167,75811,75793],{"class":173},[167,75813,15078],{"class":512},[167,75815,3059],{"class":731},[167,75817,75790],{"class":512},[167,75819,75793],{"class":173},[167,75821,4020],{"class":512},[167,75823,75824,75826,75829,75831,75833,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854,75856,75858,75860],{"class":169,"line":35569},[167,75825,60217],{"class":731},[167,75827,75828],{"class":184}," m",[167,75830,753],{"class":731},[167,75832,75790],{"class":512},[167,75834,75835],{"class":173},"getMinutes",[167,75837,15078],{"class":512},[167,75839,513],{"class":731},[167,75841,4082],{"class":184},[167,75843,75802],{"class":731},[167,75845,75805],{"class":177},[167,75847,47566],{"class":731},[167,75849,75790],{"class":512},[167,75851,75835],{"class":173},[167,75853,15078],{"class":512},[167,75855,3059],{"class":731},[167,75857,75790],{"class":512},[167,75859,75835],{"class":173},[167,75861,4020],{"class":512},[167,75863,75864,75866,75868,75870,75872,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899],{"class":169,"line":35575},[167,75865,60217],{"class":731},[167,75867,10456],{"class":184},[167,75869,753],{"class":731},[167,75871,75790],{"class":512},[167,75873,75874],{"class":173},"getSeconds",[167,75876,15078],{"class":512},[167,75878,513],{"class":731},[167,75880,4082],{"class":184},[167,75882,75802],{"class":731},[167,75884,75805],{"class":177},[167,75886,47566],{"class":731},[167,75888,75790],{"class":512},[167,75890,75874],{"class":173},[167,75892,15078],{"class":512},[167,75894,3059],{"class":731},[167,75896,75790],{"class":512},[167,75898,75874],{"class":173},[167,75900,4020],{"class":512},[167,75902,75903,75905,75908,75910,75912,75915,75917,75920,75922,75925,75927,75929,75932,75934,75936,75938,75940,75942,75944,75947,75949,75952,75954,75957,75959,75961,75963],{"class":169,"line":35581},[167,75904,60217],{"class":731},[167,75906,75907],{"class":184}," str",[167,75909,753],{"class":731},[167,75911,64892],{"class":177},[167,75913,75914],{"class":512},"date",[167,75916,2758],{"class":177},[167,75918,75919],{"class":173},"getFullYear",[167,75921,4470],{"class":177},[167,75923,75924],{"class":177},"}\u002F${",[167,75926,75914],{"class":512},[167,75928,2758],{"class":177},[167,75930,75931],{"class":173},"getMonth",[167,75933,15078],{"class":177},[167,75935,2681],{"class":731},[167,75937,27138],{"class":184},[167,75939,75924],{"class":177},[167,75941,75914],{"class":512},[167,75943,2758],{"class":177},[167,75945,75946],{"class":173},"getDate",[167,75948,4470],{"class":177},[167,75950,75951],{"class":177},"} ${",[167,75953,2615],{"class":512},[167,75955,75956],{"class":177},"}:${",[167,75958,2744],{"class":512},[167,75960,75956],{"class":177},[167,75962,2895],{"class":512},[167,75964,75965],{"class":177},"}`\n",[167,75967,75968,75971],{"class":169,"line":35587},[167,75969,75970],{"class":731},"      return",[167,75972,75973],{"class":512}," str\n",[167,75975,75976],{"class":169,"line":35593},[167,75977,4231],{"class":512},[167,75979,75980],{"class":169,"line":35620},[167,75981,75982],{"class":2268},"    \u002F\u002F 渲染函数\n",[167,75984,75985,75987,75989,75991,75993,75995,75997,75999],{"class":169,"line":35644},[167,75986,13249],{"class":731},[167,75988,71735],{"class":184},[167,75990,753],{"class":731},[167,75992,56386],{"class":512},[167,75994,56389],{"class":173},[167,75996,898],{"class":512},[167,75998,71746],{"class":177},[167,76000,873],{"class":512},[167,76002,76003,76005,76007],{"class":169,"line":35650},[167,76004,72072],{"class":731},[167,76006,72075],{"class":173},[167,76008,12881],{"class":512},[167,76010,76011],{"class":169,"line":35656},[167,76012,76013],{"class":2268},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[167,76015,76016],{"class":169,"line":35662},[167,76017,76018],{"class":2268},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[167,76020,76021,76023,76026,76028,76030,76033,76035,76037,76039,76042,76044,76047],{"class":169,"line":35673},[167,76022,60217],{"class":731},[167,76024,76025],{"class":184}," trArr",[167,76027,753],{"class":731},[167,76029,53961],{"class":512},[167,76031,76032],{"class":173},"map",[167,76034,898],{"class":512},[167,76036,56439],{"class":731},[167,76038,3716],{"class":512},[167,76040,76041],{"class":7246},"ele",[167,76043,14463],{"class":512},[167,76045,76046],{"class":7246},"index",[167,76048,14470],{"class":512},[167,76050,76051,76053],{"class":169,"line":35684},[167,76052,16779],{"class":731},[167,76054,72156],{"class":177},[167,76056,76057],{"class":169,"line":35690},[167,76058,76059],{"class":177},"      \u003Ctr>\n",[167,76061,76062,76064,76066,76068,76071],{"class":169,"line":35707},[167,76063,72161],{"class":177},[167,76065,76041],{"class":512},[167,76067,2758],{"class":177},[167,76069,76070],{"class":512},"unameId",[167,76072,72176],{"class":177},[167,76074,76075,76077,76079,76081,76083],{"class":169,"line":35730},[167,76076,72161],{"class":177},[167,76078,76041],{"class":512},[167,76080,2758],{"class":177},[167,76082,72192],{"class":512},[167,76084,72176],{"class":177},[167,76086,76087,76089,76091,76093,76095],{"class":169,"line":35753},[167,76088,72161],{"class":177},[167,76090,76041],{"class":512},[167,76092,2758],{"class":177},[167,76094,72209],{"class":512},[167,76096,72176],{"class":177},[167,76098,76099,76101,76103,76105,76107],{"class":169,"line":35759},[167,76100,72161],{"class":177},[167,76102,76041],{"class":512},[167,76104,2758],{"class":177},[167,76106,72226],{"class":512},[167,76108,72176],{"class":177},[167,76110,76111,76113,76115,76117,76119],{"class":169,"line":35764},[167,76112,72161],{"class":177},[167,76114,76041],{"class":512},[167,76116,2758],{"class":177},[167,76118,72243],{"class":512},[167,76120,72176],{"class":177},[167,76122,76123,76125,76127,76129,76131],{"class":169,"line":35773},[167,76124,72161],{"class":177},[167,76126,76041],{"class":512},[167,76128,2758],{"class":177},[167,76130,72260],{"class":512},[167,76132,72176],{"class":177},[167,76134,76135,76137,76139,76141,76143],{"class":169,"line":35783},[167,76136,72161],{"class":177},[167,76138,76041],{"class":512},[167,76140,2758],{"class":177},[167,76142,4431],{"class":512},[167,76144,72176],{"class":177},[167,76146,76147],{"class":169,"line":35789},[167,76148,75603],{"class":177},[167,76150,76151,76154,76156],{"class":169,"line":35794},[167,76152,76153],{"class":177},"          \u003Ca href=\"#\" data-id=\"${",[167,76155,76046],{"class":512},[167,76157,76158],{"class":177},"}\">删除\u003C\u002Fa>\n",[167,76160,76161],{"class":169,"line":35800},[167,76162,75613],{"class":177},[167,76164,76165],{"class":169,"line":35813},[167,76166,76167],{"class":177},"      \u003C\u002Ftr>\n",[167,76169,76170],{"class":169,"line":35819},[167,76171,76172],{"class":177},"  `\n",[167,76174,76175],{"class":169,"line":35830},[167,76176,66804],{"class":512},[167,76178,76179,76181,76183],{"class":169,"line":35841},[167,76180,60233],{"class":512},[167,76182,60236],{"class":173},[167,76184,76185],{"class":512},"(trArr)\n",[167,76187,76188],{"class":169,"line":35860},[167,76189,741],{"emptyLinePlaceholder":740},[167,76191,76192],{"class":169,"line":51518},[167,76193,76194],{"class":2268},"      \u002F\u002F (2) 把数组转换为字符串join\n",[167,76196,76197],{"class":169,"line":51523},[167,76198,76199],{"class":2268},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[167,76201,76202,76204,76206,76209,76212,76214,76217],{"class":169,"line":51532},[167,76203,72087],{"class":512},[167,76205,523],{"class":731},[167,76207,76208],{"class":512}," trArr.",[167,76210,76211],{"class":173},"join",[167,76213,898],{"class":512},[167,76215,76216],{"class":177},"''",[167,76218,873],{"class":512},[167,76220,76221],{"class":169,"line":51541},[167,76222,76223],{"class":2268},"      \u002F\u002F 显示共有几条\n",[167,76225,76226,76228,76230,76232,76235,76238,76240,76242],{"class":169,"line":51546},[167,76227,57760],{"class":512},[167,76229,56389],{"class":173},[167,76231,898],{"class":512},[167,76233,76234],{"class":177},"'.total span'",[167,76236,76237],{"class":512},").innerHTML ",[167,76239,523],{"class":731},[167,76241,53961],{"class":512},[167,76243,57820],{"class":184},[167,76245,76246],{"class":169,"line":51551},[167,76247,4231],{"class":512},[167,76249,76250],{"class":169,"line":51556},[167,76251,76252],{"class":2268},"    \u002F\u002F render()\n",[167,76254,76255],{"class":169,"line":51569},[167,76256,741],{"emptyLinePlaceholder":740},[167,76258,76259],{"class":169,"line":51574},[167,76260,76261],{"class":2268},"    \u002F\u002F 获取DOM对象\n",[167,76263,76264,76266,76268,76270,76272,76274,76276,76278],{"class":169,"line":51583},[167,76265,13249],{"class":731},[167,76267,71809],{"class":184},[167,76269,753],{"class":731},[167,76271,56386],{"class":512},[167,76273,56389],{"class":173},[167,76275,898],{"class":512},[167,76277,71820],{"class":177},[167,76279,873],{"class":512},[167,76281,76282,76284,76286,76288,76290,76292,76294,76296],{"class":169,"line":51592},[167,76283,13249],{"class":731},[167,76285,71636],{"class":184},[167,76287,753],{"class":731},[167,76289,56386],{"class":512},[167,76291,56389],{"class":173},[167,76293,898],{"class":512},[167,76295,71647],{"class":177},[167,76297,873],{"class":512},[167,76299,76300,76302,76304,76306,76308,76310,76312,76314],{"class":169,"line":51609},[167,76301,13249],{"class":731},[167,76303,17715],{"class":184},[167,76305,753],{"class":731},[167,76307,56386],{"class":512},[167,76309,56389],{"class":173},[167,76311,898],{"class":512},[167,76313,71666],{"class":177},[167,76315,873],{"class":512},[167,76317,76319,76321,76323,76325,76327,76329,76331,76333],{"class":169,"line":76318},231,[167,76320,13249],{"class":731},[167,76322,71695],{"class":184},[167,76324,753],{"class":731},[167,76326,56386],{"class":512},[167,76328,56389],{"class":173},[167,76330,898],{"class":512},[167,76332,71706],{"class":177},[167,76334,873],{"class":512},[167,76336,76338,76340,76342,76344,76346,76348,76350,76352],{"class":169,"line":76337},232,[167,76339,13249],{"class":731},[167,76341,71675],{"class":184},[167,76343,753],{"class":731},[167,76345,56386],{"class":512},[167,76347,56389],{"class":173},[167,76349,898],{"class":512},[167,76351,71686],{"class":177},[167,76353,873],{"class":512},[167,76355,76357,76359,76361,76363,76365,76367,76369,76371],{"class":169,"line":76356},233,[167,76358,13249],{"class":731},[167,76360,71715],{"class":184},[167,76362,753],{"class":731},[167,76364,56386],{"class":512},[167,76366,56389],{"class":173},[167,76368,898],{"class":512},[167,76370,71726],{"class":177},[167,76372,873],{"class":512},[167,76374,76376],{"class":169,"line":76375},234,[167,76377,741],{"emptyLinePlaceholder":740},[167,76379,76381],{"class":169,"line":76380},235,[167,76382,76383],{"class":2268},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[167,76385,76387,76389,76391,76393,76395,76397,76399,76401,76403],{"class":169,"line":76386},236,[167,76388,71827],{"class":512},[167,76390,59802],{"class":173},[167,76392,898],{"class":512},[167,76394,71834],{"class":177},[167,76396,14463],{"class":512},[167,76398,56439],{"class":731},[167,76400,3716],{"class":512},[167,76402,2284],{"class":7246},[167,76404,14470],{"class":512},[167,76406,76408],{"class":169,"line":76407},237,[167,76409,76410],{"class":2268},"      \u002F\u002F 禁止浏览器跳转\n",[167,76412,76414,76416,76418],{"class":169,"line":76413},238,[167,76415,71854],{"class":512},[167,76417,71857],{"class":173},[167,76419,4020],{"class":512},[167,76421,76423],{"class":169,"line":76422},239,[167,76424,76425],{"class":2268},"      \u002F\u002F 非空判断\n",[167,76427,76429],{"class":169,"line":76428},240,[167,76430,76431],{"class":2268},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[167,76433,76435],{"class":169,"line":76434},241,[167,76436,76437],{"class":2268},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[167,76439,76441,76443,76445,76447,76450,76452,76455,76458,76460,76462],{"class":169,"line":76440},242,[167,76442,56470],{"class":731},[167,76444,3716],{"class":512},[167,76446,2427],{"class":731},[167,76448,76449],{"class":512},"uname.value ",[167,76451,73345],{"class":731},[167,76453,76454],{"class":731}," !",[167,76456,76457],{"class":512},"age.value ",[167,76459,73345],{"class":731},[167,76461,76454],{"class":731},[167,76463,76464],{"class":512},"salary.value) {\n",[167,76466,76468,76470,76472,76474,76476],{"class":169,"line":76467},243,[167,76469,16779],{"class":731},[167,76471,71928],{"class":173},[167,76473,898],{"class":512},[167,76475,71933],{"class":177},[167,76477,873],{"class":512},[167,76479,76481],{"class":169,"line":76480},244,[167,76482,54393],{"class":512},[167,76484,76486,76488,76490],{"class":169,"line":76485},245,[167,76487,59996],{"class":512},[167,76489,53880],{"class":173},[167,76491,76492],{"class":512},"({\n",[167,76494,76496],{"class":169,"line":76495},246,[167,76497,76498],{"class":2268},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[167,76500,76502],{"class":169,"line":76501},247,[167,76503,76504],{"class":2268},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[167,76506,76508],{"class":169,"line":76507},248,[167,76509,76510],{"class":2268},"        \u002F\u002F 对象的序号应为数组长度+1\n",[167,76512,76514],{"class":169,"line":76513},249,[167,76515,76516],{"class":2268},"        \u002F\u002F unameId: arr.length + 1,\n",[167,76518,76520],{"class":169,"line":76519},250,[167,76521,741],{"emptyLinePlaceholder":740},[167,76523,76525],{"class":169,"line":76524},251,[167,76526,76527],{"class":2268},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[167,76529,76531],{"class":169,"line":76530},252,[167,76532,76533],{"class":2268},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[167,76535,76537],{"class":169,"line":76536},253,[167,76538,76539],{"class":2268},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[167,76541,76543],{"class":169,"line":76542},254,[167,76544,76545],{"class":2268},"        \u002F\u002F 0当假看\n",[167,76547,76549,76552,76554,76556,76559,76561,76563,76565,76568,76570,76572,76575,76577],{"class":169,"line":76548},255,[167,76550,76551],{"class":512},"        unameId: arr.",[167,76553,53964],{"class":184},[167,76555,75802],{"class":731},[167,76557,76558],{"class":512}," arr[arr.",[167,76560,53964],{"class":184},[167,76562,54266],{"class":731},[167,76564,27138],{"class":184},[167,76566,76567],{"class":512},"].unameId ",[167,76569,2681],{"class":731},[167,76571,27138],{"class":184},[167,76573,76574],{"class":731}," :",[167,76576,27138],{"class":184},[167,76578,33471],{"class":512},[167,76580,76582],{"class":169,"line":76581},256,[167,76583,71981],{"class":512},[167,76585,76587],{"class":169,"line":76586},257,[167,76588,71986],{"class":512},[167,76590,76592],{"class":169,"line":76591},258,[167,76593,71996],{"class":512},[167,76595,76597],{"class":169,"line":76596},259,[167,76598,71991],{"class":512},[167,76600,76602],{"class":169,"line":76601},260,[167,76603,76604],{"class":512},"        city: city.value,\n",[167,76606,76608],{"class":169,"line":76607},261,[167,76609,76610],{"class":2268},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[167,76612,76614],{"class":169,"line":76613},262,[167,76615,76616],{"class":2268},"        \u002F\u002F time: new Date().toDateString()\n",[167,76618,76620,76623,76626],{"class":169,"line":76619},263,[167,76621,76622],{"class":512},"        time: ",[167,76624,76625],{"class":173},"getTime",[167,76627,4020],{"class":512},[167,76629,76631],{"class":169,"line":76630},264,[167,76632,66804],{"class":512},[167,76634,76636],{"class":169,"line":76635},265,[167,76637,76638],{"class":2268},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[167,76640,76642,76644],{"class":169,"line":76641},266,[167,76643,72056],{"class":173},[167,76645,4020],{"class":512},[167,76647,76649,76651,76653,76655,76657],{"class":169,"line":76648},267,[167,76650,72039],{"class":184},[167,76652,2758],{"class":512},[167,76654,72044],{"class":173},[167,76656,15078],{"class":512},[167,76658,76659],{"class":2268},"\u002F\u002F重置表单\n",[167,76661,76663],{"class":169,"line":76662},268,[167,76664,76665],{"class":2268},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[167,76667,76669,76672,76674,76676,76679,76681,76683,76685,76687],{"class":169,"line":76668},269,[167,76670,76671],{"class":512},"      localStorage.",[167,76673,73642],{"class":173},[167,76675,898],{"class":512},[167,76677,76678],{"class":177},"'data'",[167,76680,14463],{"class":512},[167,76682,73652],{"class":184},[167,76684,2758],{"class":512},[167,76686,73657],{"class":173},[167,76688,76689],{"class":512},"(arr))\n",[167,76691,76693],{"class":169,"line":76692},270,[167,76694,35463],{"class":512},[167,76696,76698],{"class":169,"line":76697},271,[167,76699,741],{"emptyLinePlaceholder":740},[167,76701,76703],{"class":169,"line":76702},272,[167,76704,76705],{"class":2268},"    \u002F\u002F 3.删除业务\n",[167,76707,76709],{"class":169,"line":76708},273,[167,76710,76711],{"class":2268},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[167,76713,76715,76717,76719,76721,76723,76725,76727,76729,76731],{"class":169,"line":76714},274,[167,76716,72329],{"class":512},[167,76718,59802],{"class":173},[167,76720,898],{"class":512},[167,76722,59807],{"class":177},[167,76724,14463],{"class":512},[167,76726,56439],{"class":731},[167,76728,3716],{"class":512},[167,76730,2284],{"class":7246},[167,76732,14470],{"class":512},[167,76734,76736],{"class":169,"line":76735},275,[167,76737,76738],{"class":2268},"      \u002F\u002F 判断是否点击的是删除按钮\n",[167,76740,76742,76744,76746,76748,76750],{"class":169,"line":76741},276,[167,76743,56470],{"class":731},[167,76745,69023],{"class":512},[167,76747,56476],{"class":731},[167,76749,70245],{"class":177},[167,76751,14470],{"class":512},[167,76753,76755],{"class":169,"line":76754},277,[167,76756,76757],{"class":2268},"        \u002F\u002F alert(1)\n",[167,76759,76761],{"class":169,"line":76760},278,[167,76762,76763],{"class":2268},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[167,76765,76767],{"class":169,"line":76766},279,[167,76768,76769],{"class":2268},"        \u002F\u002F console.log(e.target)\n",[167,76771,76773],{"class":169,"line":76772},280,[167,76774,76775],{"class":2268},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[167,76777,76779],{"class":169,"line":76778},281,[167,76780,741],{"emptyLinePlaceholder":740},[167,76782,76784],{"class":169,"line":76783},282,[167,76785,76786],{"class":2268},"        \u002F\u002F 确认框，确然是否真的要删除\n",[167,76788,76790],{"class":169,"line":76789},283,[167,76791,76792],{"class":2268},"        \u002F\u002F confirm()为确认框\n",[167,76794,76796],{"class":169,"line":76795},284,[167,76797,76798],{"class":2268},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[167,76800,76802,76804,76806,76809,76811,76814],{"class":169,"line":76801},285,[167,76803,4540],{"class":731},[167,76805,3716],{"class":512},[167,76807,76808],{"class":173},"confirm",[167,76810,898],{"class":512},[167,76812,76813],{"class":177},"'您确定要删除这条数据吗？'",[167,76815,76816],{"class":512},")) {\n",[167,76818,76820,76823,76825,76827,76829],{"class":169,"line":76819},286,[167,76821,76822],{"class":512},"          arr.",[167,76824,59999],{"class":173},[167,76826,72382],{"class":512},[167,76828,2418],{"class":184},[167,76830,873],{"class":512},[167,76832,76834],{"class":169,"line":76833},287,[167,76835,76836],{"class":2268},"          \u002F\u002F 3.4 重新渲染页面\n",[167,76838,76840,76843],{"class":169,"line":76839},288,[167,76841,76842],{"class":173},"          render",[167,76844,4020],{"class":512},[167,76846,76848],{"class":169,"line":76847},289,[167,76849,76850],{"class":2268},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[167,76852,76854,76857,76859,76861,76863,76865,76867,76869,76871],{"class":169,"line":76853},290,[167,76855,76856],{"class":512},"          localStorage.",[167,76858,73642],{"class":173},[167,76860,898],{"class":512},[167,76862,76678],{"class":177},[167,76864,14463],{"class":512},[167,76866,73652],{"class":184},[167,76868,2758],{"class":512},[167,76870,73657],{"class":173},[167,76872,76689],{"class":512},[167,76874,76876],{"class":169,"line":76875},291,[167,76877,4572],{"class":512},[167,76879,76881],{"class":169,"line":76880},292,[167,76882,54393],{"class":512},[167,76884,76886],{"class":169,"line":76885},293,[167,76887,741],{"emptyLinePlaceholder":740},[167,76889,76891],{"class":169,"line":76890},294,[167,76892,35463],{"class":512},[167,76894,76896],{"class":169,"line":76895},295,[167,76897,741],{"emptyLinePlaceholder":740},[167,76899,76901,76903,76905],{"class":169,"line":76900},296,[167,76902,54412],{"class":512},[167,76904,53809],{"class":516},[167,76906,537],{"class":512},[167,76908,76910,76912,76914],{"class":169,"line":76909},297,[167,76911,575],{"class":512},[167,76913,517],{"class":516},[167,76915,537],{"class":512},[167,76917,76919],{"class":169,"line":76918},298,[167,76920,741],{"emptyLinePlaceholder":740},[167,76922,76924,76926,76928],{"class":169,"line":76923},299,[167,76925,575],{"class":512},[167,76927,52635],{"class":516},[167,76929,537],{"class":512},[14,76931,76933],{"id":76932},"_36-正则表达式","3.6 正则表达式",[19,76935,76936],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76938,76939],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76941,76942],{},"正则表达式的作用：",[3205,76944,76945,76952,76958],{},[43,76946,76947,76948,76951],{},"表单验证（ ",[2354,76949,76950],{},"匹配"," ）",[43,76953,76954,76955,76951],{},"过滤敏感词（ ",[2354,76956,76957],{},"替换",[43,76959,76960,76961,76951],{},"字符串中提取我们想要的部分（ ",[2354,76962,76963],{},"提取",[494,76965,76967],{"id":76966},"_361-语法","3.6.1 语法",[19,76969,76970],{},"正则表达式使用步骤：",[40,76972,76973,76976],{},[43,76974,76975],{},"定义规则",[43,76977,76978],{},"查找是否匹配",[19,76980,76981],{},"正则表达式里边不需要写引号",[19,76983,76984],{},[3528,76985],{"alt":32,"src":76986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76988,76989],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76991,76992],{},"reg.test(str)",[19,76994,76995],{},[3528,76996],{"alt":32,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76999,77000],{},[3528,77001],{"alt":32,"src":77002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[494,77004,77006],{"id":77005},"_362-元字符","3.6.2 元字符",[40,77008,77009,77012,77015,77018,77025],{},[43,77010,77011],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[43,77013,77014],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[43,77016,77017],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[43,77019,77020,77021],{},"正则验证工具：",[2439,77022,77023],{"href":77023,"rel":77024},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25887],[43,77026,77027],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24024,77029,77031],{"id":77030},"_3621-边界符","3.6.2.1 边界符",[19,77033,77034],{},[3528,77035],{"alt":32,"src":77036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77038,77039],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77041,77042],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77044,77045],{},"只匹配一次",[19,77047,77048],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24024,77050,77052],{"id":77051},"_3622-量词","3.6.2.2 量词",[19,77054,77055],{},[3528,77056],{"alt":32,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77059,77060],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24024,77062,77064],{"id":77063},"_3623-元字符","3.6.2.3 元字符",[19,77066,77067],{},[3528,77068],{"alt":32,"src":77069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77071,77072],{},"匹配的是a或b或c []只选一个",[19,77074,77075],{},[3528,77076],{"alt":32,"src":77077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77079,77080],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77082,77083],{},[3528,77084],{"alt":32,"src":77085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77087,77088],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77090,77091],{},[3528,77092],{"alt":32,"src":77093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,77095,77097],{"className":52633,"code":77096,"language":52635,"meta":32,"style":32},"\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",[34,77098,77099,77109,77123,77127,77135,77149,77169,77181,77189,77193,77201,77209,77214,77245,77272,77300,77304,77309,77337,77368,77373,77378,77409,77441,77473,77477,77482,77513,77543,77573,77577,77582,77613,77644,77674,77704,77708,77713,77746,77750,77755,77786,77817,77821,77826,77857,77887,77918,77922,77927,77959,77990,78021,78048,78079,78111,78144,78175,78206,78238,78269,78277,78285,78289],{"__ignoreMap":32},[167,77100,77101,77103,77105,77107],{"class":169,"line":170},[167,77102,53297],{"class":512},[167,77104,53300],{"class":516},[167,77106,53303],{"class":173},[167,77108,537],{"class":512},[167,77110,77111,77113,77115,77117,77119,77121],{"class":169,"line":191},[167,77112,513],{"class":512},[167,77114,52635],{"class":516},[167,77116,53314],{"class":173},[167,77118,523],{"class":512},[167,77120,53319],{"class":177},[167,77122,537],{"class":512},[167,77124,77125],{"class":169,"line":205},[167,77126,741],{"emptyLinePlaceholder":740},[167,77128,77129,77131,77133],{"class":169,"line":219},[167,77130,513],{"class":512},[167,77132,53332],{"class":516},[167,77134,537],{"class":512},[167,77136,77137,77139,77141,77143,77145,77147],{"class":169,"line":230},[167,77138,542],{"class":512},[167,77140,53342],{"class":516},[167,77142,53345],{"class":173},[167,77144,523],{"class":512},[167,77146,53350],{"class":177},[167,77148,537],{"class":512},[167,77150,77151,77153,77155,77157,77159,77161,77163,77165,77167],{"class":169,"line":241},[167,77152,542],{"class":512},[167,77154,53342],{"class":516},[167,77156,520],{"class":173},[167,77158,523],{"class":512},[167,77160,53389],{"class":177},[167,77162,53369],{"class":173},[167,77164,523],{"class":512},[167,77166,53396],{"class":177},[167,77168,537],{"class":512},[167,77170,77171,77173,77175,77177,77179],{"class":169,"line":261},[167,77172,542],{"class":512},[167,77174,53405],{"class":516},[167,77176,53408],{"class":512},[167,77178,53405],{"class":516},[167,77180,537],{"class":512},[167,77182,77183,77185,77187],{"class":169,"line":773},[167,77184,575],{"class":512},[167,77186,53332],{"class":516},[167,77188,537],{"class":512},[167,77190,77191],{"class":169,"line":779},[167,77192,741],{"emptyLinePlaceholder":740},[167,77194,77195,77197,77199],{"class":169,"line":785},[167,77196,513],{"class":512},[167,77198,517],{"class":516},[167,77200,537],{"class":512},[167,77202,77203,77205,77207],{"class":169,"line":790},[167,77204,542],{"class":512},[167,77206,53809],{"class":516},[167,77208,537],{"class":512},[167,77210,77211],{"class":169,"line":796},[167,77212,77213],{"class":2268},"    \u002F\u002F 元字符中\n",[167,77215,77216,77218,77220,77222,77224,77227,77229,77231,77234,77236,77239,77242],{"class":169,"line":802},[167,77217,75741],{"class":512},[167,77219,60236],{"class":173},[167,77221,898],{"class":512},[167,77223,2784],{"class":177},[167,77225,77226],{"class":49977},"哈",[167,77228,2784],{"class":177},[167,77230,2758],{"class":512},[167,77232,77233],{"class":173},"test",[167,77235,898],{"class":512},[167,77237,77238],{"class":177},"'哈'",[167,77240,77241],{"class":512},"))  ",[167,77243,77244],{"class":2268},"\u002F\u002Ftrue\n",[167,77246,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265,77268,77270],{"class":169,"line":808},[167,77248,75741],{"class":512},[167,77250,60236],{"class":173},[167,77252,898],{"class":512},[167,77254,2784],{"class":177},[167,77256,77226],{"class":49977},[167,77258,2784],{"class":177},[167,77260,2758],{"class":512},[167,77262,77233],{"class":173},[167,77264,898],{"class":512},[167,77266,77267],{"class":177},"'哈哈'",[167,77269,77241],{"class":512},[167,77271,77244],{"class":2268},[167,77273,77274,77276,77278,77280,77282,77284,77286,77288,77290,77292,77295,77298],{"class":169,"line":814},[167,77275,75741],{"class":512},[167,77277,60236],{"class":173},[167,77279,898],{"class":512},[167,77281,2784],{"class":177},[167,77283,77226],{"class":49977},[167,77285,2784],{"class":177},[167,77287,2758],{"class":512},[167,77289,77233],{"class":173},[167,77291,898],{"class":512},[167,77293,77294],{"class":177},"'二哈'",[167,77296,77297],{"class":512},"))   ",[167,77299,77244],{"class":2268},[167,77301,77302],{"class":169,"line":820},[167,77303,741],{"emptyLinePlaceholder":740},[167,77305,77306],{"class":169,"line":826},[167,77307,77308],{"class":2268},"    \u002F\u002F 1.边界符\n",[167,77310,77311,77313,77315,77317,77319,77321,77323,77325,77327,77329,77331,77333,77335],{"class":169,"line":832},[167,77312,75741],{"class":512},[167,77314,60236],{"class":173},[167,77316,898],{"class":512},[167,77318,2784],{"class":177},[167,77320,3165],{"class":731},[167,77322,77226],{"class":49977},[167,77324,2784],{"class":177},[167,77326,2758],{"class":512},[167,77328,77233],{"class":173},[167,77330,898],{"class":512},[167,77332,77238],{"class":177},[167,77334,77241],{"class":512},[167,77336,77244],{"class":2268},[167,77338,77339,77341,77343,77345,77347,77349,77351,77353,77355,77357,77359,77361,77363,77365],{"class":169,"line":837},[167,77340,75741],{"class":512},[167,77342,60236],{"class":173},[167,77344,898],{"class":512},[167,77346,2784],{"class":177},[167,77348,3165],{"class":731},[167,77350,77226],{"class":49977},[167,77352,2503],{"class":731},[167,77354,2784],{"class":177},[167,77356,2758],{"class":512},[167,77358,77233],{"class":173},[167,77360,898],{"class":512},[167,77362,77267],{"class":177},[167,77364,77241],{"class":512},[167,77366,77367],{"class":2268},"\u002F\u002Ffalse\n",[167,77369,77370],{"class":169,"line":842},[167,77371,77372],{"class":2268},"    \u002F\u002F 2.量词\n",[167,77374,77375],{"class":169,"line":860},[167,77376,77377],{"class":2268},"    \u002F\u002F 量词 * 类似于 >= 0\n",[167,77379,77380,77382,77384,77386,77388,77390,77392,77395,77397,77399,77401,77403,77405,77407],{"class":169,"line":876},[167,77381,75741],{"class":512},[167,77383,60236],{"class":173},[167,77385,898],{"class":512},[167,77387,2784],{"class":177},[167,77389,3165],{"class":731},[167,77391,77226],{"class":49977},[167,77393,77394],{"class":731},"*$",[167,77396,2784],{"class":177},[167,77398,2758],{"class":512},[167,77400,77233],{"class":173},[167,77402,898],{"class":512},[167,77404,77267],{"class":177},[167,77406,77241],{"class":512},[167,77408,77244],{"class":2268},[167,77410,77411,77413,77415,77417,77419,77421,77423,77425,77427,77429,77431,77433,77436,77438],{"class":169,"line":887},[167,77412,75741],{"class":512},[167,77414,60236],{"class":173},[167,77416,898],{"class":512},[167,77418,2784],{"class":177},[167,77420,3165],{"class":731},[167,77422,77226],{"class":49977},[167,77424,77394],{"class":731},[167,77426,2784],{"class":177},[167,77428,2758],{"class":512},[167,77430,77233],{"class":173},[167,77432,898],{"class":512},[167,77434,77435],{"class":177},"'二哈好傻'",[167,77437,77241],{"class":512},[167,77439,77440],{"class":2268},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[167,77442,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77463,77465,77468,77470],{"class":169,"line":892},[167,77444,75741],{"class":512},[167,77446,60236],{"class":173},[167,77448,898],{"class":512},[167,77450,2784],{"class":177},[167,77452,3165],{"class":731},[167,77454,77226],{"class":49977},[167,77456,77394],{"class":731},[167,77458,2784],{"class":177},[167,77460,2758],{"class":512},[167,77462,77233],{"class":173},[167,77464,898],{"class":512},[167,77466,77467],{"class":177},"'哈好哈'",[167,77469,77297],{"class":512},[167,77471,77472],{"class":2268},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[167,77474,77475],{"class":169,"line":907},[167,77476,741],{"emptyLinePlaceholder":740},[167,77478,77479],{"class":169,"line":920},[167,77480,77481],{"class":2268},"    \u002F\u002F +类似于>=1\n",[167,77483,77484,77486,77488,77490,77492,77494,77496,77499,77501,77503,77505,77507,77509,77511],{"class":169,"line":933},[167,77485,75741],{"class":512},[167,77487,60236],{"class":173},[167,77489,898],{"class":512},[167,77491,2784],{"class":177},[167,77493,3165],{"class":731},[167,77495,77226],{"class":49977},[167,77497,77498],{"class":731},"+$",[167,77500,2784],{"class":177},[167,77502,2758],{"class":512},[167,77504,77233],{"class":173},[167,77506,898],{"class":512},[167,77508,77267],{"class":177},[167,77510,77241],{"class":512},[167,77512,77244],{"class":2268},[167,77514,77515,77517,77519,77521,77523,77525,77527,77529,77531,77533,77535,77537,77539,77541],{"class":169,"line":946},[167,77516,75741],{"class":512},[167,77518,60236],{"class":173},[167,77520,898],{"class":512},[167,77522,2784],{"class":177},[167,77524,3165],{"class":731},[167,77526,77226],{"class":49977},[167,77528,77498],{"class":731},[167,77530,2784],{"class":177},[167,77532,2758],{"class":512},[167,77534,77233],{"class":173},[167,77536,898],{"class":512},[167,77538,77435],{"class":177},[167,77540,77241],{"class":512},[167,77542,77440],{"class":2268},[167,77544,77545,77547,77549,77551,77553,77555,77557,77559,77561,77563,77565,77567,77569,77571],{"class":169,"line":959},[167,77546,75741],{"class":512},[167,77548,60236],{"class":173},[167,77550,898],{"class":512},[167,77552,2784],{"class":177},[167,77554,3165],{"class":731},[167,77556,77226],{"class":49977},[167,77558,77498],{"class":731},[167,77560,2784],{"class":177},[167,77562,2758],{"class":512},[167,77564,77233],{"class":173},[167,77566,898],{"class":512},[167,77568,77467],{"class":177},[167,77570,77297],{"class":512},[167,77572,77367],{"class":2268},[167,77574,77575],{"class":169,"line":964},[167,77576,741],{"emptyLinePlaceholder":740},[167,77578,77579],{"class":169,"line":987},[167,77580,77581],{"class":2268},"    \u002F\u002F ?类似于0次或一次\n",[167,77583,77584,77586,77588,77590,77592,77594,77597,77599,77601,77603,77605,77607,77609,77611],{"class":169,"line":993},[167,77585,75741],{"class":512},[167,77587,60236],{"class":173},[167,77589,898],{"class":512},[167,77591,2784],{"class":177},[167,77593,3165],{"class":731},[167,77595,77596],{"class":49977},"哈？",[167,77598,2503],{"class":731},[167,77600,2784],{"class":177},[167,77602,2758],{"class":512},[167,77604,77233],{"class":173},[167,77606,898],{"class":512},[167,77608,76216],{"class":177},[167,77610,77297],{"class":512},[167,77612,77244],{"class":2268},[167,77614,77615,77617,77619,77621,77623,77625,77627,77630,77632,77634,77636,77638,77640,77642],{"class":169,"line":998},[167,77616,75741],{"class":512},[167,77618,60236],{"class":173},[167,77620,898],{"class":512},[167,77622,2784],{"class":177},[167,77624,3165],{"class":731},[167,77626,77226],{"class":49977},[167,77628,77629],{"class":731},"?$",[167,77631,2784],{"class":177},[167,77633,2758],{"class":512},[167,77635,77233],{"class":173},[167,77637,898],{"class":512},[167,77639,77267],{"class":177},[167,77641,77241],{"class":512},[167,77643,77367],{"class":2268},[167,77645,77646,77648,77650,77652,77654,77656,77658,77660,77662,77664,77666,77668,77670,77672],{"class":169,"line":1010},[167,77647,75741],{"class":512},[167,77649,60236],{"class":173},[167,77651,898],{"class":512},[167,77653,2784],{"class":177},[167,77655,3165],{"class":731},[167,77657,77226],{"class":49977},[167,77659,77629],{"class":731},[167,77661,2784],{"class":177},[167,77663,2758],{"class":512},[167,77665,77233],{"class":173},[167,77667,898],{"class":512},[167,77669,77435],{"class":177},[167,77671,77241],{"class":512},[167,77673,77440],{"class":2268},[167,77675,77676,77678,77680,77682,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702],{"class":169,"line":1022},[167,77677,75741],{"class":512},[167,77679,60236],{"class":173},[167,77681,898],{"class":512},[167,77683,2784],{"class":177},[167,77685,3165],{"class":731},[167,77687,77226],{"class":49977},[167,77689,77629],{"class":731},[167,77691,2784],{"class":177},[167,77693,2758],{"class":512},[167,77695,77233],{"class":173},[167,77697,898],{"class":512},[167,77699,77467],{"class":177},[167,77701,77241],{"class":512},[167,77703,77367],{"class":2268},[167,77705,77706],{"class":169,"line":1027},[167,77707,741],{"emptyLinePlaceholder":740},[167,77709,77710],{"class":169,"line":1032},[167,77711,77712],{"class":2268},"    \u002F\u002F {n}写几，就必须出现几次\n",[167,77714,77715,77717,77719,77721,77723,77725,77727,77730,77732,77734,77736,77738,77741,77744],{"class":169,"line":1049},[167,77716,75741],{"class":512},[167,77718,60236],{"class":173},[167,77720,898],{"class":512},[167,77722,2784],{"class":177},[167,77724,3165],{"class":731},[167,77726,77226],{"class":49977},[167,77728,77729],{"class":731},"{4}$",[167,77731,2784],{"class":177},[167,77733,2758],{"class":512},[167,77735,77233],{"class":173},[167,77737,898],{"class":512},[167,77739,77740],{"class":177},"'哈哈哈哈'",[167,77742,77743],{"class":512},")) ",[167,77745,77244],{"class":2268},[167,77747,77748],{"class":169,"line":10005},[167,77749,741],{"emptyLinePlaceholder":740},[167,77751,77752],{"class":169,"line":10011},[167,77753,77754],{"class":2268},"    \u002F\u002F {n,}大于等于n次\n",[167,77756,77757,77759,77761,77763,77765,77767,77769,77772,77774,77776,77778,77780,77782,77784],{"class":169,"line":10038},[167,77758,75741],{"class":512},[167,77760,60236],{"class":173},[167,77762,898],{"class":512},[167,77764,2784],{"class":177},[167,77766,3165],{"class":731},[167,77768,77226],{"class":49977},[167,77770,77771],{"class":731},"{4,}$",[167,77773,2784],{"class":177},[167,77775,2758],{"class":512},[167,77777,77233],{"class":173},[167,77779,898],{"class":512},[167,77781,77740],{"class":177},[167,77783,77743],{"class":512},[167,77785,77244],{"class":2268},[167,77787,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808,77810,77813,77815],{"class":169,"line":10043},[167,77789,75741],{"class":512},[167,77791,60236],{"class":173},[167,77793,898],{"class":512},[167,77795,2784],{"class":177},[167,77797,3165],{"class":731},[167,77799,77226],{"class":49977},[167,77801,77771],{"class":731},[167,77803,2784],{"class":177},[167,77805,2758],{"class":512},[167,77807,77233],{"class":173},[167,77809,898],{"class":512},[167,77811,77812],{"class":177},"'哈哈哈哈哈'",[167,77814,77743],{"class":512},[167,77816,77244],{"class":2268},[167,77818,77819],{"class":169,"line":10049},[167,77820,741],{"emptyLinePlaceholder":740},[167,77822,77823],{"class":169,"line":10061},[167,77824,77825],{"class":2268},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[167,77827,77828,77830,77832,77834,77836,77838,77840,77843,77845,77847,77849,77851,77853,77855],{"class":169,"line":10073},[167,77829,75741],{"class":512},[167,77831,60236],{"class":173},[167,77833,898],{"class":512},[167,77835,2784],{"class":177},[167,77837,3165],{"class":731},[167,77839,77226],{"class":49977},[167,77841,77842],{"class":731},"{4,6}$",[167,77844,2784],{"class":177},[167,77846,2758],{"class":512},[167,77848,77233],{"class":173},[167,77850,898],{"class":512},[167,77852,77740],{"class":177},[167,77854,77743],{"class":512},[167,77856,77244],{"class":2268},[167,77858,77859,77861,77863,77865,77867,77869,77871,77873,77875,77877,77879,77881,77883,77885],{"class":169,"line":10085},[167,77860,75741],{"class":512},[167,77862,60236],{"class":173},[167,77864,898],{"class":512},[167,77866,2784],{"class":177},[167,77868,3165],{"class":731},[167,77870,77226],{"class":49977},[167,77872,77842],{"class":731},[167,77874,2784],{"class":177},[167,77876,2758],{"class":512},[167,77878,77233],{"class":173},[167,77880,898],{"class":512},[167,77882,77812],{"class":177},[167,77884,77743],{"class":512},[167,77886,77244],{"class":2268},[167,77888,77889,77891,77893,77895,77897,77899,77901,77903,77905,77907,77909,77911,77914,77916],{"class":169,"line":11744},[167,77890,75741],{"class":512},[167,77892,60236],{"class":173},[167,77894,898],{"class":512},[167,77896,2784],{"class":177},[167,77898,3165],{"class":731},[167,77900,77226],{"class":49977},[167,77902,77842],{"class":731},[167,77904,2784],{"class":177},[167,77906,2758],{"class":512},[167,77908,77233],{"class":173},[167,77910,898],{"class":512},[167,77912,77913],{"class":177},"'哈哈哈哈哈哈哈'",[167,77915,77743],{"class":512},[167,77917,77367],{"class":2268},[167,77919,77920],{"class":169,"line":11769},[167,77921,741],{"emptyLinePlaceholder":740},[167,77923,77924],{"class":169,"line":11792},[167,77925,77926],{"class":2268},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[167,77928,77929,77931,77933,77935,77937,77939,77942,77944,77946,77948,77950,77952,77955,77957],{"class":169,"line":11816},[167,77930,75741],{"class":512},[167,77932,60236],{"class":173},[167,77934,898],{"class":512},[167,77936,2784],{"class":177},[167,77938,3165],{"class":731},[167,77940,77941],{"class":184},"[abc]",[167,77943,2503],{"class":731},[167,77945,2784],{"class":177},[167,77947,2758],{"class":512},[167,77949,77233],{"class":173},[167,77951,898],{"class":512},[167,77953,77954],{"class":177},"'a'",[167,77956,77241],{"class":512},[167,77958,77244],{"class":2268},[167,77960,77961,77963,77965,77967,77969,77971,77973,77975,77977,77979,77981,77983,77986,77988],{"class":169,"line":11821},[167,77962,75741],{"class":512},[167,77964,60236],{"class":173},[167,77966,898],{"class":512},[167,77968,2784],{"class":177},[167,77970,3165],{"class":731},[167,77972,77941],{"class":184},[167,77974,2503],{"class":731},[167,77976,2784],{"class":177},[167,77978,2758],{"class":512},[167,77980,77233],{"class":173},[167,77982,898],{"class":512},[167,77984,77985],{"class":177},"'b'",[167,77987,77241],{"class":512},[167,77989,77244],{"class":2268},[167,77991,77992,77994,77996,77998,78000,78002,78004,78006,78008,78010,78012,78014,78017,78019],{"class":169,"line":11826},[167,77993,75741],{"class":512},[167,77995,60236],{"class":173},[167,77997,898],{"class":512},[167,77999,2784],{"class":177},[167,78001,3165],{"class":731},[167,78003,77941],{"class":184},[167,78005,2503],{"class":731},[167,78007,2784],{"class":177},[167,78009,2758],{"class":512},[167,78011,77233],{"class":173},[167,78013,898],{"class":512},[167,78015,78016],{"class":177},"'c'",[167,78018,77241],{"class":512},[167,78020,77244],{"class":2268},[167,78022,78023,78025,78027,78029,78031,78033,78035,78037,78039,78041,78044,78046],{"class":169,"line":11831},[167,78024,75741],{"class":512},[167,78026,60236],{"class":173},[167,78028,898],{"class":512},[167,78030,2784],{"class":177},[167,78032,77941],{"class":184},[167,78034,2784],{"class":177},[167,78036,2758],{"class":512},[167,78038,77233],{"class":173},[167,78040,898],{"class":512},[167,78042,78043],{"class":177},"'ab'",[167,78045,77241],{"class":512},[167,78047,77244],{"class":2268},[167,78049,78050,78052,78054,78056,78058,78060,78062,78064,78066,78068,78070,78072,78074,78076],{"class":169,"line":11840},[167,78051,75741],{"class":512},[167,78053,60236],{"class":173},[167,78055,898],{"class":512},[167,78057,2784],{"class":177},[167,78059,3165],{"class":731},[167,78061,77941],{"class":184},[167,78063,2503],{"class":731},[167,78065,2784],{"class":177},[167,78067,2758],{"class":512},[167,78069,77233],{"class":173},[167,78071,898],{"class":512},[167,78073,78043],{"class":177},[167,78075,77241],{"class":512},[167,78077,78078],{"class":2268},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[167,78080,78081,78083,78085,78087,78089,78091,78093,78096,78098,78100,78102,78104,78106,78108],{"class":169,"line":11845},[167,78082,75741],{"class":512},[167,78084,60236],{"class":173},[167,78086,898],{"class":512},[167,78088,2784],{"class":177},[167,78090,3165],{"class":731},[167,78092,77941],{"class":184},[167,78094,78095],{"class":731},"{2}$",[167,78097,2784],{"class":177},[167,78099,2758],{"class":512},[167,78101,77233],{"class":173},[167,78103,898],{"class":512},[167,78105,78043],{"class":177},[167,78107,77241],{"class":512},[167,78109,78110],{"class":2268},"\u002F\u002Ftrue   可以选两个\n",[167,78112,78113,78115,78117,78119,78121,78123,78126,78128,78130,78132,78134,78136,78139,78141],{"class":169,"line":11851},[167,78114,75741],{"class":512},[167,78116,60236],{"class":173},[167,78118,898],{"class":512},[167,78120,2784],{"class":177},[167,78122,3165],{"class":731},[167,78124,78125],{"class":184},"[a-z]",[167,78127,2503],{"class":731},[167,78129,2784],{"class":177},[167,78131,2758],{"class":512},[167,78133,77233],{"class":173},[167,78135,898],{"class":512},[167,78137,78138],{"class":177},"'p'",[167,78140,77297],{"class":512},[167,78142,78143],{"class":2268},"\u002F\u002Ftrue   依然只能选一个\n",[167,78145,78146,78148,78150,78152,78154,78156,78159,78161,78163,78165,78167,78169,78171,78173],{"class":169,"line":11872},[167,78147,75741],{"class":512},[167,78149,60236],{"class":173},[167,78151,898],{"class":512},[167,78153,2784],{"class":177},[167,78155,3165],{"class":731},[167,78157,78158],{"class":184},"[A-Z]",[167,78160,2503],{"class":731},[167,78162,2784],{"class":177},[167,78164,2758],{"class":512},[167,78166,77233],{"class":173},[167,78168,898],{"class":512},[167,78170,78138],{"class":177},[167,78172,77297],{"class":512},[167,78174,77367],{"class":2268},[167,78176,78177,78179,78181,78183,78185,78187,78189,78191,78193,78195,78197,78199,78202,78204],{"class":169,"line":11878},[167,78178,75741],{"class":512},[167,78180,60236],{"class":173},[167,78182,898],{"class":512},[167,78184,2784],{"class":177},[167,78186,3165],{"class":731},[167,78188,78158],{"class":184},[167,78190,2503],{"class":731},[167,78192,2784],{"class":177},[167,78194,2758],{"class":512},[167,78196,77233],{"class":173},[167,78198,898],{"class":512},[167,78200,78201],{"class":177},"'P'",[167,78203,77297],{"class":512},[167,78205,77244],{"class":2268},[167,78207,78208,78210,78212,78214,78216,78218,78221,78223,78225,78227,78229,78231,78234,78236],{"class":169,"line":11892},[167,78209,75741],{"class":512},[167,78211,60236],{"class":173},[167,78213,898],{"class":512},[167,78215,2784],{"class":177},[167,78217,3165],{"class":731},[167,78219,78220],{"class":184},"[0-9]",[167,78222,2503],{"class":731},[167,78224,2784],{"class":177},[167,78226,2758],{"class":512},[167,78228,77233],{"class":173},[167,78230,898],{"class":512},[167,78232,78233],{"class":177},"'0'",[167,78235,77297],{"class":512},[167,78237,77244],{"class":2268},[167,78239,78240,78242,78244,78246,78248,78250,78253,78255,78257,78259,78261,78263,78265,78267],{"class":169,"line":11898},[167,78241,75741],{"class":512},[167,78243,60236],{"class":173},[167,78245,898],{"class":512},[167,78247,2784],{"class":177},[167,78249,3165],{"class":731},[167,78251,78252],{"class":184},"[a-zA-Z0-9]",[167,78254,2503],{"class":731},[167,78256,2784],{"class":177},[167,78258,2758],{"class":512},[167,78260,77233],{"class":173},[167,78262,898],{"class":512},[167,78264,78138],{"class":177},[167,78266,77241],{"class":512},[167,78268,77244],{"class":2268},[167,78270,78271,78273,78275],{"class":169,"line":11925},[167,78272,54412],{"class":512},[167,78274,53809],{"class":516},[167,78276,537],{"class":512},[167,78278,78279,78281,78283],{"class":169,"line":11934},[167,78280,575],{"class":512},[167,78282,517],{"class":516},[167,78284,537],{"class":512},[167,78286,78287],{"class":169,"line":11940},[167,78288,741],{"emptyLinePlaceholder":740},[167,78290,78291,78293,78295],{"class":169,"line":11948},[167,78292,575],{"class":512},[167,78294,52635],{"class":516},[167,78296,537],{"class":512},[24024,78298,78300],{"id":78299},"_3624-修饰符","3.6.2.4 修饰符",[19,78302,78303],{},[3528,78304],{"alt":32,"src":78305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78307,78308],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78310,78311],{},[3528,78312],{"alt":32,"src":78313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,78315,78317],{"className":52633,"code":78316,"language":52635,"meta":32,"style":32},"\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",[34,78318,78319,78329,78343,78351,78365,78385,78397,78405,78413,78421,78453,78484,78489,78521,78532,78565,78574,78582,78590],{"__ignoreMap":32},[167,78320,78321,78323,78325,78327],{"class":169,"line":170},[167,78322,53297],{"class":512},[167,78324,53300],{"class":516},[167,78326,53303],{"class":173},[167,78328,537],{"class":512},[167,78330,78331,78333,78335,78337,78339,78341],{"class":169,"line":191},[167,78332,513],{"class":512},[167,78334,52635],{"class":516},[167,78336,53314],{"class":173},[167,78338,523],{"class":512},[167,78340,53319],{"class":177},[167,78342,537],{"class":512},[167,78344,78345,78347,78349],{"class":169,"line":205},[167,78346,513],{"class":512},[167,78348,53332],{"class":516},[167,78350,537],{"class":512},[167,78352,78353,78355,78357,78359,78361,78363],{"class":169,"line":219},[167,78354,542],{"class":512},[167,78356,53342],{"class":516},[167,78358,53345],{"class":173},[167,78360,523],{"class":512},[167,78362,53350],{"class":177},[167,78364,537],{"class":512},[167,78366,78367,78369,78371,78373,78375,78377,78379,78381,78383],{"class":169,"line":230},[167,78368,542],{"class":512},[167,78370,53342],{"class":516},[167,78372,520],{"class":173},[167,78374,523],{"class":512},[167,78376,53389],{"class":177},[167,78378,53369],{"class":173},[167,78380,523],{"class":512},[167,78382,53396],{"class":177},[167,78384,537],{"class":512},[167,78386,78387,78389,78391,78393,78395],{"class":169,"line":241},[167,78388,542],{"class":512},[167,78390,53405],{"class":516},[167,78392,53408],{"class":512},[167,78394,53405],{"class":516},[167,78396,537],{"class":512},[167,78398,78399,78401,78403],{"class":169,"line":261},[167,78400,575],{"class":512},[167,78402,53332],{"class":516},[167,78404,537],{"class":512},[167,78406,78407,78409,78411],{"class":169,"line":773},[167,78408,513],{"class":512},[167,78410,517],{"class":516},[167,78412,537],{"class":512},[167,78414,78415,78417,78419],{"class":169,"line":779},[167,78416,542],{"class":512},[167,78418,53809],{"class":516},[167,78420,537],{"class":512},[167,78422,78423,78425,78427,78429,78431,78433,78436,78438,78440,78442,78444,78446,78449,78451],{"class":169,"line":785},[167,78424,75741],{"class":512},[167,78426,60236],{"class":173},[167,78428,898],{"class":512},[167,78430,2784],{"class":177},[167,78432,3165],{"class":731},[167,78434,78435],{"class":49977},"java",[167,78437,2503],{"class":731},[167,78439,2784],{"class":177},[167,78441,2758],{"class":512},[167,78443,77233],{"class":173},[167,78445,898],{"class":512},[167,78447,78448],{"class":177},"'java'",[167,78450,77743],{"class":512},[167,78452,77244],{"class":2268},[167,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471,78473,78475,78477,78480,78482],{"class":169,"line":790},[167,78456,75741],{"class":512},[167,78458,60236],{"class":173},[167,78460,898],{"class":512},[167,78462,2784],{"class":177},[167,78464,3165],{"class":731},[167,78466,78435],{"class":49977},[167,78468,2503],{"class":731},[167,78470,2784],{"class":177},[167,78472,2758],{"class":512},[167,78474,77233],{"class":173},[167,78476,898],{"class":512},[167,78478,78479],{"class":177},"'Java'",[167,78481,77743],{"class":512},[167,78483,77367],{"class":2268},[167,78485,78486],{"class":169,"line":796},[167,78487,78488],{"class":2268},"    \u002F\u002F 不区分大小写、\n",[167,78490,78491,78493,78495,78497,78499,78501,78503,78505,78507,78509,78511,78513,78515,78517,78519],{"class":169,"line":802},[167,78492,75741],{"class":512},[167,78494,60236],{"class":173},[167,78496,898],{"class":512},[167,78498,2784],{"class":177},[167,78500,3165],{"class":731},[167,78502,78435],{"class":49977},[167,78504,2503],{"class":731},[167,78506,2784],{"class":177},[167,78508,2641],{"class":731},[167,78510,2758],{"class":512},[167,78512,77233],{"class":173},[167,78514,898],{"class":512},[167,78516,78479],{"class":177},[167,78518,77743],{"class":512},[167,78520,77244],{"class":2268},[167,78522,78523,78525,78527,78529],{"class":169,"line":808},[167,78524,13249],{"class":731},[167,78526,75907],{"class":184},[167,78528,753],{"class":731},[167,78530,78531],{"class":177}," 'java是一门编程语言，学完java工资很高'\n",[167,78533,78534,78536,78539,78541,78544,78547,78549,78551,78553,78555,78558,78560,78563],{"class":169,"line":814},[167,78535,13249],{"class":731},[167,78537,78538],{"class":184}," result",[167,78540,753],{"class":731},[167,78542,78543],{"class":512}," str.",[167,78545,78546],{"class":173},"replace",[167,78548,898],{"class":512},[167,78550,2784],{"class":177},[167,78552,78435],{"class":49977},[167,78554,2784],{"class":177},[167,78556,78557],{"class":731},"ig",[167,78559,14463],{"class":512},[167,78561,78562],{"class":177},"'前端'",[167,78564,873],{"class":512},[167,78566,78567,78569,78571],{"class":169,"line":820},[167,78568,75741],{"class":512},[167,78570,60236],{"class":173},[167,78572,78573],{"class":512},"(result)\n",[167,78575,78576,78578,78580],{"class":169,"line":826},[167,78577,54412],{"class":512},[167,78579,53809],{"class":516},[167,78581,537],{"class":512},[167,78583,78584,78586,78588],{"class":169,"line":832},[167,78585,575],{"class":512},[167,78587,517],{"class":516},[167,78589,537],{"class":512},[167,78591,78592,78594,78596],{"class":169,"line":837},[167,78593,575],{"class":512},[167,78595,52635],{"class":516},[167,78597,537],{"class":512},[2113,78599,78600],{},"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":32,"searchDepth":191,"depth":191,"links":78602},[78603,78613,78625,78642,78649,78657],{"id":55353,"depth":191,"text":55354,"children":78604},[78605,78606,78607,78608,78609,78610,78611,78612],{"id":55357,"depth":205,"text":55358},{"id":55390,"depth":205,"text":55391},{"id":55429,"depth":205,"text":55430},{"id":55586,"depth":205,"text":55587},{"id":55634,"depth":205,"text":55635},{"id":55770,"depth":205,"text":55771},{"id":56091,"depth":205,"text":56092},{"id":59078,"depth":205,"text":59079},{"id":59106,"depth":191,"text":59107,"children":78614},[78615,78616,78617,78618,78619,78620,78621,78622,78623,78624],{"id":59110,"depth":205,"text":59111},{"id":59133,"depth":205,"text":59134},{"id":60048,"depth":205,"text":60049},{"id":60738,"depth":205,"text":60739},{"id":61020,"depth":205,"text":61021},{"id":65181,"depth":205,"text":65182},{"id":65351,"depth":205,"text":65352},{"id":65479,"depth":205,"text":65480},{"id":65504,"depth":205,"text":65505},{"id":66893,"depth":205,"text":66894},{"id":68046,"depth":191,"text":68047,"children":78626},[78627,78628,78629,78630,78631,78632,78633,78634,78635,78636,78637,78638,78639,78640,78641],{"id":68050,"depth":205,"text":68051},{"id":68704,"depth":205,"text":68705},{"id":70399,"depth":205,"text":70400},{"id":70440,"depth":205,"text":70441},{"id":70482,"depth":205,"text":70483},{"id":70496,"depth":205,"text":70497},{"id":70545,"depth":205,"text":70546},{"id":70557,"depth":205,"text":70558},{"id":70572,"depth":205,"text":70573},{"id":70608,"depth":205,"text":70609},{"id":70689,"depth":205,"text":70690},{"id":70817,"depth":205,"text":70818},{"id":70829,"depth":205,"text":70830},{"id":70848,"depth":205,"text":70849},{"id":72958,"depth":205,"text":72959},{"id":72977,"depth":191,"text":72978,"children":78643},[78644,78645,78646,78647,78648],{"id":72998,"depth":205,"text":72999},{"id":73018,"depth":205,"text":73019},{"id":73067,"depth":205,"text":73068},{"id":73192,"depth":205,"text":73193},{"id":73373,"depth":205,"text":73374},{"id":73391,"depth":191,"text":73392,"children":78650},[78651,78652,78653,78654,78655,78656],{"id":73406,"depth":205,"text":73407},{"id":73465,"depth":205,"text":73466},{"id":73489,"depth":205,"text":73490},{"id":73809,"depth":205,"text":73810},{"id":73841,"depth":205,"text":73842},{"id":73864,"depth":205,"text":73865},{"id":76932,"depth":191,"text":76933,"children":78658},[78659,78660],{"id":76966,"depth":205,"text":76967},{"id":77005,"depth":205,"text":77006},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55325,"description":25403},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78667,"title":78668,"body":78669,"description":25403,"extension":2140,"meta":94804,"navigation":740,"path":94805,"seo":94806,"stem":94807,"__hash__":94808},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78670,"toc":94740},[78671,78674,78677,78681,78685,78690,78695,78706,78710,78715,78718,78722,78725,78730,78734,78738,78741,78746,78749,78753,78756,78764,78767,78771,78776,78781,78784,78788,78793,78798,78801,78805,78810,78813,78818,78821,78826,78829,78834,78839,78842,78845,78849,78854,78859,78862,78866,78870,78873,78876,78879,78883,78887,78892,78897,78900,78904,78909,78914,78917,78920,78923,78926,78929,78932,78935,78938,78941,78946,78950,78955,78960,78963,78966,78969,78972,78975,78978,78981,78984,78988,78992,78995,78998,79001,79006,79008,79011,79014,79017,79020,79023,79026,79029,79032,79035,79038,79041,79044,79047,79052,79057,79062,79065,79069,79072,79077,79081,79083,79094,79099,79200,79203,79206,79209,79212,79215,79218,79221,79224,79226,79229,79232,79235,79238,79241,79243,79246,79249,79252,79255,79258,79261,79263,79266,79268,79270,79273,79277,79281,79284,79287,79290,79293,79296,79299,79302,79305,79308,79313,79433,79436,79439,79444,79447,79450,79453,79456,79461,79464,79467,79470,79473,79478,79481,79581,79646,79720,79724,79727,79730,79734,79737,79751,79780,79783,79786,79789,79792,79795,79798,79801,79803,79806,79809,79812,79815,79819,79824,79828,79833,79908,79911,80094,80097,80100,80103,80106,80109,80111,80114,80117,80120,80123,80126,80129,80131,80135,80138,80143,80146,80149,80152,80155,80157,80162,80165,80168,80171,80174,80176,80181,80184,80187,80189,80191,80194,80198,80201,80204,80209,80212,80215,80218,80268,80273,80277,80282,80285,80354,80357,80366,80370,80375,80378,80381,80389,80392,80409,82210,82214,82218,82223,82226,82230,82236,82242,82394,82399,82404,82407,82410,82413,82416,82419,82422,82425,82428,82431,82434,82437,82440,82445,82449,82452,82463,82467,82472,82475,82478,82481,82484,82487,82489,82492,82495,82498,82501,82503,82520,82523,82527,82530,82535,82540,82543,82546,82550,82553,82556,82565,82568,82572,82575,82580,82585,82652,82656,82659,82662,82667,82672,82758,82763,82767,82770,82773,82788,82791,82796,82800,82805,82914,82917,82928,83078,83082,83087,83196,83200,83205,83210,83215,83218,83225,83245,83281,83445,83450,83453,83458,83465,83468,83471,83474,83533,83589,83645,83649,83654,83969,83972,83976,83979,83984,84093,84098,84102,84107,84111,84182,84186,84188,84191,84194,84232,84508,84512,84528,84594,84628,84632,84635,84640,84669,84676,84685,84690,84705,84710,84719,84722,84859,84863,84925,84929,84934,85179,85183,85188,85191,85194,85197,85200,85204,85209,86790,86794,86798,86804,86807,86812,86816,86819,86824,86827,86838,86842,86847,86851,86856,86861,86864,86869,86873,86877,86880,86885,86890,86893,86896,86899,87021,87026,87128,87131,87134,87138,87143,87315,87320,87324,87327,87332,87398,87403,87406,87537,87540,87545,87548,87551,87642,87647,87650,87653,87656,87659,87664,87669,87672,87677,87682,87687,87691,87694,87697,87702,87707,87712,87717,87771,87774,87777,87782,87785,87788,87793,87798,87803,87807,87812,87826,87831,87834,87839,87843,87848,87853,87858,87863,87868,87873,87878,87883,87886,87890,87895,87898,87901,87904,87909,87914,87917,87920,87924,87927,87930,87935,87940,87945,87950,87953,87958,87963,88024,88029,88032,88037,89278,89283,89287,89291,89296,89299,89304,89309,89312,89317,89319,89324,89328,89331,89334,89345,89349,89354,89359,89414,89419,89424,89429,89640,89645,89649,89654,89657,89659,89662,89665,90112,90117,90124,90130,90133,90136,90400,90405,90409,90674,90679,90683,90688,90693,90698,90703,91034,91037,91042,91047,91050,91054,91058,91063,91068,91073,91078,91083,91088,91092,91095,91100,91105,91108,91182,91187,91192,91197,91199,91202,91572,91577,91582,91587,91590,91593,91695,91700,91705,91808,91812,91817,91821,91825,91830,91835,91838,91843,91846,91849,92242,92247,92250,92253,92256,92259,92779,92783,92788,92793,92798,92801,92806,92809,92812,93194,93199,93201,93203,93206,93209,93721,93725,93786,93789,93792,93795,93799,93802,93807,93812,94737],[10,78672,78668],{"id":78673},"_4js进阶",[19,78675,78676],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78678,78680],{"id":78679},"_41-作用域","4.1 作用域",[494,78682,78684],{"id":78683},"_411-局部作用域","4.1.1 局部作用域",[19,78686,78687],{},[3528,78688],{"alt":32,"src":78689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78691,78692],{},[3528,78693],{"alt":32,"src":78694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3205,78696,78697,78700,78703],{},[43,78698,78699],{},"函数作用域在函数内部",[43,78701,78702],{},"块级作用域在{}",[43,78704,78705],{},"对象的那个{}不是作用域，不是块作用域",[494,78707,78709],{"id":78708},"_412-全局作用域","4.1.2 全局作用域",[19,78711,78712],{},[3528,78713],{"alt":32,"src":78714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78716,78717],{},"window.a=10不要这样写",[494,78719,78721],{"id":78720},"_413-作用域链","4.1.3 作用域链",[19,78723,78724],{},"变量查找机制",[19,78726,78727],{},[3528,78728],{"alt":32,"src":78729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78731,78733],{"id":78732},"_42-垃圾回收机制","4.2 垃圾回收机制",[494,78735,78737],{"id":78736},"_421-大体介绍","4.2.1 大体介绍",[19,78739,78740],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78742,78743],{},[3528,78744],{"alt":32,"src":78745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78747,78748],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[494,78750,78752],{"id":78751},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78754,78755],{},"堆栈空间分配区别：",[40,78757,78758,78761],{},[43,78759,78760],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[43,78762,78763],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78765,78766],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24024,78768,78770],{"id":78769},"_4221-引用计数","4.2.2.1 引用计数",[19,78772,78773],{},[3528,78774],{"alt":32,"src":78775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78777,78778],{},[3528,78779],{"alt":32,"src":78780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78782,78783],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24024,78785,78787],{"id":78786},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78789,78790],{},[3528,78791],{"alt":32,"src":78792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78794,78795],{},[3528,78796],{"alt":32,"src":78797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78799,78800],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78802,78804],{"id":78803},"_43-闭包","4.3 闭包",[19,78806,78807],{},[3528,78808],{"alt":32,"src":78809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78811,78812],{},"闭包：内层函数+外层函数的变量",[19,78814,78815],{},[3528,78816],{"alt":32,"src":78817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78819,78820],{},"closure就是闭包",[19,78822,78823],{},[3528,78824],{"alt":32,"src":78825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78827,78828],{},"内层函数必须包含外层函数的变量才是闭包",[19,78830,78831],{},[3528,78832],{"alt":32,"src":78833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78835,78836],{},[3528,78837],{"alt":32,"src":78838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78840,78841],{},"闭包可能会引起内存泄漏",[19,78843,78844],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78846,78848],{"id":78847},"_44-变量提升","4.4 变量提升",[19,78850,78851],{},[3528,78852],{"alt":32,"src":78853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78855,78856],{},[3528,78857],{"alt":32,"src":78858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78860,78861],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78863,78865],{"id":78864},"_45-函数进阶","4.5 函数进阶",[494,78867,78869],{"id":78868},"_451-函数提升","4.5.1 函数提升",[19,78871,78872],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78874,78875],{},"只提升函数声明，不提升函数调用",[53809,78877,78878],{},"\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",[494,78880,78882],{"id":78881},"_452-函数参数","4.5.2 函数参数",[24024,78884,78886],{"id":78885},"_4521-动态参数","4.5.2.1 动态参数",[19,78888,78889],{},[3528,78890],{"alt":32,"src":78891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78893,78894],{},[3528,78895],{"alt":32,"src":78896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78898,78899],{},"箭头函数里边没有arguments",[24024,78901,78903],{"id":78902},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78905,78906],{},[3528,78907],{"alt":32,"src":78908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78910,78911],{},[3528,78912],{"alt":32,"src":78913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78915,78916],{},"剩余参数使用的时候不需要写...",[19,78918,78919],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78921,78922],{},"  function getSum(a,b,...arr) {",[19,78924,78925],{},"  console.log(11)",[19,78927,78928],{},"  }",[19,78930,78931],{},"  getSum(1,2,3,4)",[19,78933,78934],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78936,78937],{},"  getSum(1,2)",[19,78939,78940],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78942,78943],{},[3528,78944],{"alt":32,"src":78945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24024,78947,78949],{"id":78948},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78951,78952],{},[3528,78953],{"alt":32,"src":78954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78956,78957],{},[3528,78958],{"alt":32,"src":78959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78961,78962],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78964,78965],{},"展开运算符可以用于数组之间的合并：",[19,78967,78968],{},"const arr1 = [1, 2, 3]",[19,78970,78971],{},"const arr2 = [3, 4, 5]",[19,78973,78974],{},"const arr = [...arr1, ...arr2]",[19,78976,78977],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78979,78980],{},"剩余参数：函数参数使用，得到真数组",[19,78982,78983],{},"展开运算符：数组中使用，数组展开",[494,78985,78987],{"id":78986},"_453-箭头函数","4.5.3 箭头函数",[24024,78989,78991],{"id":78990},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78993,78994],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78996,78997],{},"它不是万能的！！！",[19,78999,79000],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79002,79003],{},[3528,79004],{"alt":32,"src":79005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79007,2241],{},[19,79009,79010],{},"① 只有一个形参的时候，可以省略小括号：",[19,79012,79013],{},"const fn=x=>{console.log(x)}",[19,79015,79016],{},"② 只有一行代码时可以省略大括号：",[19,79018,79019],{},"const fn=x=>console.log(11)",[19,79021,79022],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79024,79025],{},"const fn=x=>x+x",[19,79027,79028],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79030,79031],{},"⑤ 阻止表单默认提交：",[19,79033,79034],{},"const form = document.querySelector('form')",[19,79036,79037],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79039,79040],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79042,79043],{},"const fn=uname=>({uname:uname})",[19,79045,79046],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79048,79049],{},[3528,79050],{"alt":32,"src":79051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79053,79054],{},[3528,79055],{"alt":32,"src":79056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79058,79059],{},[3528,79060],{"alt":32,"src":79061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79063,79064],{},"一定不要忘记用()，有()就理解为自带return",[24024,79066,79068],{"id":79067},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79070,79071],{},"箭头函数是没有动态参数的arguments",[19,79073,79074],{},[3528,79075],{"alt":32,"src":79076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24024,79078,79080],{"id":79079},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79082,13360],{},[40,79084,79085,79088,79091],{},[43,79086,79087],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[43,79089,79090],{},"事件回调函数使用箭头函数时，this 为全局的 window",[43,79092,79093],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79095,79096],{},[3528,79097],{"alt":32,"src":79098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,79100,79102],{"className":503,"code":79101,"language":505,"meta":32,"style":32},"  \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",[34,79103,79104,79112,79117,79122,79127,79132,79137,79141,79146,79150,79154,79159,79164,79169,79173,79177,79182,79187,79192],{"__ignoreMap":32},[167,79105,79106,79108,79110],{"class":169,"line":170},[167,79107,542],{"class":512},[167,79109,53809],{"class":516},[167,79111,537],{"class":512},[167,79113,79114],{"class":169,"line":191},[167,79115,79116],{"class":512},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[167,79118,79119],{"class":169,"line":205},[167,79120,79121],{"class":512},"    console.log(this) \u002F\u002F指向window\n",[167,79123,79124],{"class":169,"line":219},[167,79125,79126],{"class":512},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[167,79128,79129],{"class":169,"line":230},[167,79130,79131],{"class":512},"    function fn() {\n",[167,79133,79134],{"class":169,"line":241},[167,79135,79136],{"class":512},"      console.log(this)  \u002F\u002F指向window\n",[167,79138,79139],{"class":169,"line":261},[167,79140,4231],{"class":512},[167,79142,79143],{"class":169,"line":773},[167,79144,79145],{"class":512},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[167,79147,79148],{"class":169,"line":779},[167,79149,741],{"emptyLinePlaceholder":740},[167,79151,79152],{"class":169,"line":785},[167,79153,73511],{"class":512},[167,79155,79156],{"class":169,"line":790},[167,79157,79158],{"class":512},"      name: 'andy',\n",[167,79160,79161],{"class":169,"line":796},[167,79162,79163],{"class":512},"      sayHai: function () {\n",[167,79165,79166],{"class":169,"line":802},[167,79167,79168],{"class":512},"        console.log(this)\n",[167,79170,79171],{"class":169,"line":808},[167,79172,54393],{"class":512},[167,79174,79175],{"class":169,"line":814},[167,79176,4231],{"class":512},[167,79178,79179],{"class":169,"line":820},[167,79180,79181],{"class":512},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[167,79183,79184],{"class":169,"line":826},[167,79185,79186],{"class":512},"    \u002F\u002F 2.箭头函数的this\n",[167,79188,79189],{"class":169,"line":832},[167,79190,79191],{"class":512},"    const fn = () => console.log(this)\n",[167,79193,79194,79196,79198],{"class":169,"line":837},[167,79195,54412],{"class":512},[167,79197,53809],{"class":516},[167,79199,537],{"class":512},[19,79201,79202],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79204,79205],{},"const fn = () => console.log(this)",[19,79207,79208],{},"fn() \u002F\u002F指向window",[19,79210,79211],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79213,79214],{},"①",[19,79216,79217],{},"const obj = {",[19,79219,79220],{},"uname: 'pink老师',",[19,79222,79223],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79225,3145],{},[19,79227,79228],{},"调用对象里边的函数",[19,79230,79231],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79233,79234],{},"obj.sayHai()",[19,79236,79237],{},"②",[19,79239,79240],{},"const obj1 = {",[19,79242,79220],{},[19,79244,79245],{},"sayHai: function () {",[19,79247,79248],{},"let i = 10",[19,79250,79251],{},"const count = () => {",[19,79253,79254],{},"console.log(this)",[19,79256,79257],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79259,79260],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79262,3145],{},[19,79264,79265],{},"count()",[19,79267,3145],{},[19,79269,3145],{},[19,79271,79272],{},"obj1.sayHai()",[14,79274,79276],{"id":79275},"_46-解构赋值","4.6 解构赋值",[494,79278,79280],{"id":79279},"_461-数组解构","4.6.1 数组解构",[19,79282,79283],{},"以前要是使用数组中的值的话：",[19,79285,79286],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79288,79289],{},"const arr=[100,60,80]",[19,79291,79292],{},"const max=arr[0]",[19,79294,79295],{},"const min=arr[1]",[19,79297,79298],{},"const avg=arr[2]",[19,79300,79301],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79303,79304],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79306,79307],{},"这个写法就类似于上边的那种用很多const的方法",[19,79309,79310],{},[3528,79311],{"alt":32,"src":79312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,79314,79316],{"className":52633,"code":79315,"language":52635,"meta":32,"style":32},"①变量之间交换值:\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",[34,79317,79318,79323,79328,79333,79338,79343,79347,79351,79356,79360,79365,79370,79374,79379,79384,79395,79405,79410,79415,79420,79424,79428],{"__ignoreMap":32},[167,79319,79320],{"class":169,"line":170},[167,79321,79322],{"class":512},"①变量之间交换值:\n",[167,79324,79325],{"class":169,"line":191},[167,79326,79327],{"class":512},"let a=1\n",[167,79329,79330],{"class":169,"line":205},[167,79331,79332],{"class":512},"let b=2;\n",[167,79334,79335],{"class":169,"line":219},[167,79336,79337],{"class":512},"必须加这行代码，不然就会报错\n",[167,79339,79340],{"class":169,"line":230},[167,79341,79342],{"class":512},"[b,a]=[a,b]\n",[167,79344,79345],{"class":169,"line":241},[167,79346,741],{"emptyLinePlaceholder":740},[167,79348,79349],{"class":169,"line":261},[167,79350,741],{"emptyLinePlaceholder":740},[167,79352,79353],{"class":169,"line":773},[167,79354,79355],{"class":512},"可以写成下面的方式：\n",[167,79357,79358],{"class":169,"line":779},[167,79359,79327],{"class":512},[167,79361,79362],{"class":169,"line":785},[167,79363,79364],{"class":512},"let b=2\n",[167,79366,79367],{"class":169,"line":790},[167,79368,79369],{"class":512},";[b,a]=[a,b]\n",[167,79371,79372],{"class":169,"line":796},[167,79373,741],{"emptyLinePlaceholder":740},[167,79375,79376],{"class":169,"line":802},[167,79377,79378],{"class":512},"②排序\n",[167,79380,79381],{"class":169,"line":808},[167,79382,79383],{"class":512},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[167,79385,79386,79389,79392],{"class":169,"line":814},[167,79387,79388],{"class":512},"for (let i = 0; i ",[167,79390,513],{"class":79391},"s7hpK",[167,79393,79394],{"class":512}," arr1.length; i++) {\n",[167,79396,79397,79400,79402],{"class":169,"line":820},[167,79398,79399],{"class":512},"   for (let j = 0; j ",[167,79401,513],{"class":79391},[167,79403,79404],{"class":512}," arr1.length - 1; j++) {\n",[167,79406,79407],{"class":169,"line":826},[167,79408,79409],{"class":512},"      if (arr1[j] > arr1[j + 1]) {\n",[167,79411,79412],{"class":169,"line":832},[167,79413,79414],{"class":512},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[167,79416,79417],{"class":169,"line":837},[167,79418,79419],{"class":512},"       }\n",[167,79421,79422],{"class":169,"line":842},[167,79423,6341],{"class":512},[167,79425,79426],{"class":169,"line":860},[167,79427,3630],{"class":512},[167,79429,79430],{"class":169,"line":876},[167,79431,79432],{"class":512},"console.log(arr1)\n",[19,79434,79435],{},"数组解构的细节：",[19,79437,79438],{},"①变量多，单元值少",[19,79440,79441],{},[3528,79442],{"alt":32,"src":79443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79445,79446],{},"防止出现undefined的方法：",[19,79448,79449],{},"const [a=0,b=0] =[1]",[19,79451,79452],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79454,79455],{},"②变量少，单元值多",[19,79457,79458],{},[3528,79459],{"alt":32,"src":79460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79462,79463],{},"此时可以使用剩余参数来接收多余的值",[19,79465,79466],{},"const [a,b,...c]=[1,2,3,4]",[19,79468,79469],{},"console.log(c) 输出[3,4]",[19,79471,79472],{},"③可以按需导入，忽略某些返回值",[19,79474,79475],{},[3528,79476],{"alt":32,"src":79477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79479,79480],{},"④支持多维数组的结构",[26,79482,79486],{"className":79483,"code":79484,"language":79485,"meta":32,"style":32},"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",[34,79487,79488,79516,79532,79547,79562],{"__ignoreMap":32},[167,79489,79490,79492,79494,79496,79498,79500,79502,79504,79507,79509,79511,79513],{"class":169,"line":170},[167,79491,8822],{"class":731},[167,79493,53829],{"class":512},[167,79495,523],{"class":731},[167,79497,54221],{"class":512},[167,79499,2418],{"class":184},[167,79501,14463],{"class":512},[167,79503,2287],{"class":184},[167,79505,79506],{"class":512},", [",[167,79508,2281],{"class":184},[167,79510,14463],{"class":512},[167,79512,2494],{"class":184},[167,79514,79515],{"class":512},"]]\n",[167,79517,79518,79521,79523,79525,79527,79529],{"class":169,"line":191},[167,79519,79520],{"class":512},"console.",[167,79522,60236],{"class":173},[167,79524,5883],{"class":512},[167,79526,1154],{"class":184},[167,79528,6248],{"class":512},[167,79530,79531],{"class":2268},"  \u002F\u002F1\n",[167,79533,79534,79536,79538,79540,79542,79544],{"class":169,"line":205},[167,79535,79520],{"class":512},[167,79537,60236],{"class":173},[167,79539,5883],{"class":512},[167,79541,2418],{"class":184},[167,79543,6248],{"class":512},[167,79545,79546],{"class":2268},"  \u002F\u002F2\n",[167,79548,79549,79551,79553,79555,79557,79559],{"class":169,"line":219},[167,79550,79520],{"class":512},[167,79552,60236],{"class":173},[167,79554,5883],{"class":512},[167,79556,2287],{"class":184},[167,79558,6248],{"class":512},[167,79560,79561],{"class":2268},"  \u002F\u002F[3,4]\n",[167,79563,79564,79566,79568,79570,79572,79574,79576,79578],{"class":169,"line":230},[167,79565,79520],{"class":512},[167,79567,60236],{"class":173},[167,79569,5883],{"class":512},[167,79571,2287],{"class":184},[167,79573,6933],{"class":512},[167,79575,1154],{"class":184},[167,79577,6248],{"class":512},[167,79579,79580],{"class":2268},"  \u002F\u002F3\n",[26,79582,79584],{"className":79483,"code":79583,"language":79485,"meta":32,"style":32},"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",[34,79585,79586,79613,79624,79635],{"__ignoreMap":32},[167,79587,79588,79590,79593,79595,79597,79599,79601,79603,79605,79607,79609,79611],{"class":169,"line":170},[167,79589,8822],{"class":731},[167,79591,79592],{"class":512}," [a, b, c] ",[167,79594,523],{"class":731},[167,79596,54221],{"class":512},[167,79598,2418],{"class":184},[167,79600,14463],{"class":512},[167,79602,2287],{"class":184},[167,79604,79506],{"class":512},[167,79606,2281],{"class":184},[167,79608,14463],{"class":512},[167,79610,2494],{"class":184},[167,79612,79515],{"class":512},[167,79614,79615,79617,79619,79622],{"class":169,"line":191},[167,79616,79520],{"class":512},[167,79618,60236],{"class":173},[167,79620,79621],{"class":512},"(a)",[167,79623,79531],{"class":2268},[167,79625,79626,79628,79630,79633],{"class":169,"line":205},[167,79627,79520],{"class":512},[167,79629,60236],{"class":173},[167,79631,79632],{"class":512},"(b)",[167,79634,79546],{"class":2268},[167,79636,79637,79639,79641,79644],{"class":169,"line":219},[167,79638,79520],{"class":512},[167,79640,60236],{"class":173},[167,79642,79643],{"class":512},"(c)",[167,79645,79561],{"class":2268},[26,79647,79649],{"className":79483,"code":79648,"language":79485,"meta":32,"style":32},"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",[34,79650,79651,79678,79688,79698,79708],{"__ignoreMap":32},[167,79652,79653,79655,79658,79660,79662,79664,79666,79668,79670,79672,79674,79676],{"class":169,"line":170},[167,79654,8822],{"class":731},[167,79656,79657],{"class":512}," [a, b, [c, d]] ",[167,79659,523],{"class":731},[167,79661,54221],{"class":512},[167,79663,2418],{"class":184},[167,79665,14463],{"class":512},[167,79667,2287],{"class":184},[167,79669,79506],{"class":512},[167,79671,2281],{"class":184},[167,79673,14463],{"class":512},[167,79675,2494],{"class":184},[167,79677,79515],{"class":512},[167,79679,79680,79682,79684,79686],{"class":169,"line":191},[167,79681,79520],{"class":512},[167,79683,60236],{"class":173},[167,79685,79621],{"class":512},[167,79687,79531],{"class":2268},[167,79689,79690,79692,79694,79696],{"class":169,"line":205},[167,79691,79520],{"class":512},[167,79693,60236],{"class":173},[167,79695,79632],{"class":512},[167,79697,79546],{"class":2268},[167,79699,79700,79702,79704,79706],{"class":169,"line":219},[167,79701,79520],{"class":512},[167,79703,60236],{"class":173},[167,79705,79643],{"class":512},[167,79707,79580],{"class":2268},[167,79709,79710,79712,79714,79717],{"class":169,"line":230},[167,79711,79520],{"class":512},[167,79713,60236],{"class":173},[167,79715,79716],{"class":512},"(d)",[167,79718,79719],{"class":2268},"  \u002F\u002F4\n",[494,79721,79723],{"id":79722},"_462-对象解构","4.6.2 对象解构",[19,79725,79726],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79728,79729],{},"用的非常非常多！！！！！！",[24024,79731,79733],{"id":79732},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79735,79736],{},"基本语法：",[40,79738,79739,79742,79745,79748],{},[43,79740,79741],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[43,79743,79744],{},"对象属性的值将被赋值给与属性名相同的变量",[43,79746,79747],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[43,79749,79750],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,79752,79754],{"className":52633,"code":79753,"language":52635,"meta":32,"style":32},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[34,79755,79756,79761,79766,79771,79775],{"__ignoreMap":32},[167,79757,79758],{"class":169,"line":170},[167,79759,79760],{"class":512},"const obj = {\n",[167,79762,79763],{"class":169,"line":191},[167,79764,79765],{"class":512},"   uname: 'pink老师',\n",[167,79767,79768],{"class":169,"line":205},[167,79769,79770],{"class":512},"   age: 18,\n",[167,79772,79773],{"class":169,"line":219},[167,79774,3630],{"class":512},[167,79776,79777],{"class":169,"line":230},[167,79778,79779],{"class":512},"const { uname, age } = obj\n",[19,79781,79782],{},"上方代码这样写等价于：",[19,79784,79785],{},"const uname等价于obj.uname",[19,79787,79788],{},"变量名可以重新改名：",[19,79790,79791],{},"const uname='red老师'",[19,79793,79794],{},"const user={",[19,79796,79797],{},"  uname:'pink老师',",[19,79799,79800],{},"  age:18",[19,79802,3145],{},[19,79804,79805],{},"const {uname,age}=user",[19,79807,79808],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79810,79811],{},"const {旧变量名：新变量名}=对象",[19,79813,79814],{},"const {uname:username,age}=user",[24024,79816,79818],{"id":79817},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79820,79821],{},[3528,79822],{"alt":32,"src":79823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24024,79825,79827],{"id":79826},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79829,79830],{},[3528,79831],{"alt":32,"src":79832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,79834,79836],{"className":503,"code":79835,"language":505,"meta":32,"style":32},"  \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",[34,79837,79838,79846,79851,79856,79861,79866,79871,79876,79881,79886,79890,79895,79900],{"__ignoreMap":32},[167,79839,79840,79842,79844],{"class":169,"line":170},[167,79841,542],{"class":512},[167,79843,53809],{"class":516},[167,79845,537],{"class":512},[167,79847,79848],{"class":169,"line":191},[167,79849,79850],{"class":512},"    const pig = {\n",[167,79852,79853],{"class":169,"line":205},[167,79854,79855],{"class":512},"      name: '佩奇',\n",[167,79857,79858],{"class":169,"line":219},[167,79859,79860],{"class":512},"      family: {\n",[167,79862,79863],{"class":169,"line":230},[167,79864,79865],{"class":512},"        mother: '猪妈妈',\n",[167,79867,79868],{"class":169,"line":241},[167,79869,79870],{"class":512},"        father: '猪爸爸',\n",[167,79872,79873],{"class":169,"line":261},[167,79874,79875],{"class":512},"        sister: '乔治'\n",[167,79877,79878],{"class":169,"line":773},[167,79879,79880],{"class":512},"      },\n",[167,79882,79883],{"class":169,"line":779},[167,79884,79885],{"class":512},"      age: 6\n",[167,79887,79888],{"class":169,"line":785},[167,79889,4231],{"class":512},[167,79891,79892],{"class":169,"line":790},[167,79893,79894],{"class":512},"    \u002F\u002F 多级对象解构\n",[167,79896,79897],{"class":169,"line":796},[167,79898,79899],{"class":512},"    const { name, family: { mother, father, sister }, age } = pig\n",[167,79901,79902,79904,79906],{"class":169,"line":802},[167,79903,54412],{"class":512},[167,79905,53809],{"class":516},[167,79907,537],{"class":512},[19,79909,79910],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,79912,79915],{"className":79913,"code":79914,"language":78435,"meta":32,"style":32},"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",[34,79916,79917,79922,79933,79945,79957,79966,79970,79981,79993,80003,80008,80012,80022,80033,80042,80046,80050,80061,80072,80081,80085,80090],{"__ignoreMap":32},[167,79918,79919],{"class":169,"line":170},[167,79920,79921],{"class":2268},"    \u002F\u002F 这是后台传递过来的数据\n",[167,79923,79924,79926,79929,79931],{"class":169,"line":191},[167,79925,13249],{"class":731},[167,79927,79928],{"class":512}," msg ",[167,79930,523],{"class":731},[167,79932,17598],{"class":512},[167,79934,79935,79938,79940,79943],{"class":169,"line":205},[167,79936,79937],{"class":177},"      \"code\"",[167,79939,3059],{"class":731},[167,79941,79942],{"class":184}," 200",[167,79944,33471],{"class":512},[167,79946,79947,79950,79952,79955],{"class":169,"line":219},[167,79948,79949],{"class":177},"      \"msg\"",[167,79951,3059],{"class":731},[167,79953,79954],{"class":177}," \"获取新闻列表成功\"",[167,79956,33471],{"class":512},[167,79958,79959,79962,79964],{"class":169,"line":230},[167,79960,79961],{"class":177},"      \"data\"",[167,79963,3059],{"class":731},[167,79965,57436],{"class":512},[167,79967,79968],{"class":169,"line":241},[167,79969,4553],{"class":512},[167,79971,79972,79975,79977,79979],{"class":169,"line":261},[167,79973,79974],{"class":177},"          \"id\"",[167,79976,3059],{"class":731},[167,79978,27138],{"class":184},[167,79980,33471],{"class":512},[167,79982,79983,79986,79988,79991],{"class":169,"line":773},[167,79984,79985],{"class":177},"          \"title\"",[167,79987,3059],{"class":731},[167,79989,79990],{"class":177}," \"5G商用自己，三大运用商收入下降\"",[167,79992,33471],{"class":512},[167,79994,79995,79998,80000],{"class":169,"line":779},[167,79996,79997],{"class":177},"          \"count\"",[167,79999,3059],{"class":731},[167,80001,80002],{"class":184}," 58\n",[167,80004,80005],{"class":169,"line":785},[167,80006,80007],{"class":512},"        },\n",[167,80009,80010],{"class":169,"line":790},[167,80011,4553],{"class":512},[167,80013,80014,80016,80018,80020],{"class":169,"line":796},[167,80015,79974],{"class":177},[167,80017,3059],{"class":731},[167,80019,16782],{"class":184},[167,80021,33471],{"class":512},[167,80023,80024,80026,80028,80031],{"class":169,"line":802},[167,80025,79985],{"class":177},[167,80027,3059],{"class":731},[167,80029,80030],{"class":177}," \"国际媒体头条速览\"",[167,80032,33471],{"class":512},[167,80034,80035,80037,80039],{"class":169,"line":808},[167,80036,79997],{"class":177},[167,80038,3059],{"class":731},[167,80040,80041],{"class":184}," 56\n",[167,80043,80044],{"class":169,"line":814},[167,80045,80007],{"class":512},[167,80047,80048],{"class":169,"line":820},[167,80049,4553],{"class":512},[167,80051,80052,80054,80056,80059],{"class":169,"line":826},[167,80053,79974],{"class":177},[167,80055,3059],{"class":731},[167,80057,80058],{"class":184}," 3",[167,80060,33471],{"class":512},[167,80062,80063,80065,80067,80070],{"class":169,"line":832},[167,80064,79985],{"class":177},[167,80066,3059],{"class":731},[167,80068,80069],{"class":177}," \"乌克兰和俄罗斯持续冲突\"",[167,80071,33471],{"class":512},[167,80073,80074,80076,80078],{"class":169,"line":837},[167,80075,79997],{"class":177},[167,80077,3059],{"class":731},[167,80079,80080],{"class":184}," 1669\n",[167,80082,80083],{"class":169,"line":842},[167,80084,80007],{"class":512},[167,80086,80087],{"class":169,"line":860},[167,80088,80089],{"class":512},"      ]\n",[167,80091,80092],{"class":169,"line":876},[167,80093,4231],{"class":512},[19,80095,80096],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80098,80099],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80101,80102],{},"\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,80104,80105],{},"function({data}) {",[19,80107,80108],{},"console.log(data)",[19,80110,3145],{},[19,80112,80113],{},"render(msg)",[19,80115,80116],{},"实参传递给形参的时候解构了",[19,80118,80119],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80121,80122],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80124,80125],{},"function render({data:mydata}) {",[19,80127,80128],{},"  console.log(data)",[19,80130,3145],{},[494,80132,80134],{"id":80133},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80136,80137],{},"有两种情况：一个是数组结构，一个是立即执行函数",[40,80139,80140],{},[43,80141,80142],{},"如果对一个数组进行遍历，有两种方式：",[19,80144,80145],{},"①法1",[19,80147,80148],{},"const arr=[1,2,3]",[19,80150,80151],{},"arr.map(function(item,index) {",[19,80153,80154],{},"  console.log(item)",[19,80156,54459],{},[19,80158,80159],{},[3528,80160],{"alt":32,"src":80161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80163,80164],{},"②法2",[19,80166,80167],{},"const str='pink'",[19,80169,80170],{},"[1,2,3].map(function(item,index) {",[19,80172,80173],{},"console.log(item)",[19,80175,54459],{},[19,80177,80178],{},[3528,80179],{"alt":32,"src":80180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80182,80183],{},"此时会报错",[19,80185,80186],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80188,80173],{},[19,80190,54459],{},[19,80192,80193],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80195,80197],{"id":80196},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80199,80200],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80202,80203],{},"可以理解为加强版的for循环",[19,80205,80206],{},[3528,80207],{"alt":32,"src":80208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80210,80211],{},"里边不写return，不返回数组，只遍历不返回",[19,80213,80214],{},"map是返回数组",[19,80216,80217],{},"forEach主要用于遍历数组对象",[26,80219,80221],{"className":503,"code":80220,"language":505,"meta":32,"style":32},"  \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",[34,80222,80223,80231,80236,80241,80246,80251,80255,80260],{"__ignoreMap":32},[167,80224,80225,80227,80229],{"class":169,"line":170},[167,80226,542],{"class":512},[167,80228,53809],{"class":516},[167,80230,537],{"class":512},[167,80232,80233],{"class":169,"line":191},[167,80234,80235],{"class":512},"    const arr = ['red', 'green', 'pink']\n",[167,80237,80238],{"class":169,"line":205},[167,80239,80240],{"class":512},"    const result = arr.forEach(function (item, index) {\n",[167,80242,80243],{"class":169,"line":219},[167,80244,80245],{"class":512},"      console.log(item)\n",[167,80247,80248],{"class":169,"line":230},[167,80249,80250],{"class":512},"      console.log(index)\n",[167,80252,80253],{"class":169,"line":241},[167,80254,35463],{"class":512},[167,80256,80257],{"class":169,"line":261},[167,80258,80259],{"class":512},"    console.log(result)\n",[167,80261,80262,80264,80266],{"class":169,"line":773},[167,80263,54412],{"class":512},[167,80265,53809],{"class":516},[167,80267,537],{"class":512},[19,80269,80270],{},[3528,80271],{"alt":32,"src":80272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80274,80276],{"id":80275},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80278,80279],{},[3528,80280],{"alt":32,"src":80281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80283,80284],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,80286,80288],{"className":503,"code":80287,"language":505,"meta":32,"style":32},"\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",[34,80289,80290,80298,80306,80311,80316,80320,80324,80329,80333,80338,80346],{"__ignoreMap":32},[167,80291,80292,80294,80296],{"class":169,"line":170},[167,80293,513],{"class":512},[167,80295,517],{"class":516},[167,80297,537],{"class":512},[167,80299,80300,80302,80304],{"class":169,"line":191},[167,80301,542],{"class":512},[167,80303,53809],{"class":516},[167,80305,537],{"class":512},[167,80307,80308],{"class":169,"line":205},[167,80309,80310],{"class":512},"    const arr = [10, 20, 30]\n",[167,80312,80313],{"class":169,"line":219},[167,80314,80315],{"class":512},"    const newArr = arr.filter(function (item, index) {\n",[167,80317,80318],{"class":169,"line":230},[167,80319,80245],{"class":512},[167,80321,80322],{"class":169,"line":241},[167,80323,80250],{"class":512},[167,80325,80326],{"class":169,"line":261},[167,80327,80328],{"class":512},"      return item >= 20\n",[167,80330,80331],{"class":169,"line":773},[167,80332,35463],{"class":512},[167,80334,80335],{"class":169,"line":779},[167,80336,80337],{"class":512},"    console.log(newArr)\n",[167,80339,80340,80342,80344],{"class":169,"line":785},[167,80341,54412],{"class":512},[167,80343,53809],{"class":516},[167,80345,537],{"class":512},[167,80347,80348,80350,80352],{"class":169,"line":790},[167,80349,575],{"class":512},[167,80351,517],{"class":516},[167,80353,537],{"class":512},[19,80355,80356],{},"这个也可以写成箭头函数：",[26,80358,80360],{"className":52633,"code":80359,"language":52635,"meta":32,"style":32},"const newArr = arr.filter(item => item >= 20)\n",[34,80361,80362],{"__ignoreMap":32},[167,80363,80364],{"class":169,"line":170},[167,80365,80359],{"class":512},[14,80367,80369],{"id":80368},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80371,80372],{},[3528,80373],{"alt":32,"src":80374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80376,80377],{},"步骤：",[19,80379,80380],{},"①：渲染页面模块",[3205,80382,80383,80386],{},[43,80384,80385],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[43,80387,80388],{},"用forEach+字符串的形式",[19,80390,80391],{},"②：点击不同需求，显示不同页面内容",[3205,80393,80394,80397,80400,80403,80406],{},[43,80395,80396],{},"点击采取事件委托方式 .filter",[43,80398,80399],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[43,80401,80402],{},"筛选条件是根据点击的 data-index 来判断",[43,80404,80405],{},"可以使用对象解构，把事件对象解构",[43,80407,80408],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,80410,80412],{"className":52633,"code":80411,"language":52635,"meta":32,"style":32},"\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",[34,80413,80414,80424,80438,80442,80450,80464,80484,80496,80504,80510,80520,80530,80540,80544,80548,80554,80567,80579,80589,80601,80605,80609,80616,80629,80641,80658,80676,80689,80693,80697,80709,80719,80723,80727,80734,80774,80801,80811,80815,80819,80827,80839,80843,80847,80855,80867,80879,80890,80894,80898,80907,80919,80930,80934,80938,80947,80959,80971,80975,80979,80986,80996,81008,81020,81035,81039,81043,81051,81067,81077,81087,81097,81109,81113,81117,81127,81138,81148,81152,81160,81168,81172,81180,81195,81221,81246,81271,81290,81298,81312,81317,81322,81327,81332,81337,81345,81353,81358,81369,81374,81384,81394,81404,81414,81418,81422,81431,81440,81449,81458,81462,81466,81475,81484,81493,81502,81506,81510,81519,81528,81537,81546,81550,81554,81563,81572,81581,81590,81594,81598,81607,81616,81625,81634,81638,81642,81651,81660,81669,81678,81682,81686,81695,81704,81712,81721,81725,81729,81733,81738,81750,81755,81767,81771,81788,81816,81825,81830,81840,81850,81859,81864,81869,81873,81878,81895,81899,81904,81912,81917,81944,81949,81969,81974,81986,81991,81996,82001,82012,82026,82063,82081,82114,82131,82155,82159,82164,82170,82174,82178,82182,82190,82198,82202],{"__ignoreMap":32},[167,80415,80416,80418,80420,80422],{"class":169,"line":170},[167,80417,53297],{"class":512},[167,80419,53300],{"class":516},[167,80421,53303],{"class":173},[167,80423,537],{"class":512},[167,80425,80426,80428,80430,80432,80434,80436],{"class":169,"line":191},[167,80427,513],{"class":512},[167,80429,52635],{"class":516},[167,80431,53314],{"class":173},[167,80433,523],{"class":512},[167,80435,53319],{"class":177},[167,80437,537],{"class":512},[167,80439,80440],{"class":169,"line":205},[167,80441,741],{"emptyLinePlaceholder":740},[167,80443,80444,80446,80448],{"class":169,"line":219},[167,80445,513],{"class":512},[167,80447,53332],{"class":516},[167,80449,537],{"class":512},[167,80451,80452,80454,80456,80458,80460,80462],{"class":169,"line":230},[167,80453,542],{"class":512},[167,80455,53342],{"class":516},[167,80457,53345],{"class":173},[167,80459,523],{"class":512},[167,80461,53350],{"class":177},[167,80463,537],{"class":512},[167,80465,80466,80468,80470,80472,80474,80476,80478,80480,80482],{"class":169,"line":241},[167,80467,542],{"class":512},[167,80469,53342],{"class":516},[167,80471,520],{"class":173},[167,80473,523],{"class":512},[167,80475,53389],{"class":177},[167,80477,53369],{"class":173},[167,80479,523],{"class":512},[167,80481,53396],{"class":177},[167,80483,537],{"class":512},[167,80485,80486,80488,80490,80492,80494],{"class":169,"line":261},[167,80487,542],{"class":512},[167,80489,53405],{"class":516},[167,80491,53408],{"class":512},[167,80493,53405],{"class":516},[167,80495,537],{"class":512},[167,80497,80498,80500,80502],{"class":169,"line":773},[167,80499,542],{"class":512},[167,80501,2113],{"class":516},[167,80503,537],{"class":512},[167,80505,80506,80508],{"class":169,"line":779},[167,80507,8433],{"class":516},[167,80509,17598],{"class":512},[167,80511,80512,80514,80516,80518],{"class":169,"line":785},[167,80513,56685],{"class":184},[167,80515,53435],{"class":512},[167,80517,1154],{"class":184},[167,80519,3359],{"class":512},[167,80521,80522,80524,80526,80528],{"class":169,"line":790},[167,80523,56696],{"class":184},[167,80525,53435],{"class":512},[167,80527,1154],{"class":184},[167,80529,3359],{"class":512},[167,80531,80532,80534,80536,80538],{"class":169,"line":796},[167,80533,74584],{"class":184},[167,80535,53435],{"class":512},[167,80537,62494],{"class":184},[167,80539,3359],{"class":512},[167,80541,80542],{"class":169,"line":802},[167,80543,4231],{"class":512},[167,80545,80546],{"class":169,"line":808},[167,80547,741],{"emptyLinePlaceholder":740},[167,80549,80550,80552],{"class":169,"line":814},[167,80551,64112],{"class":173},[167,80553,17598],{"class":512},[167,80555,80556,80558,80560,80563,80565],{"class":169,"line":820},[167,80557,56761],{"class":184},[167,80559,53435],{"class":512},[167,80561,80562],{"class":184},"990",[167,80564,53490],{"class":731},[167,80566,3359],{"class":512},[167,80568,80569,80571,80573,80575,80577],{"class":169,"line":826},[167,80570,56696],{"class":184},[167,80572,53435],{"class":512},[167,80574,1154],{"class":184},[167,80576,53554],{"class":184},[167,80578,3359],{"class":512},[167,80580,80581,80583,80585,80587],{"class":169,"line":832},[167,80582,56999],{"class":184},[167,80584,53435],{"class":512},[167,80586,53475],{"class":184},[167,80588,3359],{"class":512},[167,80590,80591,80594,80596,80599],{"class":169,"line":837},[167,80592,80593],{"class":184},"      flex-wrap",[167,80595,53435],{"class":512},[167,80597,80598],{"class":184},"wrap",[167,80600,3359],{"class":512},[167,80602,80603],{"class":169,"line":842},[167,80604,4231],{"class":512},[167,80606,80607],{"class":169,"line":860},[167,80608,741],{"emptyLinePlaceholder":740},[167,80610,80611,80614],{"class":169,"line":876},[167,80612,80613],{"class":173},"    .item",[167,80615,17598],{"class":512},[167,80617,80618,80620,80622,80625,80627],{"class":169,"line":887},[167,80619,56761],{"class":184},[167,80621,53435],{"class":512},[167,80623,80624],{"class":184},"240",[167,80626,53490],{"class":731},[167,80628,3359],{"class":512},[167,80630,80631,80633,80635,80637,80639],{"class":169,"line":892},[167,80632,63989],{"class":184},[167,80634,53435],{"class":512},[167,80636,2646],{"class":184},[167,80638,53490],{"class":731},[167,80640,3359],{"class":512},[167,80642,80643,80645,80647,80649,80651,80654,80656],{"class":169,"line":907},[167,80644,56685],{"class":184},[167,80646,53435],{"class":512},[167,80648,2900],{"class":184},[167,80650,53490],{"class":731},[167,80652,80653],{"class":184}," 30",[167,80655,53490],{"class":731},[167,80657,3359],{"class":512},[167,80659,80660,80662,80664,80666,80669,80672,80674],{"class":169,"line":920},[167,80661,63849],{"class":184},[167,80663,53435],{"class":512},[167,80665,30138],{"class":184},[167,80667,80668],{"class":184}," ease",[167,80670,80671],{"class":184}," .5",[167,80673,2895],{"class":731},[167,80675,3359],{"class":512},[167,80677,80678,80681,80683,80685,80687],{"class":169,"line":933},[167,80679,80680],{"class":184},"      margin-bottom",[167,80682,53435],{"class":512},[167,80684,2900],{"class":184},[167,80686,53490],{"class":731},[167,80688,3359],{"class":512},[167,80690,80691],{"class":169,"line":946},[167,80692,4231],{"class":512},[167,80694,80695],{"class":169,"line":959},[167,80696,741],{"emptyLinePlaceholder":740},[167,80698,80699,80702,80704,80707],{"class":169,"line":964},[167,80700,80701],{"class":173},"    .item:nth-child",[167,80703,898],{"class":512},[167,80705,80706],{"class":184},"4n",[167,80708,14470],{"class":512},[167,80710,80711,80713,80715,80717],{"class":169,"line":987},[167,80712,63989],{"class":184},[167,80714,53435],{"class":512},[167,80716,1154],{"class":184},[167,80718,3359],{"class":512},[167,80720,80721],{"class":169,"line":993},[167,80722,4231],{"class":512},[167,80724,80725],{"class":169,"line":998},[167,80726,741],{"emptyLinePlaceholder":740},[167,80728,80729,80732],{"class":169,"line":1010},[167,80730,80731],{"class":173},"    .item:hover",[167,80733,17598],{"class":512},[167,80735,80736,80739,80741,80743,80745,80747,80749,80751,80753,80755,80757,80759,80761,80763,80765,80767,80769,80772],{"class":169,"line":1022},[167,80737,80738],{"class":184},"      box-shadow",[167,80740,53435],{"class":512},[167,80742,1154],{"class":184},[167,80744,53490],{"class":731},[167,80746,6125],{"class":184},[167,80748,53490],{"class":731},[167,80750,4192],{"class":184},[167,80752,53490],{"class":731},[167,80754,1369],{"class":184},[167,80756,898],{"class":512},[167,80758,1154],{"class":184},[167,80760,14463],{"class":512},[167,80762,1154],{"class":184},[167,80764,14463],{"class":512},[167,80766,1154],{"class":184},[167,80768,14463],{"class":512},[167,80770,80771],{"class":184},".2",[167,80773,4755],{"class":512},[167,80775,80776,80779,80781,80784,80786,80788,80790,80793,80795,80797,80799],{"class":169,"line":1027},[167,80777,80778],{"class":184},"      transform",[167,80780,53435],{"class":512},[167,80782,80783],{"class":184},"translate3d",[167,80785,898],{"class":512},[167,80787,1154],{"class":184},[167,80789,14463],{"class":512},[167,80791,80792],{"class":184},"-4",[167,80794,53490],{"class":731},[167,80796,14463],{"class":512},[167,80798,1154],{"class":184},[167,80800,4755],{"class":512},[167,80802,80803,80805,80807,80809],{"class":169,"line":1032},[167,80804,64014],{"class":184},[167,80806,53435],{"class":512},[167,80808,64019],{"class":184},[167,80810,3359],{"class":512},[167,80812,80813],{"class":169,"line":1049},[167,80814,4231],{"class":512},[167,80816,80817],{"class":169,"line":10005},[167,80818,741],{"emptyLinePlaceholder":740},[167,80820,80821,80823,80825],{"class":169,"line":10011},[167,80822,80613],{"class":173},[167,80824,57604],{"class":516},[167,80826,17598],{"class":512},[167,80828,80829,80831,80833,80835,80837],{"class":169,"line":10038},[167,80830,56761],{"class":184},[167,80832,53435],{"class":512},[167,80834,981],{"class":184},[167,80836,2528],{"class":731},[167,80838,3359],{"class":512},[167,80840,80841],{"class":169,"line":10043},[167,80842,4231],{"class":512},[167,80844,80845],{"class":169,"line":10049},[167,80846,741],{"emptyLinePlaceholder":740},[167,80848,80849,80851,80853],{"class":169,"line":10061},[167,80850,80613],{"class":173},[167,80852,64293],{"class":173},[167,80854,17598],{"class":512},[167,80856,80857,80859,80861,80863,80865],{"class":169,"line":10073},[167,80858,56912],{"class":184},[167,80860,53435],{"class":512},[167,80862,2850],{"class":184},[167,80864,53490],{"class":731},[167,80866,3359],{"class":512},[167,80868,80869,80871,80873,80875,80877],{"class":169,"line":10085},[167,80870,80680],{"class":184},[167,80872,53435],{"class":512},[167,80874,2646],{"class":184},[167,80876,53490],{"class":731},[167,80878,3359],{"class":512},[167,80880,80881,80883,80885,80888],{"class":169,"line":11744},[167,80882,59405],{"class":184},[167,80884,53435],{"class":512},[167,80886,80887],{"class":184},"#666",[167,80889,3359],{"class":512},[167,80891,80892],{"class":169,"line":11769},[167,80893,4231],{"class":512},[167,80895,80896],{"class":169,"line":11792},[167,80897,741],{"emptyLinePlaceholder":740},[167,80899,80900,80902,80905],{"class":169,"line":11816},[167,80901,80613],{"class":173},[167,80903,80904],{"class":173}," .price",[167,80906,17598],{"class":512},[167,80908,80909,80911,80913,80915,80917],{"class":169,"line":11821},[167,80910,56912],{"class":184},[167,80912,53435],{"class":512},[167,80914,2950],{"class":184},[167,80916,53490],{"class":731},[167,80918,3359],{"class":512},[167,80920,80921,80923,80925,80928],{"class":169,"line":11826},[167,80922,59405],{"class":184},[167,80924,53435],{"class":512},[167,80926,80927],{"class":184},"firebrick",[167,80929,3359],{"class":512},[167,80931,80932],{"class":169,"line":11831},[167,80933,4231],{"class":512},[167,80935,80936],{"class":169,"line":11840},[167,80937,741],{"emptyLinePlaceholder":740},[167,80939,80940,80942,80945],{"class":169,"line":11845},[167,80941,80613],{"class":173},[167,80943,80944],{"class":173}," .price::before",[167,80946,17598],{"class":512},[167,80948,80949,80952,80954,80957],{"class":169,"line":11851},[167,80950,80951],{"class":184},"      content",[167,80953,53435],{"class":512},[167,80955,80956],{"class":177},"'￥'",[167,80958,3359],{"class":512},[167,80960,80961,80963,80965,80967,80969],{"class":169,"line":11872},[167,80962,56912],{"class":184},[167,80964,53435],{"class":512},[167,80966,2749],{"class":184},[167,80968,53490],{"class":731},[167,80970,3359],{"class":512},[167,80972,80973],{"class":169,"line":11878},[167,80974,4231],{"class":512},[167,80976,80977],{"class":169,"line":11892},[167,80978,741],{"emptyLinePlaceholder":740},[167,80980,80981,80984],{"class":169,"line":11898},[167,80982,80983],{"class":173},"    .filter",[167,80985,17598],{"class":512},[167,80987,80988,80990,80992,80994],{"class":169,"line":11925},[167,80989,56999],{"class":184},[167,80991,53435],{"class":512},[167,80993,53475],{"class":184},[167,80995,3359],{"class":512},[167,80997,80998,81000,81002,81004,81006],{"class":169,"line":11934},[167,80999,56761],{"class":184},[167,81001,53435],{"class":512},[167,81003,80562],{"class":184},[167,81005,53490],{"class":731},[167,81007,3359],{"class":512},[167,81009,81010,81012,81014,81016,81018],{"class":169,"line":11940},[167,81011,56696],{"class":184},[167,81013,53435],{"class":512},[167,81015,1154],{"class":184},[167,81017,53554],{"class":184},[167,81019,3359],{"class":512},[167,81021,81022,81024,81026,81028,81030,81032],{"class":169,"line":11948},[167,81023,56685],{"class":184},[167,81025,53435],{"class":512},[167,81027,2856],{"class":184},[167,81029,53490],{"class":731},[167,81031,80653],{"class":184},[167,81033,81034],{"class":731},"px\n",[167,81036,81037],{"class":169,"line":11953},[167,81038,4231],{"class":512},[167,81040,81041],{"class":169,"line":18630},[167,81042,741],{"emptyLinePlaceholder":740},[167,81044,81045,81047,81049],{"class":169,"line":18636},[167,81046,80983],{"class":173},[167,81048,3464],{"class":516},[167,81050,17598],{"class":512},[167,81052,81053,81055,81057,81059,81061,81063,81065],{"class":169,"line":18659},[167,81054,56685],{"class":184},[167,81056,53435],{"class":512},[167,81058,2646],{"class":184},[167,81060,53490],{"class":731},[167,81062,10978],{"class":184},[167,81064,53490],{"class":731},[167,81066,3359],{"class":512},[167,81068,81069,81071,81073,81075],{"class":169,"line":18665},[167,81070,63710],{"class":184},[167,81072,53435],{"class":512},[167,81074,63807],{"class":184},[167,81076,3359],{"class":512},[167,81078,81079,81081,81083,81085],{"class":169,"line":18688},[167,81080,59405],{"class":184},[167,81082,53435],{"class":512},[167,81084,80887],{"class":184},[167,81086,3359],{"class":512},[167,81088,81089,81091,81093,81095],{"class":169,"line":18702},[167,81090,65959],{"class":184},[167,81092,53435],{"class":512},[167,81094,56727],{"class":184},[167,81096,3359],{"class":512},[167,81098,81099,81101,81103,81105,81107],{"class":169,"line":18722},[167,81100,63739],{"class":184},[167,81102,53435],{"class":512},[167,81104,2900],{"class":184},[167,81106,53490],{"class":731},[167,81108,3359],{"class":512},[167,81110,81111],{"class":169,"line":18728},[167,81112,4231],{"class":512},[167,81114,81115],{"class":169,"line":18739},[167,81116,741],{"emptyLinePlaceholder":740},[167,81118,81119,81121,81123,81125],{"class":169,"line":18762},[167,81120,80983],{"class":173},[167,81122,3464],{"class":516},[167,81124,63889],{"class":173},[167,81126,17598],{"class":512},[167,81128,81129,81131,81133,81136],{"class":169,"line":18784},[167,81130,56874],{"class":184},[167,81132,53435],{"class":512},[167,81134,81135],{"class":184},"#05943c",[167,81137,3359],{"class":512},[167,81139,81140,81142,81144,81146],{"class":169,"line":18789},[167,81141,59405],{"class":184},[167,81143,53435],{"class":512},[167,81145,62831],{"class":184},[167,81147,3359],{"class":512},[167,81149,81150],{"class":169,"line":18795},[167,81151,4231],{"class":512},[167,81153,81154,81156,81158],{"class":169,"line":18809},[167,81155,54412],{"class":512},[167,81157,2113],{"class":516},[167,81159,537],{"class":512},[167,81161,81162,81164,81166],{"class":169,"line":18822},[167,81163,575],{"class":512},[167,81165,53332],{"class":516},[167,81167,537],{"class":512},[167,81169,81170],{"class":169,"line":18827},[167,81171,741],{"emptyLinePlaceholder":740},[167,81173,81174,81176,81178],{"class":169,"line":18841},[167,81175,513],{"class":512},[167,81177,517],{"class":516},[167,81179,537],{"class":512},[167,81181,81182,81184,81186,81188,81190,81193],{"class":169,"line":18846},[167,81183,542],{"class":512},[167,81185,53609],{"class":516},[167,81187,55479],{"class":173},[167,81189,523],{"class":512},[167,81191,81192],{"class":177},"\"filter\"",[167,81194,537],{"class":512},[167,81196,81197,81199,81201,81203,81205,81207,81210,81212,81214,81217,81219],{"class":169,"line":18852},[167,81198,53339],{"class":512},[167,81200,2439],{"class":516},[167,81202,63046],{"class":173},[167,81204,523],{"class":512},[167,81206,63051],{"class":177},[167,81208,81209],{"class":173}," data-index",[167,81211,523],{"class":512},[167,81213,1494],{"class":177},[167,81215,81216],{"class":512},">0-100元\u003C\u002F",[167,81218,2439],{"class":516},[167,81220,537],{"class":512},[167,81222,81223,81225,81227,81229,81231,81233,81235,81237,81239,81242,81244],{"class":169,"line":18857},[167,81224,53339],{"class":512},[167,81226,2439],{"class":516},[167,81228,63046],{"class":173},[167,81230,523],{"class":512},[167,81232,63051],{"class":177},[167,81234,81209],{"class":173},[167,81236,523],{"class":512},[167,81238,5734],{"class":177},[167,81240,81241],{"class":512},">100-300元\u003C\u002F",[167,81243,2439],{"class":516},[167,81245,537],{"class":512},[167,81247,81248,81250,81252,81254,81256,81258,81260,81262,81264,81267,81269],{"class":169,"line":18871},[167,81249,53339],{"class":512},[167,81251,2439],{"class":516},[167,81253,63046],{"class":173},[167,81255,523],{"class":512},[167,81257,63051],{"class":177},[167,81259,81209],{"class":173},[167,81261,523],{"class":512},[167,81263,5747],{"class":177},[167,81265,81266],{"class":512},">300元以上\u003C\u002F",[167,81268,2439],{"class":516},[167,81270,537],{"class":512},[167,81272,81273,81275,81277,81279,81281,81283,81286,81288],{"class":169,"line":18876},[167,81274,53339],{"class":512},[167,81276,2439],{"class":516},[167,81278,63046],{"class":173},[167,81280,523],{"class":512},[167,81282,63051],{"class":177},[167,81284,81285],{"class":512},">全部区间\u003C\u002F",[167,81287,2439],{"class":516},[167,81289,537],{"class":512},[167,81291,81292,81294,81296],{"class":169,"line":18881},[167,81293,54412],{"class":512},[167,81295,53609],{"class":516},[167,81297,537],{"class":512},[167,81299,81300,81302,81304,81306,81308,81310],{"class":169,"line":18895},[167,81301,542],{"class":512},[167,81303,53609],{"class":516},[167,81305,55479],{"class":173},[167,81307,523],{"class":512},[167,81309,64597],{"class":177},[167,81311,537],{"class":512},[167,81313,81314],{"class":169,"line":18907},[167,81315,81316],{"class":2268},"    \u003C!-- \u003Cdiv class=\"item\">\n",[167,81318,81319],{"class":169,"line":18912},[167,81320,81321],{"class":2268},"      \u003Cimg src=\"\" alt=\"\">\n",[167,81323,81324],{"class":169,"line":18925},[167,81325,81326],{"class":2268},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[167,81328,81329],{"class":169,"line":18930},[167,81330,81331],{"class":2268},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[167,81333,81334],{"class":169,"line":18935},[167,81335,81336],{"class":2268},"    \u003C\u002Fdiv> -->\n",[167,81338,81339,81341,81343],{"class":169,"line":18940},[167,81340,54412],{"class":512},[167,81342,53609],{"class":516},[167,81344,537],{"class":512},[167,81346,81347,81349,81351],{"class":169,"line":18953},[167,81348,542],{"class":512},[167,81350,53809],{"class":516},[167,81352,537],{"class":512},[167,81354,81355],{"class":169,"line":18958},[167,81356,81357],{"class":2268},"    \u002F\u002F 2. 初始化数据\n",[167,81359,81360,81362,81365,81367],{"class":169,"line":34636},[167,81361,13249],{"class":731},[167,81363,81364],{"class":184}," goodsList",[167,81366,753],{"class":731},[167,81368,57436],{"class":512},[167,81370,81371],{"class":169,"line":34642},[167,81372,81373],{"class":512},"      {\n",[167,81375,81376,81379,81382],{"class":169,"line":34648},[167,81377,81378],{"class":512},"        id: ",[167,81380,81381],{"class":177},"'4001172'",[167,81383,33471],{"class":512},[167,81385,81386,81389,81392],{"class":169,"line":34654},[167,81387,81388],{"class":512},"        name: ",[167,81390,81391],{"class":177},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[167,81393,33471],{"class":512},[167,81395,81396,81399,81402],{"class":169,"line":34660},[167,81397,81398],{"class":512},"        price: ",[167,81400,81401],{"class":177},"'289.00'",[167,81403,33471],{"class":512},[167,81405,81406,81409,81412],{"class":169,"line":34671},[167,81407,81408],{"class":512},"        picture: ",[167,81410,81411],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[167,81413,33471],{"class":512},[167,81415,81416],{"class":169,"line":34677},[167,81417,79880],{"class":512},[167,81419,81420],{"class":169,"line":34697},[167,81421,81373],{"class":512},[167,81423,81424,81426,81429],{"class":169,"line":34703},[167,81425,81378],{"class":512},[167,81427,81428],{"class":177},"'4001594'",[167,81430,33471],{"class":512},[167,81432,81433,81435,81438],{"class":169,"line":34714},[167,81434,81388],{"class":512},[167,81436,81437],{"class":177},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[167,81439,33471],{"class":512},[167,81441,81442,81444,81447],{"class":169,"line":34720},[167,81443,81398],{"class":512},[167,81445,81446],{"class":177},"'288.00'",[167,81448,33471],{"class":512},[167,81450,81451,81453,81456],{"class":169,"line":34726},[167,81452,81408],{"class":512},[167,81454,81455],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[167,81457,33471],{"class":512},[167,81459,81460],{"class":169,"line":34732},[167,81461,79880],{"class":512},[167,81463,81464],{"class":169,"line":34738},[167,81465,81373],{"class":512},[167,81467,81468,81470,81473],{"class":169,"line":34744},[167,81469,81378],{"class":512},[167,81471,81472],{"class":177},"'4001009'",[167,81474,33471],{"class":512},[167,81476,81477,81479,81482],{"class":169,"line":34750},[167,81478,81388],{"class":512},[167,81480,81481],{"class":177},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[167,81483,33471],{"class":512},[167,81485,81486,81488,81491],{"class":169,"line":34756},[167,81487,81398],{"class":512},[167,81489,81490],{"class":177},"'109.00'",[167,81492,33471],{"class":512},[167,81494,81495,81497,81500],{"class":169,"line":34776},[167,81496,81408],{"class":512},[167,81498,81499],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[167,81501,33471],{"class":512},[167,81503,81504],{"class":169,"line":34782},[167,81505,79880],{"class":512},[167,81507,81508],{"class":169,"line":34798},[167,81509,81373],{"class":512},[167,81511,81512,81514,81517],{"class":169,"line":34804},[167,81513,81378],{"class":512},[167,81515,81516],{"class":177},"'4001874'",[167,81518,33471],{"class":512},[167,81520,81521,81523,81526],{"class":169,"line":34818},[167,81522,81388],{"class":512},[167,81524,81525],{"class":177},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[167,81527,33471],{"class":512},[167,81529,81530,81532,81535],{"class":169,"line":34824},[167,81531,81398],{"class":512},[167,81533,81534],{"class":177},"'488.00'",[167,81536,33471],{"class":512},[167,81538,81539,81541,81544],{"class":169,"line":34839},[167,81540,81408],{"class":512},[167,81542,81543],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[167,81545,33471],{"class":512},[167,81547,81548],{"class":169,"line":34845},[167,81549,79880],{"class":512},[167,81551,81552],{"class":169,"line":34854},[167,81553,81373],{"class":512},[167,81555,81556,81558,81561],{"class":169,"line":34860},[167,81557,81378],{"class":512},[167,81559,81560],{"class":177},"'4001649'",[167,81562,33471],{"class":512},[167,81564,81565,81567,81570],{"class":169,"line":34869},[167,81566,81388],{"class":512},[167,81568,81569],{"class":177},"'大师监制龙泉青瓷茶叶罐'",[167,81571,33471],{"class":512},[167,81573,81574,81576,81579],{"class":169,"line":34875},[167,81575,81398],{"class":512},[167,81577,81578],{"class":177},"'139.00'",[167,81580,33471],{"class":512},[167,81582,81583,81585,81588],{"class":169,"line":34881},[167,81584,81408],{"class":512},[167,81586,81587],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[167,81589,33471],{"class":512},[167,81591,81592],{"class":169,"line":34890},[167,81593,79880],{"class":512},[167,81595,81596],{"class":169,"line":34896},[167,81597,81373],{"class":512},[167,81599,81600,81602,81605],{"class":169,"line":34907},[167,81601,81378],{"class":512},[167,81603,81604],{"class":177},"'3997185'",[167,81606,33471],{"class":512},[167,81608,81609,81611,81614],{"class":169,"line":34913},[167,81610,81388],{"class":512},[167,81612,81613],{"class":177},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[167,81615,33471],{"class":512},[167,81617,81618,81620,81623],{"class":169,"line":34932},[167,81619,81398],{"class":512},[167,81621,81622],{"class":177},"'108.00'",[167,81624,33471],{"class":512},[167,81626,81627,81629,81632],{"class":169,"line":34938},[167,81628,81408],{"class":512},[167,81630,81631],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[167,81633,33471],{"class":512},[167,81635,81636],{"class":169,"line":34949},[167,81637,79880],{"class":512},[167,81639,81640],{"class":169,"line":34955},[167,81641,81373],{"class":512},[167,81643,81644,81646,81649],{"class":169,"line":34975},[167,81645,81378],{"class":512},[167,81647,81648],{"class":177},"'3997403'",[167,81650,33471],{"class":512},[167,81652,81653,81655,81658],{"class":169,"line":34991},[167,81654,81388],{"class":512},[167,81656,81657],{"class":177},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[167,81659,33471],{"class":512},[167,81661,81662,81664,81667],{"class":169,"line":34997},[167,81663,81398],{"class":512},[167,81665,81666],{"class":177},"'100.00'",[167,81668,33471],{"class":512},[167,81670,81671,81673,81676],{"class":169,"line":35011},[167,81672,81408],{"class":512},[167,81674,81675],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[167,81677,33471],{"class":512},[167,81679,81680],{"class":169,"line":35017},[167,81681,79880],{"class":512},[167,81683,81684],{"class":169,"line":35023},[167,81685,81373],{"class":512},[167,81687,81688,81690,81693],{"class":169,"line":35034},[167,81689,81378],{"class":512},[167,81691,81692],{"class":177},"'3998274'",[167,81694,33471],{"class":512},[167,81696,81697,81699,81702],{"class":169,"line":35040},[167,81698,81388],{"class":512},[167,81700,81701],{"class":177},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[167,81703,33471],{"class":512},[167,81705,81706,81708,81710],{"class":169,"line":35046},[167,81707,81398],{"class":512},[167,81709,81578],{"class":177},[167,81711,33471],{"class":512},[167,81713,81714,81716,81719],{"class":169,"line":35056},[167,81715,81408],{"class":512},[167,81717,81718],{"class":177},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[167,81720,33471],{"class":512},[167,81722,81723],{"class":169,"line":35062},[167,81724,79880],{"class":512},[167,81726,81727],{"class":169,"line":35073},[167,81728,55102],{"class":512},[167,81730,81731],{"class":169,"line":35079},[167,81732,741],{"emptyLinePlaceholder":740},[167,81734,81735],{"class":169,"line":35089},[167,81736,81737],{"class":2268},"    \u002F\u002F 1.渲染函数\n",[167,81739,81740,81742,81744,81746,81748],{"class":169,"line":35094},[167,81741,72072],{"class":731},[167,81743,72075],{"class":173},[167,81745,898],{"class":512},[167,81747,5912],{"class":7246},[167,81749,14470],{"class":512},[167,81751,81752],{"class":169,"line":35100},[167,81753,81754],{"class":2268},"      \u002F\u002F 声明空字符串\n",[167,81756,81757,81760,81763,81765],{"class":169,"line":35149},[167,81758,81759],{"class":731},"      let",[167,81761,81762],{"class":512}," str ",[167,81764,523],{"class":731},[167,81766,72092],{"class":177},[167,81768,81769],{"class":169,"line":35196},[167,81770,72097],{"class":2268},[167,81772,81773,81775,81778,81780,81783,81786],{"class":169,"line":35201},[167,81774,59996],{"class":512},[167,81776,81777],{"class":173},"forEach",[167,81779,898],{"class":512},[167,81781,81782],{"class":7246},"item",[167,81784,81785],{"class":731}," =>",[167,81787,17598],{"class":512},[167,81789,81790,81792,81795,81798,81800,81803,81805,81808,81811,81813],{"class":169,"line":35207},[167,81791,63259],{"class":731},[167,81793,81794],{"class":512}," { ",[167,81796,81797],{"class":184},"name",[167,81799,14463],{"class":512},[167,81801,81802],{"class":184},"price",[167,81804,14463],{"class":512},[167,81806,81807],{"class":184},"picture",[167,81809,81810],{"class":512}," } ",[167,81812,523],{"class":731},[167,81814,81815],{"class":512}," item\n",[167,81817,81818,81821,81823],{"class":169,"line":35226},[167,81819,81820],{"class":512},"        str ",[167,81822,11505],{"class":731},[167,81824,72156],{"class":177},[167,81826,81827],{"class":169,"line":35232},[167,81828,81829],{"class":177},"          \u003Cdiv class=\"item\">\n",[167,81831,81832,81835,81837],{"class":169,"line":35252},[167,81833,81834],{"class":177},"            \u003Cimg src=\"${",[167,81836,81807],{"class":512},[167,81838,81839],{"class":177},"}\" alt=\"\">\n",[167,81841,81842,81845,81847],{"class":169,"line":35258},[167,81843,81844],{"class":177},"            \u003Cp class=\"name\">${",[167,81846,81797],{"class":512},[167,81848,81849],{"class":177},"}\u003C\u002Fp>\n",[167,81851,81852,81855,81857],{"class":169,"line":35264},[167,81853,81854],{"class":177},"            \u003Cp class=\"price\">${",[167,81856,81802],{"class":512},[167,81858,81849],{"class":177},[167,81860,81861],{"class":169,"line":35274},[167,81862,81863],{"class":177},"          \u003C\u002Fdiv>\n",[167,81865,81866],{"class":169,"line":35279},[167,81867,81868],{"class":177},"        `\n",[167,81870,81871],{"class":169,"line":35285},[167,81872,66804],{"class":512},[167,81874,81875],{"class":169,"line":35301},[167,81876,81877],{"class":2268},"      \u002F\u002F 追加给List\n",[167,81879,81880,81882,81884,81886,81889,81891,81893],{"class":169,"line":35346},[167,81881,57760],{"class":512},[167,81883,56389],{"class":173},[167,81885,898],{"class":512},[167,81887,81888],{"class":177},"'.list'",[167,81890,76237],{"class":512},[167,81892,523],{"class":731},[167,81894,75973],{"class":512},[167,81896,81897],{"class":169,"line":35352},[167,81898,4231],{"class":512},[167,81900,81901],{"class":169,"line":35358},[167,81902,81903],{"class":2268},"    \u002F\u002F 页面一打开就需要渲染\n",[167,81905,81906,81909],{"class":169,"line":35364},[167,81907,81908],{"class":173},"    render",[167,81910,81911],{"class":512},"(goodsList)\n",[167,81913,81914],{"class":169,"line":35375},[167,81915,81916],{"class":2268},"    \u002F\u002F 2.过滤筛选\n",[167,81918,81919,81921,81923,81925,81928,81930,81932,81934,81936,81938,81940,81942],{"class":169,"line":35381},[167,81920,54402],{"class":512},[167,81922,56389],{"class":173},[167,81924,898],{"class":512},[167,81926,81927],{"class":177},"'.filter'",[167,81929,32833],{"class":512},[167,81931,59802],{"class":173},[167,81933,898],{"class":512},[167,81935,59807],{"class":177},[167,81937,14463],{"class":512},[167,81939,2284],{"class":7246},[167,81941,81785],{"class":731},[167,81943,17598],{"class":512},[167,81945,81946],{"class":169,"line":35387},[167,81947,81948],{"class":2268},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[167,81950,81951,81953,81955,81958,81960,81962,81964,81966],{"class":169,"line":35393},[167,81952,60217],{"class":731},[167,81954,81794],{"class":512},[167,81956,81957],{"class":184},"tagName",[167,81959,14463],{"class":512},[167,81961,33542],{"class":184},[167,81963,81810],{"class":512},[167,81965,523],{"class":731},[167,81967,81968],{"class":512}," e.target\n",[167,81970,81971],{"class":169,"line":35410},[167,81972,81973],{"class":2268},"      \u002F\u002F 判断\n",[167,81975,81976,81978,81980,81982,81984],{"class":169,"line":35424},[167,81977,56470],{"class":731},[167,81979,69023],{"class":512},[167,81981,56476],{"class":731},[167,81983,70245],{"class":177},[167,81985,14470],{"class":512},[167,81987,81988],{"class":169,"line":35433},[167,81989,81990],{"class":2268},"        \u002F\u002F console.log(11)\n",[167,81992,81993],{"class":169,"line":35442},[167,81994,81995],{"class":2268},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[167,81997,81998],{"class":169,"line":35451},[167,81999,82000],{"class":2268},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[167,82002,82003,82005,82007,82009],{"class":169,"line":35460},[167,82004,53826],{"class":731},[167,82006,53829],{"class":512},[167,82008,523],{"class":731},[167,82010,82011],{"class":512}," goodsList\n",[167,82013,82014,82016,82019,82021,82024],{"class":169,"line":35466},[167,82015,4540],{"class":731},[167,82017,82018],{"class":512}," (dataset.index ",[167,82020,56476],{"class":731},[167,82022,82023],{"class":177}," '1'",[167,82025,14470],{"class":512},[167,82027,82028,82031,82033,82036,82039,82041,82043,82045,82048,82050,82052,82055,82057,82059,82061],{"class":169,"line":35472},[167,82029,82030],{"class":512},"          arr ",[167,82032,523],{"class":731},[167,82034,82035],{"class":512}," goodsList.",[167,82037,82038],{"class":173},"filter",[167,82040,898],{"class":512},[167,82042,81782],{"class":7246},[167,82044,81785],{"class":731},[167,82046,82047],{"class":512}," item.price ",[167,82049,3764],{"class":731},[167,82051,6125],{"class":184},[167,82053,82054],{"class":731}," &&",[167,82056,82047],{"class":512},[167,82058,3653],{"class":731},[167,82060,7784],{"class":184},[167,82062,873],{"class":512},[167,82064,82065,82068,82070,82072,82074,82076,82079],{"class":169,"line":35480},[167,82066,82067],{"class":512},"        } ",[167,82069,3755],{"class":731},[167,82071,3758],{"class":731},[167,82073,82018],{"class":512},[167,82075,56476],{"class":731},[167,82077,82078],{"class":177}," '2'",[167,82080,14470],{"class":512},[167,82082,82083,82085,82087,82089,82091,82093,82095,82097,82099,82101,82103,82105,82107,82109,82112],{"class":169,"line":35485},[167,82084,82030],{"class":512},[167,82086,523],{"class":731},[167,82088,82035],{"class":512},[167,82090,82038],{"class":173},[167,82092,898],{"class":512},[167,82094,81782],{"class":7246},[167,82096,81785],{"class":731},[167,82098,82047],{"class":512},[167,82100,3764],{"class":731},[167,82102,7784],{"class":184},[167,82104,82054],{"class":731},[167,82106,82047],{"class":512},[167,82108,3653],{"class":731},[167,82110,82111],{"class":184}," 300",[167,82113,873],{"class":512},[167,82115,82116,82118,82120,82122,82124,82126,82129],{"class":169,"line":35491},[167,82117,82067],{"class":512},[167,82119,3755],{"class":731},[167,82121,3758],{"class":731},[167,82123,82018],{"class":512},[167,82125,56476],{"class":731},[167,82127,82128],{"class":177}," '3'",[167,82130,14470],{"class":512},[167,82132,82133,82135,82137,82139,82141,82143,82145,82147,82149,82151,82153],{"class":169,"line":35502},[167,82134,82030],{"class":512},[167,82136,523],{"class":731},[167,82138,82035],{"class":512},[167,82140,82038],{"class":173},[167,82142,898],{"class":512},[167,82144,81782],{"class":7246},[167,82146,81785],{"class":731},[167,82148,82047],{"class":512},[167,82150,3764],{"class":731},[167,82152,82111],{"class":184},[167,82154,873],{"class":512},[167,82156,82157],{"class":169,"line":35508},[167,82158,4572],{"class":512},[167,82160,82161],{"class":169,"line":35528},[167,82162,82163],{"class":2268},"        \u002F\u002F 渲染函数\n",[167,82165,82166,82168],{"class":169,"line":35534},[167,82167,72396],{"class":173},[167,82169,54407],{"class":512},[167,82171,82172],{"class":169,"line":35540},[167,82173,54393],{"class":512},[167,82175,82176],{"class":169,"line":35546},[167,82177,741],{"emptyLinePlaceholder":740},[167,82179,82180],{"class":169,"line":35563},[167,82181,35463],{"class":512},[167,82183,82184,82186,82188],{"class":169,"line":35569},[167,82185,54412],{"class":512},[167,82187,53809],{"class":516},[167,82189,537],{"class":512},[167,82191,82192,82194,82196],{"class":169,"line":35575},[167,82193,575],{"class":512},[167,82195,517],{"class":516},[167,82197,537],{"class":512},[167,82199,82200],{"class":169,"line":35581},[167,82201,741],{"emptyLinePlaceholder":740},[167,82203,82204,82206,82208],{"class":169,"line":35587},[167,82205,575],{"class":512},[167,82207,52635],{"class":516},[167,82209,537],{"class":512},[14,82211,82213],{"id":82212},"_410-深入了解对象","4.10 深入了解对象",[494,82215,82217],{"id":82216},"_4101-创建对象","4.10.1 创建对象",[19,82219,82220],{},[3528,82221],{"alt":32,"src":82222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82224,82225],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[494,82227,82229],{"id":82228},"_4102-构造函数","4.10.2 构造函数",[19,82231,82232,82235],{},[2354,82233,82234],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82237,82238,82241],{},[2354,82239,82240],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,82243,82245],{"className":52633,"code":82244,"language":52635,"meta":32,"style":32},"\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",[34,82246,82247,82255,82260,82281,82294,82306,82318,82322,82327,82354,82359,82386],{"__ignoreMap":32},[167,82248,82249,82251,82253],{"class":169,"line":170},[167,82250,513],{"class":512},[167,82252,53809],{"class":516},[167,82254,537],{"class":512},[167,82256,82257],{"class":169,"line":191},[167,82258,82259],{"class":2268},"\u002F\u002F例：\n",[167,82261,82262,82264,82267,82269,82271,82273,82275,82277,82279],{"class":169,"line":205},[167,82263,56439],{"class":731},[167,82265,82266],{"class":173}," Pig",[167,82268,898],{"class":512},[167,82270,81797],{"class":7246},[167,82272,2578],{"class":512},[167,82274,72209],{"class":7246},[167,82276,2578],{"class":512},[167,82278,72226],{"class":7246},[167,82280,14470],{"class":512},[167,82282,82283,82286,82289,82291],{"class":169,"line":219},[167,82284,82285],{"class":184},"    this",[167,82287,82288],{"class":512},".name",[167,82290,523],{"class":731},[167,82292,82293],{"class":512},"name\n",[167,82295,82296,82298,82301,82303],{"class":169,"line":230},[167,82297,82285],{"class":184},[167,82299,82300],{"class":512},".age",[167,82302,523],{"class":731},[167,82304,82305],{"class":512},"age\n",[167,82307,82308,82310,82313,82315],{"class":169,"line":241},[167,82309,82285],{"class":184},[167,82311,82312],{"class":512},".gender",[167,82314,523],{"class":731},[167,82316,82317],{"class":512},"gender    \n",[167,82319,82320],{"class":169,"line":261},[167,82321,3630],{"class":512},[167,82323,82324],{"class":169,"line":773},[167,82325,82326],{"class":2268},"\u002F\u002F创建佩奇对象\n",[167,82328,82329,82331,82334,82336,82338,82340,82343,82345,82347,82349,82352],{"class":169,"line":779},[167,82330,8822],{"class":731},[167,82332,82333],{"class":184}," Peppa",[167,82335,13745],{"class":731},[167,82337,82266],{"class":173},[167,82339,898],{"class":512},[167,82341,82342],{"class":177},"'佩奇'",[167,82344,2578],{"class":512},[167,82346,2544],{"class":184},[167,82348,2578],{"class":512},[167,82350,82351],{"class":177},"'女'",[167,82353,873],{"class":512},[167,82355,82356],{"class":169,"line":785},[167,82357,82358],{"class":2268},"\u002F\u002F创建乔治对象\n",[167,82360,82361,82363,82366,82368,82370,82372,82375,82377,82379,82381,82384],{"class":169,"line":790},[167,82362,8822],{"class":731},[167,82364,82365],{"class":184}," George",[167,82367,13745],{"class":731},[167,82369,82266],{"class":173},[167,82371,898],{"class":512},[167,82373,82374],{"class":177},"'乔治'",[167,82376,2578],{"class":512},[167,82378,2281],{"class":184},[167,82380,2578],{"class":512},[167,82382,82383],{"class":177},"'男'",[167,82385,873],{"class":512},[167,82387,82388,82390,82392],{"class":169,"line":796},[167,82389,575],{"class":512},[167,82391,53809],{"class":516},[167,82393,537],{"class":512},[19,82395,82396],{},[3528,82397],{"alt":32,"src":82398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82400,82401],{},[3528,82402],{"alt":32,"src":82403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82405,82406],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82408,82409],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82411,82412],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82414,82415],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82417,82418],{},"这里用等号是因为：对象.属性=值",[19,82420,82421],{},"①利用对象字面量创建对象",[19,82423,82424],{},"const o={",[19,82426,82427],{},"name:'pink'",[19,82429,82430],{},"} ②利用new Object创建对象",[19,82432,82433],{},"const o=new Object({name:'pink'})",[19,82435,82436],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82438,82439],{},"构造函数创建对象的执行过程：",[19,82441,82442],{},[3528,82443],{"alt":32,"src":82444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[494,82446,82448],{"id":82447},"_4103-实例成员","4.10.3 实例成员",[19,82450,82451],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[40,82453,82454,82457,82460],{},[43,82455,82456],{},"实例对象的属性和方法即为实例成员",[43,82458,82459],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[43,82461,82462],{},"构造函数创建的实例对象彼此独立互不影响",[494,82464,82466],{"id":82465},"_4104-静态成员","4.10.4 静态成员",[19,82468,82469],{},[3528,82470],{"alt":32,"src":82471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82473,82474],{},"静态成员有Date.now() Math.PI Math.random()",[19,82476,82477],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82479,82480],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82482,82483],{},"function Pig(name) n {",[19,82485,82486],{},"this.name=name",[19,82488,3145],{},[19,82490,82491],{},"Pig.eyes=2",[19,82493,82494],{},"Pig.sayHai=function () { console.log(this) }",[19,82496,82497],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82499,82500],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82502,13360],{},[40,82504,82505,82508,82511,82514,82517],{},[43,82506,82507],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[43,82509,82510],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[43,82512,82513],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[43,82515,82516],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[43,82518,82519],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82521,82522],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[494,82524,82526],{"id":82525},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82528,82529],{},"内置构造函数包含：",[19,82531,82532],{},[3528,82533],{"alt":32,"src":82534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82536,82537],{},[3528,82538],{"alt":32,"src":82539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82541,82542],{},"这些基本数据类型，js对他们进行了包装",[53809,82544,82545],{},"\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",[24024,82547,82549],{"id":82548},"_41051-object","4.10.5.1 Object",[19,82551,82552],{},"Object 是内置的构造函数，用于创建普通对象",[19,82554,82555],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,82557,82559],{"className":52633,"code":82558,"language":52635,"meta":32,"style":32},"const user=new Object({name:'小明',age:15})\n",[34,82560,82561],{"__ignoreMap":32},[167,82562,82563],{"class":169,"line":170},[167,82564,82558],{"class":512},[19,82566,82567],{},"三个常用的静态方法：",[24936,82569,82571],{"id":82570},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82573,82574],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82576,82577],{},[3528,82578],{"alt":32,"src":82579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82581,82582],{},[3528,82583],{"alt":32,"src":82584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,82586,82588],{"className":503,"code":82587,"language":505,"meta":32,"style":32},"\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",[34,82589,82590,82598,82606,82611,82616,82621,82626,82631,82636,82644],{"__ignoreMap":32},[167,82591,82592,82594,82596],{"class":169,"line":170},[167,82593,513],{"class":512},[167,82595,517],{"class":516},[167,82597,537],{"class":512},[167,82599,82600,82602,82604],{"class":169,"line":191},[167,82601,542],{"class":512},[167,82603,53809],{"class":516},[167,82605,537],{"class":512},[167,82607,82608],{"class":169,"line":205},[167,82609,82610],{"class":512},"    const o = { name: 'pink', age: 6 }\n",[167,82612,82613],{"class":169,"line":219},[167,82614,82615],{"class":512},"    \u002F\u002F 获得所有属性名\n",[167,82617,82618],{"class":169,"line":230},[167,82619,82620],{"class":512},"    const arr = Object.keys(o)\n",[167,82622,82623],{"class":169,"line":241},[167,82624,82625],{"class":512},"    console.log(arr)\n",[167,82627,82628],{"class":169,"line":261},[167,82629,82630],{"class":512},"    \u002F\u002F 获得所有属性值\n",[167,82632,82633],{"class":169,"line":773},[167,82634,82635],{"class":512},"    console.log(Object.values(o))\n",[167,82637,82638,82640,82642],{"class":169,"line":779},[167,82639,54412],{"class":512},[167,82641,53809],{"class":516},[167,82643,537],{"class":512},[167,82645,82646,82648,82650],{"class":169,"line":785},[167,82647,575],{"class":512},[167,82649,517],{"class":516},[167,82651,537],{"class":512},[24936,82653,82655],{"id":82654},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82657,82658],{},"Object.assign(oo,o)",[19,82660,82661],{},"后的东西添加给前 是追加",[19,82663,82664],{},[3528,82665],{"alt":32,"src":82666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82668,82669],{},[3528,82670],{"alt":32,"src":82671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,82673,82675],{"className":503,"code":82674,"language":505,"meta":32,"style":32},"\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",[34,82676,82677,82685,82693,82697,82701,82705,82709,82713,82717,82722,82727,82732,82737,82742,82750],{"__ignoreMap":32},[167,82678,82679,82681,82683],{"class":169,"line":170},[167,82680,513],{"class":512},[167,82682,517],{"class":516},[167,82684,537],{"class":512},[167,82686,82687,82689,82691],{"class":169,"line":191},[167,82688,542],{"class":512},[167,82690,53809],{"class":516},[167,82692,537],{"class":512},[167,82694,82695],{"class":169,"line":205},[167,82696,82610],{"class":512},[167,82698,82699],{"class":169,"line":219},[167,82700,82615],{"class":512},[167,82702,82703],{"class":169,"line":230},[167,82704,82620],{"class":512},[167,82706,82707],{"class":169,"line":241},[167,82708,82625],{"class":512},[167,82710,82711],{"class":169,"line":261},[167,82712,82630],{"class":512},[167,82714,82715],{"class":169,"line":773},[167,82716,82635],{"class":512},[167,82718,82719],{"class":169,"line":779},[167,82720,82721],{"class":512},"    const oo = {}\n",[167,82723,82724],{"class":169,"line":785},[167,82725,82726],{"class":512},"    Object.assign(oo, o)\n",[167,82728,82729],{"class":169,"line":790},[167,82730,82731],{"class":512},"    console.log(oo)\n",[167,82733,82734],{"class":169,"line":796},[167,82735,82736],{"class":512},"    Object.assign(o, { gender: '女' })\n",[167,82738,82739],{"class":169,"line":802},[167,82740,82741],{"class":512},"    console.log(o)\n",[167,82743,82744,82746,82748],{"class":169,"line":808},[167,82745,54412],{"class":512},[167,82747,53809],{"class":516},[167,82749,537],{"class":512},[167,82751,82752,82754,82756],{"class":169,"line":814},[167,82753,575],{"class":512},[167,82755,517],{"class":516},[167,82757,537],{"class":512},[19,82759,82760],{},[3528,82761],{"alt":32,"src":82762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24024,82764,82766],{"id":82765},"_41052-array","4.10.5.2 Array",[19,82768,82769],{},"Array 是内置的构造函数，用于创建数组",[19,82771,82772],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,82774,82776],{"className":52633,"code":82775,"language":52635,"meta":32,"style":32},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[34,82777,82778,82783],{"__ignoreMap":32},[167,82779,82780],{"class":169,"line":170},[167,82781,82782],{"class":512},"const arr=new Array(3,5)\n",[167,82784,82785],{"class":169,"line":191},[167,82786,82787],{"class":512},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82789,82790],{},"Array的实例方法，这个方法是实例成员",[19,82792,82793],{},[3528,82794],{"alt":32,"src":82795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24936,82797,82799],{"id":82798},"_410521-reduce","4.10.5.2.1 reduce",[19,82801,82802],{},[3528,82803],{"alt":32,"src":82804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,82806,82808],{"className":503,"code":82807,"language":505,"meta":32,"style":32},"\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",[34,82809,82810,82818,82826,82831,82836,82841,82846,82850,82855,82860,82865,82869,82874,82879,82883,82888,82893,82898,82906],{"__ignoreMap":32},[167,82811,82812,82814,82816],{"class":169,"line":170},[167,82813,513],{"class":512},[167,82815,517],{"class":516},[167,82817,537],{"class":512},[167,82819,82820,82822,82824],{"class":169,"line":191},[167,82821,542],{"class":512},[167,82823,53809],{"class":516},[167,82825,537],{"class":512},[167,82827,82828],{"class":169,"line":205},[167,82829,82830],{"class":512},"    const arr = [1, 5, 8]\n",[167,82832,82833],{"class":169,"line":219},[167,82834,82835],{"class":512},"    \u002F\u002F 1.没有初始值\n",[167,82837,82838],{"class":169,"line":230},[167,82839,82840],{"class":512},"    const total = arr.reduce(function (prev, current) {\n",[167,82842,82843],{"class":169,"line":241},[167,82844,82845],{"class":512},"      return prev + current\n",[167,82847,82848],{"class":169,"line":261},[167,82849,35463],{"class":512},[167,82851,82852],{"class":169,"line":773},[167,82853,82854],{"class":512},"    console.log(total)   \u002F\u002F14\n",[167,82856,82857],{"class":169,"line":779},[167,82858,82859],{"class":512},"    \u002F\u002F 2.有初始值\n",[167,82861,82862],{"class":169,"line":785},[167,82863,82864],{"class":512},"    const total1 = arr.reduce(function (prev, current) {\n",[167,82866,82867],{"class":169,"line":790},[167,82868,82845],{"class":512},[167,82870,82871],{"class":169,"line":796},[167,82872,82873],{"class":512},"    }, 10)\n",[167,82875,82876],{"class":169,"line":802},[167,82877,82878],{"class":512},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[167,82880,82881],{"class":169,"line":808},[167,82882,741],{"emptyLinePlaceholder":740},[167,82884,82885],{"class":169,"line":814},[167,82886,82887],{"class":512},"    \u002F\u002F 3.箭头函数写法\n",[167,82889,82890],{"class":169,"line":820},[167,82891,82892],{"class":512},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[167,82894,82895],{"class":169,"line":826},[167,82896,82897],{"class":512},"    console.log(total2)   \u002F\u002F24\n",[167,82899,82900,82902,82904],{"class":169,"line":832},[167,82901,54412],{"class":512},[167,82903,53809],{"class":516},[167,82905,537],{"class":512},[167,82907,82908,82910,82912],{"class":169,"line":837},[167,82909,575],{"class":512},[167,82911,517],{"class":516},[167,82913,537],{"class":512},[19,82915,82916],{},"执行过程：",[40,82918,82919,82922,82925],{},[43,82920,82921],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[43,82923,82924],{},"每一次循环，把返回值给作为下一次循环的上一次值",[43,82926,82927],{},"如果有起始值，则起始值作为上一次值",[26,82929,82931],{"className":503,"code":82930,"language":505,"meta":32,"style":32},"\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",[34,82932,82933,82941,82949,82953,82957,82961,82965,82969,82973,82978,82983,82988,82993,82998,83002,83006,83010,83014,83018,83022,83027,83031,83036,83040,83045,83050,83054,83058,83062,83070],{"__ignoreMap":32},[167,82934,82935,82937,82939],{"class":169,"line":170},[167,82936,513],{"class":512},[167,82938,517],{"class":516},[167,82940,537],{"class":512},[167,82942,82943,82945,82947],{"class":169,"line":191},[167,82944,542],{"class":512},[167,82946,53809],{"class":516},[167,82948,537],{"class":512},[167,82950,82951],{"class":169,"line":205},[167,82952,82830],{"class":512},[167,82954,82955],{"class":169,"line":219},[167,82956,82835],{"class":512},[167,82958,82959],{"class":169,"line":230},[167,82960,82840],{"class":512},[167,82962,82963],{"class":169,"line":241},[167,82964,82845],{"class":512},[167,82966,82967],{"class":169,"line":261},[167,82968,35463],{"class":512},[167,82970,82971],{"class":169,"line":773},[167,82972,82854],{"class":512},[167,82974,82975],{"class":169,"line":779},[167,82976,82977],{"class":512},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[167,82979,82980],{"class":169,"line":785},[167,82981,82982],{"class":512},"    \u002F\u002F     1              5                    6\n",[167,82984,82985],{"class":169,"line":790},[167,82986,82987],{"class":512},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[167,82989,82990],{"class":169,"line":796},[167,82991,82992],{"class":512},"    \u002F\u002F     6              8                    14\n",[167,82994,82995],{"class":169,"line":802},[167,82996,82997],{"class":512},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[167,82999,83000],{"class":169,"line":808},[167,83001,82859],{"class":512},[167,83003,83004],{"class":169,"line":814},[167,83005,82864],{"class":512},[167,83007,83008],{"class":169,"line":820},[167,83009,82845],{"class":512},[167,83011,83012],{"class":169,"line":826},[167,83013,82873],{"class":512},[167,83015,83016],{"class":169,"line":832},[167,83017,82878],{"class":512},[167,83019,83020],{"class":169,"line":837},[167,83021,82977],{"class":512},[167,83023,83024],{"class":169,"line":842},[167,83025,83026],{"class":512},"    \u002F\u002F     10             1                     11\n",[167,83028,83029],{"class":169,"line":860},[167,83030,82987],{"class":512},[167,83032,83033],{"class":169,"line":876},[167,83034,83035],{"class":512},"    \u002F\u002F     11             5                    16\n",[167,83037,83038],{"class":169,"line":887},[167,83039,82987],{"class":512},[167,83041,83042],{"class":169,"line":892},[167,83043,83044],{"class":512},"    \u002F\u002F     16             8                    24\n",[167,83046,83047],{"class":169,"line":907},[167,83048,83049],{"class":512},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[167,83051,83052],{"class":169,"line":920},[167,83053,82887],{"class":512},[167,83055,83056],{"class":169,"line":933},[167,83057,82892],{"class":512},[167,83059,83060],{"class":169,"line":946},[167,83061,82897],{"class":512},[167,83063,83064,83066,83068],{"class":169,"line":959},[167,83065,54412],{"class":512},[167,83067,53809],{"class":516},[167,83069,537],{"class":512},[167,83071,83072,83074,83076],{"class":169,"line":964},[167,83073,575],{"class":512},[167,83075,517],{"class":516},[167,83077,537],{"class":512},[24936,83079,83081],{"id":83080},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83083,83084],{},[3528,83085],{"alt":32,"src":83086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,83088,83090],{"className":503,"code":83089,"language":505,"meta":32,"style":32},"\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",[34,83091,83092,83100,83108,83113,83118,83123,83128,83132,83137,83142,83147,83152,83157,83162,83166,83171,83175,83180,83188],{"__ignoreMap":32},[167,83093,83094,83096,83098],{"class":169,"line":170},[167,83095,513],{"class":512},[167,83097,517],{"class":516},[167,83099,537],{"class":512},[167,83101,83102,83104,83106],{"class":169,"line":191},[167,83103,542],{"class":512},[167,83105,53809],{"class":516},[167,83107,537],{"class":512},[167,83109,83110],{"class":169,"line":205},[167,83111,83112],{"class":512},"    const arr = [\n",[167,83114,83115],{"class":169,"line":219},[167,83116,83117],{"class":512},"      { name: '张三', salary: 10000 },\n",[167,83119,83120],{"class":169,"line":230},[167,83121,83122],{"class":512},"      { name: '李四', salary: 10000 },\n",[167,83124,83125],{"class":169,"line":241},[167,83126,83127],{"class":512},"      { name: '王五', salary: 10000 }\n",[167,83129,83130],{"class":169,"line":261},[167,83131,55102],{"class":512},[167,83133,83134],{"class":169,"line":773},[167,83135,83136],{"class":512},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[167,83138,83139],{"class":169,"line":779},[167,83140,83141],{"class":512},"    \u002F\u002F prev是累计值\n",[167,83143,83144],{"class":169,"line":785},[167,83145,83146],{"class":512},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[167,83148,83149],{"class":169,"line":790},[167,83150,83151],{"class":512},"    console.log(total)\n",[167,83153,83154],{"class":169,"line":796},[167,83155,83156],{"class":512},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[167,83158,83159],{"class":169,"line":802},[167,83160,83161],{"class":512},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[167,83163,83164],{"class":169,"line":808},[167,83165,83156],{"class":512},[167,83167,83168],{"class":169,"line":814},[167,83169,83170],{"class":512},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[167,83172,83173],{"class":169,"line":820},[167,83174,83156],{"class":512},[167,83176,83177],{"class":169,"line":826},[167,83178,83179],{"class":512},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[167,83181,83182,83184,83186],{"class":169,"line":832},[167,83183,54412],{"class":512},[167,83185,53809],{"class":516},[167,83187,537],{"class":512},[167,83189,83190,83192,83194],{"class":169,"line":837},[167,83191,575],{"class":512},[167,83193,517],{"class":516},[167,83195,537],{"class":512},[24936,83197,83199],{"id":83198},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83201,83202],{},[3528,83203],{"alt":32,"src":83204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83206,83207],{},[3528,83208],{"alt":32,"src":83209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[40,83211,83212],{},[43,83213,83214],{},"find()",[19,83216,83217],{},"循环查找，找到第一个就ok",[19,83219,83220],{},[2439,83221,83224],{"href":83222,"rel":83223},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25887],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,83226,83228],{"className":52633,"code":83227,"language":52635,"meta":32,"style":32},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[34,83229,83230,83235,83240],{"__ignoreMap":32},[167,83231,83232],{"class":169,"line":170},[167,83233,83234],{"class":512},"const array1 = [5, 12, 8, 130, 44]\n",[167,83236,83237],{"class":169,"line":191},[167,83238,83239],{"class":512},"const found = array1.find((element) => element > 10)\n",[167,83241,83242],{"class":169,"line":205},[167,83243,83244],{"class":512},"console.log(found)  \u002F\u002F12\n",[19,83246,83247,83249,83250,83255,83256,83259,83260,83262,83263,83268,83269,83271,83272,83274,83275,83277,83278],{},[34,83248,83214],{}," 方法是一个",[2439,83251,83254],{"href":83252,"rel":83253},"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",[25887],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[34,83257,83258],{},"callbackFn"," 函数，直到 ",[34,83261,83258],{}," 返回一个",[2439,83264,83267],{"href":83265,"rel":83266},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25887],"真值","。然后 ",[34,83270,83214],{}," 返回该元素并停止迭代数组。如果 ",[34,83273,83258],{}," 从未返回真值，则 ",[34,83276,83214],{}," 返回 ",[34,83279,83280],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,83282,83284],{"className":503,"code":83283,"language":505,"meta":32,"style":32},"\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",[34,83285,83286,83294,83302,83307,83312,83317,83321,83326,83331,83335,83340,83345,83349,83353,83358,83363,83367,83371,83376,83381,83386,83391,83396,83400,83405,83410,83415,83420,83424,83429,83437],{"__ignoreMap":32},[167,83287,83288,83290,83292],{"class":169,"line":170},[167,83289,513],{"class":512},[167,83291,517],{"class":516},[167,83293,537],{"class":512},[167,83295,83296,83298,83300],{"class":169,"line":191},[167,83297,542],{"class":512},[167,83299,53809],{"class":516},[167,83301,537],{"class":512},[167,83303,83304],{"class":169,"line":205},[167,83305,83306],{"class":512},"    const arr = ['red', 'blue', 'green']\n",[167,83308,83309],{"class":169,"line":219},[167,83310,83311],{"class":512},"    const found = arr.find(item => item === 'pink')\n",[167,83313,83314],{"class":169,"line":230},[167,83315,83316],{"class":512},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[167,83318,83319],{"class":169,"line":241},[167,83320,741],{"emptyLinePlaceholder":740},[167,83322,83323],{"class":169,"line":261},[167,83324,83325],{"class":512},"    \u002F\u002F 使用场景，用于查找数据\n",[167,83327,83328],{"class":169,"line":773},[167,83329,83330],{"class":512},"    const arr1 = [\n",[167,83332,83333],{"class":169,"line":779},[167,83334,81373],{"class":512},[167,83336,83337],{"class":169,"line":785},[167,83338,83339],{"class":512},"        name: '小米',\n",[167,83341,83342],{"class":169,"line":790},[167,83343,83344],{"class":512},"        price: 1999\n",[167,83346,83347],{"class":169,"line":796},[167,83348,79880],{"class":512},[167,83350,83351],{"class":169,"line":802},[167,83352,81373],{"class":512},[167,83354,83355],{"class":169,"line":808},[167,83356,83357],{"class":512},"        name: '华为',\n",[167,83359,83360],{"class":169,"line":814},[167,83361,83362],{"class":512},"        price: 3999\n",[167,83364,83365],{"class":169,"line":820},[167,83366,54393],{"class":512},[167,83368,83369],{"class":169,"line":826},[167,83370,55102],{"class":512},[167,83372,83373],{"class":169,"line":832},[167,83374,83375],{"class":512},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[167,83377,83378],{"class":169,"line":837},[167,83379,83380],{"class":512},"    \u002F\u002F const found1 = arr1.find(item => {\n",[167,83382,83383],{"class":169,"line":842},[167,83384,83385],{"class":512},"    \u002F\u002F   if (item.name === '小米') {\n",[167,83387,83388],{"class":169,"line":860},[167,83389,83390],{"class":512},"    \u002F\u002F     return item\n",[167,83392,83393],{"class":169,"line":876},[167,83394,83395],{"class":512},"    \u002F\u002F   }\n",[167,83397,83398],{"class":169,"line":887},[167,83399,65279],{"class":512},[167,83401,83402],{"class":169,"line":892},[167,83403,83404],{"class":512},"    \u002F\u002F 另一种写法\n",[167,83406,83407],{"class":169,"line":907},[167,83408,83409],{"class":512},"    const found1 = arr1.find(item => {\n",[167,83411,83412],{"class":169,"line":920},[167,83413,83414],{"class":512},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[167,83416,83417],{"class":169,"line":933},[167,83418,83419],{"class":512},"      return item.name = '小米'\n",[167,83421,83422],{"class":169,"line":946},[167,83423,35463],{"class":512},[167,83425,83426],{"class":169,"line":959},[167,83427,83428],{"class":512},"    console.log(found1)\n",[167,83430,83431,83433,83435],{"class":169,"line":964},[167,83432,54412],{"class":512},[167,83434,53809],{"class":516},[167,83436,537],{"class":512},[167,83438,83439,83441,83443],{"class":169,"line":987},[167,83440,575],{"class":512},[167,83442,517],{"class":516},[167,83444,537],{"class":512},[19,83446,83447],{},[3528,83448],{"alt":32,"src":83449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83451,83452],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[40,83454,83455],{"start":191},[43,83456,83457],{},"every()返回的是布尔值",[19,83459,83460],{},[2439,83461,83464],{"href":83462,"rel":83463},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25887],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83466,83467],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83469,83470],{},"some是只有有一个就没问题",[19,83472,83473],{},"every是必须全是才行",[26,83475,83479],{"className":83476,"code":83477,"language":83478,"meta":32,"style":32},"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",[34,83480,83481,83497,83511,83515,83524],{"__ignoreMap":32},[167,83482,83483,83485,83488,83490,83492,83495],{"class":169,"line":170},[167,83484,56439],{"class":731},[167,83486,83487],{"class":512}," isBigEnough(element, ",[167,83489,76046],{"class":731},[167,83491,14463],{"class":512},[167,83493,83494],{"class":731},"array",[167,83496,14470],{"class":512},[167,83498,83499,83502,83505,83507,83509],{"class":169,"line":191},[167,83500,83501],{"class":731},"  return",[167,83503,83504],{"class":512}," element ",[167,83506,3764],{"class":731},[167,83508,4082],{"class":184},[167,83510,3359],{"class":512},[167,83512,83513],{"class":169,"line":205},[167,83514,3630],{"class":512},[167,83516,83517,83520,83522],{"class":169,"line":219},[167,83518,83519],{"class":512},"[12, 5, 8, 130, 44].every(isBigEnough); ",[167,83521,35332],{"class":731},[167,83523,56506],{"class":512},[167,83525,83526,83529,83531],{"class":169,"line":230},[167,83527,83528],{"class":512},"[12, 54, 18, 130, 44].every(isBigEnough); ",[167,83530,35332],{"class":731},[167,83532,59929],{"class":512},[26,83534,83536],{"className":503,"code":83535,"language":505,"meta":32,"style":32},"\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",[34,83537,83538,83546,83554,83559,83563,83568,83573,83581],{"__ignoreMap":32},[167,83539,83540,83542,83544],{"class":169,"line":170},[167,83541,513],{"class":512},[167,83543,517],{"class":516},[167,83545,537],{"class":512},[167,83547,83548,83550,83552],{"class":169,"line":191},[167,83549,542],{"class":512},[167,83551,53809],{"class":516},[167,83553,537],{"class":512},[167,83555,83556],{"class":169,"line":205},[167,83557,83558],{"class":512},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[167,83560,83561],{"class":169,"line":219},[167,83562,80310],{"class":512},[167,83564,83565],{"class":169,"line":230},[167,83566,83567],{"class":512},"    const flag = arr.every(item => item >= 10)\n",[167,83569,83570],{"class":169,"line":241},[167,83571,83572],{"class":512},"    console.log(flag)    \u002F\u002Ftrue\n",[167,83574,83575,83577,83579],{"class":169,"line":261},[167,83576,54412],{"class":512},[167,83578,53809],{"class":516},[167,83580,537],{"class":512},[167,83582,83583,83585,83587],{"class":169,"line":773},[167,83584,575],{"class":512},[167,83586,517],{"class":516},[167,83588,537],{"class":512},[26,83590,83592],{"className":503,"code":83591,"language":505,"meta":32,"style":32},"\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",[34,83593,83594,83602,83610,83614,83619,83624,83629,83637],{"__ignoreMap":32},[167,83595,83596,83598,83600],{"class":169,"line":170},[167,83597,513],{"class":512},[167,83599,517],{"class":516},[167,83601,537],{"class":512},[167,83603,83604,83606,83608],{"class":169,"line":191},[167,83605,542],{"class":512},[167,83607,53809],{"class":516},[167,83609,537],{"class":512},[167,83611,83612],{"class":169,"line":205},[167,83613,83558],{"class":512},[167,83615,83616],{"class":169,"line":219},[167,83617,83618],{"class":512},"    const arr = [10, 0, 5]\n",[167,83620,83621],{"class":169,"line":230},[167,83622,83623],{"class":512},"    const flag = arr.some(item => item >= 10)\n",[167,83625,83626],{"class":169,"line":241},[167,83627,83628],{"class":512},"    console.log(flag)   \u002F\u002Ftrue\n",[167,83630,83631,83633,83635],{"class":169,"line":261},[167,83632,54412],{"class":512},[167,83634,53809],{"class":516},[167,83636,537],{"class":512},[167,83638,83639,83641,83643],{"class":169,"line":773},[167,83640,575],{"class":512},[167,83642,517],{"class":516},[167,83644,537],{"class":512},[24936,83646,83648],{"id":83647},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83650,83651],{},[3528,83652],{"alt":32,"src":83653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,83655,83657],{"className":52633,"code":83656,"language":52635,"meta":32,"style":32},"\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",[34,83658,83659,83669,83683,83687,83695,83709,83729,83741,83749,83756,83768,83780,83792,83804,83814,83824,83828,83836,83844,83848,83856,83868,83876,83898,83903,83908,83941,83949,83957,83961],{"__ignoreMap":32},[167,83660,83661,83663,83665,83667],{"class":169,"line":170},[167,83662,53297],{"class":512},[167,83664,53300],{"class":516},[167,83666,53303],{"class":173},[167,83668,537],{"class":512},[167,83670,83671,83673,83675,83677,83679,83681],{"class":169,"line":191},[167,83672,513],{"class":512},[167,83674,52635],{"class":516},[167,83676,53314],{"class":173},[167,83678,523],{"class":512},[167,83680,53319],{"class":177},[167,83682,537],{"class":512},[167,83684,83685],{"class":169,"line":205},[167,83686,741],{"emptyLinePlaceholder":740},[167,83688,83689,83691,83693],{"class":169,"line":219},[167,83690,513],{"class":512},[167,83692,53332],{"class":516},[167,83694,537],{"class":512},[167,83696,83697,83699,83701,83703,83705,83707],{"class":169,"line":230},[167,83698,542],{"class":512},[167,83700,53342],{"class":516},[167,83702,53345],{"class":173},[167,83704,523],{"class":512},[167,83706,53350],{"class":177},[167,83708,537],{"class":512},[167,83710,83711,83713,83715,83717,83719,83721,83723,83725,83727],{"class":169,"line":241},[167,83712,542],{"class":512},[167,83714,53342],{"class":516},[167,83716,520],{"class":173},[167,83718,523],{"class":512},[167,83720,53389],{"class":177},[167,83722,53369],{"class":173},[167,83724,523],{"class":512},[167,83726,53396],{"class":177},[167,83728,537],{"class":512},[167,83730,83731,83733,83735,83737,83739],{"class":169,"line":261},[167,83732,542],{"class":512},[167,83734,53405],{"class":516},[167,83736,53408],{"class":512},[167,83738,53405],{"class":516},[167,83740,537],{"class":512},[167,83742,83743,83745,83747],{"class":169,"line":773},[167,83744,542],{"class":512},[167,83746,2113],{"class":516},[167,83748,537],{"class":512},[167,83750,83751,83754],{"class":169,"line":779},[167,83752,83753],{"class":516},"    div",[167,83755,17598],{"class":512},[167,83757,83758,83760,83762,83764,83766],{"class":169,"line":785},[167,83759,56761],{"class":184},[167,83761,53435],{"class":512},[167,83763,3776],{"class":184},[167,83765,53490],{"class":731},[167,83767,3359],{"class":512},[167,83769,83770,83772,83774,83776,83778],{"class":169,"line":790},[167,83771,56775],{"class":184},[167,83773,53435],{"class":512},[167,83775,2601],{"class":184},[167,83777,53490],{"class":731},[167,83779,3359],{"class":512},[167,83781,83782,83784,83786,83788,83790],{"class":169,"line":796},[167,83783,59348],{"class":184},[167,83785,53435],{"class":512},[167,83787,2601],{"class":184},[167,83789,53490],{"class":731},[167,83791,3359],{"class":512},[167,83793,83794,83796,83798,83800,83802],{"class":169,"line":802},[167,83795,67122],{"class":184},[167,83797,53435],{"class":512},[167,83799,2698],{"class":184},[167,83801,53490],{"class":731},[167,83803,3359],{"class":512},[167,83805,83806,83808,83810,83812],{"class":169,"line":808},[167,83807,59275],{"class":184},[167,83809,53435],{"class":512},[167,83811,53590],{"class":184},[167,83813,3359],{"class":512},[167,83815,83816,83818,83820,83822],{"class":169,"line":814},[167,83817,56874],{"class":184},[167,83819,53435],{"class":512},[167,83821,53643],{"class":184},[167,83823,3359],{"class":512},[167,83825,83826],{"class":169,"line":820},[167,83827,4231],{"class":512},[167,83829,83830,83832,83834],{"class":169,"line":826},[167,83831,54412],{"class":512},[167,83833,2113],{"class":516},[167,83835,537],{"class":512},[167,83837,83838,83840,83842],{"class":169,"line":832},[167,83839,575],{"class":512},[167,83841,53332],{"class":516},[167,83843,537],{"class":512},[167,83845,83846],{"class":169,"line":837},[167,83847,741],{"emptyLinePlaceholder":740},[167,83849,83850,83852,83854],{"class":169,"line":842},[167,83851,513],{"class":512},[167,83853,517],{"class":516},[167,83855,537],{"class":512},[167,83857,83858,83860,83862,83864,83866],{"class":169,"line":860},[167,83859,542],{"class":512},[167,83861,53609],{"class":516},[167,83863,57303],{"class":512},[167,83865,53609],{"class":516},[167,83867,537],{"class":512},[167,83869,83870,83872,83874],{"class":169,"line":876},[167,83871,542],{"class":512},[167,83873,53809],{"class":516},[167,83875,537],{"class":512},[167,83877,83878,83880,83883,83885,83888,83891,83893,83896],{"class":169,"line":887},[167,83879,13249],{"class":731},[167,83881,83882],{"class":184}," spec",[167,83884,753],{"class":731},[167,83886,83887],{"class":512}," { size: ",[167,83889,83890],{"class":177},"'40cm*40cm'",[167,83892,57453],{"class":512},[167,83894,83895],{"class":177},"'黑色'",[167,83897,57593],{"class":512},[167,83899,83900],{"class":169,"line":892},[167,83901,83902],{"class":2268},"    \u002F\u002F const arr = Object.values(spec)\n",[167,83904,83905],{"class":169,"line":907},[167,83906,83907],{"class":2268},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[167,83909,83910,83912,83914,83916,83919,83921,83923,83926,83929,83932,83934,83936,83939],{"class":169,"line":920},[167,83911,54402],{"class":512},[167,83913,56389],{"class":173},[167,83915,898],{"class":512},[167,83917,83918],{"class":177},"'div'",[167,83920,76237],{"class":512},[167,83922,523],{"class":731},[167,83924,83925],{"class":512}," Object.",[167,83927,83928],{"class":173},"values",[167,83930,83931],{"class":512},"(spec).",[167,83933,76211],{"class":173},[167,83935,898],{"class":512},[167,83937,83938],{"class":177},"'\u002F'",[167,83940,873],{"class":512},[167,83942,83943,83945,83947],{"class":169,"line":933},[167,83944,54412],{"class":512},[167,83946,53809],{"class":516},[167,83948,537],{"class":512},[167,83950,83951,83953,83955],{"class":169,"line":946},[167,83952,575],{"class":512},[167,83954,517],{"class":516},[167,83956,537],{"class":512},[167,83958,83959],{"class":169,"line":959},[167,83960,741],{"emptyLinePlaceholder":740},[167,83962,83963,83965,83967],{"class":169,"line":964},[167,83964,575],{"class":512},[167,83966,52635],{"class":516},[167,83968,537],{"class":512},[19,83970,83971],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24936,83973,83975],{"id":83974},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83977,83978],{},"静态方法，将伪数组转换为真数组",[19,83980,83981],{},[3528,83982],{"alt":32,"src":83983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,83985,83987],{"className":503,"code":83986,"language":505,"meta":32,"style":32},"\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",[34,83988,83989,83997,84005,84017,84029,84041,84049,84057,84062,84067,84072,84077,84085],{"__ignoreMap":32},[167,83990,83991,83993,83995],{"class":169,"line":170},[167,83992,513],{"class":512},[167,83994,517],{"class":516},[167,83996,537],{"class":512},[167,83998,83999,84001,84003],{"class":169,"line":191},[167,84000,542],{"class":512},[167,84002,3205],{"class":516},[167,84004,537],{"class":512},[167,84006,84007,84009,84011,84013,84015],{"class":169,"line":205},[167,84008,53339],{"class":512},[167,84010,43],{"class":516},[167,84012,57303],{"class":512},[167,84014,43],{"class":516},[167,84016,537],{"class":512},[167,84018,84019,84021,84023,84025,84027],{"class":169,"line":219},[167,84020,53339],{"class":512},[167,84022,43],{"class":516},[167,84024,57303],{"class":512},[167,84026,43],{"class":516},[167,84028,537],{"class":512},[167,84030,84031,84033,84035,84037,84039],{"class":169,"line":230},[167,84032,53339],{"class":512},[167,84034,43],{"class":516},[167,84036,57303],{"class":512},[167,84038,43],{"class":516},[167,84040,537],{"class":512},[167,84042,84043,84045,84047],{"class":169,"line":241},[167,84044,54412],{"class":512},[167,84046,3205],{"class":516},[167,84048,537],{"class":512},[167,84050,84051,84053,84055],{"class":169,"line":261},[167,84052,542],{"class":512},[167,84054,53809],{"class":516},[167,84056,537],{"class":512},[167,84058,84059],{"class":169,"line":773},[167,84060,84061],{"class":512},"    const lis = document.querySelectorAll('li')\n",[167,84063,84064],{"class":169,"line":779},[167,84065,84066],{"class":512},"    const liss = Array.from(lis)\n",[167,84068,84069],{"class":169,"line":785},[167,84070,84071],{"class":512},"    liss.pop()\n",[167,84073,84074],{"class":169,"line":790},[167,84075,84076],{"class":512},"    console.log(liss)\n",[167,84078,84079,84081,84083],{"class":169,"line":796},[167,84080,54412],{"class":512},[167,84082,53809],{"class":516},[167,84084,537],{"class":512},[167,84086,84087,84089,84091],{"class":169,"line":802},[167,84088,575],{"class":512},[167,84090,517],{"class":516},[167,84092,537],{"class":512},[19,84094,84095],{},[3528,84096],{"alt":32,"src":84097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24024,84099,84101],{"id":84100},"_41053-string","4.10.5.3 String",[19,84103,84104],{},[3528,84105],{"alt":32,"src":84106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24936,84108,84110],{"id":84109},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,84112,84114],{"className":503,"code":84113,"language":505,"meta":32,"style":32},"\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",[34,84115,84116,84124,84132,84137,84142,84147,84151,84156,84161,84166,84174],{"__ignoreMap":32},[167,84117,84118,84120,84122],{"class":169,"line":170},[167,84119,513],{"class":512},[167,84121,517],{"class":516},[167,84123,537],{"class":512},[167,84125,84126,84128,84130],{"class":169,"line":191},[167,84127,542],{"class":512},[167,84129,53809],{"class":516},[167,84131,537],{"class":512},[167,84133,84134],{"class":169,"line":205},[167,84135,84136],{"class":512},"    \u002F\u002F 把字符串转化为数组\n",[167,84138,84139],{"class":169,"line":219},[167,84140,84141],{"class":512},"    const str = 'pink,red'\n",[167,84143,84144],{"class":169,"line":230},[167,84145,84146],{"class":512},"    const arr = str.split(',')\n",[167,84148,84149],{"class":169,"line":241},[167,84150,82625],{"class":512},[167,84152,84153],{"class":169,"line":261},[167,84154,84155],{"class":512},"    const str1 = '2025-8-25'\n",[167,84157,84158],{"class":169,"line":773},[167,84159,84160],{"class":512},"    const arr1 = str1.split('-')\n",[167,84162,84163],{"class":169,"line":779},[167,84164,84165],{"class":512},"    console.log(arr1)\n",[167,84167,84168,84170,84172],{"class":169,"line":785},[167,84169,54412],{"class":512},[167,84171,53809],{"class":516},[167,84173,537],{"class":512},[167,84175,84176,84178,84180],{"class":169,"line":790},[167,84177,575],{"class":512},[167,84179,517],{"class":516},[167,84181,537],{"class":512},[24936,84183,84185],{"id":84184},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84187,7213],{},[19,84189,84190],{},"substring(indexStart)",[19,84192,84193],{},"substring(indexStart, indexEnd)",[3205,84195,84196,84207,84219,84229],{},[43,84197,84198,84199,84202,84203,84206],{},"如果省略了 ",[34,84200,84201],{},"indexEnd","，则 ",[34,84204,84205],{},"substring()"," 提取字符直到字符串的末尾",[43,84208,84209,84210,84213,84214,84202,84216,84218],{},"如果 ",[34,84211,84212],{},"indexStart"," 等于 ",[34,84215,84201],{},[34,84217,84205],{}," 返回一个空字符串",[43,84220,84209,84221,84223,84224,84202,84226,84228],{},[34,84222,84212],{}," 大于 ",[34,84225,84201],{},[34,84227,84205],{}," 的效果就像交换了这两个参数一样",[43,84230,84231],{},"结束的索引号不包含想要截取的部分",[26,84233,84235],{"className":83476,"code":84234,"language":83478,"meta":32,"style":32},"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",[34,84236,84237,84249,84253,84287,84317,84321,84352,84356,84383,84413,84443,84447,84478],{"__ignoreMap":32},[167,84238,84239,84242,84244,84247],{"class":169,"line":170},[167,84240,84241],{"class":512},"const anyString ",[167,84243,523],{"class":731},[167,84245,84246],{"class":177}," \"Mozilla\"",[167,84248,3359],{"class":512},[167,84250,84251],{"class":169,"line":191},[167,84252,741],{"emptyLinePlaceholder":740},[167,84254,84255,84258,84260,84262,84264,84267,84269,84272,84274,84276,84278,84280,84282,84284],{"class":169,"line":205},[167,84256,84257],{"class":184},"console",[167,84259,2758],{"class":512},[167,84261,60236],{"class":184},[167,84263,898],{"class":512},[167,84265,84266],{"class":184},"anyString",[167,84268,2758],{"class":512},[167,84270,84271],{"class":184},"substring",[167,84273,898],{"class":512},[167,84275,1154],{"class":184},[167,84277,14463],{"class":512},[167,84279,2418],{"class":184},[167,84281,77241],{"class":512},[167,84283,35332],{"class":731},[167,84285,84286],{"class":177}," 'M'\n",[167,84288,84289,84291,84293,84295,84297,84299,84301,84303,84305,84307,84309,84311,84313,84315],{"class":169,"line":219},[167,84290,84257],{"class":184},[167,84292,2758],{"class":512},[167,84294,60236],{"class":184},[167,84296,898],{"class":512},[167,84298,84266],{"class":184},[167,84300,2758],{"class":512},[167,84302,84271],{"class":184},[167,84304,898],{"class":512},[167,84306,2418],{"class":184},[167,84308,14463],{"class":512},[167,84310,1154],{"class":184},[167,84312,77241],{"class":512},[167,84314,35332],{"class":731},[167,84316,84286],{"class":177},[167,84318,84319],{"class":169,"line":230},[167,84320,741],{"emptyLinePlaceholder":740},[167,84322,84323,84325,84327,84329,84331,84333,84335,84337,84339,84341,84343,84345,84347,84349],{"class":169,"line":241},[167,84324,84257],{"class":184},[167,84326,2758],{"class":512},[167,84328,60236],{"class":184},[167,84330,898],{"class":512},[167,84332,84266],{"class":184},[167,84334,2758],{"class":512},[167,84336,84271],{"class":184},[167,84338,898],{"class":512},[167,84340,1154],{"class":184},[167,84342,14463],{"class":512},[167,84344,2544],{"class":184},[167,84346,77241],{"class":512},[167,84348,35332],{"class":731},[167,84350,84351],{"class":177}," 'Mozill'\n",[167,84353,84354],{"class":169,"line":261},[167,84355,741],{"emptyLinePlaceholder":740},[167,84357,84358,84360,84362,84364,84366,84368,84370,84372,84374,84376,84378,84380],{"class":169,"line":773},[167,84359,84257],{"class":184},[167,84361,2758],{"class":512},[167,84363,60236],{"class":184},[167,84365,898],{"class":512},[167,84367,84266],{"class":184},[167,84369,2758],{"class":512},[167,84371,84271],{"class":184},[167,84373,898],{"class":512},[167,84375,2494],{"class":184},[167,84377,77241],{"class":512},[167,84379,35332],{"class":731},[167,84381,84382],{"class":177}," 'lla'\n",[167,84384,84385,84387,84389,84391,84393,84395,84397,84399,84401,84403,84405,84407,84409,84411],{"class":169,"line":779},[167,84386,84257],{"class":184},[167,84388,2758],{"class":512},[167,84390,60236],{"class":184},[167,84392,898],{"class":512},[167,84394,84266],{"class":184},[167,84396,2758],{"class":512},[167,84398,84271],{"class":184},[167,84400,898],{"class":512},[167,84402,2494],{"class":184},[167,84404,14463],{"class":512},[167,84406,2569],{"class":184},[167,84408,77297],{"class":512},[167,84410,35332],{"class":731},[167,84412,84382],{"class":177},[167,84414,84415,84417,84419,84421,84423,84425,84427,84429,84431,84433,84435,84437,84439,84441],{"class":169,"line":785},[167,84416,84257],{"class":184},[167,84418,2758],{"class":512},[167,84420,60236],{"class":184},[167,84422,898],{"class":512},[167,84424,84266],{"class":184},[167,84426,2758],{"class":512},[167,84428,84271],{"class":184},[167,84430,898],{"class":512},[167,84432,2569],{"class":184},[167,84434,14463],{"class":512},[167,84436,2494],{"class":184},[167,84438,77241],{"class":512},[167,84440,35332],{"class":731},[167,84442,84382],{"class":177},[167,84444,84445],{"class":169,"line":790},[167,84446,741],{"emptyLinePlaceholder":740},[167,84448,84449,84451,84453,84455,84457,84459,84461,84463,84465,84467,84469,84471,84473,84475],{"class":169,"line":796},[167,84450,84257],{"class":184},[167,84452,2758],{"class":512},[167,84454,60236],{"class":184},[167,84456,898],{"class":512},[167,84458,84266],{"class":184},[167,84460,2758],{"class":512},[167,84462,84271],{"class":184},[167,84464,898],{"class":512},[167,84466,1154],{"class":184},[167,84468,14463],{"class":512},[167,84470,2569],{"class":184},[167,84472,77241],{"class":512},[167,84474,35332],{"class":731},[167,84476,84477],{"class":177}," 'Mozilla'\n",[167,84479,84480,84482,84484,84486,84488,84490,84492,84494,84496,84498,84500,84502,84504,84506],{"class":169,"line":802},[167,84481,84257],{"class":184},[167,84483,2758],{"class":512},[167,84485,60236],{"class":184},[167,84487,898],{"class":512},[167,84489,84266],{"class":184},[167,84491,2758],{"class":512},[167,84493,84271],{"class":184},[167,84495,898],{"class":512},[167,84497,1154],{"class":184},[167,84499,14463],{"class":512},[167,84501,2646],{"class":184},[167,84503,77241],{"class":512},[167,84505,35332],{"class":731},[167,84507,84477],{"class":177},[24936,84509,84511],{"id":84510},"_410533-startswith","4.10.5.3.3 startsWith",[19,84513,84514,84517,84518,84523,84524,449,84526],{},[34,84515,84516],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2354,84519,84520],{},[34,84521,84522],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[34,84525,3428],{},[34,84527,68009],{},[26,84529,84531],{"className":79483,"code":84530,"language":79485,"meta":32,"style":32},"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",[34,84532,84533,84545,84564,84569,84589],{"__ignoreMap":32},[167,84534,84535,84537,84540,84542],{"class":169,"line":170},[167,84536,8822],{"class":731},[167,84538,84539],{"class":512}," str1 ",[167,84541,523],{"class":731},[167,84543,84544],{"class":177}," \"Saturday night plans\"\n",[167,84546,84547,84549,84551,84554,84557,84559,84562],{"class":169,"line":191},[167,84548,79520],{"class":512},[167,84550,60236],{"class":173},[167,84552,84553],{"class":512},"(str1.",[167,84555,84556],{"class":173},"startsWith",[167,84558,898],{"class":512},[167,84560,84561],{"class":177},"\"Sat\"",[167,84563,32505],{"class":512},[167,84565,84566],{"class":169,"line":205},[167,84567,84568],{"class":2268},"\u002F\u002F Expected output: true\n",[167,84570,84571,84573,84575,84577,84579,84581,84583,84585,84587],{"class":169,"line":219},[167,84572,79520],{"class":512},[167,84574,60236],{"class":173},[167,84576,84553],{"class":512},[167,84578,84556],{"class":173},[167,84580,898],{"class":512},[167,84582,84561],{"class":177},[167,84584,14463],{"class":512},[167,84586,2281],{"class":184},[167,84588,32505],{"class":512},[167,84590,84591],{"class":169,"line":230},[167,84592,84593],{"class":2268},"\u002F\u002F Expected output: false\n",[26,84595,84597],{"className":52633,"code":84596,"language":52635,"meta":32,"style":32},"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",[34,84598,84599,84604,84609,84613,84618,84623],{"__ignoreMap":32},[167,84600,84601],{"class":169,"line":170},[167,84602,84603],{"class":512},"startsWith(searchString)\n",[167,84605,84606],{"class":169,"line":191},[167,84607,84608],{"class":512},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[167,84610,84611],{"class":169,"line":205},[167,84612,741],{"emptyLinePlaceholder":740},[167,84614,84615],{"class":169,"line":219},[167,84616,84617],{"class":512},"const str3 = 'pink老师上课中'\n",[167,84619,84620],{"class":169,"line":230},[167,84621,84622],{"class":512},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[167,84624,84625],{"class":169,"line":241},[167,84626,84627],{"class":512},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24936,84629,84631],{"id":84630},"_410534-includes","4.10.5.3.4 includes",[19,84633,84634],{},"includes(searchString) includes(searchString, position)",[40,84636,84637],{},[43,84638,84639],{},"searchString:",[19,84641,84642,84643,84645,84646,84651,84652,84657,84658,23526,84661,84664,84665,84668],{},"一个要在 ",[34,84644,3368],{}," 中查找的字符串。",[2439,84647,84650],{"href":84648,"rel":84649},"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",[25887],"不能是正则表达式","。所有非正则表达式的值都会被",[2439,84653,84656],{"href":84654,"rel":84655},"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",[25887],"强制转换为字符串","，因此如果该参数被省略或传入 ",[34,84659,84660],{},"undefined",[34,84662,84663],{},"includes()"," 方法会在字符串中搜索 ",[34,84666,84667],{},"\"undefined\"","，这通常不是你想要的",[40,84670,84671],{"start":191},[43,84672,84673,3059],{},[34,84674,84675],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84677,84678,84679,84682,84683],{},"在字符串中开始搜索 ",[34,84680,84681],{},"searchString"," 的位置。默认值为 ",[34,84684,1154],{},[40,84686,84687],{"start":205},[43,84688,84689],{},"返回值：",[19,84691,84692,84693,84695,84696,84700,84701],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[34,84694,84681],{}," 为空字符串的情况），则返回 ",[2354,84697,84698],{},[34,84699,3428],{}," ，否则返回 ",[2354,84702,84703],{},[34,84704,68009],{},[40,84706,84707],{"start":219},[43,84708,84709],{},"异常：",[19,84711,84209,84712,15822,84714,84718],{},[34,84713,84681],{},[2439,84715,84717],{"href":84648,"rel":84716},[25887],"是一个正则表达式","，则会抛出",[19,84720,84721],{},"只要是有就是true，不需要非得以谁开头结尾",[26,84723,84725],{"className":79483,"code":84724,"language":79485,"meta":32,"style":32},"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",[34,84726,84727,84738,84761,84780,84800,84822,84841],{"__ignoreMap":32},[167,84728,84729,84731,84733,84735],{"class":169,"line":170},[167,84730,8822],{"class":731},[167,84732,81762],{"class":512},[167,84734,523],{"class":731},[167,84736,84737],{"class":177}," \"To be, or not to be, that is the question.\"\n",[167,84739,84740,84742,84744,84747,84750,84752,84755,84758],{"class":169,"line":191},[167,84741,79520],{"class":512},[167,84743,60236],{"class":173},[167,84745,84746],{"class":512},"(str.",[167,84748,84749],{"class":173},"includes",[167,84751,898],{"class":512},[167,84753,84754],{"class":177},"\"To be\"",[167,84756,84757],{"class":512},"))",[167,84759,84760],{"class":2268},"  \u002F\u002F true\n",[167,84762,84763,84765,84767,84769,84771,84773,84776,84778],{"class":169,"line":205},[167,84764,79520],{"class":512},[167,84766,60236],{"class":173},[167,84768,84746],{"class":512},[167,84770,84749],{"class":173},[167,84772,898],{"class":512},[167,84774,84775],{"class":177},"\"question\"",[167,84777,84757],{"class":512},[167,84779,84760],{"class":2268},[167,84781,84782,84784,84786,84788,84790,84792,84795,84797],{"class":169,"line":219},[167,84783,79520],{"class":512},[167,84785,60236],{"class":173},[167,84787,84746],{"class":512},[167,84789,84749],{"class":173},[167,84791,898],{"class":512},[167,84793,84794],{"class":177},"\"nonexistent\"",[167,84796,84757],{"class":512},[167,84798,84799],{"class":2268},"  \u002F\u002F false\n",[167,84801,84802,84804,84806,84808,84810,84812,84814,84816,84818,84820],{"class":169,"line":230},[167,84803,79520],{"class":512},[167,84805,60236],{"class":173},[167,84807,84746],{"class":512},[167,84809,84749],{"class":173},[167,84811,898],{"class":512},[167,84813,84754],{"class":177},[167,84815,14463],{"class":512},[167,84817,2418],{"class":184},[167,84819,84757],{"class":512},[167,84821,84799],{"class":2268},[167,84823,84824,84826,84828,84830,84832,84834,84837,84839],{"class":169,"line":241},[167,84825,79520],{"class":512},[167,84827,60236],{"class":173},[167,84829,84746],{"class":512},[167,84831,84749],{"class":173},[167,84833,898],{"class":512},[167,84835,84836],{"class":177},"\"TO BE\"",[167,84838,84757],{"class":512},[167,84840,84799],{"class":2268},[167,84842,84843,84845,84847,84849,84851,84853,84855,84857],{"class":169,"line":261},[167,84844,79520],{"class":512},[167,84846,60236],{"class":173},[167,84848,84746],{"class":512},[167,84850,84749],{"class":173},[167,84852,898],{"class":512},[167,84854,9682],{"class":177},[167,84856,84757],{"class":512},[167,84858,84760],{"class":2268},[24936,84860,84862],{"id":84861},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,84864,84866],{"className":503,"code":84865,"language":505,"meta":32,"style":32},"\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",[34,84867,84868,84876,84884,84889,84894,84899,84904,84909,84917],{"__ignoreMap":32},[167,84869,84870,84872,84874],{"class":169,"line":170},[167,84871,513],{"class":512},[167,84873,517],{"class":516},[167,84875,537],{"class":512},[167,84877,84878,84880,84882],{"class":169,"line":191},[167,84879,542],{"class":512},[167,84881,53809],{"class":516},[167,84883,537],{"class":512},[167,84885,84886],{"class":169,"line":205},[167,84887,84888],{"class":512},"    const num = 10\n",[167,84890,84891],{"class":169,"line":219},[167,84892,84893],{"class":512},"    \u002F\u002F 强制转换\n",[167,84895,84896],{"class":169,"line":230},[167,84897,84898],{"class":512},"    console.log(String(num))\n",[167,84900,84901],{"class":169,"line":241},[167,84902,84903],{"class":512},"    \u002F\u002F toString()方法转换\n",[167,84905,84906],{"class":169,"line":261},[167,84907,84908],{"class":512},"    console.log(num.toString())\n",[167,84910,84911,84913,84915],{"class":169,"line":773},[167,84912,54412],{"class":512},[167,84914,53809],{"class":516},[167,84916,537],{"class":512},[167,84918,84919,84921,84923],{"class":169,"line":779},[167,84920,575],{"class":512},[167,84922,517],{"class":516},[167,84924,537],{"class":512},[24936,84926,84928],{"id":84927},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84930,84931],{},[3528,84932],{"alt":32,"src":84933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,84935,84937],{"className":52633,"code":84936,"language":52635,"meta":32,"style":32},"\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",[34,84938,84939,84949,84963,84967,84975,84989,85009,85021,85029,85033,85041,85053,85061,85073,85078,85083,85088,85135,85151,85159,85167,85171],{"__ignoreMap":32},[167,84940,84941,84943,84945,84947],{"class":169,"line":170},[167,84942,53297],{"class":512},[167,84944,53300],{"class":516},[167,84946,53303],{"class":173},[167,84948,537],{"class":512},[167,84950,84951,84953,84955,84957,84959,84961],{"class":169,"line":191},[167,84952,513],{"class":512},[167,84954,52635],{"class":516},[167,84956,53314],{"class":173},[167,84958,523],{"class":512},[167,84960,53319],{"class":177},[167,84962,537],{"class":512},[167,84964,84965],{"class":169,"line":205},[167,84966,741],{"emptyLinePlaceholder":740},[167,84968,84969,84971,84973],{"class":169,"line":219},[167,84970,513],{"class":512},[167,84972,53332],{"class":516},[167,84974,537],{"class":512},[167,84976,84977,84979,84981,84983,84985,84987],{"class":169,"line":230},[167,84978,542],{"class":512},[167,84980,53342],{"class":516},[167,84982,53345],{"class":173},[167,84984,523],{"class":512},[167,84986,53350],{"class":177},[167,84988,537],{"class":512},[167,84990,84991,84993,84995,84997,84999,85001,85003,85005,85007],{"class":169,"line":241},[167,84992,542],{"class":512},[167,84994,53342],{"class":516},[167,84996,520],{"class":173},[167,84998,523],{"class":512},[167,85000,53389],{"class":177},[167,85002,53369],{"class":173},[167,85004,523],{"class":512},[167,85006,53396],{"class":177},[167,85008,537],{"class":512},[167,85010,85011,85013,85015,85017,85019],{"class":169,"line":261},[167,85012,542],{"class":512},[167,85014,53405],{"class":516},[167,85016,53408],{"class":512},[167,85018,53405],{"class":516},[167,85020,537],{"class":512},[167,85022,85023,85025,85027],{"class":169,"line":773},[167,85024,575],{"class":512},[167,85026,53332],{"class":516},[167,85028,537],{"class":512},[167,85030,85031],{"class":169,"line":779},[167,85032,741],{"emptyLinePlaceholder":740},[167,85034,85035,85037,85039],{"class":169,"line":785},[167,85036,513],{"class":512},[167,85038,517],{"class":516},[167,85040,537],{"class":512},[167,85042,85043,85045,85047,85049,85051],{"class":169,"line":790},[167,85044,542],{"class":512},[167,85046,53609],{"class":516},[167,85048,57303],{"class":512},[167,85050,53609],{"class":516},[167,85052,537],{"class":512},[167,85054,85055,85057,85059],{"class":169,"line":796},[167,85056,542],{"class":512},[167,85058,53809],{"class":516},[167,85060,537],{"class":512},[167,85062,85063,85065,85068,85070],{"class":169,"line":802},[167,85064,13249],{"class":731},[167,85066,85067],{"class":184}," gift",[167,85069,753],{"class":731},[167,85071,85072],{"class":177}," '50g的茶叶，清洗球'\n",[167,85074,85075],{"class":169,"line":808},[167,85076,85077],{"class":2268},"    \u002F\u002F 1.把字符串拆分为数组\n",[167,85079,85080],{"class":169,"line":814},[167,85081,85082],{"class":2268},"    \u002F\u002F console.log(gift.split(','))\n",[167,85084,85085],{"class":169,"line":820},[167,85086,85087],{"class":2268},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[167,85089,85090,85092,85094,85096,85099,85102,85104,85107,85109,85111,85113,85115,85117,85120,85122,85125,85127,85129,85131,85133],{"class":169,"line":826},[167,85091,13249],{"class":731},[167,85093,75907],{"class":184},[167,85095,753],{"class":731},[167,85097,85098],{"class":512}," gift.",[167,85100,85101],{"class":173},"split",[167,85103,898],{"class":512},[167,85105,85106],{"class":177},"'，'",[167,85108,32833],{"class":512},[167,85110,76032],{"class":173},[167,85112,898],{"class":512},[167,85114,81782],{"class":7246},[167,85116,81785],{"class":731},[167,85118,85119],{"class":177}," `\u003Cspan>【赠品】${",[167,85121,81782],{"class":512},[167,85123,85124],{"class":177},"}\u003C\u002Fspan>\u003Cbr>`",[167,85126,32833],{"class":512},[167,85128,76211],{"class":173},[167,85130,898],{"class":512},[167,85132,76216],{"class":177},[167,85134,873],{"class":512},[167,85136,85137,85139,85141,85143,85145,85147,85149],{"class":169,"line":832},[167,85138,54402],{"class":512},[167,85140,56389],{"class":173},[167,85142,898],{"class":512},[167,85144,83918],{"class":177},[167,85146,76237],{"class":512},[167,85148,523],{"class":731},[167,85150,75973],{"class":512},[167,85152,85153,85155,85157],{"class":169,"line":837},[167,85154,54412],{"class":512},[167,85156,53809],{"class":516},[167,85158,537],{"class":512},[167,85160,85161,85163,85165],{"class":169,"line":842},[167,85162,575],{"class":512},[167,85164,517],{"class":516},[167,85166,537],{"class":512},[167,85168,85169],{"class":169,"line":860},[167,85170,741],{"emptyLinePlaceholder":740},[167,85172,85173,85175,85177],{"class":169,"line":876},[167,85174,575],{"class":512},[167,85176,52635],{"class":516},[167,85178,537],{"class":512},[24024,85180,85182],{"id":85181},"_41054-number","4.10.5.4 Number",[19,85184,85185],{},[3528,85186],{"alt":32,"src":85187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85189,85190],{},"整数也可以进行toFixed来保留小数",[19,85192,85193],{},"比如：",[19,85195,85196],{},"const price=10",[19,85198,85199],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24024,85201,85203],{"id":85202},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85205,85206],{},[3528,85207],{"alt":32,"src":85208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,85210,85212],{"className":52633,"code":85211,"language":52635,"meta":32,"style":32},"\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",[34,85213,85214,85224,85238,85242,85250,85264,85284,85296,85304,85310,85320,85330,85340,85344,85348,85354,85366,85380,85384,85388,85394,85406,85422,85432,85448,85452,85456,85462,85472,85482,85486,85490,85498,85510,85522,85534,85538,85542,85550,85562,85566,85570,85581,85591,85603,85615,85625,85629,85633,85641,85650,85662,85672,85682,85686,85690,85698,85707,85714,85724,85736,85740,85744,85753,85763,85774,85786,85798,85802,85806,85815,85825,85836,85840,85844,85850,85862,85874,85884,85894,85912,85924,85928,85932,85941,85953,85963,85973,85985,85989,85997,86005,86009,86017,86031,86039,86053,86081,86089,86097,86107,86111,86119,86127,86136,86144,86153,86163,86167,86171,86179,86187,86196,86204,86212,86225,86229,86233,86241,86249,86258,86266,86274,86289,86293,86297,86305,86313,86322,86330,86338,86352,86360,86364,86368,86373,86399,86404,86441,86446,86469,86474,86528,86533,86569,86573,86579,86584,86593,86607,86616,86635,86644,86654,86659,86664,86677,86682,86736,86762,86770,86778,86782],{"__ignoreMap":32},[167,85215,85216,85218,85220,85222],{"class":169,"line":170},[167,85217,53297],{"class":512},[167,85219,53300],{"class":516},[167,85221,53303],{"class":173},[167,85223,537],{"class":512},[167,85225,85226,85228,85230,85232,85234,85236],{"class":169,"line":191},[167,85227,513],{"class":512},[167,85229,52635],{"class":516},[167,85231,53314],{"class":173},[167,85233,523],{"class":512},[167,85235,53319],{"class":177},[167,85237,537],{"class":512},[167,85239,85240],{"class":169,"line":205},[167,85241,741],{"emptyLinePlaceholder":740},[167,85243,85244,85246,85248],{"class":169,"line":219},[167,85245,513],{"class":512},[167,85247,53332],{"class":516},[167,85249,537],{"class":512},[167,85251,85252,85254,85256,85258,85260,85262],{"class":169,"line":230},[167,85253,542],{"class":512},[167,85255,53342],{"class":516},[167,85257,53345],{"class":173},[167,85259,523],{"class":512},[167,85261,53350],{"class":177},[167,85263,537],{"class":512},[167,85265,85266,85268,85270,85272,85274,85276,85278,85280,85282],{"class":169,"line":241},[167,85267,542],{"class":512},[167,85269,53342],{"class":516},[167,85271,520],{"class":173},[167,85273,523],{"class":512},[167,85275,53389],{"class":177},[167,85277,53369],{"class":173},[167,85279,523],{"class":512},[167,85281,53396],{"class":177},[167,85283,537],{"class":512},[167,85285,85286,85288,85290,85292,85294],{"class":169,"line":261},[167,85287,542],{"class":512},[167,85289,53405],{"class":516},[167,85291,53408],{"class":512},[167,85293,53405],{"class":516},[167,85295,537],{"class":512},[167,85297,85298,85300,85302],{"class":169,"line":773},[167,85299,542],{"class":512},[167,85301,2113],{"class":516},[167,85303,537],{"class":512},[167,85305,85306,85308],{"class":169,"line":779},[167,85307,8433],{"class":516},[167,85309,17598],{"class":512},[167,85311,85312,85314,85316,85318],{"class":169,"line":785},[167,85313,56685],{"class":184},[167,85315,53435],{"class":512},[167,85317,1154],{"class":184},[167,85319,3359],{"class":512},[167,85321,85322,85324,85326,85328],{"class":169,"line":790},[167,85323,56696],{"class":184},[167,85325,53435],{"class":512},[167,85327,1154],{"class":184},[167,85329,3359],{"class":512},[167,85331,85332,85334,85336,85338],{"class":169,"line":796},[167,85333,74584],{"class":184},[167,85335,53435],{"class":512},[167,85337,62494],{"class":184},[167,85339,3359],{"class":512},[167,85341,85342],{"class":169,"line":802},[167,85343,4231],{"class":512},[167,85345,85346],{"class":169,"line":808},[167,85347,741],{"emptyLinePlaceholder":740},[167,85349,85350,85352],{"class":169,"line":814},[167,85351,64112],{"class":173},[167,85353,17598],{"class":512},[167,85355,85356,85358,85360,85362,85364],{"class":169,"line":820},[167,85357,56761],{"class":184},[167,85359,53435],{"class":512},[167,85361,80562],{"class":184},[167,85363,53490],{"class":731},[167,85365,3359],{"class":512},[167,85367,85368,85370,85372,85374,85376,85378],{"class":169,"line":826},[167,85369,56696],{"class":184},[167,85371,53435],{"class":512},[167,85373,981],{"class":184},[167,85375,53490],{"class":731},[167,85377,53554],{"class":184},[167,85379,3359],{"class":512},[167,85381,85382],{"class":169,"line":832},[167,85383,4231],{"class":512},[167,85385,85386],{"class":169,"line":837},[167,85387,741],{"emptyLinePlaceholder":740},[167,85389,85390,85392],{"class":169,"line":842},[167,85391,80613],{"class":173},[167,85393,17598],{"class":512},[167,85395,85396,85398,85400,85402,85404],{"class":169,"line":860},[167,85397,56685],{"class":184},[167,85399,53435],{"class":512},[167,85401,2775],{"class":184},[167,85403,53490],{"class":731},[167,85405,3359],{"class":512},[167,85407,85408,85410,85412,85414,85416,85418,85420],{"class":169,"line":876},[167,85409,63849],{"class":184},[167,85411,53435],{"class":512},[167,85413,30138],{"class":184},[167,85415,80668],{"class":184},[167,85417,80671],{"class":184},[167,85419,2895],{"class":731},[167,85421,3359],{"class":512},[167,85423,85424,85426,85428,85430],{"class":169,"line":887},[167,85425,56999],{"class":184},[167,85427,53435],{"class":512},[167,85429,53475],{"class":184},[167,85431,3359],{"class":512},[167,85433,85434,85436,85438,85440,85442,85444,85446],{"class":169,"line":892},[167,85435,63966],{"class":184},[167,85437,53435],{"class":512},[167,85439,2418],{"class":184},[167,85441,53490],{"class":731},[167,85443,53519],{"class":184},[167,85445,64233],{"class":184},[167,85447,3359],{"class":512},[167,85449,85450],{"class":169,"line":907},[167,85451,4231],{"class":512},[167,85453,85454],{"class":169,"line":920},[167,85455,741],{"emptyLinePlaceholder":740},[167,85457,85458,85460],{"class":169,"line":933},[167,85459,80731],{"class":173},[167,85461,17598],{"class":512},[167,85463,85464,85466,85468,85470],{"class":169,"line":946},[167,85465,64014],{"class":184},[167,85467,53435],{"class":512},[167,85469,64019],{"class":184},[167,85471,3359],{"class":512},[167,85473,85474,85476,85478,85480],{"class":169,"line":959},[167,85475,56874],{"class":184},[167,85477,53435],{"class":512},[167,85479,63807],{"class":184},[167,85481,3359],{"class":512},[167,85483,85484],{"class":169,"line":964},[167,85485,4231],{"class":512},[167,85487,85488],{"class":169,"line":987},[167,85489,741],{"emptyLinePlaceholder":740},[167,85491,85492,85494,85496],{"class":169,"line":993},[167,85493,80613],{"class":173},[167,85495,57604],{"class":516},[167,85497,17598],{"class":512},[167,85499,85500,85502,85504,85506,85508],{"class":169,"line":998},[167,85501,56761],{"class":184},[167,85503,53435],{"class":512},[167,85505,2812],{"class":184},[167,85507,53490],{"class":731},[167,85509,3359],{"class":512},[167,85511,85512,85514,85516,85518,85520],{"class":169,"line":1010},[167,85513,56775],{"class":184},[167,85515,53435],{"class":512},[167,85517,2812],{"class":184},[167,85519,53490],{"class":731},[167,85521,3359],{"class":512},[167,85523,85524,85526,85528,85530,85532],{"class":169,"line":1022},[167,85525,63739],{"class":184},[167,85527,53435],{"class":512},[167,85529,2519],{"class":184},[167,85531,53490],{"class":731},[167,85533,3359],{"class":512},[167,85535,85536],{"class":169,"line":1027},[167,85537,4231],{"class":512},[167,85539,85540],{"class":169,"line":1032},[167,85541,741],{"emptyLinePlaceholder":740},[167,85543,85544,85546,85548],{"class":169,"line":1049},[167,85545,80613],{"class":173},[167,85547,64293],{"class":173},[167,85549,17598],{"class":512},[167,85551,85552,85554,85556,85558,85560],{"class":169,"line":10005},[167,85553,56761],{"class":184},[167,85555,53435],{"class":512},[167,85557,3776],{"class":184},[167,85559,53490],{"class":731},[167,85561,3359],{"class":512},[167,85563,85564],{"class":169,"line":10011},[167,85565,4231],{"class":512},[167,85567,85568],{"class":169,"line":10038},[167,85569,741],{"emptyLinePlaceholder":740},[167,85571,85572,85574,85576,85579],{"class":169,"line":10043},[167,85573,80613],{"class":173},[167,85575,64293],{"class":173},[167,85577,85578],{"class":173}," .tag",[167,85580,17598],{"class":512},[167,85582,85583,85585,85587,85589],{"class":169,"line":10049},[167,85584,56999],{"class":184},[167,85586,53435],{"class":512},[167,85588,62858],{"class":184},[167,85590,3359],{"class":512},[167,85592,85593,85595,85597,85599,85601],{"class":169,"line":10061},[167,85594,56685],{"class":184},[167,85596,53435],{"class":512},[167,85598,2287],{"class":184},[167,85600,53490],{"class":731},[167,85602,3359],{"class":512},[167,85604,85605,85607,85609,85611,85613],{"class":169,"line":10073},[167,85606,56912],{"class":184},[167,85608,53435],{"class":512},[167,85610,2698],{"class":184},[167,85612,53490],{"class":731},[167,85614,3359],{"class":512},[167,85616,85617,85619,85621,85623],{"class":169,"line":10085},[167,85618,59405],{"class":184},[167,85620,53435],{"class":512},[167,85622,64059],{"class":184},[167,85624,3359],{"class":512},[167,85626,85627],{"class":169,"line":11744},[167,85628,4231],{"class":512},[167,85630,85631],{"class":169,"line":11769},[167,85632,741],{"emptyLinePlaceholder":740},[167,85634,85635,85637,85639],{"class":169,"line":11792},[167,85636,80613],{"class":173},[167,85638,80904],{"class":173},[167,85640,33471],{"class":512},[167,85642,85643,85645,85648],{"class":169,"line":11816},[167,85644,80613],{"class":173},[167,85646,85647],{"class":173}," .sub-total",[167,85649,17598],{"class":512},[167,85651,85652,85654,85656,85658,85660],{"class":169,"line":11821},[167,85653,56912],{"class":184},[167,85655,53435],{"class":512},[167,85657,2850],{"class":184},[167,85659,53490],{"class":731},[167,85661,3359],{"class":512},[167,85663,85664,85666,85668,85670],{"class":169,"line":11826},[167,85665,59405],{"class":184},[167,85667,53435],{"class":512},[167,85669,80927],{"class":184},[167,85671,3359],{"class":512},[167,85673,85674,85676,85678,85680],{"class":169,"line":11831},[167,85675,63826],{"class":184},[167,85677,53435],{"class":512},[167,85679,2418],{"class":184},[167,85681,3359],{"class":512},[167,85683,85684],{"class":169,"line":11840},[167,85685,4231],{"class":512},[167,85687,85688],{"class":169,"line":11845},[167,85689,741],{"emptyLinePlaceholder":740},[167,85691,85692,85694,85696],{"class":169,"line":11851},[167,85693,80613],{"class":173},[167,85695,80944],{"class":173},[167,85697,33471],{"class":512},[167,85699,85700,85702,85705],{"class":169,"line":11872},[167,85701,80613],{"class":173},[167,85703,85704],{"class":173}," .sub-total::before",[167,85706,33471],{"class":512},[167,85708,85709,85712],{"class":169,"line":11878},[167,85710,85711],{"class":173},"    .amount::before",[167,85713,17598],{"class":512},[167,85715,85716,85718,85720,85722],{"class":169,"line":11892},[167,85717,80951],{"class":184},[167,85719,53435],{"class":512},[167,85721,80956],{"class":177},[167,85723,3359],{"class":512},[167,85725,85726,85728,85730,85732,85734],{"class":169,"line":11898},[167,85727,56912],{"class":184},[167,85729,53435],{"class":512},[167,85731,2698],{"class":184},[167,85733,53490],{"class":731},[167,85735,3359],{"class":512},[167,85737,85738],{"class":169,"line":11925},[167,85739,4231],{"class":512},[167,85741,85742],{"class":169,"line":11934},[167,85743,741],{"emptyLinePlaceholder":740},[167,85745,85746,85748,85751],{"class":169,"line":11940},[167,85747,80613],{"class":173},[167,85749,85750],{"class":173}," .spec",[167,85752,17598],{"class":512},[167,85754,85755,85757,85759,85761],{"class":169,"line":11948},[167,85756,63826],{"class":184},[167,85758,53435],{"class":512},[167,85760,2287],{"class":184},[167,85762,3359],{"class":512},[167,85764,85765,85767,85769,85772],{"class":169,"line":11953},[167,85766,59405],{"class":184},[167,85768,53435],{"class":512},[167,85770,85771],{"class":184},"#888",[167,85773,3359],{"class":512},[167,85775,85776,85778,85780,85782,85784],{"class":169,"line":18630},[167,85777,56912],{"class":184},[167,85779,53435],{"class":512},[167,85781,2749],{"class":184},[167,85783,53490],{"class":731},[167,85785,3359],{"class":512},[167,85787,85788,85790,85792,85794,85796],{"class":169,"line":18636},[167,85789,63989],{"class":184},[167,85791,53435],{"class":512},[167,85793,2900],{"class":184},[167,85795,53490],{"class":731},[167,85797,3359],{"class":512},[167,85799,85800],{"class":169,"line":18659},[167,85801,4231],{"class":512},[167,85803,85804],{"class":169,"line":18665},[167,85805,741],{"emptyLinePlaceholder":740},[167,85807,85808,85810,85813],{"class":169,"line":18688},[167,85809,80613],{"class":173},[167,85811,85812],{"class":173}," .count",[167,85814,17598],{"class":512},[167,85816,85817,85819,85821,85823],{"class":169,"line":18702},[167,85818,63826],{"class":184},[167,85820,53435],{"class":512},[167,85822,2418],{"class":184},[167,85824,3359],{"class":512},[167,85826,85827,85829,85831,85834],{"class":169,"line":18722},[167,85828,59405],{"class":184},[167,85830,53435],{"class":512},[167,85832,85833],{"class":184},"#aaa",[167,85835,3359],{"class":512},[167,85837,85838],{"class":169,"line":18728},[167,85839,4231],{"class":512},[167,85841,85842],{"class":169,"line":18739},[167,85843,741],{"emptyLinePlaceholder":740},[167,85845,85846,85848],{"class":169,"line":18762},[167,85847,74463],{"class":173},[167,85849,17598],{"class":512},[167,85851,85852,85854,85856,85858,85860],{"class":169,"line":18784},[167,85853,56761],{"class":184},[167,85855,53435],{"class":512},[167,85857,80562],{"class":184},[167,85859,53490],{"class":731},[167,85861,3359],{"class":512},[167,85863,85864,85866,85868,85870,85872],{"class":169,"line":18789},[167,85865,56696],{"class":184},[167,85867,53435],{"class":512},[167,85869,1154],{"class":184},[167,85871,53554],{"class":184},[167,85873,3359],{"class":512},[167,85875,85876,85878,85880,85882],{"class":169,"line":18795},[167,85877,56999],{"class":184},[167,85879,53435],{"class":512},[167,85881,53475],{"class":184},[167,85883,3359],{"class":512},[167,85885,85886,85888,85890,85892],{"class":169,"line":18809},[167,85887,57010],{"class":184},[167,85889,53435],{"class":512},[167,85891,53578],{"class":184},[167,85893,3359],{"class":512},[167,85895,85896,85899,85901,85903,85905,85907,85910],{"class":169,"line":18822},[167,85897,85898],{"class":184},"      border-top",[167,85900,53435],{"class":512},[167,85902,2418],{"class":184},[167,85904,53490],{"class":731},[167,85906,53519],{"class":184},[167,85908,85909],{"class":184}," #4e4e4e",[167,85911,3359],{"class":512},[167,85913,85914,85916,85918,85920,85922],{"class":169,"line":18827},[167,85915,56685],{"class":184},[167,85917,53435],{"class":512},[167,85919,2900],{"class":184},[167,85921,53490],{"class":731},[167,85923,3359],{"class":512},[167,85925,85926],{"class":169,"line":18841},[167,85927,4231],{"class":512},[167,85929,85930],{"class":169,"line":18846},[167,85931,741],{"emptyLinePlaceholder":740},[167,85933,85934,85936,85939],{"class":169,"line":18852},[167,85935,74463],{"class":173},[167,85937,85938],{"class":173}," .amount",[167,85940,17598],{"class":512},[167,85942,85943,85945,85947,85949,85951],{"class":169,"line":18857},[167,85944,56912],{"class":184},[167,85946,53435],{"class":512},[167,85948,2850],{"class":184},[167,85950,53490],{"class":731},[167,85952,3359],{"class":512},[167,85954,85955,85957,85959,85961],{"class":169,"line":18871},[167,85956,59405],{"class":184},[167,85958,53435],{"class":512},[167,85960,80927],{"class":184},[167,85962,3359],{"class":512},[167,85964,85965,85967,85969,85971],{"class":169,"line":18876},[167,85966,64323],{"class":184},[167,85968,53435],{"class":512},[167,85970,53487],{"class":184},[167,85972,3359],{"class":512},[167,85974,85975,85977,85979,85981,85983],{"class":169,"line":18881},[167,85976,63739],{"class":184},[167,85978,53435],{"class":512},[167,85980,2856],{"class":184},[167,85982,53490],{"class":731},[167,85984,3359],{"class":512},[167,85986,85987],{"class":169,"line":18895},[167,85988,4231],{"class":512},[167,85990,85991,85993,85995],{"class":169,"line":18907},[167,85992,54412],{"class":512},[167,85994,2113],{"class":516},[167,85996,537],{"class":512},[167,85998,85999,86001,86003],{"class":169,"line":18912},[167,86000,575],{"class":512},[167,86002,53332],{"class":516},[167,86004,537],{"class":512},[167,86006,86007],{"class":169,"line":18925},[167,86008,741],{"emptyLinePlaceholder":740},[167,86010,86011,86013,86015],{"class":169,"line":18930},[167,86012,513],{"class":512},[167,86014,517],{"class":516},[167,86016,537],{"class":512},[167,86018,86019,86021,86023,86025,86027,86029],{"class":169,"line":18935},[167,86020,542],{"class":512},[167,86022,53609],{"class":516},[167,86024,55479],{"class":173},[167,86026,523],{"class":512},[167,86028,64597],{"class":177},[167,86030,537],{"class":512},[167,86032,86033,86035,86037],{"class":169,"line":18940},[167,86034,54412],{"class":512},[167,86036,53609],{"class":516},[167,86038,537],{"class":512},[167,86040,86041,86043,86045,86047,86049,86051],{"class":169,"line":18953},[167,86042,542],{"class":512},[167,86044,53609],{"class":516},[167,86046,55479],{"class":173},[167,86048,523],{"class":512},[167,86050,64569],{"class":177},[167,86052,537],{"class":512},[167,86054,86055,86057,86059,86062,86064,86066,86068,86071,86073,86075,86077,86079],{"class":169,"line":18958},[167,86056,53339],{"class":512},[167,86058,53609],{"class":516},[167,86060,86061],{"class":512},">合计：\u003C",[167,86063,167],{"class":516},[167,86065,55479],{"class":173},[167,86067,523],{"class":512},[167,86069,86070],{"class":177},"\"amount\"",[167,86072,57303],{"class":512},[167,86074,167],{"class":516},[167,86076,57303],{"class":512},[167,86078,53609],{"class":516},[167,86080,537],{"class":512},[167,86082,86083,86085,86087],{"class":169,"line":34636},[167,86084,54412],{"class":512},[167,86086,53609],{"class":516},[167,86088,537],{"class":512},[167,86090,86091,86093,86095],{"class":169,"line":34642},[167,86092,542],{"class":512},[167,86094,53809],{"class":516},[167,86096,537],{"class":512},[167,86098,86099,86101,86103,86105],{"class":169,"line":34648},[167,86100,13249],{"class":731},[167,86102,81364],{"class":184},[167,86104,753],{"class":731},[167,86106,57436],{"class":512},[167,86108,86109],{"class":169,"line":34654},[167,86110,81373],{"class":512},[167,86112,86113,86115,86117],{"class":169,"line":34660},[167,86114,81378],{"class":512},[167,86116,81381],{"class":177},[167,86118,33471],{"class":512},[167,86120,86121,86123,86125],{"class":169,"line":34671},[167,86122,81388],{"class":512},[167,86124,81391],{"class":177},[167,86126,33471],{"class":512},[167,86128,86129,86131,86134],{"class":169,"line":34677},[167,86130,81398],{"class":512},[167,86132,86133],{"class":184},"289.9",[167,86135,33471],{"class":512},[167,86137,86138,86140,86142],{"class":169,"line":34697},[167,86139,81408],{"class":512},[167,86141,81411],{"class":177},[167,86143,33471],{"class":512},[167,86145,86146,86149,86151],{"class":169,"line":34703},[167,86147,86148],{"class":512},"        count: ",[167,86150,2287],{"class":184},[167,86152,33471],{"class":512},[167,86154,86155,86158,86161],{"class":169,"line":34714},[167,86156,86157],{"class":512},"        spec: { color: ",[167,86159,86160],{"class":177},"'白色'",[167,86162,57593],{"class":512},[167,86164,86165],{"class":169,"line":34720},[167,86166,79880],{"class":512},[167,86168,86169],{"class":169,"line":34726},[167,86170,81373],{"class":512},[167,86172,86173,86175,86177],{"class":169,"line":34732},[167,86174,81378],{"class":512},[167,86176,81472],{"class":177},[167,86178,33471],{"class":512},[167,86180,86181,86183,86185],{"class":169,"line":34738},[167,86182,81388],{"class":512},[167,86184,81481],{"class":177},[167,86186,33471],{"class":512},[167,86188,86189,86191,86194],{"class":169,"line":34744},[167,86190,81398],{"class":512},[167,86192,86193],{"class":184},"109.8",[167,86195,33471],{"class":512},[167,86197,86198,86200,86202],{"class":169,"line":34750},[167,86199,81408],{"class":512},[167,86201,81499],{"class":177},[167,86203,33471],{"class":512},[167,86205,86206,86208,86210],{"class":169,"line":34756},[167,86207,86148],{"class":512},[167,86209,2281],{"class":184},[167,86211,33471],{"class":512},[167,86213,86214,86217,86219,86221,86223],{"class":169,"line":34776},[167,86215,86216],{"class":512},"        spec: { size: ",[167,86218,83890],{"class":177},[167,86220,57453],{"class":512},[167,86222,83895],{"class":177},[167,86224,57593],{"class":512},[167,86226,86227],{"class":169,"line":34782},[167,86228,79880],{"class":512},[167,86230,86231],{"class":169,"line":34798},[167,86232,81373],{"class":512},[167,86234,86235,86237,86239],{"class":169,"line":34804},[167,86236,81378],{"class":512},[167,86238,81516],{"class":177},[167,86240,33471],{"class":512},[167,86242,86243,86245,86247],{"class":169,"line":34818},[167,86244,81388],{"class":512},[167,86246,81525],{"class":177},[167,86248,33471],{"class":512},[167,86250,86251,86253,86256],{"class":169,"line":34824},[167,86252,81398],{"class":512},[167,86254,86255],{"class":184},"488",[167,86257,33471],{"class":512},[167,86259,86260,86262,86264],{"class":169,"line":34839},[167,86261,81408],{"class":512},[167,86263,81543],{"class":177},[167,86265,33471],{"class":512},[167,86267,86268,86270,86272],{"class":169,"line":34845},[167,86269,86148],{"class":512},[167,86271,2418],{"class":184},[167,86273,33471],{"class":512},[167,86275,86276,86278,86281,86284,86287],{"class":169,"line":34854},[167,86277,86157],{"class":512},[167,86279,86280],{"class":177},"'青色'",[167,86282,86283],{"class":512},", sum: ",[167,86285,86286],{"class":177},"'一大四小'",[167,86288,57593],{"class":512},[167,86290,86291],{"class":169,"line":34860},[167,86292,79880],{"class":512},[167,86294,86295],{"class":169,"line":34869},[167,86296,81373],{"class":512},[167,86298,86299,86301,86303],{"class":169,"line":34875},[167,86300,81378],{"class":512},[167,86302,81560],{"class":177},[167,86304,33471],{"class":512},[167,86306,86307,86309,86311],{"class":169,"line":34881},[167,86308,81388],{"class":512},[167,86310,81569],{"class":177},[167,86312,33471],{"class":512},[167,86314,86315,86317,86320],{"class":169,"line":34890},[167,86316,81398],{"class":512},[167,86318,86319],{"class":184},"139",[167,86321,33471],{"class":512},[167,86323,86324,86326,86328],{"class":169,"line":34896},[167,86325,81408],{"class":512},[167,86327,81587],{"class":177},[167,86329,33471],{"class":512},[167,86331,86332,86334,86336],{"class":169,"line":34907},[167,86333,86148],{"class":512},[167,86335,2418],{"class":184},[167,86337,33471],{"class":512},[167,86339,86340,86342,86345,86347,86350],{"class":169,"line":34913},[167,86341,86216],{"class":512},[167,86343,86344],{"class":177},"'小号'",[167,86346,57453],{"class":512},[167,86348,86349],{"class":177},"'紫色'",[167,86351,57459],{"class":512},[167,86353,86354,86357],{"class":169,"line":34932},[167,86355,86356],{"class":512},"        gift: ",[167,86358,86359],{"class":177},"'50g茶叶,清洗球'\n",[167,86361,86362],{"class":169,"line":34938},[167,86363,54393],{"class":512},[167,86365,86366],{"class":169,"line":34949},[167,86367,55102],{"class":512},[167,86369,86370],{"class":169,"line":34955},[167,86371,86372],{"class":2268},"    \u002F\u002F  1.根据数据渲染页面\n",[167,86374,86375,86377,86379,86381,86383,86385,86387,86389,86391,86393,86395,86397],{"class":169,"line":34975},[167,86376,54402],{"class":512},[167,86378,56389],{"class":173},[167,86380,898],{"class":512},[167,86382,81888],{"class":177},[167,86384,76237],{"class":512},[167,86386,523],{"class":731},[167,86388,82035],{"class":512},[167,86390,76032],{"class":173},[167,86392,898],{"class":512},[167,86394,81782],{"class":7246},[167,86396,81785],{"class":731},[167,86398,17598],{"class":512},[167,86400,86401],{"class":169,"line":34991},[167,86402,86403],{"class":2268},"      \u002F\u002F 对象解构\n",[167,86405,86406,86408,86410,86412,86414,86416,86418,86421,86423,86425,86427,86430,86432,86435,86437,86439],{"class":169,"line":34997},[167,86407,60217],{"class":731},[167,86409,81794],{"class":512},[167,86411,81807],{"class":184},[167,86413,14463],{"class":512},[167,86415,81797],{"class":184},[167,86417,14463],{"class":512},[167,86419,86420],{"class":184},"count",[167,86422,14463],{"class":512},[167,86424,81802],{"class":184},[167,86426,14463],{"class":512},[167,86428,86429],{"class":184},"spec",[167,86431,14463],{"class":512},[167,86433,86434],{"class":184},"gift",[167,86436,81810],{"class":512},[167,86438,523],{"class":731},[167,86440,81815],{"class":512},[167,86442,86443],{"class":169,"line":35011},[167,86444,86445],{"class":2268},"      \u002F\u002F 规格文字模块处理\n",[167,86447,86448,86450,86453,86455,86457,86459,86461,86463,86465,86467],{"class":169,"line":35017},[167,86449,60217],{"class":731},[167,86451,86452],{"class":184}," text",[167,86454,753],{"class":731},[167,86456,83925],{"class":512},[167,86458,83928],{"class":173},[167,86460,83931],{"class":512},[167,86462,76211],{"class":173},[167,86464,898],{"class":512},[167,86466,83938],{"class":177},[167,86468,873],{"class":512},[167,86470,86471],{"class":169,"line":35023},[167,86472,86473],{"class":2268},"      \u002F\u002F 处理赠品模块\n",[167,86475,86476,86478,86480,86482,86485,86487,86489,86491,86493,86496,86498,86500,86502,86504,86506,86509,86511,86514,86516,86518,86520,86522,86524,86526],{"class":169,"line":35034},[167,86477,60217],{"class":731},[167,86479,75907],{"class":184},[167,86481,753],{"class":731},[167,86483,86484],{"class":512}," gift ",[167,86486,3185],{"class":731},[167,86488,85098],{"class":512},[167,86490,85101],{"class":173},[167,86492,898],{"class":512},[167,86494,86495],{"class":177},"','",[167,86497,32833],{"class":512},[167,86499,76032],{"class":173},[167,86501,898],{"class":512},[167,86503,81782],{"class":7246},[167,86505,81785],{"class":731},[167,86507,86508],{"class":177}," `\u003Cspan class=\"tag\">【赠品】${",[167,86510,81782],{"class":512},[167,86512,86513],{"class":177},"}\u003C\u002Fspan>`",[167,86515,32833],{"class":512},[167,86517,76211],{"class":173},[167,86519,898],{"class":512},[167,86521,76216],{"class":177},[167,86523,15741],{"class":512},[167,86525,3059],{"class":731},[167,86527,72092],{"class":177},[167,86529,86530],{"class":169,"line":35040},[167,86531,86532],{"class":2268},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[167,86534,86535,86537,86540,86542,86545,86547,86549,86551,86554,86556,86558,86560,86563,86565,86567],{"class":169,"line":35046},[167,86536,60217],{"class":731},[167,86538,86539],{"class":184}," subtotal",[167,86541,753],{"class":731},[167,86543,86544],{"class":512}," ((price ",[167,86546,2655],{"class":731},[167,86548,7784],{"class":184},[167,86550,8548],{"class":731},[167,86552,86553],{"class":512}," count) ",[167,86555,2784],{"class":731},[167,86557,7784],{"class":184},[167,86559,32833],{"class":512},[167,86561,86562],{"class":173},"toFixed",[167,86564,898],{"class":512},[167,86566,2287],{"class":184},[167,86568,873],{"class":512},[167,86570,86571],{"class":169,"line":35056},[167,86572,741],{"emptyLinePlaceholder":740},[167,86574,86575,86577],{"class":169,"line":35062},[167,86576,75970],{"class":731},[167,86578,72156],{"class":177},[167,86580,86581],{"class":169,"line":35073},[167,86582,86583],{"class":177},"        \u003Cdiv class=\"item\">\n",[167,86585,86586,86589,86591],{"class":169,"line":35079},[167,86587,86588],{"class":177},"          \u003Cimg src=\"${",[167,86590,81807],{"class":512},[167,86592,81839],{"class":177},[167,86594,86595,86598,86600,86603,86605],{"class":169,"line":35089},[167,86596,86597],{"class":177},"          \u003Cp class=\"name\">${",[167,86599,81797],{"class":512},[167,86601,86602],{"class":177},"}${",[167,86604,3368],{"class":512},[167,86606,81849],{"class":177},[167,86608,86609,86612,86614],{"class":169,"line":35094},[167,86610,86611],{"class":177},"          \u003Cp class=\"spec\">${",[167,86613,31],{"class":512},[167,86615,81849],{"class":177},[167,86617,86618,86621,86623,86625,86627,86629,86631,86633],{"class":169,"line":35100},[167,86619,86620],{"class":177},"          \u003Cp class=\"price\">${",[167,86622,81802],{"class":512},[167,86624,2758],{"class":177},[167,86626,86562],{"class":173},[167,86628,898],{"class":177},[167,86630,2287],{"class":184},[167,86632,2629],{"class":177},[167,86634,81849],{"class":177},[167,86636,86637,86640,86642],{"class":169,"line":35149},[167,86638,86639],{"class":177},"          \u003Cp class=\"count\">x${",[167,86641,86420],{"class":512},[167,86643,81849],{"class":177},[167,86645,86646,86649,86652],{"class":169,"line":35196},[167,86647,86648],{"class":177},"          \u003Cp class=\"sub-total\">${",[167,86650,86651],{"class":512},"subtotal",[167,86653,81849],{"class":177},[167,86655,86656],{"class":169,"line":35201},[167,86657,86658],{"class":177},"        \u003C\u002Fdiv> \n",[167,86660,86661],{"class":169,"line":35207},[167,86662,86663],{"class":177},"             `\n",[167,86665,86666,86669,86671,86673,86675],{"class":169,"line":35226},[167,86667,86668],{"class":512},"    }).",[167,86670,76211],{"class":173},[167,86672,898],{"class":512},[167,86674,76216],{"class":177},[167,86676,873],{"class":512},[167,86678,86679],{"class":169,"line":35232},[167,86680,86681],{"class":2268},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[167,86683,86684,86686,86688,86690,86692,86695,86697,86700,86702,86704,86706,86709,86712,86714,86717,86719,86721,86723,86726,86728,86730,86732,86734],{"class":169,"line":35252},[167,86685,13249],{"class":731},[167,86687,64774],{"class":184},[167,86689,753],{"class":731},[167,86691,82035],{"class":512},[167,86693,86694],{"class":173},"reduce",[167,86696,4420],{"class":512},[167,86698,86699],{"class":7246},"prev",[167,86701,14463],{"class":512},[167,86703,81782],{"class":7246},[167,86705,15741],{"class":512},[167,86707,86708],{"class":731},"=>",[167,86710,86711],{"class":512}," prev ",[167,86713,2681],{"class":731},[167,86715,86716],{"class":512}," (item.price ",[167,86718,2655],{"class":731},[167,86720,7784],{"class":184},[167,86722,8548],{"class":731},[167,86724,86725],{"class":512}," item.count) ",[167,86727,2784],{"class":731},[167,86729,7784],{"class":184},[167,86731,14463],{"class":512},[167,86733,1154],{"class":184},[167,86735,873],{"class":512},[167,86737,86738,86740,86742,86744,86747,86749,86751,86754,86756,86758,86760],{"class":169,"line":35258},[167,86739,54402],{"class":512},[167,86741,56389],{"class":173},[167,86743,898],{"class":512},[167,86745,86746],{"class":177},"'.amount'",[167,86748,76237],{"class":512},[167,86750,523],{"class":731},[167,86752,86753],{"class":512}," total.",[167,86755,86562],{"class":173},[167,86757,898],{"class":512},[167,86759,2287],{"class":184},[167,86761,873],{"class":512},[167,86763,86764,86766,86768],{"class":169,"line":35264},[167,86765,54412],{"class":512},[167,86767,53809],{"class":516},[167,86769,537],{"class":512},[167,86771,86772,86774,86776],{"class":169,"line":35274},[167,86773,575],{"class":512},[167,86775,517],{"class":516},[167,86777,537],{"class":512},[167,86779,86780],{"class":169,"line":35279},[167,86781,741],{"emptyLinePlaceholder":740},[167,86783,86784,86786,86788],{"class":169,"line":35285},[167,86785,575],{"class":512},[167,86787,52635],{"class":516},[167,86789,537],{"class":512},[14,86791,86793],{"id":86792},"_411-编程思想","4.11 编程思想",[494,86795,86797],{"id":86796},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86799,86800,86803],{},[2354,86801,86802],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86805,86806],{},"调用就可以了",[19,86808,86809],{},[3528,86810],{"alt":32,"src":86811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[494,86813,86815],{"id":86814},"_4112-面向对象","4.11.2 面向对象",[19,86817,86818],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86820,86821],{},[3528,86822],{"alt":32,"src":86823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86825,86826],{},"面向对象的特性：",[3205,86828,86829,86832,86835],{},[43,86830,86831],{},"封装性",[43,86833,86834],{},"继承性",[43,86836,86837],{},"多态性",[494,86839,86841],{"id":86840},"_4113-两者比较","4.11.3 两者比较",[19,86843,86844],{},[3528,86845],{"alt":32,"src":86846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86848,86850],{"id":86849},"_412-构造函数回顾","4.12 构造函数回顾",[19,86852,86853],{},[3528,86854],{"alt":32,"src":86855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86857,86858],{},[3528,86859],{"alt":32,"src":86860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86862,86863],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86865,86866],{},[3528,86867],{"alt":32,"src":86868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86870,86872],{"id":86871},"_413-原型","4.13 原型",[494,86874,86876],{"id":86875},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86878,86879],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86881,86882],{},[3528,86883],{"alt":32,"src":86884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86886,86887],{},[3528,86888],{"alt":32,"src":86889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86891,86892],{},"原型是构造函数的属性，它也是一个对象",[19,86894,86895],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86897,86898],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,86900,86902],{"className":503,"code":86901,"language":505,"meta":32,"style":32},"\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",[34,86903,86904,86912,86917,86925,86930,86935,86940,86945,86950,86954,86958,86962,86967,86972,86976,86981,86986,86991,86996,87001,87005,87013],{"__ignoreMap":32},[167,86905,86906,86908,86910],{"class":169,"line":170},[167,86907,513],{"class":512},[167,86909,517],{"class":516},[167,86911,537],{"class":512},[167,86913,86914],{"class":169,"line":191},[167,86915,86916],{"class":2268},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[167,86918,86919,86921,86923],{"class":169,"line":205},[167,86920,542],{"class":512},[167,86922,53809],{"class":516},[167,86924,537],{"class":512},[167,86926,86927],{"class":169,"line":219},[167,86928,86929],{"class":512},"    function Star(uname, age) {\n",[167,86931,86932],{"class":169,"line":230},[167,86933,86934],{"class":512},"      this.uname = uname,\n",[167,86936,86937],{"class":169,"line":241},[167,86938,86939],{"class":512},"        this.age = age\n",[167,86941,86942],{"class":169,"line":261},[167,86943,86944],{"class":512},"      \u002F\u002F this.sing = function () {\n",[167,86946,86947],{"class":169,"line":773},[167,86948,86949],{"class":512},"      \u002F\u002F   console.log('唱歌')\n",[167,86951,86952],{"class":169,"line":779},[167,86953,741],{"emptyLinePlaceholder":740},[167,86955,86956],{"class":169,"line":785},[167,86957,62026],{"class":512},[167,86959,86960],{"class":169,"line":790},[167,86961,4231],{"class":512},[167,86963,86964],{"class":169,"line":796},[167,86965,86966],{"class":512},"    Star.prototype.sing = function () {\n",[167,86968,86969],{"class":169,"line":802},[167,86970,86971],{"class":512},"      console.log('唱歌')\n",[167,86973,86974],{"class":169,"line":808},[167,86975,4231],{"class":512},[167,86977,86978],{"class":169,"line":814},[167,86979,86980],{"class":512},"    \u002F\u002F console.dir(Star.prototype)\n",[167,86982,86983],{"class":169,"line":820},[167,86984,86985],{"class":512},"    const pink = new Star('pink', 18)\n",[167,86987,86988],{"class":169,"line":826},[167,86989,86990],{"class":512},"    const red = new Star('red', 20)\n",[167,86992,86993],{"class":169,"line":832},[167,86994,86995],{"class":512},"    pink.sing()\n",[167,86997,86998],{"class":169,"line":837},[167,86999,87000],{"class":512},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[167,87002,87003],{"class":169,"line":842},[167,87004,741],{"emptyLinePlaceholder":740},[167,87006,87007,87009,87011],{"class":169,"line":860},[167,87008,54412],{"class":512},[167,87010,53809],{"class":516},[167,87012,537],{"class":512},[167,87014,87015,87017,87019],{"class":169,"line":876},[167,87016,575],{"class":512},[167,87018,517],{"class":516},[167,87020,537],{"class":512},[19,87022,87023],{},[3528,87024],{"alt":32,"src":87025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,87027,87029],{"className":503,"code":87028,"language":505,"meta":32,"style":32},"\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",[34,87030,87031,87039,87047,87052,87057,87062,87067,87071,87076,87081,87086,87090,87095,87099,87103,87108,87112,87120],{"__ignoreMap":32},[167,87032,87033,87035,87037],{"class":169,"line":170},[167,87034,513],{"class":512},[167,87036,517],{"class":516},[167,87038,537],{"class":512},[167,87040,87041,87043,87045],{"class":169,"line":191},[167,87042,542],{"class":512},[167,87044,53809],{"class":516},[167,87046,537],{"class":512},[167,87048,87049],{"class":169,"line":205},[167,87050,87051],{"class":512},"    let that\n",[167,87053,87054],{"class":169,"line":219},[167,87055,87056],{"class":512},"    function Star(uname) {\n",[167,87058,87059],{"class":169,"line":230},[167,87060,87061],{"class":512},"      this.uname = uname\n",[167,87063,87064],{"class":169,"line":241},[167,87065,87066],{"class":512},"      that = this\n",[167,87068,87069],{"class":169,"line":261},[167,87070,4231],{"class":512},[167,87072,87073],{"class":169,"line":773},[167,87074,87075],{"class":512},"    \u002F\u002F 实例对象是 ldh\n",[167,87077,87078],{"class":169,"line":779},[167,87079,87080],{"class":512},"    const ldh = new Star('刘德华')\n",[167,87082,87083],{"class":169,"line":785},[167,87084,87085],{"class":512},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[167,87087,87088],{"class":169,"line":790},[167,87089,741],{"emptyLinePlaceholder":740},[167,87091,87092],{"class":169,"line":796},[167,87093,87094],{"class":512},"    Star.sing = function () {\n",[167,87096,87097],{"class":169,"line":802},[167,87098,86971],{"class":512},[167,87100,87101],{"class":169,"line":808},[167,87102,4231],{"class":512},[167,87104,87105],{"class":169,"line":814},[167,87106,87107],{"class":512},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[167,87109,87110],{"class":169,"line":820},[167,87111,741],{"emptyLinePlaceholder":740},[167,87113,87114,87116,87118],{"class":169,"line":826},[167,87115,54412],{"class":512},[167,87117,53809],{"class":516},[167,87119,537],{"class":512},[167,87121,87122,87124,87126],{"class":169,"line":832},[167,87123,575],{"class":512},[167,87125,517],{"class":516},[167,87127,537],{"class":512},[19,87129,87130],{},"构造函数的this指向的是实例对象；",[19,87132,87133],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[494,87135,87137],{"id":87136},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87139,87140],{},[3528,87141],{"alt":32,"src":87142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,87144,87146],{"className":503,"code":87145,"language":505,"meta":32,"style":32},"\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",[34,87147,87148,87156,87164,87169,87174,87179,87184,87189,87194,87199,87204,87209,87214,87218,87223,87228,87233,87238,87242,87247,87252,87257,87262,87266,87271,87276,87281,87286,87290,87295,87299,87307],{"__ignoreMap":32},[167,87149,87150,87152,87154],{"class":169,"line":170},[167,87151,513],{"class":512},[167,87153,517],{"class":516},[167,87155,537],{"class":512},[167,87157,87158,87160,87162],{"class":169,"line":191},[167,87159,542],{"class":512},[167,87161,53809],{"class":516},[167,87163,537],{"class":512},[167,87165,87166],{"class":169,"line":205},[167,87167,87168],{"class":512},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[167,87170,87171],{"class":169,"line":219},[167,87172,87173],{"class":512},"    const arr = [1, 2, 3]\n",[167,87175,87176],{"class":169,"line":230},[167,87177,87178],{"class":512},"    \u002F\u002F 自己定义数组的扩展方法\n",[167,87180,87181],{"class":169,"line":241},[167,87182,87183],{"class":512},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[167,87185,87186],{"class":169,"line":261},[167,87187,87188],{"class":512},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[167,87190,87191],{"class":169,"line":773},[167,87192,87193],{"class":512},"    \u002F\u002F ①.最大值\n",[167,87195,87196],{"class":169,"line":779},[167,87197,87198],{"class":512},"    Array.prototype.max = function () {\n",[167,87200,87201],{"class":169,"line":785},[167,87202,87203],{"class":512},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[167,87205,87206],{"class":169,"line":790},[167,87207,87208],{"class":512},"      return Math.max(...this)\n",[167,87210,87211],{"class":169,"line":796},[167,87212,87213],{"class":512},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[167,87215,87216],{"class":169,"line":802},[167,87217,4231],{"class":512},[167,87219,87220],{"class":169,"line":808},[167,87221,87222],{"class":512},"    console.log(arr.max())\n",[167,87224,87225],{"class":169,"line":814},[167,87226,87227],{"class":512},"    \u002F\u002F ②最小值\n",[167,87229,87230],{"class":169,"line":820},[167,87231,87232],{"class":512},"    Array.prototype.min = function () {\n",[167,87234,87235],{"class":169,"line":826},[167,87236,87237],{"class":512},"      return Math.min(...this)\n",[167,87239,87240],{"class":169,"line":832},[167,87241,4231],{"class":512},[167,87243,87244],{"class":169,"line":837},[167,87245,87246],{"class":512},"    console.log(arr.min())\n",[167,87248,87249],{"class":169,"line":842},[167,87250,87251],{"class":512},"    \u002F\u002F③求和\n",[167,87253,87254],{"class":169,"line":860},[167,87255,87256],{"class":512},"    Array.prototype.sum = function () {\n",[167,87258,87259],{"class":169,"line":876},[167,87260,87261],{"class":512},"      return this.reduce((prev, current) => prev + current, 0)\n",[167,87263,87264],{"class":169,"line":887},[167,87265,4231],{"class":512},[167,87267,87268],{"class":169,"line":892},[167,87269,87270],{"class":512},"    console.log(arr.sum())\n",[167,87272,87273],{"class":169,"line":907},[167,87274,87275],{"class":512},"    \u002F\u002F ③排序\n",[167,87277,87278],{"class":169,"line":920},[167,87279,87280],{"class":512},"    Array.prototype.rever = function () {\n",[167,87282,87283],{"class":169,"line":933},[167,87284,87285],{"class":512},"      return this.reverse()\n",[167,87287,87288],{"class":169,"line":946},[167,87289,4231],{"class":512},[167,87291,87292],{"class":169,"line":959},[167,87293,87294],{"class":512},"    console.log(arr.rever())\n",[167,87296,87297],{"class":169,"line":964},[167,87298,741],{"emptyLinePlaceholder":740},[167,87300,87301,87303,87305],{"class":169,"line":987},[167,87302,54412],{"class":512},[167,87304,53809],{"class":516},[167,87306,537],{"class":512},[167,87308,87309,87311,87313],{"class":169,"line":993},[167,87310,575],{"class":512},[167,87312,517],{"class":516},[167,87314,537],{"class":512},[19,87316,87317],{},[3528,87318],{"alt":32,"src":87319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[494,87321,87323],{"id":87322},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87325,87326],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87328,87329],{},[3528,87330],{"alt":32,"src":87331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,87333,87335],{"className":503,"code":87334,"language":505,"meta":32,"style":32},"\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",[34,87336,87337,87345,87353,87358,87363,87367,87372,87377,87382,87390],{"__ignoreMap":32},[167,87338,87339,87341,87343],{"class":169,"line":170},[167,87340,513],{"class":512},[167,87342,517],{"class":516},[167,87344,537],{"class":512},[167,87346,87347,87349,87351],{"class":169,"line":191},[167,87348,542],{"class":512},[167,87350,53809],{"class":516},[167,87352,537],{"class":512},[167,87354,87355],{"class":169,"line":205},[167,87356,87357],{"class":512},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[167,87359,87360],{"class":169,"line":219},[167,87361,87362],{"class":512},"    function Star() {\n",[167,87364,87365],{"class":169,"line":230},[167,87366,4231],{"class":512},[167,87368,87369],{"class":169,"line":241},[167,87370,87371],{"class":512},"    const ldh = new Star()\n",[167,87373,87374],{"class":169,"line":261},[167,87375,87376],{"class":512},"    console.log(Star.prototype)\n",[167,87378,87379],{"class":169,"line":773},[167,87380,87381],{"class":512},"    console.log(Star.prototype.constructor === Star)\n",[167,87383,87384,87386,87388],{"class":169,"line":779},[167,87385,54412],{"class":512},[167,87387,53809],{"class":516},[167,87389,537],{"class":512},[167,87391,87392,87394,87396],{"class":169,"line":785},[167,87393,575],{"class":512},[167,87395,517],{"class":516},[167,87397,537],{"class":512},[19,87399,87400],{},[3528,87401],{"alt":32,"src":87402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87404,87405],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,87407,87409],{"className":503,"code":87408,"language":505,"meta":32,"style":32},"  \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",[34,87410,87411,87419,87423,87427,87431,87436,87441,87446,87450,87455,87460,87465,87470,87475,87480,87484,87488,87493,87498,87503,87507,87512,87517,87521,87525,87529],{"__ignoreMap":32},[167,87412,87413,87415,87417],{"class":169,"line":170},[167,87414,542],{"class":512},[167,87416,53809],{"class":516},[167,87418,537],{"class":512},[167,87420,87421],{"class":169,"line":191},[167,87422,87357],{"class":512},[167,87424,87425],{"class":169,"line":205},[167,87426,87362],{"class":512},[167,87428,87429],{"class":169,"line":219},[167,87430,4231],{"class":512},[167,87432,87433],{"class":169,"line":230},[167,87434,87435],{"class":512},"    \u002F\u002F const ldh = new Star()\n",[167,87437,87438],{"class":169,"line":241},[167,87439,87440],{"class":512},"    \u002F\u002F console.log(Star.prototype)\n",[167,87442,87443],{"class":169,"line":261},[167,87444,87445],{"class":512},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[167,87447,87448],{"class":169,"line":773},[167,87449,741],{"emptyLinePlaceholder":740},[167,87451,87452],{"class":169,"line":779},[167,87453,87454],{"class":512},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[167,87456,87457],{"class":169,"line":785},[167,87458,87459],{"class":512},"    \u002F\u002F Star.prototype.sing = function () {\n",[167,87461,87462],{"class":169,"line":790},[167,87463,87464],{"class":512},"    \u002F\u002F   console.log('唱歌')\n",[167,87466,87467],{"class":169,"line":796},[167,87468,87469],{"class":512},"    \u002F\u002F }\n",[167,87471,87472],{"class":169,"line":802},[167,87473,87474],{"class":512},"    \u002F\u002F Star.prototype.dance = function () {\n",[167,87476,87477],{"class":169,"line":808},[167,87478,87479],{"class":512},"    \u002F\u002F   console.log('跳舞')\n",[167,87481,87482],{"class":169,"line":814},[167,87483,87469],{"class":512},[167,87485,87486],{"class":169,"line":820},[167,87487,87376],{"class":512},[167,87489,87490],{"class":169,"line":826},[167,87491,87492],{"class":512},"    Star.prototype = {\n",[167,87494,87495],{"class":169,"line":832},[167,87496,87497],{"class":512},"      sing: function () {\n",[167,87499,87500],{"class":169,"line":837},[167,87501,87502],{"class":512},"        console.log('唱歌')\n",[167,87504,87505],{"class":169,"line":842},[167,87506,79880],{"class":512},[167,87508,87509],{"class":169,"line":860},[167,87510,87511],{"class":512},"      dance: function () {\n",[167,87513,87514],{"class":169,"line":876},[167,87515,87516],{"class":512},"        console.log('跳舞')\n",[167,87518,87519],{"class":169,"line":887},[167,87520,54393],{"class":512},[167,87522,87523],{"class":169,"line":892},[167,87524,4231],{"class":512},[167,87526,87527],{"class":169,"line":907},[167,87528,87376],{"class":512},[167,87530,87531,87533,87535],{"class":169,"line":920},[167,87532,54412],{"class":512},[167,87534,53809],{"class":516},[167,87536,537],{"class":512},[19,87538,87539],{},"进行输出结果后会发现：",[19,87541,87542],{},[3528,87543],{"alt":32,"src":87544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87546,87547],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87549,87550],{},"所以，要重新指回创造这个原型对象的构造函数",[26,87552,87554],{"className":73201,"code":87553,"language":73203,"meta":32,"style":32},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[34,87555,87556,87570,87575,87580,87591,87604,87609,87620,87634,87638],{"__ignoreMap":32},[167,87557,87558,87561,87563,87566,87568],{"class":169,"line":170},[167,87559,87560],{"class":184},"Star",[167,87562,2758],{"class":512},[167,87564,87565],{"class":184},"prototype",[167,87567,753],{"class":731},[167,87569,17598],{"class":512},[167,87571,87572],{"class":169,"line":191},[167,87573,87574],{"class":2268},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[167,87576,87577],{"class":169,"line":205},[167,87578,87579],{"class":512},"  constructor: Star,\n",[167,87581,87582,87585,87587,87589],{"class":169,"line":219},[167,87583,87584],{"class":173},"  sing",[167,87586,53435],{"class":512},[167,87588,56439],{"class":731},[167,87590,56442],{"class":512},[167,87592,87593,87595,87597,87599,87602],{"class":169,"line":230},[167,87594,75741],{"class":512},[167,87596,60236],{"class":173},[167,87598,898],{"class":512},[167,87600,87601],{"class":177},"'唱歌'",[167,87603,873],{"class":512},[167,87605,87606],{"class":169,"line":241},[167,87607,87608],{"class":512},"   },\n",[167,87610,87611,87614,87616,87618],{"class":169,"line":261},[167,87612,87613],{"class":173},"   dance",[167,87615,53435],{"class":512},[167,87617,56439],{"class":731},[167,87619,56442],{"class":512},[167,87621,87622,87625,87627,87629,87632],{"class":169,"line":773},[167,87623,87624],{"class":512},"     console.",[167,87626,60236],{"class":173},[167,87628,898],{"class":512},[167,87630,87631],{"class":177},"'跳舞'",[167,87633,873],{"class":512},[167,87635,87636],{"class":169,"line":779},[167,87637,6341],{"class":512},[167,87639,87640],{"class":169,"line":785},[167,87641,3630],{"class":512},[19,87643,87644],{},[3528,87645],{"alt":32,"src":87646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87648,87649],{},"总结1：",[19,87651,87652],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87654,87655],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87657,87658],{},"constructor指的是他的来源",[19,87660,87661],{},[3528,87662],{"alt":32,"src":87663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87665,87666],{},[3528,87667],{"alt":32,"src":87668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87670,87671],{},"总结2：",[19,87673,87674],{},[3528,87675],{"alt":32,"src":87676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87678,87679],{},[3528,87680],{"alt":32,"src":87681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87683,87684],{},[3528,87685],{"alt":32,"src":87686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[494,87688,87690],{"id":87689},"_4134-对象原型","4.13.4 对象原型",[19,87692,87693],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87695,87696],{},"对象原型就是__proto__这个属性",[19,87698,87699],{},[3528,87700],{"alt":32,"src":87701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87703,87704],{},[3528,87705],{"alt":32,"src":87706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87708,87709],{},[3528,87710],{"alt":32,"src":87711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87713,87714],{},[3528,87715],{"alt":32,"src":87716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,87718,87720],{"className":503,"code":87719,"language":505,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,87721,87722,87730,87738,87742,87746,87750,87755,87763],{"__ignoreMap":32},[167,87723,87724,87726,87728],{"class":169,"line":170},[167,87725,513],{"class":512},[167,87727,517],{"class":516},[167,87729,537],{"class":512},[167,87731,87732,87734,87736],{"class":169,"line":191},[167,87733,542],{"class":512},[167,87735,53809],{"class":516},[167,87737,537],{"class":512},[167,87739,87740],{"class":169,"line":205},[167,87741,87362],{"class":512},[167,87743,87744],{"class":169,"line":219},[167,87745,4231],{"class":512},[167,87747,87748],{"class":169,"line":230},[167,87749,87371],{"class":512},[167,87751,87752],{"class":169,"line":241},[167,87753,87754],{"class":512},"    console.log(ldh)\n",[167,87756,87757,87759,87761],{"class":169,"line":261},[167,87758,54412],{"class":512},[167,87760,53809],{"class":516},[167,87762,537],{"class":512},[167,87764,87765,87767,87769],{"class":169,"line":773},[167,87766,575],{"class":512},[167,87768,517],{"class":516},[167,87770,537],{"class":512},[19,87772,87773],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87775,87776],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87778,87779],{},[3528,87780],{"alt":32,"src":87781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87783,87784],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87786,87787],{},"对象原型指向原型对象",[19,87789,87790],{},[3528,87791],{"alt":32,"src":87792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87794,87795],{},[3528,87796],{"alt":32,"src":87797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87799,87800],{},[3528,87801],{"alt":32,"src":87802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[494,87804,87806],{"id":87805},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87808,87809],{},[3528,87810],{"alt":32,"src":87811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[40,87813,87814,87817,87820,87823],{},[43,87815,87816],{},"构造函数通过new的形式实例化得到实例对象",[43,87818,87819],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[43,87821,87822],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[43,87824,87825],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87827,87828],{},[3528,87829],{"alt":32,"src":87830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87832,87833],{},"题目梳理：",[19,87835,87836],{},[3528,87837],{"alt":32,"src":87838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[494,87840,87842],{"id":87841},"_4136-原型继承","4.13.6 原型继承",[19,87844,87845],{},[3528,87846],{"alt":32,"src":87847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87849,87850],{},[3528,87851],{"alt":32,"src":87852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87854,87855],{},[3528,87856],{"alt":32,"src":87857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87859,87860],{},[3528,87861],{"alt":32,"src":87862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87864,87865],{},[3528,87866],{"alt":32,"src":87867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87869,87870],{},[3528,87871],{"alt":32,"src":87872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87874,87875],{},[3528,87876],{"alt":32,"src":87877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87879,87880],{},[3528,87881],{"alt":32,"src":87882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87884,87885],{},"回顾：构造函数每次new得到对象都是不同的",[494,87887,87889],{"id":87888},"_4137-原型链","4.13.7 原型链",[19,87891,87892],{},[3528,87893],{"alt":32,"src":87894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87896,87897],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87899,87900],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87902,87903],{},"大哥是Object",[19,87905,87906],{},[3528,87907],{"alt":32,"src":87908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87910,87911],{},[3528,87912],{"alt":32,"src":87913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87915,87916],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87918,87919],{},"万物皆对象",[494,87921,87923],{"id":87922},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87925,87926],{},"模态框",[19,87928,87929],{},"以后遇见这个效果直接使用这个就行",[19,87931,87932],{},[3528,87933],{"alt":32,"src":87934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87936,87937],{},[3528,87938],{"alt":32,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87941,87942],{},[3528,87943],{"alt":32,"src":87944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87946,87947],{},[3528,87948],{"alt":32,"src":87949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87951,87952],{},"补充知识点：",[40,87954,87955],{},[43,87956,87957],{},"append()",[19,87959,87960],{},[3528,87961],{"alt":32,"src":87962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,87964,87966],{"className":52633,"code":87965,"language":52635,"meta":32,"style":32},"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",[34,87967,87968,87973,87978,87983,87987,87991,87995,88000,88005,88010,88014],{"__ignoreMap":32},[167,87969,87970],{"class":169,"line":170},[167,87971,87972],{"class":512},"append(param1)\n",[167,87974,87975],{"class":169,"line":191},[167,87976,87977],{"class":512},"append(param1, param2)\n",[167,87979,87980],{"class":169,"line":205},[167,87981,87982],{"class":512},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[167,87984,87985],{"class":169,"line":219},[167,87986,741],{"emptyLinePlaceholder":740},[167,87988,87989],{"class":169,"line":230},[167,87990,741],{"emptyLinePlaceholder":740},[167,87992,87993],{"class":169,"line":241},[167,87994,741],{"emptyLinePlaceholder":740},[167,87996,87997],{"class":169,"line":261},[167,87998,87999],{"class":512},"let div = document.createElement(\"div\");\n",[167,88001,88002],{"class":169,"line":773},[167,88003,88004],{"class":512},"let p = document.createElement(\"p\");\n",[167,88006,88007],{"class":169,"line":779},[167,88008,88009],{"class":512},"div.append(p);\n",[167,88011,88012],{"class":169,"line":785},[167,88013,741],{"emptyLinePlaceholder":740},[167,88015,88016,88019,88021],{"class":169,"line":790},[167,88017,88018],{"class":512},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[167,88020,19],{"class":516},[167,88022,88023],{"class":512},"> ]\n",[40,88025,88026],{"start":191},[43,88027,88028],{},"remove()",[19,88030,88031],{},"自己删自己",[19,88033,88034],{},[3528,88035],{"alt":32,"src":88036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,88038,88040],{"className":52633,"code":88039,"language":52635,"meta":32,"style":32},"\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",[34,88041,88042,88052,88066,88070,88078,88092,88112,88124,88132,88139,88151,88164,88199,88211,88222,88234,88246,88258,88285,88295,88299,88303,88312,88324,88338,88348,88360,88364,88368,88378,88389,88399,88409,88422,88435,88445,88449,88453,88462,88472,88484,88488,88492,88501,88511,88521,88533,88537,88541,88551,88567,88578,88588,88598,88610,88622,88634,88638,88642,88655,88666,88670,88678,88686,88690,88698,88718,88738,88746,88751,88777,88782,88787,88806,88811,88823,88828,88839,88849,88859,88864,88869,88873,88878,88883,88888,88908,88913,88933,88938,88952,88957,88962,88967,88983,88987,88992,89021,89026,89031,89036,89047,89051,89055,89059,89064,89089,89094,89119,89124,89133,89137,89142,89167,89171,89196,89200,89209,89213,89218,89236,89246,89250,89258,89266,89270],{"__ignoreMap":32},[167,88043,88044,88046,88048,88050],{"class":169,"line":170},[167,88045,53297],{"class":512},[167,88047,53300],{"class":516},[167,88049,53303],{"class":173},[167,88051,537],{"class":512},[167,88053,88054,88056,88058,88060,88062,88064],{"class":169,"line":191},[167,88055,513],{"class":512},[167,88057,52635],{"class":516},[167,88059,53314],{"class":173},[167,88061,523],{"class":512},[167,88063,53319],{"class":177},[167,88065,537],{"class":512},[167,88067,88068],{"class":169,"line":205},[167,88069,741],{"emptyLinePlaceholder":740},[167,88071,88072,88074,88076],{"class":169,"line":219},[167,88073,513],{"class":512},[167,88075,53332],{"class":516},[167,88077,537],{"class":512},[167,88079,88080,88082,88084,88086,88088,88090],{"class":169,"line":230},[167,88081,542],{"class":512},[167,88083,53342],{"class":516},[167,88085,53345],{"class":173},[167,88087,523],{"class":512},[167,88089,53350],{"class":177},[167,88091,537],{"class":512},[167,88093,88094,88096,88098,88100,88102,88104,88106,88108,88110],{"class":169,"line":241},[167,88095,542],{"class":512},[167,88097,53342],{"class":516},[167,88099,520],{"class":173},[167,88101,523],{"class":512},[167,88103,53389],{"class":177},[167,88105,53369],{"class":173},[167,88107,523],{"class":512},[167,88109,53396],{"class":177},[167,88111,537],{"class":512},[167,88113,88114,88116,88118,88120,88122],{"class":169,"line":261},[167,88115,542],{"class":512},[167,88117,53405],{"class":516},[167,88119,53408],{"class":512},[167,88121,53405],{"class":516},[167,88123,537],{"class":512},[167,88125,88126,88128,88130],{"class":169,"line":773},[167,88127,542],{"class":512},[167,88129,2113],{"class":516},[167,88131,537],{"class":512},[167,88133,88134,88137],{"class":169,"line":779},[167,88135,88136],{"class":173},"    .modal",[167,88138,17598],{"class":512},[167,88140,88141,88143,88145,88147,88149],{"class":169,"line":785},[167,88142,56761],{"class":184},[167,88144,53435],{"class":512},[167,88146,6005],{"class":184},[167,88148,53490],{"class":731},[167,88150,3359],{"class":512},[167,88152,88153,88156,88158,88160,88162],{"class":169,"line":790},[167,88154,88155],{"class":184},"      min-height",[167,88157,53435],{"class":512},[167,88159,981],{"class":184},[167,88161,53490],{"class":731},[167,88163,3359],{"class":512},[167,88165,88166,88168,88170,88172,88174,88176,88178,88180,88182,88184,88186,88188,88190,88192,88194,88197],{"class":169,"line":796},[167,88167,80738],{"class":184},[167,88169,53435],{"class":512},[167,88171,1154],{"class":184},[167,88173,6125],{"class":184},[167,88175,4082],{"class":184},[167,88177,53490],{"class":731},[167,88179,1369],{"class":184},[167,88181,898],{"class":512},[167,88183,1154],{"class":184},[167,88185,14463],{"class":512},[167,88187,1154],{"class":184},[167,88189,14463],{"class":512},[167,88191,1154],{"class":184},[167,88193,14463],{"class":512},[167,88195,88196],{"class":184},"0.1",[167,88198,4755],{"class":512},[167,88200,88201,88203,88205,88207,88209],{"class":169,"line":802},[167,88202,57123],{"class":184},[167,88204,53435],{"class":512},[167,88206,2494],{"class":184},[167,88208,53490],{"class":731},[167,88210,3359],{"class":512},[167,88212,88213,88215,88217,88220],{"class":169,"line":808},[167,88214,56749],{"class":184},[167,88216,53435],{"class":512},[167,88218,88219],{"class":184},"fixed",[167,88221,3359],{"class":512},[167,88223,88224,88227,88229,88232],{"class":169,"line":814},[167,88225,88226],{"class":184},"      z-index",[167,88228,53435],{"class":512},[167,88230,88231],{"class":184},"999",[167,88233,3359],{"class":512},[167,88235,88236,88238,88240,88242,88244],{"class":169,"line":820},[167,88237,56828],{"class":184},[167,88239,53435],{"class":512},[167,88241,2856],{"class":184},[167,88243,2528],{"class":731},[167,88245,3359],{"class":512},[167,88247,88248,88250,88252,88254,88256],{"class":169,"line":826},[167,88249,56937],{"class":184},[167,88251,53435],{"class":512},[167,88253,2856],{"class":184},[167,88255,2528],{"class":731},[167,88257,3359],{"class":512},[167,88259,88260,88262,88264,88266,88268,88271,88273,88275,88277,88279,88281,88283],{"class":169,"line":832},[167,88261,80778],{"class":184},[167,88263,53435],{"class":512},[167,88265,80783],{"class":184},[167,88267,898],{"class":512},[167,88269,88270],{"class":184},"-50",[167,88272,2528],{"class":731},[167,88274,14463],{"class":512},[167,88276,88270],{"class":184},[167,88278,2528],{"class":731},[167,88280,14463],{"class":512},[167,88282,1154],{"class":184},[167,88284,4755],{"class":512},[167,88286,88287,88289,88291,88293],{"class":169,"line":837},[167,88288,56874],{"class":184},[167,88290,53435],{"class":512},[167,88292,62831],{"class":184},[167,88294,3359],{"class":512},[167,88296,88297],{"class":169,"line":842},[167,88298,4231],{"class":512},[167,88300,88301],{"class":169,"line":860},[167,88302,741],{"emptyLinePlaceholder":740},[167,88304,88305,88307,88310],{"class":169,"line":876},[167,88306,88136],{"class":173},[167,88308,88309],{"class":173}," .header",[167,88311,17598],{"class":512},[167,88313,88314,88316,88318,88320,88322],{"class":169,"line":887},[167,88315,59348],{"class":184},[167,88317,53435],{"class":512},[167,88319,2601],{"class":184},[167,88321,53490],{"class":731},[167,88323,3359],{"class":512},[167,88325,88326,88328,88330,88332,88334,88336],{"class":169,"line":892},[167,88327,56685],{"class":184},[167,88329,53435],{"class":512},[167,88331,1154],{"class":184},[167,88333,4082],{"class":184},[167,88335,53490],{"class":731},[167,88337,3359],{"class":512},[167,88339,88340,88342,88344,88346],{"class":169,"line":907},[167,88341,56749],{"class":184},[167,88343,53435],{"class":512},[167,88345,56754],{"class":184},[167,88347,3359],{"class":512},[167,88349,88350,88352,88354,88356,88358],{"class":169,"line":920},[167,88351,56912],{"class":184},[167,88353,53435],{"class":512},[167,88355,2900],{"class":184},[167,88357,53490],{"class":731},[167,88359,3359],{"class":512},[167,88361,88362],{"class":169,"line":933},[167,88363,4231],{"class":512},[167,88365,88366],{"class":169,"line":946},[167,88367,741],{"emptyLinePlaceholder":740},[167,88369,88370,88372,88374,88376],{"class":169,"line":959},[167,88371,88136],{"class":173},[167,88373,88309],{"class":173},[167,88375,5067],{"class":516},[167,88377,17598],{"class":512},[167,88379,88380,88383,88385,88387],{"class":169,"line":964},[167,88381,88382],{"class":184},"      font-style",[167,88384,53435],{"class":512},[167,88386,65830],{"class":184},[167,88388,3359],{"class":512},[167,88390,88391,88393,88395,88397],{"class":169,"line":987},[167,88392,59405],{"class":184},[167,88394,53435],{"class":512},[167,88396,64059],{"class":184},[167,88398,3359],{"class":512},[167,88400,88401,88403,88405,88407],{"class":169,"line":993},[167,88402,56749],{"class":184},[167,88404,53435],{"class":512},[167,88406,56821],{"class":184},[167,88408,3359],{"class":512},[167,88410,88411,88414,88416,88418,88420],{"class":169,"line":998},[167,88412,88413],{"class":184},"      right",[167,88415,53435],{"class":512},[167,88417,2775],{"class":184},[167,88419,53490],{"class":731},[167,88421,3359],{"class":512},[167,88423,88424,88426,88428,88431,88433],{"class":169,"line":1010},[167,88425,56937],{"class":184},[167,88427,53435],{"class":512},[167,88429,88430],{"class":184},"-2",[167,88432,53490],{"class":731},[167,88434,3359],{"class":512},[167,88436,88437,88439,88441,88443],{"class":169,"line":1022},[167,88438,64014],{"class":184},[167,88440,53435],{"class":512},[167,88442,64019],{"class":184},[167,88444,3359],{"class":512},[167,88446,88447],{"class":169,"line":1027},[167,88448,4231],{"class":512},[167,88450,88451],{"class":169,"line":1032},[167,88452,741],{"emptyLinePlaceholder":740},[167,88454,88455,88457,88460],{"class":169,"line":1049},[167,88456,88136],{"class":173},[167,88458,88459],{"class":173}," .body",[167,88461,17598],{"class":512},[167,88463,88464,88466,88468,88470],{"class":169,"line":10005},[167,88465,59275],{"class":184},[167,88467,53435],{"class":512},[167,88469,53590],{"class":184},[167,88471,3359],{"class":512},[167,88473,88474,88476,88478,88480,88482],{"class":169,"line":10011},[167,88475,56685],{"class":184},[167,88477,53435],{"class":512},[167,88479,2646],{"class":184},[167,88481,53490],{"class":731},[167,88483,3359],{"class":512},[167,88485,88486],{"class":169,"line":10038},[167,88487,4231],{"class":512},[167,88489,88490],{"class":169,"line":10043},[167,88491,741],{"emptyLinePlaceholder":740},[167,88493,88494,88496,88499],{"class":169,"line":10049},[167,88495,88136],{"class":173},[167,88497,88498],{"class":173}," .footer",[167,88500,17598],{"class":512},[167,88502,88503,88505,88507,88509],{"class":169,"line":10061},[167,88504,56999],{"class":184},[167,88506,53435],{"class":512},[167,88508,53475],{"class":184},[167,88510,3359],{"class":512},[167,88512,88513,88515,88517,88519],{"class":169,"line":10073},[167,88514,57010],{"class":184},[167,88516,53435],{"class":512},[167,88518,53578],{"class":184},[167,88520,3359],{"class":512},[167,88522,88523,88525,88527,88529,88531],{"class":169,"line":10085},[167,88524,56685],{"class":184},[167,88526,53435],{"class":512},[167,88528,2646],{"class":184},[167,88530,53490],{"class":731},[167,88532,3359],{"class":512},[167,88534,88535],{"class":169,"line":11744},[167,88536,4231],{"class":512},[167,88538,88539],{"class":169,"line":11769},[167,88540,741],{"emptyLinePlaceholder":740},[167,88542,88543,88545,88547,88549],{"class":169,"line":11792},[167,88544,88136],{"class":173},[167,88546,88498],{"class":173},[167,88548,3464],{"class":516},[167,88550,17598],{"class":512},[167,88552,88553,88555,88557,88559,88561,88563,88565],{"class":169,"line":11816},[167,88554,56685],{"class":184},[167,88556,53435],{"class":512},[167,88558,2281],{"class":184},[167,88560,53490],{"class":731},[167,88562,4127],{"class":184},[167,88564,53490],{"class":731},[167,88566,3359],{"class":512},[167,88568,88569,88571,88573,88576],{"class":169,"line":11821},[167,88570,63710],{"class":184},[167,88572,53435],{"class":512},[167,88574,88575],{"class":184},"#ccc",[167,88577,3359],{"class":512},[167,88579,88580,88582,88584,88586],{"class":169,"line":11826},[167,88581,65959],{"class":184},[167,88583,53435],{"class":512},[167,88585,56727],{"class":184},[167,88587,3359],{"class":512},[167,88589,88590,88592,88594,88596],{"class":169,"line":11831},[167,88591,59405],{"class":184},[167,88593,53435],{"class":512},[167,88595,62831],{"class":184},[167,88597,3359],{"class":512},[167,88599,88600,88602,88604,88606,88608],{"class":169,"line":11840},[167,88601,57123],{"class":184},[167,88603,53435],{"class":512},[167,88605,2287],{"class":184},[167,88607,53490],{"class":731},[167,88609,3359],{"class":512},[167,88611,88612,88614,88616,88618,88620],{"class":169,"line":11845},[167,88613,63739],{"class":184},[167,88615,53435],{"class":512},[167,88617,2646],{"class":184},[167,88619,53490],{"class":731},[167,88621,3359],{"class":512},[167,88623,88624,88626,88628,88630,88632],{"class":169,"line":11851},[167,88625,56912],{"class":184},[167,88627,53435],{"class":512},[167,88629,2749],{"class":184},[167,88631,53490],{"class":731},[167,88633,3359],{"class":512},[167,88635,88636],{"class":169,"line":11872},[167,88637,4231],{"class":512},[167,88639,88640],{"class":169,"line":11878},[167,88641,741],{"emptyLinePlaceholder":740},[167,88643,88644,88646,88648,88650,88653],{"class":169,"line":11892},[167,88645,88136],{"class":173},[167,88647,88498],{"class":173},[167,88649,3464],{"class":516},[167,88651,88652],{"class":173},".submit",[167,88654,17598],{"class":512},[167,88656,88657,88659,88661,88664],{"class":169,"line":11898},[167,88658,56874],{"class":184},[167,88660,53435],{"class":512},[167,88662,88663],{"class":184},"#369",[167,88665,3359],{"class":512},[167,88667,88668],{"class":169,"line":11925},[167,88669,4231],{"class":512},[167,88671,88672,88674,88676],{"class":169,"line":11934},[167,88673,54412],{"class":512},[167,88675,2113],{"class":516},[167,88677,537],{"class":512},[167,88679,88680,88682,88684],{"class":169,"line":11940},[167,88681,575],{"class":512},[167,88683,53332],{"class":516},[167,88685,537],{"class":512},[167,88687,88688],{"class":169,"line":11948},[167,88689,741],{"emptyLinePlaceholder":740},[167,88691,88692,88694,88696],{"class":169,"line":11953},[167,88693,513],{"class":512},[167,88695,517],{"class":516},[167,88697,537],{"class":512},[167,88699,88700,88702,88704,88706,88708,88711,88714,88716],{"class":169,"line":18630},[167,88701,542],{"class":512},[167,88703,55877],{"class":516},[167,88705,16985],{"class":173},[167,88707,523],{"class":512},[167,88709,88710],{"class":177},"\"delete\"",[167,88712,88713],{"class":512},">删除\u003C\u002F",[167,88715,55877],{"class":516},[167,88717,537],{"class":512},[167,88719,88720,88722,88724,88726,88728,88731,88734,88736],{"class":169,"line":18636},[167,88721,542],{"class":512},[167,88723,55877],{"class":516},[167,88725,16985],{"class":173},[167,88727,523],{"class":512},[167,88729,88730],{"class":177},"\"login\"",[167,88732,88733],{"class":512},">登录\u003C\u002F",[167,88735,55877],{"class":516},[167,88737,537],{"class":512},[167,88739,88740,88742,88744],{"class":169,"line":18659},[167,88741,542],{"class":512},[167,88743,53809],{"class":516},[167,88745,537],{"class":512},[167,88747,88748],{"class":169,"line":18665},[167,88749,88750],{"class":2268},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[167,88752,88753,88755,88758,88760,88762,88764,88766,88768,88771,88773,88775],{"class":169,"line":18688},[167,88754,72072],{"class":731},[167,88756,88757],{"class":173}," Modal",[167,88759,898],{"class":512},[167,88761,53405],{"class":7246},[167,88763,753],{"class":731},[167,88765,71918],{"class":177},[167,88767,14463],{"class":512},[167,88769,88770],{"class":7246},"message",[167,88772,753],{"class":731},[167,88774,71918],{"class":177},[167,88776,14470],{"class":512},[167,88778,88779],{"class":169,"line":18702},[167,88780,88781],{"class":2268},"      \u002F\u002F 创建Model 模态框盒子\n",[167,88783,88784],{"class":169,"line":18722},[167,88785,88786],{"class":2268},"      \u002F\u002F 1.1 创建div标签\n",[167,88788,88789,88791,88794,88796,88798,88800,88802,88804],{"class":169,"line":18728},[167,88790,72039],{"class":184},[167,88792,88793],{"class":512},".modalBox ",[167,88795,523],{"class":731},[167,88797,56386],{"class":512},[167,88799,72139],{"class":173},[167,88801,898],{"class":512},[167,88803,83918],{"class":177},[167,88805,873],{"class":512},[167,88807,88808],{"class":169,"line":18739},[167,88809,88810],{"class":2268},"      \u002F\u002F 1.2 给div 添加类名为model\n",[167,88812,88813,88815,88818,88820],{"class":169,"line":18762},[167,88814,72039],{"class":184},[167,88816,88817],{"class":512},".modalBox.className ",[167,88819,523],{"class":731},[167,88821,88822],{"class":177}," 'modal'\n",[167,88824,88825],{"class":169,"line":18784},[167,88826,88827],{"class":2268},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[167,88829,88830,88832,88835,88837],{"class":169,"line":18789},[167,88831,72039],{"class":184},[167,88833,88834],{"class":512},".modalBox.innerHTML ",[167,88836,523],{"class":731},[167,88838,72156],{"class":177},[167,88840,88841,88844,88846],{"class":169,"line":18795},[167,88842,88843],{"class":177},"        \u003Cdiv class=\"header\">${",[167,88845,53405],{"class":512},[167,88847,88848],{"class":177},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[167,88850,88851,88854,88856],{"class":169,"line":18809},[167,88852,88853],{"class":177},"        \u003Cdiv class=\"body\">${",[167,88855,88770],{"class":512},[167,88857,88858],{"class":177},"}\u003C\u002Fdiv>\n",[167,88860,88861],{"class":169,"line":18822},[167,88862,88863],{"class":177},"      `\n",[167,88865,88866],{"class":169,"line":18827},[167,88867,88868],{"class":2268},"      \u002F\u002F console.log(this.modalBox)\n",[167,88870,88871],{"class":169,"line":18841},[167,88872,4231],{"class":512},[167,88874,88875],{"class":169,"line":18846},[167,88876,88877],{"class":2268},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[167,88879,88880],{"class":169,"line":18852},[167,88881,88882],{"class":2268},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[167,88884,88885],{"class":169,"line":18857},[167,88886,88887],{"class":2268},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[167,88889,88890,88893,88895,88897,88899,88902,88904,88906],{"class":169,"line":18871},[167,88891,88892],{"class":184},"    Modal",[167,88894,2758],{"class":512},[167,88896,87565],{"class":184},[167,88898,2758],{"class":512},[167,88900,88901],{"class":173},"open",[167,88903,753],{"class":731},[167,88905,60907],{"class":731},[167,88907,56442],{"class":512},[167,88909,88910],{"class":169,"line":18876},[167,88911,88912],{"class":2268},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[167,88914,88915,88917,88920,88922,88924,88926,88928,88931],{"class":169,"line":18881},[167,88916,60217],{"class":731},[167,88918,88919],{"class":184}," box",[167,88921,753],{"class":731},[167,88923,56386],{"class":512},[167,88925,56389],{"class":173},[167,88927,898],{"class":512},[167,88929,88930],{"class":177},"'.modal'",[167,88932,873],{"class":512},[167,88934,88935],{"class":169,"line":18895},[167,88936,88937],{"class":2268},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[167,88939,88940,88943,88945,88948,88950],{"class":169,"line":18907},[167,88941,88942],{"class":512},"      box ",[167,88944,3769],{"class":731},[167,88946,88947],{"class":512}," box.",[167,88949,58995],{"class":173},[167,88951,4020],{"class":512},[167,88953,88954],{"class":169,"line":18912},[167,88955,88956],{"class":2268},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[167,88958,88959],{"class":169,"line":18925},[167,88960,88961],{"class":2268},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[167,88963,88964],{"class":169,"line":18930},[167,88965,88966],{"class":2268},"      \u002F\u002F append可以增加对象\n",[167,88968,88969,88972,88975,88977,88980],{"class":169,"line":18935},[167,88970,88971],{"class":512},"      document.body.",[167,88973,88974],{"class":173},"append",[167,88976,898],{"class":512},[167,88978,88979],{"class":184},"this",[167,88981,88982],{"class":512},".modalBox)\n",[167,88984,88985],{"class":169,"line":18940},[167,88986,741],{"emptyLinePlaceholder":740},[167,88988,88989],{"class":169,"line":18953},[167,88990,88991],{"class":2268},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[167,88993,88994,88996,88999,89001,89003,89006,89008,89010,89012,89014,89017,89019],{"class":169,"line":18958},[167,88995,72039],{"class":184},[167,88997,88998],{"class":512},".modalBox.",[167,89000,56389],{"class":173},[167,89002,898],{"class":512},[167,89004,89005],{"class":177},"'i'",[167,89007,32833],{"class":512},[167,89009,59802],{"class":173},[167,89011,898],{"class":512},[167,89013,59807],{"class":177},[167,89015,89016],{"class":512},", () ",[167,89018,86708],{"class":731},[167,89020,17598],{"class":512},[167,89022,89023],{"class":169,"line":34636},[167,89024,89025],{"class":2268},"        \u002F\u002F 这个地方需要用到箭头函数\n",[167,89027,89028],{"class":169,"line":34642},[167,89029,89030],{"class":2268},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[167,89032,89033],{"class":169,"line":34648},[167,89034,89035],{"class":2268},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[167,89037,89038,89040,89042,89045],{"class":169,"line":34654},[167,89039,66715],{"class":184},[167,89041,2758],{"class":512},[167,89043,89044],{"class":173},"close",[167,89046,4020],{"class":512},[167,89048,89049],{"class":169,"line":34660},[167,89050,66804],{"class":512},[167,89052,89053],{"class":169,"line":34671},[167,89054,4231],{"class":512},[167,89056,89057],{"class":169,"line":34677},[167,89058,741],{"emptyLinePlaceholder":740},[167,89060,89061],{"class":169,"line":34697},[167,89062,89063],{"class":2268},"    \u002F\u002F 测试一下 点击 删除按钮\n",[167,89065,89066,89068,89070,89072,89075,89077,89079,89081,89083,89085,89087],{"class":169,"line":34703},[167,89067,54402],{"class":512},[167,89069,56389],{"class":173},[167,89071,898],{"class":512},[167,89073,89074],{"class":177},"'#delete'",[167,89076,32833],{"class":512},[167,89078,59802],{"class":173},[167,89080,898],{"class":512},[167,89082,59807],{"class":177},[167,89084,89016],{"class":512},[167,89086,86708],{"class":731},[167,89088,17598],{"class":512},[167,89090,89091],{"class":169,"line":34714},[167,89092,89093],{"class":2268},"      \u002F\u002F 先调用Model构造函数\n",[167,89095,89096,89098,89101,89103,89105,89107,89109,89112,89114,89117],{"class":169,"line":34720},[167,89097,60217],{"class":731},[167,89099,89100],{"class":184}," del",[167,89102,753],{"class":731},[167,89104,13606],{"class":731},[167,89106,88757],{"class":173},[167,89108,898],{"class":512},[167,89110,89111],{"class":177},"'温馨的提示'",[167,89113,14463],{"class":512},[167,89115,89116],{"class":177},"'您没有删除权限操作'",[167,89118,873],{"class":512},[167,89120,89121],{"class":169,"line":34726},[167,89122,89123],{"class":2268},"      \u002F\u002F 实例对象调用open方法\n",[167,89125,89126,89129,89131],{"class":169,"line":34732},[167,89127,89128],{"class":512},"      del.",[167,89130,88901],{"class":173},[167,89132,4020],{"class":512},[167,89134,89135],{"class":169,"line":34738},[167,89136,35463],{"class":512},[167,89138,89139],{"class":169,"line":34744},[167,89140,89141],{"class":2268},"    \u002F\u002F 测试一下 点击 登录按钮\n",[167,89143,89144,89146,89148,89150,89153,89155,89157,89159,89161,89163,89165],{"class":169,"line":34750},[167,89145,54402],{"class":512},[167,89147,56389],{"class":173},[167,89149,898],{"class":512},[167,89151,89152],{"class":177},"'#login'",[167,89154,32833],{"class":512},[167,89156,59802],{"class":173},[167,89158,898],{"class":512},[167,89160,59807],{"class":177},[167,89162,89016],{"class":512},[167,89164,86708],{"class":731},[167,89166,17598],{"class":512},[167,89168,89169],{"class":169,"line":34756},[167,89170,89093],{"class":2268},[167,89172,89173,89175,89178,89180,89182,89184,89186,89189,89191,89194],{"class":169,"line":34776},[167,89174,60217],{"class":731},[167,89176,89177],{"class":184}," log",[167,89179,753],{"class":731},[167,89181,13606],{"class":731},[167,89183,88757],{"class":173},[167,89185,898],{"class":512},[167,89187,89188],{"class":177},"'友情提示'",[167,89190,14463],{"class":512},[167,89192,89193],{"class":177},"'您还没有登录呢'",[167,89195,873],{"class":512},[167,89197,89198],{"class":169,"line":34782},[167,89199,89123],{"class":2268},[167,89201,89202,89205,89207],{"class":169,"line":34798},[167,89203,89204],{"class":512},"      log.",[167,89206,88901],{"class":173},[167,89208,4020],{"class":512},[167,89210,89211],{"class":169,"line":34804},[167,89212,35463],{"class":512},[167,89214,89215],{"class":169,"line":34818},[167,89216,89217],{"class":2268},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[167,89219,89220,89222,89224,89226,89228,89230,89232,89234],{"class":169,"line":34824},[167,89221,88892],{"class":184},[167,89223,2758],{"class":512},[167,89225,87565],{"class":184},[167,89227,2758],{"class":512},[167,89229,89044],{"class":173},[167,89231,753],{"class":731},[167,89233,60907],{"class":731},[167,89235,56442],{"class":512},[167,89237,89238,89240,89242,89244],{"class":169,"line":34839},[167,89239,72039],{"class":184},[167,89241,88998],{"class":512},[167,89243,58995],{"class":173},[167,89245,4020],{"class":512},[167,89247,89248],{"class":169,"line":34845},[167,89249,4231],{"class":512},[167,89251,89252,89254,89256],{"class":169,"line":34854},[167,89253,54412],{"class":512},[167,89255,53809],{"class":516},[167,89257,537],{"class":512},[167,89259,89260,89262,89264],{"class":169,"line":34860},[167,89261,575],{"class":512},[167,89263,517],{"class":516},[167,89265,537],{"class":512},[167,89267,89268],{"class":169,"line":34869},[167,89269,741],{"emptyLinePlaceholder":740},[167,89271,89272,89274,89276],{"class":169,"line":34875},[167,89273,575],{"class":512},[167,89275,52635],{"class":516},[167,89277,537],{"class":512},[19,89279,89280],{},[3528,89281],{"alt":32,"src":89282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89284,89286],{"id":89285},"_414-深浅拷贝","4.14 深浅拷贝",[494,89288,89290],{"id":89289},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89292,89293],{},[3528,89294],{"alt":32,"src":89295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89297,89298],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89300,89301],{},[3528,89302],{"alt":32,"src":89303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89305,89306],{},[3528,89307],{"alt":32,"src":89308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89310,89311],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89313,89314],{},[3528,89315],{"alt":32,"src":89316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89318,13360],{},[19,89320,89321],{},[3528,89322],{"alt":32,"src":89323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[494,89325,89327],{"id":89326},"_4142-深拷贝","4.14.2 深拷贝",[19,89329,89330],{},"深拷贝：拷贝的是对象，不是地址",[19,89332,89333],{},"常用的三种方法：",[40,89335,89336,89339,89342],{},[43,89337,89338],{},"通过递归实现深拷贝",[43,89340,89341],{},"lodash\u002FcloneDeep",[43,89343,89344],{},"通过JSON.stringify()实现",[24024,89346,89348],{"id":89347},"_41421-递归函数","4.14.2.1 递归函数",[19,89350,89351],{},[3528,89352],{"alt":32,"src":89353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[40,89355,89356],{},[43,89357,89358],{},"死递归占溢出：",[26,89360,89362],{"className":503,"code":89361,"language":505,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,89363,89364,89372,89380,89384,89389,89393,89398,89406],{"__ignoreMap":32},[167,89365,89366,89368,89370],{"class":169,"line":170},[167,89367,513],{"class":512},[167,89369,517],{"class":516},[167,89371,537],{"class":512},[167,89373,89374,89376,89378],{"class":169,"line":191},[167,89375,542],{"class":512},[167,89377,53809],{"class":516},[167,89379,537],{"class":512},[167,89381,89382],{"class":169,"line":205},[167,89383,79131],{"class":512},[167,89385,89386],{"class":169,"line":219},[167,89387,89388],{"class":512},"      fn()\n",[167,89390,89391],{"class":169,"line":230},[167,89392,4231],{"class":512},[167,89394,89395],{"class":169,"line":241},[167,89396,89397],{"class":512},"    fn()\n",[167,89399,89400,89402,89404],{"class":169,"line":261},[167,89401,54412],{"class":512},[167,89403,53809],{"class":516},[167,89405,537],{"class":512},[167,89407,89408,89410,89412],{"class":169,"line":773},[167,89409,575],{"class":512},[167,89411,517],{"class":516},[167,89413,537],{"class":512},[40,89415,89416],{"start":191},[43,89417,89418],{},"递归函数要加判断条件：",[19,89420,89421],{},[3528,89422],{"alt":32,"src":89423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[40,89425,89426],{"start":205},[43,89427,89428],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,89430,89432],{"className":52633,"code":89431,"language":52635,"meta":32,"style":32},"\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",[34,89433,89434,89444,89458,89462,89470,89484,89504,89516,89524,89528,89536,89548,89556,89564,89589,89601,89605,89612,89620,89628,89632],{"__ignoreMap":32},[167,89435,89436,89438,89440,89442],{"class":169,"line":170},[167,89437,53297],{"class":512},[167,89439,53300],{"class":516},[167,89441,53303],{"class":173},[167,89443,537],{"class":512},[167,89445,89446,89448,89450,89452,89454,89456],{"class":169,"line":191},[167,89447,513],{"class":512},[167,89449,52635],{"class":516},[167,89451,53314],{"class":173},[167,89453,523],{"class":512},[167,89455,53319],{"class":177},[167,89457,537],{"class":512},[167,89459,89460],{"class":169,"line":205},[167,89461,741],{"emptyLinePlaceholder":740},[167,89463,89464,89466,89468],{"class":169,"line":219},[167,89465,513],{"class":512},[167,89467,53332],{"class":516},[167,89469,537],{"class":512},[167,89471,89472,89474,89476,89478,89480,89482],{"class":169,"line":230},[167,89473,542],{"class":512},[167,89475,53342],{"class":516},[167,89477,53345],{"class":173},[167,89479,523],{"class":512},[167,89481,53350],{"class":177},[167,89483,537],{"class":512},[167,89485,89486,89488,89490,89492,89494,89496,89498,89500,89502],{"class":169,"line":241},[167,89487,542],{"class":512},[167,89489,53342],{"class":516},[167,89491,520],{"class":173},[167,89493,523],{"class":512},[167,89495,53389],{"class":177},[167,89497,53369],{"class":173},[167,89499,523],{"class":512},[167,89501,53396],{"class":177},[167,89503,537],{"class":512},[167,89505,89506,89508,89510,89512,89514],{"class":169,"line":261},[167,89507,542],{"class":512},[167,89509,53405],{"class":516},[167,89511,53408],{"class":512},[167,89513,53405],{"class":516},[167,89515,537],{"class":512},[167,89517,89518,89520,89522],{"class":169,"line":773},[167,89519,575],{"class":512},[167,89521,53332],{"class":516},[167,89523,537],{"class":512},[167,89525,89526],{"class":169,"line":779},[167,89527,741],{"emptyLinePlaceholder":740},[167,89529,89530,89532,89534],{"class":169,"line":785},[167,89531,513],{"class":512},[167,89533,517],{"class":516},[167,89535,537],{"class":512},[167,89537,89538,89540,89542,89544,89546],{"class":169,"line":790},[167,89539,542],{"class":512},[167,89541,53609],{"class":516},[167,89543,57303],{"class":512},[167,89545,53609],{"class":516},[167,89547,537],{"class":512},[167,89549,89550,89552,89554],{"class":169,"line":796},[167,89551,542],{"class":512},[167,89553,53809],{"class":516},[167,89555,537],{"class":512},[167,89557,89558,89560,89562],{"class":169,"line":802},[167,89559,72072],{"class":731},[167,89561,75761],{"class":173},[167,89563,12881],{"class":512},[167,89565,89566,89568,89570,89572,89574,89576,89578,89580,89582,89584,89587],{"class":169,"line":808},[167,89567,57760],{"class":512},[167,89569,56389],{"class":173},[167,89571,898],{"class":512},[167,89573,83918],{"class":177},[167,89575,76237],{"class":512},[167,89577,523],{"class":731},[167,89579,13606],{"class":731},[167,89581,75777],{"class":173},[167,89583,19287],{"class":512},[167,89585,89586],{"class":173},"toLocaleString",[167,89588,4020],{"class":512},[167,89590,89591,89594,89597,89599],{"class":169,"line":814},[167,89592,89593],{"class":173},"      setTimeout",[167,89595,89596],{"class":512},"(getTime, ",[167,89598,8440],{"class":184},[167,89600,873],{"class":512},[167,89602,89603],{"class":169,"line":820},[167,89604,4231],{"class":512},[167,89606,89607,89610],{"class":169,"line":826},[167,89608,89609],{"class":173},"    getTime",[167,89611,4020],{"class":512},[167,89613,89614,89616,89618],{"class":169,"line":832},[167,89615,54412],{"class":512},[167,89617,53809],{"class":516},[167,89619,537],{"class":512},[167,89621,89622,89624,89626],{"class":169,"line":837},[167,89623,575],{"class":512},[167,89625,517],{"class":516},[167,89627,537],{"class":512},[167,89629,89630],{"class":169,"line":842},[167,89631,741],{"emptyLinePlaceholder":740},[167,89633,89634,89636,89638],{"class":169,"line":860},[167,89635,575],{"class":512},[167,89637,52635],{"class":516},[167,89639,537],{"class":512},[19,89641,89642],{},[3528,89643],{"alt":32,"src":89644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[40,89646,89647],{"start":219},[43,89648,89338],{},[19,89650,89651],{},[3528,89652],{"alt":32,"src":89653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89655,89656],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89658,41189],{},[19,89660,89661],{},"这个是简易版的递归函数深拷贝",[19,89663,89664],{},"一定要注意先数组再对象，因为万物皆可对象",[26,89666,89668],{"className":52633,"code":89667,"language":52635,"meta":32,"style":32},"\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",[34,89669,89670,89680,89694,89698,89706,89720,89740,89752,89760,89764,89772,89780,89790,89799,89807,89823,89827,89835,89839,89843,89855,89860,89879,89895,89900,89905,89910,89925,89930,89935,89944,89952,89969,89977,89983,89991,89996,90001,90010,90014,90018,90022,90033,90042,90052,90066,90076,90084,90092,90100,90104],{"__ignoreMap":32},[167,89671,89672,89674,89676,89678],{"class":169,"line":170},[167,89673,53297],{"class":512},[167,89675,53300],{"class":516},[167,89677,53303],{"class":173},[167,89679,537],{"class":512},[167,89681,89682,89684,89686,89688,89690,89692],{"class":169,"line":191},[167,89683,513],{"class":512},[167,89685,52635],{"class":516},[167,89687,53314],{"class":173},[167,89689,523],{"class":512},[167,89691,53319],{"class":177},[167,89693,537],{"class":512},[167,89695,89696],{"class":169,"line":205},[167,89697,741],{"emptyLinePlaceholder":740},[167,89699,89700,89702,89704],{"class":169,"line":219},[167,89701,513],{"class":512},[167,89703,53332],{"class":516},[167,89705,537],{"class":512},[167,89707,89708,89710,89712,89714,89716,89718],{"class":169,"line":230},[167,89709,542],{"class":512},[167,89711,53342],{"class":516},[167,89713,53345],{"class":173},[167,89715,523],{"class":512},[167,89717,53350],{"class":177},[167,89719,537],{"class":512},[167,89721,89722,89724,89726,89728,89730,89732,89734,89736,89738],{"class":169,"line":241},[167,89723,542],{"class":512},[167,89725,53342],{"class":516},[167,89727,520],{"class":173},[167,89729,523],{"class":512},[167,89731,53389],{"class":177},[167,89733,53369],{"class":173},[167,89735,523],{"class":512},[167,89737,53396],{"class":177},[167,89739,537],{"class":512},[167,89741,89742,89744,89746,89748,89750],{"class":169,"line":261},[167,89743,542],{"class":512},[167,89745,53405],{"class":516},[167,89747,53408],{"class":512},[167,89749,53405],{"class":516},[167,89751,537],{"class":512},[167,89753,89754,89756,89758],{"class":169,"line":773},[167,89755,575],{"class":512},[167,89757,53332],{"class":516},[167,89759,537],{"class":512},[167,89761,89762],{"class":169,"line":779},[167,89763,741],{"emptyLinePlaceholder":740},[167,89765,89766,89768,89770],{"class":169,"line":785},[167,89767,513],{"class":512},[167,89769,517],{"class":516},[167,89771,537],{"class":512},[167,89773,89774,89776,89778],{"class":169,"line":790},[167,89775,542],{"class":512},[167,89777,53809],{"class":516},[167,89779,537],{"class":512},[167,89781,89782,89784,89786,89788],{"class":169,"line":796},[167,89783,13249],{"class":731},[167,89785,71959],{"class":184},[167,89787,753],{"class":731},[167,89789,17598],{"class":512},[167,89791,89792,89794,89797],{"class":169,"line":802},[167,89793,73604],{"class":512},[167,89795,89796],{"class":177},"'pink'",[167,89798,33471],{"class":512},[167,89800,89801,89803,89805],{"class":169,"line":808},[167,89802,73614],{"class":512},[167,89804,2850],{"class":184},[167,89806,33471],{"class":512},[167,89808,89809,89812,89815,89817,89820],{"class":169,"line":814},[167,89810,89811],{"class":512},"      hobby: [",[167,89813,89814],{"class":177},"'乒乓球'",[167,89816,14463],{"class":512},[167,89818,89819],{"class":177},"'足球'",[167,89821,89822],{"class":512},"],\n",[167,89824,89825],{"class":169,"line":820},[167,89826,79860],{"class":512},[167,89828,89829,89832],{"class":169,"line":826},[167,89830,89831],{"class":512},"        baby: ",[167,89833,89834],{"class":177},"'小pink'\n",[167,89836,89837],{"class":169,"line":832},[167,89838,54393],{"class":512},[167,89840,89841],{"class":169,"line":837},[167,89842,4231],{"class":512},[167,89844,89845,89847,89850,89852],{"class":169,"line":842},[167,89846,13249],{"class":731},[167,89848,89849],{"class":184}," o",[167,89851,753],{"class":731},[167,89853,89854],{"class":512}," {}\n",[167,89856,89857],{"class":169,"line":860},[167,89858,89859],{"class":2268},"    \u002F\u002F 拷贝函数\n",[167,89861,89862,89864,89867,89869,89872,89874,89877],{"class":169,"line":876},[167,89863,72072],{"class":731},[167,89865,89866],{"class":173}," deepCopy",[167,89868,898],{"class":512},[167,89870,89871],{"class":7246},"newObj",[167,89873,14463],{"class":512},[167,89875,89876],{"class":7246},"oldObj",[167,89878,14470],{"class":512},[167,89880,89881,89883,89885,89887,89890,89892],{"class":169,"line":887},[167,89882,54279],{"class":731},[167,89884,3716],{"class":512},[167,89886,53843],{"class":731},[167,89888,89889],{"class":512}," k ",[167,89891,973],{"class":731},[167,89893,89894],{"class":512}," oldObj) {\n",[167,89896,89897],{"class":169,"line":892},[167,89898,89899],{"class":2268},"        \u002F\u002F 处理数组的问题\n",[167,89901,89902],{"class":169,"line":907},[167,89903,89904],{"class":2268},"        \u002F\u002F 判断是否属于数组\n",[167,89906,89907],{"class":169,"line":920},[167,89908,89909],{"class":2268},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[167,89911,89912,89914,89917,89920,89923],{"class":169,"line":933},[167,89913,4540],{"class":731},[167,89915,89916],{"class":512}," (oldObj[k] ",[167,89918,89919],{"class":731},"instanceof",[167,89921,89922],{"class":173}," Array",[167,89924,14470],{"class":512},[167,89926,89927],{"class":169,"line":946},[167,89928,89929],{"class":2268},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[167,89931,89932],{"class":169,"line":959},[167,89933,89934],{"class":2268},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[167,89936,89937,89940,89942],{"class":169,"line":964},[167,89938,89939],{"class":512},"          newObj[k] ",[167,89941,523],{"class":731},[167,89943,53834],{"class":512},[167,89945,89946,89949],{"class":169,"line":987},[167,89947,89948],{"class":173},"          deepCopy",[167,89950,89951],{"class":512},"(newObj[k], oldObj[k])\n",[167,89953,89954,89956,89958,89960,89962,89964,89967],{"class":169,"line":993},[167,89955,82067],{"class":512},[167,89957,3755],{"class":731},[167,89959,3758],{"class":731},[167,89961,89916],{"class":512},[167,89963,89919],{"class":731},[167,89965,89966],{"class":173}," Object",[167,89968,14470],{"class":512},[167,89970,89971,89973,89975],{"class":169,"line":998},[167,89972,89939],{"class":512},[167,89974,523],{"class":731},[167,89976,89854],{"class":512},[167,89978,89979,89981],{"class":169,"line":1010},[167,89980,89948],{"class":173},[167,89982,89951],{"class":512},[167,89984,89985,89987,89989],{"class":169,"line":1022},[167,89986,82067],{"class":512},[167,89988,3755],{"class":731},[167,89990,17598],{"class":512},[167,89992,89993],{"class":169,"line":1027},[167,89994,89995],{"class":2268},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[167,89997,89998],{"class":169,"line":1032},[167,89999,90000],{"class":2268},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[167,90002,90003,90005,90007],{"class":169,"line":1049},[167,90004,89939],{"class":512},[167,90006,523],{"class":731},[167,90008,90009],{"class":512}," oldObj[k]\n",[167,90011,90012],{"class":169,"line":10005},[167,90013,4572],{"class":512},[167,90015,90016],{"class":169,"line":10011},[167,90017,54393],{"class":512},[167,90019,90020],{"class":169,"line":10038},[167,90021,4231],{"class":512},[167,90023,90024,90027,90030],{"class":169,"line":10043},[167,90025,90026],{"class":173},"    deepCopy",[167,90028,90029],{"class":512},"(o, obj) ",[167,90031,90032],{"class":2268},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[167,90034,90035,90037,90039],{"class":169,"line":10049},[167,90036,75741],{"class":512},[167,90038,60236],{"class":173},[167,90040,90041],{"class":512},"(o)\n",[167,90043,90044,90047,90049],{"class":169,"line":10061},[167,90045,90046],{"class":512},"    o.age ",[167,90048,523],{"class":731},[167,90050,90051],{"class":184}," 20\n",[167,90053,90054,90057,90059,90061,90063],{"class":169,"line":10073},[167,90055,90056],{"class":512},"    o.hobby[",[167,90058,1154],{"class":184},[167,90060,6475],{"class":512},[167,90062,523],{"class":731},[167,90064,90065],{"class":177}," '篮球'\n",[167,90067,90068,90071,90073],{"class":169,"line":10085},[167,90069,90070],{"class":512},"    o.family ",[167,90072,523],{"class":731},[167,90074,90075],{"class":177}," '老pink'\n",[167,90077,90078,90080,90082],{"class":169,"line":11744},[167,90079,75741],{"class":512},[167,90081,60236],{"class":173},[167,90083,72024],{"class":512},[167,90085,90086,90088,90090],{"class":169,"line":11769},[167,90087,54412],{"class":512},[167,90089,53809],{"class":516},[167,90091,537],{"class":512},[167,90093,90094,90096,90098],{"class":169,"line":11792},[167,90095,575],{"class":512},[167,90097,517],{"class":516},[167,90099,537],{"class":512},[167,90101,90102],{"class":169,"line":11816},[167,90103,741],{"emptyLinePlaceholder":740},[167,90105,90106,90108,90110],{"class":169,"line":11821},[167,90107,575],{"class":512},[167,90109,52635],{"class":516},[167,90111,537],{"class":512},[19,90113,90114],{},[3528,90115],{"alt":32,"src":90116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24024,90118,90120,90121],{"id":90119},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2354,90122,90123],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90125,90126],{},[2439,90127,90128],{"href":90128,"rel":90129},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25887],[19,90131,90132],{},"lodash里边的方法都要加上一个下划线_",[19,90134,90135],{},"_.cloneDeep()",[26,90137,90139],{"className":52633,"code":90138,"language":52635,"meta":32,"style":32},"\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",[34,90140,90141,90151,90165,90169,90177,90191,90211,90223,90231,90235,90243,90248,90267,90275,90285,90293,90301,90313,90317,90323,90327,90331,90347,90355,90364,90372,90380,90388,90392],{"__ignoreMap":32},[167,90142,90143,90145,90147,90149],{"class":169,"line":170},[167,90144,53297],{"class":512},[167,90146,53300],{"class":516},[167,90148,53303],{"class":173},[167,90150,537],{"class":512},[167,90152,90153,90155,90157,90159,90161,90163],{"class":169,"line":191},[167,90154,513],{"class":512},[167,90156,52635],{"class":516},[167,90158,53314],{"class":173},[167,90160,523],{"class":512},[167,90162,53319],{"class":177},[167,90164,537],{"class":512},[167,90166,90167],{"class":169,"line":205},[167,90168,741],{"emptyLinePlaceholder":740},[167,90170,90171,90173,90175],{"class":169,"line":219},[167,90172,513],{"class":512},[167,90174,53332],{"class":516},[167,90176,537],{"class":512},[167,90178,90179,90181,90183,90185,90187,90189],{"class":169,"line":230},[167,90180,542],{"class":512},[167,90182,53342],{"class":516},[167,90184,53345],{"class":173},[167,90186,523],{"class":512},[167,90188,53350],{"class":177},[167,90190,537],{"class":512},[167,90192,90193,90195,90197,90199,90201,90203,90205,90207,90209],{"class":169,"line":241},[167,90194,542],{"class":512},[167,90196,53342],{"class":516},[167,90198,520],{"class":173},[167,90200,523],{"class":512},[167,90202,53389],{"class":177},[167,90204,53369],{"class":173},[167,90206,523],{"class":512},[167,90208,53396],{"class":177},[167,90210,537],{"class":512},[167,90212,90213,90215,90217,90219,90221],{"class":169,"line":261},[167,90214,542],{"class":512},[167,90216,53405],{"class":516},[167,90218,53408],{"class":512},[167,90220,53405],{"class":516},[167,90222,537],{"class":512},[167,90224,90225,90227,90229],{"class":169,"line":773},[167,90226,575],{"class":512},[167,90228,53332],{"class":516},[167,90230,537],{"class":512},[167,90232,90233],{"class":169,"line":779},[167,90234,741],{"emptyLinePlaceholder":740},[167,90236,90237,90239,90241],{"class":169,"line":785},[167,90238,513],{"class":512},[167,90240,517],{"class":516},[167,90242,537],{"class":512},[167,90244,90245],{"class":169,"line":790},[167,90246,90247],{"class":2268},"  \u003C!-- 先引用这个库 -->\n",[167,90249,90250,90252,90254,90256,90258,90261,90263,90265],{"class":169,"line":796},[167,90251,542],{"class":512},[167,90253,53809],{"class":516},[167,90255,57228],{"class":173},[167,90257,523],{"class":512},[167,90259,90260],{"class":177},"\"lodash.min.js\"",[167,90262,57303],{"class":512},[167,90264,53809],{"class":516},[167,90266,537],{"class":512},[167,90268,90269,90271,90273],{"class":169,"line":802},[167,90270,542],{"class":512},[167,90272,53809],{"class":516},[167,90274,537],{"class":512},[167,90276,90277,90279,90281,90283],{"class":169,"line":808},[167,90278,13249],{"class":731},[167,90280,71959],{"class":184},[167,90282,753],{"class":731},[167,90284,17598],{"class":512},[167,90286,90287,90289,90291],{"class":169,"line":814},[167,90288,73604],{"class":512},[167,90290,89796],{"class":177},[167,90292,33471],{"class":512},[167,90294,90295,90297,90299],{"class":169,"line":820},[167,90296,73614],{"class":512},[167,90298,2850],{"class":184},[167,90300,33471],{"class":512},[167,90302,90303,90305,90307,90309,90311],{"class":169,"line":826},[167,90304,89811],{"class":512},[167,90306,89814],{"class":177},[167,90308,14463],{"class":512},[167,90310,89819],{"class":177},[167,90312,89822],{"class":512},[167,90314,90315],{"class":169,"line":832},[167,90316,79860],{"class":512},[167,90318,90319,90321],{"class":169,"line":837},[167,90320,89831],{"class":512},[167,90322,89834],{"class":177},[167,90324,90325],{"class":169,"line":842},[167,90326,54393],{"class":512},[167,90328,90329],{"class":169,"line":860},[167,90330,4231],{"class":512},[167,90332,90333,90335,90337,90339,90342,90345],{"class":169,"line":876},[167,90334,13249],{"class":731},[167,90336,89849],{"class":184},[167,90338,753],{"class":731},[167,90340,90341],{"class":512}," _.",[167,90343,90344],{"class":173},"cloneDeep",[167,90346,72024],{"class":512},[167,90348,90349,90351,90353],{"class":169,"line":887},[167,90350,75741],{"class":512},[167,90352,60236],{"class":173},[167,90354,90041],{"class":512},[167,90356,90357,90360,90362],{"class":169,"line":892},[167,90358,90359],{"class":512},"    o.family.baby ",[167,90361,523],{"class":731},[167,90363,90075],{"class":177},[167,90365,90366,90368,90370],{"class":169,"line":907},[167,90367,75741],{"class":512},[167,90369,60236],{"class":173},[167,90371,72024],{"class":512},[167,90373,90374,90376,90378],{"class":169,"line":920},[167,90375,54412],{"class":512},[167,90377,53809],{"class":516},[167,90379,537],{"class":512},[167,90381,90382,90384,90386],{"class":169,"line":933},[167,90383,575],{"class":512},[167,90385,517],{"class":516},[167,90387,537],{"class":512},[167,90389,90390],{"class":169,"line":946},[167,90391,741],{"emptyLinePlaceholder":740},[167,90393,90394,90396,90398],{"class":169,"line":959},[167,90395,575],{"class":512},[167,90397,52635],{"class":516},[167,90399,537],{"class":512},[19,90401,90402],{},[3528,90403],{"alt":32,"src":90404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24024,90406,90408],{"id":90407},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,90410,90412],{"className":52633,"code":90411,"language":52635,"meta":32,"style":32},"\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",[34,90413,90414,90424,90438,90442,90450,90464,90484,90496,90504,90508,90516,90524,90534,90542,90550,90562,90566,90572,90576,90580,90585,90590,90595,90621,90629,90638,90646,90654,90662,90666],{"__ignoreMap":32},[167,90415,90416,90418,90420,90422],{"class":169,"line":170},[167,90417,53297],{"class":512},[167,90419,53300],{"class":516},[167,90421,53303],{"class":173},[167,90423,537],{"class":512},[167,90425,90426,90428,90430,90432,90434,90436],{"class":169,"line":191},[167,90427,513],{"class":512},[167,90429,52635],{"class":516},[167,90431,53314],{"class":173},[167,90433,523],{"class":512},[167,90435,53319],{"class":177},[167,90437,537],{"class":512},[167,90439,90440],{"class":169,"line":205},[167,90441,741],{"emptyLinePlaceholder":740},[167,90443,90444,90446,90448],{"class":169,"line":219},[167,90445,513],{"class":512},[167,90447,53332],{"class":516},[167,90449,537],{"class":512},[167,90451,90452,90454,90456,90458,90460,90462],{"class":169,"line":230},[167,90453,542],{"class":512},[167,90455,53342],{"class":516},[167,90457,53345],{"class":173},[167,90459,523],{"class":512},[167,90461,53350],{"class":177},[167,90463,537],{"class":512},[167,90465,90466,90468,90470,90472,90474,90476,90478,90480,90482],{"class":169,"line":241},[167,90467,542],{"class":512},[167,90469,53342],{"class":516},[167,90471,520],{"class":173},[167,90473,523],{"class":512},[167,90475,53389],{"class":177},[167,90477,53369],{"class":173},[167,90479,523],{"class":512},[167,90481,53396],{"class":177},[167,90483,537],{"class":512},[167,90485,90486,90488,90490,90492,90494],{"class":169,"line":261},[167,90487,542],{"class":512},[167,90489,53405],{"class":516},[167,90491,53408],{"class":512},[167,90493,53405],{"class":516},[167,90495,537],{"class":512},[167,90497,90498,90500,90502],{"class":169,"line":773},[167,90499,575],{"class":512},[167,90501,53332],{"class":516},[167,90503,537],{"class":512},[167,90505,90506],{"class":169,"line":779},[167,90507,741],{"emptyLinePlaceholder":740},[167,90509,90510,90512,90514],{"class":169,"line":785},[167,90511,513],{"class":512},[167,90513,517],{"class":516},[167,90515,537],{"class":512},[167,90517,90518,90520,90522],{"class":169,"line":790},[167,90519,542],{"class":512},[167,90521,53809],{"class":516},[167,90523,537],{"class":512},[167,90525,90526,90528,90530,90532],{"class":169,"line":796},[167,90527,13249],{"class":731},[167,90529,71959],{"class":184},[167,90531,753],{"class":731},[167,90533,17598],{"class":512},[167,90535,90536,90538,90540],{"class":169,"line":802},[167,90537,73604],{"class":512},[167,90539,89796],{"class":177},[167,90541,33471],{"class":512},[167,90543,90544,90546,90548],{"class":169,"line":808},[167,90545,73614],{"class":512},[167,90547,2850],{"class":184},[167,90549,33471],{"class":512},[167,90551,90552,90554,90556,90558,90560],{"class":169,"line":814},[167,90553,89811],{"class":512},[167,90555,89814],{"class":177},[167,90557,14463],{"class":512},[167,90559,89819],{"class":177},[167,90561,89822],{"class":512},[167,90563,90564],{"class":169,"line":820},[167,90565,79860],{"class":512},[167,90567,90568,90570],{"class":169,"line":826},[167,90569,89831],{"class":512},[167,90571,89834],{"class":177},[167,90573,90574],{"class":169,"line":832},[167,90575,54393],{"class":512},[167,90577,90578],{"class":169,"line":837},[167,90579,4231],{"class":512},[167,90581,90582],{"class":169,"line":842},[167,90583,90584],{"class":2268},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[167,90586,90587],{"class":169,"line":860},[167,90588,90589],{"class":2268},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[167,90591,90592],{"class":169,"line":876},[167,90593,90594],{"class":2268},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[167,90596,90597,90599,90601,90603,90606,90608,90611,90613,90615,90617,90619],{"class":169,"line":887},[167,90598,13249],{"class":731},[167,90600,89849],{"class":184},[167,90602,753],{"class":731},[167,90604,90605],{"class":184}," JSON",[167,90607,2758],{"class":512},[167,90609,90610],{"class":173},"parse",[167,90612,898],{"class":512},[167,90614,73652],{"class":184},[167,90616,2758],{"class":512},[167,90618,73657],{"class":173},[167,90620,73660],{"class":512},[167,90622,90623,90625,90627],{"class":169,"line":892},[167,90624,75741],{"class":512},[167,90626,60236],{"class":173},[167,90628,90041],{"class":512},[167,90630,90631,90633,90635],{"class":169,"line":907},[167,90632,90359],{"class":512},[167,90634,523],{"class":731},[167,90636,90637],{"class":177}," '123'\n",[167,90639,90640,90642,90644],{"class":169,"line":920},[167,90641,75741],{"class":512},[167,90643,60236],{"class":173},[167,90645,72024],{"class":512},[167,90647,90648,90650,90652],{"class":169,"line":933},[167,90649,54412],{"class":512},[167,90651,53809],{"class":516},[167,90653,537],{"class":512},[167,90655,90656,90658,90660],{"class":169,"line":946},[167,90657,575],{"class":512},[167,90659,517],{"class":516},[167,90661,537],{"class":512},[167,90663,90664],{"class":169,"line":959},[167,90665,741],{"emptyLinePlaceholder":740},[167,90667,90668,90670,90672],{"class":169,"line":964},[167,90669,575],{"class":512},[167,90671,52635],{"class":516},[167,90673,537],{"class":512},[19,90675,90676],{},[3528,90677],{"alt":32,"src":90678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90680,90682],{"id":90681},"_415-异常处理","4.15 异常处理",[40,90684,90685],{},[43,90686,90687],{},"throw抛异常",[19,90689,90690],{},[3528,90691],{"alt":32,"src":90692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[40,90694,90695],{"start":191},[43,90696,90697],{},"try\u002Fcatch 捕获错误信息",[19,90699,90700],{},[3528,90701],{"alt":32,"src":90702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,90704,90706],{"className":52633,"code":90705,"language":52635,"meta":32,"style":32},"\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",[34,90707,90708,90718,90732,90736,90744,90758,90778,90790,90798,90802,90810,90822,90830,90839,90846,90851,90870,90879,90890,90895,90905,90910,90915,90920,90937,90941,90946,90953,90965,90969,90981,90985,90989,90994,90999,91006,91014,91022,91026],{"__ignoreMap":32},[167,90709,90710,90712,90714,90716],{"class":169,"line":170},[167,90711,53297],{"class":512},[167,90713,53300],{"class":516},[167,90715,53303],{"class":173},[167,90717,537],{"class":512},[167,90719,90720,90722,90724,90726,90728,90730],{"class":169,"line":191},[167,90721,513],{"class":512},[167,90723,52635],{"class":516},[167,90725,53314],{"class":173},[167,90727,523],{"class":512},[167,90729,53319],{"class":177},[167,90731,537],{"class":512},[167,90733,90734],{"class":169,"line":205},[167,90735,741],{"emptyLinePlaceholder":740},[167,90737,90738,90740,90742],{"class":169,"line":219},[167,90739,513],{"class":512},[167,90741,53332],{"class":516},[167,90743,537],{"class":512},[167,90745,90746,90748,90750,90752,90754,90756],{"class":169,"line":230},[167,90747,542],{"class":512},[167,90749,53342],{"class":516},[167,90751,53345],{"class":173},[167,90753,523],{"class":512},[167,90755,53350],{"class":177},[167,90757,537],{"class":512},[167,90759,90760,90762,90764,90766,90768,90770,90772,90774,90776],{"class":169,"line":241},[167,90761,542],{"class":512},[167,90763,53342],{"class":516},[167,90765,520],{"class":173},[167,90767,523],{"class":512},[167,90769,53389],{"class":177},[167,90771,53369],{"class":173},[167,90773,523],{"class":512},[167,90775,53396],{"class":177},[167,90777,537],{"class":512},[167,90779,90780,90782,90784,90786,90788],{"class":169,"line":261},[167,90781,542],{"class":512},[167,90783,53405],{"class":516},[167,90785,53408],{"class":512},[167,90787,53405],{"class":516},[167,90789,537],{"class":512},[167,90791,90792,90794,90796],{"class":169,"line":773},[167,90793,575],{"class":512},[167,90795,53332],{"class":516},[167,90797,537],{"class":512},[167,90799,90800],{"class":169,"line":779},[167,90801,741],{"emptyLinePlaceholder":740},[167,90803,90804,90806,90808],{"class":169,"line":785},[167,90805,513],{"class":512},[167,90807,517],{"class":516},[167,90809,537],{"class":512},[167,90811,90812,90814,90816,90818,90820],{"class":169,"line":790},[167,90813,542],{"class":512},[167,90815,19],{"class":516},[167,90817,55486],{"class":512},[167,90819,19],{"class":516},[167,90821,537],{"class":512},[167,90823,90824,90826,90828],{"class":169,"line":796},[167,90825,542],{"class":512},[167,90827,53809],{"class":516},[167,90829,537],{"class":512},[167,90831,90832,90834,90837],{"class":169,"line":802},[167,90833,72072],{"class":731},[167,90835,90836],{"class":173}," fn",[167,90838,12881],{"class":512},[167,90840,90841,90844],{"class":169,"line":808},[167,90842,90843],{"class":731},"      try",[167,90845,17598],{"class":512},[167,90847,90848],{"class":169,"line":814},[167,90849,90850],{"class":2268},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[167,90852,90853,90855,90857,90859,90861,90863,90865,90868],{"class":169,"line":820},[167,90854,63259],{"class":731},[167,90856,8855],{"class":184},[167,90858,753],{"class":731},[167,90860,56386],{"class":512},[167,90862,56389],{"class":173},[167,90864,898],{"class":512},[167,90866,90867],{"class":177},"'.p'",[167,90869,873],{"class":512},[167,90871,90872,90875,90877],{"class":169,"line":826},[167,90873,90874],{"class":512},"        p.style.color ",[167,90876,523],{"class":731},[167,90878,69040],{"class":177},[167,90880,90881,90884,90887],{"class":169,"line":832},[167,90882,90883],{"class":512},"      } ",[167,90885,90886],{"class":731},"catch",[167,90888,90889],{"class":512}," (err) {\n",[167,90891,90892],{"class":169,"line":837},[167,90893,90894],{"class":2268},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[167,90896,90897,90900,90902],{"class":169,"line":842},[167,90898,90899],{"class":512},"        console.",[167,90901,60236],{"class":173},[167,90903,90904],{"class":512},"(err.message)\n",[167,90906,90907],{"class":169,"line":860},[167,90908,90909],{"class":2268},"        \u002F\u002F 想要中断程序，需要加return\n",[167,90911,90912],{"class":169,"line":876},[167,90913,90914],{"class":2268},"        \u002F\u002F return\n",[167,90916,90917],{"class":169,"line":887},[167,90918,90919],{"class":2268},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[167,90921,90922,90925,90927,90930,90932,90935],{"class":169,"line":892},[167,90923,90924],{"class":731},"        throw",[167,90926,13606],{"class":731},[167,90928,90929],{"class":173}," Error",[167,90931,898],{"class":512},[167,90933,90934],{"class":177},"'你看看，选择器错误了吧'",[167,90936,873],{"class":512},[167,90938,90939],{"class":169,"line":907},[167,90940,54393],{"class":512},[167,90942,90943],{"class":169,"line":920},[167,90944,90945],{"class":2268},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[167,90947,90948,90951],{"class":169,"line":933},[167,90949,90950],{"class":731},"      finally",[167,90952,17598],{"class":512},[167,90954,90955,90958,90960,90963],{"class":169,"line":946},[167,90956,90957],{"class":173},"        alert",[167,90959,898],{"class":512},[167,90961,90962],{"class":177},"'弹出对话框'",[167,90964,873],{"class":512},[167,90966,90967],{"class":169,"line":959},[167,90968,54393],{"class":512},[167,90970,90971,90973,90975,90977,90979],{"class":169,"line":964},[167,90972,60233],{"class":512},[167,90974,60236],{"class":173},[167,90976,898],{"class":512},[167,90978,2672],{"class":184},[167,90980,873],{"class":512},[167,90982,90983],{"class":169,"line":987},[167,90984,741],{"emptyLinePlaceholder":740},[167,90986,90987],{"class":169,"line":993},[167,90988,4231],{"class":512},[167,90990,90991],{"class":169,"line":998},[167,90992,90993],{"class":2268},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[167,90995,90996],{"class":169,"line":1010},[167,90997,90998],{"class":2268},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[167,91000,91001,91004],{"class":169,"line":1022},[167,91002,91003],{"class":173},"    fn",[167,91005,4020],{"class":512},[167,91007,91008,91010,91012],{"class":169,"line":1027},[167,91009,54412],{"class":512},[167,91011,53809],{"class":516},[167,91013,537],{"class":512},[167,91015,91016,91018,91020],{"class":169,"line":1032},[167,91017,575],{"class":512},[167,91019,517],{"class":516},[167,91021,537],{"class":512},[167,91023,91024],{"class":169,"line":1049},[167,91025,741],{"emptyLinePlaceholder":740},[167,91027,91028,91030,91032],{"class":169,"line":10005},[167,91029,575],{"class":512},[167,91031,52635],{"class":516},[167,91033,537],{"class":512},[19,91035,91036],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[40,91038,91039],{"start":205},[43,91040,91041],{},"debugger",[19,91043,91044],{},[3528,91045],{"alt":32,"src":91046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91048,91049],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91051,91053],{"id":91052},"_416-处理this","4.16 处理this",[494,91055,91057],{"id":91056},"_4161-this的指向","4.16.1 this的指向",[40,91059,91060],{},[43,91061,91062],{},"普通函数的this",[19,91064,91065],{},[3528,91066],{"alt":32,"src":91067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[40,91069,91070],{"start":191},[43,91071,91072],{},"箭头函数的this",[19,91074,91075],{},[3528,91076],{"alt":32,"src":91077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91079,91080],{},[3528,91081],{"alt":32,"src":91082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91084,91085],{},[3528,91086],{"alt":32,"src":91087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[494,91089,91091],{"id":91090},"_4162-this的改变","4.16.2 this的改变",[19,91093,91094],{},"call() apply() bind()",[40,91096,91097],{},[43,91098,91099],{},"call()",[19,91101,91102],{},[3528,91103],{"alt":32,"src":91104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91106,91107],{},"两个作用：①调用函数；②改变this指向",[26,91109,91111],{"className":503,"code":91110,"language":505,"meta":32,"style":32},"\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",[34,91112,91113,91121,91129,91133,91138,91142,91147,91152,91157,91161,91166,91174],{"__ignoreMap":32},[167,91114,91115,91117,91119],{"class":169,"line":170},[167,91116,513],{"class":512},[167,91118,517],{"class":516},[167,91120,537],{"class":512},[167,91122,91123,91125,91127],{"class":169,"line":191},[167,91124,542],{"class":512},[167,91126,53809],{"class":516},[167,91128,537],{"class":512},[167,91130,91131],{"class":169,"line":205},[167,91132,73511],{"class":512},[167,91134,91135],{"class":169,"line":219},[167,91136,91137],{"class":512},"      uname: 'pink'\n",[167,91139,91140],{"class":169,"line":230},[167,91141,4231],{"class":512},[167,91143,91144],{"class":169,"line":241},[167,91145,91146],{"class":512},"    function fn(x, y) {\n",[167,91148,91149],{"class":169,"line":261},[167,91150,91151],{"class":512},"      console.log(this)  \u002F\u002Fwindow\n",[167,91153,91154],{"class":169,"line":773},[167,91155,91156],{"class":512},"      console.log(x + y)\n",[167,91158,91159],{"class":169,"line":779},[167,91160,4231],{"class":512},[167,91162,91163],{"class":169,"line":785},[167,91164,91165],{"class":512},"    fn.call(obj, 1, 2)\n",[167,91167,91168,91170,91172],{"class":169,"line":790},[167,91169,54412],{"class":512},[167,91171,53809],{"class":516},[167,91173,537],{"class":512},[167,91175,91176,91178,91180],{"class":169,"line":796},[167,91177,575],{"class":512},[167,91179,517],{"class":516},[167,91181,537],{"class":512},[19,91183,91184],{},[3528,91185],{"alt":32,"src":91186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[40,91188,91189],{"start":191},[43,91190,91191],{},"apply()",[19,91193,91194],{},[3528,91195],{"alt":32,"src":91196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91198,91107],{},[19,91200,91201],{},"call传递的是普通参数，而apply必须传递的是数组",[26,91203,91205],{"className":52633,"code":91204,"language":52635,"meta":32,"style":32},"\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",[34,91206,91207,91217,91231,91235,91243,91257,91277,91289,91297,91301,91309,91317,91327,91334,91338,91343,91359,91371,91385,91389,91394,91413,91418,91422,91427,91432,91440,91445,91467,91472,91488,91504,91516,91520,91525,91544,91552,91560,91564],{"__ignoreMap":32},[167,91208,91209,91211,91213,91215],{"class":169,"line":170},[167,91210,53297],{"class":512},[167,91212,53300],{"class":516},[167,91214,53303],{"class":173},[167,91216,537],{"class":512},[167,91218,91219,91221,91223,91225,91227,91229],{"class":169,"line":191},[167,91220,513],{"class":512},[167,91222,52635],{"class":516},[167,91224,53314],{"class":173},[167,91226,523],{"class":512},[167,91228,53319],{"class":177},[167,91230,537],{"class":512},[167,91232,91233],{"class":169,"line":205},[167,91234,741],{"emptyLinePlaceholder":740},[167,91236,91237,91239,91241],{"class":169,"line":219},[167,91238,513],{"class":512},[167,91240,53332],{"class":516},[167,91242,537],{"class":512},[167,91244,91245,91247,91249,91251,91253,91255],{"class":169,"line":230},[167,91246,542],{"class":512},[167,91248,53342],{"class":516},[167,91250,53345],{"class":173},[167,91252,523],{"class":512},[167,91254,53350],{"class":177},[167,91256,537],{"class":512},[167,91258,91259,91261,91263,91265,91267,91269,91271,91273,91275],{"class":169,"line":241},[167,91260,542],{"class":512},[167,91262,53342],{"class":516},[167,91264,520],{"class":173},[167,91266,523],{"class":512},[167,91268,53389],{"class":177},[167,91270,53369],{"class":173},[167,91272,523],{"class":512},[167,91274,53396],{"class":177},[167,91276,537],{"class":512},[167,91278,91279,91281,91283,91285,91287],{"class":169,"line":261},[167,91280,542],{"class":512},[167,91282,53405],{"class":516},[167,91284,53408],{"class":512},[167,91286,53405],{"class":516},[167,91288,537],{"class":512},[167,91290,91291,91293,91295],{"class":169,"line":773},[167,91292,575],{"class":512},[167,91294,53332],{"class":516},[167,91296,537],{"class":512},[167,91298,91299],{"class":169,"line":779},[167,91300,741],{"emptyLinePlaceholder":740},[167,91302,91303,91305,91307],{"class":169,"line":785},[167,91304,513],{"class":512},[167,91306,517],{"class":516},[167,91308,537],{"class":512},[167,91310,91311,91313,91315],{"class":169,"line":790},[167,91312,542],{"class":512},[167,91314,53809],{"class":516},[167,91316,537],{"class":512},[167,91318,91319,91321,91323,91325],{"class":169,"line":796},[167,91320,13249],{"class":731},[167,91322,71959],{"class":184},[167,91324,753],{"class":731},[167,91326,17598],{"class":512},[167,91328,91329,91331],{"class":169,"line":802},[167,91330,73614],{"class":512},[167,91332,91333],{"class":184},"18\n",[167,91335,91336],{"class":169,"line":808},[167,91337,4231],{"class":512},[167,91339,91340],{"class":169,"line":814},[167,91341,91342],{"class":2268},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[167,91344,91345,91347,91349,91351,91353,91355,91357],{"class":169,"line":820},[167,91346,72072],{"class":731},[167,91348,90836],{"class":173},[167,91350,898],{"class":512},[167,91352,3020],{"class":7246},[167,91354,14463],{"class":512},[167,91356,3045],{"class":7246},[167,91358,14470],{"class":512},[167,91360,91361,91363,91365,91367,91369],{"class":169,"line":826},[167,91362,60233],{"class":512},[167,91364,60236],{"class":173},[167,91366,898],{"class":512},[167,91368,88979],{"class":184},[167,91370,873],{"class":512},[167,91372,91373,91375,91377,91380,91382],{"class":169,"line":832},[167,91374,60233],{"class":512},[167,91376,60236],{"class":173},[167,91378,91379],{"class":512},"(x ",[167,91381,2681],{"class":731},[167,91383,91384],{"class":512}," y)\n",[167,91386,91387],{"class":169,"line":837},[167,91388,4231],{"class":512},[167,91390,91391],{"class":169,"line":842},[167,91392,91393],{"class":2268},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[167,91395,91396,91399,91402,91405,91407,91409,91411],{"class":169,"line":860},[167,91397,91398],{"class":512},"    fn.",[167,91400,91401],{"class":173},"apply",[167,91403,91404],{"class":512},"(obj, [",[167,91406,2418],{"class":184},[167,91408,14463],{"class":512},[167,91410,2287],{"class":184},[167,91412,6689],{"class":512},[167,91414,91415],{"class":169,"line":876},[167,91416,91417],{"class":2268},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[167,91419,91420],{"class":169,"line":887},[167,91421,741],{"emptyLinePlaceholder":740},[167,91423,91424],{"class":169,"line":892},[167,91425,91426],{"class":2268},"    \u002F\u002F 使用场景：求数组最大值\n",[167,91428,91429],{"class":169,"line":907},[167,91430,91431],{"class":2268},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[167,91433,91434,91437],{"class":169,"line":920},[167,91435,91436],{"class":2268},"    \u002F\u002F console.log(max)",[167,91438,91439],{"class":2268},"   \u002F\u002F3\n",[167,91441,91442],{"class":169,"line":933},[167,91443,91444],{"class":2268},"    \u002F\u002F 指向空或者Math都是可以的\n",[167,91446,91447,91449,91451,91453,91455,91457,91459,91461,91463,91465],{"class":169,"line":946},[167,91448,13249],{"class":731},[167,91450,59684],{"class":184},[167,91452,753],{"class":731},[167,91454,54221],{"class":512},[167,91456,981],{"class":184},[167,91458,14463],{"class":512},[167,91460,2704],{"class":184},[167,91462,14463],{"class":512},[167,91464,2735],{"class":184},[167,91466,35249],{"class":512},[167,91468,91469],{"class":169,"line":959},[167,91470,91471],{"class":2268},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[167,91473,91474,91476,91478,91480,91483,91485],{"class":169,"line":964},[167,91475,13249],{"class":731},[167,91477,7981],{"class":184},[167,91479,753],{"class":731},[167,91481,91482],{"class":512}," Math.max.",[167,91484,91401],{"class":173},[167,91486,91487],{"class":512},"(Math, arr)\n",[167,91489,91490,91492,91495,91497,91500,91502],{"class":169,"line":987},[167,91491,13249],{"class":731},[167,91493,91494],{"class":184}," min",[167,91496,753],{"class":731},[167,91498,91499],{"class":512}," Math.min.",[167,91501,91401],{"class":173},[167,91503,91487],{"class":512},[167,91505,91506,91508,91510,91513],{"class":169,"line":993},[167,91507,75741],{"class":512},[167,91509,60236],{"class":173},[167,91511,91512],{"class":512},"(max, min)     ",[167,91514,91515],{"class":2268},"\u002F\u002F100,4\n",[167,91517,91518],{"class":169,"line":998},[167,91519,741],{"emptyLinePlaceholder":740},[167,91521,91522],{"class":169,"line":1010},[167,91523,91524],{"class":2268},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[167,91526,91527,91529,91531,91534,91536,91538,91541],{"class":169,"line":1022},[167,91528,75741],{"class":512},[167,91530,60236],{"class":173},[167,91532,91533],{"class":512},"(Max.",[167,91535,8045],{"class":173},[167,91537,898],{"class":512},[167,91539,91540],{"class":731},"...",[167,91542,91543],{"class":512},"arr))\n",[167,91545,91546,91548,91550],{"class":169,"line":1027},[167,91547,54412],{"class":512},[167,91549,53809],{"class":516},[167,91551,537],{"class":512},[167,91553,91554,91556,91558],{"class":169,"line":1032},[167,91555,575],{"class":512},[167,91557,517],{"class":516},[167,91559,537],{"class":512},[167,91561,91562],{"class":169,"line":1049},[167,91563,741],{"emptyLinePlaceholder":740},[167,91565,91566,91568,91570],{"class":169,"line":10005},[167,91567,575],{"class":512},[167,91569,52635],{"class":516},[167,91571,537],{"class":512},[19,91573,91574],{},[3528,91575],{"alt":32,"src":91576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[40,91578,91579],{"start":205},[43,91580,91581],{},"bind()",[19,91583,91584],{},[3528,91585],{"alt":32,"src":91586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91588,91589],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91591,91592],{},"bind的语法跟call很相似",[26,91594,91596],{"className":503,"code":91595,"language":505,"meta":32,"style":32},"\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",[34,91597,91598,91606,91614,91618,91623,91627,91631,91636,91640,91645,91650,91655,91660,91665,91670,91675,91679,91687],{"__ignoreMap":32},[167,91599,91600,91602,91604],{"class":169,"line":170},[167,91601,513],{"class":512},[167,91603,517],{"class":516},[167,91605,537],{"class":512},[167,91607,91608,91610,91612],{"class":169,"line":191},[167,91609,542],{"class":512},[167,91611,53809],{"class":516},[167,91613,537],{"class":512},[167,91615,91616],{"class":169,"line":205},[167,91617,73511],{"class":512},[167,91619,91620],{"class":169,"line":219},[167,91621,91622],{"class":512},"      age: 18\n",[167,91624,91625],{"class":169,"line":230},[167,91626,4231],{"class":512},[167,91628,91629],{"class":169,"line":241},[167,91630,79131],{"class":512},[167,91632,91633],{"class":169,"line":261},[167,91634,91635],{"class":512},"      console.log(this)\n",[167,91637,91638],{"class":169,"line":773},[167,91639,4231],{"class":512},[167,91641,91642],{"class":169,"line":779},[167,91643,91644],{"class":512},"    \u002F\u002F 1.bind 不会调用函数\n",[167,91646,91647],{"class":169,"line":785},[167,91648,91649],{"class":512},"    \u002F\u002F 2.bind能改变this的指向\n",[167,91651,91652],{"class":169,"line":790},[167,91653,91654],{"class":512},"    fn.bind()\n",[167,91656,91657],{"class":169,"line":796},[167,91658,91659],{"class":512},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[167,91661,91662],{"class":169,"line":802},[167,91663,91664],{"class":512},"    const fun = fn.bind(obj)\n",[167,91666,91667],{"class":169,"line":808},[167,91668,91669],{"class":512},"    \u002F\u002F console.log(fun)\n",[167,91671,91672],{"class":169,"line":814},[167,91673,91674],{"class":512},"    \u002F\u002F 调用,查看this的指向\n",[167,91676,91677],{"class":169,"line":820},[167,91678,54646],{"class":512},[167,91680,91681,91683,91685],{"class":169,"line":826},[167,91682,54412],{"class":512},[167,91684,53809],{"class":516},[167,91686,537],{"class":512},[167,91688,91689,91691,91693],{"class":169,"line":832},[167,91690,575],{"class":512},[167,91692,517],{"class":516},[167,91694,537],{"class":512},[19,91696,91697],{},[3528,91698],{"alt":32,"src":91699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[40,91701,91702],{"start":219},[43,91703,91704],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,91706,91708],{"className":503,"code":91707,"language":505,"meta":32,"style":32},"\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",[34,91709,91710,91718,91731,91739,91744,91748,91753,91758,91763,91768,91773,91778,91783,91788,91792,91800],{"__ignoreMap":32},[167,91711,91712,91714,91716],{"class":169,"line":170},[167,91713,513],{"class":512},[167,91715,517],{"class":516},[167,91717,537],{"class":512},[167,91719,91720,91722,91724,91727,91729],{"class":169,"line":191},[167,91721,542],{"class":512},[167,91723,55877],{"class":516},[167,91725,91726],{"class":512},">禁用\u003C\u002F",[167,91728,55877],{"class":516},[167,91730,537],{"class":512},[167,91732,91733,91735,91737],{"class":169,"line":205},[167,91734,542],{"class":512},[167,91736,53809],{"class":516},[167,91738,537],{"class":512},[167,91740,91741],{"class":169,"line":219},[167,91742,91743],{"class":512},"    const btn = document.querySelector('button')\n",[167,91745,91746],{"class":169,"line":230},[167,91747,61005],{"class":512},[167,91749,91750],{"class":169,"line":241},[167,91751,91752],{"class":512},"      this.disabled = true\n",[167,91754,91755],{"class":169,"line":261},[167,91756,91757],{"class":512},"      \u002F\u002F 定时器是window进行调用的\n",[167,91759,91760],{"class":169,"line":773},[167,91761,91762],{"class":512},"      setTimeout(function () {\n",[167,91764,91765],{"class":169,"line":779},[167,91766,91767],{"class":512},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[167,91769,91770],{"class":169,"line":785},[167,91771,91772],{"class":512},"        this.disabled = false\n",[167,91774,91775],{"class":169,"line":790},[167,91776,91777],{"class":512},"      }.bind(this), 2000)\n",[167,91779,91780],{"class":169,"line":796},[167,91781,91782],{"class":512},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[167,91784,91785],{"class":169,"line":802},[167,91786,91787],{"class":512},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[167,91789,91790],{"class":169,"line":808},[167,91791,35463],{"class":512},[167,91793,91794,91796,91798],{"class":169,"line":814},[167,91795,54412],{"class":512},[167,91797,53809],{"class":516},[167,91799,537],{"class":512},[167,91801,91802,91804,91806],{"class":169,"line":820},[167,91803,575],{"class":512},[167,91805,517],{"class":516},[167,91807,537],{"class":512},[40,91809,91810],{"start":230},[43,91811,23979],{},[19,91813,91814],{},[3528,91815],{"alt":32,"src":91816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91818,91820],{"id":91819},"_417-性能优化","4.17 性能优化",[494,91822,91824],{"id":91823},"_4171-防抖","4.17.1 防抖",[19,91826,91827],{},[3528,91828],{"alt":32,"src":91829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91831,91832],{},[2354,91833,91834],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91836,91837],{},"防抖实现方式：",[3205,91839,91840],{},[43,91841,91842],{},"lodash 提供了防抖处理",[19,91844,91845],{},"_.debounce(func,[wait=0],[options={}])",[19,91847,91848],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,91850,91852],{"className":52633,"code":91851,"language":52635,"meta":32,"style":32},"\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",[34,91853,91854,91864,91878,91882,91890,91904,91924,91936,91944,91950,91960,91972,91984,91995,92007,92017,92027,92040,92044,92052,92060,92064,92072,92090,92108,92116,92135,92145,92154,92165,92170,92174,92179,92184,92189,92214,92222,92230,92234],{"__ignoreMap":32},[167,91855,91856,91858,91860,91862],{"class":169,"line":170},[167,91857,53297],{"class":512},[167,91859,53300],{"class":516},[167,91861,53303],{"class":173},[167,91863,537],{"class":512},[167,91865,91866,91868,91870,91872,91874,91876],{"class":169,"line":191},[167,91867,513],{"class":512},[167,91869,52635],{"class":516},[167,91871,53314],{"class":173},[167,91873,523],{"class":512},[167,91875,53319],{"class":177},[167,91877,537],{"class":512},[167,91879,91880],{"class":169,"line":205},[167,91881,741],{"emptyLinePlaceholder":740},[167,91883,91884,91886,91888],{"class":169,"line":219},[167,91885,513],{"class":512},[167,91887,53332],{"class":516},[167,91889,537],{"class":512},[167,91891,91892,91894,91896,91898,91900,91902],{"class":169,"line":230},[167,91893,542],{"class":512},[167,91895,53342],{"class":516},[167,91897,53345],{"class":173},[167,91899,523],{"class":512},[167,91901,53350],{"class":177},[167,91903,537],{"class":512},[167,91905,91906,91908,91910,91912,91914,91916,91918,91920,91922],{"class":169,"line":241},[167,91907,542],{"class":512},[167,91909,53342],{"class":516},[167,91911,520],{"class":173},[167,91913,523],{"class":512},[167,91915,53389],{"class":177},[167,91917,53369],{"class":173},[167,91919,523],{"class":512},[167,91921,53396],{"class":177},[167,91923,537],{"class":512},[167,91925,91926,91928,91930,91932,91934],{"class":169,"line":261},[167,91927,542],{"class":512},[167,91929,53405],{"class":516},[167,91931,53408],{"class":512},[167,91933,53405],{"class":516},[167,91935,537],{"class":512},[167,91937,91938,91940,91942],{"class":169,"line":773},[167,91939,542],{"class":512},[167,91941,2113],{"class":516},[167,91943,537],{"class":512},[167,91945,91946,91948],{"class":169,"line":779},[167,91947,56742],{"class":173},[167,91949,17598],{"class":512},[167,91951,91952,91954,91956,91958],{"class":169,"line":785},[167,91953,74584],{"class":184},[167,91955,53435],{"class":512},[167,91957,62494],{"class":184},[167,91959,3359],{"class":512},[167,91961,91962,91964,91966,91968,91970],{"class":169,"line":790},[167,91963,56761],{"class":184},[167,91965,53435],{"class":512},[167,91967,3776],{"class":184},[167,91969,53490],{"class":731},[167,91971,3359],{"class":512},[167,91973,91974,91976,91978,91980,91982],{"class":169,"line":796},[167,91975,56775],{"class":184},[167,91977,53435],{"class":512},[167,91979,3776],{"class":184},[167,91981,53490],{"class":731},[167,91983,3359],{"class":512},[167,91985,91986,91988,91990,91993],{"class":169,"line":802},[167,91987,56874],{"class":184},[167,91989,53435],{"class":512},[167,91991,91992],{"class":184},"gray",[167,91994,3359],{"class":512},[167,91996,91997,91999,92001,92003,92005],{"class":169,"line":808},[167,91998,56912],{"class":184},[167,92000,53435],{"class":512},[167,92002,3025],{"class":184},[167,92004,53490],{"class":731},[167,92006,3359],{"class":512},[167,92008,92009,92011,92013,92015],{"class":169,"line":814},[167,92010,59405],{"class":184},[167,92012,53435],{"class":512},[167,92014,62831],{"class":184},[167,92016,3359],{"class":512},[167,92018,92019,92021,92023,92025],{"class":169,"line":820},[167,92020,59275],{"class":184},[167,92022,53435],{"class":512},[167,92024,53590],{"class":184},[167,92026,3359],{"class":512},[167,92028,92029,92032,92034,92036,92038],{"class":169,"line":826},[167,92030,92031],{"class":184},"      padding-top",[167,92033,53435],{"class":512},[167,92035,2519],{"class":184},[167,92037,53490],{"class":731},[167,92039,3359],{"class":512},[167,92041,92042],{"class":169,"line":832},[167,92043,4231],{"class":512},[167,92045,92046,92048,92050],{"class":169,"line":837},[167,92047,54412],{"class":512},[167,92049,2113],{"class":516},[167,92051,537],{"class":512},[167,92053,92054,92056,92058],{"class":169,"line":842},[167,92055,575],{"class":512},[167,92057,53332],{"class":516},[167,92059,537],{"class":512},[167,92061,92062],{"class":169,"line":860},[167,92063,741],{"emptyLinePlaceholder":740},[167,92065,92066,92068,92070],{"class":169,"line":876},[167,92067,513],{"class":512},[167,92069,517],{"class":516},[167,92071,537],{"class":512},[167,92073,92074,92076,92078,92080,92082,92084,92086,92088],{"class":169,"line":887},[167,92075,542],{"class":512},[167,92077,53609],{"class":516},[167,92079,55479],{"class":173},[167,92081,523],{"class":512},[167,92083,526],{"class":177},[167,92085,57303],{"class":512},[167,92087,53609],{"class":516},[167,92089,537],{"class":512},[167,92091,92092,92094,92096,92098,92100,92102,92104,92106],{"class":169,"line":892},[167,92093,542],{"class":512},[167,92095,53809],{"class":516},[167,92097,57228],{"class":173},[167,92099,523],{"class":512},[167,92101,90260],{"class":177},[167,92103,57303],{"class":512},[167,92105,53809],{"class":516},[167,92107,537],{"class":512},[167,92109,92110,92112,92114],{"class":169,"line":907},[167,92111,542],{"class":512},[167,92113,53809],{"class":516},[167,92115,537],{"class":512},[167,92117,92118,92120,92122,92124,92126,92128,92130,92133],{"class":169,"line":920},[167,92119,13249],{"class":731},[167,92121,88919],{"class":184},[167,92123,753],{"class":731},[167,92125,56386],{"class":512},[167,92127,56389],{"class":173},[167,92129,898],{"class":512},[167,92131,92132],{"class":177},"'.box'",[167,92134,873],{"class":512},[167,92136,92137,92139,92141,92143],{"class":169,"line":933},[167,92138,54214],{"class":731},[167,92140,11466],{"class":512},[167,92142,523],{"class":731},[167,92144,49333],{"class":184},[167,92146,92147,92149,92152],{"class":169,"line":946},[167,92148,72072],{"class":731},[167,92150,92151],{"class":173}," mouseMove",[167,92153,12881],{"class":512},[167,92155,92156,92159,92161,92163],{"class":169,"line":959},[167,92157,92158],{"class":512},"      box.innerHTML ",[167,92160,523],{"class":731},[167,92162,5067],{"class":512},[167,92164,4738],{"class":731},[167,92166,92167],{"class":169,"line":964},[167,92168,92169],{"class":2268},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[167,92171,92172],{"class":169,"line":987},[167,92173,4231],{"class":512},[167,92175,92176],{"class":169,"line":993},[167,92177,92178],{"class":2268},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[167,92180,92181],{"class":169,"line":998},[167,92182,92183],{"class":2268},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[167,92185,92186],{"class":169,"line":1010},[167,92187,92188],{"class":2268},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[167,92190,92191,92194,92196,92198,92201,92204,92207,92210,92212],{"class":169,"line":1022},[167,92192,92193],{"class":512},"    box.",[167,92195,59802],{"class":173},[167,92197,898],{"class":512},[167,92199,92200],{"class":177},"'mousemove'",[167,92202,92203],{"class":512},", _.",[167,92205,92206],{"class":173},"debounce",[167,92208,92209],{"class":512},"(mouseMove, ",[167,92211,67063],{"class":184},[167,92213,32505],{"class":512},[167,92215,92216,92218,92220],{"class":169,"line":1027},[167,92217,54412],{"class":512},[167,92219,53809],{"class":516},[167,92221,537],{"class":512},[167,92223,92224,92226,92228],{"class":169,"line":1032},[167,92225,575],{"class":512},[167,92227,517],{"class":516},[167,92229,537],{"class":512},[167,92231,92232],{"class":169,"line":1049},[167,92233,741],{"emptyLinePlaceholder":740},[167,92235,92236,92238,92240],{"class":169,"line":10005},[167,92237,575],{"class":512},[167,92239,52635],{"class":516},[167,92241,537],{"class":512},[3205,92243,92244],{},[43,92245,92246],{},"手写一个防抖函数来处理",[19,92248,92249],{},"防抖的核心就是利用定时器来实现的：",[19,92251,92252],{},"①声明一个定时器变量",[19,92254,92255],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92257,92258],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,92260,92262],{"className":52633,"code":92261,"language":52635,"meta":32,"style":32},"\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",[34,92263,92264,92274,92288,92292,92300,92314,92334,92346,92354,92360,92370,92382,92394,92404,92416,92426,92436,92448,92452,92460,92468,92472,92480,92498,92516,92524,92542,92552,92560,92570,92574,92578,92582,92587,92592,92597,92602,92607,92612,92630,92637,92642,92650,92655,92668,92684,92694,92699,92703,92707,92727,92731,92736,92741,92746,92751,92759,92767,92771],{"__ignoreMap":32},[167,92265,92266,92268,92270,92272],{"class":169,"line":170},[167,92267,53297],{"class":512},[167,92269,53300],{"class":516},[167,92271,53303],{"class":173},[167,92273,537],{"class":512},[167,92275,92276,92278,92280,92282,92284,92286],{"class":169,"line":191},[167,92277,513],{"class":512},[167,92279,52635],{"class":516},[167,92281,53314],{"class":173},[167,92283,523],{"class":512},[167,92285,53319],{"class":177},[167,92287,537],{"class":512},[167,92289,92290],{"class":169,"line":205},[167,92291,741],{"emptyLinePlaceholder":740},[167,92293,92294,92296,92298],{"class":169,"line":219},[167,92295,513],{"class":512},[167,92297,53332],{"class":516},[167,92299,537],{"class":512},[167,92301,92302,92304,92306,92308,92310,92312],{"class":169,"line":230},[167,92303,542],{"class":512},[167,92305,53342],{"class":516},[167,92307,53345],{"class":173},[167,92309,523],{"class":512},[167,92311,53350],{"class":177},[167,92313,537],{"class":512},[167,92315,92316,92318,92320,92322,92324,92326,92328,92330,92332],{"class":169,"line":241},[167,92317,542],{"class":512},[167,92319,53342],{"class":516},[167,92321,520],{"class":173},[167,92323,523],{"class":512},[167,92325,53389],{"class":177},[167,92327,53369],{"class":173},[167,92329,523],{"class":512},[167,92331,53396],{"class":177},[167,92333,537],{"class":512},[167,92335,92336,92338,92340,92342,92344],{"class":169,"line":261},[167,92337,542],{"class":512},[167,92339,53405],{"class":516},[167,92341,53408],{"class":512},[167,92343,53405],{"class":516},[167,92345,537],{"class":512},[167,92347,92348,92350,92352],{"class":169,"line":773},[167,92349,542],{"class":512},[167,92351,2113],{"class":516},[167,92353,537],{"class":512},[167,92355,92356,92358],{"class":169,"line":779},[167,92357,56742],{"class":173},[167,92359,17598],{"class":512},[167,92361,92362,92364,92366,92368],{"class":169,"line":785},[167,92363,74584],{"class":184},[167,92365,53435],{"class":512},[167,92367,62494],{"class":184},[167,92369,3359],{"class":512},[167,92371,92372,92374,92376,92378,92380],{"class":169,"line":790},[167,92373,56761],{"class":184},[167,92375,53435],{"class":512},[167,92377,3776],{"class":184},[167,92379,53490],{"class":731},[167,92381,3359],{"class":512},[167,92383,92384,92386,92388,92390,92392],{"class":169,"line":796},[167,92385,56775],{"class":184},[167,92387,53435],{"class":512},[167,92389,3776],{"class":184},[167,92391,53490],{"class":731},[167,92393,3359],{"class":512},[167,92395,92396,92398,92400,92402],{"class":169,"line":802},[167,92397,56874],{"class":184},[167,92399,53435],{"class":512},[167,92401,91992],{"class":184},[167,92403,3359],{"class":512},[167,92405,92406,92408,92410,92412,92414],{"class":169,"line":808},[167,92407,56912],{"class":184},[167,92409,53435],{"class":512},[167,92411,3025],{"class":184},[167,92413,53490],{"class":731},[167,92415,3359],{"class":512},[167,92417,92418,92420,92422,92424],{"class":169,"line":814},[167,92419,59405],{"class":184},[167,92421,53435],{"class":512},[167,92423,62831],{"class":184},[167,92425,3359],{"class":512},[167,92427,92428,92430,92432,92434],{"class":169,"line":820},[167,92429,59275],{"class":184},[167,92431,53435],{"class":512},[167,92433,53590],{"class":184},[167,92435,3359],{"class":512},[167,92437,92438,92440,92442,92444,92446],{"class":169,"line":826},[167,92439,92031],{"class":184},[167,92441,53435],{"class":512},[167,92443,2519],{"class":184},[167,92445,53490],{"class":731},[167,92447,3359],{"class":512},[167,92449,92450],{"class":169,"line":832},[167,92451,4231],{"class":512},[167,92453,92454,92456,92458],{"class":169,"line":837},[167,92455,54412],{"class":512},[167,92457,2113],{"class":516},[167,92459,537],{"class":512},[167,92461,92462,92464,92466],{"class":169,"line":842},[167,92463,575],{"class":512},[167,92465,53332],{"class":516},[167,92467,537],{"class":512},[167,92469,92470],{"class":169,"line":860},[167,92471,741],{"emptyLinePlaceholder":740},[167,92473,92474,92476,92478],{"class":169,"line":876},[167,92475,513],{"class":512},[167,92477,517],{"class":516},[167,92479,537],{"class":512},[167,92481,92482,92484,92486,92488,92490,92492,92494,92496],{"class":169,"line":887},[167,92483,542],{"class":512},[167,92485,53609],{"class":516},[167,92487,55479],{"class":173},[167,92489,523],{"class":512},[167,92491,526],{"class":177},[167,92493,57303],{"class":512},[167,92495,53609],{"class":516},[167,92497,537],{"class":512},[167,92499,92500,92502,92504,92506,92508,92510,92512,92514],{"class":169,"line":892},[167,92501,542],{"class":512},[167,92503,53809],{"class":516},[167,92505,57228],{"class":173},[167,92507,523],{"class":512},[167,92509,90260],{"class":177},[167,92511,57303],{"class":512},[167,92513,53809],{"class":516},[167,92515,537],{"class":512},[167,92517,92518,92520,92522],{"class":169,"line":907},[167,92519,542],{"class":512},[167,92521,53809],{"class":516},[167,92523,537],{"class":512},[167,92525,92526,92528,92530,92532,92534,92536,92538,92540],{"class":169,"line":920},[167,92527,13249],{"class":731},[167,92529,88919],{"class":184},[167,92531,753],{"class":731},[167,92533,56386],{"class":512},[167,92535,56389],{"class":173},[167,92537,898],{"class":512},[167,92539,92132],{"class":177},[167,92541,873],{"class":512},[167,92543,92544,92546,92548,92550],{"class":169,"line":933},[167,92545,54214],{"class":731},[167,92547,11466],{"class":512},[167,92549,523],{"class":731},[167,92551,49333],{"class":184},[167,92553,92554,92556,92558],{"class":169,"line":946},[167,92555,72072],{"class":731},[167,92557,92151],{"class":173},[167,92559,12881],{"class":512},[167,92561,92562,92564,92566,92568],{"class":169,"line":959},[167,92563,92158],{"class":512},[167,92565,523],{"class":731},[167,92567,5067],{"class":512},[167,92569,4738],{"class":731},[167,92571,92572],{"class":169,"line":964},[167,92573,92169],{"class":2268},[167,92575,92576],{"class":169,"line":987},[167,92577,4231],{"class":512},[167,92579,92580],{"class":169,"line":993},[167,92581,92178],{"class":2268},[167,92583,92584],{"class":169,"line":998},[167,92585,92586],{"class":2268},"    \u002F\u002F 手写防抖函数\n",[167,92588,92589],{"class":169,"line":1010},[167,92590,92591],{"class":2268},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[167,92593,92594],{"class":169,"line":1022},[167,92595,92596],{"class":2268},"    \u002F\u002F 1.声明定时器变量\n",[167,92598,92599],{"class":169,"line":1027},[167,92600,92601],{"class":2268},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[167,92603,92604],{"class":169,"line":1032},[167,92605,92606],{"class":2268},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[167,92608,92609],{"class":169,"line":1049},[167,92610,92611],{"class":2268},"    \u002F\u002F 4.定时器里面写函数调用\n",[167,92613,92614,92616,92619,92621,92624,92626,92628],{"class":169,"line":10005},[167,92615,72072],{"class":731},[167,92617,92618],{"class":173}," debounce",[167,92620,898],{"class":512},[167,92622,92623],{"class":7246},"fn",[167,92625,14463],{"class":512},[167,92627,2920],{"class":7246},[167,92629,14470],{"class":512},[167,92631,92632,92634],{"class":169,"line":10011},[167,92633,81759],{"class":731},[167,92635,92636],{"class":512}," timer\n",[167,92638,92639],{"class":169,"line":10038},[167,92640,92641],{"class":2268},"      \u002F\u002F return 返回一个匿名函数\n",[167,92643,92644,92646,92648],{"class":169,"line":10043},[167,92645,75970],{"class":731},[167,92647,60907],{"class":731},[167,92649,56442],{"class":512},[167,92651,92652],{"class":169,"line":10049},[167,92653,92654],{"class":2268},"        \u002F\u002F 这里边写第二三四步\n",[167,92656,92657,92659,92662,92665],{"class":169,"line":10061},[167,92658,4540],{"class":731},[167,92660,92661],{"class":512}," (timer) ",[167,92663,92664],{"class":173},"clearTimeout",[167,92666,92667],{"class":512},"(timer)\n",[167,92669,92670,92673,92675,92678,92680,92682],{"class":169,"line":10073},[167,92671,92672],{"class":512},"        timer ",[167,92674,523],{"class":731},[167,92676,92677],{"class":173}," setTimeout",[167,92679,898],{"class":512},[167,92681,56439],{"class":731},[167,92683,56442],{"class":512},[167,92685,92686,92689,92691],{"class":169,"line":10085},[167,92687,92688],{"class":173},"          fn",[167,92690,15078],{"class":512},[167,92692,92693],{"class":2268},"\u002F\u002F加小括号调用fn }, t)\n",[167,92695,92696],{"class":169,"line":11744},[167,92697,92698],{"class":512},"        }, t)\n",[167,92700,92701],{"class":169,"line":11769},[167,92702,54393],{"class":512},[167,92704,92705],{"class":169,"line":11792},[167,92706,4231],{"class":512},[167,92708,92709,92711,92713,92715,92717,92719,92721,92723,92725],{"class":169,"line":11816},[167,92710,92193],{"class":512},[167,92712,59802],{"class":173},[167,92714,898],{"class":512},[167,92716,92200],{"class":177},[167,92718,14463],{"class":512},[167,92720,92206],{"class":173},[167,92722,92209],{"class":512},[167,92724,67063],{"class":184},[167,92726,32505],{"class":512},[167,92728,92729],{"class":169,"line":11821},[167,92730,741],{"emptyLinePlaceholder":740},[167,92732,92733],{"class":169,"line":11826},[167,92734,92735],{"class":2268},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[167,92737,92738],{"class":169,"line":11831},[167,92739,92740],{"class":2268},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[167,92742,92743],{"class":169,"line":11840},[167,92744,92745],{"class":2268},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[167,92747,92748],{"class":169,"line":11845},[167,92749,92750],{"class":2268},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[167,92752,92753,92755,92757],{"class":169,"line":11851},[167,92754,54412],{"class":512},[167,92756,53809],{"class":516},[167,92758,537],{"class":512},[167,92760,92761,92763,92765],{"class":169,"line":11872},[167,92762,575],{"class":512},[167,92764,517],{"class":516},[167,92766,537],{"class":512},[167,92768,92769],{"class":169,"line":11878},[167,92770,741],{"emptyLinePlaceholder":740},[167,92772,92773,92775,92777],{"class":169,"line":11892},[167,92774,575],{"class":512},[167,92776,52635],{"class":516},[167,92778,537],{"class":512},[494,92780,92782],{"id":92781},"_4172-节流","4.17.2 节流",[19,92784,92785],{},[3528,92786],{"alt":32,"src":92787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92789,92790],{},[3528,92791],{"alt":32,"src":92792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92794,92795],{},[2354,92796,92797],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92799,92800],{},"实现方式：",[3205,92802,92803],{},[43,92804,92805],{},"lodash 提供的节流函数来处理",[19,92807,92808],{},"_.throttle(func,[wait=0],[options=])",[19,92810,92811],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,92813,92815],{"className":52633,"code":92814,"language":52635,"meta":32,"style":32},"\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",[34,92816,92817,92827,92841,92845,92853,92867,92887,92899,92907,92913,92923,92935,92947,92957,92969,92979,92989,93001,93005,93013,93021,93025,93033,93051,93069,93077,93095,93105,93113,93123,93127,93131,93135,93140,93145,93166,93174,93182,93186],{"__ignoreMap":32},[167,92818,92819,92821,92823,92825],{"class":169,"line":170},[167,92820,53297],{"class":512},[167,92822,53300],{"class":516},[167,92824,53303],{"class":173},[167,92826,537],{"class":512},[167,92828,92829,92831,92833,92835,92837,92839],{"class":169,"line":191},[167,92830,513],{"class":512},[167,92832,52635],{"class":516},[167,92834,53314],{"class":173},[167,92836,523],{"class":512},[167,92838,53319],{"class":177},[167,92840,537],{"class":512},[167,92842,92843],{"class":169,"line":205},[167,92844,741],{"emptyLinePlaceholder":740},[167,92846,92847,92849,92851],{"class":169,"line":219},[167,92848,513],{"class":512},[167,92850,53332],{"class":516},[167,92852,537],{"class":512},[167,92854,92855,92857,92859,92861,92863,92865],{"class":169,"line":230},[167,92856,542],{"class":512},[167,92858,53342],{"class":516},[167,92860,53345],{"class":173},[167,92862,523],{"class":512},[167,92864,53350],{"class":177},[167,92866,537],{"class":512},[167,92868,92869,92871,92873,92875,92877,92879,92881,92883,92885],{"class":169,"line":241},[167,92870,542],{"class":512},[167,92872,53342],{"class":516},[167,92874,520],{"class":173},[167,92876,523],{"class":512},[167,92878,53389],{"class":177},[167,92880,53369],{"class":173},[167,92882,523],{"class":512},[167,92884,53396],{"class":177},[167,92886,537],{"class":512},[167,92888,92889,92891,92893,92895,92897],{"class":169,"line":261},[167,92890,542],{"class":512},[167,92892,53405],{"class":516},[167,92894,53408],{"class":512},[167,92896,53405],{"class":516},[167,92898,537],{"class":512},[167,92900,92901,92903,92905],{"class":169,"line":773},[167,92902,542],{"class":512},[167,92904,2113],{"class":516},[167,92906,537],{"class":512},[167,92908,92909,92911],{"class":169,"line":779},[167,92910,56742],{"class":173},[167,92912,17598],{"class":512},[167,92914,92915,92917,92919,92921],{"class":169,"line":785},[167,92916,74584],{"class":184},[167,92918,53435],{"class":512},[167,92920,62494],{"class":184},[167,92922,3359],{"class":512},[167,92924,92925,92927,92929,92931,92933],{"class":169,"line":790},[167,92926,56761],{"class":184},[167,92928,53435],{"class":512},[167,92930,3776],{"class":184},[167,92932,53490],{"class":731},[167,92934,3359],{"class":512},[167,92936,92937,92939,92941,92943,92945],{"class":169,"line":796},[167,92938,56775],{"class":184},[167,92940,53435],{"class":512},[167,92942,3776],{"class":184},[167,92944,53490],{"class":731},[167,92946,3359],{"class":512},[167,92948,92949,92951,92953,92955],{"class":169,"line":802},[167,92950,56874],{"class":184},[167,92952,53435],{"class":512},[167,92954,91992],{"class":184},[167,92956,3359],{"class":512},[167,92958,92959,92961,92963,92965,92967],{"class":169,"line":808},[167,92960,56912],{"class":184},[167,92962,53435],{"class":512},[167,92964,3025],{"class":184},[167,92966,53490],{"class":731},[167,92968,3359],{"class":512},[167,92970,92971,92973,92975,92977],{"class":169,"line":814},[167,92972,59405],{"class":184},[167,92974,53435],{"class":512},[167,92976,62831],{"class":184},[167,92978,3359],{"class":512},[167,92980,92981,92983,92985,92987],{"class":169,"line":820},[167,92982,59275],{"class":184},[167,92984,53435],{"class":512},[167,92986,53590],{"class":184},[167,92988,3359],{"class":512},[167,92990,92991,92993,92995,92997,92999],{"class":169,"line":826},[167,92992,92031],{"class":184},[167,92994,53435],{"class":512},[167,92996,2519],{"class":184},[167,92998,53490],{"class":731},[167,93000,3359],{"class":512},[167,93002,93003],{"class":169,"line":832},[167,93004,4231],{"class":512},[167,93006,93007,93009,93011],{"class":169,"line":837},[167,93008,54412],{"class":512},[167,93010,2113],{"class":516},[167,93012,537],{"class":512},[167,93014,93015,93017,93019],{"class":169,"line":842},[167,93016,575],{"class":512},[167,93018,53332],{"class":516},[167,93020,537],{"class":512},[167,93022,93023],{"class":169,"line":860},[167,93024,741],{"emptyLinePlaceholder":740},[167,93026,93027,93029,93031],{"class":169,"line":876},[167,93028,513],{"class":512},[167,93030,517],{"class":516},[167,93032,537],{"class":512},[167,93034,93035,93037,93039,93041,93043,93045,93047,93049],{"class":169,"line":887},[167,93036,542],{"class":512},[167,93038,53609],{"class":516},[167,93040,55479],{"class":173},[167,93042,523],{"class":512},[167,93044,526],{"class":177},[167,93046,57303],{"class":512},[167,93048,53609],{"class":516},[167,93050,537],{"class":512},[167,93052,93053,93055,93057,93059,93061,93063,93065,93067],{"class":169,"line":892},[167,93054,542],{"class":512},[167,93056,53809],{"class":516},[167,93058,57228],{"class":173},[167,93060,523],{"class":512},[167,93062,90260],{"class":177},[167,93064,57303],{"class":512},[167,93066,53809],{"class":516},[167,93068,537],{"class":512},[167,93070,93071,93073,93075],{"class":169,"line":907},[167,93072,542],{"class":512},[167,93074,53809],{"class":516},[167,93076,537],{"class":512},[167,93078,93079,93081,93083,93085,93087,93089,93091,93093],{"class":169,"line":920},[167,93080,13249],{"class":731},[167,93082,88919],{"class":184},[167,93084,753],{"class":731},[167,93086,56386],{"class":512},[167,93088,56389],{"class":173},[167,93090,898],{"class":512},[167,93092,92132],{"class":177},[167,93094,873],{"class":512},[167,93096,93097,93099,93101,93103],{"class":169,"line":933},[167,93098,54214],{"class":731},[167,93100,11466],{"class":512},[167,93102,523],{"class":731},[167,93104,49333],{"class":184},[167,93106,93107,93109,93111],{"class":169,"line":946},[167,93108,72072],{"class":731},[167,93110,92151],{"class":173},[167,93112,12881],{"class":512},[167,93114,93115,93117,93119,93121],{"class":169,"line":959},[167,93116,92158],{"class":512},[167,93118,523],{"class":731},[167,93120,5067],{"class":512},[167,93122,4738],{"class":731},[167,93124,93125],{"class":169,"line":964},[167,93126,92169],{"class":2268},[167,93128,93129],{"class":169,"line":987},[167,93130,4231],{"class":512},[167,93132,93133],{"class":169,"line":993},[167,93134,92178],{"class":2268},[167,93136,93137],{"class":169,"line":998},[167,93138,93139],{"class":2268},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[167,93141,93142],{"class":169,"line":1010},[167,93143,93144],{"class":2268},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[167,93146,93147,93149,93151,93153,93155,93157,93160,93162,93164],{"class":169,"line":1022},[167,93148,92193],{"class":512},[167,93150,59802],{"class":173},[167,93152,898],{"class":512},[167,93154,92200],{"class":177},[167,93156,92203],{"class":512},[167,93158,93159],{"class":173},"throttle",[167,93161,92209],{"class":512},[167,93163,67063],{"class":184},[167,93165,32505],{"class":512},[167,93167,93168,93170,93172],{"class":169,"line":1027},[167,93169,54412],{"class":512},[167,93171,53809],{"class":516},[167,93173,537],{"class":512},[167,93175,93176,93178,93180],{"class":169,"line":1032},[167,93177,575],{"class":512},[167,93179,517],{"class":516},[167,93181,537],{"class":512},[167,93183,93184],{"class":169,"line":1049},[167,93185,741],{"emptyLinePlaceholder":740},[167,93187,93188,93190,93192],{"class":169,"line":10005},[167,93189,575],{"class":512},[167,93191,52635],{"class":516},[167,93193,537],{"class":512},[3205,93195,93196],{},[43,93197,93198],{},"手写一个节流函数来处理",[19,93200,72940],{},[19,93202,92252],{},[19,93204,93205],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93207,93208],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,93210,93212],{"className":52633,"code":93211,"language":52635,"meta":32,"style":32},"\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",[34,93213,93214,93224,93238,93242,93250,93264,93284,93296,93304,93310,93320,93332,93344,93354,93366,93376,93386,93398,93402,93410,93418,93422,93430,93448,93466,93474,93492,93502,93510,93520,93524,93528,93532,93537,93542,93547,93552,93557,93562,93579,93585,93593,93604,93619,93626,93631,93636,93646,93651,93656,93661,93665,93669,93673,93693,93701,93709,93713],{"__ignoreMap":32},[167,93215,93216,93218,93220,93222],{"class":169,"line":170},[167,93217,53297],{"class":512},[167,93219,53300],{"class":516},[167,93221,53303],{"class":173},[167,93223,537],{"class":512},[167,93225,93226,93228,93230,93232,93234,93236],{"class":169,"line":191},[167,93227,513],{"class":512},[167,93229,52635],{"class":516},[167,93231,53314],{"class":173},[167,93233,523],{"class":512},[167,93235,53319],{"class":177},[167,93237,537],{"class":512},[167,93239,93240],{"class":169,"line":205},[167,93241,741],{"emptyLinePlaceholder":740},[167,93243,93244,93246,93248],{"class":169,"line":219},[167,93245,513],{"class":512},[167,93247,53332],{"class":516},[167,93249,537],{"class":512},[167,93251,93252,93254,93256,93258,93260,93262],{"class":169,"line":230},[167,93253,542],{"class":512},[167,93255,53342],{"class":516},[167,93257,53345],{"class":173},[167,93259,523],{"class":512},[167,93261,53350],{"class":177},[167,93263,537],{"class":512},[167,93265,93266,93268,93270,93272,93274,93276,93278,93280,93282],{"class":169,"line":241},[167,93267,542],{"class":512},[167,93269,53342],{"class":516},[167,93271,520],{"class":173},[167,93273,523],{"class":512},[167,93275,53389],{"class":177},[167,93277,53369],{"class":173},[167,93279,523],{"class":512},[167,93281,53396],{"class":177},[167,93283,537],{"class":512},[167,93285,93286,93288,93290,93292,93294],{"class":169,"line":261},[167,93287,542],{"class":512},[167,93289,53405],{"class":516},[167,93291,53408],{"class":512},[167,93293,53405],{"class":516},[167,93295,537],{"class":512},[167,93297,93298,93300,93302],{"class":169,"line":773},[167,93299,542],{"class":512},[167,93301,2113],{"class":516},[167,93303,537],{"class":512},[167,93305,93306,93308],{"class":169,"line":779},[167,93307,56742],{"class":173},[167,93309,17598],{"class":512},[167,93311,93312,93314,93316,93318],{"class":169,"line":785},[167,93313,74584],{"class":184},[167,93315,53435],{"class":512},[167,93317,62494],{"class":184},[167,93319,3359],{"class":512},[167,93321,93322,93324,93326,93328,93330],{"class":169,"line":790},[167,93323,56761],{"class":184},[167,93325,53435],{"class":512},[167,93327,3776],{"class":184},[167,93329,53490],{"class":731},[167,93331,3359],{"class":512},[167,93333,93334,93336,93338,93340,93342],{"class":169,"line":796},[167,93335,56775],{"class":184},[167,93337,53435],{"class":512},[167,93339,3776],{"class":184},[167,93341,53490],{"class":731},[167,93343,3359],{"class":512},[167,93345,93346,93348,93350,93352],{"class":169,"line":802},[167,93347,56874],{"class":184},[167,93349,53435],{"class":512},[167,93351,91992],{"class":184},[167,93353,3359],{"class":512},[167,93355,93356,93358,93360,93362,93364],{"class":169,"line":808},[167,93357,56912],{"class":184},[167,93359,53435],{"class":512},[167,93361,3025],{"class":184},[167,93363,53490],{"class":731},[167,93365,3359],{"class":512},[167,93367,93368,93370,93372,93374],{"class":169,"line":814},[167,93369,59405],{"class":184},[167,93371,53435],{"class":512},[167,93373,62831],{"class":184},[167,93375,3359],{"class":512},[167,93377,93378,93380,93382,93384],{"class":169,"line":820},[167,93379,59275],{"class":184},[167,93381,53435],{"class":512},[167,93383,53590],{"class":184},[167,93385,3359],{"class":512},[167,93387,93388,93390,93392,93394,93396],{"class":169,"line":826},[167,93389,92031],{"class":184},[167,93391,53435],{"class":512},[167,93393,2519],{"class":184},[167,93395,53490],{"class":731},[167,93397,3359],{"class":512},[167,93399,93400],{"class":169,"line":832},[167,93401,4231],{"class":512},[167,93403,93404,93406,93408],{"class":169,"line":837},[167,93405,54412],{"class":512},[167,93407,2113],{"class":516},[167,93409,537],{"class":512},[167,93411,93412,93414,93416],{"class":169,"line":842},[167,93413,575],{"class":512},[167,93415,53332],{"class":516},[167,93417,537],{"class":512},[167,93419,93420],{"class":169,"line":860},[167,93421,741],{"emptyLinePlaceholder":740},[167,93423,93424,93426,93428],{"class":169,"line":876},[167,93425,513],{"class":512},[167,93427,517],{"class":516},[167,93429,537],{"class":512},[167,93431,93432,93434,93436,93438,93440,93442,93444,93446],{"class":169,"line":887},[167,93433,542],{"class":512},[167,93435,53609],{"class":516},[167,93437,55479],{"class":173},[167,93439,523],{"class":512},[167,93441,526],{"class":177},[167,93443,57303],{"class":512},[167,93445,53609],{"class":516},[167,93447,537],{"class":512},[167,93449,93450,93452,93454,93456,93458,93460,93462,93464],{"class":169,"line":892},[167,93451,542],{"class":512},[167,93453,53809],{"class":516},[167,93455,57228],{"class":173},[167,93457,523],{"class":512},[167,93459,90260],{"class":177},[167,93461,57303],{"class":512},[167,93463,53809],{"class":516},[167,93465,537],{"class":512},[167,93467,93468,93470,93472],{"class":169,"line":907},[167,93469,542],{"class":512},[167,93471,53809],{"class":516},[167,93473,537],{"class":512},[167,93475,93476,93478,93480,93482,93484,93486,93488,93490],{"class":169,"line":920},[167,93477,13249],{"class":731},[167,93479,88919],{"class":184},[167,93481,753],{"class":731},[167,93483,56386],{"class":512},[167,93485,56389],{"class":173},[167,93487,898],{"class":512},[167,93489,92132],{"class":177},[167,93491,873],{"class":512},[167,93493,93494,93496,93498,93500],{"class":169,"line":933},[167,93495,54214],{"class":731},[167,93497,11466],{"class":512},[167,93499,523],{"class":731},[167,93501,49333],{"class":184},[167,93503,93504,93506,93508],{"class":169,"line":946},[167,93505,72072],{"class":731},[167,93507,92151],{"class":173},[167,93509,12881],{"class":512},[167,93511,93512,93514,93516,93518],{"class":169,"line":959},[167,93513,92158],{"class":512},[167,93515,523],{"class":731},[167,93517,5067],{"class":512},[167,93519,4738],{"class":731},[167,93521,93522],{"class":169,"line":964},[167,93523,92169],{"class":2268},[167,93525,93526],{"class":169,"line":987},[167,93527,4231],{"class":512},[167,93529,93530],{"class":169,"line":993},[167,93531,92178],{"class":2268},[167,93533,93534],{"class":169,"line":998},[167,93535,93536],{"class":2268},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[167,93538,93539],{"class":169,"line":1010},[167,93540,93541],{"class":2268},"    \u002F\u002F 1.声明一个定时器变量\n",[167,93543,93544],{"class":169,"line":1022},[167,93545,93546],{"class":2268},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[167,93548,93549],{"class":169,"line":1027},[167,93550,93551],{"class":2268},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[167,93553,93554],{"class":169,"line":1032},[167,93555,93556],{"class":2268},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[167,93558,93559],{"class":169,"line":1049},[167,93560,93561],{"class":2268},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[167,93563,93564,93566,93569,93571,93573,93575,93577],{"class":169,"line":10005},[167,93565,72072],{"class":731},[167,93567,93568],{"class":173}," throttle",[167,93570,898],{"class":512},[167,93572,92623],{"class":7246},[167,93574,14463],{"class":512},[167,93576,2920],{"class":7246},[167,93578,14470],{"class":512},[167,93580,93581,93583],{"class":169,"line":10011},[167,93582,81759],{"class":731},[167,93584,92636],{"class":512},[167,93586,93587,93589,93591],{"class":169,"line":10038},[167,93588,75970],{"class":731},[167,93590,60907],{"class":731},[167,93592,56442],{"class":512},[167,93594,93595,93597,93599,93601],{"class":169,"line":10043},[167,93596,4540],{"class":731},[167,93598,3716],{"class":512},[167,93600,2427],{"class":731},[167,93602,93603],{"class":512},"timer) {\n",[167,93605,93606,93609,93611,93613,93615,93617],{"class":169,"line":10049},[167,93607,93608],{"class":512},"          timer ",[167,93610,523],{"class":731},[167,93612,92677],{"class":173},[167,93614,898],{"class":512},[167,93616,56439],{"class":731},[167,93618,56442],{"class":512},[167,93620,93621,93624],{"class":169,"line":10061},[167,93622,93623],{"class":173},"            fn",[167,93625,4020],{"class":512},[167,93627,93628],{"class":169,"line":10073},[167,93629,93630],{"class":2268},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[167,93632,93633],{"class":169,"line":10085},[167,93634,93635],{"class":2268},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[167,93637,93638,93641,93643],{"class":169,"line":11744},[167,93639,93640],{"class":512},"            timer ",[167,93642,523],{"class":731},[167,93644,93645],{"class":184}," null\n",[167,93647,93648],{"class":169,"line":11769},[167,93649,93650],{"class":2268},"            \u002F\u002F 不能用clearTimeout(timer)\n",[167,93652,93653],{"class":169,"line":11792},[167,93654,93655],{"class":2268},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[167,93657,93658],{"class":169,"line":11816},[167,93659,93660],{"class":512},"          }, t)\n",[167,93662,93663],{"class":169,"line":11821},[167,93664,4572],{"class":512},[167,93666,93667],{"class":169,"line":11826},[167,93668,54393],{"class":512},[167,93670,93671],{"class":169,"line":11831},[167,93672,4231],{"class":512},[167,93674,93675,93677,93679,93681,93683,93685,93687,93689,93691],{"class":169,"line":11840},[167,93676,92193],{"class":512},[167,93678,59802],{"class":173},[167,93680,898],{"class":512},[167,93682,92200],{"class":177},[167,93684,14463],{"class":512},[167,93686,93159],{"class":173},[167,93688,92209],{"class":512},[167,93690,67063],{"class":184},[167,93692,32505],{"class":512},[167,93694,93695,93697,93699],{"class":169,"line":11845},[167,93696,54412],{"class":512},[167,93698,53809],{"class":516},[167,93700,537],{"class":512},[167,93702,93703,93705,93707],{"class":169,"line":11851},[167,93704,575],{"class":512},[167,93706,517],{"class":516},[167,93708,537],{"class":512},[167,93710,93711],{"class":169,"line":11872},[167,93712,741],{"emptyLinePlaceholder":740},[167,93714,93715,93717,93719],{"class":169,"line":11878},[167,93716,575],{"class":512},[167,93718,52635],{"class":516},[167,93720,537],{"class":512},[494,93722,93724],{"id":93723},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,93726,93728],{"className":503,"code":93727,"language":505,"meta":32,"style":32},"\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",[34,93729,93730,93738,93746,93751,93756,93761,93766,93770,93778],{"__ignoreMap":32},[167,93731,93732,93734,93736],{"class":169,"line":170},[167,93733,513],{"class":512},[167,93735,517],{"class":516},[167,93737,537],{"class":512},[167,93739,93740,93742,93744],{"class":169,"line":191},[167,93741,542],{"class":512},[167,93743,53809],{"class":516},[167,93745,537],{"class":512},[167,93747,93748],{"class":169,"line":205},[167,93749,93750],{"class":512},"    let timer = null\n",[167,93752,93753],{"class":169,"line":219},[167,93754,93755],{"class":512},"    timer = setTimeout(() => {\n",[167,93757,93758],{"class":169,"line":230},[167,93759,93760],{"class":512},"      clearTimeout(timer)\n",[167,93762,93763],{"class":169,"line":241},[167,93764,93765],{"class":512},"      console.log(timer)\n",[167,93767,93768],{"class":169,"line":261},[167,93769,62214],{"class":512},[167,93771,93772,93774,93776],{"class":169,"line":773},[167,93773,54412],{"class":512},[167,93775,53809],{"class":516},[167,93777,537],{"class":512},[167,93779,93780,93782,93784],{"class":169,"line":779},[167,93781,575],{"class":512},[167,93783,517],{"class":516},[167,93785,537],{"class":512},[19,93787,93788],{},"输出为1",[19,93790,93791],{},"在开启的定时器里边写清除定时器",[19,93793,93794],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[494,93796,93798],{"id":93797},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93800,93801],{},"页面打开，可以记录上一次的视频播放位置",[19,93803,93804],{},[3528,93805],{"alt":32,"src":93806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93808,93809],{},[3528,93810],{"alt":32,"src":93811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,93813,93815],{"className":52633,"code":93814,"language":52635,"meta":32,"style":32},"\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",[34,93816,93817,93827,93841,93845,93853,93867,93887,93907,93929,93942,93950,93956,93966,93976,93986,93990,93994,94001,94014,94026,94030,94034,94044,94056,94070,94074,94078,94085,94095,94108,94120,94130,94140,94156,94168,94172,94176,94184,94194,94206,94216,94226,94236,94240,94244,94254,94265,94269,94277,94285,94289,94297,94312,94327,94342,94363,94371,94379,94394,94416,94424,94439,94465,94491,94517,94525,94533,94552,94560,94565,94584,94589,94607,94612,94617,94625,94630,94644,94652,94657,94674,94678,94683,94705,94709,94717,94725,94729],{"__ignoreMap":32},[167,93818,93819,93821,93823,93825],{"class":169,"line":170},[167,93820,53297],{"class":512},[167,93822,53300],{"class":516},[167,93824,53303],{"class":173},[167,93826,537],{"class":512},[167,93828,93829,93831,93833,93835,93837,93839],{"class":169,"line":191},[167,93830,513],{"class":512},[167,93832,52635],{"class":516},[167,93834,53314],{"class":173},[167,93836,523],{"class":512},[167,93838,53319],{"class":177},[167,93840,537],{"class":512},[167,93842,93843],{"class":169,"line":205},[167,93844,741],{"emptyLinePlaceholder":740},[167,93846,93847,93849,93851],{"class":169,"line":219},[167,93848,513],{"class":512},[167,93850,53332],{"class":516},[167,93852,537],{"class":512},[167,93854,93855,93857,93859,93861,93863,93865],{"class":169,"line":230},[167,93856,542],{"class":512},[167,93858,53342],{"class":516},[167,93860,53345],{"class":173},[167,93862,523],{"class":512},[167,93864,53350],{"class":177},[167,93866,61116],{"class":512},[167,93868,93869,93871,93873,93875,93877,93879,93881,93883,93885],{"class":169,"line":241},[167,93870,542],{"class":512},[167,93872,53342],{"class":516},[167,93874,53361],{"class":173},[167,93876,523],{"class":512},[167,93878,53366],{"class":177},[167,93880,53369],{"class":173},[167,93882,523],{"class":512},[167,93884,53374],{"class":177},[167,93886,61116],{"class":512},[167,93888,93889,93891,93893,93895,93897,93899,93901,93903,93905],{"class":169,"line":261},[167,93890,542],{"class":512},[167,93892,53342],{"class":516},[167,93894,520],{"class":173},[167,93896,523],{"class":512},[167,93898,53389],{"class":177},[167,93900,53369],{"class":173},[167,93902,523],{"class":512},[167,93904,53396],{"class":177},[167,93906,61116],{"class":512},[167,93908,93909,93911,93913,93915,93917,93920,93922,93924,93927],{"class":169,"line":773},[167,93910,542],{"class":512},[167,93912,53342],{"class":516},[167,93914,520],{"class":173},[167,93916,523],{"class":512},[167,93918,93919],{"class":177},"\"referrer\"",[167,93921,53369],{"class":173},[167,93923,523],{"class":512},[167,93925,93926],{"class":177},"\"never\"",[167,93928,61116],{"class":512},[167,93930,93931,93933,93935,93938,93940],{"class":169,"line":779},[167,93932,542],{"class":512},[167,93934,53405],{"class":516},[167,93936,93937],{"class":512},">综合案例\u003C\u002F",[167,93939,53405],{"class":516},[167,93941,537],{"class":512},[167,93943,93944,93946,93948],{"class":169,"line":785},[167,93945,542],{"class":512},[167,93947,2113],{"class":516},[167,93949,537],{"class":512},[167,93951,93952,93954],{"class":169,"line":790},[167,93953,8433],{"class":516},[167,93955,17598],{"class":512},[167,93957,93958,93960,93962,93964],{"class":169,"line":796},[167,93959,56685],{"class":184},[167,93961,53435],{"class":512},[167,93963,1154],{"class":184},[167,93965,3359],{"class":512},[167,93967,93968,93970,93972,93974],{"class":169,"line":802},[167,93969,56696],{"class":184},[167,93971,53435],{"class":512},[167,93973,1154],{"class":184},[167,93975,3359],{"class":512},[167,93977,93978,93980,93982,93984],{"class":169,"line":808},[167,93979,74584],{"class":184},[167,93981,53435],{"class":512},[167,93983,62494],{"class":184},[167,93985,3359],{"class":512},[167,93987,93988],{"class":169,"line":814},[167,93989,4231],{"class":512},[167,93991,93992],{"class":169,"line":820},[167,93993,741],{"emptyLinePlaceholder":740},[167,93995,93996,93999],{"class":169,"line":826},[167,93997,93998],{"class":173},"    .container",[167,94000,17598],{"class":512},[167,94002,94003,94005,94007,94010,94012],{"class":169,"line":832},[167,94004,56761],{"class":184},[167,94006,53435],{"class":512},[167,94008,94009],{"class":184},"1200",[167,94011,53490],{"class":731},[167,94013,3359],{"class":512},[167,94015,94016,94018,94020,94022,94024],{"class":169,"line":837},[167,94017,56696],{"class":184},[167,94019,53435],{"class":512},[167,94021,1154],{"class":184},[167,94023,53554],{"class":184},[167,94025,3359],{"class":512},[167,94027,94028],{"class":169,"line":842},[167,94029,4231],{"class":512},[167,94031,94032],{"class":169,"line":860},[167,94033,741],{"emptyLinePlaceholder":740},[167,94035,94036,94039,94042],{"class":169,"line":876},[167,94037,94038],{"class":173},"    .video",[167,94040,94041],{"class":516}," video",[167,94043,17598],{"class":512},[167,94045,94046,94048,94050,94052,94054],{"class":169,"line":887},[167,94047,56761],{"class":184},[167,94049,53435],{"class":512},[167,94051,981],{"class":184},[167,94053,2528],{"class":731},[167,94055,3359],{"class":512},[167,94057,94058,94060,94062,94064,94066,94068],{"class":169,"line":892},[167,94059,56685],{"class":184},[167,94061,53435],{"class":512},[167,94063,2900],{"class":184},[167,94065,53490],{"class":731},[167,94067,6125],{"class":184},[167,94069,3359],{"class":512},[167,94071,94072],{"class":169,"line":907},[167,94073,4231],{"class":512},[167,94075,94076],{"class":169,"line":920},[167,94077,741],{"emptyLinePlaceholder":740},[167,94079,94080,94083],{"class":169,"line":933},[167,94081,94082],{"class":173},"    .elevator",[167,94084,17598],{"class":512},[167,94086,94087,94089,94091,94093],{"class":169,"line":946},[167,94088,56749],{"class":184},[167,94090,53435],{"class":512},[167,94092,88219],{"class":184},[167,94094,3359],{"class":512},[167,94096,94097,94099,94101,94104,94106],{"class":169,"line":959},[167,94098,56937],{"class":184},[167,94100,53435],{"class":512},[167,94102,94103],{"class":184},"280",[167,94105,53490],{"class":731},[167,94107,3359],{"class":512},[167,94109,94110,94112,94114,94116,94118],{"class":169,"line":964},[167,94111,88413],{"class":184},[167,94113,53435],{"class":512},[167,94115,2900],{"class":184},[167,94117,53490],{"class":731},[167,94119,3359],{"class":512},[167,94121,94122,94124,94126,94128],{"class":169,"line":987},[167,94123,88226],{"class":184},[167,94125,53435],{"class":512},[167,94127,88231],{"class":184},[167,94129,3359],{"class":512},[167,94131,94132,94134,94136,94138],{"class":169,"line":993},[167,94133,63710],{"class":184},[167,94135,53435],{"class":512},[167,94137,62831],{"class":184},[167,94139,3359],{"class":512},[167,94141,94142,94144,94146,94148,94150,94152,94154],{"class":169,"line":998},[167,94143,63966],{"class":184},[167,94145,53435],{"class":512},[167,94147,2418],{"class":184},[167,94149,53490],{"class":731},[167,94151,53519],{"class":184},[167,94153,64233],{"class":184},[167,94155,3359],{"class":512},[167,94157,94158,94160,94162,94164,94166],{"class":169,"line":1010},[167,94159,56761],{"class":184},[167,94161,53435],{"class":512},[167,94163,3107],{"class":184},[167,94165,53490],{"class":731},[167,94167,3359],{"class":512},[167,94169,94170],{"class":169,"line":1022},[167,94171,4231],{"class":512},[167,94173,94174],{"class":169,"line":1027},[167,94175,741],{"emptyLinePlaceholder":740},[167,94177,94178,94180,94182],{"class":169,"line":1032},[167,94179,94082],{"class":173},[167,94181,3464],{"class":516},[167,94183,17598],{"class":512},[167,94185,94186,94188,94190,94192],{"class":169,"line":1049},[167,94187,56999],{"class":184},[167,94189,53435],{"class":512},[167,94191,62858],{"class":184},[167,94193,3359],{"class":512},[167,94195,94196,94198,94200,94202,94204],{"class":169,"line":10005},[167,94197,56685],{"class":184},[167,94199,53435],{"class":512},[167,94201,2646],{"class":184},[167,94203,53490],{"class":731},[167,94205,3359],{"class":512},[167,94207,94208,94210,94212,94214],{"class":169,"line":10011},[167,94209,65959],{"class":184},[167,94211,53435],{"class":512},[167,94213,56727],{"class":184},[167,94215,3359],{"class":512},[167,94217,94218,94220,94222,94224],{"class":169,"line":10038},[167,94219,59275],{"class":184},[167,94221,53435],{"class":512},[167,94223,53590],{"class":184},[167,94225,3359],{"class":512},[167,94227,94228,94230,94232,94234],{"class":169,"line":10043},[167,94229,59405],{"class":184},[167,94231,53435],{"class":512},[167,94233,64059],{"class":184},[167,94235,3359],{"class":512},[167,94237,94238],{"class":169,"line":10049},[167,94239,4231],{"class":512},[167,94241,94242],{"class":169,"line":10061},[167,94243,741],{"emptyLinePlaceholder":740},[167,94245,94246,94248,94250,94252],{"class":169,"line":10073},[167,94247,94082],{"class":173},[167,94249,3464],{"class":516},[167,94251,66013],{"class":173},[167,94253,17598],{"class":512},[167,94255,94256,94258,94260,94263],{"class":169,"line":10085},[167,94257,59405],{"class":184},[167,94259,53435],{"class":512},[167,94261,94262],{"class":184},"#1286ff",[167,94264,3359],{"class":512},[167,94266,94267],{"class":169,"line":11744},[167,94268,4231],{"class":512},[167,94270,94271,94273,94275],{"class":169,"line":11769},[167,94272,54412],{"class":512},[167,94274,2113],{"class":516},[167,94276,537],{"class":512},[167,94278,94279,94281,94283],{"class":169,"line":11792},[167,94280,575],{"class":512},[167,94282,53332],{"class":516},[167,94284,537],{"class":512},[167,94286,94287],{"class":169,"line":11816},[167,94288,741],{"emptyLinePlaceholder":740},[167,94290,94291,94293,94295],{"class":169,"line":11821},[167,94292,513],{"class":512},[167,94294,517],{"class":516},[167,94296,537],{"class":512},[167,94298,94299,94301,94303,94305,94307,94310],{"class":169,"line":11826},[167,94300,542],{"class":512},[167,94302,53609],{"class":516},[167,94304,55479],{"class":173},[167,94306,523],{"class":512},[167,94308,94309],{"class":177},"\"container\"",[167,94311,537],{"class":512},[167,94313,94314,94316,94318,94320,94322,94325],{"class":169,"line":11831},[167,94315,53339],{"class":512},[167,94317,53609],{"class":516},[167,94319,55479],{"class":173},[167,94321,523],{"class":512},[167,94323,94324],{"class":177},"\"header\"",[167,94326,537],{"class":512},[167,94328,94329,94331,94333,94335,94337,94340],{"class":169,"line":11840},[167,94330,57223],{"class":512},[167,94332,2439],{"class":516},[167,94334,63046],{"class":173},[167,94336,523],{"class":512},[167,94338,94339],{"class":177},"\"http:\u002F\u002Fpip.itcast.cn\"",[167,94341,537],{"class":512},[167,94343,94344,94346,94348,94350,94352,94355,94357,94359,94361],{"class":169,"line":11845},[167,94345,57291],{"class":512},[167,94347,3528],{"class":516},[167,94349,57228],{"class":173},[167,94351,523],{"class":512},[167,94353,94354],{"class":177},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[167,94356,57236],{"class":173},[167,94358,523],{"class":512},[167,94360,9682],{"class":177},[167,94362,61116],{"class":512},[167,94364,94365,94367,94369],{"class":169,"line":11851},[167,94366,57396],{"class":512},[167,94368,2439],{"class":516},[167,94370,537],{"class":512},[167,94372,94373,94375,94377],{"class":169,"line":11872},[167,94374,53774],{"class":512},[167,94376,53609],{"class":516},[167,94378,537],{"class":512},[167,94380,94381,94383,94385,94387,94389,94392],{"class":169,"line":11878},[167,94382,53339],{"class":512},[167,94384,53609],{"class":516},[167,94386,55479],{"class":173},[167,94388,523],{"class":512},[167,94390,94391],{"class":177},"\"video\"",[167,94393,537],{"class":512},[167,94395,94396,94398,94400,94402,94404,94407,94410,94412,94414],{"class":169,"line":11892},[167,94397,57223],{"class":512},[167,94399,30200],{"class":516},[167,94401,57228],{"class":173},[167,94403,523],{"class":512},[167,94405,94406],{"class":177},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[167,94408,94409],{"class":173}," controls",[167,94411,57303],{"class":512},[167,94413,30200],{"class":516},[167,94415,537],{"class":512},[167,94417,94418,94420,94422],{"class":169,"line":11898},[167,94419,53774],{"class":512},[167,94421,53609],{"class":516},[167,94423,537],{"class":512},[167,94425,94426,94428,94430,94432,94434,94437],{"class":169,"line":11925},[167,94427,53339],{"class":512},[167,94429,53609],{"class":516},[167,94431,55479],{"class":173},[167,94433,523],{"class":512},[167,94435,94436],{"class":177},"\"elevator\"",[167,94438,537],{"class":512},[167,94440,94441,94443,94445,94447,94449,94451,94454,94456,94458,94461,94463],{"class":169,"line":11934},[167,94442,57223],{"class":512},[167,94444,2439],{"class":516},[167,94446,63046],{"class":173},[167,94448,523],{"class":512},[167,94450,66225],{"class":177},[167,94452,94453],{"class":173}," data-ref",[167,94455,523],{"class":512},[167,94457,94391],{"class":177},[167,94459,94460],{"class":512},">视频介绍\u003C\u002F",[167,94462,2439],{"class":516},[167,94464,537],{"class":512},[167,94466,94467,94469,94471,94473,94475,94477,94479,94481,94484,94487,94489],{"class":169,"line":11940},[167,94468,57223],{"class":512},[167,94470,2439],{"class":516},[167,94472,63046],{"class":173},[167,94474,523],{"class":512},[167,94476,66225],{"class":177},[167,94478,94453],{"class":173},[167,94480,523],{"class":512},[167,94482,94483],{"class":177},"\"intro\"",[167,94485,94486],{"class":512},">课程简介\u003C\u002F",[167,94488,2439],{"class":516},[167,94490,537],{"class":512},[167,94492,94493,94495,94497,94499,94501,94503,94505,94507,94510,94513,94515],{"class":169,"line":11948},[167,94494,57223],{"class":512},[167,94496,2439],{"class":516},[167,94498,63046],{"class":173},[167,94500,523],{"class":512},[167,94502,66225],{"class":177},[167,94504,94453],{"class":173},[167,94506,523],{"class":512},[167,94508,94509],{"class":177},"\"outline\"",[167,94511,94512],{"class":512},">评论列表\u003C\u002F",[167,94514,2439],{"class":516},[167,94516,537],{"class":512},[167,94518,94519,94521,94523],{"class":169,"line":11953},[167,94520,53774],{"class":512},[167,94522,53609],{"class":516},[167,94524,537],{"class":512},[167,94526,94527,94529,94531],{"class":169,"line":18630},[167,94528,54412],{"class":512},[167,94530,53609],{"class":516},[167,94532,537],{"class":512},[167,94534,94535,94537,94539,94541,94543,94546,94548,94550],{"class":169,"line":18636},[167,94536,542],{"class":512},[167,94538,53809],{"class":516},[167,94540,57228],{"class":173},[167,94542,523],{"class":512},[167,94544,94545],{"class":177},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[167,94547,57303],{"class":512},[167,94549,53809],{"class":516},[167,94551,537],{"class":512},[167,94553,94554,94556,94558],{"class":169,"line":18659},[167,94555,542],{"class":512},[167,94557,53809],{"class":516},[167,94559,537],{"class":512},[167,94561,94562],{"class":169,"line":18665},[167,94563,94564],{"class":2268},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[167,94566,94567,94569,94571,94573,94575,94577,94579,94582],{"class":169,"line":18688},[167,94568,13249],{"class":731},[167,94570,94041],{"class":184},[167,94572,753],{"class":731},[167,94574,56386],{"class":512},[167,94576,56389],{"class":173},[167,94578,898],{"class":512},[167,94580,94581],{"class":177},"'video'",[167,94583,873],{"class":512},[167,94585,94586],{"class":169,"line":18702},[167,94587,94588],{"class":2268},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[167,94590,94591,94594,94596,94598,94600,94603,94605],{"class":169,"line":18722},[167,94592,94593],{"class":512},"    video.ontimeupdate ",[167,94595,523],{"class":731},[167,94597,90341],{"class":512},[167,94599,93159],{"class":173},[167,94601,94602],{"class":512},"(() ",[167,94604,86708],{"class":731},[167,94606,17598],{"class":512},[167,94608,94609],{"class":169,"line":18728},[167,94610,94611],{"class":2268},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[167,94613,94614],{"class":169,"line":18739},[167,94615,94616],{"class":2268},"      \u002F\u002F 控制台输出当前的时间\n",[167,94618,94619,94622],{"class":169,"line":18762},[167,94620,94621],{"class":2268},"      \u002F\u002F console.log(video.currentTime)",[167,94623,94624],{"class":2268},"  \u002F\u002F获得当前的视频时间\n",[167,94626,94627],{"class":169,"line":18784},[167,94628,94629],{"class":2268},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[167,94631,94632,94634,94636,94638,94641],{"class":169,"line":18789},[167,94633,76671],{"class":512},[167,94635,73642],{"class":173},[167,94637,898],{"class":512},[167,94639,94640],{"class":177},"'currentTime'",[167,94642,94643],{"class":512},", video.currentTime)\n",[167,94645,94646,94648,94650],{"class":169,"line":18795},[167,94647,56525],{"class":512},[167,94649,8440],{"class":184},[167,94651,873],{"class":512},[167,94653,94654],{"class":169,"line":18809},[167,94655,94656],{"class":2268},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[167,94658,94659,94662,94665,94667,94670,94672],{"class":169,"line":18822},[167,94660,94661],{"class":512},"    video.",[167,94663,94664],{"class":173},"onloadeddata",[167,94666,753],{"class":731},[167,94668,94669],{"class":512}," () ",[167,94671,86708],{"class":731},[167,94673,17598],{"class":512},[167,94675,94676],{"class":169,"line":18827},[167,94677,62001],{"class":2268},[167,94679,94680],{"class":169,"line":18841},[167,94681,94682],{"class":2268},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[167,94684,94685,94688,94690,94693,94695,94697,94699,94701,94703],{"class":169,"line":18846},[167,94686,94687],{"class":512},"      video.currentTime ",[167,94689,523],{"class":731},[167,94691,94692],{"class":512}," localStorage.",[167,94694,73673],{"class":173},[167,94696,898],{"class":512},[167,94698,94640],{"class":177},[167,94700,15741],{"class":512},[167,94702,73345],{"class":731},[167,94704,49333],{"class":184},[167,94706,94707],{"class":169,"line":18852},[167,94708,4231],{"class":512},[167,94710,94711,94713,94715],{"class":169,"line":18857},[167,94712,54412],{"class":512},[167,94714,53809],{"class":516},[167,94716,537],{"class":512},[167,94718,94719,94721,94723],{"class":169,"line":18871},[167,94720,575],{"class":512},[167,94722,517],{"class":516},[167,94724,537],{"class":512},[167,94726,94727],{"class":169,"line":18876},[167,94728,741],{"emptyLinePlaceholder":740},[167,94730,94731,94733,94735],{"class":169,"line":18881},[167,94732,575],{"class":512},[167,94734,52635],{"class":516},[167,94736,537],{"class":512},[2113,94738,94739],{},"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":32,"searchDepth":191,"depth":191,"links":94741},[94742,94747,94751,94752,94753,94758,94763,94764,94765,94766,94773,94778,94779,94789,94793,94794,94798],{"id":78679,"depth":191,"text":78680,"children":94743},[94744,94745,94746],{"id":78683,"depth":205,"text":78684},{"id":78708,"depth":205,"text":78709},{"id":78720,"depth":205,"text":78721},{"id":78732,"depth":191,"text":78733,"children":94748},[94749,94750],{"id":78736,"depth":205,"text":78737},{"id":78751,"depth":205,"text":78752},{"id":78803,"depth":191,"text":78804},{"id":78847,"depth":191,"text":78848},{"id":78864,"depth":191,"text":78865,"children":94754},[94755,94756,94757],{"id":78868,"depth":205,"text":78869},{"id":78881,"depth":205,"text":78882},{"id":78986,"depth":205,"text":78987},{"id":79275,"depth":191,"text":79276,"children":94759},[94760,94761,94762],{"id":79279,"depth":205,"text":79280},{"id":79722,"depth":205,"text":79723},{"id":80133,"depth":205,"text":80134},{"id":80196,"depth":191,"text":80197},{"id":80275,"depth":191,"text":80276},{"id":80368,"depth":191,"text":80369},{"id":82212,"depth":191,"text":82213,"children":94767},[94768,94769,94770,94771,94772],{"id":82216,"depth":205,"text":82217},{"id":82228,"depth":205,"text":82229},{"id":82447,"depth":205,"text":82448},{"id":82465,"depth":205,"text":82466},{"id":82525,"depth":205,"text":82526},{"id":86792,"depth":191,"text":86793,"children":94774},[94775,94776,94777],{"id":86796,"depth":205,"text":86797},{"id":86814,"depth":205,"text":86815},{"id":86840,"depth":205,"text":86841},{"id":86849,"depth":191,"text":86850},{"id":86871,"depth":191,"text":86872,"children":94780},[94781,94782,94783,94784,94785,94786,94787,94788],{"id":86875,"depth":205,"text":86876},{"id":87136,"depth":205,"text":87137},{"id":87322,"depth":205,"text":87323},{"id":87689,"depth":205,"text":87690},{"id":87805,"depth":205,"text":87806},{"id":87841,"depth":205,"text":87842},{"id":87888,"depth":205,"text":87889},{"id":87922,"depth":205,"text":87923},{"id":89285,"depth":191,"text":89286,"children":94790},[94791,94792],{"id":89289,"depth":205,"text":89290},{"id":89326,"depth":205,"text":89327},{"id":90681,"depth":191,"text":90682},{"id":91052,"depth":191,"text":91053,"children":94795},[94796,94797],{"id":91056,"depth":205,"text":91057},{"id":91090,"depth":205,"text":91091},{"id":91819,"depth":191,"text":91820,"children":94799},[94800,94801,94802,94803],{"id":91823,"depth":205,"text":91824},{"id":92781,"depth":205,"text":92782},{"id":93723,"depth":205,"text":93724},{"id":93797,"depth":205,"text":93798},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78668,"description":25403},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94810,"title":94811,"body":94812,"description":94823,"extension":2140,"meta":94824,"navigation":740,"path":94826,"seo":94827,"stem":94828,"__hash__":94829},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94813,"toc":94821},[94814],[19,94815,94816,94817],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2439,94818,94819],{"href":94819,"rel":94820},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25887],{"title":32,"searchDepth":191,"depth":191,"links":94822},[],"三件套第三套学习",{"category":94825},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94811,"description":94823},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94831,"title":94832,"body":94833,"description":25403,"extension":2140,"meta":94938,"navigation":740,"path":94939,"seo":94940,"stem":94941,"__hash__":94942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94834,"toc":94933},[94835,94842,94845,94848,94851,94855,94864,94867,94870,94874,94883,94886,94890,94893,94913,94916,94930],[19,94836,94837],{},[2439,94838,94841],{"href":94839,"rel":94840},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25887],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94843,94832],{"id":94844},"_1安装",[19,94846,94847],{},"numpy是科学计算基础库,底层是C语言",[19,94849,94850],{},"三种方式：",[14,94852,94854],{"id":94853},"_11-通过pip安装","1.1 通过pip安装",[26,94856,94858],{"className":723,"code":94857,"language":305,"meta":32,"style":32},"pip install numpy\n",[34,94859,94860],{"__ignoreMap":32},[167,94861,94862],{"class":169,"line":170},[167,94863,94857],{"class":512},[19,94865,94866],{},"首选方式，自动处理依赖项",[19,94868,94869],{},"在提示系统命令符中使用cmd",[14,94871,94873],{"id":94872},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,94875,94877],{"className":723,"code":94876,"language":305,"meta":32,"style":32},"conda install numpy\n",[34,94878,94879],{"__ignoreMap":32},[167,94880,94881],{"class":169,"line":170},[167,94882,94876],{"class":512},[19,94884,94885],{},"自动解决环境依赖",[14,94887,94889],{"id":94888},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94891,94892],{},"对于Debian\u002FUbuntu",[26,94894,94896],{"className":723,"code":94895,"language":305,"meta":32,"style":32},"sudo apt-get install python3-numpy\n",[34,94897,94898],{"__ignoreMap":32},[167,94899,94900,94903,94905,94908,94910],{"class":169,"line":170},[167,94901,94902],{"class":512},"sudo apt",[167,94904,2732],{"class":731},[167,94906,94907],{"class":512},"get install python3",[167,94909,2732],{"class":731},[167,94911,94912],{"class":512},"numpy\n",[19,94914,94915],{},"对于Fedora:",[26,94917,94919],{"className":723,"code":94918,"language":305,"meta":32,"style":32},"sudo dnf install python3-numpy\n",[34,94920,94921],{"__ignoreMap":32},[167,94922,94923,94926,94928],{"class":169,"line":170},[167,94924,94925],{"class":512},"sudo dnf install python3",[167,94927,2732],{"class":731},[167,94929,94912],{"class":512},[2113,94931,94932],{},"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":32,"searchDepth":191,"depth":191,"links":94934},[94935,94936,94937],{"id":94853,"depth":191,"text":94854},{"id":94872,"depth":191,"text":94873},{"id":94888,"depth":191,"text":94889},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94832,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94944,"title":94945,"body":94946,"description":25403,"extension":2140,"meta":95059,"navigation":740,"path":95060,"seo":95061,"stem":95062,"__hash__":95063},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94947,"toc":95057},[94948,94951,94954,94957,94960,94963,94966,94969,94972,94975,95051,95054],[10,94949,94945],{"id":94950},"_10算数函数",[19,94952,94953],{},"加减乘除运算跟python基础语法没区别",[19,94955,94956],{},"除了python那种方法外还可以使用函数",[19,94958,94959],{},"加：np.add(a,b)",[19,94961,94962],{},"减：np.subtract(a,b)",[19,94964,94965],{},"乘：np.multiply(a,b)",[19,94967,94968],{},"除：np.divide(a,b) == a\u002Fb",[19,94970,94971],{},"取余：np.mod(a,b) == a%b",[19,94973,94974],{},"必须会的用法：",[26,94976,94978],{"className":723,"code":94977,"language":305,"meta":32,"style":32},"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",[34,94979,94980,95002,95023,95033,95046],{"__ignoreMap":32},[167,94981,94982,94984,94986,94989,94991,94994,94996,94998,95000],{"class":169,"line":170},[167,94983,2439],{"class":512},[167,94985,523],{"class":731},[167,94987,94988],{"class":512},"np.arange(",[167,94990,2620],{"class":184},[167,94992,94993],{"class":512},").reshape(",[167,94995,2281],{"class":184},[167,94997,2578],{"class":512},[167,94999,2281],{"class":184},[167,95001,873],{"class":512},[167,95003,95004,95006,95008,95011,95013,95015,95017,95019,95021],{"class":169,"line":191},[167,95005,2464],{"class":512},[167,95007,523],{"class":731},[167,95009,95010],{"class":512},"np.array([",[167,95012,2646],{"class":184},[167,95014,2578],{"class":512},[167,95016,2646],{"class":184},[167,95018,2578],{"class":512},[167,95020,2646],{"class":184},[167,95022,6689],{"class":512},[167,95024,95025,95028,95030],{"class":169,"line":205},[167,95026,95027],{"class":512},"result",[167,95029,523],{"class":731},[167,95031,95032],{"class":512},"np.empty_like(a)\n",[167,95034,95035,95038,95041,95043],{"class":169,"line":219},[167,95036,95037],{"class":512},"np.add(a,b,",[167,95039,95040],{"class":7246},"out",[167,95042,523],{"class":731},[167,95044,95045],{"class":512},"result)\n",[167,95047,95048],{"class":169,"line":230},[167,95049,95050],{"class":512},"result\n",[19,95052,95053],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2113,95055,95056],{},"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":32,"searchDepth":191,"depth":191,"links":95058},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94945,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95065,"title":95066,"body":95067,"description":25403,"extension":2140,"meta":95829,"navigation":740,"path":95830,"seo":95831,"stem":95832,"__hash__":95833},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95068,"toc":95816},[95069,95072,95075,95078,95082,95121,95125,95169,95229,95233,95236,95275,95278,95323,95327,95363,95367,95436,95440,95504,95508,95511,95514,95517,95520,95556,95560,95600,95604,95676,95679,95683,95746,95750,95813],[10,95070,95066],{"id":95071},"_11统计函数",[19,95073,95074],{},"sum max min mean",[19,95076,95077],{},"这些有axis参数，可以指定方向",[14,95079,95081],{"id":95080},"_111-sum求和函数","11.1 sum()求和函数",[26,95083,95085],{"className":723,"code":95084,"language":305,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[34,95086,95087,95092,95113],{"__ignoreMap":32},[167,95088,95089],{"class":169,"line":170},[167,95090,95091],{"class":2268},"#创建一维数组\n",[167,95093,95094,95096,95098,95101,95103,95105,95107,95109,95111],{"class":169,"line":191},[167,95095,2439],{"class":512},[167,95097,523],{"class":731},[167,95099,95100],{"class":512},"np.random.randint(",[167,95102,2418],{"class":184},[167,95104,2578],{"class":512},[167,95106,981],{"class":184},[167,95108,2578],{"class":512},[167,95110,2900],{"class":184},[167,95112,873],{"class":512},[167,95114,95115,95118],{"class":169,"line":205},[167,95116,95117],{"class":512},"np.sum(a)",[167,95119,95120],{"class":2268},"#求和\n",[14,95122,95124],{"id":95123},"_112-max求最大值函数","11.2 max()求最大值函数",[26,95126,95128],{"className":723,"code":95127,"language":305,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[34,95129,95130,95134,95154,95159,95164],{"__ignoreMap":32},[167,95131,95132],{"class":169,"line":170},[167,95133,95091],{"class":2268},[167,95135,95136,95138,95140,95142,95144,95146,95148,95150,95152],{"class":169,"line":191},[167,95137,2439],{"class":512},[167,95139,523],{"class":731},[167,95141,95100],{"class":512},[167,95143,2418],{"class":184},[167,95145,2578],{"class":512},[167,95147,981],{"class":184},[167,95149,2578],{"class":512},[167,95151,2900],{"class":184},[167,95153,873],{"class":512},[167,95155,95156],{"class":169,"line":205},[167,95157,95158],{"class":512},"np.max(a)\n",[167,95160,95161],{"class":169,"line":219},[167,95162,95163],{"class":2268},"#最大索引(求最大元素的索引)arg\n",[167,95165,95166],{"class":169,"line":230},[167,95167,95168],{"class":512},"np.argmax(a)\n",[26,95170,95172],{"className":723,"code":95171,"language":305,"meta":32,"style":32},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[34,95173,95174,95195,95215,95219],{"__ignoreMap":32},[167,95175,95176,95178,95180,95183,95185,95187,95189,95191,95193],{"class":169,"line":170},[167,95177,12947],{"class":512},[167,95179,523],{"class":731},[167,95181,95182],{"class":512}," np.array([",[167,95184,2418],{"class":184},[167,95186,14463],{"class":512},[167,95188,2519],{"class":184},[167,95190,14463],{"class":512},[167,95192,2281],{"class":184},[167,95194,6689],{"class":512},[167,95196,95197,95199,95201,95203,95205,95207,95209,95211,95213],{"class":169,"line":191},[167,95198,12973],{"class":512},[167,95200,523],{"class":731},[167,95202,95182],{"class":512},[167,95204,2281],{"class":184},[167,95206,14463],{"class":512},[167,95208,2287],{"class":184},[167,95210,14463],{"class":512},[167,95212,2494],{"class":184},[167,95214,6689],{"class":512},[167,95216,95217],{"class":169,"line":205},[167,95218,741],{"emptyLinePlaceholder":740},[167,95220,95221,95223,95226],{"class":169,"line":219},[167,95222,1606],{"class":184},[167,95224,95225],{"class":512},"(np.maximum(a, b))   ",[167,95227,95228],{"class":2268},"# [3 5 4]，每个位置上取较大值\n",[14,95230,95232],{"id":95231},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95234,95235],{},"①一维数组：",[26,95237,95239],{"className":723,"code":95238,"language":305,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[34,95240,95241,95245,95265,95270],{"__ignoreMap":32},[167,95242,95243],{"class":169,"line":170},[167,95244,95091],{"class":2268},[167,95246,95247,95249,95251,95253,95255,95257,95259,95261,95263],{"class":169,"line":191},[167,95248,2439],{"class":512},[167,95250,523],{"class":731},[167,95252,95100],{"class":512},[167,95254,2418],{"class":184},[167,95256,2578],{"class":512},[167,95258,981],{"class":184},[167,95260,2578],{"class":512},[167,95262,2900],{"class":184},[167,95264,873],{"class":512},[167,95266,95267],{"class":169,"line":205},[167,95268,95269],{"class":2268},"#求平均值\n",[167,95271,95272],{"class":169,"line":219},[167,95273,95274],{"class":512},"np.mean(a)\n",[19,95276,95277],{},"②二维数组",[26,95279,95281],{"className":723,"code":95280,"language":305,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[34,95282,95283,95288,95313,95318],{"__ignoreMap":32},[167,95284,95285],{"class":169,"line":170},[167,95286,95287],{"class":2268},"#二维数组\n",[167,95289,95290,95293,95295,95297,95299,95301,95303,95305,95307,95309,95311],{"class":169,"line":191},[167,95291,95292],{"class":512},"aa",[167,95294,523],{"class":731},[167,95296,94988],{"class":512},[167,95298,2418],{"class":184},[167,95300,2578],{"class":512},[167,95302,2723],{"class":184},[167,95304,94993],{"class":512},[167,95306,2281],{"class":184},[167,95308,2578],{"class":512},[167,95310,2494],{"class":184},[167,95312,873],{"class":512},[167,95314,95315],{"class":169,"line":205},[167,95316,95317],{"class":2268},"#对数组中的所有数求平均\n",[167,95319,95320],{"class":169,"line":219},[167,95321,95322],{"class":512},"np.mean(aa)\n",[14,95324,95326],{"id":95325},"_114-median求中位数函数","11.4 median()求中位数函数",[26,95328,95330],{"className":723,"code":95329,"language":305,"meta":32,"style":32},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[34,95331,95332,95337,95353,95358],{"__ignoreMap":32},[167,95333,95334],{"class":169,"line":170},[167,95335,95336],{"class":2268},"#求中位数\n",[167,95338,95339,95341,95343,95345,95347,95349,95351],{"class":169,"line":191},[167,95340,2464],{"class":512},[167,95342,523],{"class":731},[167,95344,94988],{"class":512},[167,95346,2418],{"class":184},[167,95348,2578],{"class":512},[167,95350,2646],{"class":184},[167,95352,873],{"class":512},[167,95354,95355],{"class":169,"line":205},[167,95356,95357],{"class":512},"np.median(b)\n",[167,95359,95360],{"class":169,"line":219},[167,95361,95362],{"class":2268},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95364,95366],{"id":95365},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,95368,95370],{"className":723,"code":95369,"language":305,"meta":32,"style":32},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[34,95371,95372,95388,95393,95398,95407,95412,95421],{"__ignoreMap":32},[167,95373,95374,95376,95378,95380,95382,95384,95386],{"class":169,"line":170},[167,95375,2464],{"class":512},[167,95377,523],{"class":731},[167,95379,94988],{"class":512},[167,95381,2418],{"class":184},[167,95383,2578],{"class":512},[167,95385,2646],{"class":184},[167,95387,873],{"class":512},[167,95389,95390],{"class":169,"line":191},[167,95391,95392],{"class":2268},"#幂运算\n",[167,95394,95395],{"class":169,"line":205},[167,95396,95397],{"class":2268},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[167,95399,95400,95403,95405],{"class":169,"line":219},[167,95401,95402],{"class":512},"np.power(b,",[167,95404,2287],{"class":184},[167,95406,873],{"class":512},[167,95408,95409],{"class":169,"line":230},[167,95410,95411],{"class":2268},"#或者以下代码，将数据存储起来\n",[167,95413,95414,95416,95418],{"class":169,"line":241},[167,95415,3045],{"class":512},[167,95417,523],{"class":731},[167,95419,95420],{"class":512},"np.empty_like(b)\n",[167,95422,95423,95425,95427,95429,95431,95433],{"class":169,"line":261},[167,95424,95402],{"class":512},[167,95426,2287],{"class":184},[167,95428,2578],{"class":512},[167,95430,95040],{"class":7246},[167,95432,523],{"class":731},[167,95434,95435],{"class":512},"y)\n",[14,95437,95439],{"id":95438},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,95441,95443],{"className":723,"code":95442,"language":305,"meta":32,"style":32},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[34,95444,95445,95461,95466,95471,95475,95493],{"__ignoreMap":32},[167,95446,95447,95449,95451,95453,95455,95457,95459],{"class":169,"line":170},[167,95448,2464],{"class":512},[167,95450,523],{"class":731},[167,95452,94988],{"class":512},[167,95454,2418],{"class":184},[167,95456,2578],{"class":512},[167,95458,2646],{"class":184},[167,95460,873],{"class":512},[167,95462,95463],{"class":169,"line":191},[167,95464,95465],{"class":2268},"#开方\n",[167,95467,95468],{"class":169,"line":205},[167,95469,95470],{"class":512},"np.sqrt(b)\n",[167,95472,95473],{"class":169,"line":219},[167,95474,95411],{"class":2268},[167,95476,95477,95479,95481,95484,95487,95489,95491],{"class":169,"line":230},[167,95478,3045],{"class":512},[167,95480,523],{"class":731},[167,95482,95483],{"class":512},"np.empty_like(b,",[167,95485,95486],{"class":7246},"dtype",[167,95488,523],{"class":731},[167,95490,2251],{"class":184},[167,95492,873],{"class":512},[167,95494,95495,95498,95500,95502],{"class":169,"line":241},[167,95496,95497],{"class":512},"np.sqrt(b,",[167,95499,95040],{"class":7246},[167,95501,523],{"class":731},[167,95503,95435],{"class":512},[14,95505,95507],{"id":95506},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95509,95510],{},"对数组中的元素累计求和，可指定轴",[19,95512,95513],{},"#累计求和的意思是：",[19,95515,95516],{},"a = np.array([1, 2, 3, 4])",[19,95518,95519],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,95521,95523],{"className":723,"code":95522,"language":305,"meta":32,"style":32},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[34,95524,95525,95541,95546,95551],{"__ignoreMap":32},[167,95526,95527,95529,95531,95533,95535,95537,95539],{"class":169,"line":170},[167,95528,2464],{"class":512},[167,95530,523],{"class":731},[167,95532,94988],{"class":512},[167,95534,2418],{"class":184},[167,95536,2578],{"class":512},[167,95538,2646],{"class":184},[167,95540,873],{"class":512},[167,95542,95543],{"class":169,"line":191},[167,95544,95545],{"class":512},"np.cumsum(b)\n",[167,95547,95548],{"class":169,"line":205},[167,95549,95550],{"class":2268},"#结果：\n",[167,95552,95553],{"class":169,"line":219},[167,95554,95555],{"class":2268},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95557,95559],{"id":95558},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,95561,95563],{"className":723,"code":95562,"language":305,"meta":32,"style":32},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[34,95564,95565,95581,95586,95591,95595],{"__ignoreMap":32},[167,95566,95567,95569,95571,95573,95575,95577,95579],{"class":169,"line":170},[167,95568,2464],{"class":512},[167,95570,523],{"class":731},[167,95572,94988],{"class":512},[167,95574,2418],{"class":184},[167,95576,2578],{"class":512},[167,95578,2646],{"class":184},[167,95580,873],{"class":512},[167,95582,95583],{"class":169,"line":191},[167,95584,95585],{"class":2268},"#对数组中的元素累计求积，可指定轴\n",[167,95587,95588],{"class":169,"line":205},[167,95589,95590],{"class":512},"np.cumprod(b)\n",[167,95592,95593],{"class":169,"line":219},[167,95594,95550],{"class":2268},[167,95596,95597],{"class":169,"line":230},[167,95598,95599],{"class":2268},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95601,95603],{"id":95602},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,95605,95607],{"className":723,"code":95606,"language":305,"meta":32,"style":32},"#删除数组中的重复数据，并对数据进行排序\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",[34,95608,95609,95614,95662,95667,95671],{"__ignoreMap":32},[167,95610,95611],{"class":169,"line":170},[167,95612,95613],{"class":2268},"#删除数组中的重复数据，并对数据进行排序\n",[167,95615,95616,95618,95620,95622,95624,95626,95628,95630,95632,95634,95636,95638,95640,95642,95644,95646,95648,95650,95652,95654,95656,95658,95660],{"class":169,"line":191},[167,95617,2439],{"class":512},[167,95619,523],{"class":731},[167,95621,95010],{"class":512},[167,95623,2418],{"class":184},[167,95625,2578],{"class":512},[167,95627,2287],{"class":184},[167,95629,2578],{"class":512},[167,95631,2281],{"class":184},[167,95633,2578],{"class":512},[167,95635,2698],{"class":184},[167,95637,2578],{"class":512},[167,95639,2281],{"class":184},[167,95641,2578],{"class":512},[167,95643,2646],{"class":184},[167,95645,2578],{"class":512},[167,95647,2399],{"class":184},[167,95649,2578],{"class":512},[167,95651,1154],{"class":184},[167,95653,2578],{"class":512},[167,95655,2975],{"class":184},[167,95657,2578],{"class":512},[167,95659,2494],{"class":184},[167,95661,6689],{"class":512},[167,95663,95664],{"class":169,"line":205},[167,95665,95666],{"class":512},"np.unique(a)\n",[167,95668,95669],{"class":169,"line":219},[167,95670,95550],{"class":2268},[167,95672,95673],{"class":169,"line":230},[167,95674,95675],{"class":2268},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95677,95678],{},"升序形式排序",[14,95680,95682],{"id":95681},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,95684,95686],{"className":723,"code":95685,"language":305,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[34,95687,95688,95736,95741],{"__ignoreMap":32},[167,95689,95690,95692,95694,95696,95698,95700,95702,95704,95706,95708,95710,95712,95714,95716,95718,95720,95722,95724,95726,95728,95730,95732,95734],{"class":169,"line":170},[167,95691,2439],{"class":512},[167,95693,523],{"class":731},[167,95695,95010],{"class":512},[167,95697,2418],{"class":184},[167,95699,2578],{"class":512},[167,95701,2287],{"class":184},[167,95703,2578],{"class":512},[167,95705,2281],{"class":184},[167,95707,2578],{"class":512},[167,95709,2698],{"class":184},[167,95711,2578],{"class":512},[167,95713,2281],{"class":184},[167,95715,2578],{"class":512},[167,95717,2646],{"class":184},[167,95719,2578],{"class":512},[167,95721,2399],{"class":184},[167,95723,2578],{"class":512},[167,95725,1154],{"class":184},[167,95727,2578],{"class":512},[167,95729,2975],{"class":184},[167,95731,2578],{"class":512},[167,95733,2494],{"class":184},[167,95735,6689],{"class":512},[167,95737,95738],{"class":169,"line":191},[167,95739,95740],{"class":2268},"#返回数组中非零元素的索引\n",[167,95742,95743],{"class":169,"line":205},[167,95744,95745],{"class":512},"np.nonzero(a)\n",[14,95747,95749],{"id":95748},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,95751,95753],{"className":723,"code":95752,"language":305,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[34,95754,95755,95803,95808],{"__ignoreMap":32},[167,95756,95757,95759,95761,95763,95765,95767,95769,95771,95773,95775,95777,95779,95781,95783,95785,95787,95789,95791,95793,95795,95797,95799,95801],{"class":169,"line":170},[167,95758,2439],{"class":512},[167,95760,523],{"class":731},[167,95762,95010],{"class":512},[167,95764,2418],{"class":184},[167,95766,2578],{"class":512},[167,95768,2287],{"class":184},[167,95770,2578],{"class":512},[167,95772,2281],{"class":184},[167,95774,2578],{"class":512},[167,95776,2698],{"class":184},[167,95778,2578],{"class":512},[167,95780,2281],{"class":184},[167,95782,2578],{"class":512},[167,95784,2646],{"class":184},[167,95786,2578],{"class":512},[167,95788,2399],{"class":184},[167,95790,2578],{"class":512},[167,95792,1154],{"class":184},[167,95794,2578],{"class":512},[167,95796,2975],{"class":184},[167,95798,2578],{"class":512},[167,95800,2494],{"class":184},[167,95802,6689],{"class":512},[167,95804,95805],{"class":169,"line":191},[167,95806,95807],{"class":2268},"#计算一组数中最大值与最小值的差，可指定轴\n",[167,95809,95810],{"class":169,"line":205},[167,95811,95812],{"class":512},"np.ptp(a)\n",[2113,95814,95815],{},"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":32,"searchDepth":191,"depth":191,"links":95817},[95818,95819,95820,95821,95822,95823,95824,95825,95826,95827,95828],{"id":95080,"depth":191,"text":95081},{"id":95123,"depth":191,"text":95124},{"id":95231,"depth":191,"text":95232},{"id":95325,"depth":191,"text":95326},{"id":95365,"depth":191,"text":95366},{"id":95438,"depth":191,"text":95439},{"id":95506,"depth":191,"text":95507},{"id":95558,"depth":191,"text":95559},{"id":95602,"depth":191,"text":95603},{"id":95681,"depth":191,"text":95682},{"id":95748,"depth":191,"text":95749},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95066,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95835,"title":95836,"body":95837,"description":25403,"extension":2140,"meta":96492,"navigation":740,"path":96493,"seo":96494,"stem":96495,"__hash__":96496},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95838,"toc":96480},[95839,95842,95846,95849,96065,96069,96072,96281,96285,96351,96356,96360,96363,96366,96404,96408,96411,96416,96420,96423,96426,96431,96435,96438,96442,96445,96448,96453,96457,96460,96463,96468,96472,96477],[10,95840,95836],{"id":95841},"_12其他常用函数",[14,95843,95845],{"id":95844},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95847,95848],{},"将数组的数据按照行列复制扩展",[26,95850,95852],{"className":723,"code":95851,"language":305,"meta":32,"style":32},"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",[34,95853,95854,95870,95879,95883,95888,95893,95906,95910,95915,95920,95925,95929,95934,95958,95970,95974,95978,95983,95988,95993,95998,96002,96015,96019,96023,96028,96033,96038,96043,96048,96052,96056,96061],{"__ignoreMap":32},[167,95855,95856,95858,95860,95862,95864,95866,95868],{"class":169,"line":170},[167,95857,2439],{"class":512},[167,95859,523],{"class":731},[167,95861,94988],{"class":512},[167,95863,2418],{"class":184},[167,95865,2578],{"class":512},[167,95867,2519],{"class":184},[167,95869,873],{"class":512},[167,95871,95872,95875,95877],{"class":169,"line":191},[167,95873,95874],{"class":512},"np.tile(a,",[167,95876,2287],{"class":184},[167,95878,873],{"class":512},[167,95880,95881],{"class":169,"line":205},[167,95882,95550],{"class":2268},[167,95884,95885],{"class":169,"line":219},[167,95886,95887],{"class":2268},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[167,95889,95890],{"class":169,"line":230},[167,95891,95892],{"class":2268},"#行复制两次，列复制三次\n",[167,95894,95895,95898,95900,95902,95904],{"class":169,"line":241},[167,95896,95897],{"class":512},"np.tile(a,(",[167,95899,2287],{"class":184},[167,95901,2578],{"class":512},[167,95903,2281],{"class":184},[167,95905,32505],{"class":512},[167,95907,95908],{"class":169,"line":261},[167,95909,95550],{"class":2268},[167,95911,95912],{"class":169,"line":773},[167,95913,95914],{"class":177},"'''\n",[167,95916,95917],{"class":169,"line":779},[167,95918,95919],{"class":177},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[167,95921,95922],{"class":169,"line":785},[167,95923,95924],{"class":177},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[167,95926,95927],{"class":169,"line":790},[167,95928,95914],{"class":177},[167,95930,95931],{"class":169,"line":796},[167,95932,95933],{"class":2268},"#创建二维数组\n",[167,95935,95936,95938,95940,95942,95944,95946,95948,95950,95952,95954,95956],{"class":169,"line":802},[167,95937,95292],{"class":512},[167,95939,523],{"class":731},[167,95941,94988],{"class":512},[167,95943,2418],{"class":184},[167,95945,2578],{"class":512},[167,95947,2723],{"class":184},[167,95949,94993],{"class":512},[167,95951,2494],{"class":184},[167,95953,2578],{"class":512},[167,95955,2281],{"class":184},[167,95957,873],{"class":512},[167,95959,95960,95963,95965,95967],{"class":169,"line":808},[167,95961,95962],{"class":512},"np.tile(aa,",[167,95964,2287],{"class":184},[167,95966,2629],{"class":512},[167,95968,95969],{"class":2268},"#一个数的时候就是行\n",[167,95971,95972],{"class":169,"line":814},[167,95973,95550],{"class":2268},[167,95975,95976],{"class":169,"line":820},[167,95977,95914],{"class":177},[167,95979,95980],{"class":169,"line":826},[167,95981,95982],{"class":177},"array([[ 1,  2,  3,  1,  2,  3],\n",[167,95984,95985],{"class":169,"line":832},[167,95986,95987],{"class":177},"       [ 4,  5,  6,  4,  5,  6],\n",[167,95989,95990],{"class":169,"line":837},[167,95991,95992],{"class":177},"       [ 7,  8,  9,  7,  8,  9],\n",[167,95994,95995],{"class":169,"line":842},[167,95996,95997],{"class":177},"       [10, 11, 12, 10, 11, 12]])\n",[167,95999,96000],{"class":169,"line":860},[167,96001,95914],{"class":177},[167,96003,96004,96007,96009,96011,96013],{"class":169,"line":876},[167,96005,96006],{"class":512},"np.tile(aa,(",[167,96008,2287],{"class":184},[167,96010,2578],{"class":512},[167,96012,2281],{"class":184},[167,96014,32505],{"class":512},[167,96016,96017],{"class":169,"line":887},[167,96018,95550],{"class":2268},[167,96020,96021],{"class":169,"line":892},[167,96022,95914],{"class":177},[167,96024,96025],{"class":169,"line":907},[167,96026,96027],{"class":177},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[167,96029,96030],{"class":169,"line":920},[167,96031,96032],{"class":177},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[167,96034,96035],{"class":169,"line":933},[167,96036,96037],{"class":177},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[167,96039,96040],{"class":169,"line":946},[167,96041,96042],{"class":177},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[167,96044,96045],{"class":169,"line":959},[167,96046,96047],{"class":177},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[167,96049,96050],{"class":169,"line":964},[167,96051,96032],{"class":177},[167,96053,96054],{"class":169,"line":987},[167,96055,96037],{"class":177},[167,96057,96058],{"class":169,"line":993},[167,96059,96060],{"class":177},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[167,96062,96063],{"class":169,"line":998},[167,96064,95914],{"class":177},[14,96066,96068],{"id":96067},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96070,96071],{},"repeat()将数组中的每个元素重复若干次",[26,96073,96075],{"className":723,"code":96074,"language":305,"meta":32,"style":32},"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",[34,96076,96077,96093,96102,96106,96111,96135,96140,96149,96153,96158,96162,96167,96183,96187,96191,96196,96201,96206,96210,96215,96219,96224,96229,96233,96249,96253,96257,96262,96267,96272,96277],{"__ignoreMap":32},[167,96078,96079,96081,96083,96085,96087,96089,96091],{"class":169,"line":170},[167,96080,2439],{"class":512},[167,96082,523],{"class":731},[167,96084,94988],{"class":512},[167,96086,2418],{"class":184},[167,96088,2578],{"class":512},[167,96090,2519],{"class":184},[167,96092,873],{"class":512},[167,96094,96095,96098,96100],{"class":169,"line":191},[167,96096,96097],{"class":512},"np.repeat(a,",[167,96099,2281],{"class":184},[167,96101,873],{"class":512},[167,96103,96104],{"class":169,"line":205},[167,96105,95550],{"class":2268},[167,96107,96108],{"class":169,"line":219},[167,96109,96110],{"class":2268},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[167,96112,96113,96115,96117,96119,96121,96123,96125,96127,96129,96131,96133],{"class":169,"line":230},[167,96114,95292],{"class":512},[167,96116,523],{"class":731},[167,96118,94988],{"class":512},[167,96120,2418],{"class":184},[167,96122,2578],{"class":512},[167,96124,2723],{"class":184},[167,96126,94993],{"class":512},[167,96128,2494],{"class":184},[167,96130,2578],{"class":512},[167,96132,2281],{"class":184},[167,96134,873],{"class":512},[167,96136,96137],{"class":169,"line":241},[167,96138,96139],{"class":2268},"#这个重复之后二维变成一维\n",[167,96141,96142,96145,96147],{"class":169,"line":261},[167,96143,96144],{"class":512},"np.repeat(aa,",[167,96146,2287],{"class":184},[167,96148,873],{"class":512},[167,96150,96151],{"class":169,"line":773},[167,96152,95914],{"class":177},[167,96154,96155],{"class":169,"line":779},[167,96156,96157],{"class":177},"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",[167,96159,96160],{"class":169,"line":785},[167,96161,95914],{"class":177},[167,96163,96164],{"class":169,"line":790},[167,96165,96166],{"class":2268},"#指定axis\n",[167,96168,96169,96171,96173,96175,96177,96179,96181],{"class":169,"line":796},[167,96170,96144],{"class":512},[167,96172,2287],{"class":184},[167,96174,2578],{"class":512},[167,96176,49514],{"class":7246},[167,96178,523],{"class":731},[167,96180,1154],{"class":184},[167,96182,873],{"class":512},[167,96184,96185],{"class":169,"line":802},[167,96186,95550],{"class":2268},[167,96188,96189],{"class":169,"line":808},[167,96190,95914],{"class":177},[167,96192,96193],{"class":169,"line":814},[167,96194,96195],{"class":177},"array([[ 1,  2,  3],\n",[167,96197,96198],{"class":169,"line":820},[167,96199,96200],{"class":177},"       [ 1,  2,  3],\n",[167,96202,96203],{"class":169,"line":826},[167,96204,96205],{"class":177},"       [ 4,  5,  6],\n",[167,96207,96208],{"class":169,"line":832},[167,96209,96205],{"class":177},[167,96211,96212],{"class":169,"line":837},[167,96213,96214],{"class":177},"       [ 7,  8,  9],\n",[167,96216,96217],{"class":169,"line":842},[167,96218,96214],{"class":177},[167,96220,96221],{"class":169,"line":860},[167,96222,96223],{"class":177},"       [10, 11, 12],\n",[167,96225,96226],{"class":169,"line":876},[167,96227,96228],{"class":177},"       [10, 11, 12]])\n",[167,96230,96231],{"class":169,"line":887},[167,96232,95914],{"class":177},[167,96234,96235,96237,96239,96241,96243,96245,96247],{"class":169,"line":892},[167,96236,96144],{"class":512},[167,96238,2287],{"class":184},[167,96240,2578],{"class":512},[167,96242,49514],{"class":7246},[167,96244,523],{"class":731},[167,96246,2418],{"class":184},[167,96248,873],{"class":512},[167,96250,96251],{"class":169,"line":907},[167,96252,95550],{"class":2268},[167,96254,96255],{"class":169,"line":920},[167,96256,95914],{"class":177},[167,96258,96259],{"class":169,"line":933},[167,96260,96261],{"class":177},"array([[ 1,  1,  2,  2,  3,  3],\n",[167,96263,96264],{"class":169,"line":946},[167,96265,96266],{"class":177},"       [ 4,  4,  5,  5,  6,  6],\n",[167,96268,96269],{"class":169,"line":959},[167,96270,96271],{"class":177},"       [ 7,  7,  8,  8,  9,  9],\n",[167,96273,96274],{"class":169,"line":964},[167,96275,96276],{"class":177},"       [10, 10, 11, 11, 12, 12]])\n",[167,96278,96279],{"class":169,"line":987},[167,96280,95914],{"class":177},[14,96282,96284],{"id":96283},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,96286,96288],{"className":723,"code":96287,"language":305,"meta":32,"style":32},"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",[34,96289,96290,96306,96311,96323,96327,96332,96342,96346],{"__ignoreMap":32},[167,96291,96292,96294,96296,96298,96300,96302,96304],{"class":169,"line":170},[167,96293,2439],{"class":512},[167,96295,523],{"class":731},[167,96297,94988],{"class":512},[167,96299,2418],{"class":184},[167,96301,2578],{"class":512},[167,96303,2519],{"class":184},[167,96305,873],{"class":512},[167,96307,96308],{"class":169,"line":191},[167,96309,96310],{"class":2268},"#array([，2，3，4])\n",[167,96312,96313,96316,96318,96320],{"class":169,"line":205},[167,96314,96315],{"class":512},"np.roll(a,",[167,96317,2287],{"class":184},[167,96319,2629],{"class":512},[167,96321,96322],{"class":2268},"#传正数向后调多少位，传负数向前调多少位\n",[167,96324,96325],{"class":169,"line":219},[167,96326,95550],{"class":2268},[167,96328,96329],{"class":169,"line":230},[167,96330,96331],{"class":2268},"#array([3, 4, 1, 2])\n",[167,96333,96334,96336,96338,96340],{"class":169,"line":241},[167,96335,96315],{"class":512},[167,96337,2732],{"class":731},[167,96339,2418],{"class":184},[167,96341,873],{"class":512},[167,96343,96344],{"class":169,"line":261},[167,96345,95550],{"class":2268},[167,96347,96348],{"class":169,"line":773},[167,96349,96350],{"class":2268},"#array([2, 3, 4, 1])\n",[19,96352,96353],{},[3528,96354],{"alt":32,"src":96355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96357,96359],{"id":96358},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96361,96362],{},"resize()重新调整数组的大小",[19,96364,96365],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,96367,96369],{"className":723,"code":96368,"language":305,"meta":32,"style":32},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[34,96370,96371,96376,96389],{"__ignoreMap":32},[167,96372,96373],{"class":169,"line":170},[167,96374,96375],{"class":2268},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[167,96377,96378,96381,96383,96385,96387],{"class":169,"line":191},[167,96379,96380],{"class":512},"np.resize(aa,(",[167,96382,2287],{"class":184},[167,96384,2578],{"class":512},[167,96386,2544],{"class":184},[167,96388,32505],{"class":512},[167,96390,96391,96393,96395,96397,96399,96401],{"class":169,"line":205},[167,96392,96380],{"class":512},[167,96394,2287],{"class":184},[167,96396,2578],{"class":512},[167,96398,2620],{"class":184},[167,96400,84757],{"class":512},[167,96402,96403],{"class":2268},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96405,96407],{"id":96406},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96409,96410],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96412,96413],{},[3528,96414],{"alt":32,"src":96415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96417,96419],{"id":96418},"_126-保存加载文件","12.6 保存加载文件",[19,96421,96422],{},"savetxt():将数据保存到txt文件中",[19,96424,96425],{},"loadtxt():从文件加载数据",[19,96427,96428],{},[3528,96429],{"alt":32,"src":96430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96432,96434],{"id":96433},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96436,96437],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96439,96441],{"id":96440},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96443,96444],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96446,96447],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96449,96450],{},[3528,96451],{"alt":32,"src":96452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96454,96456],{"id":96455},"_129-where语句","12.9 where语句",[19,96458,96459],{},"np.where(条件,x,y)",[19,96461,96462],{},"如果条件为True,对应值为x,否则对应值为y",[19,96464,96465],{},[3528,96466],{"alt":32,"src":96467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96469,96471],{"id":96470},"_1210-dot矩阵","12.10 dot()矩阵",[19,96473,96474],{},[3528,96475],{"alt":32,"src":96476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2113,96478,96479],{},"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":32,"searchDepth":191,"depth":191,"links":96481},[96482,96483,96484,96485,96486,96487,96488,96489,96490,96491],{"id":95844,"depth":191,"text":95845},{"id":96067,"depth":191,"text":96068},{"id":96283,"depth":191,"text":96284},{"id":96358,"depth":191,"text":96359},{"id":96406,"depth":191,"text":96407},{"id":96418,"depth":191,"text":96419},{"id":96433,"depth":191,"text":96434},{"id":96440,"depth":191,"text":96441},{"id":96455,"depth":191,"text":96456},{"id":96470,"depth":191,"text":96471},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95836,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96498,"title":96499,"body":96500,"description":25403,"extension":2140,"meta":96853,"navigation":740,"path":96854,"seo":96855,"stem":96856,"__hash__":96857},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96501,"toc":96851},[96502,96505,96508,96511,96514,96517,96582,96584,96848],[10,96503,96499],{"id":96504},"_13数组排序",[19,96506,96507],{},"排序主要用到的方法是np.sort和np.argsort",[19,96509,96510],{},"其中np.sort()对数组直接排序",[19,96512,96513],{},"而np.argsort()是返回排序后的原始索引",[19,96515,96516],{},"①一维数组",[26,96518,96520],{"className":723,"code":96519,"language":305,"meta":32,"style":32},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[34,96521,96522,96526,96566,96574],{"__ignoreMap":32},[167,96523,96524],{"class":169,"line":170},[167,96525,95091],{"class":2268},[167,96527,96528,96530,96532,96534,96536,96538,96540,96542,96544,96546,96548,96550,96552,96554,96556,96558,96560,96562,96564],{"class":169,"line":191},[167,96529,2439],{"class":512},[167,96531,523],{"class":731},[167,96533,95010],{"class":512},[167,96535,2281],{"class":184},[167,96537,2578],{"class":512},[167,96539,2698],{"class":184},[167,96541,2578],{"class":512},[167,96543,2595],{"class":184},[167,96545,2578],{"class":512},[167,96547,2975],{"class":184},[167,96549,2578],{"class":512},[167,96551,2480],{"class":184},[167,96553,2578],{"class":512},[167,96555,3093],{"class":184},[167,96557,2578],{"class":512},[167,96559,2544],{"class":184},[167,96561,2578],{"class":512},[167,96563,2646],{"class":184},[167,96565,6689],{"class":512},[167,96567,96568,96571],{"class":169,"line":205},[167,96569,96570],{"class":512},"np.sort(a)",[167,96572,96573],{"class":2268},"#升序排序\n",[167,96575,96576,96579],{"class":169,"line":219},[167,96577,96578],{"class":512},"np.argsort(a)",[167,96580,96581],{"class":2268},"#按照元素大小来索引排序\n",[19,96583,95277],{},[26,96585,96587],{"className":723,"code":96586,"language":305,"meta":32,"style":32},"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",[34,96588,96589,96601,96627,96632,96636,96641,96646,96651,96656,96660,96668,96672,96677,96682,96687,96692,96696,96701,96714,96718,96723,96728,96733,96738,96742,96747,96759,96763,96767,96771,96775,96779,96783,96788,96803,96808,96817,96822,96826,96830,96835,96839,96844],{"__ignoreMap":32},[167,96590,96591,96594,96596,96598],{"class":169,"line":170},[167,96592,96593],{"class":512},"np.random.seed(",[167,96595,1154],{"class":184},[167,96597,2629],{"class":512},[167,96599,96600],{"class":2268},"#保证每次值一样\n",[167,96602,96603,96605,96607,96609,96611,96613,96615,96617,96619,96621,96623,96625],{"class":169,"line":191},[167,96604,95292],{"class":512},[167,96606,523],{"class":731},[167,96608,95100],{"class":512},[167,96610,981],{"class":184},[167,96612,2578],{"class":512},[167,96614,33501],{"class":7246},[167,96616,523],{"class":731},[167,96618,898],{"class":512},[167,96620,2494],{"class":184},[167,96622,2578],{"class":512},[167,96624,2544],{"class":184},[167,96626,32505],{"class":512},[167,96628,96629],{"class":169,"line":205},[167,96630,96631],{"class":2268},"#原数组：\n",[167,96633,96634],{"class":169,"line":219},[167,96635,95914],{"class":177},[167,96637,96638],{"class":169,"line":230},[167,96639,96640],{"class":177},"array([[44, 47, 64, 67, 67,  9],\n",[167,96642,96643],{"class":169,"line":241},[167,96644,96645],{"class":177},"       [83, 21, 36, 87, 70, 88],\n",[167,96647,96648],{"class":169,"line":261},[167,96649,96650],{"class":177},"       [88, 12, 58, 65, 39, 87],\n",[167,96652,96653],{"class":169,"line":773},[167,96654,96655],{"class":177},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[167,96657,96658],{"class":169,"line":779},[167,96659,95914],{"class":177},[167,96661,96662,96665],{"class":169,"line":785},[167,96663,96664],{"class":512},"np.sort(aa)",[167,96666,96667],{"class":2268},"#每行进行了排序\n",[167,96669,96670],{"class":169,"line":790},[167,96671,95914],{"class":177},[167,96673,96674],{"class":169,"line":796},[167,96675,96676],{"class":177},"array([[ 9, 44, 47, 64, 67, 67],\n",[167,96678,96679],{"class":169,"line":802},[167,96680,96681],{"class":177},"       [21, 36, 70, 83, 87, 88],\n",[167,96683,96684],{"class":169,"line":808},[167,96685,96686],{"class":177},"       [12, 39, 58, 65, 87, 88],\n",[167,96688,96689],{"class":169,"line":814},[167,96690,96691],{"class":177},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[167,96693,96694],{"class":169,"line":820},[167,96695,95914],{"class":177},[167,96697,96698],{"class":169,"line":826},[167,96699,96700],{"class":2268},"#axis=0时\n",[167,96702,96703,96706,96708,96710,96712],{"class":169,"line":832},[167,96704,96705],{"class":512},"np.sort(aa,",[167,96707,49514],{"class":7246},[167,96709,523],{"class":731},[167,96711,1154],{"class":184},[167,96713,873],{"class":512},[167,96715,96716],{"class":169,"line":837},[167,96717,95914],{"class":177},[167,96719,96720],{"class":169,"line":842},[167,96721,96722],{"class":177},"array([[44, 12, 36, 37, 25,  9],\n",[167,96724,96725],{"class":169,"line":860},[167,96726,96727],{"class":177},"       [46, 21, 58, 65, 39, 77],\n",[167,96729,96730],{"class":169,"line":876},[167,96731,96732],{"class":177},"       [83, 47, 64, 67, 67, 87],\n",[167,96734,96735],{"class":169,"line":887},[167,96736,96737],{"class":177},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[167,96739,96740],{"class":169,"line":892},[167,96741,95914],{"class":177},[167,96743,96744],{"class":169,"line":907},[167,96745,96746],{"class":2268},"#axis=1时,为默认值\n",[167,96748,96749,96751,96753,96755,96757],{"class":169,"line":920},[167,96750,96705],{"class":512},[167,96752,49514],{"class":7246},[167,96754,523],{"class":731},[167,96756,2418],{"class":184},[167,96758,873],{"class":512},[167,96760,96761],{"class":169,"line":933},[167,96762,95914],{"class":177},[167,96764,96765],{"class":169,"line":946},[167,96766,96676],{"class":177},[167,96768,96769],{"class":169,"line":959},[167,96770,96681],{"class":177},[167,96772,96773],{"class":169,"line":964},[167,96774,96686],{"class":177},[167,96776,96777],{"class":169,"line":987},[167,96778,96691],{"class":177},[167,96780,96781],{"class":169,"line":993},[167,96782,95914],{"class":177},[167,96784,96785],{"class":169,"line":998},[167,96786,96787],{"class":2268},"#按最后一列排序\n",[167,96789,96790,96792,96794,96797,96799,96801],{"class":169,"line":1010},[167,96791,2464],{"class":512},[167,96793,523],{"class":731},[167,96795,96796],{"class":512},"aa[:,",[167,96798,2732],{"class":731},[167,96800,2418],{"class":184},[167,96802,35249],{"class":512},[167,96804,96805],{"class":169,"line":1022},[167,96806,96807],{"class":2268},"#获取最后一列排好序的索引\n",[167,96809,96810,96812,96814],{"class":169,"line":1027},[167,96811,76046],{"class":512},[167,96813,523],{"class":731},[167,96815,96816],{"class":512},"np.argsort(b)\n",[167,96818,96819],{"class":169,"line":1032},[167,96820,96821],{"class":512},"aa[index]\n",[167,96823,96824],{"class":169,"line":1049},[167,96825,95914],{"class":177},[167,96827,96828],{"class":169,"line":10005},[167,96829,96640],{"class":177},[167,96831,96832],{"class":169,"line":10011},[167,96833,96834],{"class":177},"       [46, 88, 81, 37, 25, 77],\n",[167,96836,96837],{"class":169,"line":10038},[167,96838,96650],{"class":177},[167,96840,96841],{"class":169,"line":10043},[167,96842,96843],{"class":177},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[167,96845,96846],{"class":169,"line":10049},[167,96847,95914],{"class":177},[2113,96849,96850],{},"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":32,"searchDepth":191,"depth":191,"links":96852},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96499,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96859,"title":96860,"body":96861,"description":25403,"extension":2140,"meta":96891,"navigation":740,"path":96892,"seo":96893,"stem":96894,"__hash__":96895},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96862,"toc":96889},[96863,96866,96869,96872,96875,96878,96881,96884],[10,96864,96860],{"id":96865},"_14广播机制",[19,96867,96868],{},"广播的规则：",[19,96870,96871],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96873,96874],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96876,96877],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96879,96880],{},"3.如果没有维度形状为1，则会引发异常",[19,96882,96883],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96885,96886],{},[3528,96887],{"alt":32,"src":96888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":32,"searchDepth":191,"depth":191,"links":96890},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96860,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96897,"title":96898,"body":96899,"description":25403,"extension":2140,"meta":96997,"navigation":740,"path":96998,"seo":96999,"stem":97000,"__hash__":97001},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96900,"toc":96995},[96901,96904,96907,96992],[10,96902,96898],{"id":96903},"_15比较掩码",[19,96905,96906],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,96908,96910],{"className":723,"code":96909,"language":305,"meta":32,"style":32},"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",[34,96911,96912,96958,96969,96983,96987],{"__ignoreMap":32},[167,96913,96914,96916,96918,96921,96923,96925,96927,96929,96931,96933,96935,96937,96939,96941,96943,96945,96947,96949,96951,96953,96955],{"class":169,"line":170},[167,96915,2439],{"class":512},[167,96917,523],{"class":731},[167,96919,96920],{"class":512},"np.array([[",[167,96922,2418],{"class":184},[167,96924,2578],{"class":512},[167,96926,2287],{"class":184},[167,96928,2578],{"class":512},[167,96930,2281],{"class":184},[167,96932,50030],{"class":512},[167,96934,2672],{"class":184},[167,96936,2578],{"class":512},[167,96938,2698],{"class":184},[167,96940,2578],{"class":512},[167,96942,2723],{"class":184},[167,96944,50030],{"class":512},[167,96946,2925],{"class":184},[167,96948,2578],{"class":512},[167,96950,2950],{"class":184},[167,96952,2578],{"class":512},[167,96954,2975],{"class":184},[167,96956,96957],{"class":512},"]])\n",[167,96959,96960,96962,96964,96966],{"class":169,"line":191},[167,96961,2439],{"class":512},[167,96963,513],{"class":731},[167,96965,2900],{"class":184},[167,96967,96968],{"class":2268},"#结果是一个由True,False组成的数组\n",[167,96970,96971,96974,96976,96978,96980],{"class":169,"line":205},[167,96972,96973],{"class":512},"a[a",[167,96975,513],{"class":731},[167,96977,2900],{"class":184},[167,96979,3139],{"class":512},[167,96981,96982],{"class":2268},"#小于20的元素会存到这个数组中\n",[167,96984,96985],{"class":169,"line":219},[167,96986,95550],{"class":2268},[167,96988,96989],{"class":169,"line":230},[167,96990,96991],{"class":2268},"#array([ 1,  2,  3, 11, 12, 13])\n",[2113,96993,96994],{},"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":32,"searchDepth":191,"depth":191,"links":96996},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96898,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97003,"title":97004,"body":97005,"description":25403,"extension":2140,"meta":97097,"navigation":740,"path":97098,"seo":97099,"stem":97100,"__hash__":97101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97006,"toc":97095},[97007,97010,97013,97016,97019,97022,97087,97092],[10,97008,97004],{"id":97009},"_16魔法命令time",[19,97011,97012],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97014,97015],{},"%:行模式",[19,97017,97018],{},"%%:单元格模式",[19,97020,97021],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,97023,97025],{"className":723,"code":97024,"language":305,"meta":32,"style":32},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[34,97026,97027,97032,97039,97044,97053,97066,97070,97078],{"__ignoreMap":32},[167,97028,97029],{"class":169,"line":170},[167,97030,97031],{"class":2268},"#程序执行时间\n",[167,97033,97034,97036],{"class":169,"line":191},[167,97035,732],{"class":731},[167,97037,97038],{"class":512}," time \n",[167,97040,97041],{"class":169,"line":205},[167,97042,97043],{"class":2268},"#获取时间\n",[167,97045,97046,97049,97051],{"class":169,"line":219},[167,97047,97048],{"class":512},"start",[167,97050,523],{"class":731},[167,97052,34422],{"class":512},[167,97054,97055,97058,97061,97063],{"class":169,"line":230},[167,97056,97057],{"class":512},"time.sleep(",[167,97059,97060],{"class":184},"0.4",[167,97062,2629],{"class":512},[167,97064,97065],{"class":2268},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[167,97067,97068],{"class":169,"line":241},[167,97069,97043],{"class":2268},[167,97071,97072,97074,97076],{"class":169,"line":261},[167,97073,47801],{"class":512},[167,97075,523],{"class":731},[167,97077,34422],{"class":512},[167,97079,97080,97082,97084],{"class":169,"line":773},[167,97081,47801],{"class":512},[167,97083,2732],{"class":731},[167,97085,97086],{"class":512},"start\n",[19,97088,97089],{},[3528,97090],{"alt":32,"src":97091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2113,97093,97094],{},"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":32,"searchDepth":191,"depth":191,"links":97096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97004,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97103,"title":97104,"body":97105,"description":25403,"extension":2140,"meta":97140,"navigation":740,"path":97141,"seo":97142,"stem":97143,"__hash__":97144},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97106,"toc":97138},[97107,97110,97113,97116,97119,97122,97125,97128,97133],[10,97108,97104],{"id":97109},"_17魔法命令timeit",[19,97111,97112],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97114,97115],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97117,97118],{},"单元格模式：",[19,97120,97121],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97123,97124],{},"初始化语句执行次数由轮数来决定",[19,97126,97127],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97129,97130],{},[3528,97131],{"alt":32,"src":97132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97134,97135],{},[3528,97136],{"alt":32,"src":97137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":32,"searchDepth":191,"depth":191,"links":97139},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97104,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97146,"title":97147,"body":97148,"description":25403,"extension":2140,"meta":97166,"navigation":740,"path":97167,"seo":97168,"stem":97169,"__hash__":97170},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97149,"toc":97164},[97150,97153,97156,97159],[10,97151,97147],{"id":97152},"_18魔法命令writefile和run",[19,97154,97155],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97157,97158],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97160,97161],{},[3528,97162],{"alt":32,"src":97163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":32,"searchDepth":191,"depth":191,"links":97165},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97147,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97172,"title":97173,"body":97174,"description":25403,"extension":2140,"meta":97227,"navigation":740,"path":97228,"seo":97229,"stem":97230,"__hash__":97231},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97175,"toc":97225},[97176,97179,97182,97184,97187,97190,97195,97198,97201,97204,97207,97210,97213,97216,97219,97222],[10,97177,97173],{"id":97178},"_19魔法命令memit",[19,97180,97181],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97183,26621],{},[19,97185,97186],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97188,97189],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97191,97192],{},[3528,97193],{"alt":32,"src":97194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97196,97197],{},"补充：",[19,97199,97200],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97202,97203],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97205,97206],{},"解决方法：",[19,97208,97209],{},"1.cmd",[19,97211,97212],{},"2.依次输入以下代码：",[19,97214,97215],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97217,97218],{},"pip install --upgrade ipython",[19,97220,97221],{},"#升级 memory_profiler 和 setuptools",[19,97223,97224],{},"pip install --upgrade memory_profiler setuptools",{"title":32,"searchDepth":191,"depth":191,"links":97226},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97173,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97233,"title":97234,"body":97235,"description":25403,"extension":2140,"meta":98879,"navigation":740,"path":98880,"seo":98881,"stem":98882,"__hash__":98883},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97236,"toc":98849},[97237,97240,97244,97248,97309,97312,97317,97321,97326,97331,97336,97341,97344,97349,97353,97357,97390,97393,97396,97399,97451,97454,97490,97493,97535,97539,97560,97562,97599,97601,97606,97608,97613,97617,97620,97648,97652,97656,97707,97711,97803,97807,97811,97814,97819,97823,97848,97853,97857,97860,97863,97866,97869,97872,97875,97878,97890,97894,97898,97901,97933,97936,97959,97962,97988,97991,98017,98020,98054,98057,98119,98123,98126,98130,98133,98159,98162,98165,98170,98173,98242,98244,98249,98310,98313,98324,98330,98335,98339,98342,98355,98359,98374,98376,98399,98401,98427,98430,98433,98436,98484,98486,98491,98495,98499,98526,98530,98557,98560,98565,98570,98660,98664,98722,98727,98730,98733,98775,98779,98835,98840,98843,98846],[10,97238,97234],{"id":97239},"_2创建数组",[14,97241,97243],{"id":97242},"_21-array函数创建数组","2.1 array()函数创建数组",[494,97245,97247],{"id":97246},"_221-函数语句","2.2.1 函数语句",[26,97249,97251],{"className":723,"code":97250,"language":305,"meta":32,"style":32},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[34,97252,97253],{"__ignoreMap":32},[167,97254,97255,97258,97261,97263,97265,97267,97269,97271,97274,97276,97279,97281,97284,97286,97288,97290,97293,97295,97298,97300,97303,97305,97307],{"class":169,"line":170},[167,97256,97257],{"class":512},"numpy.array(",[167,97259,97260],{"class":184},"object",[167,97262,14463],{"class":512},[167,97264,95486],{"class":7246},[167,97266,753],{"class":731},[167,97268,40934],{"class":184},[167,97270,14463],{"class":512},[167,97272,97273],{"class":7246},"copy",[167,97275,753],{"class":731},[167,97277,97278],{"class":184}," True",[167,97280,14463],{"class":512},[167,97282,97283],{"class":7246},"order",[167,97285,753],{"class":731},[167,97287,40934],{"class":184},[167,97289,14463],{"class":512},[167,97291,97292],{"class":7246},"subok",[167,97294,753],{"class":731},[167,97296,97297],{"class":184}," False",[167,97299,14463],{"class":512},[167,97301,97302],{"class":7246},"ndmin",[167,97304,753],{"class":731},[167,97306,6125],{"class":184},[167,97308,873],{"class":512},[19,97310,97311],{},"参数：",[19,97313,97314],{},[3528,97315],{"alt":32,"src":97316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[494,97318,97320],{"id":97319},"_222-实例","2.2.2 实例",[19,97322,97323],{},[3528,97324],{"alt":32,"src":97325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97327,97328],{},[3528,97329],{"alt":32,"src":97330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97332,97333],{},[3528,97334],{"alt":32,"src":97335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97337,97338],{},[3528,97339],{"alt":32,"src":97340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97342,97343],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97345,97346],{},[3528,97347],{"alt":32,"src":97348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97350,97352],{"id":97351},"_22-随机数创建数组","2.2 随机数创建数组",[494,97354,97356],{"id":97355},"_221-random语句","2.2.1 random语句",[26,97358,97360],{"className":723,"code":97359,"language":305,"meta":32,"style":32},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[34,97361,97362,97367,97372,97380,97385],{"__ignoreMap":32},[167,97363,97364],{"class":169,"line":170},[167,97365,97366],{"class":2268},"#random.random()\n",[167,97368,97369],{"class":169,"line":191},[167,97370,97371],{"class":2268},"#确定随机种子,就是每次运行结果是相同的\n",[167,97373,97374,97376,97378],{"class":169,"line":205},[167,97375,96593],{"class":512},[167,97377,1154],{"class":184},[167,97379,873],{"class":512},[167,97381,97382],{"class":169,"line":219},[167,97383,97384],{"class":512},"np.random.random()\n",[167,97386,97387],{"class":169,"line":230},[167,97388,97389],{"class":2268},"#生成一个随机的数目\n",[19,97391,97392],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97394,97395],{},"可以指定数组形状 size",[19,97397,97398],{},"①生成一维数组",[26,97400,97402],{"className":723,"code":97401,"language":305,"meta":32,"style":32},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[34,97403,97404,97409,97422,97427,97443],{"__ignoreMap":32},[167,97405,97406],{"class":169,"line":170},[167,97407,97408],{"class":2268},"#random.random(size())\n",[167,97410,97411,97414,97416,97418,97420],{"class":169,"line":191},[167,97412,97413],{"class":512},"np.random.random(",[167,97415,33501],{"class":7246},[167,97417,523],{"class":731},[167,97419,2519],{"class":184},[167,97421,873],{"class":512},[167,97423,97424],{"class":169,"line":205},[167,97425,97426],{"class":2268},"#生成一位的五个元素\n",[167,97428,97429,97431,97433,97435,97437,97439,97441],{"class":169,"line":219},[167,97430,2439],{"class":512},[167,97432,523],{"class":731},[167,97434,97413],{"class":512},[167,97436,33501],{"class":7246},[167,97438,523],{"class":731},[167,97440,2494],{"class":184},[167,97442,873],{"class":512},[167,97444,97445,97448],{"class":169,"line":230},[167,97446,97447],{"class":512},"a.shape ",[167,97449,97450],{"class":2268},"#输出数组形状\n",[19,97452,97453],{},"②生成二维数组",[26,97455,97457],{"className":723,"code":97456,"language":305,"meta":32,"style":32},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[34,97458,97459,97463,97485],{"__ignoreMap":32},[167,97460,97461],{"class":169,"line":170},[167,97462,95287],{"class":2268},[167,97464,97465,97467,97469,97471,97473,97475,97477,97479,97481,97483],{"class":169,"line":191},[167,97466,95292],{"class":512},[167,97468,523],{"class":731},[167,97470,97413],{"class":512},[167,97472,33501],{"class":7246},[167,97474,523],{"class":731},[167,97476,898],{"class":512},[167,97478,2494],{"class":184},[167,97480,2578],{"class":512},[167,97482,2519],{"class":184},[167,97484,32505],{"class":512},[167,97486,97487],{"class":169,"line":205},[167,97488,97489],{"class":2268},"#生成四行五列的数组\n",[19,97491,97492],{},"③生成三维数组",[26,97494,97496],{"className":723,"code":97495,"language":305,"meta":32,"style":32},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[34,97497,97498,97503,97530],{"__ignoreMap":32},[167,97499,97500],{"class":169,"line":170},[167,97501,97502],{"class":2268},"#三维数组\n",[167,97504,97505,97508,97510,97512,97514,97516,97518,97520,97522,97524,97526,97528],{"class":169,"line":191},[167,97506,97507],{"class":512},"aaa",[167,97509,523],{"class":731},[167,97511,97413],{"class":512},[167,97513,33501],{"class":7246},[167,97515,523],{"class":731},[167,97517,898],{"class":512},[167,97519,2287],{"class":184},[167,97521,2578],{"class":512},[167,97523,2281],{"class":184},[167,97525,2578],{"class":512},[167,97527,2494],{"class":184},[167,97529,32505],{"class":512},[167,97531,97532],{"class":169,"line":205},[167,97533,97534],{"class":512},"aaa.shape\n",[494,97536,97538],{"id":97537},"_222-randint语句","2.2.2 randint语句",[26,97540,97542],{"className":723,"code":97541,"language":305,"meta":32,"style":32},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[34,97543,97544,97549],{"__ignoreMap":32},[167,97545,97546],{"class":169,"line":170},[167,97547,97548],{"class":2268},"#生成随机的整数 random.randint(low,high,size)\n",[167,97550,97551,97553,97555,97557],{"class":169,"line":191},[167,97552,95100],{"class":512},[167,97554,2519],{"class":184},[167,97556,15741],{"class":512},[167,97558,97559],{"class":2268},"#0~5中的随机一个数\n",[19,97561,97398],{},[26,97563,97565],{"className":723,"code":97564,"language":305,"meta":32,"style":32},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[34,97566,97567,97572,97594],{"__ignoreMap":32},[167,97568,97569],{"class":169,"line":170},[167,97570,97571],{"class":2268},"#一维\n",[167,97573,97574,97576,97578,97580,97582,97584,97586,97588,97590,97592],{"class":169,"line":191},[167,97575,95100],{"class":512},[167,97577,2418],{"class":184},[167,97579,2578],{"class":512},[167,97581,2672],{"class":184},[167,97583,2578],{"class":512},[167,97585,33501],{"class":7246},[167,97587,523],{"class":731},[167,97589,898],{"class":512},[167,97591,2646],{"class":184},[167,97593,32505],{"class":512},[167,97595,97596],{"class":169,"line":205},[167,97597,97598],{"class":2268},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97600,97453],{},[19,97602,97603],{},[3528,97604],{"alt":32,"src":97605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97607,97492],{},[19,97609,97610],{},[3528,97611],{"alt":32,"src":97612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[494,97614,97616],{"id":97615},"_222-rand语句","2.2.2 rand语句",[19,97618,97619],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,97621,97623],{"className":723,"code":97622,"language":305,"meta":32,"style":32},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[34,97624,97625,97638,97643],{"__ignoreMap":32},[167,97626,97627,97630,97632,97634,97636],{"class":169,"line":170},[167,97628,97629],{"class":512},"np.random.rand(",[167,97631,981],{"class":184},[167,97633,2578],{"class":512},[167,97635,2646],{"class":184},[167,97637,873],{"class":512},[167,97639,97640],{"class":169,"line":191},[167,97641,97642],{"class":2268},"#第一个参数100：行数，表示有100个样本\n",[167,97644,97645],{"class":169,"line":205},[167,97646,97647],{"class":2268},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97649,97651],{"id":97650},"_23-arange创建数组","2.3 arange()创建数组",[494,97653,97655],{"id":97654},"_231-函数语句","2.3.1 函数语句",[26,97657,97659],{"className":723,"code":97658,"language":305,"meta":32,"style":32},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[34,97660,97661,97674,97679,97683,97688,97693,97698,97703],{"__ignoreMap":32},[167,97662,97663,97666,97668,97670,97672],{"class":169,"line":170},[167,97664,97665],{"class":512},"numpy.arange([start,] stop[, step], ",[167,97667,95486],{"class":7246},[167,97669,523],{"class":731},[167,97671,854],{"class":184},[167,97673,873],{"class":512},[167,97675,97676],{"class":169,"line":191},[167,97677,97678],{"class":2268},"#参数\n",[167,97680,97681],{"class":169,"line":205},[167,97682,829],{"class":177},[167,97684,97685],{"class":169,"line":219},[167,97686,97687],{"class":177},"start:起始值，可选，默认从 0 开始。\n",[167,97689,97690],{"class":169,"line":230},[167,97691,97692],{"class":177},"stop:结束值（不包含该值）。\n",[167,97694,97695],{"class":169,"line":241},[167,97696,97697],{"class":177},"step:步长，可选，默认是 1。可以为浮点数。\n",[167,97699,97700],{"class":169,"line":261},[167,97701,97702],{"class":177},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[167,97704,97705],{"class":169,"line":773},[167,97706,829],{"class":177},[494,97708,97710],{"id":97709},"_232-实例","2.3.2 实例",[26,97712,97714],{"className":723,"code":97713,"language":305,"meta":32,"style":32},"#创建一维数组\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",[34,97715,97716,97720,97744,97749,97754,97758,97781,97785,97789,97794,97799],{"__ignoreMap":32},[167,97717,97718],{"class":169,"line":170},[167,97719,95091],{"class":2268},[167,97721,97722,97724,97726,97728,97730,97732,97734,97736,97738,97740,97742],{"class":169,"line":191},[167,97723,94988],{"class":512},[167,97725,2418],{"class":184},[167,97727,2578],{"class":512},[167,97729,2925],{"class":184},[167,97731,2578],{"class":512},[167,97733,2418],{"class":184},[167,97735,2578],{"class":512},[167,97737,95486],{"class":7246},[167,97739,523],{"class":731},[167,97741,2216],{"class":184},[167,97743,873],{"class":512},[167,97745,97746],{"class":169,"line":205},[167,97747,97748],{"class":2268},"#输出结果：\n",[167,97750,97751],{"class":169,"line":219},[167,97752,97753],{"class":2268},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[167,97755,97756],{"class":169,"line":230},[167,97757,95933],{"class":2268},[167,97759,97760,97763,97765,97767,97769,97772,97774,97776,97778],{"class":169,"line":241},[167,97761,97762],{"class":512},"np.array([np.arange(",[167,97764,2418],{"class":184},[167,97766,2578],{"class":512},[167,97768,2494],{"class":184},[167,97770,97771],{"class":512},"),np.arange(",[167,97773,2494],{"class":184},[167,97775,2578],{"class":512},[167,97777,2569],{"class":184},[167,97779,97780],{"class":512},")])\n",[167,97782,97783],{"class":169,"line":261},[167,97784,95550],{"class":2268},[167,97786,97787],{"class":169,"line":773},[167,97788,829],{"class":177},[167,97790,97791],{"class":169,"line":779},[167,97792,97793],{"class":177},"array([[1, 2, 3],\n",[167,97795,97796],{"class":169,"line":785},[167,97797,97798],{"class":177},"       [4, 5, 6]])\n",[167,97800,97801],{"class":169,"line":790},[167,97802,829],{"class":177},[14,97804,97806],{"id":97805},"_24-生态分布","2.4 生态分布",[494,97808,97810],{"id":97809},"_241-标准正态分布","2.4.1 标准正态分布",[19,97812,97813],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97815,97816],{},[3528,97817],{"alt":32,"src":97818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[494,97820,97822],{"id":97821},"_242-常规正态分布","2.4.2 常规正态分布",[26,97824,97826],{"className":723,"code":97825,"language":305,"meta":32,"style":32},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[34,97827,97828,97833,97838,97843],{"__ignoreMap":32},[167,97829,97830],{"class":169,"line":170},[167,97831,97832],{"class":512},"random.normal(loc,scale,size)也可以生成正态分布\n",[167,97834,97835],{"class":169,"line":191},[167,97836,97837],{"class":2268},"#loc:期望\n",[167,97839,97840],{"class":169,"line":205},[167,97841,97842],{"class":2268},"#scale:方差\n",[167,97844,97845],{"class":169,"line":219},[167,97846,97847],{"class":2268},"#size:用于确定是几维的数列\n",[19,97849,97850],{},[3528,97851],{"alt":32,"src":97852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97854,97856],{"id":97855},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97858,97859],{},"ndim:秩，维度个数",[19,97861,97862],{},"size:数组元素的个数",[19,97864,97865],{},"shape:数组的形状",[19,97867,97868],{},"dtype:数组元素的类型",[19,97870,97871],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97873,97874],{},"他们都是属性，通过数组.属性的形式来确定",[19,97876,97877],{},"如果需要输出多个可以通过以下方式：",[26,97879,97881],{"className":723,"code":97880,"language":305,"meta":32,"style":32},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[34,97882,97883],{"__ignoreMap":32},[167,97884,97885,97887],{"class":169,"line":170},[167,97886,1606],{"class":184},[167,97888,97889],{"class":512},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97891,97893],{"id":97892},"_26-其他方式创建数组","2.6 其他方式创建数组",[494,97895,97897],{"id":97896},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97899,97900],{},"①创建一维数组",[26,97902,97904],{"className":723,"code":97903,"language":305,"meta":32,"style":32},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[34,97905,97906,97915,97919,97924,97929],{"__ignoreMap":32},[167,97907,97908,97911,97913],{"class":169,"line":170},[167,97909,97910],{"class":512},"np.zeros(",[167,97912,2646],{"class":184},[167,97914,873],{"class":512},[167,97916,97917],{"class":169,"line":191},[167,97918,829],{"class":177},[167,97920,97921],{"class":169,"line":205},[167,97922,97923],{"class":177},"输出结果：\n",[167,97925,97926],{"class":169,"line":219},[167,97927,97928],{"class":177},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[167,97930,97931],{"class":169,"line":230},[167,97932,829],{"class":177},[19,97934,97935],{},"上方代码等价于：",[26,97937,97939],{"className":723,"code":97938,"language":305,"meta":32,"style":32},"np.zeros(shape=(10))#创建10个元素的0数组\n",[34,97940,97941],{"__ignoreMap":32},[167,97942,97943,97945,97948,97950,97952,97954,97956],{"class":169,"line":170},[167,97944,97910],{"class":512},[167,97946,97947],{"class":7246},"shape",[167,97949,523],{"class":731},[167,97951,898],{"class":512},[167,97953,2646],{"class":184},[167,97955,84757],{"class":512},[167,97957,97958],{"class":2268},"#创建10个元素的0数组\n",[19,97960,97961],{},"也可以指定类型",[26,97963,97965],{"className":723,"code":97964,"language":305,"meta":32,"style":32},"#指定类型\nnp.zeros(5,dtype=int)\n",[34,97966,97967,97972],{"__ignoreMap":32},[167,97968,97969],{"class":169,"line":170},[167,97970,97971],{"class":2268},"#指定类型\n",[167,97973,97974,97976,97978,97980,97982,97984,97986],{"class":169,"line":191},[167,97975,97910],{"class":512},[167,97977,2519],{"class":184},[167,97979,2578],{"class":512},[167,97981,95486],{"class":7246},[167,97983,523],{"class":731},[167,97985,2216],{"class":184},[167,97987,873],{"class":512},[19,97989,97990],{},"②创建二维数组",[26,97992,97994],{"className":723,"code":97993,"language":305,"meta":32,"style":32},"np.zeros((3,4),dtype=int)\n",[34,97995,97996],{"__ignoreMap":32},[167,97997,97998,98001,98003,98005,98007,98009,98011,98013,98015],{"class":169,"line":170},[167,97999,98000],{"class":512},"np.zeros((",[167,98002,2281],{"class":184},[167,98004,2578],{"class":512},[167,98006,2494],{"class":184},[167,98008,44256],{"class":512},[167,98010,95486],{"class":7246},[167,98012,523],{"class":731},[167,98014,2216],{"class":184},[167,98016,873],{"class":512},[19,98018,98019],{},"③创建三维数组",[26,98021,98023],{"className":723,"code":98022,"language":305,"meta":32,"style":32},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[34,98024,98025,98030],{"__ignoreMap":32},[167,98026,98027],{"class":169,"line":170},[167,98028,98029],{"class":2268},"#创建三维数组\n",[167,98031,98032,98034,98036,98038,98040,98042,98044,98046,98048,98050,98052],{"class":169,"line":191},[167,98033,98000],{"class":512},[167,98035,2281],{"class":184},[167,98037,2578],{"class":512},[167,98039,2494],{"class":184},[167,98041,2578],{"class":512},[167,98043,2519],{"class":184},[167,98045,44256],{"class":512},[167,98047,95486],{"class":7246},[167,98049,523],{"class":731},[167,98051,2216],{"class":184},[167,98053,873],{"class":512},[19,98055,98056],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,98058,98060],{"className":723,"code":98059,"language":305,"meta":32,"style":32},"#使用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",[34,98061,98062,98067,98082,98087,98092,98114],{"__ignoreMap":32},[167,98063,98064],{"class":169,"line":170},[167,98065,98066],{"class":2268},"#使用zeros_like将创建的一维数组变成全0的数组\n",[167,98068,98069,98071,98073,98075,98077,98079],{"class":169,"line":191},[167,98070,2439],{"class":512},[167,98072,523],{"class":731},[167,98074,94988],{"class":512},[167,98076,2494],{"class":184},[167,98078,2629],{"class":512},[167,98080,98081],{"class":2268},"#这个得到的结果：一维数组0，1，2，3\n",[167,98083,98084],{"class":169,"line":205},[167,98085,98086],{"class":512},"np.zeros_like(a)\n",[167,98088,98089],{"class":169,"line":219},[167,98090,98091],{"class":2268},"#使用zeros_like将创建的二维数组变成全0的数组\n",[167,98093,98094,98096,98098,98100,98102,98104,98106,98108,98110,98112],{"class":169,"line":230},[167,98095,95292],{"class":512},[167,98097,523],{"class":731},[167,98099,97413],{"class":512},[167,98101,33501],{"class":7246},[167,98103,523],{"class":731},[167,98105,898],{"class":512},[167,98107,2494],{"class":184},[167,98109,2578],{"class":512},[167,98111,2519],{"class":184},[167,98113,32505],{"class":512},[167,98115,98116],{"class":169,"line":241},[167,98117,98118],{"class":512},"np.zeros_like(aa)\n",[494,98120,98122],{"id":98121},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98124,98125],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[494,98127,98129],{"id":98128},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98131,98132],{},"①empty()用法",[26,98134,98136],{"className":723,"code":98135,"language":305,"meta":32,"style":32},"numpy.empty(shape,dtype=float,order='c')\n",[34,98137,98138],{"__ignoreMap":32},[167,98139,98140,98143,98145,98147,98149,98151,98153,98155,98157],{"class":169,"line":170},[167,98141,98142],{"class":512},"numpy.empty(shape,",[167,98144,95486],{"class":7246},[167,98146,523],{"class":731},[167,98148,2251],{"class":184},[167,98150,2578],{"class":512},[167,98152,97283],{"class":7246},[167,98154,523],{"class":731},[167,98156,78016],{"class":177},[167,98158,873],{"class":512},[19,98160,98161],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98163,98164],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98166,98167],{},[3528,98168],{"alt":32,"src":98169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98171,98172],{},"②empty()用法",[26,98174,98176],{"className":723,"code":98175,"language":305,"meta":32,"style":32},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[34,98177,98178,98199,98211,98232,98237],{"__ignoreMap":32},[167,98179,98180,98182,98184,98187,98189,98191,98193,98195,98197],{"class":169,"line":170},[167,98181,3045],{"class":512},[167,98183,523],{"class":731},[167,98185,98186],{"class":512},"np.empty(",[167,98188,2646],{"class":184},[167,98190,2578],{"class":512},[167,98192,95486],{"class":7246},[167,98194,523],{"class":731},[167,98196,2216],{"class":184},[167,98198,873],{"class":512},[167,98200,98201,98203,98205,98207,98209],{"class":169,"line":191},[167,98202,3020],{"class":512},[167,98204,523],{"class":731},[167,98206,94988],{"class":512},[167,98208,2519],{"class":184},[167,98210,873],{"class":512},[167,98212,98213,98216,98218,98221,98223,98225,98228,98230],{"class":169,"line":205},[167,98214,98215],{"class":512},"np.add(",[167,98217,2287],{"class":184},[167,98219,98220],{"class":512},",x,",[167,98222,95040],{"class":7246},[167,98224,523],{"class":731},[167,98226,98227],{"class":512},"y[:",[167,98229,2519],{"class":184},[167,98231,6689],{"class":512},[167,98233,98234],{"class":169,"line":219},[167,98235,98236],{"class":2268},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[167,98238,98239],{"class":169,"line":230},[167,98240,98241],{"class":512},"y\n",[19,98243,13542],{},[19,98245,98246],{},[3528,98247],{"alt":32,"src":98248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,98250,98252],{"className":723,"code":98251,"language":305,"meta":32,"style":32},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[34,98253,98254,98270,98290,98305],{"__ignoreMap":32},[167,98255,98256,98258,98260,98262,98264,98266,98268],{"class":169,"line":170},[167,98257,3020],{"class":512},[167,98259,523],{"class":731},[167,98261,94988],{"class":512},[167,98263,2418],{"class":184},[167,98265,2578],{"class":512},[167,98267,2544],{"class":184},[167,98269,873],{"class":512},[167,98271,98272,98274,98276,98278,98280,98282,98284,98286,98288],{"class":169,"line":191},[167,98273,3045],{"class":512},[167,98275,523],{"class":731},[167,98277,98186],{"class":512},[167,98279,2519],{"class":184},[167,98281,2578],{"class":512},[167,98283,95486],{"class":7246},[167,98285,523],{"class":731},[167,98287,2216],{"class":184},[167,98289,873],{"class":512},[167,98291,98292,98295,98297,98299,98301,98303],{"class":169,"line":205},[167,98293,98294],{"class":512},"np.add(x,",[167,98296,2287],{"class":184},[167,98298,2578],{"class":512},[167,98300,95040],{"class":7246},[167,98302,523],{"class":731},[167,98304,95435],{"class":512},[167,98306,98307],{"class":169,"line":219},[167,98308,98309],{"class":2268},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98311,98312],{},"③empty_like()",[19,98314,98315],{},[2354,98316,98317,98318,98323],{},"创建一个",[2354,98319,98320],{},[2354,98321,98322],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98325,98326,98329],{},[34,98327,98328],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98331,98332],{},[3528,98333],{"alt":32,"src":98334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[494,98336,98338],{"id":98337},"_264-用法","2.6.4 ？？用法",[19,98340,98341],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,98343,98345],{"className":723,"code":98344,"language":305,"meta":32,"style":32},"np.full??\n",[34,98346,98347],{"__ignoreMap":32},[167,98348,98349,98352],{"class":169,"line":170},[167,98350,98351],{"class":512},"np.full",[167,98353,98354],{"class":79391},"??\n",[494,98356,98358],{"id":98357},"_265-full创建数组","2.6.5 full()创建数组",[26,98360,98362],{"className":723,"code":98361,"language":305,"meta":32,"style":32},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[34,98363,98364,98369],{"__ignoreMap":32},[167,98365,98366],{"class":169,"line":170},[167,98367,98368],{"class":512},"full(shape,fill_value)\n",[167,98370,98371],{"class":169,"line":191},[167,98372,98373],{"class":512},"创建全为某个指定值的数组\n",[19,98375,96516],{},[26,98377,98379],{"className":723,"code":98378,"language":305,"meta":32,"style":32},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[34,98380,98381,98386],{"__ignoreMap":32},[167,98382,98383],{"class":169,"line":170},[167,98384,98385],{"class":2268},"#创建一个一维数组,以20进行填充\n",[167,98387,98388,98391,98393,98395,98397],{"class":169,"line":191},[167,98389,98390],{"class":512},"np.full(",[167,98392,2646],{"class":184},[167,98394,2578],{"class":512},[167,98396,2900],{"class":184},[167,98398,873],{"class":512},[19,98400,95277],{},[26,98402,98404],{"className":723,"code":98403,"language":305,"meta":32,"style":32},"#创建二维数组\nnp.full((3,5),11)\n",[34,98405,98406,98410],{"__ignoreMap":32},[167,98407,98408],{"class":169,"line":170},[167,98409,95933],{"class":2268},[167,98411,98412,98415,98417,98419,98421,98423,98425],{"class":169,"line":191},[167,98413,98414],{"class":512},"np.full((",[167,98416,2281],{"class":184},[167,98418,2578],{"class":512},[167,98420,2519],{"class":184},[167,98422,44256],{"class":512},[167,98424,2672],{"class":184},[167,98426,873],{"class":512},[19,98428,98429],{},"③full_like用法",[19,98431,98432],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98434,98435],{},"这里是指定填充而已",[26,98437,98439],{"className":723,"code":98438,"language":305,"meta":32,"style":32},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[34,98440,98441,98446,98470,98475],{"__ignoreMap":32},[167,98442,98443],{"class":169,"line":170},[167,98444,98445],{"class":2268},"#创建一个指定形状数组\n",[167,98447,98448,98450,98452,98454,98456,98458,98460,98462,98464,98466,98468],{"class":169,"line":191},[167,98449,2439],{"class":512},[167,98451,523],{"class":731},[167,98453,94988],{"class":512},[167,98455,2418],{"class":184},[167,98457,2578],{"class":512},[167,98459,2525],{"class":184},[167,98461,94993],{"class":512},[167,98463,2494],{"class":184},[167,98465,2578],{"class":512},[167,98467,2620],{"class":184},[167,98469,873],{"class":512},[167,98471,98472],{"class":169,"line":205},[167,98473,98474],{"class":2268},"#进行指定填充\n",[167,98476,98477,98480,98482],{"class":169,"line":219},[167,98478,98479],{"class":512},"np.full_like(a,",[167,98481,2646],{"class":184},[167,98483,873],{"class":512},[19,98485,13542],{},[19,98487,98488],{},[3528,98489],{"alt":32,"src":98490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[494,98492,98494],{"id":98493},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24024,98496,98498],{"id":98497},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,98500,98502],{"className":723,"code":98501,"language":305,"meta":32,"style":32},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[34,98503,98504,98521],{"__ignoreMap":32},[167,98505,98506,98509,98511,98513,98515,98517,98519],{"class":169,"line":170},[167,98507,98508],{"class":512},"np.eye(",[167,98510,2494],{"class":184},[167,98512,2578],{"class":512},[167,98514,95486],{"class":7246},[167,98516,523],{"class":731},[167,98518,2216],{"class":184},[167,98520,873],{"class":512},[167,98522,98523],{"class":169,"line":191},[167,98524,98525],{"class":2268},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24024,98527,98529],{"id":98528},"_2662-法2identity","2.6.6.2 法2：identity()",[26,98531,98533],{"className":723,"code":98532,"language":305,"meta":32,"style":32},"#identity()\nnp.identity(5,dtype=int)\n",[34,98534,98535,98540],{"__ignoreMap":32},[167,98536,98537],{"class":169,"line":170},[167,98538,98539],{"class":2268},"#identity()\n",[167,98541,98542,98545,98547,98549,98551,98553,98555],{"class":169,"line":191},[167,98543,98544],{"class":512},"np.identity(",[167,98546,2519],{"class":184},[167,98548,2578],{"class":512},[167,98550,95486],{"class":7246},[167,98552,523],{"class":731},[167,98554,2216],{"class":184},[167,98556,873],{"class":512},[19,98558,98559],{},"两个函数是有区别的",[19,98561,98562],{},[3528,98563],{"alt":32,"src":98564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98566,98567],{},[3528,98568],{"alt":32,"src":98569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,98571,98573],{"className":723,"code":98572,"language":305,"meta":32,"style":32},"# 创建一个 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",[34,98574,98575,98580,98592,98597,98602,98607,98612,98616,98621,98641,98645,98650,98655],{"__ignoreMap":32},[167,98576,98577],{"class":169,"line":170},[167,98578,98579],{"class":2268},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[167,98581,98582,98584,98586,98588,98590],{"class":169,"line":191},[167,98583,98508],{"class":512},[167,98585,2281],{"class":184},[167,98587,14463],{"class":512},[167,98589,2494],{"class":184},[167,98591,873],{"class":512},[167,98593,98594],{"class":169,"line":205},[167,98595,98596],{"class":2268},"# 输出:\n",[167,98598,98599],{"class":169,"line":219},[167,98600,98601],{"class":2268},"# [[1. 0. 0. 0.]\n",[167,98603,98604],{"class":169,"line":230},[167,98605,98606],{"class":2268},"#  [0. 1. 0. 0.]\n",[167,98608,98609],{"class":169,"line":241},[167,98610,98611],{"class":2268},"#  [0. 0. 1. 0.]]\n",[167,98613,98614],{"class":169,"line":261},[167,98615,741],{"emptyLinePlaceholder":740},[167,98617,98618],{"class":169,"line":773},[167,98619,98620],{"class":2268},"# 对角线向上偏移1\n",[167,98622,98623,98625,98627,98629,98631,98633,98635,98637,98639],{"class":169,"line":779},[167,98624,98508],{"class":512},[167,98626,2281],{"class":184},[167,98628,14463],{"class":512},[167,98630,2494],{"class":184},[167,98632,14463],{"class":512},[167,98634,2693],{"class":7246},[167,98636,523],{"class":731},[167,98638,2418],{"class":184},[167,98640,873],{"class":512},[167,98642,98643],{"class":169,"line":785},[167,98644,98596],{"class":2268},[167,98646,98647],{"class":169,"line":790},[167,98648,98649],{"class":2268},"# [[0. 1. 0. 0.]\n",[167,98651,98652],{"class":169,"line":796},[167,98653,98654],{"class":2268},"#  [0. 0. 1. 0.]\n",[167,98656,98657],{"class":169,"line":802},[167,98658,98659],{"class":2268},"#  [0. 0. 0. 1.]]\n",[494,98661,98663],{"id":98662},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,98665,98667],{"className":723,"code":98666,"language":305,"meta":32,"style":32},"#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",[34,98668,98669,98674,98678,98683,98688,98693,98698,98703,98708,98713,98718],{"__ignoreMap":32},[167,98670,98671],{"class":169,"line":170},[167,98672,98673],{"class":2268},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[167,98675,98676],{"class":169,"line":191},[167,98677,829],{"class":177},[167,98679,98680],{"class":169,"line":205},[167,98681,98682],{"class":177},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[167,98684,98685],{"class":169,"line":219},[167,98686,98687],{"class":177},"参数介绍：\n",[167,98689,98690],{"class":169,"line":230},[167,98691,98692],{"class":177},"start：序列的起始值\n",[167,98694,98695],{"class":169,"line":241},[167,98696,98697],{"class":177},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[167,98699,98700],{"class":169,"line":261},[167,98701,98702],{"class":177},"num：要生长的等步长的样本数量，默认为50\n",[167,98704,98705],{"class":169,"line":773},[167,98706,98707],{"class":177},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[167,98709,98710],{"class":169,"line":779},[167,98711,98712],{"class":177},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[167,98714,98715],{"class":169,"line":785},[167,98716,98717],{"class":177},"dtype：ndarry的数据类型\n",[167,98719,98720],{"class":169,"line":790},[167,98721,829],{"class":177},[19,98723,98724],{},[3528,98725],{"alt":32,"src":98726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98728,98729],{},"这里num=是可以省略的",[19,98731,98732],{},"也就是下方两行代码结果是一模一样的",[26,98734,98736],{"className":723,"code":98735,"language":305,"meta":32,"style":32},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[34,98737,98738,98755],{"__ignoreMap":32},[167,98739,98740,98743,98745,98747,98749,98751,98753],{"class":169,"line":170},[167,98741,98742],{"class":512},"np.linspace(",[167,98744,2418],{"class":184},[167,98746,2578],{"class":512},[167,98748,2519],{"class":184},[167,98750,2578],{"class":512},[167,98752,2519],{"class":184},[167,98754,873],{"class":512},[167,98756,98757,98759,98761,98763,98765,98767,98769,98771,98773],{"class":169,"line":191},[167,98758,98742],{"class":512},[167,98760,2418],{"class":184},[167,98762,2578],{"class":512},[167,98764,2519],{"class":184},[167,98766,2578],{"class":512},[167,98768,3723],{"class":7246},[167,98770,523],{"class":731},[167,98772,2519],{"class":184},[167,98774,873],{"class":512},[494,98776,98778],{"id":98777},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,98780,98782],{"className":723,"code":98781,"language":305,"meta":32,"style":32},"#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",[34,98783,98784,98789,98793,98798,98803,98808,98813,98817,98822,98827,98831],{"__ignoreMap":32},[167,98785,98786],{"class":169,"line":170},[167,98787,98788],{"class":2268},"#logspace函数用于创建一个等比数列，格式如下：\n",[167,98790,98791],{"class":169,"line":191},[167,98792,829],{"class":177},[167,98794,98795],{"class":169,"line":205},[167,98796,98797],{"class":177},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[167,98799,98800],{"class":169,"line":219},[167,98801,98802],{"class":177},"参数为：\n",[167,98804,98805],{"class":169,"line":230},[167,98806,98807],{"class":177},"start:序列的起始位置为：base**start\n",[167,98809,98810],{"class":169,"line":241},[167,98811,98812],{"class":177},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[167,98814,98815],{"class":169,"line":261},[167,98816,98702],{"class":177},[167,98818,98819],{"class":169,"line":773},[167,98820,98821],{"class":177},"endpoint：是否包含 stop 这个值，默认是 True\n",[167,98823,98824],{"class":169,"line":779},[167,98825,98826],{"class":177},"base：对数的底数，默认是 10（常见对数）\n",[167,98828,98829],{"class":169,"line":785},[167,98830,98717],{"class":177},[167,98832,98833],{"class":169,"line":790},[167,98834,829],{"class":177},[19,98836,98837],{},[3528,98838],{"alt":32,"src":98839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98841,98842],{},"logspace()函数中的num参数也是可以不写num=的",[19,98844,98845],{},"endpoint是不可以省略的",[2113,98847,98848],{},"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":32,"searchDepth":191,"depth":191,"links":98850},[98851,98855,98860,98864,98868,98869],{"id":97242,"depth":191,"text":97243,"children":98852},[98853,98854],{"id":97246,"depth":205,"text":97247},{"id":97319,"depth":205,"text":97320},{"id":97351,"depth":191,"text":97352,"children":98856},[98857,98858,98859],{"id":97355,"depth":205,"text":97356},{"id":97537,"depth":205,"text":97538},{"id":97615,"depth":205,"text":97616},{"id":97650,"depth":191,"text":97651,"children":98861},[98862,98863],{"id":97654,"depth":205,"text":97655},{"id":97709,"depth":205,"text":97710},{"id":97805,"depth":191,"text":97806,"children":98865},[98866,98867],{"id":97809,"depth":205,"text":97810},{"id":97821,"depth":205,"text":97822},{"id":97855,"depth":191,"text":97856},{"id":97892,"depth":191,"text":97893,"children":98870},[98871,98872,98873,98874,98875,98876,98877,98878],{"id":97896,"depth":205,"text":97897},{"id":98121,"depth":205,"text":98122},{"id":98128,"depth":205,"text":98129},{"id":98337,"depth":205,"text":98338},{"id":98357,"depth":205,"text":98358},{"id":98493,"depth":205,"text":98494},{"id":98662,"depth":205,"text":98663},{"id":98777,"depth":205,"text":98778},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97234,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98885,"title":98886,"body":98887,"description":25403,"extension":2140,"meta":98980,"navigation":740,"path":98981,"seo":98982,"stem":98983,"__hash__":98984},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98888,"toc":98978},[98889,98892,98895,98898,98901,98904,98907,98910,98913,98916,98919,98922,98924,98927,98930,98935,98938,98941,98975],[10,98890,98886],{"id":98891},"_20魔法命令mprun",[19,98893,98894],{},"逐行分析数据内存的使用情况",[19,98896,98897],{},"语法格式：",[19,98899,98900],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98902,98903],{},"分析结果列如下：",[19,98905,98906],{},"Line行号",[19,98908,98909],{},"Mem usage内存使用大小",[19,98911,98912],{},"increment内存增量",[19,98914,98915],{},"Line content代码内容",[19,98917,98918],{},"补充说明：",[19,98920,98921],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98923,97189],{},[19,98925,98926],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98928,98929],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98931,98932],{},[3528,98933],{"alt":32,"src":98934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98936,98937],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98939,98940],{},"这时候需要重新加载模块",[26,98942,98944],{"className":723,"code":98943,"language":305,"meta":32,"style":32},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[34,98945,98946,98951,98958,98963],{"__ignoreMap":32},[167,98947,98948],{"class":169,"line":170},[167,98949,98950],{"class":2268},"#重新加载模块\n",[167,98952,98953,98955],{"class":169,"line":191},[167,98954,732],{"class":731},[167,98956,98957],{"class":512}," importlib\n",[167,98959,98960],{"class":169,"line":205},[167,98961,98962],{"class":512},"importlib.reload(mprun_test)\n",[167,98964,98965,98967,98970,98972],{"class":169,"line":219},[167,98966,2528],{"class":731},[167,98968,98969],{"class":512},"mprun ",[167,98971,2732],{"class":731},[167,98973,98974],{"class":512},"f mprun_test.fun_test mprun_test.fun_test()\n",[2113,98976,98977],{},"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":32,"searchDepth":191,"depth":191,"links":98979},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98886,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98986,"title":98987,"body":98988,"description":25403,"extension":2140,"meta":99005,"navigation":740,"path":99006,"seo":99007,"stem":99008,"__hash__":99009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98989,"toc":99003},[98990,98993,98998],[10,98991,98987],{"id":98992},"_3一维数组的索引和切片",[19,98994,98995],{},[3528,98996],{"alt":32,"src":98997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98999,99000],{},[3528,99001],{"alt":32,"src":99002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":32,"searchDepth":191,"depth":191,"links":99004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98987,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99011,"title":99012,"body":99013,"description":25403,"extension":2140,"meta":99496,"navigation":740,"path":99497,"seo":99498,"stem":99499,"__hash__":99500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99014,"toc":99494},[99015,99018,99021,99026,99059,99062,99100,99103,99137,99140,99245,99248,99285,99288,99389,99392,99443,99446,99488,99491],[10,99016,99012],{"id":99017},"_4二维数组的索引与切片",[19,99019,99020],{},"①获取指定单个元素",[19,99022,99023],{},[3528,99024],{"alt":32,"src":99025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,99027,99029],{"className":723,"code":99028,"language":305,"meta":32,"style":32},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[34,99030,99031,99036,99041,99046],{"__ignoreMap":32},[167,99032,99033],{"class":169,"line":170},[167,99034,99035],{"class":2268},"#获取元素9\n",[167,99037,99038],{"class":169,"line":191},[167,99039,99040],{"class":2268},"#先获取所在行，再获取所在列\n",[167,99042,99043],{"class":169,"line":205},[167,99044,99045],{"class":2268},"#数组[行索引号，列索引号]\n",[167,99047,99048,99051,99053,99055,99057],{"class":169,"line":219},[167,99049,99050],{"class":512},"a[",[167,99052,2418],{"class":184},[167,99054,2578],{"class":512},[167,99056,2287],{"class":184},[167,99058,35249],{"class":512},[19,99060,99061],{},"②获取整行元素",[26,99063,99065],{"className":723,"code":99064,"language":305,"meta":32,"style":32},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[34,99066,99067,99072,99077,99085,99090],{"__ignoreMap":32},[167,99068,99069],{"class":169,"line":170},[167,99070,99071],{"class":2268},"#获取整行 数组[行索引号]\n",[167,99073,99074],{"class":169,"line":191},[167,99075,99076],{"class":2268},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[167,99078,99079,99081,99083],{"class":169,"line":205},[167,99080,99050],{"class":512},[167,99082,2287],{"class":184},[167,99084,35249],{"class":512},[167,99086,99087],{"class":169,"line":219},[167,99088,99089],{"class":2268},"#也可以负索引获取一行\n",[167,99091,99092,99094,99096,99098],{"class":169,"line":230},[167,99093,99050],{"class":512},[167,99095,2732],{"class":731},[167,99097,2418],{"class":184},[167,99099,35249],{"class":512},[19,99101,99102],{},"③获取整列元素",[26,99104,99106],{"className":723,"code":99105,"language":305,"meta":32,"style":32},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[34,99107,99108,99113,99122,99127],{"__ignoreMap":32},[167,99109,99110],{"class":169,"line":170},[167,99111,99112],{"class":2268},"#获取整列 数组名[:,列索引]\n",[167,99114,99115,99118,99120],{"class":169,"line":191},[167,99116,99117],{"class":512},"a[:,",[167,99119,2287],{"class":184},[167,99121,35249],{"class":512},[167,99123,99124],{"class":169,"line":205},[167,99125,99126],{"class":2268},"#也可以负索引获取一列\n",[167,99128,99129,99131,99133,99135],{"class":169,"line":219},[167,99130,99117],{"class":512},[167,99132,2732],{"class":731},[167,99134,2418],{"class":184},[167,99136,35249],{"class":512},[19,99138,99139],{},"④部分行部分列的元素",[26,99141,99143],{"className":723,"code":99142,"language":305,"meta":32,"style":32},"#部分行部分列 数组名[行切片，列切片]\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",[34,99144,99145,99150,99160,99164,99168,99173,99178,99182,99194,99198,99202,99207,99212,99217,99222,99226,99231],{"__ignoreMap":32},[167,99146,99147],{"class":169,"line":170},[167,99148,99149],{"class":2268},"#部分行部分列 数组名[行切片，列切片]\n",[167,99151,99152,99155,99157],{"class":169,"line":191},[167,99153,99154],{"class":512},"a[:",[167,99156,2287],{"class":184},[167,99158,99159],{"class":512},",:]\n",[167,99161,99162],{"class":169,"line":205},[167,99163,95550],{"class":2268},[167,99165,99166],{"class":169,"line":219},[167,99167,95914],{"class":177},[167,99169,99170],{"class":169,"line":230},[167,99171,99172],{"class":177},"array([[ 1,  2,  3,  4,  5,  6],\n",[167,99174,99175],{"class":169,"line":241},[167,99176,99177],{"class":177},"       [ 7,  8,  9, 10, 11, 12]])\n",[167,99179,99180],{"class":169,"line":261},[167,99181,95914],{"class":177},[167,99183,99184,99186,99188,99190,99192],{"class":169,"line":773},[167,99185,99117],{"class":512},[167,99187,2418],{"class":184},[167,99189,3059],{"class":512},[167,99191,2494],{"class":184},[167,99193,35249],{"class":512},[167,99195,99196],{"class":169,"line":779},[167,99197,95550],{"class":2268},[167,99199,99200],{"class":169,"line":785},[167,99201,95914],{"class":177},[167,99203,99204],{"class":169,"line":790},[167,99205,99206],{"class":177},"array([[ 2,  3,  4],\n",[167,99208,99209],{"class":169,"line":796},[167,99210,99211],{"class":177},"       [ 8,  9, 10],\n",[167,99213,99214],{"class":169,"line":802},[167,99215,99216],{"class":177},"       [14, 15, 16],\n",[167,99218,99219],{"class":169,"line":808},[167,99220,99221],{"class":177},"       [20, 21, 22]])\n",[167,99223,99224],{"class":169,"line":814},[167,99225,95914],{"class":177},[167,99227,99228],{"class":169,"line":820},[167,99229,99230],{"class":2268},"#对列行同时进行切片，使用了step参数\n",[167,99232,99233,99236,99238,99241,99243],{"class":169,"line":826},[167,99234,99235],{"class":512},"a[::",[167,99237,2287],{"class":184},[167,99239,99240],{"class":512},",::",[167,99242,2287],{"class":184},[167,99244,35249],{"class":512},[19,99246,99247],{},"⑤同时获取两个元素",[26,99249,99251],{"className":723,"code":99250,"language":305,"meta":32,"style":32},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[34,99252,99253,99258,99263],{"__ignoreMap":32},[167,99254,99255],{"class":169,"line":170},[167,99256,99257],{"class":2268},"#同时获取第三行第二列，第四行第一列\n",[167,99259,99260],{"class":169,"line":191},[167,99261,99262],{"class":2268},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[167,99264,99265,99268,99270,99272,99274,99276,99278,99280,99282],{"class":169,"line":205},[167,99266,99267],{"class":512},"a[(",[167,99269,2287],{"class":184},[167,99271,2578],{"class":512},[167,99273,2281],{"class":184},[167,99275,44247],{"class":512},[167,99277,2418],{"class":184},[167,99279,2578],{"class":512},[167,99281,1154],{"class":184},[167,99283,99284],{"class":512},")]\n",[19,99286,99287],{},"⑥切片，对行进行反向获取",[26,99289,99291],{"className":723,"code":99290,"language":305,"meta":32,"style":32},"#切片 对所有行进行反向获取\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",[34,99292,99293,99298,99308,99312,99316,99321,99326,99331,99336,99340,99345,99361,99365,99370,99375,99380,99385],{"__ignoreMap":32},[167,99294,99295],{"class":169,"line":170},[167,99296,99297],{"class":2268},"#切片 对所有行进行反向获取\n",[167,99299,99300,99302,99304,99306],{"class":169,"line":191},[167,99301,99235],{"class":512},[167,99303,2732],{"class":731},[167,99305,2418],{"class":184},[167,99307,35249],{"class":512},[167,99309,99310],{"class":169,"line":205},[167,99311,95550],{"class":2268},[167,99313,99314],{"class":169,"line":219},[167,99315,95914],{"class":177},[167,99317,99318],{"class":169,"line":230},[167,99319,99320],{"class":177},"array([[19, 20, 21, 22, 23, 24],\n",[167,99322,99323],{"class":169,"line":241},[167,99324,99325],{"class":177},"       [13, 14, 15, 16, 17, 18],\n",[167,99327,99328],{"class":169,"line":261},[167,99329,99330],{"class":177},"       [ 7,  8,  9, 10, 11, 12],\n",[167,99332,99333],{"class":169,"line":773},[167,99334,99335],{"class":177},"       [ 1,  2,  3,  4,  5,  6]])\n",[167,99337,99338],{"class":169,"line":779},[167,99339,95914],{"class":177},[167,99341,99342],{"class":169,"line":785},[167,99343,99344],{"class":2268},"#对行列都进行反向切片获取\n",[167,99346,99347,99349,99351,99353,99355,99357,99359],{"class":169,"line":790},[167,99348,99235],{"class":512},[167,99350,2732],{"class":731},[167,99352,2418],{"class":184},[167,99354,99240],{"class":512},[167,99356,2732],{"class":731},[167,99358,2418],{"class":184},[167,99360,35249],{"class":512},[167,99362,99363],{"class":169,"line":796},[167,99364,95914],{"class":177},[167,99366,99367],{"class":169,"line":802},[167,99368,99369],{"class":177},"array([[24, 23, 22, 21, 20, 19],\n",[167,99371,99372],{"class":169,"line":808},[167,99373,99374],{"class":177},"       [18, 17, 16, 15, 14, 13],\n",[167,99376,99377],{"class":169,"line":814},[167,99378,99379],{"class":177},"       [12, 11, 10,  9,  8,  7],\n",[167,99381,99382],{"class":169,"line":820},[167,99383,99384],{"class":177},"       [ 6,  5,  4,  3,  2,  1]])\n",[167,99386,99387],{"class":169,"line":826},[167,99388,95914],{"class":177},[19,99390,99391],{},"⑦修改元素",[26,99393,99395],{"className":723,"code":99394,"language":305,"meta":32,"style":32},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[34,99396,99397,99402,99420,99425],{"__ignoreMap":32},[167,99398,99399],{"class":169,"line":170},[167,99400,99401],{"class":2268},"#获取前两行和前两列\n",[167,99403,99404,99407,99409,99411,99413,99416,99418],{"class":169,"line":191},[167,99405,99406],{"class":512},"sub_a",[167,99408,523],{"class":731},[167,99410,99154],{"class":512},[167,99412,2287],{"class":184},[167,99414,99415],{"class":512},",:",[167,99417,2287],{"class":184},[167,99419,35249],{"class":512},[167,99421,99422],{"class":169,"line":205},[167,99423,99424],{"class":2268},"#修改sub_a第一个元素的值\n",[167,99426,99427,99430,99432,99434,99436,99438,99440],{"class":169,"line":219},[167,99428,99429],{"class":512},"sub_a[",[167,99431,1154],{"class":184},[167,99433,2578],{"class":512},[167,99435,1154],{"class":184},[167,99437,3139],{"class":512},[167,99439,523],{"class":731},[167,99441,99442],{"class":184},"100\n",[19,99444,99445],{},"⑧数组复制copy()",[26,99447,99449],{"className":723,"code":99448,"language":305,"meta":32,"style":32},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[34,99450,99451,99456,99466,99471],{"__ignoreMap":32},[167,99452,99453],{"class":169,"line":170},[167,99454,99455],{"class":2268},"#数组复制\n",[167,99457,99458,99461,99463],{"class":169,"line":191},[167,99459,99460],{"class":512},"copy_a",[167,99462,523],{"class":731},[167,99464,99465],{"class":512},"np.copy(sub_a)\n",[167,99467,99468],{"class":169,"line":205},[167,99469,99470],{"class":2268},"#修改copy_a后不影响原数组\n",[167,99472,99473,99476,99478,99480,99482,99484,99486],{"class":169,"line":219},[167,99474,99475],{"class":512},"copy_a[",[167,99477,1154],{"class":184},[167,99479,2578],{"class":512},[167,99481,1154],{"class":184},[167,99483,3139],{"class":512},[167,99485,523],{"class":731},[167,99487,99442],{"class":184},[19,99489,99490],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2113,99492,99493],{},"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":32,"searchDepth":191,"depth":191,"links":99495},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99012,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99502,"title":99503,"body":99504,"description":25403,"extension":2140,"meta":99996,"navigation":740,"path":99997,"seo":99998,"stem":99999,"__hash__":100000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99505,"toc":99988},[99506,99509,99513,99516,99519,99572,99575,99600,99603,99622,99642,99645,99661,99665,99711,99715,99757,99761,99764,99767,99770,99773,99776,99838,99898,99902,99905,99962,99966,99971,99980,99985],[10,99507,99503],{"id":99508},"_5改变数组的维度",[14,99510,99512],{"id":99511},"_51-使用reshape","5.1 使用reshape()",[19,99514,99515],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99517,99518],{},"①一维数组转换为二维数组",[26,99520,99522],{"className":723,"code":99521,"language":305,"meta":32,"style":32},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[34,99523,99524,99540,99545,99550,99555],{"__ignoreMap":32},[167,99525,99526,99528,99530,99532,99534,99536,99538],{"class":169,"line":170},[167,99527,2439],{"class":512},[167,99529,523],{"class":731},[167,99531,94988],{"class":512},[167,99533,2418],{"class":184},[167,99535,2578],{"class":512},[167,99537,2723],{"class":184},[167,99539,873],{"class":512},[167,99541,99542],{"class":169,"line":191},[167,99543,99544],{"class":2268},"#将一维数组进行转换\n",[167,99546,99547],{"class":169,"line":205},[167,99548,99549],{"class":2268},"#注意点：元素个数不可以变\n",[167,99551,99552],{"class":169,"line":219},[167,99553,99554],{"class":2268},"#转换维度要保持一致，不一致就异常！！！\n",[167,99556,99557,99559,99561,99564,99566,99568,99570],{"class":169,"line":230},[167,99558,95292],{"class":512},[167,99560,523],{"class":731},[167,99562,99563],{"class":512},"a.reshape(",[167,99565,2287],{"class":184},[167,99567,2578],{"class":512},[167,99569,2544],{"class":184},[167,99571,873],{"class":512},[19,99573,99574],{},"②一维数组转换为三维数组",[26,99576,99578],{"className":723,"code":99577,"language":305,"meta":32,"style":32},"aaa=a.reshape(2,3,2)\n",[34,99579,99580],{"__ignoreMap":32},[167,99581,99582,99584,99586,99588,99590,99592,99594,99596,99598],{"class":169,"line":170},[167,99583,97507],{"class":512},[167,99585,523],{"class":731},[167,99587,99563],{"class":512},[167,99589,2287],{"class":184},[167,99591,2578],{"class":512},[167,99593,2281],{"class":184},[167,99595,2578],{"class":512},[167,99597,2287],{"class":184},[167,99599,873],{"class":512},[19,99601,99602],{},"③二维数组转化为一维数组",[26,99604,99606],{"className":723,"code":99605,"language":305,"meta":32,"style":32},"#知道元素个数：\naa.reshape(12)\n",[34,99607,99608,99613],{"__ignoreMap":32},[167,99609,99610],{"class":169,"line":170},[167,99611,99612],{"class":2268},"#知道元素个数：\n",[167,99614,99615,99618,99620],{"class":169,"line":191},[167,99616,99617],{"class":512},"aa.reshape(",[167,99619,2698],{"class":184},[167,99621,873],{"class":512},[26,99623,99625],{"className":723,"code":99624,"language":305,"meta":32,"style":32},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[34,99626,99627,99632],{"__ignoreMap":32},[167,99628,99629],{"class":169,"line":170},[167,99630,99631],{"class":2268},"#不知道元素个数，参数传递-1\n",[167,99633,99634,99636,99638,99640],{"class":169,"line":191},[167,99635,99617],{"class":512},[167,99637,2732],{"class":731},[167,99639,2418],{"class":184},[167,99641,873],{"class":512},[19,99643,99644],{},"④三维数组转换为一维数组",[26,99646,99648],{"className":723,"code":99647,"language":305,"meta":32,"style":32},"aaa.reshape(-1)\n",[34,99649,99650],{"__ignoreMap":32},[167,99651,99652,99655,99657,99659],{"class":169,"line":170},[167,99653,99654],{"class":512},"aaa.reshape(",[167,99656,2732],{"class":731},[167,99658,2418],{"class":184},[167,99660,873],{"class":512},[14,99662,99664],{"id":99663},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,99666,99668],{"className":723,"code":99667,"language":305,"meta":32,"style":32},"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",[34,99669,99670,99697,99702,99706],{"__ignoreMap":32},[167,99671,99672,99674,99676,99678,99680,99682,99684,99686,99688,99690,99692,99694],{"class":169,"line":170},[167,99673,95292],{"class":512},[167,99675,523],{"class":731},[167,99677,94988],{"class":512},[167,99679,2418],{"class":184},[167,99681,2578],{"class":512},[167,99683,2723],{"class":184},[167,99685,94993],{"class":512},[167,99687,2287],{"class":184},[167,99689,2578],{"class":512},[167,99691,2544],{"class":184},[167,99693,2629],{"class":512},[167,99695,99696],{"class":2268},"#转换为2行6列的数组\n",[167,99698,99699],{"class":169,"line":191},[167,99700,99701],{"class":512},"aa.revel()\n",[167,99703,99704],{"class":169,"line":205},[167,99705,95550],{"class":2268},[167,99707,99708],{"class":169,"line":219},[167,99709,99710],{"class":2268},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99712,99714],{"id":99713},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,99716,99718],{"className":723,"code":99717,"language":305,"meta":32,"style":32},"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",[34,99719,99720,99744,99749,99753],{"__ignoreMap":32},[167,99721,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740,99742],{"class":169,"line":170},[167,99723,95292],{"class":512},[167,99725,523],{"class":731},[167,99727,94988],{"class":512},[167,99729,2418],{"class":184},[167,99731,2578],{"class":512},[167,99733,2723],{"class":184},[167,99735,94993],{"class":512},[167,99737,2287],{"class":184},[167,99739,2578],{"class":512},[167,99741,2544],{"class":184},[167,99743,873],{"class":512},[167,99745,99746],{"class":169,"line":191},[167,99747,99748],{"class":512},"aa.flatten()\n",[167,99750,99751],{"class":169,"line":205},[167,99752,95550],{"class":2268},[167,99754,99755],{"class":169,"line":219},[167,99756,99710],{"class":2268},[14,99758,99760],{"id":99759},"_54-使用resize","5.4 使用resize()",[19,99762,99763],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99765,99766],{},"通过resize方法可以改变数组的维度",[19,99768,99769],{},"#resize修改数组维度",[19,99771,99772],{},"#以元组的形式指定形状",[19,99774,99775],{},"#改变的是原数组",[26,99777,99779],{"className":723,"code":99778,"language":305,"meta":32,"style":32},"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",[34,99780,99781,99797,99817,99830,99834],{"__ignoreMap":32},[167,99782,99783,99785,99787,99789,99791,99793,99795],{"class":169,"line":170},[167,99784,2439],{"class":512},[167,99786,523],{"class":731},[167,99788,94988],{"class":512},[167,99790,2418],{"class":184},[167,99792,2578],{"class":512},[167,99794,2723],{"class":184},[167,99796,873],{"class":512},[167,99798,99799,99802,99804,99806,99808,99810,99812,99814],{"class":169,"line":191},[167,99800,99801],{"class":512},"a.shape",[167,99803,523],{"class":731},[167,99805,898],{"class":512},[167,99807,2287],{"class":184},[167,99809,2578],{"class":512},[167,99811,2544],{"class":184},[167,99813,2629],{"class":512},[167,99815,99816],{"class":2268},"#改变了原数组\n",[167,99818,99819,99821,99823,99826,99828],{"class":169,"line":205},[167,99820,2439],{"class":512},[167,99822,523],{"class":731},[167,99824,99825],{"class":512},"resize((",[167,99827,2698],{"class":184},[167,99829,32505],{"class":512},[167,99831,99832],{"class":169,"line":219},[167,99833,95550],{"class":2268},[167,99835,99836],{"class":169,"line":230},[167,99837,99710],{"class":2268},[26,99839,99841],{"className":723,"code":99840,"language":305,"meta":32,"style":32},"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",[34,99842,99843,99856,99860,99864,99869,99874,99879,99884,99889,99894],{"__ignoreMap":32},[167,99844,99845,99848,99850,99852,99854],{"class":169,"line":170},[167,99846,99847],{"class":512},"a.resize((",[167,99849,2544],{"class":184},[167,99851,2578],{"class":512},[167,99853,2287],{"class":184},[167,99855,32505],{"class":512},[167,99857,99858],{"class":169,"line":191},[167,99859,95550],{"class":2268},[167,99861,99862],{"class":169,"line":205},[167,99863,95914],{"class":177},[167,99865,99866],{"class":169,"line":219},[167,99867,99868],{"class":177},"array([[ 1,  2],\n",[167,99870,99871],{"class":169,"line":230},[167,99872,99873],{"class":177},"       [ 3,  4],\n",[167,99875,99876],{"class":169,"line":241},[167,99877,99878],{"class":177},"       [ 5,  6],\n",[167,99880,99881],{"class":169,"line":261},[167,99882,99883],{"class":177},"       [ 7,  8],\n",[167,99885,99886],{"class":169,"line":773},[167,99887,99888],{"class":177},"       [ 9, 10],\n",[167,99890,99891],{"class":169,"line":779},[167,99892,99893],{"class":177},"       [11, 12]])\n",[167,99895,99896],{"class":169,"line":785},[167,99897,95914],{"class":177},[14,99899,99901],{"id":99900},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99903,99904],{},"改变了原数组",[26,99906,99908],{"className":723,"code":99907,"language":305,"meta":32,"style":32},"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",[34,99909,99910,99926,99942,99946,99950,99954,99958],{"__ignoreMap":32},[167,99911,99912,99914,99916,99918,99920,99922,99924],{"class":169,"line":170},[167,99913,2439],{"class":512},[167,99915,523],{"class":731},[167,99917,94988],{"class":512},[167,99919,2418],{"class":184},[167,99921,2578],{"class":512},[167,99923,2723],{"class":184},[167,99925,873],{"class":512},[167,99927,99928,99930,99932,99934,99936,99938,99940],{"class":169,"line":191},[167,99929,99801],{"class":512},[167,99931,523],{"class":731},[167,99933,898],{"class":512},[167,99935,2287],{"class":184},[167,99937,2578],{"class":512},[167,99939,2544],{"class":184},[167,99941,873],{"class":512},[167,99943,99944],{"class":169,"line":205},[167,99945,95550],{"class":2268},[167,99947,99948],{"class":169,"line":219},[167,99949,95914],{"class":177},[167,99951,99952],{"class":169,"line":230},[167,99953,99172],{"class":177},[167,99955,99956],{"class":169,"line":241},[167,99957,99177],{"class":177},[167,99959,99960],{"class":169,"line":261},[167,99961,95914],{"class":177},[14,99963,99965],{"id":99964},"_56-重要比较","5.6 重要比较：",[19,99967,99968],{},[3528,99969],{"alt":32,"src":99970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99972,99973,99974,99976,99977,99979],{},"口诀：NumPy 函数要么用 ",[34,99975,97947],{},"，要么用 ",[34,99978,33501],{},"，创建结构用 shape，造数据用 size",[19,99981,99982],{},[3528,99983],{"alt":32,"src":99984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2113,99986,99987],{},"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":32,"searchDepth":191,"depth":191,"links":99989},[99990,99991,99992,99993,99994,99995],{"id":99511,"depth":191,"text":99512},{"id":99663,"depth":191,"text":99664},{"id":99713,"depth":191,"text":99714},{"id":99759,"depth":191,"text":99760},{"id":99900,"depth":191,"text":99901},{"id":99964,"depth":191,"text":99965},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99503,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100002,"title":100003,"body":100004,"description":25403,"extension":2140,"meta":101076,"navigation":740,"path":101077,"seo":101078,"stem":101079,"__hash__":101080},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100005,"toc":101070},[100006,100009,100013,100016,100019,100022,100087,100090,100130,100133,100215,100218,100223,100245,100247,100252,100257,100260,100263,100418,100421,100623,100627,100630,100633,100701,100703,100708,100711,100714,100794,100798,100801,100803,100876,100878,100883,100885,100965,100969,100972,100975,100978,100981,100984,100987,101067],[10,100007,100003],{"id":100008},"_6数组的拼接",[14,100010,100012],{"id":100011},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100014,100015],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100017,100018],{},"函数内部传两个数列构成的数列或者元组",[19,100020,100021],{},"①一维数组的拼接",[26,100023,100025],{"className":723,"code":100024,"language":305,"meta":32,"style":32},"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",[34,100026,100027,100047,100067,100072,100077,100082],{"__ignoreMap":32},[167,100028,100029,100031,100033,100035,100037,100039,100041,100043,100045],{"class":169,"line":170},[167,100030,2439],{"class":512},[167,100032,523],{"class":731},[167,100034,95010],{"class":512},[167,100036,2418],{"class":184},[167,100038,2578],{"class":512},[167,100040,2287],{"class":184},[167,100042,2578],{"class":512},[167,100044,2281],{"class":184},[167,100046,6689],{"class":512},[167,100048,100049,100051,100053,100055,100057,100059,100061,100063,100065],{"class":169,"line":191},[167,100050,2464],{"class":512},[167,100052,523],{"class":731},[167,100054,95010],{"class":512},[167,100056,2494],{"class":184},[167,100058,2578],{"class":512},[167,100060,2519],{"class":184},[167,100062,2578],{"class":512},[167,100064,2544],{"class":184},[167,100066,6689],{"class":512},[167,100068,100069],{"class":169,"line":205},[167,100070,100071],{"class":2268},"#调用concatenate进行数组拼接\n",[167,100073,100074],{"class":169,"line":219},[167,100075,100076],{"class":512},"np.concatenate((a,b))\n",[167,100078,100079],{"class":169,"line":230},[167,100080,100081],{"class":2268},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[167,100083,100084],{"class":169,"line":241},[167,100085,100086],{"class":2268},"#np.concatenate([a,b])\n",[19,100088,100089],{},"②一维多个数组拼接",[26,100091,100093],{"className":723,"code":100092,"language":305,"meta":32,"style":32},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[34,100094,100095,100100,100120,100125],{"__ignoreMap":32},[167,100096,100097],{"class":169,"line":170},[167,100098,100099],{"class":2268},"#也可以多个数组进行拼接\n",[167,100101,100102,100104,100106,100108,100110,100112,100114,100116,100118],{"class":169,"line":191},[167,100103,2489],{"class":512},[167,100105,523],{"class":731},[167,100107,95010],{"class":512},[167,100109,2646],{"class":184},[167,100111,2578],{"class":512},[167,100113,2672],{"class":184},[167,100115,2578],{"class":512},[167,100117,2723],{"class":184},[167,100119,6689],{"class":512},[167,100121,100122],{"class":169,"line":205},[167,100123,100124],{"class":512},"c\n",[167,100126,100127],{"class":169,"line":219},[167,100128,100129],{"class":512},"np.concatenate((a,b,c))\n",[19,100131,100132],{},"③二维数组拼接",[26,100134,100136],{"className":723,"code":100135,"language":305,"meta":32,"style":32},"#二维数组使用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",[34,100137,100138,100143,100167,100192,100197,100202],{"__ignoreMap":32},[167,100139,100140],{"class":169,"line":170},[167,100141,100142],{"class":2268},"#二维数组使用concatenate进行拼接\n",[167,100144,100145,100147,100149,100151,100153,100155,100157,100159,100161,100163,100165],{"class":169,"line":191},[167,100146,95292],{"class":512},[167,100148,523],{"class":731},[167,100150,94988],{"class":512},[167,100152,2418],{"class":184},[167,100154,2578],{"class":512},[167,100156,2723],{"class":184},[167,100158,94993],{"class":512},[167,100160,2281],{"class":184},[167,100162,2578],{"class":512},[167,100164,2494],{"class":184},[167,100166,873],{"class":512},[167,100168,100169,100172,100174,100176,100178,100180,100182,100184,100186,100188,100190],{"class":169,"line":205},[167,100170,100171],{"class":512},"bb",[167,100173,523],{"class":731},[167,100175,94988],{"class":512},[167,100177,2537],{"class":184},[167,100179,2578],{"class":512},[167,100181,2842],{"class":184},[167,100183,94993],{"class":512},[167,100185,2281],{"class":184},[167,100187,2578],{"class":512},[167,100189,2494],{"class":184},[167,100191,873],{"class":512},[167,100193,100194],{"class":169,"line":219},[167,100195,100196],{"class":2268},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[167,100198,100199],{"class":169,"line":230},[167,100200,100201],{"class":2268},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[167,100203,100204,100207,100209,100211,100213],{"class":169,"line":241},[167,100205,100206],{"class":512},"np.concatenate((aa,bb),",[167,100208,49514],{"class":7246},[167,100210,523],{"class":731},[167,100212,1154],{"class":184},[167,100214,873],{"class":512},[19,100216,100217],{},"结果：",[19,100219,100220],{},[3528,100221],{"alt":32,"src":100222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,100224,100226],{"className":723,"code":100225,"language":305,"meta":32,"style":32},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[34,100227,100228,100233],{"__ignoreMap":32},[167,100229,100230],{"class":169,"line":170},[167,100231,100232],{"class":2268},"#指定axis为1进行拼接\n",[167,100234,100235,100237,100239,100241,100243],{"class":169,"line":191},[167,100236,100206],{"class":512},[167,100238,49514],{"class":7246},[167,100240,523],{"class":731},[167,100242,2418],{"class":184},[167,100244,873],{"class":512},[19,100246,100217],{},[19,100248,100249],{},[3528,100250],{"alt":32,"src":100251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100253,100254],{},[2354,100255,100256],{},"二维数组总结：0竖着方向，1横着方向",[19,100258,100259],{},"④三维数组拼接",[19,100261,100262],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,100264,100266],{"className":723,"code":100265,"language":305,"meta":32,"style":32},"#两个三行六列\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",[34,100267,100268,100273,100301,100331,100336,100353,100358,100363,100368,100385,100390,100395,100400,100413],{"__ignoreMap":32},[167,100269,100270],{"class":169,"line":170},[167,100271,100272],{"class":2268},"#两个三行六列\n",[167,100274,100275,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299],{"class":169,"line":191},[167,100276,97507],{"class":512},[167,100278,523],{"class":731},[167,100280,94988],{"class":512},[167,100282,2418],{"class":184},[167,100284,2578],{"class":512},[167,100286,2525],{"class":184},[167,100288,94993],{"class":512},[167,100290,2287],{"class":184},[167,100292,2578],{"class":512},[167,100294,2281],{"class":184},[167,100296,2578],{"class":512},[167,100298,2544],{"class":184},[167,100300,873],{"class":512},[167,100302,100303,100306,100308,100310,100312,100314,100317,100319,100321,100323,100325,100327,100329],{"class":169,"line":205},[167,100304,100305],{"class":512},"bbb",[167,100307,523],{"class":731},[167,100309,94988],{"class":512},[167,100311,2537],{"class":184},[167,100313,2578],{"class":512},[167,100315,100316],{"class":184},"137",[167,100318,94993],{"class":512},[167,100320,2287],{"class":184},[167,100322,2578],{"class":512},[167,100324,2281],{"class":184},[167,100326,2578],{"class":512},[167,100328,2544],{"class":184},[167,100330,873],{"class":512},[167,100332,100333],{"class":169,"line":219},[167,100334,100335],{"class":2268},"#axis=0\n",[167,100337,100338,100340,100342,100345,100347,100349,100351],{"class":169,"line":230},[167,100339,2895],{"class":512},[167,100341,523],{"class":731},[167,100343,100344],{"class":512},"np.concatenate((aaa,bbb),",[167,100346,49514],{"class":7246},[167,100348,523],{"class":731},[167,100350,1154],{"class":184},[167,100352,873],{"class":512},[167,100354,100355],{"class":169,"line":241},[167,100356,100357],{"class":512},"s.shape\n",[167,100359,100360],{"class":169,"line":261},[167,100361,100362],{"class":2268},"#输出：(4,3,6)\n",[167,100364,100365],{"class":169,"line":773},[167,100366,100367],{"class":2268},"#axis=1\n",[167,100369,100370,100373,100375,100377,100379,100381,100383],{"class":169,"line":779},[167,100371,100372],{"class":512},"ss",[167,100374,523],{"class":731},[167,100376,100344],{"class":512},[167,100378,49514],{"class":7246},[167,100380,523],{"class":731},[167,100382,2418],{"class":184},[167,100384,873],{"class":512},[167,100386,100387],{"class":169,"line":785},[167,100388,100389],{"class":512},"ss.shape\n",[167,100391,100392],{"class":169,"line":790},[167,100393,100394],{"class":2268},"#输出：(2,6,6)\n",[167,100396,100397],{"class":169,"line":796},[167,100398,100399],{"class":2268},"#axis=2\n",[167,100401,100402,100404,100406,100408,100410],{"class":169,"line":802},[167,100403,100344],{"class":512},[167,100405,49514],{"class":7246},[167,100407,523],{"class":731},[167,100409,2287],{"class":184},[167,100411,100412],{"class":512},").shape\n",[167,100414,100415],{"class":169,"line":808},[167,100416,100417],{"class":2268},"#输出：（2，3，12）\n",[19,100419,100420],{},"⑤四维数组拼接",[26,100422,100424],{"className":723,"code":100423,"language":305,"meta":32,"style":32},"#两个三行六列\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",[34,100425,100426,100430,100458,100486,100511,100537,100541,100554,100559,100563,100575,100580,100584,100596,100601,100606,100618],{"__ignoreMap":32},[167,100427,100428],{"class":169,"line":170},[167,100429,100272],{"class":2268},[167,100431,100432,100434,100436,100438,100440,100442,100444,100446,100448,100450,100452,100454,100456],{"class":169,"line":191},[167,100433,97507],{"class":512},[167,100435,523],{"class":731},[167,100437,94988],{"class":512},[167,100439,2418],{"class":184},[167,100441,2578],{"class":512},[167,100443,2525],{"class":184},[167,100445,94993],{"class":512},[167,100447,2287],{"class":184},[167,100449,2578],{"class":512},[167,100451,2281],{"class":184},[167,100453,2578],{"class":512},[167,100455,2544],{"class":184},[167,100457,873],{"class":512},[167,100459,100460,100462,100464,100466,100468,100470,100472,100474,100476,100478,100480,100482,100484],{"class":169,"line":205},[167,100461,100305],{"class":512},[167,100463,523],{"class":731},[167,100465,94988],{"class":512},[167,100467,2537],{"class":184},[167,100469,2578],{"class":512},[167,100471,100316],{"class":184},[167,100473,94993],{"class":512},[167,100475,2287],{"class":184},[167,100477,2578],{"class":512},[167,100479,2281],{"class":184},[167,100481,2578],{"class":512},[167,100483,2544],{"class":184},[167,100485,873],{"class":512},[167,100487,100488,100491,100493,100495,100497,100499,100501,100503,100505,100507,100509],{"class":169,"line":219},[167,100489,100490],{"class":512},"aaaa",[167,100492,523],{"class":731},[167,100494,99654],{"class":512},[167,100496,2287],{"class":184},[167,100498,2578],{"class":512},[167,100500,2281],{"class":184},[167,100502,2578],{"class":512},[167,100504,2281],{"class":184},[167,100506,2578],{"class":512},[167,100508,2287],{"class":184},[167,100510,873],{"class":512},[167,100512,100513,100516,100518,100521,100523,100525,100527,100529,100531,100533,100535],{"class":169,"line":230},[167,100514,100515],{"class":512},"bbbb",[167,100517,523],{"class":731},[167,100519,100520],{"class":512},"bbb.reshape(",[167,100522,2287],{"class":184},[167,100524,2578],{"class":512},[167,100526,2281],{"class":184},[167,100528,2578],{"class":512},[167,100530,2281],{"class":184},[167,100532,2578],{"class":512},[167,100534,2287],{"class":184},[167,100536,873],{"class":512},[167,100538,100539],{"class":169,"line":241},[167,100540,100335],{"class":2268},[167,100542,100543,100546,100548,100550,100552],{"class":169,"line":261},[167,100544,100545],{"class":512},"np.concatenate((aaaa,bbbb),",[167,100547,49514],{"class":7246},[167,100549,523],{"class":731},[167,100551,1154],{"class":184},[167,100553,100412],{"class":512},[167,100555,100556],{"class":169,"line":773},[167,100557,100558],{"class":2268},"#结果：（4，3，3，2）\n",[167,100560,100561],{"class":169,"line":779},[167,100562,100367],{"class":2268},[167,100564,100565,100567,100569,100571,100573],{"class":169,"line":785},[167,100566,100545],{"class":512},[167,100568,49514],{"class":7246},[167,100570,523],{"class":731},[167,100572,2418],{"class":184},[167,100574,100412],{"class":512},[167,100576,100577],{"class":169,"line":790},[167,100578,100579],{"class":2268},"#结果：（2，6，3，2）\n",[167,100581,100582],{"class":169,"line":796},[167,100583,100399],{"class":2268},[167,100585,100586,100588,100590,100592,100594],{"class":169,"line":802},[167,100587,100545],{"class":512},[167,100589,49514],{"class":7246},[167,100591,523],{"class":731},[167,100593,2287],{"class":184},[167,100595,100412],{"class":512},[167,100597,100598],{"class":169,"line":808},[167,100599,100600],{"class":2268},"#结果：（2，3，6，2）\n",[167,100602,100603],{"class":169,"line":814},[167,100604,100605],{"class":2268},"#axis=3\n",[167,100607,100608,100610,100612,100614,100616],{"class":169,"line":820},[167,100609,100545],{"class":512},[167,100611,49514],{"class":7246},[167,100613,523],{"class":731},[167,100615,2281],{"class":184},[167,100617,100412],{"class":512},[167,100619,100620],{"class":169,"line":826},[167,100621,100622],{"class":2268},"#结果：（2，3，3，4）\n",[14,100624,100626],{"id":100625},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100628,100629],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100631,100632],{},"①二维数组",[26,100634,100636],{"className":723,"code":100635,"language":305,"meta":32,"style":32},"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",[34,100637,100638,100662,100686,100691,100696],{"__ignoreMap":32},[167,100639,100640,100642,100644,100646,100648,100650,100652,100654,100656,100658,100660],{"class":169,"line":170},[167,100641,95292],{"class":512},[167,100643,523],{"class":731},[167,100645,94988],{"class":512},[167,100647,2418],{"class":184},[167,100649,2578],{"class":512},[167,100651,2723],{"class":184},[167,100653,94993],{"class":512},[167,100655,2281],{"class":184},[167,100657,2578],{"class":512},[167,100659,2494],{"class":184},[167,100661,873],{"class":512},[167,100663,100664,100666,100668,100670,100672,100674,100676,100678,100680,100682,100684],{"class":169,"line":191},[167,100665,100171],{"class":512},[167,100667,523],{"class":731},[167,100669,94988],{"class":512},[167,100671,2537],{"class":184},[167,100673,2578],{"class":512},[167,100675,2842],{"class":184},[167,100677,94993],{"class":512},[167,100679,2281],{"class":184},[167,100681,2578],{"class":512},[167,100683,2494],{"class":184},[167,100685,873],{"class":512},[167,100687,100688],{"class":169,"line":205},[167,100689,100690],{"class":512},"np.hstack((aa,bb))\n",[167,100692,100693],{"class":169,"line":219},[167,100694,100695],{"class":2268},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[167,100697,100698],{"class":169,"line":230},[167,100699,100700],{"class":2268},"#np.hstack([aa,bb])\n",[19,100702,100217],{},[19,100704,100705],{},[3528,100706],{"alt":32,"src":100707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100709,100710],{},"等效于concatenate()函数中axis=1时的情况",[19,100712,100713],{},"②三维数组",[26,100715,100717],{"className":723,"code":100716,"language":305,"meta":32,"style":32},"#两个三行六列\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",[34,100718,100719,100723,100751,100779,100784,100789],{"__ignoreMap":32},[167,100720,100721],{"class":169,"line":170},[167,100722,100272],{"class":2268},[167,100724,100725,100727,100729,100731,100733,100735,100737,100739,100741,100743,100745,100747,100749],{"class":169,"line":191},[167,100726,97507],{"class":512},[167,100728,523],{"class":731},[167,100730,94988],{"class":512},[167,100732,2418],{"class":184},[167,100734,2578],{"class":512},[167,100736,2525],{"class":184},[167,100738,94993],{"class":512},[167,100740,2287],{"class":184},[167,100742,2578],{"class":512},[167,100744,2281],{"class":184},[167,100746,2578],{"class":512},[167,100748,2544],{"class":184},[167,100750,873],{"class":512},[167,100752,100753,100755,100757,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777],{"class":169,"line":205},[167,100754,100305],{"class":512},[167,100756,523],{"class":731},[167,100758,94988],{"class":512},[167,100760,2537],{"class":184},[167,100762,2578],{"class":512},[167,100764,100316],{"class":184},[167,100766,94993],{"class":512},[167,100768,2287],{"class":184},[167,100770,2578],{"class":512},[167,100772,2281],{"class":184},[167,100774,2578],{"class":512},[167,100776,2544],{"class":184},[167,100778,873],{"class":512},[167,100780,100781],{"class":169,"line":219},[167,100782,100783],{"class":2268},"#使用hstack\n",[167,100785,100786],{"class":169,"line":230},[167,100787,100788],{"class":512},"np.hstack((aaa,bbb)).shape\n",[167,100790,100791],{"class":169,"line":241},[167,100792,100793],{"class":2268},"#输出：（2，6，6）\n",[14,100795,100797],{"id":100796},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100799,100800],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100802,100632],{},[26,100804,100806],{"className":723,"code":100805,"language":305,"meta":32,"style":32},"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",[34,100807,100808,100832,100856,100861,100866,100871],{"__ignoreMap":32},[167,100809,100810,100812,100814,100816,100818,100820,100822,100824,100826,100828,100830],{"class":169,"line":170},[167,100811,95292],{"class":512},[167,100813,523],{"class":731},[167,100815,94988],{"class":512},[167,100817,2418],{"class":184},[167,100819,2578],{"class":512},[167,100821,2723],{"class":184},[167,100823,94993],{"class":512},[167,100825,2281],{"class":184},[167,100827,2578],{"class":512},[167,100829,2494],{"class":184},[167,100831,873],{"class":512},[167,100833,100834,100836,100838,100840,100842,100844,100846,100848,100850,100852,100854],{"class":169,"line":191},[167,100835,100171],{"class":512},[167,100837,523],{"class":731},[167,100839,94988],{"class":512},[167,100841,2537],{"class":184},[167,100843,2578],{"class":512},[167,100845,2842],{"class":184},[167,100847,94993],{"class":512},[167,100849,2281],{"class":184},[167,100851,2578],{"class":512},[167,100853,2494],{"class":184},[167,100855,873],{"class":512},[167,100857,100858],{"class":169,"line":205},[167,100859,100860],{"class":2268},"#vstack 垂直方向进行堆叠\n",[167,100862,100863],{"class":169,"line":219},[167,100864,100865],{"class":512},"np.vstack((aa,bb))\n",[167,100867,100868],{"class":169,"line":230},[167,100869,100870],{"class":2268},"#与hstack传的参数类似，等价于：\n",[167,100872,100873],{"class":169,"line":241},[167,100874,100875],{"class":512},"np.vstack([aa,bb])\n",[19,100877,100217],{},[19,100879,100880],{},[3528,100881],{"alt":32,"src":100882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100884,100713],{},[26,100886,100888],{"className":723,"code":100887,"language":305,"meta":32,"style":32},"#两个三行六列\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",[34,100889,100890,100894,100922,100950,100955,100960],{"__ignoreMap":32},[167,100891,100892],{"class":169,"line":170},[167,100893,100272],{"class":2268},[167,100895,100896,100898,100900,100902,100904,100906,100908,100910,100912,100914,100916,100918,100920],{"class":169,"line":191},[167,100897,97507],{"class":512},[167,100899,523],{"class":731},[167,100901,94988],{"class":512},[167,100903,2418],{"class":184},[167,100905,2578],{"class":512},[167,100907,2525],{"class":184},[167,100909,94993],{"class":512},[167,100911,2287],{"class":184},[167,100913,2578],{"class":512},[167,100915,2281],{"class":184},[167,100917,2578],{"class":512},[167,100919,2544],{"class":184},[167,100921,873],{"class":512},[167,100923,100924,100926,100928,100930,100932,100934,100936,100938,100940,100942,100944,100946,100948],{"class":169,"line":205},[167,100925,100305],{"class":512},[167,100927,523],{"class":731},[167,100929,94988],{"class":512},[167,100931,2537],{"class":184},[167,100933,2578],{"class":512},[167,100935,100316],{"class":184},[167,100937,94993],{"class":512},[167,100939,2287],{"class":184},[167,100941,2578],{"class":512},[167,100943,2281],{"class":184},[167,100945,2578],{"class":512},[167,100947,2544],{"class":184},[167,100949,873],{"class":512},[167,100951,100952],{"class":169,"line":219},[167,100953,100954],{"class":2268},"#使用vstack\n",[167,100956,100957],{"class":169,"line":230},[167,100958,100959],{"class":512},"np.vstack((aaa,bbb)).shape\n",[167,100961,100962],{"class":169,"line":241},[167,100963,100964],{"class":2268},"#输出：（4，3，6）\n",[14,100966,100968],{"id":100967},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100970,100971],{},"该方法是三维数组特有的方法",[19,100973,100974],{},"也就是说",[19,100976,100977],{},"一维数组拼接方法用：concatenate()",[19,100979,100980],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100982,100983],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100985,100986],{},"四维数组及多维数组只能用concatenate进行拼接",[26,100988,100990],{"className":723,"code":100989,"language":305,"meta":32,"style":32},"#两个三行六列\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",[34,100991,100992,100996,101024,101052,101057,101062],{"__ignoreMap":32},[167,100993,100994],{"class":169,"line":170},[167,100995,100272],{"class":2268},[167,100997,100998,101000,101002,101004,101006,101008,101010,101012,101014,101016,101018,101020,101022],{"class":169,"line":191},[167,100999,97507],{"class":512},[167,101001,523],{"class":731},[167,101003,94988],{"class":512},[167,101005,2418],{"class":184},[167,101007,2578],{"class":512},[167,101009,2525],{"class":184},[167,101011,94993],{"class":512},[167,101013,2287],{"class":184},[167,101015,2578],{"class":512},[167,101017,2281],{"class":184},[167,101019,2578],{"class":512},[167,101021,2544],{"class":184},[167,101023,873],{"class":512},[167,101025,101026,101028,101030,101032,101034,101036,101038,101040,101042,101044,101046,101048,101050],{"class":169,"line":205},[167,101027,100305],{"class":512},[167,101029,523],{"class":731},[167,101031,94988],{"class":512},[167,101033,2537],{"class":184},[167,101035,2578],{"class":512},[167,101037,100316],{"class":184},[167,101039,94993],{"class":512},[167,101041,2287],{"class":184},[167,101043,2578],{"class":512},[167,101045,2281],{"class":184},[167,101047,2578],{"class":512},[167,101049,2544],{"class":184},[167,101051,873],{"class":512},[167,101053,101054],{"class":169,"line":219},[167,101055,101056],{"class":2268},"#使用dstack\n",[167,101058,101059],{"class":169,"line":230},[167,101060,101061],{"class":512},"np.dstack((aaa,bbb)).shape\n",[167,101063,101064],{"class":169,"line":241},[167,101065,101066],{"class":2268},"#结果：（2，3，12）\n",[2113,101068,101069],{},"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":32,"searchDepth":191,"depth":191,"links":101071},[101072,101073,101074,101075],{"id":100011,"depth":191,"text":100012},{"id":100625,"depth":191,"text":100626},{"id":100796,"depth":191,"text":100797},{"id":100967,"depth":191,"text":100968},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100003,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101082,"title":101083,"body":101084,"description":25403,"extension":2140,"meta":101359,"navigation":740,"path":101360,"seo":101361,"stem":101362,"__hash__":101363},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101085,"toc":101357},[101086,101089,101092,101186,101189,101192,101195,101198,101201,101204,101207,101210,101354],[10,101087,101083],{"id":101088},"_7数组转置",[19,101090,101091],{},"使用transpose()函数",[26,101093,101095],{"className":723,"code":101094,"language":305,"meta":32,"style":32},"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",[34,101096,101097,101107,101131,101136,101141,101146,101151,101159,101163,101167,101172,101177,101182],{"__ignoreMap":32},[167,101098,101099,101101,101103,101105],{"class":169,"line":170},[167,101100,732],{"class":731},[167,101102,33385],{"class":512},[167,101104,33388],{"class":731},[167,101106,33391],{"class":512},[167,101108,101109,101111,101113,101115,101117,101119,101121,101123,101125,101127,101129],{"class":169,"line":191},[167,101110,2439],{"class":512},[167,101112,523],{"class":731},[167,101114,33722],{"class":512},[167,101116,2418],{"class":184},[167,101118,2578],{"class":512},[167,101120,2723],{"class":184},[167,101122,94993],{"class":512},[167,101124,2494],{"class":184},[167,101126,2578],{"class":512},[167,101128,2281],{"class":184},[167,101130,873],{"class":512},[167,101132,101133],{"class":169,"line":205},[167,101134,101135],{"class":2268},"#二维数组转置\n",[167,101137,101138],{"class":169,"line":219},[167,101139,101140],{"class":2268},"#调用transpose()函数\n",[167,101142,101143],{"class":169,"line":230},[167,101144,101145],{"class":512},"a.transpose()\n",[167,101147,101148],{"class":169,"line":241},[167,101149,101150],{"class":2268},"#对于二维数组也可以采用.T来实现\n",[167,101152,101153,101156],{"class":169,"line":261},[167,101154,101155],{"class":512},"a.T",[167,101157,101158],{"class":2268},"#与上述代码一样\n",[167,101160,101161],{"class":169,"line":773},[167,101162,95550],{"class":2268},[167,101164,101165],{"class":169,"line":779},[167,101166,95914],{"class":177},[167,101168,101169],{"class":169,"line":785},[167,101170,101171],{"class":177},"array([[ 1,  4,  7, 10],\n",[167,101173,101174],{"class":169,"line":790},[167,101175,101176],{"class":177},"       [ 2,  5,  8, 11],\n",[167,101178,101179],{"class":169,"line":796},[167,101180,101181],{"class":177},"       [ 3,  6,  9, 12]])\n",[167,101183,101184],{"class":169,"line":802},[167,101185,95914],{"class":177},[19,101187,101188],{},"也可以使用np.transpose()的形式",[19,101190,101191],{},"#多维数组进行转置 np.transpose()",[19,101193,101194],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101196,101197],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101199,101200],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101202,101203],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101205,101206],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101208,101209],{},"四维及以上的数组也是一样的道理",[26,101211,101213],{"className":723,"code":101212,"language":305,"meta":32,"style":32},"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",[34,101214,101215,101243,101248,101253,101258,101276,101281,101313,101318,101323,101328,101349],{"__ignoreMap":32},[167,101216,101217,101219,101221,101223,101225,101227,101229,101231,101233,101235,101237,101239,101241],{"class":169,"line":170},[167,101218,3020],{"class":512},[167,101220,523],{"class":731},[167,101222,94988],{"class":512},[167,101224,2418],{"class":184},[167,101226,2578],{"class":512},[167,101228,2525],{"class":184},[167,101230,94993],{"class":512},[167,101232,2281],{"class":184},[167,101234,2578],{"class":512},[167,101236,2544],{"class":184},[167,101238,2578],{"class":512},[167,101240,2287],{"class":184},[167,101242,873],{"class":512},[167,101244,101245],{"class":169,"line":191},[167,101246,101247],{"class":512},"x.shape\n",[167,101249,101250],{"class":169,"line":205},[167,101251,101252],{"class":2268},"#结果：（3,6,2）\n",[167,101254,101255],{"class":169,"line":219},[167,101256,101257],{"class":2268},"#使用np.transpose()进行转置 变为(2,6,3)\n",[167,101259,101260,101263,101265,101267,101269,101271,101273],{"class":169,"line":230},[167,101261,101262],{"class":512},"np.transpose(x,(",[167,101264,2287],{"class":184},[167,101266,2578],{"class":512},[167,101268,2418],{"class":184},[167,101270,2578],{"class":512},[167,101272,1154],{"class":184},[167,101274,101275],{"class":512},")).shape\n",[167,101277,101278],{"class":169,"line":241},[167,101279,101280],{"class":2268},"#结果：(2,6,3)\n",[167,101282,101283,101285,101287,101289,101291,101293,101295,101297,101299,101301,101303,101305,101307,101309,101311],{"class":169,"line":261},[167,101284,100490],{"class":512},[167,101286,523],{"class":731},[167,101288,94988],{"class":512},[167,101290,2418],{"class":184},[167,101292,2578],{"class":512},[167,101294,2525],{"class":184},[167,101296,94993],{"class":512},[167,101298,2281],{"class":184},[167,101300,2578],{"class":512},[167,101302,2287],{"class":184},[167,101304,2578],{"class":512},[167,101306,2418],{"class":184},[167,101308,2578],{"class":512},[167,101310,2544],{"class":184},[167,101312,873],{"class":512},[167,101314,101315],{"class":169,"line":773},[167,101316,101317],{"class":512},"aaaa.shape\n",[167,101319,101320],{"class":169,"line":779},[167,101321,101322],{"class":2268},"#结果：（3，2，1，6）\n",[167,101324,101325],{"class":169,"line":785},[167,101326,101327],{"class":2268},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[167,101329,101330,101333,101335,101337,101339,101341,101343,101345,101347],{"class":169,"line":790},[167,101331,101332],{"class":512},"np.transpose(aaaa,(",[167,101334,2418],{"class":184},[167,101336,2578],{"class":512},[167,101338,2287],{"class":184},[167,101340,2578],{"class":512},[167,101342,1154],{"class":184},[167,101344,2578],{"class":512},[167,101346,2281],{"class":184},[167,101348,101275],{"class":512},[167,101350,101351],{"class":169,"line":796},[167,101352,101353],{"class":2268},"#结果：(2,1,3,6)\n",[2113,101355,101356],{},"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":32,"searchDepth":191,"depth":191,"links":101358},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101083,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101365,"title":101366,"body":101367,"description":25403,"extension":2140,"meta":102101,"navigation":740,"path":102102,"seo":102103,"stem":102104,"__hash__":102105},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101368,"toc":102099},[101369,101372,101375,101378,101381,101384,101387,101390,101393,101502,101505,101508,102096],[10,101370,101366],{"id":101371},"_8数组分割",[19,101373,101374],{},"split分割",[19,101376,101377],{},"numpy.split(ary,indics_or_sections,axis)",[19,101379,101380],{},"解释：",[19,101382,101383],{},"ary:被分割的数组",[19,101385,101386],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101388,101389],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101391,101392],{},"①一维数组的分割",[26,101394,101396],{"className":723,"code":101395,"language":305,"meta":32,"style":32},"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",[34,101397,101398,101414,101419,101428,101432,101437,101445,101449,101454,101459,101472,101476,101481,101493,101497],{"__ignoreMap":32},[167,101399,101400,101402,101404,101406,101408,101410,101412],{"class":169,"line":170},[167,101401,2439],{"class":512},[167,101403,523],{"class":731},[167,101405,94988],{"class":512},[167,101407,2418],{"class":184},[167,101409,2578],{"class":512},[167,101411,2620],{"class":184},[167,101413,873],{"class":512},[167,101415,101416],{"class":169,"line":191},[167,101417,101418],{"class":2268},"#如果传入整数，必须能够平分，否则会报错\n",[167,101420,101421,101424,101426],{"class":169,"line":205},[167,101422,101423],{"class":512},"np.split(a,",[167,101425,2287],{"class":184},[167,101427,873],{"class":512},[167,101429,101430],{"class":169,"line":219},[167,101431,95550],{"class":2268},[167,101433,101434],{"class":169,"line":230},[167,101435,101436],{"class":2268},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[167,101438,101439,101441,101443],{"class":169,"line":241},[167,101440,101423],{"class":512},[167,101442,2494],{"class":184},[167,101444,873],{"class":512},[167,101446,101447],{"class":169,"line":261},[167,101448,95550],{"class":2268},[167,101450,101451],{"class":169,"line":773},[167,101452,101453],{"class":2268},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[167,101455,101456],{"class":169,"line":779},[167,101457,101458],{"class":2268},"#传入数组\n",[167,101460,101461,101464,101466,101468,101470],{"class":169,"line":785},[167,101462,101463],{"class":512},"np.split(a,[",[167,101465,2281],{"class":184},[167,101467,2578],{"class":512},[167,101469,2519],{"class":184},[167,101471,6689],{"class":512},[167,101473,101474],{"class":169,"line":790},[167,101475,95550],{"class":2268},[167,101477,101478],{"class":169,"line":796},[167,101479,101480],{"class":2268},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[167,101482,101483,101485,101487,101489,101491],{"class":169,"line":802},[167,101484,101463],{"class":512},[167,101486,2519],{"class":184},[167,101488,2578],{"class":512},[167,101490,2569],{"class":184},[167,101492,6689],{"class":512},[167,101494,101495],{"class":169,"line":808},[167,101496,95550],{"class":2268},[167,101498,101499],{"class":169,"line":814},[167,101500,101501],{"class":2268},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101503,101504],{},"②二维数组的分割",[19,101506,101507],{},"使用split()",[26,101509,101511],{"className":723,"code":101510,"language":305,"meta":32,"style":32},"#二维数组分割\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",[34,101512,101513,101518,101542,101547,101556,101560,101564,101569,101574,101579,101584,101589,101594,101599,101603,101616,101620,101624,101628,101632,101636,101641,101646,101651,101655,101660,101676,101680,101684,101689,101694,101699,101704,101709,101714,101719,101724,101729,101734,101739,101744,101749,101754,101759,101764,101769,101774,101778,101782,101802,101806,101810,101815,101820,101825,101830,101835,101840,101845,101850,101855,101860,101865,101870,101875,101880,101885,101890,101895,101900,101904,101909,101918,101922,101926,101930,101934,101938,101942,101946,101950,101954,101963,101967,101971,101975,101979,101983,101987,101991,101995,101999,102003,102007,102011,102015,102019,102023,102027,102031,102035,102039,102043,102047,102060,102064,102068,102072,102076,102080,102084,102088,102092],{"__ignoreMap":32},[167,101514,101515],{"class":169,"line":170},[167,101516,101517],{"class":2268},"#二维数组分割\n",[167,101519,101520,101522,101524,101526,101528,101530,101532,101534,101536,101538,101540],{"class":169,"line":191},[167,101521,95292],{"class":512},[167,101523,523],{"class":731},[167,101525,94988],{"class":512},[167,101527,2418],{"class":184},[167,101529,2578],{"class":512},[167,101531,2525],{"class":184},[167,101533,94993],{"class":512},[167,101535,2544],{"class":184},[167,101537,2578],{"class":512},[167,101539,2544],{"class":184},[167,101541,873],{"class":512},[167,101543,101544],{"class":169,"line":205},[167,101545,101546],{"class":2268},"#默认axis=0  传入整数平均分,按行来的\n",[167,101548,101549,101552,101554],{"class":169,"line":219},[167,101550,101551],{"class":512},"np.split(aa,",[167,101553,2281],{"class":184},[167,101555,873],{"class":512},[167,101557,101558],{"class":169,"line":230},[167,101559,97748],{"class":2268},[167,101561,101562],{"class":169,"line":241},[167,101563,95914],{"class":177},[167,101565,101566],{"class":169,"line":261},[167,101567,101568],{"class":177},"[array([[ 1,  2,  3,  4,  5,  6],\n",[167,101570,101571],{"class":169,"line":773},[167,101572,101573],{"class":177},"        [ 7,  8,  9, 10, 11, 12]]),\n",[167,101575,101576],{"class":169,"line":779},[167,101577,101578],{"class":177}," array([[13, 14, 15, 16, 17, 18],\n",[167,101580,101581],{"class":169,"line":785},[167,101582,101583],{"class":177},"        [19, 20, 21, 22, 23, 24]]),\n",[167,101585,101586],{"class":169,"line":790},[167,101587,101588],{"class":177}," array([[25, 26, 27, 28, 29, 30],\n",[167,101590,101591],{"class":169,"line":796},[167,101592,101593],{"class":177},"        [31, 32, 33, 34, 35, 36]])]\n",[167,101595,101596],{"class":169,"line":802},[167,101597,101598],{"class":177}," '''\n",[167,101600,101601],{"class":169,"line":808},[167,101602,101458],{"class":2268},[167,101604,101605,101608,101610,101612,101614],{"class":169,"line":814},[167,101606,101607],{"class":512},"np.split(aa,[",[167,101609,2287],{"class":184},[167,101611,2578],{"class":512},[167,101613,2519],{"class":184},[167,101615,6689],{"class":512},[167,101617,101618],{"class":169,"line":820},[167,101619,97748],{"class":2268},[167,101621,101622],{"class":169,"line":826},[167,101623,95914],{"class":177},[167,101625,101626],{"class":169,"line":832},[167,101627,101568],{"class":177},[167,101629,101630],{"class":169,"line":837},[167,101631,101573],{"class":177},[167,101633,101634],{"class":169,"line":842},[167,101635,101578],{"class":177},[167,101637,101638],{"class":169,"line":860},[167,101639,101640],{"class":177},"        [19, 20, 21, 22, 23, 24],\n",[167,101642,101643],{"class":169,"line":876},[167,101644,101645],{"class":177},"        [25, 26, 27, 28, 29, 30]]),\n",[167,101647,101648],{"class":169,"line":887},[167,101649,101650],{"class":177}," array([[31, 32, 33, 34, 35, 36]])]\n",[167,101652,101653],{"class":169,"line":892},[167,101654,95914],{"class":177},[167,101656,101657],{"class":169,"line":907},[167,101658,101659],{"class":2268},"#axis=1 按照列来分\n",[167,101661,101662,101664,101666,101668,101670,101672,101674],{"class":169,"line":920},[167,101663,101551],{"class":512},[167,101665,2281],{"class":184},[167,101667,2578],{"class":512},[167,101669,49514],{"class":7246},[167,101671,523],{"class":731},[167,101673,2418],{"class":184},[167,101675,873],{"class":512},[167,101677,101678],{"class":169,"line":933},[167,101679,97748],{"class":2268},[167,101681,101682],{"class":169,"line":946},[167,101683,95914],{"class":177},[167,101685,101686],{"class":169,"line":959},[167,101687,101688],{"class":177},"[array([[ 1,  2],\n",[167,101690,101691],{"class":169,"line":964},[167,101692,101693],{"class":177},"        [ 7,  8],\n",[167,101695,101696],{"class":169,"line":987},[167,101697,101698],{"class":177},"        [13, 14],\n",[167,101700,101701],{"class":169,"line":993},[167,101702,101703],{"class":177},"        [19, 20],\n",[167,101705,101706],{"class":169,"line":998},[167,101707,101708],{"class":177},"        [25, 26],\n",[167,101710,101711],{"class":169,"line":1010},[167,101712,101713],{"class":177},"        [31, 32]]),\n",[167,101715,101716],{"class":169,"line":1022},[167,101717,101718],{"class":177}," array([[ 3,  4],\n",[167,101720,101721],{"class":169,"line":1027},[167,101722,101723],{"class":177},"        [ 9, 10],\n",[167,101725,101726],{"class":169,"line":1032},[167,101727,101728],{"class":177},"        [15, 16],\n",[167,101730,101731],{"class":169,"line":1049},[167,101732,101733],{"class":177},"        [21, 22],\n",[167,101735,101736],{"class":169,"line":10005},[167,101737,101738],{"class":177},"        [27, 28],\n",[167,101740,101741],{"class":169,"line":10011},[167,101742,101743],{"class":177},"        [33, 34]]),\n",[167,101745,101746],{"class":169,"line":10038},[167,101747,101748],{"class":177}," array([[ 5,  6],\n",[167,101750,101751],{"class":169,"line":10043},[167,101752,101753],{"class":177},"        [11, 12],\n",[167,101755,101756],{"class":169,"line":10049},[167,101757,101758],{"class":177},"        [17, 18],\n",[167,101760,101761],{"class":169,"line":10061},[167,101762,101763],{"class":177},"        [23, 24],\n",[167,101765,101766],{"class":169,"line":10073},[167,101767,101768],{"class":177},"        [29, 30],\n",[167,101770,101771],{"class":169,"line":10085},[167,101772,101773],{"class":177},"        [35, 36]])]\n",[167,101775,101776],{"class":169,"line":11744},[167,101777,101598],{"class":177},[167,101779,101780],{"class":169,"line":11769},[167,101781,101458],{"class":2268},[167,101783,101784,101786,101788,101790,101792,101794,101796,101798,101800],{"class":169,"line":11792},[167,101785,101607],{"class":512},[167,101787,2418],{"class":184},[167,101789,2578],{"class":512},[167,101791,2287],{"class":184},[167,101793,43609],{"class":512},[167,101795,49514],{"class":7246},[167,101797,523],{"class":731},[167,101799,2418],{"class":184},[167,101801,873],{"class":512},[167,101803,101804],{"class":169,"line":11816},[167,101805,95550],{"class":2268},[167,101807,101808],{"class":169,"line":11821},[167,101809,95914],{"class":177},[167,101811,101812],{"class":169,"line":11826},[167,101813,101814],{"class":177},"[array([[ 1],\n",[167,101816,101817],{"class":169,"line":11831},[167,101818,101819],{"class":177},"        [ 7],\n",[167,101821,101822],{"class":169,"line":11840},[167,101823,101824],{"class":177},"        [13],\n",[167,101826,101827],{"class":169,"line":11845},[167,101828,101829],{"class":177},"        [19],\n",[167,101831,101832],{"class":169,"line":11851},[167,101833,101834],{"class":177},"        [25],\n",[167,101836,101837],{"class":169,"line":11872},[167,101838,101839],{"class":177},"        [31]]),\n",[167,101841,101842],{"class":169,"line":11878},[167,101843,101844],{"class":177}," array([[ 2],\n",[167,101846,101847],{"class":169,"line":11892},[167,101848,101849],{"class":177},"        [ 8],\n",[167,101851,101852],{"class":169,"line":11898},[167,101853,101854],{"class":177},"        [14],\n",[167,101856,101857],{"class":169,"line":11925},[167,101858,101859],{"class":177},"        [20],\n",[167,101861,101862],{"class":169,"line":11934},[167,101863,101864],{"class":177},"        [26],\n",[167,101866,101867],{"class":169,"line":11940},[167,101868,101869],{"class":177},"        [32]]),\n",[167,101871,101872],{"class":169,"line":11948},[167,101873,101874],{"class":177}," array([[ 3,  4,  5,  6],\n",[167,101876,101877],{"class":169,"line":11953},[167,101878,101879],{"class":177},"        [ 9, 10, 11, 12],\n",[167,101881,101882],{"class":169,"line":18630},[167,101883,101884],{"class":177},"        [15, 16, 17, 18],\n",[167,101886,101887],{"class":169,"line":18636},[167,101888,101889],{"class":177},"        [21, 22, 23, 24],\n",[167,101891,101892],{"class":169,"line":18659},[167,101893,101894],{"class":177},"        [27, 28, 29, 30],\n",[167,101896,101897],{"class":169,"line":18665},[167,101898,101899],{"class":177},"        [33, 34, 35, 36]])]\n",[167,101901,101902],{"class":169,"line":18688},[167,101903,95914],{"class":177},[167,101905,101906],{"class":169,"line":18702},[167,101907,101908],{"class":2268},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[167,101910,101911,101914,101916],{"class":169,"line":18722},[167,101912,101913],{"class":512},"np.vsplit(aa,",[167,101915,2281],{"class":184},[167,101917,873],{"class":512},[167,101919,101920],{"class":169,"line":18728},[167,101921,95550],{"class":2268},[167,101923,101924],{"class":169,"line":18739},[167,101925,95914],{"class":177},[167,101927,101928],{"class":169,"line":18762},[167,101929,101568],{"class":177},[167,101931,101932],{"class":169,"line":18784},[167,101933,101573],{"class":177},[167,101935,101936],{"class":169,"line":18789},[167,101937,101578],{"class":177},[167,101939,101940],{"class":169,"line":18795},[167,101941,101583],{"class":177},[167,101943,101944],{"class":169,"line":18809},[167,101945,101588],{"class":177},[167,101947,101948],{"class":169,"line":18822},[167,101949,101593],{"class":177},[167,101951,101952],{"class":169,"line":18827},[167,101953,95914],{"class":177},[167,101955,101956,101959,101961],{"class":169,"line":18841},[167,101957,101958],{"class":512},"np.hsplit(aa,",[167,101960,2281],{"class":184},[167,101962,873],{"class":512},[167,101964,101965],{"class":169,"line":18846},[167,101966,95550],{"class":2268},[167,101968,101969],{"class":169,"line":18852},[167,101970,95914],{"class":177},[167,101972,101973],{"class":169,"line":18857},[167,101974,101688],{"class":177},[167,101976,101977],{"class":169,"line":18871},[167,101978,101693],{"class":177},[167,101980,101981],{"class":169,"line":18876},[167,101982,101698],{"class":177},[167,101984,101985],{"class":169,"line":18881},[167,101986,101703],{"class":177},[167,101988,101989],{"class":169,"line":18895},[167,101990,101708],{"class":177},[167,101992,101993],{"class":169,"line":18907},[167,101994,101713],{"class":177},[167,101996,101997],{"class":169,"line":18912},[167,101998,101718],{"class":177},[167,102000,102001],{"class":169,"line":18925},[167,102002,101723],{"class":177},[167,102004,102005],{"class":169,"line":18930},[167,102006,101728],{"class":177},[167,102008,102009],{"class":169,"line":18935},[167,102010,101733],{"class":177},[167,102012,102013],{"class":169,"line":18940},[167,102014,101738],{"class":177},[167,102016,102017],{"class":169,"line":18953},[167,102018,101743],{"class":177},[167,102020,102021],{"class":169,"line":18958},[167,102022,101748],{"class":177},[167,102024,102025],{"class":169,"line":34636},[167,102026,101753],{"class":177},[167,102028,102029],{"class":169,"line":34642},[167,102030,101758],{"class":177},[167,102032,102033],{"class":169,"line":34648},[167,102034,101763],{"class":177},[167,102036,102037],{"class":169,"line":34654},[167,102038,101768],{"class":177},[167,102040,102041],{"class":169,"line":34660},[167,102042,101773],{"class":177},[167,102044,102045],{"class":169,"line":34671},[167,102046,95914],{"class":177},[167,102048,102049,102052,102054,102056,102058],{"class":169,"line":34677},[167,102050,102051],{"class":512},"np.vsplit(aa,[",[167,102053,2287],{"class":184},[167,102055,2578],{"class":512},[167,102057,2519],{"class":184},[167,102059,6689],{"class":512},[167,102061,102062],{"class":169,"line":34697},[167,102063,95550],{"class":2268},[167,102065,102066],{"class":169,"line":34703},[167,102067,95914],{"class":177},[167,102069,102070],{"class":169,"line":34714},[167,102071,101568],{"class":177},[167,102073,102074],{"class":169,"line":34720},[167,102075,101573],{"class":177},[167,102077,102078],{"class":169,"line":34726},[167,102079,101578],{"class":177},[167,102081,102082],{"class":169,"line":34732},[167,102083,101640],{"class":177},[167,102085,102086],{"class":169,"line":34738},[167,102087,101645],{"class":177},[167,102089,102090],{"class":169,"line":34744},[167,102091,101650],{"class":177},[167,102093,102094],{"class":169,"line":34750},[167,102095,101598],{"class":177},[2113,102097,102098],{},"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":32,"searchDepth":191,"depth":191,"links":102100},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101366,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102107,"title":102108,"body":102109,"description":25403,"extension":2140,"meta":102603,"navigation":740,"path":102604,"seo":102605,"stem":102606,"__hash__":102607},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102110,"toc":102594},[102111,102114,102117,102142,102146,102205,102257,102261,102263,102299,102353,102355,102393,102464,102468,102473,102477,102480,102513,102516,102520,102523,102526,102529,102532,102537,102541,102544,102547,102550,102553,102558,102562,102567,102570,102591],[10,102112,102108],{"id":102113},"_9数学函数",[19,102115,102116],{},"补充回顾：python的列表推导式",[26,102118,102120],{"className":723,"code":102119,"language":305,"meta":32,"style":32},"[1\u002Fi for i in a]\n",[34,102121,102122],{"__ignoreMap":32},[167,102123,102124,102126,102128,102130,102133,102135,102137,102139],{"class":169,"line":170},[167,102125,3090],{"class":512},[167,102127,2418],{"class":184},[167,102129,2784],{"class":731},[167,102131,102132],{"class":512},"i ",[167,102134,1168],{"class":731},[167,102136,11466],{"class":512},[167,102138,973],{"class":731},[167,102140,102141],{"class":512}," a]\n",[14,102143,102145],{"id":102144},"_91-求倒数","9.1 求倒数",[26,102147,102149],{"className":723,"code":102148,"language":305,"meta":32,"style":32},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[34,102150,102151,102156,102184,102196],{"__ignoreMap":32},[167,102152,102153],{"class":169,"line":170},[167,102154,102155],{"class":2268},"#数组求倒数\n",[167,102157,102158,102160,102162,102164,102166,102168,102170,102172,102174,102176,102178,102180,102182],{"class":169,"line":191},[167,102159,2439],{"class":512},[167,102161,523],{"class":731},[167,102163,3090],{"class":512},[167,102165,2418],{"class":184},[167,102167,2578],{"class":512},[167,102169,2287],{"class":184},[167,102171,2578],{"class":512},[167,102173,2281],{"class":184},[167,102175,2578],{"class":512},[167,102177,2494],{"class":184},[167,102179,2578],{"class":512},[167,102181,2519],{"class":184},[167,102183,35249],{"class":512},[167,102185,102186,102188,102190,102193],{"class":169,"line":205},[167,102187,2464],{"class":512},[167,102189,523],{"class":731},[167,102191,102192],{"class":512},"np.array(a)",[167,102194,102195],{"class":2268},"#将列表转换为数组\n",[167,102197,102198,102200,102202],{"class":169,"line":219},[167,102199,2418],{"class":184},[167,102201,2784],{"class":731},[167,102203,102204],{"class":512},"b\n",[26,102206,102208],{"className":723,"code":102207,"language":305,"meta":32,"style":32},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[34,102209,102210,102238,102247,102252],{"__ignoreMap":32},[167,102211,102212,102214,102216,102218,102220,102222,102224,102226,102228,102230,102232,102234,102236],{"class":169,"line":170},[167,102213,2439],{"class":512},[167,102215,523],{"class":731},[167,102217,3090],{"class":512},[167,102219,2418],{"class":184},[167,102221,2578],{"class":512},[167,102223,2287],{"class":184},[167,102225,2578],{"class":512},[167,102227,2281],{"class":184},[167,102229,2578],{"class":512},[167,102231,2494],{"class":184},[167,102233,2578],{"class":512},[167,102235,2519],{"class":184},[167,102237,35249],{"class":512},[167,102239,102240,102242,102244],{"class":169,"line":191},[167,102241,2464],{"class":512},[167,102243,523],{"class":731},[167,102245,102246],{"class":512},"np.array(a)\n",[167,102248,102249],{"class":169,"line":205},[167,102250,102251],{"class":2268},"#调用numpy中的函数reciprocal()\n",[167,102253,102254],{"class":169,"line":219},[167,102255,102256],{"class":512},"np.reciprocal(b)\n",[14,102258,102260],{"id":102259},"_92-求平方","9.2 求平方",[19,102262,96516],{},[26,102264,102266],{"className":723,"code":102265,"language":305,"meta":32,"style":32},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[34,102267,102268,102273,102278,102294],{"__ignoreMap":32},[167,102269,102270],{"class":169,"line":170},[167,102271,102272],{"class":2268},"#square()，求平方\n",[167,102274,102275],{"class":169,"line":191},[167,102276,102277],{"class":2268},"#一维数组\n",[167,102279,102280,102282,102284,102286,102288,102290,102292],{"class":169,"line":205},[167,102281,2439],{"class":512},[167,102283,523],{"class":731},[167,102285,94988],{"class":512},[167,102287,2418],{"class":184},[167,102289,2578],{"class":512},[167,102291,2646],{"class":184},[167,102293,873],{"class":512},[167,102295,102296],{"class":169,"line":219},[167,102297,102298],{"class":512},"np.square(a)\n",[26,102300,102302],{"className":723,"code":102301,"language":305,"meta":32,"style":32},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[34,102303,102304,102309,102314,102335],{"__ignoreMap":32},[167,102305,102306],{"class":169,"line":170},[167,102307,102308],{"class":2268},"#或者通过循环遍历的形式来计算\n",[167,102310,102311],{"class":169,"line":191},[167,102312,102313],{"class":2268},"#这是一个列表\n",[167,102315,102316,102319,102321,102323,102325,102327,102329,102332],{"class":169,"line":205},[167,102317,102318],{"class":512},"[i",[167,102320,2655],{"class":731},[167,102322,102132],{"class":512},[167,102324,1168],{"class":731},[167,102326,11466],{"class":512},[167,102328,973],{"class":731},[167,102330,102331],{"class":512}," a]",[167,102333,102334],{"class":2268},"#这个求完之后在数列当中\n",[167,102336,102337,102340,102342,102344,102346,102348,102350],{"class":169,"line":219},[167,102338,102339],{"class":512},"np.array([i",[167,102341,2655],{"class":731},[167,102343,102132],{"class":512},[167,102345,1168],{"class":731},[167,102347,11466],{"class":512},[167,102349,973],{"class":731},[167,102351,102352],{"class":512}," a])\n",[19,102354,95277],{},[26,102356,102358],{"className":723,"code":102357,"language":305,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[34,102359,102360,102364,102388],{"__ignoreMap":32},[167,102361,102362],{"class":169,"line":170},[167,102363,95287],{"class":2268},[167,102365,102366,102368,102370,102372,102374,102376,102378,102380,102382,102384,102386],{"class":169,"line":191},[167,102367,95292],{"class":512},[167,102369,523],{"class":731},[167,102371,94988],{"class":512},[167,102373,2418],{"class":184},[167,102375,2578],{"class":512},[167,102377,2723],{"class":184},[167,102379,94993],{"class":512},[167,102381,2494],{"class":184},[167,102383,2578],{"class":512},[167,102385,2281],{"class":184},[167,102387,873],{"class":512},[167,102389,102390],{"class":169,"line":205},[167,102391,102392],{"class":512},"np.square(aa)\n",[26,102394,102396],{"className":723,"code":102395,"language":305,"meta":32,"style":32},"#传统的方式\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",[34,102397,102398,102403,102412,102428,102444,102459],{"__ignoreMap":32},[167,102399,102400],{"class":169,"line":170},[167,102401,102402],{"class":2268},"#传统的方式\n",[167,102404,102405,102407,102409],{"class":169,"line":191},[167,102406,100171],{"class":512},[167,102408,523],{"class":731},[167,102410,102411],{"class":512},"np.empty_like(aa)\n",[167,102413,102414,102416,102418,102420,102422,102424,102426],{"class":169,"line":205},[167,102415,1168],{"class":731},[167,102417,11466],{"class":512},[167,102419,973],{"class":731},[167,102421,976],{"class":184},[167,102423,898],{"class":512},[167,102425,2494],{"class":184},[167,102427,984],{"class":512},[167,102429,102430,102432,102434,102436,102438,102440,102442],{"class":169,"line":219},[167,102431,967],{"class":731},[167,102433,11528],{"class":512},[167,102435,973],{"class":731},[167,102437,976],{"class":184},[167,102439,898],{"class":512},[167,102441,2281],{"class":184},[167,102443,984],{"class":512},[167,102445,102446,102449,102451,102454,102456],{"class":169,"line":230},[167,102447,102448],{"class":512},"        bb[i,j]",[167,102450,523],{"class":731},[167,102452,102453],{"class":512},"aa[i,j]",[167,102455,2655],{"class":731},[167,102457,102458],{"class":512},"aa[i,j]\n",[167,102460,102461],{"class":169,"line":241},[167,102462,102463],{"class":512},"bb\n",[14,102465,102467],{"id":102466},"_93-求各元素的符号","9.3 求各元素的符号",[19,102469,102470],{},[3528,102471],{"alt":32,"src":102472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102474,102476],{"id":102475},"_94-modf函数","9.4 modf函数",[19,102478,102479],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,102481,102483],{"className":723,"code":102482,"language":305,"meta":32,"style":32},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[34,102484,102485,102508],{"__ignoreMap":32},[167,102486,102487,102489,102491,102493,102495,102497,102499,102501,102503,102506],{"class":169,"line":170},[167,102488,2439],{"class":512},[167,102490,523],{"class":731},[167,102492,94988],{"class":512},[167,102494,2732],{"class":731},[167,102496,2646],{"class":184},[167,102498,2578],{"class":512},[167,102500,2646],{"class":184},[167,102502,2578],{"class":512},[167,102504,102505],{"class":184},"0.3",[167,102507,873],{"class":512},[167,102509,102510],{"class":169,"line":191},[167,102511,102512],{"class":512},"np.modf(a)\n",[19,102514,102515],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102517,102519],{"id":102518},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102521,102522],{},"np.cell()",[19,102524,102525],{},"np.floor()",[19,102527,102528],{},"np.rint()",[19,102530,102531],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102533,102534],{},[3528,102535],{"alt":32,"src":102536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102538,102540],{"id":102539},"_96-around函数","9.6 around()函数",[19,102542,102543],{},"around()函数也可以实现对数的小数位数进行操作",[19,102545,102546],{},"其中的参数：",[19,102548,102549],{},"1.要传的数组",[19,102551,102552],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102554,102555],{},[3528,102556],{"alt":32,"src":102557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102559,102561],{"id":102560},"_97-三角函数","9.7 三角函数",[19,102563,102564],{},[3528,102565],{"alt":32,"src":102566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102568,102569],{},"引入图像模块非常重要",[26,102571,102573],{"className":723,"code":102572,"language":305,"meta":32,"style":32},"from matplotlib import pyplot as plt\n",[34,102574,102575],{"__ignoreMap":32},[167,102576,102577,102579,102582,102584,102587,102589],{"class":169,"line":170},[167,102578,32745],{"class":731},[167,102580,102581],{"class":512}," matplotlib ",[167,102583,732],{"class":731},[167,102585,102586],{"class":512}," pyplot ",[167,102588,33388],{"class":731},[167,102590,33442],{"class":512},[2113,102592,102593],{},"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":32,"searchDepth":191,"depth":191,"links":102595},[102596,102597,102598,102599,102600,102601,102602],{"id":102144,"depth":191,"text":102145},{"id":102259,"depth":191,"text":102260},{"id":102466,"depth":191,"text":102467},{"id":102475,"depth":191,"text":102476},{"id":102518,"depth":191,"text":102519},{"id":102539,"depth":191,"text":102540},{"id":102560,"depth":191,"text":102561},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102108,"description":25403},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102609,"title":102610,"body":102611,"description":25403,"extension":2140,"meta":102615,"navigation":740,"path":102616,"seo":102617,"stem":102618,"__hash__":102619},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102612,"toc":102613},[],{"title":32,"searchDepth":191,"depth":191,"links":102614},[],{"category":52420},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102610,"description":25403},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":4,"title":5,"body":102621,"description":32,"extension":2140,"meta":104241,"navigation":740,"path":2142,"seo":104242,"stem":2144,"__hash__":2145},{"type":7,"value":102622,"toc":104218},[102623,102625,102627,102629,102631,102636,102638,102656,102658,102686,102688,102724,102726,102728,102802,102804,102838,102840,102854,102856,102868,102870,102872,102910,102912,102936,102938,102940,102945,102949,102963,102965,102967,103025,103027,103039,103041,103043,103067,103073,103078,103080,103082,103087,103093,103095,103097,103121,103123,103367,103369,103371,103381,103383,103385,103405,103409,103411,103427,103429,103431,103443,103449,103451,103475,103479,103481,103483,103493,103503,103523,103529,103547,103553,103577,103585,103597,103601,103637,103647,103671,103679,103697,103701,103743,103753,103769,103777,103793,103797,103809,103815,103849,103861,103885,103893,103917,103927,103951,103953,103973,103979,103981,103991,103993,103995,104000,104008,104012,104014,104016,104028,104030,104042,104044,104054,104060,104062,104090,104092,104094,104098,104100,104112,104114,104116,104144,104146,104148,104164,104170,104172,104177,104181,104183,104185,104205,104207,104209,104214,104216],[10,102624,5],{"id":12},[14,102626,17],{"id":16},[19,102628,21],{},[19,102630,24],{},[26,102632,102634],{"className":102633,"code":30,"language":31,"meta":32},[29],[34,102635,30],{"__ignoreMap":32},[19,102637,38],{},[40,102639,102640,102642,102644,102648,102652],{},[43,102641,45],{},[43,102643,48],{},[43,102645,102646],{},[34,102647,53],{},[43,102649,102650],{},[34,102651,58],{},[43,102653,102654],{},[34,102655,63],{},[19,102657,66],{},[68,102659,102660,102668],{},[71,102661,102662],{},[74,102663,102664,102666],{},[77,102665,80],{"align":79},[77,102667,83],{"align":79},[85,102669,102670,102678],{},[74,102671,102672,102676],{},[90,102673,102674],{"align":79},[34,102675,94],{},[90,102677,97],{"align":79},[74,102679,102680,102684],{},[90,102681,102682],{"align":79},[34,102683,104],{},[90,102685,107],{"align":79},[19,102687,110],{},[68,102689,102690,102698],{},[71,102691,102692],{},[74,102693,102694,102696],{},[77,102695,119],{"align":79},[77,102697,122],{"align":79},[85,102699,102700,102708,102716],{},[74,102701,102702,102704],{},[90,102703,129],{"align":79},[90,102705,102706],{"align":79},[34,102707,94],{},[74,102709,102710,102712],{},[90,102711,138],{"align":79},[90,102713,102714],{"align":79},[34,102715,104],{},[74,102717,102718,102720],{},[90,102719,147],{"align":79},[90,102721,102722],{"align":79},[34,102723,63],{},[14,102725,155],{"id":154},[19,102727,158],{},[26,102729,102730],{"className":161,"code":162,"language":163,"meta":32,"style":32},[34,102731,102732,102744,102754,102764,102772,102780,102794],{"__ignoreMap":32},[167,102733,102734,102736,102738,102740,102742],{"class":169,"line":170},[167,102735,174],{"class":173},[167,102737,178],{"class":177},[167,102739,181],{"class":177},[167,102741,185],{"class":184},[167,102743,188],{"class":184},[167,102745,102746,102748,102750,102752],{"class":169,"line":191},[167,102747,194],{"class":177},[167,102749,197],{"class":177},[167,102751,200],{"class":177},[167,102753,188],{"class":184},[167,102755,102756,102758,102760,102762],{"class":169,"line":205},[167,102757,208],{"class":177},[167,102759,211],{"class":177},[167,102761,214],{"class":177},[167,102763,188],{"class":184},[167,102765,102766,102768,102770],{"class":169,"line":219},[167,102767,222],{"class":177},[167,102769,225],{"class":177},[167,102771,188],{"class":184},[167,102773,102774,102776,102778],{"class":169,"line":230},[167,102775,233],{"class":177},[167,102777,236],{"class":177},[167,102779,188],{"class":184},[167,102781,102782,102784,102786,102788,102790,102792],{"class":169,"line":241},[167,102783,244],{"class":177},[167,102785,247],{"class":177},[167,102787,250],{"class":177},[167,102789,253],{"class":177},[167,102791,256],{"class":177},[167,102793,188],{"class":184},[167,102795,102796,102798,102800],{"class":169,"line":261},[167,102797,264],{"class":177},[167,102799,267],{"class":177},[167,102801,270],{"class":177},[19,102803,273],{},[26,102805,102806],{"className":161,"code":276,"language":163,"meta":32,"style":32},[34,102807,102808,102818,102824],{"__ignoreMap":32},[167,102809,102810,102812,102814,102816],{"class":169,"line":170},[167,102811,283],{"class":173},[167,102813,286],{"class":184},[167,102815,289],{"class":177},[167,102817,292],{"class":177},[167,102819,102820,102822],{"class":169,"line":191},[167,102821,297],{"class":184},[167,102823,300],{"class":177},[167,102825,102826,102828,102830,102832,102834,102836],{"class":169,"line":205},[167,102827,305],{"class":173},[167,102829,286],{"class":184},[167,102831,310],{"class":177},[167,102833,181],{"class":177},[167,102835,315],{"class":184},[167,102837,318],{"class":177},[19,102839,321],{},[26,102841,102842],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,102843,102844],{"__ignoreMap":32},[167,102845,102846,102848,102850,102852],{"class":169,"line":170},[167,102847,331],{"class":173},[167,102849,181],{"class":177},[167,102851,336],{"class":177},[167,102853,339],{"class":177},[19,102855,342],{},[26,102857,102858],{"className":161,"code":345,"language":163,"meta":32,"style":32},[34,102859,102860],{"__ignoreMap":32},[167,102861,102862,102864,102866],{"class":169,"line":170},[167,102863,305],{"class":173},[167,102865,354],{"class":184},[167,102867,357],{"class":177},[19,102869,360],{},[19,102871,363],{},[26,102873,102874],{"className":161,"code":366,"language":163,"meta":32,"style":32},[34,102875,102876,102892,102900],{"__ignoreMap":32},[167,102877,102878,102880,102882,102884,102886,102888,102890],{"class":169,"line":170},[167,102879,373],{"class":173},[167,102881,376],{"class":177},[167,102883,379],{"class":184},[167,102885,382],{"class":177},[167,102887,385],{"class":177},[167,102889,388],{"class":184},[167,102891,391],{"class":184},[167,102893,102894,102896,102898],{"class":169,"line":191},[167,102895,373],{"class":173},[167,102897,398],{"class":177},[167,102899,401],{"class":177},[167,102901,102902,102904,102906,102908],{"class":169,"line":205},[167,102903,331],{"class":173},[167,102905,181],{"class":177},[167,102907,336],{"class":177},[167,102909,339],{"class":177},[19,102911,414],{},[40,102913,102914,102918,102924,102930],{},[43,102915,419,102916,423],{},[34,102917,422],{},[43,102919,426,102920,429,102922,433],{},[34,102921,422],{},[34,102923,432],{},[43,102925,102926,439,102928,423],{},[34,102927,438],{},[34,102929,442],{},[43,102931,445,102932,449,102934,453],{},[34,102933,448],{},[34,102935,452],{},[14,102937,457],{"id":456},[19,102939,460],{},[26,102941,102943],{"className":102942,"code":464,"language":31,"meta":32},[29],[34,102944,464],{"__ignoreMap":32},[19,102946,102947,471],{},[34,102948,94],{},[19,102950,102951,476,102953,480,102955,480,102957,480,102959,480,102961,423],{},[34,102952,104],{},[34,102954,479],{},[34,102956,483],{},[34,102958,486],{},[34,102960,489],{},[34,102962,492],{},[494,102964,497],{"id":496},[19,102966,500],{},[26,102968,102969],{"className":503,"code":504,"language":505,"meta":32,"style":32},[34,102970,102971,102991,103017],{"__ignoreMap":32},[167,102972,102973,102975,102977,102979,102981,102983,102985,102987,102989],{"class":169,"line":170},[167,102974,513],{"class":512},[167,102976,517],{"class":516},[167,102978,520],{"class":173},[167,102980,523],{"class":512},[167,102982,526],{"class":177},[167,102984,529],{"class":173},[167,102986,523],{"class":512},[167,102988,534],{"class":177},[167,102990,537],{"class":512},[167,102992,102993,102995,102997,102999,103001,103003,103005,103007,103009,103011,103013,103015],{"class":169,"line":191},[167,102994,542],{"class":512},[167,102996,545],{"class":516},[167,102998,520],{"class":173},[167,103000,523],{"class":512},[167,103002,552],{"class":177},[167,103004,555],{"class":173},[167,103006,523],{"class":512},[167,103008,526],{"class":177},[167,103010,562],{"class":173},[167,103012,523],{"class":512},[167,103014,567],{"class":177},[167,103016,570],{"class":512},[167,103018,103019,103021,103023],{"class":169,"line":205},[167,103020,575],{"class":512},[167,103022,517],{"class":516},[167,103024,537],{"class":512},[19,103026,582],{},[40,103028,103029,103033,103037],{},[43,103030,587,103031,591],{},[34,103032,590],{},[43,103034,594,103035,598],{},[34,103036,597],{},[43,103038,601],{},[494,103040,605],{"id":604},[19,103042,608],{},[26,103044,103045],{"className":503,"code":611,"language":505,"meta":32,"style":32},[34,103046,103047],{"__ignoreMap":32},[167,103048,103049,103051,103053,103055,103057,103059,103061,103063,103065],{"class":169,"line":170},[167,103050,513],{"class":512},[167,103052,620],{"class":516},[167,103054,623],{"class":173},[167,103056,523],{"class":512},[167,103058,628],{"class":177},[167,103060,631],{"class":173},[167,103062,523],{"class":512},[167,103064,636],{"class":177},[167,103066,570],{"class":512},[19,103068,641,103069,645,103071,649],{},[34,103070,644],{},[34,103072,648],{},[26,103074,103076],{"className":103075,"code":653,"language":31,"meta":32},[29],[34,103077,653],{"__ignoreMap":32},[494,103079,659],{"id":658},[19,103081,662],{},[26,103083,103085],{"className":103084,"code":666,"language":31,"meta":32},[29],[34,103086,666],{"__ignoreMap":32},[19,103088,671,103089,675,103091,679],{},[34,103090,674],{},[34,103092,678],{},[14,103094,683],{"id":682},[19,103096,686],{},[26,103098,103099],{"className":161,"code":689,"language":163,"meta":32,"style":32},[34,103100,103101,103109,103115],{"__ignoreMap":32},[167,103102,103103,103105,103107],{"class":169,"line":170},[167,103104,696],{"class":173},[167,103106,699],{"class":184},[167,103108,702],{"class":177},[167,103110,103111,103113],{"class":169,"line":191},[167,103112,707],{"class":184},[167,103114,702],{"class":177},[167,103116,103117,103119],{"class":169,"line":205},[167,103118,714],{"class":173},[167,103120,717],{"class":177},[19,103122,720],{},[26,103124,103125],{"className":723,"code":724,"language":305,"meta":32,"style":32},[34,103126,103127,103133,103137,103141,103149,103153,103157,103161,103165,103169,103173,103177,103181,103185,103189,103193,103197,103201,103205,103209,103221,103233,103241,103245,103255,103265,103275,103285,103295,103299,103315,103319,103323,103333,103343,103347,103351,103363],{"__ignoreMap":32},[167,103128,103129,103131],{"class":169,"line":170},[167,103130,732],{"class":731},[167,103132,735],{"class":512},[167,103134,103135],{"class":169,"line":191},[167,103136,741],{"emptyLinePlaceholder":740},[167,103138,103139],{"class":169,"line":205},[167,103140,741],{"emptyLinePlaceholder":740},[167,103142,103143,103145,103147],{"class":169,"line":219},[167,103144,750],{"class":184},[167,103146,753],{"class":731},[167,103148,756],{"class":177},[167,103150,103151],{"class":169,"line":230},[167,103152,761],{"class":177},[167,103154,103155],{"class":169,"line":241},[167,103156,766],{"class":177},[167,103158,103159],{"class":169,"line":261},[167,103160,741],{"emptyLinePlaceholder":740},[167,103162,103163],{"class":169,"line":773},[167,103164,776],{"class":177},[167,103166,103167],{"class":169,"line":779},[167,103168,782],{"class":177},[167,103170,103171],{"class":169,"line":785},[167,103172,741],{"emptyLinePlaceholder":740},[167,103174,103175],{"class":169,"line":790},[167,103176,793],{"class":177},[167,103178,103179],{"class":169,"line":796},[167,103180,799],{"class":177},[167,103182,103183],{"class":169,"line":802},[167,103184,805],{"class":177},[167,103186,103187],{"class":169,"line":808},[167,103188,811],{"class":177},[167,103190,103191],{"class":169,"line":814},[167,103192,817],{"class":177},[167,103194,103195],{"class":169,"line":820},[167,103196,823],{"class":177},[167,103198,103199],{"class":169,"line":826},[167,103200,829],{"class":177},[167,103202,103203],{"class":169,"line":832},[167,103204,741],{"emptyLinePlaceholder":740},[167,103206,103207],{"class":169,"line":837},[167,103208,741],{"emptyLinePlaceholder":740},[167,103210,103211,103213,103215,103217,103219],{"class":169,"line":842},[167,103212,845],{"class":731},[167,103214,848],{"class":173},[167,103216,851],{"class":512},[167,103218,854],{"class":184},[167,103220,857],{"class":512},[167,103222,103223,103225,103227,103229,103231],{"class":169,"line":860},[167,103224,863],{"class":512},[167,103226,523],{"class":731},[167,103228,868],{"class":512},[167,103230,750],{"class":184},[167,103232,873],{"class":512},[167,103234,103235,103237,103239],{"class":169,"line":876},[167,103236,879],{"class":512},[167,103238,523],{"class":731},[167,103240,884],{"class":512},[167,103242,103243],{"class":169,"line":887},[167,103244,741],{"emptyLinePlaceholder":740},[167,103246,103247,103249,103251,103253],{"class":169,"line":892},[167,103248,895],{"class":184},[167,103250,898],{"class":512},[167,103252,901],{"class":177},[167,103254,904],{"class":512},[167,103256,103257,103259,103261,103263],{"class":169,"line":907},[167,103258,895],{"class":184},[167,103260,898],{"class":512},[167,103262,914],{"class":177},[167,103264,917],{"class":512},[167,103266,103267,103269,103271,103273],{"class":169,"line":920},[167,103268,895],{"class":184},[167,103270,898],{"class":512},[167,103272,927],{"class":177},[167,103274,930],{"class":512},[167,103276,103277,103279,103281,103283],{"class":169,"line":933},[167,103278,895],{"class":184},[167,103280,898],{"class":512},[167,103282,940],{"class":177},[167,103284,943],{"class":512},[167,103286,103287,103289,103291,103293],{"class":169,"line":946},[167,103288,895],{"class":184},[167,103290,898],{"class":512},[167,103292,953],{"class":177},[167,103294,956],{"class":512},[167,103296,103297],{"class":169,"line":959},[167,103298,741],{"emptyLinePlaceholder":740},[167,103300,103301,103303,103305,103307,103309,103311,103313],{"class":169,"line":964},[167,103302,967],{"class":731},[167,103304,970],{"class":512},[167,103306,973],{"class":731},[167,103308,976],{"class":184},[167,103310,898],{"class":512},[167,103312,981],{"class":184},[167,103314,984],{"class":512},[167,103316,103317],{"class":169,"line":987},[167,103318,990],{"class":512},[167,103320,103321],{"class":169,"line":993},[167,103322,741],{"emptyLinePlaceholder":740},[167,103324,103325,103327,103329,103331],{"class":169,"line":998},[167,103326,895],{"class":184},[167,103328,898],{"class":512},[167,103330,1005],{"class":177},[167,103332,943],{"class":512},[167,103334,103335,103337,103339,103341],{"class":169,"line":1010},[167,103336,895],{"class":184},[167,103338,898],{"class":512},[167,103340,1017],{"class":177},[167,103342,956],{"class":512},[167,103344,103345],{"class":169,"line":1022},[167,103346,741],{"emptyLinePlaceholder":740},[167,103348,103349],{"class":169,"line":1027},[167,103350,741],{"emptyLinePlaceholder":740},[167,103352,103353,103355,103357,103359,103361],{"class":169,"line":1032},[167,103354,1035],{"class":731},[167,103356,1038],{"class":184},[167,103358,1041],{"class":731},[167,103360,1044],{"class":177},[167,103362,857],{"class":512},[167,103364,103365],{"class":169,"line":1049},[167,103366,1052],{"class":512},[494,103368,1055],{"id":1055},[19,103370,1058],{},[26,103372,103373],{"className":723,"code":1061,"language":305,"meta":32,"style":32},[34,103374,103375],{"__ignoreMap":32},[167,103376,103377,103379],{"class":169,"line":170},[167,103378,732],{"class":731},[167,103380,735],{"class":512},[19,103382,1072],{},[19,103384,1075],{},[26,103386,103387],{"className":723,"code":1078,"language":305,"meta":32,"style":32},[34,103388,103389,103397,103401],{"__ignoreMap":32},[167,103390,103391,103393,103395],{"class":169,"line":170},[167,103392,750],{"class":184},[167,103394,753],{"class":731},[167,103396,756],{"class":177},[167,103398,103399],{"class":169,"line":191},[167,103400,1093],{"class":177},[167,103402,103403],{"class":169,"line":205},[167,103404,829],{"class":177},[19,103406,1100,103407,1104],{},[34,103408,1103],{},[19,103410,1107],{},[26,103412,103413],{"className":723,"code":1110,"language":305,"meta":32,"style":32},[34,103414,103415],{"__ignoreMap":32},[167,103416,103417,103419,103421,103423,103425],{"class":169,"line":170},[167,103418,1117],{"class":512},[167,103420,523],{"class":731},[167,103422,868],{"class":512},[167,103424,750],{"class":184},[167,103426,873],{"class":512},[19,103428,1128],{},[19,103430,1131],{},[26,103432,103433],{"className":723,"code":1134,"language":305,"meta":32,"style":32},[34,103434,103435],{"__ignoreMap":32},[167,103436,103437,103439,103441],{"class":169,"line":170},[167,103438,1141],{"class":512},[167,103440,523],{"class":731},[167,103442,884],{"class":512},[19,103444,103445,1151,103447,1155],{},[34,103446,1150],{},[34,103448,1154],{},[19,103450,1158],{},[26,103452,103453],{"className":723,"code":1161,"language":305,"meta":32,"style":32},[34,103454,103455,103471],{"__ignoreMap":32},[167,103456,103457,103459,103461,103463,103465,103467,103469],{"class":169,"line":170},[167,103458,1168],{"class":731},[167,103460,970],{"class":512},[167,103462,973],{"class":731},[167,103464,976],{"class":184},[167,103466,898],{"class":512},[167,103468,981],{"class":184},[167,103470,984],{"class":512},[167,103472,103473],{"class":169,"line":191},[167,103474,1185],{"class":512},[19,103476,1188,103477,1191],{},[34,103478,644],{},[494,103480,1194],{"id":1194},[19,103482,1197],{},[26,103484,103485],{"className":723,"code":1061,"language":305,"meta":32,"style":32},[34,103486,103487],{"__ignoreMap":32},[167,103488,103489,103491],{"class":169,"line":170},[167,103490,732],{"class":731},[167,103492,735],{"class":512},[19,103494,103495,1212,103497,480,103499,480,103501,423],{},[34,103496,732],{},[34,103498,53],{},[34,103500,58],{},[34,103502,1219],{},[26,103504,103505],{"className":723,"code":1078,"language":305,"meta":32,"style":32},[34,103506,103507,103515,103519],{"__ignoreMap":32},[167,103508,103509,103511,103513],{"class":169,"line":170},[167,103510,750],{"class":184},[167,103512,753],{"class":731},[167,103514,756],{"class":177},[167,103516,103517],{"class":169,"line":191},[167,103518,1093],{"class":177},[167,103520,103521],{"class":169,"line":205},[167,103522,829],{"class":177},[19,103524,103525,1244,103527,1248],{},[34,103526,750],{},[34,103528,1247],{},[26,103530,103531],{"className":503,"code":761,"language":505,"meta":32,"style":32},[34,103532,103533],{"__ignoreMap":32},[167,103534,103535,103537,103539,103541,103543,103545],{"class":169,"line":170},[167,103536,513],{"class":512},[167,103538,432],{"class":516},[167,103540,1261],{"class":173},[167,103542,523],{"class":512},[167,103544,1266],{"class":177},[167,103546,537],{"class":512},[19,103548,1271,103549,1275,103551,423],{},[34,103550,1274],{},[34,103552,1278],{},[26,103554,103555],{"className":503,"code":611,"language":505,"meta":32,"style":32},[34,103556,103557],{"__ignoreMap":32},[167,103558,103559,103561,103563,103565,103567,103569,103571,103573,103575],{"class":169,"line":170},[167,103560,513],{"class":512},[167,103562,620],{"class":516},[167,103564,623],{"class":173},[167,103566,523],{"class":512},[167,103568,628],{"class":177},[167,103570,631],{"class":173},[167,103572,523],{"class":512},[167,103574,636],{"class":177},[167,103576,570],{"class":512},[19,103578,103579,1307,103581,1311,103583,1315],{},[34,103580,620],{},[34,103582,1310],{},[34,103584,1314],{},[26,103586,103587],{"className":503,"code":1318,"language":505,"meta":32,"style":32},[34,103588,103589],{"__ignoreMap":32},[167,103590,103591,103593,103595],{"class":169,"line":170},[167,103592,513],{"class":512},[167,103594,1327],{"class":516},[167,103596,537],{"class":512},[19,103598,103599,1334],{},[34,103600,1327],{},[26,103602,103603],{"className":503,"code":1337,"language":505,"meta":32,"style":32},[34,103604,103605],{"__ignoreMap":32},[167,103606,103607,103609,103611,103613,103615,103617,103619,103621,103623,103625,103627,103629,103631,103633,103635],{"class":169,"line":170},[167,103608,513],{"class":512},[167,103610,545],{"class":516},[167,103612,520],{"class":173},[167,103614,523],{"class":512},[167,103616,1352],{"class":177},[167,103618,555],{"class":173},[167,103620,523],{"class":512},[167,103622,1359],{"class":177},[167,103624,562],{"class":173},[167,103626,523],{"class":512},[167,103628,1366],{"class":177},[167,103630,1369],{"class":173},[167,103632,523],{"class":512},[167,103634,1374],{"class":177},[167,103636,570],{"class":512},[19,103638,1379,103639,1382,103641,1386,103643,1390,103645,1394],{},[34,103640,545],{},[34,103642,1385],{},[34,103644,1389],{},[34,103646,1393],{},[26,103648,103649],{"className":503,"code":1397,"language":505,"meta":32,"style":32},[34,103650,103651],{"__ignoreMap":32},[167,103652,103653,103655,103657,103659,103661,103663,103665,103667,103669],{"class":169,"line":170},[167,103654,513],{"class":512},[167,103656,517],{"class":516},[167,103658,520],{"class":173},[167,103660,523],{"class":512},[167,103662,526],{"class":177},[167,103664,529],{"class":173},[167,103666,523],{"class":512},[167,103668,534],{"class":177},[167,103670,537],{"class":512},[19,103672,1422,103673,423,103675,1428,103677,1431],{},[34,103674,590],{},[34,103676,1427],{},[34,103678,597],{},[26,103680,103681],{"className":503,"code":1434,"language":505,"meta":32,"style":32},[34,103682,103683],{"__ignoreMap":32},[167,103684,103685,103687,103689,103691,103693,103695],{"class":169,"line":170},[167,103686,513],{"class":512},[167,103688,1103],{"class":516},[167,103690,520],{"class":173},[167,103692,523],{"class":512},[167,103694,1449],{"class":177},[167,103696,570],{"class":512},[19,103698,1454,103699,1457],{},[34,103700,1103],{},[26,103702,103703],{"className":503,"code":1460,"language":505,"meta":32,"style":32},[34,103704,103705],{"__ignoreMap":32},[167,103706,103707,103709,103711,103713,103715,103717,103719,103721,103723,103725,103727,103729,103731,103733,103735,103737,103739,103741],{"class":169,"line":170},[167,103708,513],{"class":512},[167,103710,545],{"class":516},[167,103712,520],{"class":173},[167,103714,523],{"class":512},[167,103716,552],{"class":177},[167,103718,555],{"class":173},[167,103720,523],{"class":512},[167,103722,526],{"class":177},[167,103724,562],{"class":173},[167,103726,523],{"class":512},[167,103728,567],{"class":177},[167,103730,1489],{"class":173},[167,103732,523],{"class":512},[167,103734,1494],{"class":177},[167,103736,1369],{"class":173},[167,103738,523],{"class":512},[167,103740,1501],{"class":177},[167,103742,570],{"class":512},[19,103744,1506,103745,1510,103747,1514,103749,1518,103751,1522],{},[34,103746,1509],{},[34,103748,1513],{},[34,103750,1517],{},[34,103752,1521],{},[26,103754,103755],{"className":723,"code":1525,"language":305,"meta":32,"style":32},[34,103756,103757],{"__ignoreMap":32},[167,103758,103759,103761,103763,103765,103767],{"class":169,"line":170},[167,103760,845],{"class":731},[167,103762,848],{"class":173},[167,103764,851],{"class":512},[167,103766,854],{"class":184},[167,103768,857],{"class":512},[19,103770,103771,1544,103773,1548,103775,1552],{},[34,103772,845],{},[34,103774,1547],{},[34,103776,1551],{},[26,103778,103779],{"className":723,"code":1110,"language":305,"meta":32,"style":32},[34,103780,103781],{"__ignoreMap":32},[167,103782,103783,103785,103787,103789,103791],{"class":169,"line":170},[167,103784,1117],{"class":512},[167,103786,523],{"class":731},[167,103788,868],{"class":512},[167,103790,750],{"class":184},[167,103792,873],{"class":512},[19,103794,1571,103795,1575],{},[34,103796,1574],{},[26,103798,103799],{"className":723,"code":1134,"language":305,"meta":32,"style":32},[34,103800,103801],{"__ignoreMap":32},[167,103802,103803,103805,103807],{"class":169,"line":170},[167,103804,1141],{"class":512},[167,103806,523],{"class":731},[167,103808,884],{"class":512},[19,103810,1590,103811,1593,103813,1596],{},[34,103812,1150],{},[34,103814,1150],{},[26,103816,103817],{"className":723,"code":1599,"language":305,"meta":32,"style":32},[34,103818,103819,103829,103839],{"__ignoreMap":32},[167,103820,103821,103823,103825,103827],{"class":169,"line":170},[167,103822,1606],{"class":184},[167,103824,898],{"class":512},[167,103826,901],{"class":177},[167,103828,904],{"class":512},[167,103830,103831,103833,103835,103837],{"class":169,"line":191},[167,103832,1606],{"class":184},[167,103834,898],{"class":512},[167,103836,914],{"class":177},[167,103838,917],{"class":512},[167,103840,103841,103843,103845,103847],{"class":169,"line":205},[167,103842,1606],{"class":184},[167,103844,898],{"class":512},[167,103846,927],{"class":177},[167,103848,930],{"class":512},[19,103850,103851,1637,103853,1641,103855,1645,103857,1649,103859,1653],{},[34,103852,1606],{},[34,103854,1640],{},[34,103856,1644],{},[34,103858,1648],{},[34,103860,1652],{},[26,103862,103863],{"className":723,"code":1656,"language":305,"meta":32,"style":32},[34,103864,103865,103875],{"__ignoreMap":32},[167,103866,103867,103869,103871,103873],{"class":169,"line":170},[167,103868,1606],{"class":184},[167,103870,898],{"class":512},[167,103872,940],{"class":177},[167,103874,943],{"class":512},[167,103876,103877,103879,103881,103883],{"class":169,"line":191},[167,103878,1606],{"class":184},[167,103880,898],{"class":512},[167,103882,953],{"class":177},[167,103884,956],{"class":512},[19,103886,1681,103887,1684,103889,1687,103891,1691],{},[34,103888,479],{},[34,103890,483],{},[34,103892,1690],{},[26,103894,103895],{"className":723,"code":1161,"language":305,"meta":32,"style":32},[34,103896,103897,103913],{"__ignoreMap":32},[167,103898,103899,103901,103903,103905,103907,103909,103911],{"class":169,"line":170},[167,103900,1168],{"class":731},[167,103902,970],{"class":512},[167,103904,973],{"class":731},[167,103906,976],{"class":184},[167,103908,898],{"class":512},[167,103910,981],{"class":184},[167,103912,984],{"class":512},[167,103914,103915],{"class":169,"line":191},[167,103916,1185],{"class":512},[19,103918,103919,1720,103921,1724,103923,1728,103925,1731],{},[34,103920,1168],{},[34,103922,1723],{},[34,103924,1727],{},[34,103926,644],{},[26,103928,103929],{"className":723,"code":1734,"language":305,"meta":32,"style":32},[34,103930,103931,103941],{"__ignoreMap":32},[167,103932,103933,103935,103937,103939],{"class":169,"line":170},[167,103934,1606],{"class":184},[167,103936,898],{"class":512},[167,103938,1005],{"class":177},[167,103940,943],{"class":512},[167,103942,103943,103945,103947,103949],{"class":169,"line":191},[167,103944,1606],{"class":184},[167,103946,898],{"class":512},[167,103948,1017],{"class":177},[167,103950,956],{"class":512},[19,103952,1759],{},[26,103954,103955],{"className":723,"code":1762,"language":305,"meta":32,"style":32},[34,103956,103957,103969],{"__ignoreMap":32},[167,103958,103959,103961,103963,103965,103967],{"class":169,"line":170},[167,103960,1035],{"class":731},[167,103962,1038],{"class":184},[167,103964,1041],{"class":731},[167,103966,1044],{"class":177},[167,103968,857],{"class":512},[167,103970,103971],{"class":169,"line":191},[167,103972,1052],{"class":512},[19,103974,1783,103975,1787,103977,423],{},[34,103976,1786],{},[34,103978,1786],{},[19,103980,1792],{},[26,103982,103983],{"className":161,"code":1795,"language":163,"meta":32,"style":32},[34,103984,103985],{"__ignoreMap":32},[167,103986,103987,103989],{"class":169,"line":170},[167,103988,305],{"class":173},[167,103990,717],{"class":177},[14,103992,1807],{"id":1806},[19,103994,1810],{},[26,103996,103998],{"className":103997,"code":1814,"language":31,"meta":32},[29],[34,103999,1814],{"__ignoreMap":32},[19,104001,104002,1821,104004,1825,104006,423],{},[34,104003,1103],{},[34,104005,1824],{},[34,104007,1828],{},[19,104009,1831,104010,1835],{},[34,104011,1834],{},[14,104013,1839],{"id":1838},[19,104015,1842],{},[26,104017,104018],{"className":161,"code":345,"language":163,"meta":32,"style":32},[34,104019,104020],{"__ignoreMap":32},[167,104021,104022,104024,104026],{"class":169,"line":170},[167,104023,305],{"class":173},[167,104025,354],{"class":184},[167,104027,357],{"class":177},[19,104029,1857],{},[26,104031,104032],{"className":161,"code":1860,"language":163,"meta":32,"style":32},[34,104033,104034],{"__ignoreMap":32},[167,104035,104036,104038,104040],{"class":169,"line":170},[167,104037,305],{"class":173},[167,104039,354],{"class":184},[167,104041,1871],{"class":177},[19,104043,1874],{},[26,104045,104046],{"className":161,"code":1795,"language":163,"meta":32,"style":32},[34,104047,104048],{"__ignoreMap":32},[167,104049,104050,104052],{"class":169,"line":170},[167,104051,305],{"class":173},[167,104053,717],{"class":177},[19,104055,1887,104056,1891,104058,423],{},[34,104057,1890],{},[34,104059,1894],{},[19,104061,1897],{},[40,104063,104064,104070,104076,104086],{},[43,104065,1902,104066,1905,104068,1909],{},[34,104067,1427],{},[34,104069,1908],{},[43,104071,1902,104072,1905,104074,1917],{},[34,104073,1314],{},[34,104075,1916],{},[43,104077,1902,104078,1905,104080,1925,104082,1928,104084,423],{},[34,104079,1310],{},[34,104081,1924],{},[34,104083,1890],{},[34,104085,1931],{},[43,104087,1934,104088,1938],{},[34,104089,1937],{},[19,104091,1941],{},[14,104093,1945],{"id":1944},[494,104095,104096],{"id":1948},[34,104097,1951],{},[19,104099,1954],{},[26,104101,104102],{"className":161,"code":1957,"language":163,"meta":32,"style":32},[34,104103,104104],{"__ignoreMap":32},[167,104105,104106,104108,104110],{"class":169,"line":170},[167,104107,331],{"class":173},[167,104109,181],{"class":177},[167,104111,1968],{"class":177},[494,104113,1972],{"id":1971},[19,104115,1975],{},[26,104117,104118],{"className":161,"code":1978,"language":163,"meta":32,"style":32},[34,104119,104120],{"__ignoreMap":32},[167,104121,104122,104124,104126,104128,104130,104132,104134,104136,104138,104140,104142],{"class":169,"line":170},[167,104123,174],{"class":173},[167,104125,178],{"class":177},[167,104127,181],{"class":177},[167,104129,185],{"class":184},[167,104131,1993],{"class":177},[167,104133,214],{"class":177},[167,104135,1998],{"class":177},[167,104137,236],{"class":177},[167,104139,2003],{"class":177},[167,104141,250],{"class":177},[167,104143,2008],{"class":177},[494,104145,2012],{"id":2011},[19,104147,2015],{},[40,104149,104150,104152,104154,104158],{},[43,104151,2020],{},[43,104153,2023],{},[43,104155,2026,104156],{},[34,104157,2029],{},[43,104159,104160,2034,104162,2038],{},[34,104161,517],{},[34,104163,2037],{},[494,104165,104166,2044,104168],{"id":2041},[34,104167,1890],{},[34,104169,1894],{},[19,104171,2049],{},[26,104173,104175],{"className":104174,"code":2053,"language":31,"meta":32},[29],[34,104176,2053],{"__ignoreMap":32},[19,104178,2058,104179,2061],{},[34,104180,1894],{},[494,104182,2064],{"id":2064},[19,104184,2067],{},[40,104186,104187,104191,104195,104199],{},[43,104188,2072,104189],{},[34,104190,2075],{},[43,104192,2078,104193],{},[34,104194,2081],{},[43,104196,2084,104197],{},[34,104198,63],{},[43,104200,2089,104201,2092,104203],{},[34,104202,1834],{},[34,104204,2095],{},[14,104206,2099],{"id":2098},[19,104208,2102],{},[26,104210,104212],{"className":104211,"code":2106,"language":31,"meta":32},[29],[34,104213,2106],{"__ignoreMap":32},[19,104215,2111],{},[2113,104217,2115],{},{"title":32,"searchDepth":191,"depth":191,"links":104219},[104220,104221,104222,104227,104231,104232,104233,104240],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":104223},[104224,104225,104226],{"id":496,"depth":205,"text":497},{"id":604,"depth":205,"text":605},{"id":658,"depth":205,"text":659},{"id":682,"depth":191,"text":683,"children":104228},[104229,104230],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":104234},[104235,104236,104237,104238,104239],{"id":1948,"depth":205,"text":1951},{"id":1971,"depth":205,"text":1972},{"id":2011,"depth":205,"text":2012},{"id":2041,"depth":205,"text":2137},{"id":2064,"depth":205,"text":2064},{"id":2098,"depth":191,"text":2099},{},{"title":5,"description":32},{"id":104244,"title":104245,"body":104246,"description":32,"extension":2140,"meta":105902,"navigation":740,"path":105903,"seo":105904,"stem":105905,"__hash__":105906},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104247,"toc":105878},[104248,104251,104253,104256,104259,104276,104371,104374,104380,104382,104384,104408,104411,104425,104428,104469,104471,104484,104486,104489,104537,104549,104552,104555,104561,104574,104641,104644,104663,104666,104669,104675,104677,104686,104689,104693,104702,104784,104793,104797,104803,104817,104827,104829,105159,105162,105174,105176,105187,105189,105192,105210,105213,105216,105234,105245,105248,105263,105273,105275,105296,105313,105333,105339,105379,105395,105411,105417,105420,105444,105460,105465,105495,105512,105537,105540,105555,105564,105579,105588,105603,105610,105612,105622,105635,105642,105645,105684,105691,105693,105745,105747,105753,105756,105763,105770,105773,105775,105793,105796,105799,105833,105845,105847,105850,105872,105875],[10,104249,104245],{"id":104250},"_2xml-与-mjcf-物理建模基础",[14,104252,17],{"id":16},[19,104254,104255],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104257,104258],{},"本章结束后，你应该能看懂一个简单模型里：",[40,104260,104261,104264,104267,104270,104273],{},[43,104262,104263],{},"地面在哪里。",[43,104265,104266],{},"物体初始位置在哪里。",[43,104268,104269],{},"几何体是什么形状。",[43,104271,104272],{},"哪些 body 可以自由运动。",[43,104274,104275],{},"如何用名字在 Python 里找到 XML 中的对象。",[68,104277,104278,104288],{},[71,104279,104280],{},[74,104281,104282,104285],{},[77,104283,104284],{"align":79},"标签",[77,104286,104287],{"align":79},"作用",[85,104289,104290,104299,104309,104318,104328,104338,104351,104361],{},[74,104291,104292,104296],{},[90,104293,104294],{"align":79},[34,104295,2029],{},[90,104297,104298],{"align":79},"根节点",[74,104300,104301,104306],{},[90,104302,104303],{"align":79},[34,104304,104305],{},"\u003Coption>",[90,104307,104308],{"align":79},"仿真参数",[74,104310,104311,104315],{},[90,104312,104313],{"align":79},[34,104314,2037],{},[90,104316,104317],{"align":79},"世界中的物体",[74,104319,104320,104325],{},[90,104321,104322],{"align":79},[34,104323,104324],{},"\u003Cbody>",[90,104326,104327],{"align":79},"刚体",[74,104329,104330,104335],{},[90,104331,104332],{"align":79},[34,104333,104334],{},"\u003Cgeom>",[90,104336,104337],{"align":79},"几何体、碰撞体、可视体",[74,104339,104340,104348],{},[90,104341,104342,26999,104345],{"align":79},[34,104343,104344],{},"\u003Cjoint>",[34,104346,104347],{},"\u003Cfreejoint>",[90,104349,104350],{"align":79},"关节",[74,104352,104353,104358],{},[90,104354,104355],{"align":79},[34,104356,104357],{},"\u003Csite>",[90,104359,104360],{"align":79},"标记点",[74,104362,104363,104368],{},[90,104364,104365],{"align":79},[34,104366,104367],{},"\u003Cactuator>",[90,104369,104370],{"align":79},"控制器",[19,104372,104373],{},"初学时可以先记住：",[26,104375,104378],{"className":104376,"code":104377,"language":31,"meta":32},[29],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[34,104379,104377],{"__ignoreMap":32},[14,104381,155],{"id":154},[19,104383,158],{},[26,104385,104387],{"className":161,"code":104386,"language":163,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[34,104388,104389],{"__ignoreMap":32},[167,104390,104391,104393,104395,104397,104399,104401,104403,104405],{"class":169,"line":170},[167,104392,174],{"class":173},[167,104394,178],{"class":177},[167,104396,181],{"class":177},[167,104398,185],{"class":184},[167,104400,1993],{"class":177},[167,104402,214],{"class":177},[167,104404,1998],{"class":177},[167,104406,104407],{"class":177}," glfw-devel\n",[19,104409,104410],{},"pip:",[26,104412,104413],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,104414,104415],{"__ignoreMap":32},[167,104416,104417,104419,104421,104423],{"class":169,"line":170},[167,104418,331],{"class":173},[167,104420,181],{"class":177},[167,104422,336],{"class":177},[167,104424,339],{"class":177},[19,104426,104427],{},"conda:",[26,104429,104431],{"className":161,"code":104430,"language":163,"meta":32,"style":32},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[34,104432,104433,104450,104459],{"__ignoreMap":32},[167,104434,104435,104437,104439,104441,104444,104446,104448],{"class":169,"line":170},[167,104436,373],{"class":173},[167,104438,376],{"class":177},[167,104440,379],{"class":184},[167,104442,104443],{"class":177}," mujoco-xml",[167,104445,385],{"class":177},[167,104447,388],{"class":184},[167,104449,391],{"class":184},[167,104451,104452,104454,104456],{"class":169,"line":191},[167,104453,373],{"class":173},[167,104455,398],{"class":177},[167,104457,104458],{"class":177}," mujoco-xml\n",[167,104460,104461,104463,104465,104467],{"class":169,"line":205},[167,104462,331],{"class":173},[167,104464,181],{"class":177},[167,104466,336],{"class":177},[167,104468,339],{"class":177},[19,104470,414],{},[40,104472,104473,104476,104481],{},[43,104474,104475],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[43,104477,104478,104479,423],{},"本章使用基础标签，适用于 ",[34,104480,438],{},[43,104482,104483],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104485,457],{"id":456},[19,104487,104488],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,104490,104492],{"className":503,"code":104491,"language":505,"meta":32,"style":32},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[34,104493,104494,104508,104516,104521,104529],{"__ignoreMap":32},[167,104495,104496,104498,104500,104502,104504,104506],{"class":169,"line":170},[167,104497,513],{"class":512},[167,104499,432],{"class":516},[167,104501,1261],{"class":173},[167,104503,523],{"class":512},[167,104505,64668],{"class":177},[167,104507,537],{"class":512},[167,104509,104510,104512,104514],{"class":169,"line":191},[167,104511,542],{"class":512},[167,104513,1327],{"class":516},[167,104515,537],{"class":512},[167,104517,104518],{"class":169,"line":205},[167,104519,104520],{"class":512},"    ...\n",[167,104522,104523,104525,104527],{"class":169,"line":219},[167,104524,54412],{"class":512},[167,104526,1327],{"class":516},[167,104528,537],{"class":512},[167,104530,104531,104533,104535],{"class":169,"line":230},[167,104532,575],{"class":512},[167,104534,432],{"class":516},[167,104536,537],{"class":512},[19,104538,104539,104541,104542,104544,104545,104548],{},[34,104540,517],{}," 表示刚体。",[34,104543,545],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[34,104546,104547],{},"joint"," 表示刚体相对父刚体如何运动。",[494,104550,104551],{"id":104551},"层级结构非常重要",[19,104553,104554],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,104556,104559],{"className":104557,"code":104558,"language":31,"meta":32},[29],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[34,104560,104558],{"__ignoreMap":32},[19,104562,104563,429,104566,104569,104570,104573],{},[34,104564,104565],{},"red_box_geom",[34,104567,104568],{},"box_center"," 都属于 ",[34,104571,104572],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,104575,104577],{"className":503,"code":104576,"language":505,"meta":32,"style":32},"\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",[34,104578,104579,104599,104613,104633],{"__ignoreMap":32},[167,104580,104581,104583,104585,104587,104589,104591,104593,104595,104597],{"class":169,"line":170},[167,104582,513],{"class":512},[167,104584,517],{"class":516},[167,104586,520],{"class":173},[167,104588,523],{"class":512},[167,104590,526],{"class":177},[167,104592,529],{"class":173},[167,104594,523],{"class":512},[167,104596,534],{"class":177},[167,104598,537],{"class":512},[167,104600,104601,104603,104605,104607,104609,104611],{"class":169,"line":191},[167,104602,542],{"class":512},[167,104604,1103],{"class":516},[167,104606,520],{"class":173},[167,104608,523],{"class":512},[167,104610,1449],{"class":177},[167,104612,570],{"class":512},[167,104614,104615,104617,104619,104621,104623,104625,104627,104629,104631],{"class":169,"line":205},[167,104616,542],{"class":512},[167,104618,545],{"class":516},[167,104620,555],{"class":173},[167,104622,523],{"class":512},[167,104624,526],{"class":177},[167,104626,562],{"class":173},[167,104628,523],{"class":512},[167,104630,567],{"class":177},[167,104632,570],{"class":512},[167,104634,104635,104637,104639],{"class":169,"line":219},[167,104636,575],{"class":512},[167,104638,517],{"class":516},[167,104640,537],{"class":512},[19,104642,104643],{},"含义:",[40,104645,104646,104652,104657,104660],{},[43,104647,104648,104649,104651],{},"创建名为 ",[34,104650,590],{}," 的刚体",[43,104653,104654,104655],{},"初始位置在世界坐标 ",[34,104656,597],{},[43,104658,104659],{},"它有一个自由关节",[43,104661,104662],{},"它有一个盒子几何体",[494,104664,104665],{"id":104665},"坐标怎么理解",[19,104667,104668],{},"MuJoCo 默认使用三维坐标：",[26,104670,104673],{"className":104671,"code":104672,"language":31,"meta":32},[29],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[34,104674,104672],{"__ignoreMap":32},[19,104676,16660],{},[26,104678,104680],{"className":503,"code":104679,"language":505,"meta":32,"style":32},"pos=\"0 0 1\"\n",[34,104681,104682],{"__ignoreMap":32},[167,104683,104684],{"class":169,"line":170},[167,104685,104679],{"class":512},[19,104687,104688],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[494,104690,104692],{"id":104691},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104694,104695,104696,84517,104699,104701],{},"不同 ",[34,104697,104698],{},"type",[34,104700,33501],{}," 含义不同：",[68,104703,104704,104719],{},[71,104705,104706],{},[74,104707,104708,104712,104717],{},[77,104709,104710],{"align":79},[34,104711,104698],{},[77,104713,104714,104716],{"align":79},[34,104715,33501],{}," 示例",[77,104718,83],{"align":79},[85,104720,104721,104735,104750,104769],{},[74,104722,104723,104727,104732],{},[90,104724,104725],{"align":79},[34,104726,590],{},[90,104728,104729],{"align":79},[34,104730,104731],{},"size=\"0.1 0.2 0.3\"",[90,104733,104734],{"align":79},"x\u002Fy\u002Fz 半边长，不是完整长度",[74,104736,104737,104742,104747],{},[90,104738,104739],{"align":79},[34,104740,104741],{},"sphere",[90,104743,104744],{"align":79},[34,104745,104746],{},"size=\"0.1\"",[90,104748,104749],{"align":79},"球半径",[74,104751,104752,104757,104762],{},[90,104753,104754],{"align":79},[34,104755,104756],{},"capsule",[90,104758,104759],{"align":79},[34,104760,104761],{},"size=\"0.03\"",[90,104763,104764,104765,104768],{"align":79},"胶囊半径，长度常用 ",[34,104766,104767],{},"fromto"," 指定",[74,104770,104771,104776,104781],{},[90,104772,104773],{"align":79},[34,104774,104775],{},"plane",[90,104777,104778],{"align":79},[34,104779,104780],{},"size=\"3 3 0.1\"",[90,104782,104783],{"align":79},"可视平面大小，通常当地面",[19,104785,104786,104787,104789,104790,104792],{},"最容易踩坑的是 box：",[34,104788,1513],{}," 表示边长大约是 ",[34,104791,34041],{},"，因为 MuJoCo 用的是半边长。",[494,104794,104796],{"id":104795},"site-是什么","site 是什么",[19,104798,104799,104802],{},[34,104800,104801],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[40,104804,104805,104808,104811,104814],{},[43,104806,104807],{},"标记机械臂末端。",[43,104809,104810],{},"标记目标位置。",[43,104812,104813],{},"放传感器或相机参考点。",[43,104815,104816],{},"在 Python 中读取某个关键点的世界坐标。",[19,104818,104819,104820,429,104823,104826],{},"在后面的 Reacher 任务中，",[34,104821,104822],{},"tip",[34,104824,104825],{},"target"," 就会用 site 表示。",[14,104828,683],{"id":682},[26,104830,104832],{"className":723,"code":104831,"language":305,"meta":32,"style":32},"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",[34,104833,104834,104840,104850,104854,104858,104866,104871,104875,104879,104883,104888,104892,104897,104902,104907,104912,104916,104920,104924,104928,104932,104936,104948,104960,104968,104972,104987,105002,105006,105019,105034,105047,105060,105064,105080,105084,105088,105099,105111,105123,105135,105139,105143,105155],{"__ignoreMap":32},[167,104835,104836,104838],{"class":169,"line":170},[167,104837,732],{"class":731},[167,104839,735],{"class":512},[167,104841,104842,104844,104846,104848],{"class":169,"line":191},[167,104843,732],{"class":731},[167,104845,33385],{"class":512},[167,104847,33388],{"class":731},[167,104849,33391],{"class":512},[167,104851,104852],{"class":169,"line":205},[167,104853,741],{"emptyLinePlaceholder":740},[167,104855,104856],{"class":169,"line":219},[167,104857,741],{"emptyLinePlaceholder":740},[167,104859,104860,104862,104864],{"class":169,"line":230},[167,104861,750],{"class":184},[167,104863,753],{"class":731},[167,104865,756],{"class":177},[167,104867,104868],{"class":169,"line":241},[167,104869,104870],{"class":177},"\u003Cmujoco model=\"xml_basic\">\n",[167,104872,104873],{"class":169,"line":261},[167,104874,766],{"class":177},[167,104876,104877],{"class":169,"line":773},[167,104878,741],{"emptyLinePlaceholder":740},[167,104880,104881],{"class":169,"line":779},[167,104882,776],{"class":177},[167,104884,104885],{"class":169,"line":785},[167,104886,104887],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[167,104889,104890],{"class":169,"line":790},[167,104891,741],{"emptyLinePlaceholder":740},[167,104893,104894],{"class":169,"line":796},[167,104895,104896],{"class":177},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[167,104898,104899],{"class":169,"line":802},[167,104900,104901],{"class":177},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[167,104903,104904],{"class":169,"line":808},[167,104905,104906],{"class":177},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[167,104908,104909],{"class":169,"line":814},[167,104910,104911],{"class":177},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[167,104913,104914],{"class":169,"line":820},[167,104915,811],{"class":177},[167,104917,104918],{"class":169,"line":826},[167,104919,817],{"class":177},[167,104921,104922],{"class":169,"line":832},[167,104923,823],{"class":177},[167,104925,104926],{"class":169,"line":837},[167,104927,829],{"class":177},[167,104929,104930],{"class":169,"line":842},[167,104931,741],{"emptyLinePlaceholder":740},[167,104933,104934],{"class":169,"line":860},[167,104935,741],{"emptyLinePlaceholder":740},[167,104937,104938,104940,104942,104944,104946],{"class":169,"line":876},[167,104939,845],{"class":731},[167,104941,848],{"class":173},[167,104943,851],{"class":512},[167,104945,854],{"class":184},[167,104947,857],{"class":512},[167,104949,104950,104952,104954,104956,104958],{"class":169,"line":887},[167,104951,863],{"class":512},[167,104953,523],{"class":731},[167,104955,868],{"class":512},[167,104957,750],{"class":184},[167,104959,873],{"class":512},[167,104961,104962,104964,104966],{"class":169,"line":892},[167,104963,879],{"class":512},[167,104965,523],{"class":731},[167,104967,884],{"class":512},[167,104969,104970],{"class":169,"line":907},[167,104971,741],{"emptyLinePlaceholder":740},[167,104973,104974,104977,104979,104982,104985],{"class":169,"line":920},[167,104975,104976],{"class":512},"    box_body_id ",[167,104978,523],{"class":731},[167,104980,104981],{"class":512}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[167,104983,104984],{"class":177},"\"red_box\"",[167,104986,873],{"class":512},[167,104988,104989,104992,104994,104997,105000],{"class":169,"line":933},[167,104990,104991],{"class":512},"    site_id ",[167,104993,523],{"class":731},[167,104995,104996],{"class":512}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[167,104998,104999],{"class":177},"\"box_center\"",[167,105001,873],{"class":512},[167,105003,105004],{"class":169,"line":946},[167,105005,741],{"emptyLinePlaceholder":740},[167,105007,105008,105010,105013,105015,105017],{"class":169,"line":959},[167,105009,5136],{"class":731},[167,105011,105012],{"class":512}," box_body_id ",[167,105014,513],{"class":731},[167,105016,6125],{"class":184},[167,105018,857],{"class":512},[167,105020,105021,105024,105027,105029,105032],{"class":169,"line":964},[167,105022,105023],{"class":731},"        raise",[167,105025,105026],{"class":184}," RuntimeError",[167,105028,898],{"class":512},[167,105030,105031],{"class":177},"\"body red_box not found\"",[167,105033,873],{"class":512},[167,105035,105036,105038,105041,105043,105045],{"class":169,"line":987},[167,105037,5136],{"class":731},[167,105039,105040],{"class":512}," site_id ",[167,105042,513],{"class":731},[167,105044,6125],{"class":184},[167,105046,857],{"class":512},[167,105048,105049,105051,105053,105055,105058],{"class":169,"line":993},[167,105050,105023],{"class":731},[167,105052,105026],{"class":184},[167,105054,898],{"class":512},[167,105056,105057],{"class":177},"\"site box_center not found\"",[167,105059,873],{"class":512},[167,105061,105062],{"class":169,"line":998},[167,105063,741],{"emptyLinePlaceholder":740},[167,105065,105066,105068,105070,105072,105074,105076,105078],{"class":169,"line":1010},[167,105067,967],{"class":731},[167,105069,970],{"class":512},[167,105071,973],{"class":731},[167,105073,976],{"class":184},[167,105075,898],{"class":512},[167,105077,3776],{"class":184},[167,105079,984],{"class":512},[167,105081,105082],{"class":169,"line":1022},[167,105083,990],{"class":512},[167,105085,105086],{"class":169,"line":1027},[167,105087,741],{"emptyLinePlaceholder":740},[167,105089,105090,105092,105094,105097],{"class":169,"line":1032},[167,105091,895],{"class":184},[167,105093,898],{"class":512},[167,105095,105096],{"class":177},"\"simulation time:\"",[167,105098,943],{"class":512},[167,105100,105101,105103,105105,105108],{"class":169,"line":1049},[167,105102,895],{"class":184},[167,105104,898],{"class":512},[167,105106,105107],{"class":177},"\"box body position:\"",[167,105109,105110],{"class":512},", data.xpos[box_body_id].copy())\n",[167,105112,105113,105115,105117,105120],{"class":169,"line":10005},[167,105114,895],{"class":184},[167,105116,898],{"class":512},[167,105118,105119],{"class":177},"\"site position:\"",[167,105121,105122],{"class":512},", data.site_xpos[site_id].copy())\n",[167,105124,105125,105127,105129,105132],{"class":169,"line":10011},[167,105126,895],{"class":184},[167,105128,898],{"class":512},[167,105130,105131],{"class":177},"\"box qpos:\"",[167,105133,105134],{"class":512},", np.array(data.qpos))\n",[167,105136,105137],{"class":169,"line":10038},[167,105138,741],{"emptyLinePlaceholder":740},[167,105140,105141],{"class":169,"line":10043},[167,105142,741],{"emptyLinePlaceholder":740},[167,105144,105145,105147,105149,105151,105153],{"class":169,"line":10049},[167,105146,1035],{"class":731},[167,105148,1038],{"class":184},[167,105150,1041],{"class":731},[167,105152,1044],{"class":177},[167,105154,857],{"class":512},[167,105156,105157],{"class":169,"line":10061},[167,105158,1052],{"class":512},[19,105160,105161],{},"保存为：",[26,105163,105165],{"className":161,"code":105164,"language":163,"meta":32,"style":32},"touch ch2_xml_basic.py\n",[34,105166,105167],{"__ignoreMap":32},[167,105168,105169,105171],{"class":169,"line":170},[167,105170,714],{"class":173},[167,105172,105173],{"class":177}," ch2_xml_basic.py\n",[19,105175,1792],{},[26,105177,105179],{"className":161,"code":105178,"language":163,"meta":32,"style":32},"python ch2_xml_basic.py\n",[34,105180,105181],{"__ignoreMap":32},[167,105182,105183,105185],{"class":169,"line":170},[167,105184,305],{"class":173},[167,105186,105173],{"class":177},[494,105188,1055],{"id":1055},[19,105190,105191],{},"用名字查找 body：",[26,105193,105195],{"className":723,"code":105194,"language":305,"meta":32,"style":32},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[34,105196,105197],{"__ignoreMap":32},[167,105198,105199,105202,105204,105206,105208],{"class":169,"line":170},[167,105200,105201],{"class":512},"box_body_id ",[167,105203,523],{"class":731},[167,105205,104981],{"class":512},[167,105207,104984],{"class":177},[167,105209,873],{"class":512},[19,105211,105212],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105214,105215],{},"用名字查找 site：",[26,105217,105219],{"className":723,"code":105218,"language":305,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[34,105220,105221],{"__ignoreMap":32},[167,105222,105223,105226,105228,105230,105232],{"class":169,"line":170},[167,105224,105225],{"class":512},"site_id ",[167,105227,523],{"class":731},[167,105229,104996],{"class":512},[167,105231,104999],{"class":177},[167,105233,873],{"class":512},[19,105235,105236,105237,105240,105241,105244],{},"注意第二个参数是对象类型。查 body 就用 ",[34,105238,105239],{},"mjOBJ_BODY","，查 site 就用 ",[34,105242,105243],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105246,105247],{},"读取世界坐标：",[26,105249,105251],{"className":723,"code":105250,"language":305,"meta":32,"style":32},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[34,105252,105253,105258],{"__ignoreMap":32},[167,105254,105255],{"class":169,"line":170},[167,105256,105257],{"class":512},"data.xpos[box_body_id]\n",[167,105259,105260],{"class":169,"line":191},[167,105261,105262],{"class":512},"data.site_xpos[site_id]\n",[19,105264,105265,105268,105269,105272],{},[34,105266,105267],{},"xpos"," 是 body 的世界坐标，",[34,105270,105271],{},"site_xpos"," 是 site 的世界坐标。",[494,105274,1194],{"id":1194},[26,105276,105278],{"className":723,"code":105277,"language":305,"meta":32,"style":32},"import mujoco\nimport numpy as np\n",[34,105279,105280,105286],{"__ignoreMap":32},[167,105281,105282,105284],{"class":169,"line":170},[167,105283,732],{"class":731},[167,105285,735],{"class":512},[167,105287,105288,105290,105292,105294],{"class":169,"line":191},[167,105289,732],{"class":731},[167,105291,33385],{"class":512},[167,105293,33388],{"class":731},[167,105295,33391],{"class":512},[19,105297,105298,105299,105302,105303,105306,105307,480,105310,423],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[34,105300,105301],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[34,105304,105305],{},"as np"," 是习惯写法，后面就可以写 ",[34,105308,105309],{},"np.array(...)",[34,105311,105312],{},"np.round(...)",[26,105314,105315],{"className":723,"code":1078,"language":305,"meta":32,"style":32},[34,105316,105317,105325,105329],{"__ignoreMap":32},[167,105318,105319,105321,105323],{"class":169,"line":170},[167,105320,750],{"class":184},[167,105322,753],{"class":731},[167,105324,756],{"class":177},[167,105326,105327],{"class":169,"line":191},[167,105328,1093],{"class":177},[167,105330,105331],{"class":169,"line":205},[167,105332,829],{"class":177},[19,105334,105335,105336,423],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[34,105337,105338],{},"mujoco.MjModel.from_xml_string(XML)",[26,105340,105342],{"className":503,"code":105341,"language":505,"meta":32,"style":32},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,105343,105344],{"__ignoreMap":32},[167,105345,105346,105348,105350,105352,105354,105356,105358,105360,105363,105365,105367,105370,105372,105374,105377],{"class":169,"line":170},[167,105347,513],{"class":512},[167,105349,104801],{"class":516},[167,105351,520],{"class":173},[167,105353,523],{"class":512},[167,105355,104999],{"class":177},[167,105357,529],{"class":173},[167,105359,523],{"class":512},[167,105361,105362],{"class":177},"\"0 0 0\"",[167,105364,562],{"class":173},[167,105366,523],{"class":512},[167,105368,105369],{"class":177},"\"0.03\"",[167,105371,1369],{"class":173},[167,105373,523],{"class":512},[167,105375,105376],{"class":177},"\"0 1 0 1\"",[167,105378,570],{"class":512},[19,105380,105381,105383,105384,105387,105388,105390,105391,105394],{},[34,105382,104801],{}," 是标记点。",[34,105385,105386],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[34,105389,104761],{}," 表示显示出来的小球大小。",[34,105392,105393],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,105396,105397],{"className":723,"code":105194,"language":305,"meta":32,"style":32},[34,105398,105399],{"__ignoreMap":32},[167,105400,105401,105403,105405,105407,105409],{"class":169,"line":170},[167,105402,105201],{"class":512},[167,105404,523],{"class":731},[167,105406,104981],{"class":512},[167,105408,104984],{"class":177},[167,105410,873],{"class":512},[19,105412,105413,105414,105416],{},"这行的作用是：根据名字 ",[34,105415,104984],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105418,105419],{},"拆开看：",[40,105421,105422,105428,105433,105439],{},[43,105423,105424,105427],{},[34,105425,105426],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[43,105429,105430,105432],{},[34,105431,1574],{}," 是被查询的模型。",[43,105434,105435,105438],{},[34,105436,105437],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[43,105440,105441,105443],{},[34,105442,104984],{}," 是 XML 里写的名字。",[26,105445,105446],{"className":723,"code":105218,"language":305,"meta":32,"style":32},[34,105447,105448],{"__ignoreMap":32},[167,105449,105450,105452,105454,105456,105458],{"class":169,"line":170},[167,105451,105225],{"class":512},[167,105453,523],{"class":731},[167,105455,104996],{"class":512},[167,105457,104999],{"class":177},[167,105459,873],{"class":512},[19,105461,105462,105463,423],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[34,105464,104999],{},[26,105466,105468],{"className":723,"code":105467,"language":305,"meta":32,"style":32},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[34,105469,105470,105482],{"__ignoreMap":32},[167,105471,105472,105474,105476,105478,105480],{"class":169,"line":170},[167,105473,1035],{"class":731},[167,105475,105012],{"class":512},[167,105477,513],{"class":731},[167,105479,6125],{"class":184},[167,105481,857],{"class":512},[167,105483,105484,105487,105489,105491,105493],{"class":169,"line":191},[167,105485,105486],{"class":731},"    raise",[167,105488,105026],{"class":184},[167,105490,898],{"class":512},[167,105492,105031],{"class":177},[167,105494,873],{"class":512},[19,105496,105497,105499,105500,105503,105504,105507,105508,105511],{},[34,105498,1035],{}," 是条件判断。",[34,105501,105502],{},"mj_name2id"," 找不到对象时会返回 ",[34,105505,105506],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[34,105509,105510],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,105513,105515],{"className":723,"code":105514,"language":305,"meta":32,"style":32},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[34,105516,105517,105533],{"__ignoreMap":32},[167,105518,105519,105521,105523,105525,105527,105529,105531],{"class":169,"line":170},[167,105520,1168],{"class":731},[167,105522,970],{"class":512},[167,105524,973],{"class":731},[167,105526,976],{"class":184},[167,105528,898],{"class":512},[167,105530,3776],{"class":184},[167,105532,984],{"class":512},[167,105534,105535],{"class":169,"line":191},[167,105536,1185],{"class":512},[19,105538,105539],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,105541,105543],{"className":723,"code":105542,"language":305,"meta":32,"style":32},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[34,105544,105545],{"__ignoreMap":32},[167,105546,105547,105549,105551,105553],{"class":169,"line":170},[167,105548,1606],{"class":184},[167,105550,898],{"class":512},[167,105552,105107],{"class":177},[167,105554,105110],{"class":512},[19,105556,105557,105559,105560,105563],{},[34,105558,492],{}," 保存所有 body 的世界坐标。",[34,105561,105562],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,105565,105567],{"className":723,"code":105566,"language":305,"meta":32,"style":32},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[34,105568,105569],{"__ignoreMap":32},[167,105570,105571,105573,105575,105577],{"class":169,"line":170},[167,105572,1606],{"class":184},[167,105574,898],{"class":512},[167,105576,105119],{"class":177},[167,105578,105122],{"class":512},[19,105580,105581,105584,105585,105587],{},[34,105582,105583],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[34,105586,104568],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,105589,105591],{"className":723,"code":105590,"language":305,"meta":32,"style":32},"print(\"box qpos:\", np.array(data.qpos))\n",[34,105592,105593],{"__ignoreMap":32},[167,105594,105595,105597,105599,105601],{"class":169,"line":170},[167,105596,1606],{"class":184},[167,105598,898],{"class":512},[167,105600,105131],{"class":177},[167,105602,105134],{"class":512},[19,105604,105605,105606,105609],{},"这里打印广义位置数组。",[34,105607,105608],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105611,1807],{"id":1806},[19,105613,105614,105615,105618,105619,423],{},"程序会输出 ",[34,105616,105617],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[34,105620,105621],{},"qpos",[19,105623,105624,105626,105627,105630,105631,105634],{},[34,105625,105562],{}," 是 body 的世界坐标位置。",[34,105628,105629],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[34,105632,105633],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105636,84209,105637,84517,105639,105641],{},[34,105638,104568],{},[34,105640,105386],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105643,105644],{},"如果你把 site 改成：",[26,105646,105648],{"className":503,"code":105647,"language":505,"meta":32,"style":32},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,105649,105650],{"__ignoreMap":32},[167,105651,105652,105654,105656,105658,105660,105663,105665,105667,105670,105672,105674,105676,105678,105680,105682],{"class":169,"line":170},[167,105653,513],{"class":512},[167,105655,104801],{"class":516},[167,105657,520],{"class":173},[167,105659,523],{"class":512},[167,105661,105662],{"class":177},"\"box_top\"",[167,105664,529],{"class":173},[167,105666,523],{"class":512},[167,105668,105669],{"class":177},"\"0 0 0.15\"",[167,105671,562],{"class":173},[167,105673,523],{"class":512},[167,105675,105369],{"class":177},[167,105677,1369],{"class":173},[167,105679,523],{"class":512},[167,105681,105376],{"class":177},[167,105683,570],{"class":512},[19,105685,105686,105687,105690],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[34,105688,105689],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105692,1839],{"id":1838},[40,105694,105695,105704,105707,105714,105720,105731],{},[43,105696,1902,105697,105699,105700,1905,105702,423],{},[34,105698,104572],{}," 的初始高度从 ",[34,105701,2418],{},[34,105703,2287],{},[43,105705,105706],{},"重新运行程序。",[43,105708,105709,105710,105713],{},"观察 ",[34,105711,105712],{},"box qpos"," 和最终位置是否变化。",[43,105715,105716,105717,105719],{},"故意把 ",[34,105718,104801],{}," 名称改错，确认程序能报错。",[43,105721,1902,105722,105724,105725,1905,105727,105730],{},[34,105723,545],{}," 的颜色 ",[34,105726,1521],{},[34,105728,105729],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[43,105732,1902,105733,84517,105735,1905,105738,105741,105742,105744],{},[34,105734,104568],{},[34,105736,105737],{},"pos",[34,105739,105740],{},"0 0 0.2","，观察 ",[34,105743,105689],{}," 如何变化。",[14,105746,1945],{"id":1944},[494,105748,105750],{"id":105749},"xml-error-schema-violation",[34,105751,105752],{},"XML Error: Schema violation",[19,105754,105755],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[494,105757,105759,83277,105761],{"id":105758},"mj_name2id-返回-1",[34,105760,105502],{},[34,105762,105506],{},[19,105764,105765,105766,105769],{},"说明名字没有找到。检查 XML 中 ",[34,105767,105768],{},"name=\"...\"","，并确认对象类型正确。",[494,105771,105772],{"id":105772},"物体不下落",[19,105774,2015],{},[40,105776,105777,105782,105787],{},[43,105778,105779,105780],{},"body 是否有 ",[34,105781,1103],{},[43,105783,105784,105785],{},"gravity 是否为 ",[34,105786,2081],{},[43,105788,105789,105790,105792],{},"body 是否被固定在 ",[34,105791,1327],{}," 中",[494,105794,105795],{"id":105795},"坐标看起来不符合预期",[19,105797,105798],{},"先区分两种坐标：",[68,105800,105801,105810],{},[71,105802,105803],{},[74,105804,105805,105808],{},[77,105806,105807],{"align":79},"坐标",[77,105809,83],{"align":79},[85,105811,105812,105822],{},[74,105813,105814,105819],{},[90,105815,105816,105817],{"align":79},"XML 里的 ",[34,105818,105737],{},[90,105820,105821],{"align":79},"相对父 body 的局部坐标",[74,105823,105824,105830],{},[90,105825,105826,26999,105828],{"align":79},[34,105827,492],{},[34,105829,105583],{},[90,105831,105832],{"align":79},"仿真更新后的世界坐标",[19,105834,105835,105836,105838,105839,449,105842,105844],{},"如果你修改了 ",[34,105837,483],{},"，但还没调用 ",[34,105840,105841],{},"mj_forward",[34,105843,644],{},"，世界坐标可能还没有更新。",[14,105846,2099],{"id":2098},[19,105848,105849],{},"MJCF 建模先掌握四件事：",[40,105851,105852,105857,105862,105867],{},[43,105853,105854,105856],{},[34,105855,517],{}," 表示刚体层级。",[43,105858,105859,105861],{},[34,105860,545],{}," 表示形状、碰撞和质量。",[43,105863,105864,105866],{},[34,105865,104547],{}," 决定 body 能不能动、怎么动。",[43,105868,105869,105871],{},[34,105870,104801],{}," 用来标记关键点，方便 Python 读取位置。",[19,105873,105874],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2113,105876,105877],{},"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":32,"searchDepth":191,"depth":191,"links":105879},[105880,105881,105882,105888,105892,105893,105894,105901],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":105883},[105884,105885,105886,105887],{"id":104551,"depth":205,"text":104551},{"id":104665,"depth":205,"text":104665},{"id":104691,"depth":205,"text":104692},{"id":104795,"depth":205,"text":104796},{"id":682,"depth":191,"text":683,"children":105889},[105890,105891],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":105895},[105896,105897,105899,105900],{"id":105749,"depth":205,"text":105752},{"id":105758,"depth":205,"text":105898},"mj_name2id 返回 -1",{"id":105772,"depth":205,"text":105772},{"id":105795,"depth":205,"text":105795},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104245,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105908,"title":105909,"body":105910,"description":32,"extension":2140,"meta":107405,"navigation":740,"path":107406,"seo":107407,"stem":107408,"__hash__":107409},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105911,"toc":107377},[105912,105915,105917,105920,105923,105961,105964,105970,105973,105975,105977,106004,106006,106020,106022,106063,106065,106089,106091,106094,106103,106112,106115,106124,106132,106141,106144,106154,106157,106209,106216,106222,106230,106278,106281,106300,106303,106311,106315,106324,106357,106359,106707,106709,106721,106723,106734,106736,106739,106760,106766,106769,106794,106804,106807,106815,106818,106821,106842,106853,106855,106875,106878,106899,106908,106927,106933,106958,106961,106975,106982,107006,107009,107017,107026,107042,107054,107062,107071,107073,107076,107100,107105,107108,107130,107132,107171,107173,107180,107182,107190,107193,107196,107208,107249,107256,107267,107274,107277,107326,107329,107332,107338,107340,107345,107371,107374],[10,105913,105909],{"id":105914},"_3python-控制接口读取状态与推进仿真",[14,105916,17],{"id":16},[19,105918,105919],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105921,105922],{},"你将学习:",[40,105924,105925,105930,105935,105939,105944,105955],{},[43,105926,105927],{},[34,105928,105929],{},"MjModel.from_xml_string",[43,105931,105932],{},[34,105933,105934],{},"MjData(model)",[43,105936,105937],{},[34,105938,644],{},[43,105940,105941],{},[34,105942,105943],{},"mj_resetData",[43,105945,105946,105947,480,105949,480,105952],{},"读取 ",[34,105948,105621],{},[34,105950,105951],{},"qvel",[34,105953,105954],{},"ctrl",[43,105956,105957,105958],{},"使用 ",[34,105959,105960],{},"model.opt.timestep",[19,105962,105963],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,105965,105968],{"className":105966,"code":105967,"language":31,"meta":32},[29],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[34,105969,105967],{"__ignoreMap":32},[19,105971,105972],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105974,155],{"id":154},[19,105976,158],{},[26,105978,105980],{"className":161,"code":105979,"language":163,"meta":32,"style":32},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[34,105981,105982],{"__ignoreMap":32},[167,105983,105984,105986,105988,105990,105992,105995,105997,105999,106001],{"class":169,"line":170},[167,105985,174],{"class":173},[167,105987,178],{"class":177},[167,105989,181],{"class":177},[167,105991,185],{"class":184},[167,105993,105994],{"class":177}," python3",[167,105996,197],{"class":177},[167,105998,1993],{"class":177},[167,106000,214],{"class":177},[167,106002,106003],{"class":177}," glfw\n",[19,106005,104410],{},[26,106007,106008],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,106009,106010],{"__ignoreMap":32},[167,106011,106012,106014,106016,106018],{"class":169,"line":170},[167,106013,331],{"class":173},[167,106015,181],{"class":177},[167,106017,336],{"class":177},[167,106019,339],{"class":177},[19,106021,104427],{},[26,106023,106025],{"className":161,"code":106024,"language":163,"meta":32,"style":32},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[34,106026,106027,106044,106053],{"__ignoreMap":32},[167,106028,106029,106031,106033,106035,106038,106040,106042],{"class":169,"line":170},[167,106030,373],{"class":173},[167,106032,376],{"class":177},[167,106034,379],{"class":184},[167,106036,106037],{"class":177}," mujoco-python-api",[167,106039,385],{"class":177},[167,106041,388],{"class":184},[167,106043,391],{"class":184},[167,106045,106046,106048,106050],{"class":169,"line":191},[167,106047,373],{"class":173},[167,106049,398],{"class":177},[167,106051,106052],{"class":177}," mujoco-python-api\n",[167,106054,106055,106057,106059,106061],{"class":169,"line":205},[167,106056,331],{"class":173},[167,106058,181],{"class":177},[167,106060,336],{"class":177},[167,106062,339],{"class":177},[19,106064,414],{},[40,106066,106067,106074,106083],{},[43,106068,106069,429,106071,106073],{},[34,106070,53],{},[34,106072,58],{}," 是官方 Python bindings 的类名。",[43,106075,106076,106077,106080,106081,423],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[34,106078,106079],{},"mjModel"," 在 Python 中是 ",[34,106082,94],{},[43,106084,106085,106086,423],{},"不要使用 ",[34,106087,106088],{},"sim = mujoco_py.MjSim(...)",[14,106090,457],{"id":456},[19,106092,106093],{},"仿真推进核心代码:",[26,106095,106097],{"className":723,"code":106096,"language":305,"meta":32,"style":32},"mujoco.mj_step(model, data)\n",[34,106098,106099],{"__ignoreMap":32},[167,106100,106101],{"class":169,"line":170},[167,106102,106096],{"class":512},[19,106104,106105,106106,480,106108,480,106110,423],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[34,106107,483],{},[34,106109,486],{},[34,106111,479],{},[19,106113,106114],{},"重置仿真:",[26,106116,106118],{"className":723,"code":106117,"language":305,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\n",[34,106119,106120],{"__ignoreMap":32},[167,106121,106122],{"class":169,"line":170},[167,106123,106117],{"class":512},[19,106125,106126,106127,449,106129,106131],{},"如果手动修改了 ",[34,106128,483],{},[34,106130,486],{},"，通常应调用:",[26,106133,106135],{"className":723,"code":106134,"language":305,"meta":32,"style":32},"mujoco.mj_forward(model, data)\n",[34,106136,106137],{"__ignoreMap":32},[167,106138,106139],{"class":169,"line":170},[167,106140,106134],{"class":512},[19,106142,106143],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[494,106145,106147,480,106149,480,106151,106153],{"id":106146},"qposqvelctrl-是什么",[34,106148,105621],{},[34,106150,105951],{},[34,106152,105954],{}," 是什么",[19,106155,106156],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[68,106158,106159,106171],{},[71,106160,106161],{},[74,106162,106163,106166,106168],{},[77,106164,106165],{"align":79},"字段",[77,106167,83],{"align":79},[77,106169,106170],{"align":79},"谁来修改",[85,106172,106173,106185,106197],{},[74,106174,106175,106179,106182],{},[90,106176,106177],{"align":79},[34,106178,483],{},[90,106180,106181],{"align":79},"广义位置，例如小车位置、关节角、自由物体位置姿态",[90,106183,106184],{"align":79},"MuJoCo 更新，也可以手动设置初始状态",[74,106186,106187,106191,106194],{},[90,106188,106189],{"align":79},[34,106190,486],{},[90,106192,106193],{"align":79},"广义速度，例如小车速度、关节角速度",[90,106195,106196],{"align":79},"MuJoCo 更新，也可以手动清零",[74,106198,106199,106203,106206],{},[90,106200,106201],{"align":79},[34,106202,489],{},[90,106204,106205],{"align":79},"actuator 的控制输入",[90,106207,106208],{"align":79},"主要由你的控制代码写入",[19,106210,11053,106211,429,106213,106215],{},[34,106212,105621],{},[34,106214,105951],{}," 不一定同维。自由刚体就是典型例子：",[26,106217,106220],{"className":106218,"code":106219,"language":31,"meta":32},[29],"freejoint: qpos 7 维，qvel 6 维\n",[34,106221,106219],{"__ignoreMap":32},[494,106223,106225,429,106227,106229],{"id":106224},"mj_step-和-mj_forward-的区别",[34,106226,644],{},[34,106228,105841],{}," 的区别",[68,106231,106232,106245],{},[71,106233,106234],{},[74,106235,106236,106239,106242],{},[77,106237,106238],{"align":79},"函数",[77,106240,106241],{"align":79},"是否推进时间",[77,106243,106244],{"align":79},"什么时候用",[85,106246,106247,106260],{},[74,106248,106249,106254,106257],{},[90,106250,106251],{"align":79},[34,106252,106253],{},"mj_step(model, data)",[90,106255,106256],{"align":79},"是",[90,106258,106259],{"align":79},"正常仿真循环，每调用一次前进一步",[74,106261,106262,106267,106270],{},[90,106263,106264],{"align":79},[34,106265,106266],{},"mj_forward(model, data)",[90,106268,106269],{"align":79},"否",[90,106271,106272,106273,480,106275,106277],{"align":79},"手动改了 ",[34,106274,105621],{},[34,106276,105951],{}," 后，刷新派生量",[19,106279,106280],{},"例如你写：",[26,106282,106284],{"className":723,"code":106283,"language":305,"meta":32,"style":32},"data.qpos[2] = 2.0\n",[34,106285,106286],{"__ignoreMap":32},[167,106287,106288,106291,106293,106295,106297],{"class":169,"line":170},[167,106289,106290],{"class":512},"data.qpos[",[167,106292,2287],{"class":184},[167,106294,6475],{"class":512},[167,106296,523],{"class":731},[167,106298,106299],{"class":184}," 2.0\n",[19,106301,106302],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,106304,106305],{"className":723,"code":106134,"language":305,"meta":32,"style":32},[34,106306,106307],{"__ignoreMap":32},[167,106308,106309],{"class":169,"line":170},[167,106310,106134],{"class":512},[494,106312,106314],{"id":106313},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106316,106317,106320,106321,106323],{},[34,106318,106319],{},"mujoco.mj_resetData(model, data)"," 会把 ",[34,106322,1150],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,106325,106327],{"className":723,"code":106326,"language":305,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[34,106328,106329,106333,106343,106353],{"__ignoreMap":32},[167,106330,106331],{"class":169,"line":170},[167,106332,106117],{"class":512},[167,106334,106335,106338,106340],{"class":169,"line":191},[167,106336,106337],{"class":512},"data.qpos[:] ",[167,106339,523],{"class":731},[167,106341,106342],{"class":512}," random_qpos\n",[167,106344,106345,106348,106350],{"class":169,"line":205},[167,106346,106347],{"class":512},"data.qvel[:] ",[167,106349,523],{"class":731},[167,106351,106352],{"class":184}," 0.0\n",[167,106354,106355],{"class":169,"line":219},[167,106356,106134],{"class":512},[14,106358,683],{"id":682},[26,106360,106362],{"className":723,"code":106361,"language":305,"meta":32,"style":32},"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",[34,106363,106364,106370,106380,106384,106388,106396,106401,106405,106409,106413,106418,106422,106427,106432,106437,106441,106445,106449,106453,106457,106461,106480,106487,106499,106510,106526,106542,106546,106550,106562,106574,106582,106586,106597,106601,106617,106621,106625,106634,106638,106643,106652,106656,106669,106674,106683,106687,106691,106703],{"__ignoreMap":32},[167,106365,106366,106368],{"class":169,"line":170},[167,106367,732],{"class":731},[167,106369,735],{"class":512},[167,106371,106372,106374,106376,106378],{"class":169,"line":191},[167,106373,732],{"class":731},[167,106375,33385],{"class":512},[167,106377,33388],{"class":731},[167,106379,33391],{"class":512},[167,106381,106382],{"class":169,"line":205},[167,106383,741],{"emptyLinePlaceholder":740},[167,106385,106386],{"class":169,"line":219},[167,106387,741],{"emptyLinePlaceholder":740},[167,106389,106390,106392,106394],{"class":169,"line":230},[167,106391,750],{"class":184},[167,106393,753],{"class":731},[167,106395,756],{"class":177},[167,106397,106398],{"class":169,"line":241},[167,106399,106400],{"class":177},"\u003Cmujoco model=\"state_api\">\n",[167,106402,106403],{"class":169,"line":261},[167,106404,766],{"class":177},[167,106406,106407],{"class":169,"line":773},[167,106408,741],{"emptyLinePlaceholder":740},[167,106410,106411],{"class":169,"line":779},[167,106412,776],{"class":177},[167,106414,106415],{"class":169,"line":785},[167,106416,106417],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[167,106419,106420],{"class":169,"line":790},[167,106421,741],{"emptyLinePlaceholder":740},[167,106423,106424],{"class":169,"line":796},[167,106425,106426],{"class":177},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[167,106428,106429],{"class":169,"line":802},[167,106430,106431],{"class":177},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[167,106433,106434],{"class":169,"line":808},[167,106435,106436],{"class":177},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[167,106438,106439],{"class":169,"line":814},[167,106440,811],{"class":177},[167,106442,106443],{"class":169,"line":820},[167,106444,817],{"class":177},[167,106446,106447],{"class":169,"line":826},[167,106448,823],{"class":177},[167,106450,106451],{"class":169,"line":832},[167,106452,829],{"class":177},[167,106454,106455],{"class":169,"line":837},[167,106456,741],{"emptyLinePlaceholder":740},[167,106458,106459],{"class":169,"line":842},[167,106460,741],{"emptyLinePlaceholder":740},[167,106462,106463,106465,106468,106471,106473,106476,106478],{"class":169,"line":860},[167,106464,845],{"class":731},[167,106466,106467],{"class":173}," print_state",[167,106469,106470],{"class":512},"(prefix: ",[167,106472,3368],{"class":184},[167,106474,106475],{"class":512},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[167,106477,854],{"class":184},[167,106479,857],{"class":512},[167,106481,106482,106484],{"class":169,"line":876},[167,106483,895],{"class":184},[167,106485,106486],{"class":512},"(prefix)\n",[167,106488,106489,106491,106493,106496],{"class":169,"line":887},[167,106490,895],{"class":184},[167,106492,898],{"class":512},[167,106494,106495],{"class":177},"\"  timestep:\"",[167,106497,106498],{"class":512},", model.opt.timestep)\n",[167,106500,106501,106503,106505,106508],{"class":169,"line":892},[167,106502,895],{"class":184},[167,106504,898],{"class":512},[167,106506,106507],{"class":177},"\"  time:\"",[167,106509,943],{"class":512},[167,106511,106512,106514,106516,106519,106522,106524],{"class":169,"line":907},[167,106513,895],{"class":184},[167,106515,898],{"class":512},[167,106517,106518],{"class":177},"\"  qpos:\"",[167,106520,106521],{"class":512},", np.round(data.qpos.copy(), ",[167,106523,2494],{"class":184},[167,106525,32505],{"class":512},[167,106527,106528,106530,106532,106535,106538,106540],{"class":169,"line":920},[167,106529,895],{"class":184},[167,106531,898],{"class":512},[167,106533,106534],{"class":177},"\"  qvel:\"",[167,106536,106537],{"class":512},", np.round(data.qvel.copy(), ",[167,106539,2494],{"class":184},[167,106541,32505],{"class":512},[167,106543,106544],{"class":169,"line":933},[167,106545,741],{"emptyLinePlaceholder":740},[167,106547,106548],{"class":169,"line":946},[167,106549,741],{"emptyLinePlaceholder":740},[167,106551,106552,106554,106556,106558,106560],{"class":169,"line":959},[167,106553,845],{"class":731},[167,106555,848],{"class":173},[167,106557,851],{"class":512},[167,106559,854],{"class":184},[167,106561,857],{"class":512},[167,106563,106564,106566,106568,106570,106572],{"class":169,"line":964},[167,106565,863],{"class":512},[167,106567,523],{"class":731},[167,106569,868],{"class":512},[167,106571,750],{"class":184},[167,106573,873],{"class":512},[167,106575,106576,106578,106580],{"class":169,"line":987},[167,106577,879],{"class":512},[167,106579,523],{"class":731},[167,106581,884],{"class":512},[167,106583,106584],{"class":169,"line":993},[167,106585,741],{"emptyLinePlaceholder":740},[167,106587,106588,106591,106594],{"class":169,"line":998},[167,106589,106590],{"class":512},"    print_state(",[167,106592,106593],{"class":177},"\"initial\"",[167,106595,106596],{"class":512},", model, data)\n",[167,106598,106599],{"class":169,"line":1010},[167,106600,741],{"emptyLinePlaceholder":740},[167,106602,106603,106605,106607,106609,106611,106613,106615],{"class":169,"line":1022},[167,106604,967],{"class":731},[167,106606,970],{"class":512},[167,106608,973],{"class":731},[167,106610,976],{"class":184},[167,106612,898],{"class":512},[167,106614,2856],{"class":184},[167,106616,984],{"class":512},[167,106618,106619],{"class":169,"line":1027},[167,106620,990],{"class":512},[167,106622,106623],{"class":169,"line":1032},[167,106624,741],{"emptyLinePlaceholder":740},[167,106626,106627,106629,106632],{"class":169,"line":1049},[167,106628,106590],{"class":512},[167,106630,106631],{"class":177},"\"after 50 steps\"",[167,106633,106596],{"class":512},[167,106635,106636],{"class":169,"line":10005},[167,106637,741],{"emptyLinePlaceholder":740},[167,106639,106640],{"class":169,"line":10011},[167,106641,106642],{"class":512},"    mujoco.mj_resetData(model, data)\n",[167,106644,106645,106647,106650],{"class":169,"line":10038},[167,106646,106590],{"class":512},[167,106648,106649],{"class":177},"\"after reset\"",[167,106651,106596],{"class":512},[167,106653,106654],{"class":169,"line":10043},[167,106655,741],{"emptyLinePlaceholder":740},[167,106657,106658,106661,106663,106665,106667],{"class":169,"line":10049},[167,106659,106660],{"class":512},"    data.qpos[",[167,106662,2287],{"class":184},[167,106664,6475],{"class":512},[167,106666,523],{"class":731},[167,106668,106299],{"class":184},[167,106670,106671],{"class":169,"line":10061},[167,106672,106673],{"class":512},"    mujoco.mj_forward(model, data)\n",[167,106675,106676,106678,106681],{"class":169,"line":10073},[167,106677,106590],{"class":512},[167,106679,106680],{"class":177},"\"after manual qpos edit\"",[167,106682,106596],{"class":512},[167,106684,106685],{"class":169,"line":10085},[167,106686,741],{"emptyLinePlaceholder":740},[167,106688,106689],{"class":169,"line":11744},[167,106690,741],{"emptyLinePlaceholder":740},[167,106692,106693,106695,106697,106699,106701],{"class":169,"line":11769},[167,106694,1035],{"class":731},[167,106696,1038],{"class":184},[167,106698,1041],{"class":731},[167,106700,1044],{"class":177},[167,106702,857],{"class":512},[167,106704,106705],{"class":169,"line":11792},[167,106706,1052],{"class":512},[19,106708,105161],{},[26,106710,106712],{"className":161,"code":106711,"language":163,"meta":32,"style":32},"touch ch3_python_state.py\n",[34,106713,106714],{"__ignoreMap":32},[167,106715,106716,106718],{"class":169,"line":170},[167,106717,714],{"class":173},[167,106719,106720],{"class":177}," ch3_python_state.py\n",[19,106722,1792],{},[26,106724,106726],{"className":161,"code":106725,"language":163,"meta":32,"style":32},"python ch3_python_state.py\n",[34,106727,106728],{"__ignoreMap":32},[167,106729,106730,106732],{"class":169,"line":170},[167,106731,305],{"class":173},[167,106733,106720],{"class":177},[494,106735,1055],{"id":1055},[19,106737,106738],{},"打印状态的函数：",[26,106740,106742],{"className":723,"code":106741,"language":305,"meta":32,"style":32},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[34,106743,106744],{"__ignoreMap":32},[167,106745,106746,106748,106750,106752,106754,106756,106758],{"class":169,"line":170},[167,106747,845],{"class":731},[167,106749,106467],{"class":173},[167,106751,106470],{"class":512},[167,106753,3368],{"class":184},[167,106755,106475],{"class":512},[167,106757,854],{"class":184},[167,106759,857],{"class":512},[19,106761,106762,106763,106765],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[34,106764,1150],{}," 里发生了什么。",[19,106767,106768],{},"推进 50 步：",[26,106770,106772],{"className":723,"code":106771,"language":305,"meta":32,"style":32},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[34,106773,106774,106790],{"__ignoreMap":32},[167,106775,106776,106778,106780,106782,106784,106786,106788],{"class":169,"line":170},[167,106777,1168],{"class":731},[167,106779,970],{"class":512},[167,106781,973],{"class":731},[167,106783,976],{"class":184},[167,106785,898],{"class":512},[167,106787,2856],{"class":184},[167,106789,984],{"class":512},[167,106791,106792],{"class":169,"line":191},[167,106793,1185],{"class":512},[19,106795,106796,106797,106800,106801,106803],{},"由于 ",[34,106798,106799],{},"timestep=0.01","，所以 50 步后时间约为 ",[34,106802,1931],{}," 秒。",[19,106805,106806],{},"重置：",[26,106808,106809],{"className":723,"code":106117,"language":305,"meta":32,"style":32},[34,106810,106811],{"__ignoreMap":32},[167,106812,106813],{"class":169,"line":170},[167,106814,106117],{"class":512},[19,106816,106817],{},"这会把时间、位置、速度恢复到初始状态。",[19,106819,106820],{},"手动改高度：",[26,106822,106824],{"className":723,"code":106823,"language":305,"meta":32,"style":32},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[34,106825,106826,106838],{"__ignoreMap":32},[167,106827,106828,106830,106832,106834,106836],{"class":169,"line":170},[167,106829,106290],{"class":512},[167,106831,2287],{"class":184},[167,106833,6475],{"class":512},[167,106835,523],{"class":731},[167,106837,106299],{"class":184},[167,106839,106840],{"class":169,"line":191},[167,106841,106134],{"class":512},[19,106843,106844,106845,106848,106849,106852],{},"这个例子里 ",[34,106846,106847],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[34,106850,106851],{},"2.0"," 表示把小球放到更高的位置。",[494,106854,1194],{"id":1194},[26,106856,106857],{"className":723,"code":106741,"language":305,"meta":32,"style":32},[34,106858,106859],{"__ignoreMap":32},[167,106860,106861,106863,106865,106867,106869,106871,106873],{"class":169,"line":170},[167,106862,845],{"class":731},[167,106864,106467],{"class":173},[167,106866,106470],{"class":512},[167,106868,3368],{"class":184},[167,106870,106475],{"class":512},[167,106872,854],{"class":184},[167,106874,857],{"class":512},[19,106876,106877],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[40,106879,106880,106889,106894],{},[43,106881,106882,106885,106886,106888],{},[34,106883,106884],{},"prefix","：一段文字，比如 ",[34,106887,106593],{},"，用来说明现在打印的是哪个阶段。",[43,106890,106891,106893],{},[34,106892,1574],{},"：MuJoCo 模型。",[43,106895,106896,106898],{},[34,106897,1150],{},"：MuJoCo 当前状态。",[19,106900,106901,480,106904,106907],{},[34,106902,106903],{},"prefix: str",[34,106905,106906],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,106909,106911],{"className":723,"code":106910,"language":305,"meta":32,"style":32},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[34,106912,106913],{"__ignoreMap":32},[167,106914,106915,106917,106919,106921,106923,106925],{"class":169,"line":170},[167,106916,1606],{"class":184},[167,106918,898],{"class":512},[167,106920,106518],{"class":177},[167,106922,106521],{"class":512},[167,106924,2494],{"class":184},[167,106926,32505],{"class":512},[19,106928,106929,106932],{},[34,106930,106931],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,106934,106936],{"className":723,"code":106935,"language":305,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[34,106937,106938,106950],{"__ignoreMap":32},[167,106939,106940,106942,106944,106946,106948],{"class":169,"line":170},[167,106941,1117],{"class":512},[167,106943,523],{"class":731},[167,106945,868],{"class":512},[167,106947,750],{"class":184},[167,106949,873],{"class":512},[167,106951,106952,106954,106956],{"class":169,"line":191},[167,106953,1141],{"class":512},[167,106955,523],{"class":731},[167,106957,884],{"class":512},[19,106959,106960],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,106962,106964],{"className":723,"code":106963,"language":305,"meta":32,"style":32},"print_state(\"initial\", model, data)\n",[34,106965,106966],{"__ignoreMap":32},[167,106967,106968,106971,106973],{"class":169,"line":170},[167,106969,106970],{"class":512},"print_state(",[167,106972,106593],{"class":177},[167,106974,106596],{"class":512},[19,106976,106977,106978,106981],{},"调用刚才定义的 ",[34,106979,106980],{},"print_state"," 函数，打印初始状态。",[26,106983,106984],{"className":723,"code":106771,"language":305,"meta":32,"style":32},[34,106985,106986,107002],{"__ignoreMap":32},[167,106987,106988,106990,106992,106994,106996,106998,107000],{"class":169,"line":170},[167,106989,1168],{"class":731},[167,106991,970],{"class":512},[167,106993,973],{"class":731},[167,106995,976],{"class":184},[167,106997,898],{"class":512},[167,106999,2856],{"class":184},[167,107001,984],{"class":512},[167,107003,107004],{"class":169,"line":191},[167,107005,1185],{"class":512},[19,107007,107008],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,107010,107011],{"className":723,"code":106117,"language":305,"meta":32,"style":32},[34,107012,107013],{"__ignoreMap":32},[167,107014,107015],{"class":169,"line":170},[167,107016,106117],{"class":512},[19,107018,107019,107020,107022,107023,107025],{},"重置 ",[34,107021,1150],{},"。注意它不会重新创建 ",[34,107024,1574],{},"，因为模型结构没有变，只是状态回到初始值。",[26,107027,107028],{"className":723,"code":106283,"language":305,"meta":32,"style":32},[34,107029,107030],{"__ignoreMap":32},[167,107031,107032,107034,107036,107038,107040],{"class":169,"line":170},[167,107033,106290],{"class":512},[167,107035,2287],{"class":184},[167,107037,6475],{"class":512},[167,107039,523],{"class":731},[167,107041,106299],{"class":184},[19,107043,107044,107045,480,107048,480,107051,107053],{},"这行是“手动改状态”。在 freejoint 中，",[34,107046,107047],{},"qpos[0]",[34,107049,107050],{},"qpos[1]",[34,107052,106847],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,107055,107056],{"className":723,"code":106134,"language":305,"meta":32,"style":32},[34,107057,107058],{"__ignoreMap":32},[167,107059,107060],{"class":169,"line":170},[167,107061,106134],{"class":512},[19,107063,107064,107065,107067,107068,107070],{},"手动改完 ",[34,107066,105621],{}," 后，调用 ",[34,107069,105841],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107072,1807],{"id":1806},[19,107074,107075],{},"你会看到:",[40,107077,107078,107083,107088,107091],{},[43,107079,107080,107081],{},"初始时间为 ",[34,107082,1154],{},[43,107084,107085,107086],{},"50 步后时间约为 ",[34,107087,1931],{},[43,107089,107090],{},"reset 后状态恢复",[43,107092,107093,107094,107097,107098],{},"手动修改 ",[34,107095,107096],{},"data.qpos[2]"," 后，小球高度变为 ",[34,107099,106851],{},[19,107101,107102,107104],{},[34,107103,106847],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107106,107107],{},"输出里可以重点看三件事：",[40,107109,107110,107118,107123],{},[43,107111,107112,107114,107115,107117],{},[34,107113,4431],{}," 是否随着 ",[34,107116,644],{}," 增加。",[43,107119,107120,107122],{},[34,107121,105621],{}," 的 z 坐标是否因为下落而变化。",[43,107124,107125,107127,107128,423],{},[34,107126,105943],{}," 后时间是否回到 ",[34,107129,1154],{},[14,107131,1839],{"id":1838},[40,107133,107134,107140,107146,107152,107155,107164],{},[43,107135,107136,107137,423],{},"修改 timestep 为 ",[34,107138,107139],{},"0.005",[43,107141,107142,107143,423],{},"重新运行，检查 50 步后时间是否约为 ",[34,107144,107145],{},"0.25",[43,107147,107148,107149,423],{},"修改重力为 ",[34,107150,107151],{},"0 0 -1.0",[43,107153,107154],{},"观察小球下降速度是否变慢。",[43,107156,1902,107157,1905,107160,107163],{},[34,107158,107159],{},"data.qpos[2] = 2.0",[34,107161,107162],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[43,107165,107166,107167,107170],{},"注释掉 ",[34,107168,107169],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107172,1945],{"id":1944},[494,107174,107176,107177,107179],{"id":107175},"修改-dataqpos-后位置没有更新","修改 ",[34,107178,483],{}," 后位置没有更新",[19,107181,1954],{},[26,107183,107184],{"className":723,"code":106134,"language":305,"meta":32,"style":32},[34,107185,107186],{"__ignoreMap":32},[167,107187,107188],{"class":169,"line":170},[167,107189,106134],{"class":512},[494,107191,107192],{"id":107192},"数组维度看不懂",[19,107194,107195],{},"打印模型维度:",[26,107197,107199],{"className":723,"code":107198,"language":305,"meta":32,"style":32},"print(model.nq, model.nv, model.nu)\n",[34,107200,107201],{"__ignoreMap":32},[167,107202,107203,107205],{"class":169,"line":170},[167,107204,1606],{"class":184},[167,107206,107207],{"class":512},"(model.nq, model.nv, model.nu)\n",[68,107209,107210,107218],{},[71,107211,107212],{},[74,107213,107214,107216],{},[77,107215,106165],{"align":79},[77,107217,83],{"align":79},[85,107219,107220,107230,107240],{},[74,107221,107222,107227],{},[90,107223,107224],{"align":79},[34,107225,107226],{},"nq",[90,107228,107229],{"align":79},"位置变量数量",[74,107231,107232,107237],{},[90,107233,107234],{"align":79},[34,107235,107236],{},"nv",[90,107238,107239],{"align":79},"速度变量数量",[74,107241,107242,107246],{},[90,107243,107244],{"align":79},[34,107245,1652],{},[90,107247,107248],{"align":79},"控制输入数量",[494,107250,107252,107253,107255],{"id":107251},"误以为-qpos-一定等于关节数","误以为 ",[34,107254,105621],{}," 一定等于关节数",[19,107257,107258,107259,84517,107261,107263,107264,107266],{},"不是。例如 ",[34,107260,1103],{},[34,107262,105621],{}," 是 7 维，但 ",[34,107265,105951],{}," 是 6 维。",[494,107268,107270,107271,107273],{"id":107269},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[34,107272,105621],{}," 的第几位",[19,107275,107276],{},"初学时可以先打印：",[26,107278,107280],{"className":723,"code":107279,"language":305,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[34,107281,107282,107292,107302,107314],{"__ignoreMap":32},[167,107283,107284,107286,107288,107290],{"class":169,"line":170},[167,107285,1606],{"class":184},[167,107287,898],{"class":512},[167,107289,901],{"class":177},[167,107291,904],{"class":512},[167,107293,107294,107296,107298,107300],{"class":169,"line":191},[167,107295,1606],{"class":184},[167,107297,898],{"class":512},[167,107299,914],{"class":177},[167,107301,917],{"class":512},[167,107303,107304,107306,107308,107311],{"class":169,"line":205},[167,107305,1606],{"class":184},[167,107307,898],{"class":512},[167,107309,107310],{"class":177},"\"qpos:\"",[167,107312,107313],{"class":512},", data.qpos)\n",[167,107315,107316,107318,107320,107323],{"class":169,"line":219},[167,107317,1606],{"class":184},[167,107319,898],{"class":512},[167,107321,107322],{"class":177},"\"qvel:\"",[167,107324,107325],{"class":512},", data.qvel)\n",[19,107327,107328],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[494,107330,107331],{"id":107331},"仿真结果每次都一样",[19,107333,107334,107335,107337],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[34,107336,105621],{},"、目标点或控制输入。",[14,107339,2099],{"id":2098},[19,107341,107342,107343,26640],{},"Python 控制 MuJoCo 的核心就是读写 ",[34,107344,1150],{},[40,107346,107347,107355,107360,107365],{},[43,107348,107349,107350,429,107352,107354],{},"用 ",[34,107351,483],{},[34,107353,486],{}," 读取状态。",[43,107356,107349,107357,107359],{},[34,107358,489],{}," 写入控制。",[43,107361,107349,107362,107364],{},[34,107363,644],{}," 推进时间。",[43,107366,107367,107368,107370],{},"手动改状态后用 ",[34,107369,105841],{}," 刷新派生量。",[19,107372,107373],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2113,107375,107376],{},"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":32,"searchDepth":191,"depth":191,"links":107378},[107379,107380,107381,107388,107392,107393,107394,107404],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":107382},[107383,107385,107387],{"id":106146,"depth":205,"text":107384},"qpos、qvel、ctrl 是什么",{"id":106224,"depth":205,"text":107386},"mj_step 和 mj_forward 的区别",{"id":106313,"depth":205,"text":106314},{"id":682,"depth":191,"text":683,"children":107389},[107390,107391],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":107395},[107396,107398,107399,107401,107403],{"id":107175,"depth":205,"text":107397},"修改 data.qpos 后位置没有更新",{"id":107192,"depth":205,"text":107192},{"id":107251,"depth":205,"text":107400},"误以为 qpos 一定等于关节数",{"id":107269,"depth":205,"text":107402},"不知道某个元素在 qpos 的第几位",{"id":107331,"depth":205,"text":107331},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105909,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107411,"title":107412,"body":107413,"description":32,"extension":2140,"meta":109103,"navigation":740,"path":109104,"seo":109105,"stem":109106,"__hash__":109107},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107414,"toc":109079},[107415,107418,107420,107423,107425,107450,107453,107472,107475,107477,107479,107503,107505,107519,107521,107562,107564,107588,107590,107593,107627,107629,107642,107645,107713,107722,107726,107729,107763,107769,107772,107776,107815,107818,107838,107842,107885,107887,107916,107919,107925,107928,107930,108324,108326,108338,108340,108351,108353,108356,108385,108393,108396,108431,108434,108436,108444,108447,108449,108460,108470,108490,108493,108529,108541,108589,108608,108650,108663,108691,108696,108717,108727,108745,108748,108782,108785,108805,108808,108827,108833,108835,108838,108844,108850,108860,108863,108869,108878,108880,108926,108928,108934,108940,108943,108946,108966,108969,108975,108981,108983,109006,109009,109012,109021,109024,109062,109064,109067,109073,109076],[10,107416,107412],{"id":107417},"_4关节actuator-与力控制",[14,107419,17],{"id":16},[19,107421,107422],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107424,105922],{},[40,107426,107427,107433,107438,107442,107447],{},[43,107428,107429,107432],{},[34,107430,107431],{},"hinge"," 关节",[43,107434,107435],{},[34,107436,107437],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[43,107439,107440],{},[34,107441,489],{},[43,107443,107444],{},[34,107445,107446],{},"ctrlrange",[43,107448,107449],{},"读取关节角和角速度",[19,107451,107452],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,107454,107456],{"className":723,"code":107455,"language":305,"meta":32,"style":32},"data.ctrl[0] = ...\n",[34,107457,107458],{"__ignoreMap":32},[167,107459,107460,107463,107465,107467,107469],{"class":169,"line":170},[167,107461,107462],{"class":512},"data.ctrl[",[167,107464,1154],{"class":184},[167,107466,6475],{"class":512},[167,107468,523],{"class":731},[167,107470,107471],{"class":184}," ...\n",[19,107473,107474],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107476,155],{"id":154},[19,107478,158],{},[26,107480,107481],{"className":161,"code":105979,"language":163,"meta":32,"style":32},[34,107482,107483],{"__ignoreMap":32},[167,107484,107485,107487,107489,107491,107493,107495,107497,107499,107501],{"class":169,"line":170},[167,107486,174],{"class":173},[167,107488,178],{"class":177},[167,107490,181],{"class":177},[167,107492,185],{"class":184},[167,107494,105994],{"class":177},[167,107496,197],{"class":177},[167,107498,1993],{"class":177},[167,107500,214],{"class":177},[167,107502,106003],{"class":177},[19,107504,104410],{},[26,107506,107507],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,107508,107509],{"__ignoreMap":32},[167,107510,107511,107513,107515,107517],{"class":169,"line":170},[167,107512,331],{"class":173},[167,107514,181],{"class":177},[167,107516,336],{"class":177},[167,107518,339],{"class":177},[19,107520,104427],{},[26,107522,107524],{"className":161,"code":107523,"language":163,"meta":32,"style":32},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[34,107525,107526,107543,107552],{"__ignoreMap":32},[167,107527,107528,107530,107532,107534,107537,107539,107541],{"class":169,"line":170},[167,107529,373],{"class":173},[167,107531,376],{"class":177},[167,107533,379],{"class":184},[167,107535,107536],{"class":177}," mujoco-control",[167,107538,385],{"class":177},[167,107540,388],{"class":184},[167,107542,391],{"class":184},[167,107544,107545,107547,107549],{"class":169,"line":191},[167,107546,373],{"class":173},[167,107548,398],{"class":177},[167,107550,107551],{"class":177}," mujoco-control\n",[167,107553,107554,107556,107558,107560],{"class":169,"line":205},[167,107555,331],{"class":173},[167,107557,181],{"class":177},[167,107559,336],{"class":177},[167,107561,339],{"class":177},[19,107563,414],{},[40,107565,107566,107572,107579,107585],{},[43,107567,107568,107571],{},[34,107569,107570],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[43,107573,107574,107576,107577,423],{},[34,107575,489],{}," 长度等于 ",[34,107578,1648],{},[43,107580,84209,107581,107584],{},[34,107582,107583],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[43,107586,107587],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107589,457],{"id":456},[19,107591,107592],{},"关节决定 body 如何运动:",[26,107594,107596],{"className":503,"code":107595,"language":505,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,107597,107598],{"__ignoreMap":32},[167,107599,107600,107602,107604,107606,107608,107611,107613,107615,107617,107620,107622,107625],{"class":169,"line":170},[167,107601,513],{"class":512},[167,107603,104547],{"class":516},[167,107605,520],{"class":173},[167,107607,523],{"class":512},[167,107609,107610],{"class":177},"\"hinge\"",[167,107612,555],{"class":173},[167,107614,523],{"class":512},[167,107616,107610],{"class":177},[167,107618,107619],{"class":173}," axis",[167,107621,523],{"class":512},[167,107623,107624],{"class":177},"\"0 1 0\"",[167,107626,570],{"class":512},[19,107628,104643],{},[40,107630,107631,107636,107639],{},[43,107632,107633,107634],{},"名字是 ",[34,107635,107431],{},[43,107637,107638],{},"类型是旋转关节",[43,107640,107641],{},"绕 y 轴旋转",[19,107643,107644],{},"actuator 决定如何施加控制:",[26,107646,107648],{"className":503,"code":107647,"language":505,"meta":32,"style":32},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[34,107649,107650,107659,107705],{"__ignoreMap":32},[167,107651,107652,107654,107657],{"class":169,"line":170},[167,107653,513],{"class":512},[167,107655,107656],{"class":516},"actuator",[167,107658,537],{"class":512},[167,107660,107661,107663,107666,107668,107670,107673,107676,107678,107680,107683,107685,107687,107690,107692,107695,107698,107700,107703],{"class":169,"line":191},[167,107662,542],{"class":512},[167,107664,107665],{"class":516},"motor",[167,107667,520],{"class":173},[167,107669,523],{"class":512},[167,107671,107672],{"class":177},"\"hinge_motor\"",[167,107674,107675],{"class":173}," joint",[167,107677,523],{"class":512},[167,107679,107610],{"class":177},[167,107681,107682],{"class":173}," gear",[167,107684,523],{"class":512},[167,107686,1494],{"class":177},[167,107688,107689],{"class":173}," ctrlrange",[167,107691,523],{"class":512},[167,107693,107694],{"class":177},"\"-2 2\"",[167,107696,107697],{"class":173}," ctrllimited",[167,107699,523],{"class":512},[167,107701,107702],{"class":177},"\"true\"",[167,107704,570],{"class":512},[167,107706,107707,107709,107711],{"class":169,"line":205},[167,107708,575],{"class":512},[167,107710,107656],{"class":516},[167,107712,537],{"class":512},[19,107714,107715,107718,107719,423],{},[34,107716,107717],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[34,107720,107721],{},"[-2, 2]",[494,107723,107725],{"id":107724},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107727,107728],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[68,107730,107731,107741],{},[71,107732,107733],{},[74,107734,107735,107737,107739],{},[77,107736,27773],{"align":79},[77,107738,104287],{"align":79},[77,107740,119],{"align":79},[85,107742,107743,107753],{},[74,107744,107745,107747,107750],{},[90,107746,104547],{"align":79},[90,107748,107749],{"align":79},"定义能怎么动",[90,107751,107752],{"align":79},"门轴允许门旋转",[74,107754,107755,107757,107760],{},[90,107756,107656],{"align":79},[90,107758,107759],{"align":79},"定义怎么施力或控制",[90,107761,107762],{"align":79},"人推门、马达带动门",[19,107764,107765,107766,107768],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[34,107767,489],{}," 主动控制它。",[19,107770,107771],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[494,107773,107775],{"id":107774},"hinge-joint","hinge joint",[26,107777,107779],{"className":503,"code":107778,"language":505,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,107780,107781],{"__ignoreMap":32},[167,107782,107783,107785,107787,107789,107791,107793,107795,107797,107799,107801,107803,107805,107808,107810,107813],{"class":169,"line":170},[167,107784,513],{"class":512},[167,107786,104547],{"class":516},[167,107788,520],{"class":173},[167,107790,523],{"class":512},[167,107792,107610],{"class":177},[167,107794,555],{"class":173},[167,107796,523],{"class":512},[167,107798,107610],{"class":177},[167,107800,107619],{"class":173},[167,107802,523],{"class":512},[167,107804,107624],{"class":177},[167,107806,107807],{"class":173}," damping",[167,107809,523],{"class":512},[167,107811,107812],{"class":177},"\"0.1\"",[167,107814,570],{"class":512},[19,107816,107817],{},"含义：",[40,107819,107820,107826,107832],{},[43,107821,107822,107825],{},[34,107823,107824],{},"type=\"hinge\"","：只能绕一个轴旋转。",[43,107827,107828,107831],{},[34,107829,107830],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[43,107833,107834,107837],{},[34,107835,107836],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[494,107839,107841],{"id":107840},"motor-actuator","motor actuator",[26,107843,107845],{"className":503,"code":107844,"language":505,"meta":32,"style":32},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,107846,107847],{"__ignoreMap":32},[167,107848,107849,107851,107853,107855,107857,107859,107861,107863,107865,107867,107869,107871,107873,107875,107877,107879,107881,107883],{"class":169,"line":170},[167,107850,513],{"class":512},[167,107852,107665],{"class":516},[167,107854,520],{"class":173},[167,107856,523],{"class":512},[167,107858,107672],{"class":177},[167,107860,107675],{"class":173},[167,107862,523],{"class":512},[167,107864,107610],{"class":177},[167,107866,107682],{"class":173},[167,107868,523],{"class":512},[167,107870,1494],{"class":177},[167,107872,107689],{"class":173},[167,107874,523],{"class":512},[167,107876,107694],{"class":177},[167,107878,107697],{"class":173},[167,107880,523],{"class":512},[167,107882,107702],{"class":177},[167,107884,570],{"class":512},[19,107886,107817],{},[40,107888,107889,107898,107904,107910],{},[43,107890,107891,107894,107895,107897],{},[34,107892,107893],{},"joint=\"hinge\"","：这个电机作用在名为 ",[34,107896,107431],{}," 的关节上。",[43,107899,107900,107903],{},[34,107901,107902],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[43,107905,107906,107909],{},[34,107907,107908],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[43,107911,107912,107915],{},[34,107913,107914],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107917,107918],{},"简单理解：",[26,107920,107923],{"className":107921,"code":107922,"language":31,"meta":32},[29],"实际施加效果 ≈ data.ctrl[0] * gear\n",[34,107924,107922],{"__ignoreMap":32},[19,107926,107927],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107929,683],{"id":682},[26,107931,107933],{"className":723,"code":107932,"language":305,"meta":32,"style":32},"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",[34,107934,107935,107942,107946,107952,107962,107966,107970,107978,107983,107988,107992,107996,108001,108006,108010,108015,108020,108025,108030,108034,108038,108042,108047,108052,108057,108061,108065,108069,108073,108085,108097,108105,108109,108119,108129,108139,108143,108156,108169,108173,108190,108204,108239,108243,108247,108258,108273,108288,108300,108304,108308,108320],{"__ignoreMap":32},[167,107936,107937,107939],{"class":169,"line":170},[167,107938,732],{"class":731},[167,107940,107941],{"class":512}," math\n",[167,107943,107944],{"class":169,"line":191},[167,107945,741],{"emptyLinePlaceholder":740},[167,107947,107948,107950],{"class":169,"line":205},[167,107949,732],{"class":731},[167,107951,735],{"class":512},[167,107953,107954,107956,107958,107960],{"class":169,"line":219},[167,107955,732],{"class":731},[167,107957,33385],{"class":512},[167,107959,33388],{"class":731},[167,107961,33391],{"class":512},[167,107963,107964],{"class":169,"line":230},[167,107965,741],{"emptyLinePlaceholder":740},[167,107967,107968],{"class":169,"line":241},[167,107969,741],{"emptyLinePlaceholder":740},[167,107971,107972,107974,107976],{"class":169,"line":261},[167,107973,750],{"class":184},[167,107975,753],{"class":731},[167,107977,756],{"class":177},[167,107979,107980],{"class":169,"line":773},[167,107981,107982],{"class":177},"\u003Cmujoco model=\"one_link_motor\">\n",[167,107984,107985],{"class":169,"line":779},[167,107986,107987],{"class":177},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[167,107989,107990],{"class":169,"line":785},[167,107991,741],{"emptyLinePlaceholder":740},[167,107993,107994],{"class":169,"line":790},[167,107995,776],{"class":177},[167,107997,107998],{"class":169,"line":796},[167,107999,108000],{"class":177},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[167,108002,108003],{"class":169,"line":802},[167,108004,108005],{"class":177},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[167,108007,108008],{"class":169,"line":808},[167,108009,741],{"emptyLinePlaceholder":740},[167,108011,108012],{"class":169,"line":814},[167,108013,108014],{"class":177},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[167,108016,108017],{"class":169,"line":820},[167,108018,108019],{"class":177},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[167,108021,108022],{"class":169,"line":826},[167,108023,108024],{"class":177},"        \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",[167,108026,108027],{"class":169,"line":832},[167,108028,108029],{"class":177},"      \u003C\u002Fbody>\n",[167,108031,108032],{"class":169,"line":837},[167,108033,811],{"class":177},[167,108035,108036],{"class":169,"line":842},[167,108037,817],{"class":177},[167,108039,108040],{"class":169,"line":860},[167,108041,741],{"emptyLinePlaceholder":740},[167,108043,108044],{"class":169,"line":876},[167,108045,108046],{"class":177},"  \u003Cactuator>\n",[167,108048,108049],{"class":169,"line":887},[167,108050,108051],{"class":177},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[167,108053,108054],{"class":169,"line":892},[167,108055,108056],{"class":177},"  \u003C\u002Factuator>\n",[167,108058,108059],{"class":169,"line":907},[167,108060,823],{"class":177},[167,108062,108063],{"class":169,"line":920},[167,108064,829],{"class":177},[167,108066,108067],{"class":169,"line":933},[167,108068,741],{"emptyLinePlaceholder":740},[167,108070,108071],{"class":169,"line":946},[167,108072,741],{"emptyLinePlaceholder":740},[167,108074,108075,108077,108079,108081,108083],{"class":169,"line":959},[167,108076,845],{"class":731},[167,108078,848],{"class":173},[167,108080,851],{"class":512},[167,108082,854],{"class":184},[167,108084,857],{"class":512},[167,108086,108087,108089,108091,108093,108095],{"class":169,"line":964},[167,108088,863],{"class":512},[167,108090,523],{"class":731},[167,108092,868],{"class":512},[167,108094,750],{"class":184},[167,108096,873],{"class":512},[167,108098,108099,108101,108103],{"class":169,"line":987},[167,108100,879],{"class":512},[167,108102,523],{"class":731},[167,108104,884],{"class":512},[167,108106,108107],{"class":169,"line":993},[167,108108,741],{"emptyLinePlaceholder":740},[167,108110,108111,108113,108115,108117],{"class":169,"line":998},[167,108112,895],{"class":184},[167,108114,898],{"class":512},[167,108116,901],{"class":177},[167,108118,904],{"class":512},[167,108120,108121,108123,108125,108127],{"class":169,"line":1010},[167,108122,895],{"class":184},[167,108124,898],{"class":512},[167,108126,914],{"class":177},[167,108128,917],{"class":512},[167,108130,108131,108133,108135,108137],{"class":169,"line":1022},[167,108132,895],{"class":184},[167,108134,898],{"class":512},[167,108136,927],{"class":177},[167,108138,930],{"class":512},[167,108140,108141],{"class":169,"line":1027},[167,108142,741],{"emptyLinePlaceholder":740},[167,108144,108145,108147,108150,108152,108154],{"class":169,"line":1032},[167,108146,5136],{"class":731},[167,108148,108149],{"class":512}," model.nu ",[167,108151,22974],{"class":731},[167,108153,27138],{"class":184},[167,108155,857],{"class":512},[167,108157,108158,108160,108162,108164,108167],{"class":169,"line":1049},[167,108159,105023],{"class":731},[167,108161,105026],{"class":184},[167,108163,898],{"class":512},[167,108165,108166],{"class":177},"\"expected exactly one actuator\"",[167,108168,873],{"class":512},[167,108170,108171],{"class":169,"line":10005},[167,108172,741],{"emptyLinePlaceholder":740},[167,108174,108175,108177,108179,108181,108183,108185,108188],{"class":169,"line":10011},[167,108176,967],{"class":731},[167,108178,33621],{"class":512},[167,108180,973],{"class":731},[167,108182,976],{"class":184},[167,108184,898],{"class":512},[167,108186,108187],{"class":184},"2000",[167,108189,984],{"class":512},[167,108191,108192,108195,108197,108199,108201],{"class":169,"line":10038},[167,108193,108194],{"class":512},"        t ",[167,108196,523],{"class":731},[167,108198,33621],{"class":512},[167,108200,2655],{"class":731},[167,108202,108203],{"class":512}," model.opt.timestep\n",[167,108205,108206,108209,108211,108213,108215,108218,108220,108223,108225,108227,108230,108232,108234,108236],{"class":169,"line":10043},[167,108207,108208],{"class":512},"        data.ctrl[",[167,108210,1154],{"class":184},[167,108212,6475],{"class":512},[167,108214,523],{"class":731},[167,108216,108217],{"class":184}," 1.5",[167,108219,8548],{"class":731},[167,108221,108222],{"class":512}," math.sin(",[167,108224,106851],{"class":184},[167,108226,8548],{"class":731},[167,108228,108229],{"class":512}," math.pi ",[167,108231,2655],{"class":731},[167,108233,63856],{"class":184},[167,108235,8548],{"class":731},[167,108237,108238],{"class":512}," t)\n",[167,108240,108241],{"class":169,"line":10049},[167,108242,990],{"class":512},[167,108244,108245],{"class":169,"line":10061},[167,108246,741],{"emptyLinePlaceholder":740},[167,108248,108249,108251,108253,108256],{"class":169,"line":10073},[167,108250,895],{"class":184},[167,108252,898],{"class":512},[167,108254,108255],{"class":177},"\"time:\"",[167,108257,943],{"class":512},[167,108259,108260,108262,108264,108267,108269,108271],{"class":169,"line":10085},[167,108261,895],{"class":184},[167,108263,898],{"class":512},[167,108265,108266],{"class":177},"\"joint qpos:\"",[167,108268,106521],{"class":512},[167,108270,2494],{"class":184},[167,108272,32505],{"class":512},[167,108274,108275,108277,108279,108282,108284,108286],{"class":169,"line":11744},[167,108276,895],{"class":184},[167,108278,898],{"class":512},[167,108280,108281],{"class":177},"\"joint qvel:\"",[167,108283,106537],{"class":512},[167,108285,2494],{"class":184},[167,108287,32505],{"class":512},[167,108289,108290,108292,108294,108297],{"class":169,"line":11769},[167,108291,895],{"class":184},[167,108293,898],{"class":512},[167,108295,108296],{"class":177},"\"last ctrl:\"",[167,108298,108299],{"class":512},", data.ctrl.copy())\n",[167,108301,108302],{"class":169,"line":11792},[167,108303,741],{"emptyLinePlaceholder":740},[167,108305,108306],{"class":169,"line":11816},[167,108307,741],{"emptyLinePlaceholder":740},[167,108309,108310,108312,108314,108316,108318],{"class":169,"line":11821},[167,108311,1035],{"class":731},[167,108313,1038],{"class":184},[167,108315,1041],{"class":731},[167,108317,1044],{"class":177},[167,108319,857],{"class":512},[167,108321,108322],{"class":169,"line":11826},[167,108323,1052],{"class":512},[19,108325,105161],{},[26,108327,108329],{"className":161,"code":108328,"language":163,"meta":32,"style":32},"touch ch4_joint_motor.py\n",[34,108330,108331],{"__ignoreMap":32},[167,108332,108333,108335],{"class":169,"line":170},[167,108334,714],{"class":173},[167,108336,108337],{"class":177}," ch4_joint_motor.py\n",[19,108339,1792],{},[26,108341,108343],{"className":161,"code":108342,"language":163,"meta":32,"style":32},"python ch4_joint_motor.py\n",[34,108344,108345],{"__ignoreMap":32},[167,108346,108347,108349],{"class":169,"line":170},[167,108348,305],{"class":173},[167,108350,108337],{"class":177},[494,108352,1055],{"id":1055},[19,108354,108355],{},"检查 actuator 数量：",[26,108357,108359],{"className":723,"code":108358,"language":305,"meta":32,"style":32},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[34,108360,108361,108373],{"__ignoreMap":32},[167,108362,108363,108365,108367,108369,108371],{"class":169,"line":170},[167,108364,1035],{"class":731},[167,108366,108149],{"class":512},[167,108368,22974],{"class":731},[167,108370,27138],{"class":184},[167,108372,857],{"class":512},[167,108374,108375,108377,108379,108381,108383],{"class":169,"line":191},[167,108376,105486],{"class":731},[167,108378,105026],{"class":184},[167,108380,898],{"class":512},[167,108382,108166],{"class":177},[167,108384,873],{"class":512},[19,108386,108387,108389,108390,108392],{},[34,108388,1648],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[34,108391,489],{}," 长度应该是 1。",[19,108394,108395],{},"产生正弦控制信号：",[26,108397,108399],{"className":723,"code":108398,"language":305,"meta":32,"style":32},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[34,108400,108401],{"__ignoreMap":32},[167,108402,108403,108405,108407,108409,108411,108413,108415,108417,108419,108421,108423,108425,108427,108429],{"class":169,"line":170},[167,108404,107462],{"class":512},[167,108406,1154],{"class":184},[167,108408,6475],{"class":512},[167,108410,523],{"class":731},[167,108412,108217],{"class":184},[167,108414,8548],{"class":731},[167,108416,108222],{"class":512},[167,108418,106851],{"class":184},[167,108420,8548],{"class":731},[167,108422,108229],{"class":512},[167,108424,2655],{"class":731},[167,108426,63856],{"class":184},[167,108428,8548],{"class":731},[167,108430,108238],{"class":512},[19,108432,108433],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108435,1158],{},[26,108437,108438],{"className":723,"code":106096,"language":305,"meta":32,"style":32},[34,108439,108440],{"__ignoreMap":32},[167,108441,108442],{"class":169,"line":170},[167,108443,106096],{"class":512},[19,108445,108446],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[494,108448,1194],{"id":1194},[26,108450,108452],{"className":723,"code":108451,"language":305,"meta":32,"style":32},"import math\n",[34,108453,108454],{"__ignoreMap":32},[167,108455,108456,108458],{"class":169,"line":170},[167,108457,732],{"class":731},[167,108459,107941],{"class":512},[19,108461,108462,108463,429,108466,108469],{},"导入 Python 标准库里的数学模块。后面要用 ",[34,108464,108465],{},"math.sin",[34,108467,108468],{},"math.pi"," 生成周期变化的控制信号。",[26,108471,108472],{"className":723,"code":105277,"language":305,"meta":32,"style":32},[34,108473,108474,108480],{"__ignoreMap":32},[167,108475,108476,108478],{"class":169,"line":170},[167,108477,732],{"class":731},[167,108479,735],{"class":512},[167,108481,108482,108484,108486,108488],{"class":169,"line":191},[167,108483,732],{"class":731},[167,108485,33385],{"class":512},[167,108487,33388],{"class":731},[167,108489,33391],{"class":512},[19,108491,108492],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,108494,108495],{"className":503,"code":107778,"language":505,"meta":32,"style":32},[34,108496,108497],{"__ignoreMap":32},[167,108498,108499,108501,108503,108505,108507,108509,108511,108513,108515,108517,108519,108521,108523,108525,108527],{"class":169,"line":170},[167,108500,513],{"class":512},[167,108502,104547],{"class":516},[167,108504,520],{"class":173},[167,108506,523],{"class":512},[167,108508,107610],{"class":177},[167,108510,555],{"class":173},[167,108512,523],{"class":512},[167,108514,107610],{"class":177},[167,108516,107619],{"class":173},[167,108518,523],{"class":512},[167,108520,107624],{"class":177},[167,108522,107807],{"class":173},[167,108524,523],{"class":512},[167,108526,107812],{"class":177},[167,108528,570],{"class":512},[19,108530,108531,108532,108534,108535,108537,108538,108540],{},"这行定义关节。",[34,108533,107431],{}," 表示旋转关节。",[34,108536,107830],{}," 表示绕 y 轴旋转。",[34,108539,107836],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,108542,108544],{"className":503,"code":108543,"language":505,"meta":32,"style":32},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[34,108545,108546],{"__ignoreMap":32},[167,108547,108548,108550,108552,108554,108556,108559,108561,108563,108566,108569,108571,108574,108576,108578,108580,108582,108584,108587],{"class":169,"line":170},[167,108549,513],{"class":512},[167,108551,545],{"class":516},[167,108553,520],{"class":173},[167,108555,523],{"class":512},[167,108557,108558],{"class":177},"\"link_geom\"",[167,108560,555],{"class":173},[167,108562,523],{"class":512},[167,108564,108565],{"class":177},"\"capsule\"",[167,108567,108568],{"class":173}," fromto",[167,108570,523],{"class":512},[167,108572,108573],{"class":177},"\"0 0 0 0 0 0.5\"",[167,108575,562],{"class":173},[167,108577,523],{"class":512},[167,108579,105369],{"class":177},[167,108581,1489],{"class":173},[167,108583,523],{"class":512},[167,108585,108586],{"class":177},"\"0.5\"",[167,108588,570],{"class":512},[19,108590,108591,108592,108594,108595,108597,108598,108601,108602,423,108605,108607],{},"这行定义摆杆的形状。",[34,108593,104756],{}," 是胶囊体，适合表示杆子。",[34,108596,104767],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[34,108599,108600],{},"(0,0,0)"," 延伸到 ",[34,108603,108604],{},"(0,0,0.5)",[34,108606,104761],{}," 是半径。",[26,108609,108610],{"className":503,"code":107844,"language":505,"meta":32,"style":32},[34,108611,108612],{"__ignoreMap":32},[167,108613,108614,108616,108618,108620,108622,108624,108626,108628,108630,108632,108634,108636,108638,108640,108642,108644,108646,108648],{"class":169,"line":170},[167,108615,513],{"class":512},[167,108617,107665],{"class":516},[167,108619,520],{"class":173},[167,108621,523],{"class":512},[167,108623,107672],{"class":177},[167,108625,107675],{"class":173},[167,108627,523],{"class":512},[167,108629,107610],{"class":177},[167,108631,107682],{"class":173},[167,108633,523],{"class":512},[167,108635,1494],{"class":177},[167,108637,107689],{"class":173},[167,108639,523],{"class":512},[167,108641,107694],{"class":177},[167,108643,107697],{"class":173},[167,108645,523],{"class":512},[167,108647,107702],{"class":177},[167,108649,570],{"class":512},[19,108651,108652,108653,108655,108656,108659,108660,108662],{},"这行定义电机。它作用在 ",[34,108654,107431],{}," 关节上。",[34,108657,108658],{},"gear"," 可以理解成放大倍数。",[34,108661,107446],{}," 限制控制输入范围。",[26,108664,108665],{"className":723,"code":108358,"language":305,"meta":32,"style":32},[34,108666,108667,108679],{"__ignoreMap":32},[167,108668,108669,108671,108673,108675,108677],{"class":169,"line":170},[167,108670,1035],{"class":731},[167,108672,108149],{"class":512},[167,108674,22974],{"class":731},[167,108676,27138],{"class":184},[167,108678,857],{"class":512},[167,108680,108681,108683,108685,108687,108689],{"class":169,"line":191},[167,108682,105486],{"class":731},[167,108684,105026],{"class":184},[167,108686,898],{"class":512},[167,108688,108166],{"class":177},[167,108690,873],{"class":512},[19,108692,108693,108695],{},[34,108694,1648],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,108697,108699],{"className":723,"code":108698,"language":305,"meta":32,"style":32},"for step in range(2000):\n",[34,108700,108701],{"__ignoreMap":32},[167,108702,108703,108705,108707,108709,108711,108713,108715],{"class":169,"line":170},[167,108704,1168],{"class":731},[167,108706,33621],{"class":512},[167,108708,973],{"class":731},[167,108710,976],{"class":184},[167,108712,898],{"class":512},[167,108714,108187],{"class":184},[167,108716,984],{"class":512},[19,108718,108719,108720,108722,108723,108726],{},"循环 2000 步。这里没有用 ",[34,108721,1727],{},"，而是用 ",[34,108724,108725],{},"step","，因为后面要用当前步数计算时间。",[26,108728,108730],{"className":723,"code":108729,"language":305,"meta":32,"style":32},"t = step * model.opt.timestep\n",[34,108731,108732],{"__ignoreMap":32},[167,108733,108734,108737,108739,108741,108743],{"class":169,"line":170},[167,108735,108736],{"class":512},"t ",[167,108738,523],{"class":731},[167,108740,33621],{"class":512},[167,108742,2655],{"class":731},[167,108744,108203],{"class":512},[19,108746,108747],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,108749,108750],{"className":723,"code":108398,"language":305,"meta":32,"style":32},[34,108751,108752],{"__ignoreMap":32},[167,108753,108754,108756,108758,108760,108762,108764,108766,108768,108770,108772,108774,108776,108778,108780],{"class":169,"line":170},[167,108755,107462],{"class":512},[167,108757,1154],{"class":184},[167,108759,6475],{"class":512},[167,108761,523],{"class":731},[167,108763,108217],{"class":184},[167,108765,8548],{"class":731},[167,108767,108222],{"class":512},[167,108769,106851],{"class":184},[167,108771,8548],{"class":731},[167,108773,108229],{"class":512},[167,108775,2655],{"class":731},[167,108777,63856],{"class":184},[167,108779,8548],{"class":731},[167,108781,108238],{"class":512},[19,108783,108784],{},"这行给电机输入一个正弦波。拆开看：",[40,108786,108787,108793,108799],{},[43,108788,108789,108792],{},[34,108790,108791],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[43,108794,108795,108798],{},[34,108796,108797],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[43,108800,108801,108804],{},[34,108802,108803],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108806,108807],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,108809,108811],{"className":723,"code":108810,"language":305,"meta":32,"style":32},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[34,108812,108813],{"__ignoreMap":32},[167,108814,108815,108817,108819,108821,108823,108825],{"class":169,"line":170},[167,108816,1606],{"class":184},[167,108818,898],{"class":512},[167,108820,108266],{"class":177},[167,108822,106521],{"class":512},[167,108824,2494],{"class":184},[167,108826,32505],{"class":512},[19,108828,108829,108830,108832],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[34,108831,483],{}," 只有一个数。",[14,108834,1807],{"id":1806},[19,108836,108837],{},"输出类似:",[26,108839,108842],{"className":108840,"code":108841,"language":31,"meta":32},[29],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[34,108843,108841],{"__ignoreMap":32},[19,108845,108846,108847,108849],{},"这里 ",[34,108848,107717],{}," 是电机输入。",[19,108851,108852,108855,108856,108859],{},[34,108853,108854],{},"joint qpos"," 是关节角度，单位通常是弧度。",[34,108857,108858],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108861,108862],{},"角度单位提示：",[26,108864,108867],{"className":108865,"code":108866,"language":31,"meta":32},[29],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[34,108868,108866],{"__ignoreMap":32},[19,108870,108871,108872,108874,108875,108877],{},"如果你看到 ",[34,108873,105621],{}," 是 ",[34,108876,1931],{},"，大约就是 28.6 度。",[14,108879,1839],{"id":1838},[40,108881,108882,108889,108892,108899,108902,108910,108918],{},[43,108883,1902,108884,1905,108886,423],{},[34,108885,107902],{},[34,108887,108888],{},"gear=\"5\"",[43,108890,108891],{},"重新运行，观察关节运动是否更剧烈。",[43,108893,1902,108894,1905,108896,423],{},[34,108895,107446],{},[34,108897,108898],{},"-0.2 0.2",[43,108900,108901],{},"重新运行，观察控制能力是否变弱。",[43,108903,108904,108905,108907,108908,423],{},"去掉 actuator，确认 ",[34,108906,1648],{}," 变成 ",[34,108909,1154],{},[43,108911,1902,108912,1905,108914,108917],{},[34,108913,107836],{},[34,108915,108916],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[43,108919,1902,108920,1905,108922,108925],{},[34,108921,107830],{},[34,108923,108924],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108927,1945],{"id":1944},[494,108929,108931],{"id":108930},"indexerror-index-0-is-out-of-bounds",[34,108932,108933],{},"IndexError: index 0 is out of bounds",[19,108935,108936,108937,108939],{},"原因是 ",[34,108938,107583],{},"，没有 actuator。",[494,108941,108942],{"id":108942},"关节几乎不动",[19,108944,108945],{},"可能原因:",[40,108947,108948,108953,108957,108963],{},[43,108949,108950,108952],{},[34,108951,108658],{}," 太小",[43,108954,108955,108952],{},[34,108956,107446],{},[43,108958,108959,108962],{},[34,108960,108961],{},"damping"," 太大",[43,108964,108965],{},"重力方向导致运动不明显",[494,108967,108968],{"id":108968},"模型编译失败",[19,108970,108971,108972,108974],{},"检查 actuator 引用的 ",[34,108973,107893],{}," 是否存在，joint 名称是否拼写一致。",[494,108976,108978,108980],{"id":108977},"datactrl0-写了但没有效果",[34,108979,107717],{}," 写了但没有效果",[19,108982,2067],{},[40,108984,108985,108990,108993,108998,109003],{},[43,108986,108987,108989],{},[34,108988,1648],{}," 是否大于 0。",[43,108991,108992],{},"motor 是否引用了正确 joint。",[43,108994,108995,108997],{},[34,108996,108658],{}," 是否太小。",[43,108999,109000,109002],{},[34,109001,107446],{}," 是否把输入限制得太小。",[43,109004,109005],{},"body 是否真的有可动 joint。",[494,109007,109008],{"id":109008},"控制输入超过范围会怎样",[19,109010,109011],{},"如果设置了：",[26,109013,109015],{"className":503,"code":109014,"language":505,"meta":32,"style":32},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[34,109016,109017],{"__ignoreMap":32},[167,109018,109019],{"class":169,"line":170},[167,109020,109014],{"class":512},[19,109022,109023],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,109025,109027],{"className":723,"code":109026,"language":305,"meta":32,"style":32},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[34,109028,109029,109049],{"__ignoreMap":32},[167,109030,109031,109034,109036,109039,109041,109043,109045,109047],{"class":169,"line":170},[167,109032,109033],{"class":512},"action ",[167,109035,523],{"class":731},[167,109037,109038],{"class":512}," np.clip(action, ",[167,109040,2732],{"class":731},[167,109042,106851],{"class":184},[167,109044,14463],{"class":512},[167,109046,106851],{"class":184},[167,109048,873],{"class":512},[167,109050,109051,109053,109055,109057,109059],{"class":169,"line":191},[167,109052,107462],{"class":512},[167,109054,1154],{"class":184},[167,109056,6475],{"class":512},[167,109058,523],{"class":731},[167,109060,109061],{"class":512}," action\n",[14,109063,2099],{"id":2098},[19,109065,109066],{},"这一章建立了控制任务的基本形式：",[26,109068,109071],{"className":109069,"code":109070,"language":31,"meta":32},[29],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[34,109072,109070],{"__ignoreMap":32},[19,109074,109075],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2113,109077,109078],{},"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":32,"searchDepth":191,"depth":191,"links":109080},[109081,109082,109083,109088,109092,109093,109094,109102],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":109084},[109085,109086,109087],{"id":107724,"depth":205,"text":107725},{"id":107774,"depth":205,"text":107775},{"id":107840,"depth":205,"text":107841},{"id":682,"depth":191,"text":683,"children":109089},[109090,109091],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":109095},[109096,109097,109098,109099,109101],{"id":108930,"depth":205,"text":108933},{"id":108942,"depth":205,"text":108942},{"id":108968,"depth":205,"text":108968},{"id":108977,"depth":205,"text":109100},"data.ctrl[0] 写了但没有效果",{"id":109008,"depth":205,"text":109008},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107412,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109109,"title":109110,"body":109111,"description":32,"extension":2140,"meta":111020,"navigation":740,"path":111021,"seo":111022,"stem":111023,"__hash__":111024},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109112,"toc":110996},[109113,109116,109118,109121,109129,109132,109149,109152,109177,109180,109226,109228,109230,109285,109287,109306,109308,109351,109354,109371,109374,109390,109400,109407,109409,109412,109415,109449,109452,109500,109504,109507,109521,109530,109534,109537,109562,109565,109569,109582,109585,109591,109594,109609,109611,109614,109874,109876,109888,109891,110203,110205,110217,110219,110222,110237,110242,110245,110267,110270,110273,110307,110310,110314,110325,110328,110345,110348,110362,110369,110389,110396,110410,110413,110425,110440,110460,110463,110485,110488,110492,110507,110518,110533,110536,110566,110582,110611,110619,110643,110646,110664,110674,110686,110693,110702,110708,110717,110720,110722,110731,110734,110749,110751,110754,110765,110768,110779,110782,110800,110802,110819,110822,110850,110852,110856,110859,110889,110895,110898,110902,110910,110913,110915,110936,110939,110942,110958,110961,110977,110979,110982,110993],[10,109114,109110],{"id":109115},"_5viewer-可视化与-renderer-离屏渲染",[14,109117,17],{"id":16},[19,109119,109120],{},"本章掌握两类可视化方式:",[40,109122,109123,109126],{},[43,109124,109125],{},"交互式 viewer: 适合人工观察仿真",[43,109127,109128],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109130,109131],{},"使用官方接口:",[26,109133,109135],{"className":723,"code":109134,"language":305,"meta":32,"style":32},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[34,109136,109137,109144],{"__ignoreMap":32},[167,109138,109139,109141],{"class":169,"line":170},[167,109140,732],{"class":731},[167,109142,109143],{"class":512}," mujoco.viewer\n",[167,109145,109146],{"class":169,"line":191},[167,109147,109148],{"class":512},"mujoco.viewer.launch_passive(model, data)\n",[19,109150,109151],{},"以及:",[26,109153,109155],{"className":723,"code":109154,"language":305,"meta":32,"style":32},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[34,109156,109157,109167],{"__ignoreMap":32},[167,109158,109159,109162,109164],{"class":169,"line":170},[167,109160,109161],{"class":512},"renderer ",[167,109163,523],{"class":731},[167,109165,109166],{"class":512}," mujoco.Renderer(model)\n",[167,109168,109169,109172,109174],{"class":169,"line":191},[167,109170,109171],{"class":512},"image ",[167,109173,523],{"class":731},[167,109175,109176],{"class":512}," renderer.render()\n",[19,109178,109179],{},"新手建议先理解二者区别：",[68,109181,109182,109198],{},[71,109183,109184],{},[74,109185,109186,109189,109192,109195],{},[77,109187,109188],{"align":79},"工具",[77,109190,109191],{"align":79},"用途",[77,109193,109194],{"align":79},"是否打开窗口",[77,109196,109197],{"align":79},"常见场景",[85,109199,109200,109213],{},[74,109201,109202,109205,109208,109210],{},[90,109203,109204],{"align":79},"Viewer",[90,109206,109207],{"align":79},"人眼实时观察仿真",[90,109209,106256],{"align":79},[90,109211,109212],{"align":79},"调试模型、看控制效果",[74,109214,109215,109218,109221,109223],{},[90,109216,109217],{"align":79},"Renderer",[90,109219,109220],{"align":79},"生成图像数组",[90,109222,106269],{"align":79},[90,109224,109225],{"align":79},"保存图片、训练视觉策略、服务器批量采集",[14,109227,155],{"id":154},[19,109229,158],{},[26,109231,109233],{"className":161,"code":109232,"language":163,"meta":32,"style":32},"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",[34,109234,109235,109247,109257,109265,109273],{"__ignoreMap":32},[167,109236,109237,109239,109241,109243,109245],{"class":169,"line":170},[167,109238,174],{"class":173},[167,109240,178],{"class":177},[167,109242,181],{"class":177},[167,109244,185],{"class":184},[167,109246,188],{"class":184},[167,109248,109249,109251,109253,109255],{"class":169,"line":191},[167,109250,208],{"class":177},[167,109252,211],{"class":177},[167,109254,214],{"class":177},[167,109256,188],{"class":184},[167,109258,109259,109261,109263],{"class":169,"line":205},[167,109260,222],{"class":177},[167,109262,225],{"class":177},[167,109264,188],{"class":184},[167,109266,109267,109269,109271],{"class":169,"line":219},[167,109268,233],{"class":177},[167,109270,236],{"class":177},[167,109272,188],{"class":184},[167,109274,109275,109277,109279,109281,109283],{"class":169,"line":230},[167,109276,244],{"class":177},[167,109278,247],{"class":177},[167,109280,250],{"class":177},[167,109282,253],{"class":177},[167,109284,2008],{"class":177},[19,109286,104410],{},[26,109288,109290],{"className":161,"code":109289,"language":163,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy pillow\n",[34,109291,109292],{"__ignoreMap":32},[167,109293,109294,109296,109298,109300,109303],{"class":169,"line":170},[167,109295,331],{"class":173},[167,109297,181],{"class":177},[167,109299,336],{"class":177},[167,109301,109302],{"class":177}," numpy",[167,109304,109305],{"class":177}," pillow\n",[19,109307,104427],{},[26,109309,109311],{"className":161,"code":109310,"language":163,"meta":32,"style":32},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[34,109312,109313,109330,109339],{"__ignoreMap":32},[167,109314,109315,109317,109319,109321,109324,109326,109328],{"class":169,"line":170},[167,109316,373],{"class":173},[167,109318,376],{"class":177},[167,109320,379],{"class":184},[167,109322,109323],{"class":177}," mujoco-render",[167,109325,385],{"class":177},[167,109327,388],{"class":184},[167,109329,391],{"class":184},[167,109331,109332,109334,109336],{"class":169,"line":191},[167,109333,373],{"class":173},[167,109335,398],{"class":177},[167,109337,109338],{"class":177}," mujoco-render\n",[167,109340,109341,109343,109345,109347,109349],{"class":169,"line":205},[167,109342,331],{"class":173},[167,109344,181],{"class":177},[167,109346,336],{"class":177},[167,109348,109302],{"class":177},[167,109350,109305],{"class":177},[19,109352,109353],{},"离屏渲染后端:",[26,109355,109357],{"className":161,"code":109356,"language":163,"meta":32,"style":32},"export MUJOCO_GL=egl\n",[34,109358,109359],{"__ignoreMap":32},[167,109360,109361,109363,109366,109368],{"class":169,"line":170},[167,109362,27063],{"class":731},[167,109364,109365],{"class":512}," MUJOCO_GL",[167,109367,523],{"class":731},[167,109369,109370],{"class":512},"egl\n",[19,109372,109373],{},"或:",[26,109375,109377],{"className":161,"code":109376,"language":163,"meta":32,"style":32},"export MUJOCO_GL=osmesa\n",[34,109378,109379],{"__ignoreMap":32},[167,109380,109381,109383,109385,109387],{"class":169,"line":170},[167,109382,27063],{"class":731},[167,109384,109365],{"class":512},[167,109386,523],{"class":731},[167,109388,109389],{"class":512},"osmesa\n",[19,109391,109392,109393,109396,109397,423],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[34,109394,109395],{},"egl"," 失败，再尝试 ",[34,109398,109399],{},"osmesa",[19,109401,109402,109403,109406],{},"如果你在本机桌面环境运行，通常先不要设置 ",[34,109404,109405],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109408,457],{"id":456},[19,109410,109411],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109413,109414],{},"典型 viewer 流程:",[26,109416,109418],{"className":723,"code":109417,"language":305,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[34,109419,109420,109433,109440,109444],{"__ignoreMap":32},[167,109421,109422,109425,109428,109430],{"class":169,"line":170},[167,109423,109424],{"class":731},"with",[167,109426,109427],{"class":512}," mujoco.viewer.launch_passive(model, data) ",[167,109429,33388],{"class":731},[167,109431,109432],{"class":512}," viewer:\n",[167,109434,109435,109437],{"class":169,"line":191},[167,109436,4295],{"class":731},[167,109438,109439],{"class":512}," viewer.is_running():\n",[167,109441,109442],{"class":169,"line":205},[167,109443,990],{"class":512},[167,109445,109446],{"class":169,"line":219},[167,109447,109448],{"class":512},"        viewer.sync()\n",[19,109450,109451],{},"典型 renderer 流程:",[26,109453,109455],{"className":723,"code":109454,"language":305,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[34,109456,109457,109483,109487,109492],{"__ignoreMap":32},[167,109458,109459,109461,109463,109466,109468,109470,109472,109474,109476,109478,109481],{"class":169,"line":170},[167,109460,109161],{"class":512},[167,109462,523],{"class":731},[167,109464,109465],{"class":512}," mujoco.Renderer(model, ",[167,109467,27002],{"class":7246},[167,109469,523],{"class":731},[167,109471,44342],{"class":184},[167,109473,14463],{"class":512},[167,109475,26998],{"class":7246},[167,109477,523],{"class":731},[167,109479,109480],{"class":184},"640",[167,109482,873],{"class":512},[167,109484,109485],{"class":169,"line":191},[167,109486,106096],{"class":512},[167,109488,109489],{"class":169,"line":205},[167,109490,109491],{"class":512},"renderer.update_scene(data)\n",[167,109493,109494,109496,109498],{"class":169,"line":219},[167,109495,109171],{"class":512},[167,109497,523],{"class":731},[167,109499,109176],{"class":512},[494,109501,109503],{"id":109502},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109505,109506],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,109508,109510],{"className":723,"code":109509,"language":305,"meta":32,"style":32},"mujoco.mj_step(model, data)\nviewer.sync()\n",[34,109511,109512,109516],{"__ignoreMap":32},[167,109513,109514],{"class":169,"line":170},[167,109515,106096],{"class":512},[167,109517,109518],{"class":169,"line":191},[167,109519,109520],{"class":512},"viewer.sync()\n",[19,109522,109523,109525,109526,109529],{},[34,109524,644],{}," 负责算物理，",[34,109527,109528],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[494,109531,109533],{"id":109532},"为什么要-sleep","为什么要 sleep",[19,109535,109536],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,109538,109540],{"className":723,"code":109539,"language":305,"meta":32,"style":32},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[34,109541,109542],{"__ignoreMap":32},[167,109543,109544,109547,109549,109552,109554,109557,109559],{"class":169,"line":170},[167,109545,109546],{"class":512},"sleep_time ",[167,109548,523],{"class":731},[167,109550,109551],{"class":512}," model.opt.timestep ",[167,109553,2732],{"class":731},[167,109555,109556],{"class":512}," (time.time() ",[167,109558,2732],{"class":731},[167,109560,109561],{"class":512}," step_start)\n",[19,109563,109564],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[494,109566,109568],{"id":109567},"renderer-输出是什么","renderer 输出是什么",[26,109570,109572],{"className":723,"code":109571,"language":305,"meta":32,"style":32},"image = renderer.render()\n",[34,109573,109574],{"__ignoreMap":32},[167,109575,109576,109578,109580],{"class":169,"line":170},[167,109577,109171],{"class":512},[167,109579,523],{"class":731},[167,109581,109176],{"class":512},[19,109583,109584],{},"得到的是 NumPy 数组，形状通常是：",[26,109586,109589],{"className":109587,"code":109588,"language":31,"meta":32},[29],"(height, width, 3)\n",[34,109590,109588],{"__ignoreMap":32},[19,109592,109593],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,109595,109597],{"className":723,"code":109596,"language":305,"meta":32,"style":32},"Image.fromarray(image).save(\"render_output.png\")\n",[34,109598,109599],{"__ignoreMap":32},[167,109600,109601,109604,109607],{"class":169,"line":170},[167,109602,109603],{"class":512},"Image.fromarray(image).save(",[167,109605,109606],{"class":177},"\"render_output.png\"",[167,109608,873],{"class":512},[14,109610,683],{"id":682},[19,109612,109613],{},"交互式 Viewer:",[26,109615,109617],{"className":723,"code":109616,"language":305,"meta":32,"style":32},"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",[34,109618,109619,109625,109629,109635,109641,109645,109649,109657,109662,109666,109670,109674,109679,109684,109688,109692,109696,109701,109705,109709,109713,109717,109721,109725,109737,109749,109757,109761,109771,109791,109801,109806,109811,109815,109832,109845,109850,109854,109858,109870],{"__ignoreMap":32},[167,109620,109621,109623],{"class":169,"line":170},[167,109622,732],{"class":731},[167,109624,33834],{"class":512},[167,109626,109627],{"class":169,"line":191},[167,109628,741],{"emptyLinePlaceholder":740},[167,109630,109631,109633],{"class":169,"line":205},[167,109632,732],{"class":731},[167,109634,735],{"class":512},[167,109636,109637,109639],{"class":169,"line":219},[167,109638,732],{"class":731},[167,109640,109143],{"class":512},[167,109642,109643],{"class":169,"line":230},[167,109644,741],{"emptyLinePlaceholder":740},[167,109646,109647],{"class":169,"line":241},[167,109648,741],{"emptyLinePlaceholder":740},[167,109650,109651,109653,109655],{"class":169,"line":261},[167,109652,750],{"class":184},[167,109654,753],{"class":731},[167,109656,756],{"class":177},[167,109658,109659],{"class":169,"line":773},[167,109660,109661],{"class":177},"\u003Cmujoco model=\"viewer_demo\">\n",[167,109663,109664],{"class":169,"line":779},[167,109665,766],{"class":177},[167,109667,109668],{"class":169,"line":785},[167,109669,741],{"emptyLinePlaceholder":740},[167,109671,109672],{"class":169,"line":790},[167,109673,776],{"class":177},[167,109675,109676],{"class":169,"line":796},[167,109677,109678],{"class":177},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[167,109680,109681],{"class":169,"line":802},[167,109682,109683],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[167,109685,109686],{"class":169,"line":808},[167,109687,741],{"emptyLinePlaceholder":740},[167,109689,109690],{"class":169,"line":814},[167,109691,793],{"class":177},[167,109693,109694],{"class":169,"line":820},[167,109695,799],{"class":177},[167,109697,109698],{"class":169,"line":826},[167,109699,109700],{"class":177},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[167,109702,109703],{"class":169,"line":832},[167,109704,811],{"class":177},[167,109706,109707],{"class":169,"line":837},[167,109708,817],{"class":177},[167,109710,109711],{"class":169,"line":842},[167,109712,823],{"class":177},[167,109714,109715],{"class":169,"line":860},[167,109716,829],{"class":177},[167,109718,109719],{"class":169,"line":876},[167,109720,741],{"emptyLinePlaceholder":740},[167,109722,109723],{"class":169,"line":887},[167,109724,741],{"emptyLinePlaceholder":740},[167,109726,109727,109729,109731,109733,109735],{"class":169,"line":892},[167,109728,845],{"class":731},[167,109730,848],{"class":173},[167,109732,851],{"class":512},[167,109734,854],{"class":184},[167,109736,857],{"class":512},[167,109738,109739,109741,109743,109745,109747],{"class":169,"line":907},[167,109740,863],{"class":512},[167,109742,523],{"class":731},[167,109744,868],{"class":512},[167,109746,750],{"class":184},[167,109748,873],{"class":512},[167,109750,109751,109753,109755],{"class":169,"line":920},[167,109752,879],{"class":512},[167,109754,523],{"class":731},[167,109756,884],{"class":512},[167,109758,109759],{"class":169,"line":933},[167,109760,741],{"emptyLinePlaceholder":740},[167,109762,109763,109765,109767,109769],{"class":169,"line":946},[167,109764,36180],{"class":731},[167,109766,109427],{"class":512},[167,109768,33388],{"class":731},[167,109770,109432],{"class":512},[167,109772,109773,109776,109779,109781,109784,109786,109789],{"class":169,"line":959},[167,109774,109775],{"class":731},"        while",[167,109777,109778],{"class":512}," viewer.is_running() ",[167,109780,32470],{"class":731},[167,109782,109783],{"class":512}," data.time ",[167,109785,513],{"class":731},[167,109787,109788],{"class":184}," 5.0",[167,109790,857],{"class":512},[167,109792,109793,109796,109798],{"class":169,"line":964},[167,109794,109795],{"class":512},"            step_start ",[167,109797,523],{"class":731},[167,109799,109800],{"class":512}," time.time()\n",[167,109802,109803],{"class":169,"line":987},[167,109804,109805],{"class":512},"            mujoco.mj_step(model, data)\n",[167,109807,109808],{"class":169,"line":993},[167,109809,109810],{"class":512},"            viewer.sync()\n",[167,109812,109813],{"class":169,"line":998},[167,109814,741],{"emptyLinePlaceholder":740},[167,109816,109817,109820,109822,109824,109826,109828,109830],{"class":169,"line":1010},[167,109818,109819],{"class":512},"            sleep_time ",[167,109821,523],{"class":731},[167,109823,109551],{"class":512},[167,109825,2732],{"class":731},[167,109827,109556],{"class":512},[167,109829,2732],{"class":731},[167,109831,109561],{"class":512},[167,109833,109834,109836,109839,109841,109843],{"class":169,"line":1022},[167,109835,6674],{"class":731},[167,109837,109838],{"class":512}," sleep_time ",[167,109840,3159],{"class":731},[167,109842,6125],{"class":184},[167,109844,857],{"class":512},[167,109846,109847],{"class":169,"line":1027},[167,109848,109849],{"class":512},"                time.sleep(sleep_time)\n",[167,109851,109852],{"class":169,"line":1032},[167,109853,741],{"emptyLinePlaceholder":740},[167,109855,109856],{"class":169,"line":1049},[167,109857,741],{"emptyLinePlaceholder":740},[167,109859,109860,109862,109864,109866,109868],{"class":169,"line":10005},[167,109861,1035],{"class":731},[167,109863,1038],{"class":184},[167,109865,1041],{"class":731},[167,109867,1044],{"class":177},[167,109869,857],{"class":512},[167,109871,109872],{"class":169,"line":10011},[167,109873,1052],{"class":512},[19,109875,105161],{},[26,109877,109879],{"className":161,"code":109878,"language":163,"meta":32,"style":32},"touch ch5_viewer.py\n",[34,109880,109881],{"__ignoreMap":32},[167,109882,109883,109885],{"class":169,"line":170},[167,109884,714],{"class":173},[167,109886,109887],{"class":177}," ch5_viewer.py\n",[19,109889,109890],{},"离屏 Renderer 保存图片:",[26,109892,109894],{"className":723,"code":109893,"language":305,"meta":32,"style":32},"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",[34,109895,109896,109908,109912,109918,109928,109932,109936,109944,109949,109953,109957,109961,109965,109970,109974,109978,109982,109986,109990,109994,109998,110002,110006,110010,110014,110026,110038,110046,110071,110075,110091,110095,110099,110114,110123,110127,110141,110146,110151,110155,110167,110179,110183,110187,110199],{"__ignoreMap":32},[167,109897,109898,109900,109903,109905],{"class":169,"line":170},[167,109899,32745],{"class":731},[167,109901,109902],{"class":512}," pathlib ",[167,109904,732],{"class":731},[167,109906,109907],{"class":512}," Path\n",[167,109909,109910],{"class":169,"line":191},[167,109911,741],{"emptyLinePlaceholder":740},[167,109913,109914,109916],{"class":169,"line":205},[167,109915,732],{"class":731},[167,109917,735],{"class":512},[167,109919,109920,109922,109924,109926],{"class":169,"line":219},[167,109921,32745],{"class":731},[167,109923,49263],{"class":184},[167,109925,49266],{"class":731},[167,109927,49269],{"class":512},[167,109929,109930],{"class":169,"line":230},[167,109931,741],{"emptyLinePlaceholder":740},[167,109933,109934],{"class":169,"line":241},[167,109935,741],{"emptyLinePlaceholder":740},[167,109937,109938,109940,109942],{"class":169,"line":261},[167,109939,750],{"class":184},[167,109941,753],{"class":731},[167,109943,756],{"class":177},[167,109945,109946],{"class":169,"line":773},[167,109947,109948],{"class":177},"\u003Cmujoco model=\"renderer_demo\">\n",[167,109950,109951],{"class":169,"line":779},[167,109952,766],{"class":177},[167,109954,109955],{"class":169,"line":785},[167,109956,741],{"emptyLinePlaceholder":740},[167,109958,109959],{"class":169,"line":790},[167,109960,776],{"class":177},[167,109962,109963],{"class":169,"line":796},[167,109964,109678],{"class":177},[167,109966,109967],{"class":169,"line":802},[167,109968,109969],{"class":177},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[167,109971,109972],{"class":169,"line":808},[167,109973,109683],{"class":177},[167,109975,109976],{"class":169,"line":814},[167,109977,741],{"emptyLinePlaceholder":740},[167,109979,109980],{"class":169,"line":820},[167,109981,793],{"class":177},[167,109983,109984],{"class":169,"line":826},[167,109985,799],{"class":177},[167,109987,109988],{"class":169,"line":832},[167,109989,109700],{"class":177},[167,109991,109992],{"class":169,"line":837},[167,109993,811],{"class":177},[167,109995,109996],{"class":169,"line":842},[167,109997,817],{"class":177},[167,109999,110000],{"class":169,"line":860},[167,110001,823],{"class":177},[167,110003,110004],{"class":169,"line":876},[167,110005,829],{"class":177},[167,110007,110008],{"class":169,"line":887},[167,110009,741],{"emptyLinePlaceholder":740},[167,110011,110012],{"class":169,"line":892},[167,110013,741],{"emptyLinePlaceholder":740},[167,110015,110016,110018,110020,110022,110024],{"class":169,"line":907},[167,110017,845],{"class":731},[167,110019,848],{"class":173},[167,110021,851],{"class":512},[167,110023,854],{"class":184},[167,110025,857],{"class":512},[167,110027,110028,110030,110032,110034,110036],{"class":169,"line":920},[167,110029,863],{"class":512},[167,110031,523],{"class":731},[167,110033,868],{"class":512},[167,110035,750],{"class":184},[167,110037,873],{"class":512},[167,110039,110040,110042,110044],{"class":169,"line":933},[167,110041,879],{"class":512},[167,110043,523],{"class":731},[167,110045,884],{"class":512},[167,110047,110048,110051,110053,110055,110057,110059,110061,110063,110065,110067,110069],{"class":169,"line":946},[167,110049,110050],{"class":512},"    renderer ",[167,110052,523],{"class":731},[167,110054,109465],{"class":512},[167,110056,27002],{"class":7246},[167,110058,523],{"class":731},[167,110060,44342],{"class":184},[167,110062,14463],{"class":512},[167,110064,26998],{"class":7246},[167,110066,523],{"class":731},[167,110068,109480],{"class":184},[167,110070,873],{"class":512},[167,110072,110073],{"class":169,"line":959},[167,110074,741],{"emptyLinePlaceholder":740},[167,110076,110077,110079,110081,110083,110085,110087,110089],{"class":169,"line":964},[167,110078,967],{"class":731},[167,110080,970],{"class":512},[167,110082,973],{"class":731},[167,110084,976],{"class":184},[167,110086,898],{"class":512},[167,110088,981],{"class":184},[167,110090,984],{"class":512},[167,110092,110093],{"class":169,"line":987},[167,110094,990],{"class":512},[167,110096,110097],{"class":169,"line":993},[167,110098,741],{"emptyLinePlaceholder":740},[167,110100,110101,110104,110107,110109,110112],{"class":169,"line":998},[167,110102,110103],{"class":512},"    renderer.update_scene(data, ",[167,110105,110106],{"class":7246},"camera",[167,110108,523],{"class":731},[167,110110,110111],{"class":177},"\"fixed_camera\"",[167,110113,873],{"class":512},[167,110115,110116,110119,110121],{"class":169,"line":1010},[167,110117,110118],{"class":512},"    image ",[167,110120,523],{"class":731},[167,110122,109176],{"class":512},[167,110124,110125],{"class":169,"line":1022},[167,110126,741],{"emptyLinePlaceholder":740},[167,110128,110129,110132,110134,110137,110139],{"class":169,"line":1027},[167,110130,110131],{"class":512},"    output_path ",[167,110133,523],{"class":731},[167,110135,110136],{"class":512}," Path(",[167,110138,109606],{"class":177},[167,110140,873],{"class":512},[167,110142,110143],{"class":169,"line":1032},[167,110144,110145],{"class":512},"    Image.fromarray(image).save(output_path)\n",[167,110147,110148],{"class":169,"line":1049},[167,110149,110150],{"class":512},"    renderer.close()\n",[167,110152,110153],{"class":169,"line":10005},[167,110154,741],{"emptyLinePlaceholder":740},[167,110156,110157,110159,110161,110164],{"class":169,"line":10011},[167,110158,895],{"class":184},[167,110160,898],{"class":512},[167,110162,110163],{"class":177},"\"saved:\"",[167,110165,110166],{"class":512},", output_path.resolve())\n",[167,110168,110169,110171,110173,110176],{"class":169,"line":10038},[167,110170,895],{"class":184},[167,110172,898],{"class":512},[167,110174,110175],{"class":177},"\"image shape:\"",[167,110177,110178],{"class":512},", image.shape)\n",[167,110180,110181],{"class":169,"line":10043},[167,110182,741],{"emptyLinePlaceholder":740},[167,110184,110185],{"class":169,"line":10049},[167,110186,741],{"emptyLinePlaceholder":740},[167,110188,110189,110191,110193,110195,110197],{"class":169,"line":10061},[167,110190,1035],{"class":731},[167,110192,1038],{"class":184},[167,110194,1041],{"class":731},[167,110196,1044],{"class":177},[167,110198,857],{"class":512},[167,110200,110201],{"class":169,"line":10073},[167,110202,1052],{"class":512},[19,110204,105161],{},[26,110206,110208],{"className":161,"code":110207,"language":163,"meta":32,"style":32},"touch ch5_renderer.py\n",[34,110209,110210],{"__ignoreMap":32},[167,110211,110212,110214],{"class":169,"line":170},[167,110213,714],{"class":173},[167,110215,110216],{"class":177}," ch5_renderer.py\n",[494,110218,1055],{"id":1055},[19,110220,110221],{},"viewer 上下文：",[26,110223,110225],{"className":723,"code":110224,"language":305,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[34,110226,110227],{"__ignoreMap":32},[167,110228,110229,110231,110233,110235],{"class":169,"line":170},[167,110230,109424],{"class":731},[167,110232,109427],{"class":512},[167,110234,33388],{"class":731},[167,110236,109432],{"class":512},[19,110238,110239,110241],{},[34,110240,109424],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110243,110244],{},"窗口循环：",[26,110246,110248],{"className":723,"code":110247,"language":305,"meta":32,"style":32},"while viewer.is_running() and data.time \u003C 5.0:\n",[34,110249,110250],{"__ignoreMap":32},[167,110251,110252,110255,110257,110259,110261,110263,110265],{"class":169,"line":170},[167,110253,110254],{"class":731},"while",[167,110256,109778],{"class":512},[167,110258,32470],{"class":731},[167,110260,109783],{"class":512},[167,110262,513],{"class":731},[167,110264,109788],{"class":184},[167,110266,857],{"class":512},[19,110268,110269],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110271,110272],{},"固定相机：",[26,110274,110276],{"className":503,"code":110275,"language":505,"meta":32,"style":32},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,110277,110278],{"__ignoreMap":32},[167,110279,110280,110282,110284,110286,110288,110290,110292,110294,110297,110300,110302,110305],{"class":169,"line":170},[167,110281,513],{"class":512},[167,110283,110106],{"class":516},[167,110285,520],{"class":173},[167,110287,523],{"class":512},[167,110289,110111],{"class":177},[167,110291,529],{"class":173},[167,110293,523],{"class":512},[167,110295,110296],{"class":177},"\"1.5 -2.0 1.2\"",[167,110298,110299],{"class":173}," xyaxes",[167,110301,523],{"class":512},[167,110303,110304],{"class":177},"\"1 0.75 0 0 0 1\"",[167,110306,570],{"class":512},[19,110308,110309],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[494,110311,110313],{"id":110312},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,110315,110317],{"className":723,"code":110316,"language":305,"meta":32,"style":32},"import time\n",[34,110318,110319],{"__ignoreMap":32},[167,110320,110321,110323],{"class":169,"line":170},[167,110322,732],{"class":731},[167,110324,33834],{"class":512},[19,110326,110327],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,110329,110331],{"className":723,"code":110330,"language":305,"meta":32,"style":32},"import mujoco\nimport mujoco.viewer\n",[34,110332,110333,110339],{"__ignoreMap":32},[167,110334,110335,110337],{"class":169,"line":170},[167,110336,732],{"class":731},[167,110338,735],{"class":512},[167,110340,110341,110343],{"class":169,"line":191},[167,110342,732],{"class":731},[167,110344,109143],{"class":512},[19,110346,110347],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,110349,110350],{"className":723,"code":110224,"language":305,"meta":32,"style":32},[34,110351,110352],{"__ignoreMap":32},[167,110353,110354,110356,110358,110360],{"class":169,"line":170},[167,110355,109424],{"class":731},[167,110357,109427],{"class":512},[167,110359,33388],{"class":731},[167,110361,109432],{"class":512},[19,110363,110364,110365,110368],{},"打开一个 viewer 窗口。",[34,110366,110367],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,110370,110371],{"className":723,"code":110247,"language":305,"meta":32,"style":32},[34,110372,110373],{"__ignoreMap":32},[167,110374,110375,110377,110379,110381,110383,110385,110387],{"class":169,"line":170},[167,110376,110254],{"class":731},[167,110378,109778],{"class":512},[167,110380,32470],{"class":731},[167,110382,109783],{"class":512},[167,110384,513],{"class":731},[167,110386,109788],{"class":184},[167,110388,857],{"class":512},[19,110390,110391,110392,110395],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[34,110393,110394],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,110397,110399],{"className":723,"code":110398,"language":305,"meta":32,"style":32},"step_start = time.time()\n",[34,110400,110401],{"__ignoreMap":32},[167,110402,110403,110406,110408],{"class":169,"line":170},[167,110404,110405],{"class":512},"step_start ",[167,110407,523],{"class":731},[167,110409,109800],{"class":512},[19,110411,110412],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,110414,110415],{"className":723,"code":109509,"language":305,"meta":32,"style":32},[34,110416,110417,110421],{"__ignoreMap":32},[167,110418,110419],{"class":169,"line":170},[167,110420,106096],{"class":512},[167,110422,110423],{"class":169,"line":191},[167,110424,109520],{"class":512},[19,110426,110427,110429,110430,110432,110433,110435,110436,110439],{},[34,110428,644],{}," 推进物理仿真。",[34,110431,109528],{}," 把最新的 ",[34,110434,1150],{}," 同步到窗口里显示。没有 ",[34,110437,110438],{},"sync()","，窗口可能看不到最新状态。",[26,110441,110442],{"className":723,"code":109539,"language":305,"meta":32,"style":32},[34,110443,110444],{"__ignoreMap":32},[167,110445,110446,110448,110450,110452,110454,110456,110458],{"class":169,"line":170},[167,110447,109546],{"class":512},[167,110449,523],{"class":731},[167,110451,109551],{"class":512},[167,110453,2732],{"class":731},[167,110455,109556],{"class":512},[167,110457,2732],{"class":731},[167,110459,109561],{"class":512},[19,110461,110462],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,110464,110466],{"className":723,"code":110465,"language":305,"meta":32,"style":32},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[34,110467,110468,110480],{"__ignoreMap":32},[167,110469,110470,110472,110474,110476,110478],{"class":169,"line":170},[167,110471,1035],{"class":731},[167,110473,109838],{"class":512},[167,110475,3159],{"class":731},[167,110477,6125],{"class":184},[167,110479,857],{"class":512},[167,110481,110482],{"class":169,"line":191},[167,110483,110484],{"class":512},"    time.sleep(sleep_time)\n",[19,110486,110487],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[494,110489,110491],{"id":110490},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,110493,110495],{"className":723,"code":110494,"language":305,"meta":32,"style":32},"from pathlib import Path\n",[34,110496,110497],{"__ignoreMap":32},[167,110498,110499,110501,110503,110505],{"class":169,"line":170},[167,110500,32745],{"class":731},[167,110502,109902],{"class":512},[167,110504,732],{"class":731},[167,110506,109907],{"class":512},[19,110508,110509,110510,110513,110514,110517],{},"导入 ",[34,110511,110512],{},"Path","，用来处理文件路径。相比直接写字符串，",[34,110515,110516],{},"Path(\"render_output.png\")"," 更清晰。",[26,110519,110521],{"className":723,"code":110520,"language":305,"meta":32,"style":32},"from PIL import Image\n",[34,110522,110523],{"__ignoreMap":32},[167,110524,110525,110527,110529,110531],{"class":169,"line":170},[167,110526,32745],{"class":731},[167,110528,49263],{"class":184},[167,110530,49266],{"class":731},[167,110532,49269],{"class":512},[19,110534,110535],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,110537,110538],{"className":503,"code":110275,"language":505,"meta":32,"style":32},[34,110539,110540],{"__ignoreMap":32},[167,110541,110542,110544,110546,110548,110550,110552,110554,110556,110558,110560,110562,110564],{"class":169,"line":170},[167,110543,513],{"class":512},[167,110545,110106],{"class":516},[167,110547,520],{"class":173},[167,110549,523],{"class":512},[167,110551,110111],{"class":177},[167,110553,529],{"class":173},[167,110555,523],{"class":512},[167,110557,110296],{"class":177},[167,110559,110299],{"class":173},[167,110561,523],{"class":512},[167,110563,110304],{"class":177},[167,110565,570],{"class":512},[19,110567,110568,110569,110571,110572,110574,110575,110578,110579,110581],{},"定义一个相机。",[34,110570,81797],{}," 是相机名字。",[34,110573,105737],{}," 是相机在世界里的位置。",[34,110576,110577],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[34,110580,105737],{}," 来调视角。",[26,110583,110585],{"className":723,"code":110584,"language":305,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[34,110586,110587],{"__ignoreMap":32},[167,110588,110589,110591,110593,110595,110597,110599,110601,110603,110605,110607,110609],{"class":169,"line":170},[167,110590,109161],{"class":512},[167,110592,523],{"class":731},[167,110594,109465],{"class":512},[167,110596,27002],{"class":7246},[167,110598,523],{"class":731},[167,110600,44342],{"class":184},[167,110602,14463],{"class":512},[167,110604,26998],{"class":7246},[167,110606,523],{"class":731},[167,110608,109480],{"class":184},[167,110610,873],{"class":512},[19,110612,110613,110614,429,110616,110618],{},"创建离屏渲染器。",[34,110615,27002],{},[34,110617,26998],{}," 决定输出图片大小。",[26,110620,110621],{"className":723,"code":1161,"language":305,"meta":32,"style":32},[34,110622,110623,110639],{"__ignoreMap":32},[167,110624,110625,110627,110629,110631,110633,110635,110637],{"class":169,"line":170},[167,110626,1168],{"class":731},[167,110628,970],{"class":512},[167,110630,973],{"class":731},[167,110632,976],{"class":184},[167,110634,898],{"class":512},[167,110636,981],{"class":184},[167,110638,984],{"class":512},[167,110640,110641],{"class":169,"line":191},[167,110642,1185],{"class":512},[19,110644,110645],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,110647,110649],{"className":723,"code":110648,"language":305,"meta":32,"style":32},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[34,110650,110651],{"__ignoreMap":32},[167,110652,110653,110656,110658,110660,110662],{"class":169,"line":170},[167,110654,110655],{"class":512},"renderer.update_scene(data, ",[167,110657,110106],{"class":7246},[167,110659,523],{"class":731},[167,110661,110111],{"class":177},[167,110663,873],{"class":512},[19,110665,110666,110667,110669,110670,110673],{},"告诉 renderer：用当前 ",[34,110668,1150],{}," 的状态更新画面，并使用名为 ",[34,110671,110672],{},"fixed_camera"," 的相机视角。",[26,110675,110676],{"className":723,"code":109571,"language":305,"meta":32,"style":32},[34,110677,110678],{"__ignoreMap":32},[167,110679,110680,110682,110684],{"class":169,"line":170},[167,110681,109171],{"class":512},[167,110683,523],{"class":731},[167,110685,109176],{"class":512},[19,110687,110688,110689,110692],{},"真正渲染出图像。",[34,110690,110691],{},"image"," 是一个 NumPy 数组，不是文件。",[26,110694,110696],{"className":723,"code":110695,"language":305,"meta":32,"style":32},"Image.fromarray(image).save(output_path)\n",[34,110697,110698],{"__ignoreMap":32},[167,110699,110700],{"class":169,"line":170},[167,110701,110695],{"class":512},[19,110703,110704,110705,423],{},"把数组转换成图片，并保存到 ",[34,110706,110707],{},"render_output.png",[26,110709,110711],{"className":723,"code":110710,"language":305,"meta":32,"style":32},"renderer.close()\n",[34,110712,110713],{"__ignoreMap":32},[167,110714,110715],{"class":169,"line":170},[167,110716,110710],{"class":512},[19,110718,110719],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110721,1807],{"id":1806},[19,110723,110724,110725,110727,110728,423],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[34,110726,110707],{},"，并输出图像数组形状，例如 ",[34,110729,110730],{},"(480, 640, 3)",[19,110732,110733],{},"如果图片里看不到方块，先检查：",[40,110735,110736,110739,110742],{},[43,110737,110738],{},"方块是否掉到相机视野外。",[43,110740,110741],{},"camera 位置是否合理。",[43,110743,110744,110745,110748],{},"是否在 ",[34,110746,110747],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110750,1839],{"id":1838},[19,110752,110753],{},"运行 viewer:",[26,110755,110757],{"className":161,"code":110756,"language":163,"meta":32,"style":32},"python ch5_viewer.py\n",[34,110758,110759],{"__ignoreMap":32},[167,110760,110761,110763],{"class":169,"line":170},[167,110762,305],{"class":173},[167,110764,109887],{"class":177},[19,110766,110767],{},"运行 renderer:",[26,110769,110771],{"className":161,"code":110770,"language":163,"meta":32,"style":32},"python ch5_renderer.py\n",[34,110772,110773],{"__ignoreMap":32},[167,110774,110775,110777],{"class":169,"line":170},[167,110776,305],{"class":173},[167,110778,110216],{"class":177},[19,110780,110781],{},"如果在服务器上运行:",[26,110783,110785],{"className":161,"code":110784,"language":163,"meta":32,"style":32},"MUJOCO_GL=egl python ch5_renderer.py\n",[34,110786,110787],{"__ignoreMap":32},[167,110788,110789,110791,110793,110795,110798],{"class":169,"line":170},[167,110790,109405],{"class":512},[167,110792,523],{"class":731},[167,110794,109395],{"class":177},[167,110796,110797],{"class":173}," python",[167,110799,110216],{"class":177},[19,110801,109373],{},[26,110803,110805],{"className":161,"code":110804,"language":163,"meta":32,"style":32},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[34,110806,110807],{"__ignoreMap":32},[167,110808,110809,110811,110813,110815,110817],{"class":169,"line":170},[167,110810,109405],{"class":512},[167,110812,523],{"class":731},[167,110814,109399],{"class":177},[167,110816,110797],{"class":173},[167,110818,110216],{"class":177},[19,110820,110821],{},"再做几个练习：",[40,110823,110824,110831,110834,110840],{},[43,110825,110826,110827,110830],{},"把 renderer 分辨率改成 ",[34,110828,110829],{},"height=240, width=320","，观察输出 shape。",[43,110832,110833],{},"把方块颜色改成蓝色，重新保存图片。",[43,110835,110836,110837,110839],{},"把相机 ",[34,110838,105737],{}," 改远一点，观察画面中物体是否变小。",[43,110841,110842,110843,1905,110846,110849],{},"把 viewer 示例中的 ",[34,110844,110845],{},"data.time \u003C 5.0",[34,110847,110848],{},"data.time \u003C 20.0","，观察更长时间。",[14,110851,1945],{"id":1944},[494,110853,110855],{"id":110854},"viewer-窗口打不开","viewer 窗口打不开",[19,110857,110858],{},"安装:",[26,110860,110862],{"className":161,"code":110861,"language":163,"meta":32,"style":32},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[34,110863,110864],{"__ignoreMap":32},[167,110865,110866,110868,110870,110872,110874,110876,110878,110880,110882,110884,110886],{"class":169,"line":170},[167,110867,174],{"class":173},[167,110869,178],{"class":177},[167,110871,181],{"class":177},[167,110873,185],{"class":184},[167,110875,1998],{"class":177},[167,110877,236],{"class":177},[167,110879,2003],{"class":177},[167,110881,250],{"class":177},[167,110883,256],{"class":177},[167,110885,247],{"class":177},[167,110887,110888],{"class":177}," libXinerama\n",[494,110890,110892],{"id":110891},"glfwerror",[34,110893,110894],{},"GLFWError",[19,110896,110897],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[494,110899,110901],{"id":110900},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110903,110904,110905,449,110907,110909],{},"尝试 ",[34,110906,448],{},[34,110908,452],{},"。可能存在版本差异。",[494,110911,110912],{"id":110912},"保存图片是黑的",[19,110914,2067],{},[40,110916,110917,110920,110923,110933],{},[43,110918,110919],{},"XML 里是否有 light。",[43,110921,110922],{},"相机是否对着模型。",[43,110924,110925,110926,110929,110930,423],{},"是否先 ",[34,110927,110928],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[34,110931,110932],{},"renderer.render()",[43,110934,110935],{},"物体是否已经掉出视野。",[494,110937,110938],{"id":110938},"远程服务器没有显示器",[19,110940,110941],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,110943,110944],{"className":161,"code":110784,"language":163,"meta":32,"style":32},[34,110945,110946],{"__ignoreMap":32},[167,110947,110948,110950,110952,110954,110956],{"class":169,"line":170},[167,110949,109405],{"class":512},[167,110951,523],{"class":731},[167,110953,109395],{"class":177},[167,110955,110797],{"class":173},[167,110957,110216],{"class":177},[19,110959,110960],{},"如果 EGL 不可用，再尝试：",[26,110962,110963],{"className":161,"code":110804,"language":163,"meta":32,"style":32},[34,110964,110965],{"__ignoreMap":32},[167,110966,110967,110969,110971,110973,110975],{"class":169,"line":170},[167,110968,109405],{"class":512},[167,110970,523],{"class":731},[167,110972,109399],{"class":177},[167,110974,110797],{"class":173},[167,110976,110216],{"class":177},[14,110978,2099],{"id":2098},[19,110980,110981],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[40,110983,110984,110987,110990],{},[43,110985,110986],{},"先用 viewer 看模型和控制是否正常。",[43,110988,110989],{},"再用 renderer 保存图片或构造视觉观测。",[43,110991,110992],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2113,110994,110995],{},"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":32,"searchDepth":191,"depth":191,"links":110997},[110998,110999,111000,111005,111010,111011,111012,111019],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":111001},[111002,111003,111004],{"id":109502,"depth":205,"text":109503},{"id":109532,"depth":205,"text":109533},{"id":109567,"depth":205,"text":109568},{"id":682,"depth":191,"text":683,"children":111006},[111007,111008,111009],{"id":1055,"depth":205,"text":1055},{"id":110312,"depth":205,"text":110313},{"id":110490,"depth":205,"text":110491},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":111013},[111014,111015,111016,111017,111018],{"id":110854,"depth":205,"text":110855},{"id":110891,"depth":205,"text":110894},{"id":110900,"depth":205,"text":110901},{"id":110912,"depth":205,"text":110912},{"id":110938,"depth":205,"text":110938},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109110,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111026,"title":111027,"body":111028,"description":32,"extension":2140,"meta":112939,"navigation":740,"path":112940,"seo":112941,"stem":112942,"__hash__":112943},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111029,"toc":112915},[111030,111033,111035,111038,111040,111059,111062,111068,111071,111073,111075,111099,111101,111115,111117,111158,111160,111171,111173,111176,111182,111185,111219,111222,111254,111257,111289,111293,111296,111336,111339,111345,111348,111354,111358,111361,111367,111370,111374,111377,111417,111419,111432,111435,111437,112019,112021,112033,112036,112047,112049,112052,112071,112083,112086,112107,112110,112113,112156,112159,112162,112182,112189,112191,112209,112224,112227,112233,112236,112242,112259,112266,112297,112308,112342,112353,112370,112379,112387,112392,112406,112409,112430,112436,112450,112455,112485,112495,112520,112528,112551,112554,112570,112573,112581,112587,112609,112622,112643,112652,112691,112702,112704,112707,112713,112716,112719,112725,112728,112748,112751,112753,112792,112794,112797,112805,112808,112811,112838,112841,112851,112857,112860,112866,112868,112874,112878,112881,112883,112886,112910,112913],[10,111031,111027],{"id":111032},"_6控制任务cartpole",[14,111034,17],{"id":16},[19,111036,111037],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111039,105922],{},[40,111041,111042,111045,111047,111050,111053,111056],{},[43,111043,111044],{},"slide joint",[43,111046,107775],{},[43,111048,111049],{},"cart force actuator",[43,111051,111052],{},"状态观测",[43,111054,111055],{},"简单控制循环",[43,111057,111058],{},"reward 设计雏形",[19,111060,111061],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,111063,111066],{"className":111064,"code":111065,"language":31,"meta":32},[29],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[34,111067,111065],{"__ignoreMap":32},[19,111069,111070],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111072,155],{"id":154},[19,111074,158],{},[26,111076,111077],{"className":161,"code":105979,"language":163,"meta":32,"style":32},[34,111078,111079],{"__ignoreMap":32},[167,111080,111081,111083,111085,111087,111089,111091,111093,111095,111097],{"class":169,"line":170},[167,111082,174],{"class":173},[167,111084,178],{"class":177},[167,111086,181],{"class":177},[167,111088,185],{"class":184},[167,111090,105994],{"class":177},[167,111092,197],{"class":177},[167,111094,1993],{"class":177},[167,111096,214],{"class":177},[167,111098,106003],{"class":177},[19,111100,104410],{},[26,111102,111103],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,111104,111105],{"__ignoreMap":32},[167,111106,111107,111109,111111,111113],{"class":169,"line":170},[167,111108,331],{"class":173},[167,111110,181],{"class":177},[167,111112,336],{"class":177},[167,111114,339],{"class":177},[19,111116,104427],{},[26,111118,111120],{"className":161,"code":111119,"language":163,"meta":32,"style":32},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[34,111121,111122,111139,111148],{"__ignoreMap":32},[167,111123,111124,111126,111128,111130,111133,111135,111137],{"class":169,"line":170},[167,111125,373],{"class":173},[167,111127,376],{"class":177},[167,111129,379],{"class":184},[167,111131,111132],{"class":177}," mujoco-cartpole",[167,111134,385],{"class":177},[167,111136,388],{"class":184},[167,111138,391],{"class":184},[167,111140,111141,111143,111145],{"class":169,"line":191},[167,111142,373],{"class":173},[167,111144,398],{"class":177},[167,111146,111147],{"class":177}," mujoco-cartpole\n",[167,111149,111150,111152,111154,111156],{"class":169,"line":205},[167,111151,331],{"class":173},[167,111153,181],{"class":177},[167,111155,336],{"class":177},[167,111157,339],{"class":177},[19,111159,414],{},[40,111161,111162,111165,111168],{},[43,111163,111164],{},"本章不依赖 Gymnasium。",[43,111166,111167],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[43,111169,111170],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111172,457],{"id":456},[19,111174,111175],{},"Cartpole 的模型结构:",[26,111177,111180],{"className":111178,"code":111179,"language":31,"meta":32},[29],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[34,111181,111179],{"__ignoreMap":32},[19,111183,111184],{},"小车通过 slide joint 左右移动:",[26,111186,111188],{"className":503,"code":111187,"language":505,"meta":32,"style":32},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[34,111189,111190],{"__ignoreMap":32},[167,111191,111192,111194,111196,111198,111200,111203,111205,111207,111210,111212,111214,111217],{"class":169,"line":170},[167,111193,513],{"class":512},[167,111195,104547],{"class":516},[167,111197,520],{"class":173},[167,111199,523],{"class":512},[167,111201,111202],{"class":177},"\"cart_x\"",[167,111204,555],{"class":173},[167,111206,523],{"class":512},[167,111208,111209],{"class":177},"\"slide\"",[167,111211,107619],{"class":173},[167,111213,523],{"class":512},[167,111215,111216],{"class":177},"\"1 0 0\"",[167,111218,570],{"class":512},[19,111220,111221],{},"杆子通过 hinge joint 旋转:",[26,111223,111225],{"className":503,"code":111224,"language":505,"meta":32,"style":32},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,111226,111227],{"__ignoreMap":32},[167,111228,111229,111231,111233,111235,111237,111240,111242,111244,111246,111248,111250,111252],{"class":169,"line":170},[167,111230,513],{"class":512},[167,111232,104547],{"class":516},[167,111234,520],{"class":173},[167,111236,523],{"class":512},[167,111238,111239],{"class":177},"\"pole_hinge\"",[167,111241,555],{"class":173},[167,111243,523],{"class":512},[167,111245,107610],{"class":177},[167,111247,107619],{"class":173},[167,111249,523],{"class":512},[167,111251,107624],{"class":177},[167,111253,570],{"class":512},[19,111255,111256],{},"控制力作用在小车 slide joint 上:",[26,111258,111260],{"className":503,"code":111259,"language":505,"meta":32,"style":32},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[34,111261,111262],{"__ignoreMap":32},[167,111263,111264,111266,111268,111270,111272,111275,111277,111279,111281,111283,111285,111287],{"class":169,"line":170},[167,111265,513],{"class":512},[167,111267,107665],{"class":516},[167,111269,520],{"class":173},[167,111271,523],{"class":512},[167,111273,111274],{"class":177},"\"cart_motor\"",[167,111276,107675],{"class":173},[167,111278,523],{"class":512},[167,111280,111202],{"class":177},[167,111282,107682],{"class":173},[167,111284,523],{"class":512},[167,111286,56306],{"class":177},[167,111288,570],{"class":512},[494,111290,111292],{"id":111291},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111294,111295],{},"这个简化模型有两个关节：",[68,111297,111298,111309],{},[71,111299,111300],{},[74,111301,111302,111304,111306],{},[77,111303,104350],{"align":79},[77,111305,25763],{"align":79},[77,111307,111308],{"align":79},"对应状态",[85,111310,111311,111324],{},[74,111312,111313,111318,111321],{},[90,111314,111315],{"align":79},[34,111316,111317],{},"cart_x",[90,111319,111320],{"align":79},"slide",[90,111322,111323],{"align":79},"小车 x 位置",[74,111325,111326,111331,111333],{},[90,111327,111328],{"align":79},[34,111329,111330],{},"pole_hinge",[90,111332,107431],{"align":79},[90,111334,111335],{"align":79},"杆子角度",[19,111337,111338],{},"所以：",[26,111340,111343],{"className":111341,"code":111342,"language":31,"meta":32},[29],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[34,111344,111342],{"__ignoreMap":32},[19,111346,111347],{},"把它们拼起来就是观测：",[26,111349,111352],{"className":111350,"code":111351,"language":31,"meta":32},[29],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,111353,111351],{"__ignoreMap":32},[494,111355,111357],{"id":111356},"action-是什么","action 是什么",[19,111359,111360],{},"本章只有一个 actuator：",[26,111362,111365],{"className":111363,"code":111364,"language":31,"meta":32},[29],"data.ctrl[0] = action\n",[34,111366,111364],{"__ignoreMap":32},[19,111368,111369],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[494,111371,111373],{"id":111372},"reward-是什么","reward 是什么",[19,111375,111376],{},"奖励函数：",[26,111378,111380],{"className":723,"code":111379,"language":305,"meta":32,"style":32},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[34,111381,111382],{"__ignoreMap":32},[167,111383,111384,111386,111389,111391,111393,111395,111398,111400,111403,111405,111407,111409,111412,111414],{"class":169,"line":170},[167,111385,19072],{"class":731},[167,111387,111388],{"class":184}," float",[167,111390,898],{"class":512},[167,111392,1894],{"class":184},[167,111394,54266],{"class":731},[167,111396,111397],{"class":184}," 0.1",[167,111399,8548],{"class":731},[167,111401,111402],{"class":512}," cart_x ",[167,111404,2655],{"class":731},[167,111406,111402],{"class":512},[167,111408,2732],{"class":731},[167,111410,111411],{"class":512}," pole_angle ",[167,111413,2655],{"class":731},[167,111415,111416],{"class":512}," pole_angle)\n",[19,111418,107817],{},[40,111420,111421,111426,111429],{},[43,111422,111423,111424,423],{},"基础奖励是 ",[34,111425,1894],{},[43,111427,111428],{},"小车离中心越远，扣分越多。",[43,111430,111431],{},"杆子角度越大，扣分越多。",[19,111433,111434],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111436,683],{"id":682},[26,111438,111440],{"className":723,"code":111439,"language":305,"meta":32,"style":32},"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",[34,111441,111442,111448,111458,111462,111466,111474,111479,111483,111487,111491,111496,111500,111505,111510,111515,111519,111524,111529,111534,111538,111542,111546,111550,111554,111559,111563,111567,111571,111575,111579,111589,111596,111600,111604,111618,111632,111645,111675,111679,111683,111695,111707,111715,111719,111732,111736,111740,111749,111753,111769,111779,111792,111805,111809,111832,111850,111854,111866,111870,111874,111884,111894,111898,111914,111955,111959,111979,111995,111999,112003,112015],{"__ignoreMap":32},[167,111443,111444,111446],{"class":169,"line":170},[167,111445,732],{"class":731},[167,111447,735],{"class":512},[167,111449,111450,111452,111454,111456],{"class":169,"line":191},[167,111451,732],{"class":731},[167,111453,33385],{"class":512},[167,111455,33388],{"class":731},[167,111457,33391],{"class":512},[167,111459,111460],{"class":169,"line":205},[167,111461,741],{"emptyLinePlaceholder":740},[167,111463,111464],{"class":169,"line":219},[167,111465,741],{"emptyLinePlaceholder":740},[167,111467,111468,111470,111472],{"class":169,"line":230},[167,111469,750],{"class":184},[167,111471,753],{"class":731},[167,111473,756],{"class":177},[167,111475,111476],{"class":169,"line":241},[167,111477,111478],{"class":177},"\u003Cmujoco model=\"cartpole\">\n",[167,111480,111481],{"class":169,"line":261},[167,111482,766],{"class":177},[167,111484,111485],{"class":169,"line":773},[167,111486,741],{"emptyLinePlaceholder":740},[167,111488,111489],{"class":169,"line":779},[167,111490,776],{"class":177},[167,111492,111493],{"class":169,"line":785},[167,111494,111495],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[167,111497,111498],{"class":169,"line":790},[167,111499,741],{"emptyLinePlaceholder":740},[167,111501,111502],{"class":169,"line":796},[167,111503,111504],{"class":177},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[167,111506,111507],{"class":169,"line":802},[167,111508,111509],{"class":177},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[167,111511,111512],{"class":169,"line":808},[167,111513,111514],{"class":177},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[167,111516,111517],{"class":169,"line":814},[167,111518,741],{"emptyLinePlaceholder":740},[167,111520,111521],{"class":169,"line":820},[167,111522,111523],{"class":177},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[167,111525,111526],{"class":169,"line":826},[167,111527,111528],{"class":177},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[167,111530,111531],{"class":169,"line":832},[167,111532,111533],{"class":177},"        \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",[167,111535,111536],{"class":169,"line":837},[167,111537,108029],{"class":177},[167,111539,111540],{"class":169,"line":842},[167,111541,811],{"class":177},[167,111543,111544],{"class":169,"line":860},[167,111545,817],{"class":177},[167,111547,111548],{"class":169,"line":876},[167,111549,741],{"emptyLinePlaceholder":740},[167,111551,111552],{"class":169,"line":887},[167,111553,108046],{"class":177},[167,111555,111556],{"class":169,"line":892},[167,111557,111558],{"class":177},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[167,111560,111561],{"class":169,"line":907},[167,111562,108056],{"class":177},[167,111564,111565],{"class":169,"line":920},[167,111566,823],{"class":177},[167,111568,111569],{"class":169,"line":933},[167,111570,829],{"class":177},[167,111572,111573],{"class":169,"line":946},[167,111574,741],{"emptyLinePlaceholder":740},[167,111576,111577],{"class":169,"line":959},[167,111578,741],{"emptyLinePlaceholder":740},[167,111580,111581,111583,111586],{"class":169,"line":964},[167,111582,845],{"class":731},[167,111584,111585],{"class":173}," get_observation",[167,111587,111588],{"class":512},"(data: mujoco.MjData) -> np.ndarray:\n",[167,111590,111591,111593],{"class":169,"line":987},[167,111592,6122],{"class":731},[167,111594,111595],{"class":512}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[167,111597,111598],{"class":169,"line":993},[167,111599,741],{"emptyLinePlaceholder":740},[167,111601,111602],{"class":169,"line":998},[167,111603,741],{"emptyLinePlaceholder":740},[167,111605,111606,111608,111611,111614,111616],{"class":169,"line":1010},[167,111607,845],{"class":731},[167,111609,111610],{"class":173}," compute_reward",[167,111612,111613],{"class":512},"(obs: np.ndarray) -> ",[167,111615,2251],{"class":184},[167,111617,857],{"class":512},[167,111619,111620,111623,111625,111628,111630],{"class":169,"line":1022},[167,111621,111622],{"class":512},"    cart_x ",[167,111624,523],{"class":731},[167,111626,111627],{"class":512}," obs[",[167,111629,1154],{"class":184},[167,111631,35249],{"class":512},[167,111633,111634,111637,111639,111641,111643],{"class":169,"line":1027},[167,111635,111636],{"class":512},"    pole_angle ",[167,111638,523],{"class":731},[167,111640,111627],{"class":512},[167,111642,2418],{"class":184},[167,111644,35249],{"class":512},[167,111646,111647,111649,111651,111653,111655,111657,111659,111661,111663,111665,111667,111669,111671,111673],{"class":169,"line":1032},[167,111648,6122],{"class":731},[167,111650,111388],{"class":184},[167,111652,898],{"class":512},[167,111654,1894],{"class":184},[167,111656,54266],{"class":731},[167,111658,111397],{"class":184},[167,111660,8548],{"class":731},[167,111662,111402],{"class":512},[167,111664,2655],{"class":731},[167,111666,111402],{"class":512},[167,111668,2732],{"class":731},[167,111670,111411],{"class":512},[167,111672,2655],{"class":731},[167,111674,111416],{"class":512},[167,111676,111677],{"class":169,"line":1049},[167,111678,741],{"emptyLinePlaceholder":740},[167,111680,111681],{"class":169,"line":10005},[167,111682,741],{"emptyLinePlaceholder":740},[167,111684,111685,111687,111689,111691,111693],{"class":169,"line":10011},[167,111686,845],{"class":731},[167,111688,848],{"class":173},[167,111690,851],{"class":512},[167,111692,854],{"class":184},[167,111694,857],{"class":512},[167,111696,111697,111699,111701,111703,111705],{"class":169,"line":10038},[167,111698,863],{"class":512},[167,111700,523],{"class":731},[167,111702,868],{"class":512},[167,111704,750],{"class":184},[167,111706,873],{"class":512},[167,111708,111709,111711,111713],{"class":169,"line":10043},[167,111710,879],{"class":512},[167,111712,523],{"class":731},[167,111714,884],{"class":512},[167,111716,111717],{"class":169,"line":10049},[167,111718,741],{"emptyLinePlaceholder":740},[167,111720,111721,111723,111725,111727,111729],{"class":169,"line":10061},[167,111722,106660],{"class":512},[167,111724,2418],{"class":184},[167,111726,6475],{"class":512},[167,111728,523],{"class":731},[167,111730,111731],{"class":184}," 0.1\n",[167,111733,111734],{"class":169,"line":10073},[167,111735,106673],{"class":512},[167,111737,111738],{"class":169,"line":10085},[167,111739,741],{"emptyLinePlaceholder":740},[167,111741,111742,111745,111747],{"class":169,"line":11744},[167,111743,111744],{"class":512},"    total_reward ",[167,111746,523],{"class":731},[167,111748,106352],{"class":184},[167,111750,111751],{"class":169,"line":11769},[167,111752,741],{"emptyLinePlaceholder":740},[167,111754,111755,111757,111759,111761,111763,111765,111767],{"class":169,"line":11792},[167,111756,967],{"class":731},[167,111758,33621],{"class":512},[167,111760,973],{"class":731},[167,111762,976],{"class":184},[167,111764,898],{"class":512},[167,111766,8440],{"class":184},[167,111768,984],{"class":512},[167,111770,111771,111774,111776],{"class":169,"line":11816},[167,111772,111773],{"class":512},"        obs ",[167,111775,523],{"class":731},[167,111777,111778],{"class":512}," get_observation(data)\n",[167,111780,111781,111784,111786,111788,111790],{"class":169,"line":11821},[167,111782,111783],{"class":512},"        pole_angle ",[167,111785,523],{"class":731},[167,111787,111627],{"class":512},[167,111789,2418],{"class":184},[167,111791,35249],{"class":512},[167,111793,111794,111797,111799,111801,111803],{"class":169,"line":11826},[167,111795,111796],{"class":512},"        pole_angular_velocity ",[167,111798,523],{"class":731},[167,111800,111627],{"class":512},[167,111802,2281],{"class":184},[167,111804,35249],{"class":512},[167,111806,111807],{"class":169,"line":11831},[167,111808,741],{"emptyLinePlaceholder":740},[167,111810,111811,111814,111816,111819,111821,111823,111825,111827,111829],{"class":169,"line":11840},[167,111812,111813],{"class":512},"        action ",[167,111815,523],{"class":731},[167,111817,111818],{"class":184}," 2.0",[167,111820,8548],{"class":731},[167,111822,111411],{"class":512},[167,111824,2681],{"class":731},[167,111826,63856],{"class":184},[167,111828,8548],{"class":731},[167,111830,111831],{"class":512}," pole_angular_velocity\n",[167,111833,111834,111836,111838,111840,111842,111844,111846,111848],{"class":169,"line":11845},[167,111835,111813],{"class":512},[167,111837,523],{"class":731},[167,111839,109038],{"class":512},[167,111841,2732],{"class":731},[167,111843,1894],{"class":184},[167,111845,14463],{"class":512},[167,111847,1894],{"class":184},[167,111849,873],{"class":512},[167,111851,111852],{"class":169,"line":11851},[167,111853,741],{"emptyLinePlaceholder":740},[167,111855,111856,111858,111860,111862,111864],{"class":169,"line":11872},[167,111857,108208],{"class":512},[167,111859,1154],{"class":184},[167,111861,6475],{"class":512},[167,111863,523],{"class":731},[167,111865,109061],{"class":512},[167,111867,111868],{"class":169,"line":11878},[167,111869,990],{"class":512},[167,111871,111872],{"class":169,"line":11892},[167,111873,741],{"emptyLinePlaceholder":740},[167,111875,111876,111879,111881],{"class":169,"line":11898},[167,111877,111878],{"class":512},"        reward ",[167,111880,523],{"class":731},[167,111882,111883],{"class":512}," compute_reward(get_observation(data))\n",[167,111885,111886,111889,111891],{"class":169,"line":11925},[167,111887,111888],{"class":512},"        total_reward ",[167,111890,11505],{"class":731},[167,111892,111893],{"class":512}," reward\n",[167,111895,111896],{"class":169,"line":11934},[167,111897,741],{"emptyLinePlaceholder":740},[167,111899,111900,111902,111904,111906,111908,111910,111912],{"class":169,"line":11940},[167,111901,4540],{"class":731},[167,111903,33621],{"class":512},[167,111905,2528],{"class":731},[167,111907,7784],{"class":184},[167,111909,1041],{"class":731},[167,111911,6125],{"class":184},[167,111913,857],{"class":512},[167,111915,111916,111918,111920,111923,111926,111929,111932,111934,111937,111940,111942,111944,111946,111948,111951,111953],{"class":169,"line":11948},[167,111917,36652],{"class":184},[167,111919,898],{"class":512},[167,111921,111922],{"class":177},"\"step:\"",[167,111924,111925],{"class":512},", step, ",[167,111927,111928],{"class":177},"\"obs:\"",[167,111930,111931],{"class":512},", np.round(obs, ",[167,111933,2281],{"class":184},[167,111935,111936],{"class":512},"), ",[167,111938,111939],{"class":177},"\"action:\"",[167,111941,14463],{"class":512},[167,111943,34022],{"class":184},[167,111945,898],{"class":512},[167,111947,2251],{"class":184},[167,111949,111950],{"class":512},"(action), ",[167,111952,2281],{"class":184},[167,111954,32505],{"class":512},[167,111956,111957],{"class":169,"line":11953},[167,111958,741],{"emptyLinePlaceholder":740},[167,111960,111961,111963,111965,111968,111970,111972,111975,111977],{"class":169,"line":18630},[167,111962,895],{"class":184},[167,111964,898],{"class":512},[167,111966,111967],{"class":177},"\"total_reward:\"",[167,111969,14463],{"class":512},[167,111971,34022],{"class":184},[167,111973,111974],{"class":512},"(total_reward, ",[167,111976,2281],{"class":184},[167,111978,32505],{"class":512},[167,111980,111981,111983,111985,111988,111991,111993],{"class":169,"line":18636},[167,111982,895],{"class":184},[167,111984,898],{"class":512},[167,111986,111987],{"class":177},"\"final obs:\"",[167,111989,111990],{"class":512},", np.round(get_observation(data), ",[167,111992,2281],{"class":184},[167,111994,32505],{"class":512},[167,111996,111997],{"class":169,"line":18659},[167,111998,741],{"emptyLinePlaceholder":740},[167,112000,112001],{"class":169,"line":18665},[167,112002,741],{"emptyLinePlaceholder":740},[167,112004,112005,112007,112009,112011,112013],{"class":169,"line":18688},[167,112006,1035],{"class":731},[167,112008,1038],{"class":184},[167,112010,1041],{"class":731},[167,112012,1044],{"class":177},[167,112014,857],{"class":512},[167,112016,112017],{"class":169,"line":18702},[167,112018,1052],{"class":512},[19,112020,105161],{},[26,112022,112024],{"className":161,"code":112023,"language":163,"meta":32,"style":32},"touch ch6_cartpole.py\n",[34,112025,112026],{"__ignoreMap":32},[167,112027,112028,112030],{"class":169,"line":170},[167,112029,714],{"class":173},[167,112031,112032],{"class":177}," ch6_cartpole.py\n",[19,112034,112035],{},"运行：",[26,112037,112039],{"className":161,"code":112038,"language":163,"meta":32,"style":32},"python ch6_cartpole.py\n",[34,112040,112041],{"__ignoreMap":32},[167,112042,112043,112045],{"class":169,"line":170},[167,112044,305],{"class":173},[167,112046,112032],{"class":177},[494,112048,1055],{"id":1055},[19,112050,112051],{},"构造观测：",[26,112053,112055],{"className":723,"code":112054,"language":305,"meta":32,"style":32},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,112056,112057,112065],{"__ignoreMap":32},[167,112058,112059,112061,112063],{"class":169,"line":170},[167,112060,845],{"class":731},[167,112062,111585],{"class":173},[167,112064,111588],{"class":512},[167,112066,112067,112069],{"class":169,"line":191},[167,112068,6122],{"class":731},[167,112070,111595],{"class":512},[19,112072,112073,112076,112077,112079,112080,112082],{},[34,112074,112075],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[34,112078,105621],{}," 2 维，",[34,112081,105951],{}," 2 维，所以 obs 是 4 维。",[19,112084,112085],{},"设置初始角度：",[26,112087,112089],{"className":723,"code":112088,"language":305,"meta":32,"style":32},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[34,112090,112091,112103],{"__ignoreMap":32},[167,112092,112093,112095,112097,112099,112101],{"class":169,"line":170},[167,112094,106290],{"class":512},[167,112096,2418],{"class":184},[167,112098,6475],{"class":512},[167,112100,523],{"class":731},[167,112102,111731],{"class":184},[167,112104,112105],{"class":169,"line":191},[167,112106,106134],{"class":512},[19,112108,112109],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112111,112112],{},"简单反馈控制：",[26,112114,112116],{"className":723,"code":112115,"language":305,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[34,112117,112118,112138],{"__ignoreMap":32},[167,112119,112120,112122,112124,112126,112128,112130,112132,112134,112136],{"class":169,"line":170},[167,112121,109033],{"class":512},[167,112123,523],{"class":731},[167,112125,111818],{"class":184},[167,112127,8548],{"class":731},[167,112129,111411],{"class":512},[167,112131,2681],{"class":731},[167,112133,63856],{"class":184},[167,112135,8548],{"class":731},[167,112137,111831],{"class":512},[167,112139,112140,112142,112144,112146,112148,112150,112152,112154],{"class":169,"line":191},[167,112141,109033],{"class":512},[167,112143,523],{"class":731},[167,112145,109038],{"class":512},[167,112147,2732],{"class":731},[167,112149,1894],{"class":184},[167,112151,14463],{"class":512},[167,112153,1894],{"class":184},[167,112155,873],{"class":512},[19,112157,112158],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112160,112161],{},"限制动作：",[26,112163,112165],{"className":723,"code":112164,"language":305,"meta":32,"style":32},"np.clip(action, -1.0, 1.0)\n",[34,112166,112167],{"__ignoreMap":32},[167,112168,112169,112172,112174,112176,112178,112180],{"class":169,"line":170},[167,112170,112171],{"class":512},"np.clip(action, ",[167,112173,2732],{"class":731},[167,112175,1894],{"class":184},[167,112177,14463],{"class":512},[167,112179,1894],{"class":184},[167,112181,873],{"class":512},[19,112183,112184,112185,112188],{},"因为 XML 里 ",[34,112186,112187],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[494,112190,1194],{"id":1194},[26,112192,112193],{"className":723,"code":112054,"language":305,"meta":32,"style":32},[34,112194,112195,112203],{"__ignoreMap":32},[167,112196,112197,112199,112201],{"class":169,"line":170},[167,112198,845],{"class":731},[167,112200,111585],{"class":173},[167,112202,111588],{"class":512},[167,112204,112205,112207],{"class":169,"line":191},[167,112206,6122],{"class":731},[167,112208,111595],{"class":512},[19,112210,112211,112212,112215,112216,112219,112220,112223],{},"这段定义了一个函数，用来获取当前观测。",[34,112213,112214],{},"data.qpos.copy()"," 是位置数组副本，",[34,112217,112218],{},"data.qvel.copy()"," 是速度数组副本。",[34,112221,112222],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112225,112226],{},"在本章模型里：",[26,112228,112231],{"className":112229,"code":112230,"language":31,"meta":32},[29],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[34,112232,112230],{"__ignoreMap":32},[19,112234,112235],{},"所以返回的 obs 是：",[26,112237,112240],{"className":112238,"code":112239,"language":31,"meta":32},[29],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[34,112241,112239],{"__ignoreMap":32},[26,112243,112245],{"className":723,"code":112244,"language":305,"meta":32,"style":32},"def compute_reward(obs: np.ndarray) -> float:\n",[34,112246,112247],{"__ignoreMap":32},[167,112248,112249,112251,112253,112255,112257],{"class":169,"line":170},[167,112250,845],{"class":731},[167,112252,111610],{"class":173},[167,112254,111613],{"class":512},[167,112256,2251],{"class":184},[167,112258,857],{"class":512},[19,112260,112261,112262,112265],{},"这行定义奖励函数。输入是观测 ",[34,112263,112264],{},"obs","，输出是一个浮点数奖励。",[26,112267,112269],{"className":723,"code":112268,"language":305,"meta":32,"style":32},"cart_x = obs[0]\npole_angle = obs[1]\n",[34,112270,112271,112284],{"__ignoreMap":32},[167,112272,112273,112276,112278,112280,112282],{"class":169,"line":170},[167,112274,112275],{"class":512},"cart_x ",[167,112277,523],{"class":731},[167,112279,111627],{"class":512},[167,112281,1154],{"class":184},[167,112283,35249],{"class":512},[167,112285,112286,112289,112291,112293,112295],{"class":169,"line":191},[167,112287,112288],{"class":512},"pole_angle ",[167,112290,523],{"class":731},[167,112292,111627],{"class":512},[167,112294,2418],{"class":184},[167,112296,35249],{"class":512},[19,112298,112299,112300,112303,112304,112307],{},"数组索引从 0 开始。",[34,112301,112302],{},"obs[0]"," 是第一个元素，也就是小车位置。",[34,112305,112306],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,112309,112310],{"className":723,"code":111379,"language":305,"meta":32,"style":32},[34,112311,112312],{"__ignoreMap":32},[167,112313,112314,112316,112318,112320,112322,112324,112326,112328,112330,112332,112334,112336,112338,112340],{"class":169,"line":170},[167,112315,19072],{"class":731},[167,112317,111388],{"class":184},[167,112319,898],{"class":512},[167,112321,1894],{"class":184},[167,112323,54266],{"class":731},[167,112325,111397],{"class":184},[167,112327,8548],{"class":731},[167,112329,111402],{"class":512},[167,112331,2655],{"class":731},[167,112333,111402],{"class":512},[167,112335,2732],{"class":731},[167,112337,111411],{"class":512},[167,112339,2655],{"class":731},[167,112341,111416],{"class":512},[19,112343,112344,112345,112348,112349,112352],{},"这行计算奖励。",[34,112346,112347],{},"cart_x * cart_x"," 是小车位置的平方，",[34,112350,112351],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,112354,112356],{"className":723,"code":112355,"language":305,"meta":32,"style":32},"data.qpos[1] = 0.1\n",[34,112357,112358],{"__ignoreMap":32},[167,112359,112360,112362,112364,112366,112368],{"class":169,"line":170},[167,112361,106290],{"class":512},[167,112363,2418],{"class":184},[167,112365,6475],{"class":512},[167,112367,523],{"class":731},[167,112369,111731],{"class":184},[19,112371,112372,112373,112375,112376,112378],{},"手动设置杆子的初始角度。因为 ",[34,112374,107047],{}," 是小车位置，",[34,112377,107050],{}," 是杆子角度，所以这里改的是杆子。",[26,112380,112381],{"className":723,"code":106134,"language":305,"meta":32,"style":32},[34,112382,112383],{"__ignoreMap":32},[167,112384,112385],{"class":169,"line":170},[167,112386,106134],{"class":512},[19,112388,107093,112389,112391],{},[34,112390,105621],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,112393,112395],{"className":723,"code":112394,"language":305,"meta":32,"style":32},"total_reward = 0.0\n",[34,112396,112397],{"__ignoreMap":32},[167,112398,112399,112402,112404],{"class":169,"line":170},[167,112400,112401],{"class":512},"total_reward ",[167,112403,523],{"class":731},[167,112405,106352],{"class":184},[19,112407,112408],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,112410,112412],{"className":723,"code":112411,"language":305,"meta":32,"style":32},"for step in range(1000):\n",[34,112413,112414],{"__ignoreMap":32},[167,112415,112416,112418,112420,112422,112424,112426,112428],{"class":169,"line":170},[167,112417,1168],{"class":731},[167,112419,33621],{"class":512},[167,112421,973],{"class":731},[167,112423,976],{"class":184},[167,112425,898],{"class":512},[167,112427,8440],{"class":184},[167,112429,984],{"class":512},[19,112431,112432,112433,112435],{},"循环 1000 步。",[34,112434,108725],{}," 是当前步数，从 0 到 999。",[26,112437,112439],{"className":723,"code":112438,"language":305,"meta":32,"style":32},"obs = get_observation(data)\n",[34,112440,112441],{"__ignoreMap":32},[167,112442,112443,112446,112448],{"class":169,"line":170},[167,112444,112445],{"class":512},"obs ",[167,112447,523],{"class":731},[167,112449,111778],{"class":512},[19,112451,112452,112453,423],{},"读取当前状态，保存到 ",[34,112454,112264],{},[26,112456,112458],{"className":723,"code":112457,"language":305,"meta":32,"style":32},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[34,112459,112460,112472],{"__ignoreMap":32},[167,112461,112462,112464,112466,112468,112470],{"class":169,"line":170},[167,112463,112288],{"class":512},[167,112465,523],{"class":731},[167,112467,111627],{"class":512},[167,112469,2418],{"class":184},[167,112471,35249],{"class":512},[167,112473,112474,112477,112479,112481,112483],{"class":169,"line":191},[167,112475,112476],{"class":512},"pole_angular_velocity ",[167,112478,523],{"class":731},[167,112480,111627],{"class":512},[167,112482,2281],{"class":184},[167,112484,35249],{"class":512},[19,112486,112487,112488,112491,112492,423],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[34,112489,112490],{},"obs[3]","？因为 obs 的顺序是 ",[34,112493,112494],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,112496,112498],{"className":723,"code":112497,"language":305,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[34,112499,112500],{"__ignoreMap":32},[167,112501,112502,112504,112506,112508,112510,112512,112514,112516,112518],{"class":169,"line":170},[167,112503,109033],{"class":512},[167,112505,523],{"class":731},[167,112507,111818],{"class":184},[167,112509,8548],{"class":731},[167,112511,111411],{"class":512},[167,112513,2681],{"class":731},[167,112515,63856],{"class":184},[167,112517,8548],{"class":731},[167,112519,111831],{"class":512},[19,112521,112522,112523,429,112525,112527],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[34,112524,106851],{},[34,112526,1931],{}," 是人为设置的系数，不是固定公式。",[26,112529,112531],{"className":723,"code":112530,"language":305,"meta":32,"style":32},"action = np.clip(action, -1.0, 1.0)\n",[34,112532,112533],{"__ignoreMap":32},[167,112534,112535,112537,112539,112541,112543,112545,112547,112549],{"class":169,"line":170},[167,112536,109033],{"class":512},[167,112538,523],{"class":731},[167,112540,109038],{"class":512},[167,112542,2732],{"class":731},[167,112544,1894],{"class":184},[167,112546,14463],{"class":512},[167,112548,1894],{"class":184},[167,112550,873],{"class":512},[19,112552,112553],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,112555,112556],{"className":723,"code":111364,"language":305,"meta":32,"style":32},[34,112557,112558],{"__ignoreMap":32},[167,112559,112560,112562,112564,112566,112568],{"class":169,"line":170},[167,112561,107462],{"class":512},[167,112563,1154],{"class":184},[167,112565,6475],{"class":512},[167,112567,523],{"class":731},[167,112569,109061],{"class":512},[19,112571,112572],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,112574,112575],{"className":723,"code":106096,"language":305,"meta":32,"style":32},[34,112576,112577],{"__ignoreMap":32},[167,112578,112579],{"class":169,"line":170},[167,112580,106096],{"class":512},[19,112582,112583,112584,112586],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[34,112585,107717],{}," 计算小车和杆子的下一刻状态。",[26,112588,112590],{"className":723,"code":112589,"language":305,"meta":32,"style":32},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[34,112591,112592,112601],{"__ignoreMap":32},[167,112593,112594,112597,112599],{"class":169,"line":170},[167,112595,112596],{"class":512},"reward ",[167,112598,523],{"class":731},[167,112600,111883],{"class":512},[167,112602,112603,112605,112607],{"class":169,"line":191},[167,112604,112401],{"class":512},[167,112606,11505],{"class":731},[167,112608,111893],{"class":512},[19,112610,112611,112612,112614,112615,112618,112619,423],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[34,112613,11505],{}," 是简写，",[34,112616,112617],{},"total_reward += reward"," 等价于 ",[34,112620,112621],{},"total_reward = total_reward + reward",[26,112623,112625],{"className":723,"code":112624,"language":305,"meta":32,"style":32},"if step % 100 == 0:\n",[34,112626,112627],{"__ignoreMap":32},[167,112628,112629,112631,112633,112635,112637,112639,112641],{"class":169,"line":170},[167,112630,1035],{"class":731},[167,112632,33621],{"class":512},[167,112634,2528],{"class":731},[167,112636,7784],{"class":184},[167,112638,1041],{"class":731},[167,112640,6125],{"class":184},[167,112642,857],{"class":512},[19,112644,112645,112647,112648,112651],{},[34,112646,2528],{}," 是取余数。",[34,112649,112650],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,112653,112655],{"className":723,"code":112654,"language":305,"meta":32,"style":32},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[34,112656,112657],{"__ignoreMap":32},[167,112658,112659,112661,112663,112665,112667,112669,112671,112673,112675,112677,112679,112681,112683,112685,112687,112689],{"class":169,"line":170},[167,112660,1606],{"class":184},[167,112662,898],{"class":512},[167,112664,111922],{"class":177},[167,112666,111925],{"class":512},[167,112668,111928],{"class":177},[167,112670,111931],{"class":512},[167,112672,2281],{"class":184},[167,112674,111936],{"class":512},[167,112676,111939],{"class":177},[167,112678,14463],{"class":512},[167,112680,34022],{"class":184},[167,112682,898],{"class":512},[167,112684,2251],{"class":184},[167,112686,111950],{"class":512},[167,112688,2281],{"class":184},[167,112690,32505],{"class":512},[19,112692,112693,112694,112697,112698,112701],{},"打印当前步数、观测和动作。",[34,112695,112696],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[34,112699,112700],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112703,1807],{"id":1806},[19,112705,112706],{},"观测向量:",[26,112708,112711],{"className":112709,"code":112710,"language":31,"meta":32},[29],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,112712,112710],{"__ignoreMap":32},[19,112714,112715],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112717,112718],{},"每隔 100 步会打印一次：",[26,112720,112723],{"className":112721,"code":112722,"language":31,"meta":32},[29],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[34,112724,112722],{"__ignoreMap":32},[19,112726,112727],{},"重点观察：",[40,112729,112730,112736,112741],{},[43,112731,112732,112735],{},[34,112733,112734],{},"pole_angle"," 是否越来越大。",[43,112737,112738,112740],{},[34,112739,111317],{}," 是否跑得太远。",[43,112742,112743,112744,449,112746,423],{},"action 是否经常被 clip 到 ",[34,112745,105506],{},[34,112747,2418],{},[19,112749,112750],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112752,1839],{"id":1838},[40,112754,112755,112761,112764,112770,112780,112786,112789],{},[43,112756,112757,112758,423],{},"把初始角度改为 ",[34,112759,112760],{},"data.qpos[1] = 0.3",[43,112762,112763],{},"重新运行，观察控制是否变差。",[43,112765,112766,112767,112769],{},"把 actuator ",[34,112768,108658],{}," 改小。",[43,112771,112772,112773,112776,112777,423],{},"打印 ",[34,112774,112775],{},"model.nq, model.nv, model.nu","，应为 ",[34,112778,112779],{},"2 2 1",[43,112781,112782,112783,112785],{},"把 reward 里的 ",[34,112784,112351],{}," 系数改大，观察总奖励变化。",[43,112787,112788],{},"把控制器改成反号，观察杆子是否更容易倒。",[43,112790,112791],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112793,1945],{"id":1944},[494,112795,112796],{"id":112796},"杆子方向和预期不一致",[19,112798,1887,112799,112801,112802,112804],{},[34,112800,107830],{}," 和 capsule 的 ",[34,112803,104767],{},"，必要时用 viewer 可视化确认。",[494,112806,112807],{"id":112807},"控制器越控越倒",[19,112809,112810],{},"说明反馈符号可能反了，尝试:",[26,112812,112814],{"className":723,"code":112813,"language":305,"meta":32,"style":32},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[34,112815,112816],{"__ignoreMap":32},[167,112817,112818,112820,112822,112824,112826,112828,112830,112832,112834,112836],{"class":169,"line":170},[167,112819,109033],{"class":512},[167,112821,523],{"class":731},[167,112823,54266],{"class":731},[167,112825,106851],{"class":184},[167,112827,8548],{"class":731},[167,112829,111411],{"class":512},[167,112831,2732],{"class":731},[167,112833,63856],{"class":184},[167,112835,8548],{"class":731},[167,112837,111831],{"class":512},[494,112839,112840],{"id":112840},"小车飞走",[19,112842,112843,112844,112846,112847,112850],{},"降低 ",[34,112845,108658],{}," 或缩小 ",[34,112848,112849],{},"action"," 的 clip 范围。",[494,112852,112854,112856],{"id":112853},"obs3-为什么是杆子角速度",[34,112855,112490],{}," 为什么是杆子角速度",[19,112858,112859],{},"因为这个模型里：",[26,112861,112864],{"className":112862,"code":112863,"language":31,"meta":32},[29],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[34,112865,112863],{"__ignoreMap":32},[19,112867,111338],{},[26,112869,112872],{"className":112870,"code":112871,"language":31,"meta":32},[29],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[34,112873,112871],{"__ignoreMap":32},[494,112875,112877],{"id":112876},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112879,112880],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112882,2099],{"id":2098},[19,112884,112885],{},"一个控制任务通常包含：",[40,112887,112888,112891,112899,112904,112907],{},[43,112889,112890],{},"模型：Cartpole 的 body、joint、actuator。",[43,112892,112893,112894,480,112896,112898],{},"观测：从 ",[34,112895,105621],{},[34,112897,105951],{}," 里取状态。",[43,112900,112901,112902,423],{},"动作：写入 ",[34,112903,489],{},[43,112905,112906],{},"奖励：根据任务目标打分。",[43,112908,112909],{},"循环：obs -> action -> step -> reward。",[19,112911,112912],{},"这就是后面 Gymnasium 环境的基本骨架。",[2113,112914,105877],{},{"title":32,"searchDepth":191,"depth":191,"links":112916},[112917,112918,112919,112924,112928,112929,112930,112938],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":112920},[112921,112922,112923],{"id":111291,"depth":205,"text":111292},{"id":111356,"depth":205,"text":111357},{"id":111372,"depth":205,"text":111373},{"id":682,"depth":191,"text":683,"children":112925},[112926,112927],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":112931},[112932,112933,112934,112935,112937],{"id":112796,"depth":205,"text":112796},{"id":112807,"depth":205,"text":112807},{"id":112840,"depth":205,"text":112840},{"id":112853,"depth":205,"text":112936},"obs[3] 为什么是杆子角速度",{"id":112876,"depth":205,"text":112877},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111027,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112945,"title":112946,"body":112947,"description":32,"extension":2140,"meta":114961,"navigation":740,"path":114962,"seo":114963,"stem":114964,"__hash__":114965},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112948,"toc":114937},[112949,112952,112954,112957,112959,112976,112979,112982,112988,112991,112993,112995,113019,113021,113035,113037,113078,113080,113098,113100,113103,113109,113112,113140,113144,113150,113175,113178,113209,113216,113219,113222,113228,113231,113237,113240,113246,113250,113253,113278,113281,113283,114043,114045,114057,114059,114070,114072,114075,114092,114095,114097,114108,114111,114113,114159,114162,114175,114178,114260,114263,114265,114281,114291,114304,114307,114346,114356,114367,114377,114390,114393,114422,114425,114435,114438,114444,114461,114472,114474,114480,114497,114508,114529,114532,114544,114547,114568,114571,114579,114587,114604,114607,114676,114683,114691,114694,114707,114714,114716,114719,114725,114728,114731,114737,114743,114745,114785,114787,114793,114802,114805,114807,114827,114830,114833,114839,114843,114845,114872,114875,114878,114905,114911,114914,114917,114919,114922,114925,114931,114934],[10,112950,112946],{"id":112951},"_7控制任务reacher-机械臂到达目标",[14,112953,17],{"id":16},[19,112955,112956],{},"本章搭建一个二维两关节 reacher 任务。",[19,112958,105922],{},[40,112960,112961,112964,112967,112970,112973],{},[43,112962,112963],{},"两个 hinge joint",[43,112965,112966],{},"两个 motor actuator",[43,112968,112969],{},"site 作为末端点和目标点",[43,112971,112972],{},"根据末端和目标距离设计 reward",[43,112974,112975],{},"构造机械臂任务的基本形式",[19,112977,112978],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112980,112981],{},"Reacher 任务可以理解为：",[26,112983,112986],{"className":112984,"code":112985,"language":31,"meta":32},[29],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[34,112987,112985],{"__ignoreMap":32},[19,112989,112990],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112992,155],{"id":154},[19,112994,158],{},[26,112996,112997],{"className":161,"code":105979,"language":163,"meta":32,"style":32},[34,112998,112999],{"__ignoreMap":32},[167,113000,113001,113003,113005,113007,113009,113011,113013,113015,113017],{"class":169,"line":170},[167,113002,174],{"class":173},[167,113004,178],{"class":177},[167,113006,181],{"class":177},[167,113008,185],{"class":184},[167,113010,105994],{"class":177},[167,113012,197],{"class":177},[167,113014,1993],{"class":177},[167,113016,214],{"class":177},[167,113018,106003],{"class":177},[19,113020,104410],{},[26,113022,113023],{"className":161,"code":324,"language":163,"meta":32,"style":32},[34,113024,113025],{"__ignoreMap":32},[167,113026,113027,113029,113031,113033],{"class":169,"line":170},[167,113028,331],{"class":173},[167,113030,181],{"class":177},[167,113032,336],{"class":177},[167,113034,339],{"class":177},[19,113036,104427],{},[26,113038,113040],{"className":161,"code":113039,"language":163,"meta":32,"style":32},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[34,113041,113042,113059,113068],{"__ignoreMap":32},[167,113043,113044,113046,113048,113050,113053,113055,113057],{"class":169,"line":170},[167,113045,373],{"class":173},[167,113047,376],{"class":177},[167,113049,379],{"class":184},[167,113051,113052],{"class":177}," mujoco-reacher",[167,113054,385],{"class":177},[167,113056,388],{"class":184},[167,113058,391],{"class":184},[167,113060,113061,113063,113065],{"class":169,"line":191},[167,113062,373],{"class":173},[167,113064,398],{"class":177},[167,113066,113067],{"class":177}," mujoco-reacher\n",[167,113069,113070,113072,113074,113076],{"class":169,"line":205},[167,113071,331],{"class":173},[167,113073,181],{"class":177},[167,113075,336],{"class":177},[167,113077,339],{"class":177},[19,113079,414],{},[40,113081,113082,113085,113088],{},[43,113083,113084],{},"本章使用低维状态，不使用图像输入。",[43,113086,113087],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[43,113089,113090,113091,480,113093,480,113095,113097],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[34,113092,105621],{},[34,113094,105951],{},[34,113096,105271],{}," 的方法一致。",[14,113099,457],{"id":456},[19,113101,113102],{},"Reacher 任务核心:",[26,113104,113107],{"className":113105,"code":113106,"language":31,"meta":32},[29],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[34,113108,113106],{"__ignoreMap":32},[19,113110,113111],{},"读取 site 世界坐标:",[26,113113,113115],{"className":723,"code":113114,"language":305,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[34,113116,113117,113130],{"__ignoreMap":32},[167,113118,113119,113121,113123,113125,113128],{"class":169,"line":170},[167,113120,105225],{"class":512},[167,113122,523],{"class":731},[167,113124,104996],{"class":512},[167,113126,113127],{"class":177},"\"tip\"",[167,113129,873],{"class":512},[167,113131,113132,113135,113137],{"class":169,"line":191},[167,113133,113134],{"class":512},"tip_pos ",[167,113136,523],{"class":731},[167,113138,113139],{"class":512}," data.site_xpos[site_id]\n",[494,113141,113143],{"id":113142},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113145,113146,113147,113149],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[34,113148,105621],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,113151,113153],{"className":723,"code":113152,"language":305,"meta":32,"style":32},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[34,113154,113155,113165],{"__ignoreMap":32},[167,113156,113157,113160,113162],{"class":169,"line":170},[167,113158,113159],{"class":512},"tip ",[167,113161,523],{"class":731},[167,113163,113164],{"class":512}," data.site_xpos[tip_site_id]\n",[167,113166,113167,113170,113172],{"class":169,"line":191},[167,113168,113169],{"class":512},"target ",[167,113171,523],{"class":731},[167,113173,113174],{"class":512}," data.site_xpos[target_site_id]\n",[19,113176,113177],{},"这样 reward 就很容易写：",[26,113179,113181],{"className":723,"code":113180,"language":305,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[34,113182,113183,113198],{"__ignoreMap":32},[167,113184,113185,113188,113190,113193,113195],{"class":169,"line":170},[167,113186,113187],{"class":512},"dist ",[167,113189,523],{"class":731},[167,113191,113192],{"class":512}," np.linalg.norm(tip ",[167,113194,2732],{"class":731},[167,113196,113197],{"class":512}," target)\n",[167,113199,113200,113202,113204,113206],{"class":169,"line":191},[167,113201,112596],{"class":512},[167,113203,523],{"class":731},[167,113205,54266],{"class":731},[167,113207,113208],{"class":512},"dist\n",[19,113210,113211,113212,113215],{},"距离越小，",[34,113213,113214],{},"-dist"," 越接近 0，奖励越高。",[494,113217,113218],{"id":113218},"两关节机械臂的状态",[19,113220,113221],{},"这个模型有两个 hinge joint：",[26,113223,113226],{"className":113224,"code":113225,"language":31,"meta":32},[29],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[34,113227,113225],{"__ignoreMap":32},[19,113229,113230],{},"再加上末端和目标位置：",[26,113232,113235],{"className":113233,"code":113234,"language":31,"meta":32},[29],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[34,113236,113234],{"__ignoreMap":32},[19,113238,113239],{},"总维度：",[26,113241,113244],{"className":113242,"code":113243,"language":31,"meta":32},[29],"2 + 2 + 3 + 3 = 10\n",[34,113245,113243],{"__ignoreMap":32},[494,113247,113249],{"id":113248},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113251,113252],{},"本章把重力设为：",[26,113254,113256],{"className":503,"code":113255,"language":505,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,113257,113258],{"__ignoreMap":32},[167,113259,113260,113262,113264,113266,113268,113270,113272,113274,113276],{"class":169,"line":170},[167,113261,513],{"class":512},[167,113263,620],{"class":516},[167,113265,623],{"class":173},[167,113267,523],{"class":512},[167,113269,628],{"class":177},[167,113271,631],{"class":173},[167,113273,523],{"class":512},[167,113275,105362],{"class":177},[167,113277,570],{"class":512},[19,113279,113280],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113282,683],{"id":682},[26,113284,113286],{"className":723,"code":113285,"language":305,"meta":32,"style":32},"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",[34,113287,113288,113294,113304,113308,113312,113320,113325,113330,113334,113338,113343,113348,113352,113357,113362,113367,113371,113376,113381,113386,113391,113395,113399,113403,113407,113411,113416,113421,113425,113429,113433,113437,113441,113456,113465,113477,113500,113507,113511,113515,113525,113539,113553,113560,113564,113568,113582,113594,113606,113619,113634,113651,113655,113659,113671,113683,113691,113699,113703,113719,113724,113737,113750,113765,113769,113804,113836,113840,113844,113853,113857,113873,113883,113894,113910,113926,113942,113958,113962,113980,114000,114019,114023,114027,114039],{"__ignoreMap":32},[167,113289,113290,113292],{"class":169,"line":170},[167,113291,732],{"class":731},[167,113293,735],{"class":512},[167,113295,113296,113298,113300,113302],{"class":169,"line":191},[167,113297,732],{"class":731},[167,113299,33385],{"class":512},[167,113301,33388],{"class":731},[167,113303,33391],{"class":512},[167,113305,113306],{"class":169,"line":205},[167,113307,741],{"emptyLinePlaceholder":740},[167,113309,113310],{"class":169,"line":219},[167,113311,741],{"emptyLinePlaceholder":740},[167,113313,113314,113316,113318],{"class":169,"line":230},[167,113315,750],{"class":184},[167,113317,753],{"class":731},[167,113319,756],{"class":177},[167,113321,113322],{"class":169,"line":241},[167,113323,113324],{"class":177},"\u003Cmujoco model=\"two_link_reacher\">\n",[167,113326,113327],{"class":169,"line":261},[167,113328,113329],{"class":177},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[167,113331,113332],{"class":169,"line":773},[167,113333,741],{"emptyLinePlaceholder":740},[167,113335,113336],{"class":169,"line":779},[167,113337,776],{"class":177},[167,113339,113340],{"class":169,"line":785},[167,113341,113342],{"class":177},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[167,113344,113345],{"class":169,"line":790},[167,113346,113347],{"class":177},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[167,113349,113350],{"class":169,"line":796},[167,113351,741],{"emptyLinePlaceholder":740},[167,113353,113354],{"class":169,"line":802},[167,113355,113356],{"class":177},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[167,113358,113359],{"class":169,"line":808},[167,113360,113361],{"class":177},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[167,113363,113364],{"class":169,"line":814},[167,113365,113366],{"class":177},"      \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",[167,113368,113369],{"class":169,"line":820},[167,113370,741],{"emptyLinePlaceholder":740},[167,113372,113373],{"class":169,"line":826},[167,113374,113375],{"class":177},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[167,113377,113378],{"class":169,"line":832},[167,113379,113380],{"class":177},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[167,113382,113383],{"class":169,"line":837},[167,113384,113385],{"class":177},"        \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",[167,113387,113388],{"class":169,"line":842},[167,113389,113390],{"class":177},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[167,113392,113393],{"class":169,"line":860},[167,113394,108029],{"class":177},[167,113396,113397],{"class":169,"line":876},[167,113398,811],{"class":177},[167,113400,113401],{"class":169,"line":887},[167,113402,817],{"class":177},[167,113404,113405],{"class":169,"line":892},[167,113406,741],{"emptyLinePlaceholder":740},[167,113408,113409],{"class":169,"line":907},[167,113410,108046],{"class":177},[167,113412,113413],{"class":169,"line":920},[167,113414,113415],{"class":177},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[167,113417,113418],{"class":169,"line":933},[167,113419,113420],{"class":177},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[167,113422,113423],{"class":169,"line":946},[167,113424,108056],{"class":177},[167,113426,113427],{"class":169,"line":959},[167,113428,823],{"class":177},[167,113430,113431],{"class":169,"line":964},[167,113432,829],{"class":177},[167,113434,113435],{"class":169,"line":987},[167,113436,741],{"emptyLinePlaceholder":740},[167,113438,113439],{"class":169,"line":993},[167,113440,741],{"emptyLinePlaceholder":740},[167,113442,113443,113445,113448,113451,113453],{"class":169,"line":998},[167,113444,845],{"class":731},[167,113446,113447],{"class":173}," site_position",[167,113449,113450],{"class":512},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[167,113452,3368],{"class":184},[167,113454,113455],{"class":512},") -> np.ndarray:\n",[167,113457,113458,113460,113462],{"class":169,"line":1010},[167,113459,104991],{"class":512},[167,113461,523],{"class":731},[167,113463,113464],{"class":512}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[167,113466,113467,113469,113471,113473,113475],{"class":169,"line":1022},[167,113468,5136],{"class":731},[167,113470,105040],{"class":512},[167,113472,513],{"class":731},[167,113474,6125],{"class":184},[167,113476,857],{"class":512},[167,113478,113479,113481,113483,113485,113487,113490,113492,113494,113496,113498],{"class":169,"line":1027},[167,113480,105023],{"class":731},[167,113482,105026],{"class":184},[167,113484,898],{"class":512},[167,113486,2262],{"class":731},[167,113488,113489],{"class":177},"\"site not found: ",[167,113491,3096],{"class":184},[167,113493,81797],{"class":512},[167,113495,3145],{"class":184},[167,113497,2452],{"class":177},[167,113499,873],{"class":512},[167,113501,113502,113504],{"class":169,"line":1032},[167,113503,6122],{"class":731},[167,113505,113506],{"class":512}," data.site_xpos[site_id].copy()\n",[167,113508,113509],{"class":169,"line":1049},[167,113510,741],{"emptyLinePlaceholder":740},[167,113512,113513],{"class":169,"line":10005},[167,113514,741],{"emptyLinePlaceholder":740},[167,113516,113517,113519,113522],{"class":169,"line":10011},[167,113518,845],{"class":731},[167,113520,113521],{"class":173}," get_obs",[167,113523,113524],{"class":512},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[167,113526,113527,113530,113532,113535,113537],{"class":169,"line":10038},[167,113528,113529],{"class":512},"    tip ",[167,113531,523],{"class":731},[167,113533,113534],{"class":512}," site_position(model, data, ",[167,113536,113127],{"class":177},[167,113538,873],{"class":512},[167,113540,113541,113544,113546,113548,113551],{"class":169,"line":10043},[167,113542,113543],{"class":512},"    target ",[167,113545,523],{"class":731},[167,113547,113534],{"class":512},[167,113549,113550],{"class":177},"\"target\"",[167,113552,873],{"class":512},[167,113554,113555,113557],{"class":169,"line":10049},[167,113556,6122],{"class":731},[167,113558,113559],{"class":512}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[167,113561,113562],{"class":169,"line":10061},[167,113563,741],{"emptyLinePlaceholder":740},[167,113565,113566],{"class":169,"line":10073},[167,113567,741],{"emptyLinePlaceholder":740},[167,113569,113570,113572,113575,113578,113580],{"class":169,"line":10085},[167,113571,845],{"class":731},[167,113573,113574],{"class":173}," reward",[167,113576,113577],{"class":512},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[167,113579,2251],{"class":184},[167,113581,857],{"class":512},[167,113583,113584,113586,113588,113590,113592],{"class":169,"line":11744},[167,113585,113529],{"class":512},[167,113587,523],{"class":731},[167,113589,113534],{"class":512},[167,113591,113127],{"class":177},[167,113593,873],{"class":512},[167,113595,113596,113598,113600,113602,113604],{"class":169,"line":11769},[167,113597,113543],{"class":512},[167,113599,523],{"class":731},[167,113601,113534],{"class":512},[167,113603,113550],{"class":177},[167,113605,873],{"class":512},[167,113607,113608,113611,113613,113615,113617],{"class":169,"line":11792},[167,113609,113610],{"class":512},"    dist ",[167,113612,523],{"class":731},[167,113614,113192],{"class":512},[167,113616,2732],{"class":731},[167,113618,113197],{"class":512},[167,113620,113621,113624,113626,113629,113631],{"class":169,"line":11816},[167,113622,113623],{"class":512},"    control_cost ",[167,113625,523],{"class":731},[167,113627,113628],{"class":184}," 0.01",[167,113630,8548],{"class":731},[167,113632,113633],{"class":512}," np.sum(np.square(data.ctrl))\n",[167,113635,113636,113638,113640,113642,113644,113646,113648],{"class":169,"line":11821},[167,113637,6122],{"class":731},[167,113639,111388],{"class":184},[167,113641,898],{"class":512},[167,113643,2732],{"class":731},[167,113645,113187],{"class":512},[167,113647,2732],{"class":731},[167,113649,113650],{"class":512}," control_cost)\n",[167,113652,113653],{"class":169,"line":11826},[167,113654,741],{"emptyLinePlaceholder":740},[167,113656,113657],{"class":169,"line":11831},[167,113658,741],{"emptyLinePlaceholder":740},[167,113660,113661,113663,113665,113667,113669],{"class":169,"line":11840},[167,113662,845],{"class":731},[167,113664,848],{"class":173},[167,113666,851],{"class":512},[167,113668,854],{"class":184},[167,113670,857],{"class":512},[167,113672,113673,113675,113677,113679,113681],{"class":169,"line":11845},[167,113674,863],{"class":512},[167,113676,523],{"class":731},[167,113678,868],{"class":512},[167,113680,750],{"class":184},[167,113682,873],{"class":512},[167,113684,113685,113687,113689],{"class":169,"line":11851},[167,113686,879],{"class":512},[167,113688,523],{"class":731},[167,113690,884],{"class":512},[167,113692,113693,113695,113697],{"class":169,"line":11872},[167,113694,111744],{"class":512},[167,113696,523],{"class":731},[167,113698,106352],{"class":184},[167,113700,113701],{"class":169,"line":11878},[167,113702,741],{"emptyLinePlaceholder":740},[167,113704,113705,113707,113709,113711,113713,113715,113717],{"class":169,"line":11892},[167,113706,967],{"class":731},[167,113708,33621],{"class":512},[167,113710,973],{"class":731},[167,113712,976],{"class":184},[167,113714,898],{"class":512},[167,113716,67063],{"class":184},[167,113718,984],{"class":512},[167,113720,113721],{"class":169,"line":11898},[167,113722,113723],{"class":512},"        mujoco.mj_forward(model, data)\n",[167,113725,113726,113729,113731,113733,113735],{"class":169,"line":11925},[167,113727,113728],{"class":512},"        tip ",[167,113730,523],{"class":731},[167,113732,113534],{"class":512},[167,113734,113127],{"class":177},[167,113736,873],{"class":512},[167,113738,113739,113742,113744,113746,113748],{"class":169,"line":11934},[167,113740,113741],{"class":512},"        target ",[167,113743,523],{"class":731},[167,113745,113534],{"class":512},[167,113747,113550],{"class":177},[167,113749,873],{"class":512},[167,113751,113752,113755,113757,113760,113762],{"class":169,"line":11940},[167,113753,113754],{"class":512},"        error ",[167,113756,523],{"class":731},[167,113758,113759],{"class":512}," target ",[167,113761,2732],{"class":731},[167,113763,113764],{"class":512}," tip\n",[167,113766,113767],{"class":169,"line":11948},[167,113768,741],{"emptyLinePlaceholder":740},[167,113770,113771,113773,113775,113777,113779,113782,113784,113786,113789,113791,113794,113796,113798,113800,113802],{"class":169,"line":11953},[167,113772,108208],{"class":512},[167,113774,1154],{"class":184},[167,113776,6475],{"class":512},[167,113778,523],{"class":731},[167,113780,113781],{"class":512}," np.clip(",[167,113783,106851],{"class":184},[167,113785,8548],{"class":731},[167,113787,113788],{"class":512}," error[",[167,113790,2287],{"class":184},[167,113792,113793],{"class":512},"], ",[167,113795,2732],{"class":731},[167,113797,1894],{"class":184},[167,113799,14463],{"class":512},[167,113801,1894],{"class":184},[167,113803,873],{"class":512},[167,113805,113806,113808,113810,113812,113814,113816,113818,113820,113822,113824,113826,113828,113830,113832,113834],{"class":169,"line":18630},[167,113807,108208],{"class":512},[167,113809,2418],{"class":184},[167,113811,6475],{"class":512},[167,113813,523],{"class":731},[167,113815,113781],{"class":512},[167,113817,106851],{"class":184},[167,113819,8548],{"class":731},[167,113821,113788],{"class":512},[167,113823,1154],{"class":184},[167,113825,113793],{"class":512},[167,113827,2732],{"class":731},[167,113829,1894],{"class":184},[167,113831,14463],{"class":512},[167,113833,1894],{"class":184},[167,113835,873],{"class":512},[167,113837,113838],{"class":169,"line":18636},[167,113839,741],{"emptyLinePlaceholder":740},[167,113841,113842],{"class":169,"line":18659},[167,113843,990],{"class":512},[167,113845,113846,113848,113850],{"class":169,"line":18665},[167,113847,111888],{"class":512},[167,113849,11505],{"class":731},[167,113851,113852],{"class":512}," reward(model, data)\n",[167,113854,113855],{"class":169,"line":18688},[167,113856,741],{"emptyLinePlaceholder":740},[167,113858,113859,113861,113863,113865,113867,113869,113871],{"class":169,"line":18702},[167,113860,4540],{"class":731},[167,113862,33621],{"class":512},[167,113864,2528],{"class":731},[167,113866,7784],{"class":184},[167,113868,1041],{"class":731},[167,113870,6125],{"class":184},[167,113872,857],{"class":512},[167,113874,113875,113878,113880],{"class":169,"line":18722},[167,113876,113877],{"class":512},"            obs ",[167,113879,523],{"class":731},[167,113881,113882],{"class":512}," get_obs(model, data)\n",[167,113884,113885,113887,113889,113891],{"class":169,"line":18728},[167,113886,36652],{"class":184},[167,113888,898],{"class":512},[167,113890,111922],{"class":177},[167,113892,113893],{"class":512},", step)\n",[167,113895,113896,113898,113900,113903,113906,113908],{"class":169,"line":18739},[167,113897,36652],{"class":184},[167,113899,898],{"class":512},[167,113901,113902],{"class":177},"\"  tip:\"",[167,113904,113905],{"class":512},", np.round(tip, ",[167,113907,2281],{"class":184},[167,113909,32505],{"class":512},[167,113911,113912,113914,113916,113919,113922,113924],{"class":169,"line":18762},[167,113913,36652],{"class":184},[167,113915,898],{"class":512},[167,113917,113918],{"class":177},"\"  target:\"",[167,113920,113921],{"class":512},", np.round(target, ",[167,113923,2281],{"class":184},[167,113925,32505],{"class":512},[167,113927,113928,113930,113932,113935,113938,113940],{"class":169,"line":18784},[167,113929,36652],{"class":184},[167,113931,898],{"class":512},[167,113933,113934],{"class":177},"\"  ctrl:\"",[167,113936,113937],{"class":512},", np.round(data.ctrl.copy(), ",[167,113939,2281],{"class":184},[167,113941,32505],{"class":512},[167,113943,113944,113946,113948,113951,113954,113956],{"class":169,"line":18789},[167,113945,36652],{"class":184},[167,113947,898],{"class":512},[167,113949,113950],{"class":177},"\"  obs_dim:\"",[167,113952,113953],{"class":512},", obs.shape[",[167,113955,1154],{"class":184},[167,113957,6689],{"class":512},[167,113959,113960],{"class":169,"line":18795},[167,113961,741],{"emptyLinePlaceholder":740},[167,113963,113964,113966,113968,113970,113972,113974,113976,113978],{"class":169,"line":18809},[167,113965,895],{"class":184},[167,113967,898],{"class":512},[167,113969,111967],{"class":177},[167,113971,14463],{"class":512},[167,113973,34022],{"class":184},[167,113975,111974],{"class":512},[167,113977,2281],{"class":184},[167,113979,32505],{"class":512},[167,113981,113982,113984,113986,113989,113992,113994,113996,113998],{"class":169,"line":18822},[167,113983,895],{"class":184},[167,113985,898],{"class":512},[167,113987,113988],{"class":177},"\"final tip:\"",[167,113990,113991],{"class":512},", np.round(site_position(model, data, ",[167,113993,113127],{"class":177},[167,113995,111936],{"class":512},[167,113997,2281],{"class":184},[167,113999,32505],{"class":512},[167,114001,114002,114004,114006,114009,114011,114013,114015,114017],{"class":169,"line":18827},[167,114003,895],{"class":184},[167,114005,898],{"class":512},[167,114007,114008],{"class":177},"\"target:\"",[167,114010,113991],{"class":512},[167,114012,113550],{"class":177},[167,114014,111936],{"class":512},[167,114016,2281],{"class":184},[167,114018,32505],{"class":512},[167,114020,114021],{"class":169,"line":18841},[167,114022,741],{"emptyLinePlaceholder":740},[167,114024,114025],{"class":169,"line":18846},[167,114026,741],{"emptyLinePlaceholder":740},[167,114028,114029,114031,114033,114035,114037],{"class":169,"line":18852},[167,114030,1035],{"class":731},[167,114032,1038],{"class":184},[167,114034,1041],{"class":731},[167,114036,1044],{"class":177},[167,114038,857],{"class":512},[167,114040,114041],{"class":169,"line":18857},[167,114042,1052],{"class":512},[19,114044,105161],{},[26,114046,114048],{"className":161,"code":114047,"language":163,"meta":32,"style":32},"touch ch7_reacher.py\n",[34,114049,114050],{"__ignoreMap":32},[167,114051,114052,114054],{"class":169,"line":170},[167,114053,714],{"class":173},[167,114055,114056],{"class":177}," ch7_reacher.py\n",[19,114058,112035],{},[26,114060,114062],{"className":161,"code":114061,"language":163,"meta":32,"style":32},"python ch7_reacher.py\n",[34,114063,114064],{"__ignoreMap":32},[167,114065,114066,114068],{"class":169,"line":170},[167,114067,305],{"class":173},[167,114069,114056],{"class":177},[494,114071,1055],{"id":1055},[19,114073,114074],{},"读取 site 坐标：",[26,114076,114078],{"className":723,"code":114077,"language":305,"meta":32,"style":32},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[34,114079,114080],{"__ignoreMap":32},[167,114081,114082,114084,114086,114088,114090],{"class":169,"line":170},[167,114083,845],{"class":731},[167,114085,113447],{"class":173},[167,114087,113450],{"class":512},[167,114089,3368],{"class":184},[167,114091,113455],{"class":512},[19,114093,114094],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114096,112051],{},[26,114098,114100],{"className":723,"code":114099,"language":305,"meta":32,"style":32},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,114101,114102],{"__ignoreMap":32},[167,114103,114104,114106],{"class":169,"line":170},[167,114105,19072],{"class":731},[167,114107,113559],{"class":512},[19,114109,114110],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114112,111376],{},[26,114114,114116],{"className":723,"code":114115,"language":305,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[34,114117,114118,114130,114143],{"__ignoreMap":32},[167,114119,114120,114122,114124,114126,114128],{"class":169,"line":170},[167,114121,113187],{"class":512},[167,114123,523],{"class":731},[167,114125,113192],{"class":512},[167,114127,2732],{"class":731},[167,114129,113197],{"class":512},[167,114131,114132,114135,114137,114139,114141],{"class":169,"line":191},[167,114133,114134],{"class":512},"control_cost ",[167,114136,523],{"class":731},[167,114138,113628],{"class":184},[167,114140,8548],{"class":731},[167,114142,113633],{"class":512},[167,114144,114145,114147,114149,114151,114153,114155,114157],{"class":169,"line":205},[167,114146,19072],{"class":731},[167,114148,111388],{"class":184},[167,114150,898],{"class":512},[167,114152,2732],{"class":731},[167,114154,113187],{"class":512},[167,114156,2732],{"class":731},[167,114158,113650],{"class":512},[19,114160,114161],{},"奖励由两部分组成：",[40,114163,114164,114169],{},[43,114165,114166,114168],{},[34,114167,113214],{},"：末端离目标越远，奖励越低。",[43,114170,114171,114174],{},[34,114172,114173],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114176,114177],{},"简单控制器：",[26,114179,114181],{"className":723,"code":114180,"language":305,"meta":32,"style":32},"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",[34,114182,114183,114196,114228],{"__ignoreMap":32},[167,114184,114185,114188,114190,114192,114194],{"class":169,"line":170},[167,114186,114187],{"class":512},"error ",[167,114189,523],{"class":731},[167,114191,113759],{"class":512},[167,114193,2732],{"class":731},[167,114195,113764],{"class":512},[167,114197,114198,114200,114202,114204,114206,114208,114210,114212,114214,114216,114218,114220,114222,114224,114226],{"class":169,"line":191},[167,114199,107462],{"class":512},[167,114201,1154],{"class":184},[167,114203,6475],{"class":512},[167,114205,523],{"class":731},[167,114207,113781],{"class":512},[167,114209,106851],{"class":184},[167,114211,8548],{"class":731},[167,114213,113788],{"class":512},[167,114215,2287],{"class":184},[167,114217,113793],{"class":512},[167,114219,2732],{"class":731},[167,114221,1894],{"class":184},[167,114223,14463],{"class":512},[167,114225,1894],{"class":184},[167,114227,873],{"class":512},[167,114229,114230,114232,114234,114236,114238,114240,114242,114244,114246,114248,114250,114252,114254,114256,114258],{"class":169,"line":205},[167,114231,107462],{"class":512},[167,114233,2418],{"class":184},[167,114235,6475],{"class":512},[167,114237,523],{"class":731},[167,114239,113781],{"class":512},[167,114241,106851],{"class":184},[167,114243,8548],{"class":731},[167,114245,113788],{"class":512},[167,114247,1154],{"class":184},[167,114249,113793],{"class":512},[167,114251,2732],{"class":731},[167,114253,1894],{"class":184},[167,114255,14463],{"class":512},[167,114257,1894],{"class":184},[167,114259,873],{"class":512},[19,114261,114262],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[494,114264,1194],{"id":1194},[26,114266,114267],{"className":723,"code":114077,"language":305,"meta":32,"style":32},[34,114268,114269],{"__ignoreMap":32},[167,114270,114271,114273,114275,114277,114279],{"class":169,"line":170},[167,114272,845],{"class":731},[167,114274,113447],{"class":173},[167,114276,113450],{"class":512},[167,114278,3368],{"class":184},[167,114280,113455],{"class":512},[19,114282,114283,114284,114286,114287,449,114289,423],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[34,114285,81797],{}," 是 site 的名字，比如 ",[34,114288,113127],{},[34,114290,113550],{},[26,114292,114294],{"className":723,"code":114293,"language":305,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,114295,114296],{"__ignoreMap":32},[167,114297,114298,114300,114302],{"class":169,"line":170},[167,114299,105225],{"class":512},[167,114301,523],{"class":731},[167,114303,113464],{"class":512},[19,114305,114306],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,114308,114310],{"className":723,"code":114309,"language":305,"meta":32,"style":32},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[34,114311,114312,114324],{"__ignoreMap":32},[167,114313,114314,114316,114318,114320,114322],{"class":169,"line":170},[167,114315,1035],{"class":731},[167,114317,105040],{"class":512},[167,114319,513],{"class":731},[167,114321,6125],{"class":184},[167,114323,857],{"class":512},[167,114325,114326,114328,114330,114332,114334,114336,114338,114340,114342,114344],{"class":169,"line":191},[167,114327,105486],{"class":731},[167,114329,105026],{"class":184},[167,114331,898],{"class":512},[167,114333,2262],{"class":731},[167,114335,113489],{"class":177},[167,114337,3096],{"class":184},[167,114339,81797],{"class":512},[167,114341,3145],{"class":184},[167,114343,2452],{"class":177},[167,114345,873],{"class":512},[19,114347,114348,114349,114352,114353,114355],{},"如果 site 没找到，就主动报错。",[34,114350,114351],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[34,114354,81797],{}," 的值放进字符串里。",[26,114357,114359],{"className":723,"code":114358,"language":305,"meta":32,"style":32},"return data.site_xpos[site_id].copy()\n",[34,114360,114361],{"__ignoreMap":32},[167,114362,114363,114365],{"class":169,"line":170},[167,114364,19072],{"class":731},[167,114366,113506],{"class":512},[19,114368,114369,114370,114372,114373,114376],{},"返回这个 site 的世界坐标。",[34,114371,105271],{}," 里的每一行都是一个 site 的 ",[34,114374,114375],{},"(x, y, z)"," 坐标。",[26,114378,114380],{"className":723,"code":114379,"language":305,"meta":32,"style":32},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,114381,114382],{"__ignoreMap":32},[167,114383,114384,114386,114388],{"class":169,"line":170},[167,114385,845],{"class":731},[167,114387,113521],{"class":173},[167,114389,113524],{"class":512},[19,114391,114392],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,114394,114396],{"className":723,"code":114395,"language":305,"meta":32,"style":32},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[34,114397,114398,114410],{"__ignoreMap":32},[167,114399,114400,114402,114404,114406,114408],{"class":169,"line":170},[167,114401,113159],{"class":512},[167,114403,523],{"class":731},[167,114405,113534],{"class":512},[167,114407,113127],{"class":177},[167,114409,873],{"class":512},[167,114411,114412,114414,114416,114418,114420],{"class":169,"line":191},[167,114413,113169],{"class":512},[167,114415,523],{"class":731},[167,114417,113534],{"class":512},[167,114419,113550],{"class":177},[167,114421,873],{"class":512},[19,114423,114424],{},"分别读取末端点和目标点的世界坐标。",[26,114426,114427],{"className":723,"code":114099,"language":305,"meta":32,"style":32},[34,114428,114429],{"__ignoreMap":32},[167,114430,114431,114433],{"class":169,"line":170},[167,114432,19072],{"class":731},[167,114434,113559],{"class":512},[19,114436,114437],{},"把四部分拼成一个观测数组：",[26,114439,114442],{"className":114440,"code":114441,"language":31,"meta":32},[29],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[34,114443,114441],{"__ignoreMap":32},[26,114445,114447],{"className":723,"code":114446,"language":305,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\n",[34,114448,114449],{"__ignoreMap":32},[167,114450,114451,114453,114455,114457,114459],{"class":169,"line":170},[167,114452,113187],{"class":512},[167,114454,523],{"class":731},[167,114456,113192],{"class":512},[167,114458,2732],{"class":731},[167,114460,113197],{"class":512},[19,114462,114463,114464,114467,114468,114471],{},"计算 tip 到 target 的距离。",[34,114465,114466],{},"tip - target"," 得到一个三维向量，",[34,114469,114470],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114473,16660],{},[26,114475,114478],{"className":114476,"code":114477,"language":31,"meta":32},[29],"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",[34,114479,114477],{"__ignoreMap":32},[26,114481,114483],{"className":723,"code":114482,"language":305,"meta":32,"style":32},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[34,114484,114485],{"__ignoreMap":32},[167,114486,114487,114489,114491,114493,114495],{"class":169,"line":170},[167,114488,114134],{"class":512},[167,114490,523],{"class":731},[167,114492,113628],{"class":184},[167,114494,8548],{"class":731},[167,114496,113633],{"class":512},[19,114498,114499,114500,114503,114504,114507],{},"计算动作惩罚。",[34,114501,114502],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[34,114505,114506],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,114509,114511],{"className":723,"code":114510,"language":305,"meta":32,"style":32},"return float(-dist - control_cost)\n",[34,114512,114513],{"__ignoreMap":32},[167,114514,114515,114517,114519,114521,114523,114525,114527],{"class":169,"line":170},[167,114516,19072],{"class":731},[167,114518,111388],{"class":184},[167,114520,898],{"class":512},[167,114522,2732],{"class":731},[167,114524,113187],{"class":512},[167,114526,2732],{"class":731},[167,114528,113650],{"class":512},[19,114530,114531],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,114533,114534],{"className":723,"code":112394,"language":305,"meta":32,"style":32},[34,114535,114536],{"__ignoreMap":32},[167,114537,114538,114540,114542],{"class":169,"line":170},[167,114539,112401],{"class":512},[167,114541,523],{"class":731},[167,114543,106352],{"class":184},[19,114545,114546],{},"累计奖励变量，记录整个运行过程的总分。",[26,114548,114550],{"className":723,"code":114549,"language":305,"meta":32,"style":32},"for step in range(500):\n",[34,114551,114552],{"__ignoreMap":32},[167,114553,114554,114556,114558,114560,114562,114564,114566],{"class":169,"line":170},[167,114555,1168],{"class":731},[167,114557,33621],{"class":512},[167,114559,973],{"class":731},[167,114561,976],{"class":184},[167,114563,898],{"class":512},[167,114565,67063],{"class":184},[167,114567,984],{"class":512},[19,114569,114570],{},"运行 500 个控制步。",[26,114572,114573],{"className":723,"code":106134,"language":305,"meta":32,"style":32},[34,114574,114575],{"__ignoreMap":32},[167,114576,114577],{"class":169,"line":170},[167,114578,106134],{"class":512},[19,114580,114581,114582,429,114584,114586],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[34,114583,104822],{},[34,114585,104825],{}," 是当前状态下的坐标。",[26,114588,114590],{"className":723,"code":114589,"language":305,"meta":32,"style":32},"error = target - tip\n",[34,114591,114592],{"__ignoreMap":32},[167,114593,114594,114596,114598,114600,114602],{"class":169,"line":170},[167,114595,114187],{"class":512},[167,114597,523],{"class":731},[167,114599,113759],{"class":512},[167,114601,2732],{"class":731},[167,114603,113764],{"class":512},[19,114605,114606],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,114608,114610],{"className":723,"code":114609,"language":305,"meta":32,"style":32},"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",[34,114611,114612,114644],{"__ignoreMap":32},[167,114613,114614,114616,114618,114620,114622,114624,114626,114628,114630,114632,114634,114636,114638,114640,114642],{"class":169,"line":170},[167,114615,107462],{"class":512},[167,114617,1154],{"class":184},[167,114619,6475],{"class":512},[167,114621,523],{"class":731},[167,114623,113781],{"class":512},[167,114625,106851],{"class":184},[167,114627,8548],{"class":731},[167,114629,113788],{"class":512},[167,114631,2287],{"class":184},[167,114633,113793],{"class":512},[167,114635,2732],{"class":731},[167,114637,1894],{"class":184},[167,114639,14463],{"class":512},[167,114641,1894],{"class":184},[167,114643,873],{"class":512},[167,114645,114646,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674],{"class":169,"line":191},[167,114647,107462],{"class":512},[167,114649,2418],{"class":184},[167,114651,6475],{"class":512},[167,114653,523],{"class":731},[167,114655,113781],{"class":512},[167,114657,106851],{"class":184},[167,114659,8548],{"class":731},[167,114661,113788],{"class":512},[167,114663,1154],{"class":184},[167,114665,113793],{"class":512},[167,114667,2732],{"class":731},[167,114669,1894],{"class":184},[167,114671,14463],{"class":512},[167,114673,1894],{"class":184},[167,114675,873],{"class":512},[19,114677,114678,114679,114682],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[34,114680,114681],{},"error -> ctrl -> step"," 的流程。",[26,114684,114685],{"className":723,"code":106096,"language":305,"meta":32,"style":32},[34,114686,114687],{"__ignoreMap":32},[167,114688,114689],{"class":169,"line":170},[167,114690,106096],{"class":512},[19,114692,114693],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,114695,114697],{"className":723,"code":114696,"language":305,"meta":32,"style":32},"obs = get_obs(model, data)\n",[34,114698,114699],{"__ignoreMap":32},[167,114700,114701,114703,114705],{"class":169,"line":170},[167,114702,112445],{"class":512},[167,114704,523],{"class":731},[167,114706,113882],{"class":512},[19,114708,114709,114710,114713],{},"读取最新观测。后面打印 ",[34,114711,114712],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114715,1807],{"id":1806},[19,114717,114718],{},"观测维度为:",[26,114720,114723],{"className":114721,"code":114722,"language":31,"meta":32},[29],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[34,114724,114722],{"__ignoreMap":32},[19,114726,114727],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114729,114730],{},"程序每 100 步打印：",[26,114732,114735],{"className":114733,"code":114734,"language":31,"meta":32},[29],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[34,114736,114734],{"__ignoreMap":32},[19,114738,114739,114740,114742],{},"如果控制有效，你应该看到最终 ",[34,114741,104822],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114744,1839],{"id":1838},[40,114746,114747,114750,114753,114759,114765,114772,114782],{},[43,114748,114749],{},"修改目标点位置。",[43,114751,114752],{},"重新运行，观察最终 tip 是否变化。",[43,114754,114755,114756,114758],{},"把 gravity 改成 ",[34,114757,2081],{},"，观察控制是否变差。",[43,114760,112772,114761,112776,114763,423],{},[34,114762,1648],{},[34,114764,2287],{},[43,114766,1902,114767,1905,114769,114771],{},[34,114768,112187],{},[34,114770,108898],{},"，观察机械臂是否更难移动。",[43,114773,1902,114774,84517,114776,1905,114778,114781],{},[34,114775,104825],{},[34,114777,105737],{},[34,114779,114780],{},"0.2 0 0.6","，观察 reward 和 final tip。",[43,114783,114784],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114786,1945],{"id":1944},[494,114788,114790],{"id":114789},"site-not-found",[34,114791,114792],{},"site not found",[19,114794,114795,114796,429,114799,423],{},"检查 XML 中是否有 ",[34,114797,114798],{},"site name=\"tip\"",[34,114800,114801],{},"site name=\"target\"",[494,114803,114804],{"id":114804},"机械臂完全不动",[19,114806,2015],{},[40,114808,114809,114814,114817,114822],{},[43,114810,114811,114813],{},[34,114812,1648],{}," 是否为 2",[43,114815,114816],{},"actuator 是否引用正确 joint",[43,114818,114819,114821],{},[34,114820,489],{}," 是否被赋值",[43,114823,114824,114825],{},"是否执行了 ",[34,114826,63],{},[494,114828,114829],{"id":114829},"控制效果不好",[19,114831,114832],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,114834,114837],{"className":114835,"code":114836,"language":31,"meta":32},[29],"obs → action → mj_step → reward → next_obs\n",[34,114838,114836],{"__ignoreMap":32},[494,114840,114842],{"id":114841},"tip-坐标不变化","tip 坐标不变化",[19,114844,2067],{},[40,114846,114847,114852,114860,114869],{},[43,114848,114849,114850,423],{},"是否每步调用了 ",[34,114851,63],{},[43,114853,114854,114855,429,114857,423],{},"是否写入了 ",[34,114856,107717],{},[34,114858,114859],{},"data.ctrl[1]",[43,114861,114862,114863,480,114866,423],{},"actuator 是否正确引用 ",[34,114864,114865],{},"joint1",[34,114867,114868],{},"joint2",[43,114870,114871],{},"控制输入是否太小。",[494,114873,114874],{"id":114874},"目标点不会动",[19,114876,114877],{},"本章的 target 是固定 site：",[26,114879,114881],{"className":503,"code":114880,"language":505,"meta":32,"style":32},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[34,114882,114883],{"__ignoreMap":32},[167,114884,114885,114887,114889,114891,114893,114895,114897,114899,114902],{"class":169,"line":170},[167,114886,513],{"class":512},[167,114888,104801],{"class":516},[167,114890,520],{"class":173},[167,114892,523],{"class":512},[167,114894,113550],{"class":177},[167,114896,529],{"class":173},[167,114898,523],{"class":512},[167,114900,114901],{"class":177},"\"0.5 0 0.4\"",[167,114903,114904],{"class":512}," ...\u002F>\n",[19,114906,114907,114908,114910],{},"它直接挂在 ",[34,114909,1327],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[494,114912,114913],{"id":114913},"机械臂不像真实机械臂",[19,114915,114916],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114918,2099],{"id":2098},[19,114920,114921],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114923,114924],{},"核心公式：",[26,114926,114929],{"className":114927,"code":114928,"language":31,"meta":32},[29],"distance = ||tip - target||\nreward = -distance - action_cost\n",[34,114930,114928],{"__ignoreMap":32},[19,114932,114933],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2113,114935,114936],{},"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":32,"searchDepth":191,"depth":191,"links":114938},[114939,114940,114941,114946,114950,114951,114952,114960],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":114942},[114943,114944,114945],{"id":113142,"depth":205,"text":113143},{"id":113218,"depth":205,"text":113218},{"id":113248,"depth":205,"text":113249},{"id":682,"depth":191,"text":683,"children":114947},[114948,114949],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":114953},[114954,114955,114956,114957,114958,114959],{"id":114789,"depth":205,"text":114792},{"id":114804,"depth":205,"text":114804},{"id":114829,"depth":205,"text":114829},{"id":114841,"depth":205,"text":114842},{"id":114874,"depth":205,"text":114874},{"id":114913,"depth":205,"text":114913},{"id":2098,"depth":191,"text":2099},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112946,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114967,"title":114968,"body":114969,"description":32,"extension":2140,"meta":118431,"navigation":740,"path":118432,"seo":118433,"stem":118434,"__hash__":118435},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114970,"toc":118402},[114971,114974,114976,114979,114982,115007,115010,115016,115019,115025,115027,115029,115053,115055,115073,115075,115118,115120,115147,115149,115152,115204,115207,115213,115222,115225,115263,115266,115305,115308,115316,115323,115326,115332,115334,115388,115395,115440,115443,115447,115463,115473,115475,116736,116738,116750,116752,116763,116765,116768,116789,116792,116795,116828,116834,116837,116870,116873,116876,116917,116922,116936,116939,116952,116957,116980,116982,116997,117007,117022,117029,117049,117064,117082,117085,117102,117110,117126,117132,117164,117177,117209,117219,117254,117268,117314,117328,117370,117381,117394,117400,117433,117436,117463,117473,117513,117523,117540,117547,117565,117568,117609,117622,117637,117640,117663,117666,117678,117681,117700,117705,117726,117729,117744,117747,117781,117793,117808,117811,117836,117839,117858,117861,117893,117896,117920,117926,117956,117963,117976,117979,117981,117983,117989,117992,117995,118007,118010,118012,118066,118068,118072,118078,118087,118090,118097,118099,118122,118125,118129,118131,118149,118155,118157,118190,118193,118199,118203,118206,118226,118231,118235,118242,118262,118267,118271,118274,118294,118297,118383,118387,118390,118396,118399],[10,114972,114968],{"id":114973},"_8gymnasium-风格强化学习接口基础",[14,114975,17],{"id":16},[19,114977,114978],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114980,114981],{},"你将实现:",[26,114983,114985],{"className":723,"code":114984,"language":305,"meta":32,"style":32},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[34,114986,114987,114997],{"__ignoreMap":32},[167,114988,114989,114992,114994],{"class":169,"line":170},[167,114990,114991],{"class":512},"obs, info ",[167,114993,523],{"class":731},[167,114995,114996],{"class":512}," env.reset()\n",[167,114998,114999,115002,115004],{"class":169,"line":191},[167,115000,115001],{"class":512},"obs, reward, terminated, truncated, info ",[167,115003,523],{"class":731},[167,115005,115006],{"class":512}," env.step(action)\n",[19,115008,115009],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115011,115012,115013,115015],{},"前面章节的代码都是“脚本式”的：在 ",[34,115014,1786],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115017,115018],{},"可以先记住 Gymnasium 环境的核心交互：",[26,115020,115023],{"className":115021,"code":115022,"language":31,"meta":32},[29],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[34,115024,115022],{"__ignoreMap":32},[14,115026,155],{"id":154},[19,115028,158],{},[26,115030,115031],{"className":161,"code":105979,"language":163,"meta":32,"style":32},[34,115032,115033],{"__ignoreMap":32},[167,115034,115035,115037,115039,115041,115043,115045,115047,115049,115051],{"class":169,"line":170},[167,115036,174],{"class":173},[167,115038,178],{"class":177},[167,115040,181],{"class":177},[167,115042,185],{"class":184},[167,115044,105994],{"class":177},[167,115046,197],{"class":177},[167,115048,1993],{"class":177},[167,115050,214],{"class":177},[167,115052,106003],{"class":177},[19,115054,104410],{},[26,115056,115058],{"className":161,"code":115057,"language":163,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[34,115059,115060],{"__ignoreMap":32},[167,115061,115062,115064,115066,115068,115070],{"class":169,"line":170},[167,115063,331],{"class":173},[167,115065,181],{"class":177},[167,115067,336],{"class":177},[167,115069,109302],{"class":177},[167,115071,115072],{"class":177}," gymnasium\n",[19,115074,104427],{},[26,115076,115078],{"className":161,"code":115077,"language":163,"meta":32,"style":32},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[34,115079,115080,115097,115106],{"__ignoreMap":32},[167,115081,115082,115084,115086,115088,115091,115093,115095],{"class":169,"line":170},[167,115083,373],{"class":173},[167,115085,376],{"class":177},[167,115087,379],{"class":184},[167,115089,115090],{"class":177}," mujoco-gym-api",[167,115092,385],{"class":177},[167,115094,388],{"class":184},[167,115096,391],{"class":184},[167,115098,115099,115101,115103],{"class":169,"line":191},[167,115100,373],{"class":173},[167,115102,398],{"class":177},[167,115104,115105],{"class":177}," mujoco-gym-api\n",[167,115107,115108,115110,115112,115114,115116],{"class":169,"line":205},[167,115109,331],{"class":173},[167,115111,181],{"class":177},[167,115113,336],{"class":177},[167,115115,109302],{"class":177},[167,115117,115072],{"class":177},[19,115119,414],{},[40,115121,115122,115132,115135,115141],{},[43,115123,115124,115125,115128,115129,423],{},"本章使用 ",[34,115126,115127],{},"gymnasium","，不是旧版 ",[34,115130,115131],{},"gym",[43,115133,115134],{},"Gymnasium API 与旧 Gym API 有差异。",[43,115136,115137,115138,423],{},"旧 Gym 常见返回值是 4 个: ",[34,115139,115140],{},"obs, reward, done, info",[43,115142,115143,115144,423],{},"Gymnasium 返回值是 5 个: ",[34,115145,115146],{},"obs, reward, terminated, truncated, info",[14,115148,457],{"id":456},[19,115150,115151],{},"强化学习环境接口包含:",[68,115153,115154,115163],{},[71,115155,115156],{},[74,115157,115158,115161],{},[77,115159,115160],{"align":79},"方法",[77,115162,104287],{"align":79},[85,115164,115165,115175,115185,115195],{},[74,115166,115167,115172],{},[90,115168,115169],{"align":79},[34,115170,115171],{},"reset()",[90,115173,115174],{"align":79},"重置环境",[74,115176,115177,115182],{},[90,115178,115179],{"align":79},[34,115180,115181],{},"step(action)",[90,115183,115184],{"align":79},"执行动作",[74,115186,115187,115192],{},[90,115188,115189],{"align":79},[34,115190,115191],{},"observation_space",[90,115193,115194],{"align":79},"观测空间",[74,115196,115197,115202],{},[90,115198,115199],{"align":79},[34,115200,115201],{},"action_space",[90,115203,25681],{"align":79},[19,115205,115206],{},"一个最小环境需要完成:",[26,115208,115211],{"className":115209,"code":115210,"language":31,"meta":32},[29],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[34,115212,115210],{"__ignoreMap":32},[494,115214,115216,429,115219,106229],{"id":115215},"terminated-和-truncated-的区别",[34,115217,115218],{},"terminated",[34,115220,115221],{},"truncated",[19,115223,115224],{},"Gymnasium 把“结束”拆成两个概念：",[68,115226,115227,115237],{},[71,115228,115229],{},[74,115230,115231,115233,115235],{},[77,115232,106165],{"align":79},[77,115234,83],{"align":79},[77,115236,23213],{"align":79},[85,115238,115239,115251],{},[74,115240,115241,115245,115248],{},[90,115242,115243],{"align":79},[34,115244,115218],{},[90,115246,115247],{"align":79},"任务自然结束",[90,115249,115250],{"align":79},"机械臂到达目标、机器人摔倒",[74,115252,115253,115257,115260],{},[90,115254,115255],{"align":79},[34,115256,115221],{},[90,115258,115259],{"align":79},"因外部限制截断",[90,115261,115262],{"align":79},"达到最大步数、时间限制",[19,115264,115265],{},"本章中：",[26,115267,115269],{"className":723,"code":115268,"language":305,"meta":32,"style":32},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[34,115270,115271,115286],{"__ignoreMap":32},[167,115272,115273,115276,115278,115281,115283],{"class":169,"line":170},[167,115274,115275],{"class":512},"terminated ",[167,115277,523],{"class":731},[167,115279,115280],{"class":512}," dist ",[167,115282,513],{"class":731},[167,115284,115285],{"class":184}," 0.05\n",[167,115287,115288,115291,115293,115295,115298,115300,115302],{"class":169,"line":191},[167,115289,115290],{"class":512},"truncated ",[167,115292,523],{"class":731},[167,115294,40874],{"class":184},[167,115296,115297],{"class":512},".steps ",[167,115299,3764],{"class":731},[167,115301,40874],{"class":184},[167,115303,115304],{"class":512},".max_steps\n",[19,115306,115307],{},"也就是：",[40,115309,115310,115313],{},[43,115311,115312],{},"末端距离目标小于 0.05，任务成功结束。",[43,115314,115315],{},"步数超过上限，episode 被截断。",[494,115317,115319,429,115321],{"id":115318},"observation_space-和-action_space",[34,115320,115191],{},[34,115322,115201],{},[19,115324,115325],{},"这两个对象告诉算法：",[26,115327,115330],{"className":115328,"code":115329,"language":31,"meta":32},[29],"观测长什么样\n动作允许多大\n",[34,115331,115329],{"__ignoreMap":32},[19,115333,16660],{},[26,115335,115337],{"className":723,"code":115336,"language":305,"meta":32,"style":32},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[34,115338,115339],{"__ignoreMap":32},[167,115340,115341,115343,115346,115348,115351,115354,115357,115359,115361,115364,115366,115368,115370,115372,115374,115376,115378,115381,115383,115385],{"class":169,"line":170},[167,115342,32830],{"class":184},[167,115344,115345],{"class":512},".action_space ",[167,115347,523],{"class":731},[167,115349,115350],{"class":512}," spaces.Box(",[167,115352,115353],{"class":7246},"low",[167,115355,115356],{"class":731},"=-",[167,115358,1894],{"class":184},[167,115360,14463],{"class":512},[167,115362,115363],{"class":7246},"high",[167,115365,523],{"class":731},[167,115367,1894],{"class":184},[167,115369,14463],{"class":512},[167,115371,97947],{"class":7246},[167,115373,523],{"class":731},[167,115375,898],{"class":512},[167,115377,2287],{"class":184},[167,115379,115380],{"class":512},",), ",[167,115382,95486],{"class":7246},[167,115384,523],{"class":731},[167,115386,115387],{"class":512},"np.float32)\n",[19,115389,115390,115391,115394],{},"表示动作是 2 维数组，每个值都在 ",[34,115392,115393],{},"[-1, 1]"," 范围内。",[26,115396,115398],{"className":723,"code":115397,"language":305,"meta":32,"style":32},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[34,115399,115400],{"__ignoreMap":32},[167,115401,115402,115404,115407,115409,115411,115413,115415,115418,115420,115422,115424,115426,115428,115430,115432,115434,115436,115438],{"class":169,"line":170},[167,115403,32830],{"class":184},[167,115405,115406],{"class":512},".observation_space ",[167,115408,523],{"class":731},[167,115410,115350],{"class":512},[167,115412,115353],{"class":7246},[167,115414,115356],{"class":731},[167,115416,115417],{"class":512},"np.inf, ",[167,115419,115363],{"class":7246},[167,115421,523],{"class":731},[167,115423,115417],{"class":512},[167,115425,97947],{"class":7246},[167,115427,523],{"class":731},[167,115429,898],{"class":512},[167,115431,2646],{"class":184},[167,115433,115380],{"class":512},[167,115435,95486],{"class":7246},[167,115437,523],{"class":731},[167,115439,115387],{"class":512},[19,115441,115442],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[494,115444,115446],{"id":115445},"frame_skip-是什么","frame_skip 是什么",[26,115448,115450],{"className":723,"code":115449,"language":305,"meta":32,"style":32},"self.frame_skip = 5\n",[34,115451,115452],{"__ignoreMap":32},[167,115453,115454,115456,115459,115461],{"class":169,"line":170},[167,115455,32830],{"class":184},[167,115457,115458],{"class":512},".frame_skip ",[167,115460,523],{"class":731},[167,115462,56417],{"class":184},[19,115464,115465,115466,115469,115470,115472],{},"表示外部调用一次 ",[34,115467,115468],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[34,115471,644],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115474,683],{"id":682},[26,115476,115478],{"className":723,"code":115477,"language":305,"meta":32,"style":32},"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",[34,115479,115480,115492,115498,115508,115519,115523,115527,115535,115540,115544,115548,115552,115556,115560,115564,115568,115573,115577,115581,115585,115590,115594,115598,115602,115606,115610,115614,115618,115622,115626,115630,115634,115638,115642,115660,115675,115679,115692,115702,115717,115734,115738,115759,115778,115803,115817,115821,115831,115843,115853,115857,115899,115937,115941,115951,115967,115982,116001,116008,116012,116025,116040,116055,116068,116087,116103,116107,116148,116163,116178,116182,116221,116232,116245,116249,116259,116268,116272,116282,116297,116315,116319,116330,116347,116360,116364,116374,116378,116389,116400,116404,116418,116432,116448,116452,116465,116482,116497,116504,116508,116512,116524,116534,116552,116564,116576,116580,116588,116604,116613,116622,116630,116672,116685,116690,116694,116712,116716,116720,116732],{"__ignoreMap":32},[167,115481,115482,115484,115487,115489],{"class":169,"line":170},[167,115483,732],{"class":731},[167,115485,115486],{"class":512}," gymnasium ",[167,115488,33388],{"class":731},[167,115490,115491],{"class":512}," gym\n",[167,115493,115494,115496],{"class":169,"line":191},[167,115495,732],{"class":731},[167,115497,735],{"class":512},[167,115499,115500,115502,115504,115506],{"class":169,"line":205},[167,115501,732],{"class":731},[167,115503,33385],{"class":512},[167,115505,33388],{"class":731},[167,115507,33391],{"class":512},[167,115509,115510,115512,115514,115516],{"class":169,"line":219},[167,115511,32745],{"class":731},[167,115513,115486],{"class":512},[167,115515,732],{"class":731},[167,115517,115518],{"class":512}," spaces\n",[167,115520,115521],{"class":169,"line":230},[167,115522,741],{"emptyLinePlaceholder":740},[167,115524,115525],{"class":169,"line":241},[167,115526,741],{"emptyLinePlaceholder":740},[167,115528,115529,115531,115533],{"class":169,"line":261},[167,115530,750],{"class":184},[167,115532,753],{"class":731},[167,115534,756],{"class":177},[167,115536,115537],{"class":169,"line":773},[167,115538,115539],{"class":177},"\u003Cmujoco model=\"gym_reacher\">\n",[167,115541,115542],{"class":169,"line":779},[167,115543,113329],{"class":177},[167,115545,115546],{"class":169,"line":785},[167,115547,741],{"emptyLinePlaceholder":740},[167,115549,115550],{"class":169,"line":790},[167,115551,776],{"class":177},[167,115553,115554],{"class":169,"line":796},[167,115555,113347],{"class":177},[167,115557,115558],{"class":169,"line":802},[167,115559,741],{"emptyLinePlaceholder":740},[167,115561,115562],{"class":169,"line":808},[167,115563,113356],{"class":177},[167,115565,115566],{"class":169,"line":814},[167,115567,113361],{"class":177},[167,115569,115570],{"class":169,"line":820},[167,115571,115572],{"class":177},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[167,115574,115575],{"class":169,"line":826},[167,115576,741],{"emptyLinePlaceholder":740},[167,115578,115579],{"class":169,"line":832},[167,115580,113375],{"class":177},[167,115582,115583],{"class":169,"line":837},[167,115584,113380],{"class":177},[167,115586,115587],{"class":169,"line":842},[167,115588,115589],{"class":177},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[167,115591,115592],{"class":169,"line":860},[167,115593,113390],{"class":177},[167,115595,115596],{"class":169,"line":876},[167,115597,108029],{"class":177},[167,115599,115600],{"class":169,"line":887},[167,115601,811],{"class":177},[167,115603,115604],{"class":169,"line":892},[167,115605,817],{"class":177},[167,115607,115608],{"class":169,"line":907},[167,115609,741],{"emptyLinePlaceholder":740},[167,115611,115612],{"class":169,"line":920},[167,115613,108046],{"class":177},[167,115615,115616],{"class":169,"line":933},[167,115617,113415],{"class":177},[167,115619,115620],{"class":169,"line":946},[167,115621,113420],{"class":177},[167,115623,115624],{"class":169,"line":959},[167,115625,108056],{"class":177},[167,115627,115628],{"class":169,"line":964},[167,115629,823],{"class":177},[167,115631,115632],{"class":169,"line":987},[167,115633,829],{"class":177},[167,115635,115636],{"class":169,"line":993},[167,115637,741],{"emptyLinePlaceholder":740},[167,115639,115640],{"class":169,"line":998},[167,115641,741],{"emptyLinePlaceholder":740},[167,115643,115644,115646,115649,115651,115653,115655,115658],{"class":169,"line":1010},[167,115645,16721],{"class":731},[167,115647,115648],{"class":173}," ReacherEnv",[167,115650,898],{"class":512},[167,115652,115131],{"class":173},[167,115654,2758],{"class":512},[167,115656,115657],{"class":173},"Env",[167,115659,984],{"class":512},[167,115661,115662,115665,115667,115669,115672],{"class":169,"line":1022},[167,115663,115664],{"class":512},"    metadata ",[167,115666,523],{"class":731},[167,115668,6480],{"class":512},[167,115670,115671],{"class":177},"\"render_modes\"",[167,115673,115674],{"class":512},": []}\n",[167,115676,115677],{"class":169,"line":1027},[167,115678,741],{"emptyLinePlaceholder":740},[167,115680,115681,115683,115685,115688,115690],{"class":169,"line":1032},[167,115682,32808],{"class":731},[167,115684,32811],{"class":184},[167,115686,115687],{"class":512},"(self) -> ",[167,115689,854],{"class":184},[167,115691,857],{"class":512},[167,115693,115694,115696,115698,115700],{"class":169,"line":1049},[167,115695,32824],{"class":184},[167,115697,19287],{"class":512},[167,115699,32836],{"class":184},[167,115701,4020],{"class":512},[167,115703,115704,115706,115709,115711,115713,115715],{"class":169,"line":10005},[167,115705,32852],{"class":184},[167,115707,115708],{"class":512},".model ",[167,115710,523],{"class":731},[167,115712,868],{"class":512},[167,115714,750],{"class":184},[167,115716,873],{"class":512},[167,115718,115719,115721,115724,115726,115729,115731],{"class":169,"line":10011},[167,115720,32852],{"class":184},[167,115722,115723],{"class":512},".data ",[167,115725,523],{"class":731},[167,115727,115728],{"class":512}," mujoco.MjData(",[167,115730,32830],{"class":184},[167,115732,115733],{"class":512},".model)\n",[167,115735,115736],{"class":169,"line":10038},[167,115737,741],{"emptyLinePlaceholder":740},[167,115739,115740,115742,115745,115747,115750,115752,115755,115757],{"class":169,"line":10043},[167,115741,32852],{"class":184},[167,115743,115744],{"class":512},".tip_site_id ",[167,115746,523],{"class":731},[167,115748,115749],{"class":512}," mujoco.mj_name2id(",[167,115751,32830],{"class":184},[167,115753,115754],{"class":512},".model, mujoco.mjtObj.mjOBJ_SITE, ",[167,115756,113127],{"class":177},[167,115758,873],{"class":512},[167,115760,115761,115763,115766,115768,115770,115772,115774,115776],{"class":169,"line":10049},[167,115762,32852],{"class":184},[167,115764,115765],{"class":512},".target_site_id ",[167,115767,523],{"class":731},[167,115769,115749],{"class":512},[167,115771,32830],{"class":184},[167,115773,115754],{"class":512},[167,115775,113550],{"class":177},[167,115777,873],{"class":512},[167,115779,115780,115782,115784,115786,115788,115790,115793,115795,115797,115799,115801],{"class":169,"line":10061},[167,115781,4540],{"class":731},[167,115783,40874],{"class":184},[167,115785,115744],{"class":512},[167,115787,513],{"class":731},[167,115789,6125],{"class":184},[167,115791,115792],{"class":731}," or",[167,115794,40874],{"class":184},[167,115796,115765],{"class":512},[167,115798,513],{"class":731},[167,115800,6125],{"class":184},[167,115802,857],{"class":512},[167,115804,115805,115808,115810,115812,115815],{"class":169,"line":10073},[167,115806,115807],{"class":731},"            raise",[167,115809,105026],{"class":184},[167,115811,898],{"class":512},[167,115813,115814],{"class":177},"\"required sites not found\"",[167,115816,873],{"class":512},[167,115818,115819],{"class":169,"line":10085},[167,115820,741],{"emptyLinePlaceholder":740},[167,115822,115823,115825,115827,115829],{"class":169,"line":11744},[167,115824,32852],{"class":184},[167,115826,115458],{"class":512},[167,115828,523],{"class":731},[167,115830,56417],{"class":184},[167,115832,115833,115835,115838,115840],{"class":169,"line":11769},[167,115834,32852],{"class":184},[167,115836,115837],{"class":512},".max_steps ",[167,115839,523],{"class":731},[167,115841,115842],{"class":184}," 200\n",[167,115844,115845,115847,115849,115851],{"class":169,"line":11792},[167,115846,32852],{"class":184},[167,115848,115297],{"class":512},[167,115850,523],{"class":731},[167,115852,49333],{"class":184},[167,115854,115855],{"class":169,"line":11816},[167,115856,741],{"emptyLinePlaceholder":740},[167,115858,115859,115861,115863,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897],{"class":169,"line":11821},[167,115860,32852],{"class":184},[167,115862,115345],{"class":512},[167,115864,523],{"class":731},[167,115866,115350],{"class":512},[167,115868,115353],{"class":7246},[167,115870,115356],{"class":731},[167,115872,1894],{"class":184},[167,115874,14463],{"class":512},[167,115876,115363],{"class":7246},[167,115878,523],{"class":731},[167,115880,1894],{"class":184},[167,115882,14463],{"class":512},[167,115884,97947],{"class":7246},[167,115886,523],{"class":731},[167,115888,898],{"class":512},[167,115890,2287],{"class":184},[167,115892,115380],{"class":512},[167,115894,95486],{"class":7246},[167,115896,523],{"class":731},[167,115898,115387],{"class":512},[167,115900,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921,115923,115925,115927,115929,115931,115933,115935],{"class":169,"line":11826},[167,115902,32852],{"class":184},[167,115904,115406],{"class":512},[167,115906,523],{"class":731},[167,115908,115350],{"class":512},[167,115910,115353],{"class":7246},[167,115912,115356],{"class":731},[167,115914,115417],{"class":512},[167,115916,115363],{"class":7246},[167,115918,523],{"class":731},[167,115920,115417],{"class":512},[167,115922,97947],{"class":7246},[167,115924,523],{"class":731},[167,115926,898],{"class":512},[167,115928,2646],{"class":184},[167,115930,115380],{"class":512},[167,115932,95486],{"class":7246},[167,115934,523],{"class":731},[167,115936,115387],{"class":512},[167,115938,115939],{"class":169,"line":11831},[167,115940,741],{"emptyLinePlaceholder":740},[167,115942,115943,115945,115948],{"class":169,"line":11840},[167,115944,32808],{"class":731},[167,115946,115947],{"class":173}," _get_obs",[167,115949,115950],{"class":512},"(self) -> np.ndarray:\n",[167,115952,115953,115955,115957,115959,115962,115964],{"class":169,"line":11845},[167,115954,113728],{"class":512},[167,115956,523],{"class":731},[167,115958,40874],{"class":184},[167,115960,115961],{"class":512},".data.site_xpos[",[167,115963,32830],{"class":184},[167,115965,115966],{"class":512},".tip_site_id].copy()\n",[167,115968,115969,115971,115973,115975,115977,115979],{"class":169,"line":11851},[167,115970,113741],{"class":512},[167,115972,523],{"class":731},[167,115974,40874],{"class":184},[167,115976,115961],{"class":512},[167,115978,32830],{"class":184},[167,115980,115981],{"class":512},".target_site_id].copy()\n",[167,115983,115984,115986,115988,115991,115993,115996,115998],{"class":169,"line":11872},[167,115985,111773],{"class":512},[167,115987,523],{"class":731},[167,115989,115990],{"class":512}," np.concatenate([",[167,115992,32830],{"class":184},[167,115994,115995],{"class":512},".data.qpos.copy(), ",[167,115997,32830],{"class":184},[167,115999,116000],{"class":512},".data.qvel.copy(), tip, target])\n",[167,116002,116003,116005],{"class":169,"line":11878},[167,116004,16779],{"class":731},[167,116006,116007],{"class":512}," obs.astype(np.float32)\n",[167,116009,116010],{"class":169,"line":11892},[167,116011,741],{"emptyLinePlaceholder":740},[167,116013,116014,116016,116019,116021,116023],{"class":169,"line":11898},[167,116015,32808],{"class":731},[167,116017,116018],{"class":173}," _get_reward",[167,116020,115687],{"class":512},[167,116022,2251],{"class":184},[167,116024,857],{"class":512},[167,116026,116027,116029,116031,116033,116035,116037],{"class":169,"line":11925},[167,116028,113728],{"class":512},[167,116030,523],{"class":731},[167,116032,40874],{"class":184},[167,116034,115961],{"class":512},[167,116036,32830],{"class":184},[167,116038,116039],{"class":512},".tip_site_id]\n",[167,116041,116042,116044,116046,116048,116050,116052],{"class":169,"line":11934},[167,116043,113741],{"class":512},[167,116045,523],{"class":731},[167,116047,40874],{"class":184},[167,116049,115961],{"class":512},[167,116051,32830],{"class":184},[167,116053,116054],{"class":512},".target_site_id]\n",[167,116056,116057,116060,116062,116064,116066],{"class":169,"line":11940},[167,116058,116059],{"class":512},"        dist ",[167,116061,523],{"class":731},[167,116063,113192],{"class":512},[167,116065,2732],{"class":731},[167,116067,113197],{"class":512},[167,116069,116070,116073,116075,116077,116079,116082,116084],{"class":169,"line":11948},[167,116071,116072],{"class":512},"        control_cost ",[167,116074,523],{"class":731},[167,116076,113628],{"class":184},[167,116078,8548],{"class":731},[167,116080,116081],{"class":512}," np.sum(np.square(",[167,116083,32830],{"class":184},[167,116085,116086],{"class":512},".data.ctrl))\n",[167,116088,116089,116091,116093,116095,116097,116099,116101],{"class":169,"line":11953},[167,116090,16779],{"class":731},[167,116092,111388],{"class":184},[167,116094,898],{"class":512},[167,116096,2732],{"class":731},[167,116098,113187],{"class":512},[167,116100,2732],{"class":731},[167,116102,113650],{"class":512},[167,116104,116105],{"class":169,"line":18630},[167,116106,741],{"emptyLinePlaceholder":740},[167,116108,116109,116111,116114,116117,116119,116122,116124,116126,116128,116130,116132,116135,116138,116140,116142,116144,116146],{"class":169,"line":18636},[167,116110,32808],{"class":731},[167,116112,116113],{"class":173}," reset",[167,116115,116116],{"class":512},"(self, ",[167,116118,2655],{"class":731},[167,116120,116121],{"class":512},", seed: ",[167,116123,2216],{"class":184},[167,116125,27130],{"class":731},[167,116127,40934],{"class":184},[167,116129,753],{"class":731},[167,116131,40934],{"class":184},[167,116133,116134],{"class":512},", options: ",[167,116136,116137],{"class":184},"dict",[167,116139,27130],{"class":731},[167,116141,40934],{"class":184},[167,116143,753],{"class":731},[167,116145,40934],{"class":184},[167,116147,984],{"class":512},[167,116149,116150,116152,116155,116158,116160],{"class":169,"line":18659},[167,116151,32824],{"class":184},[167,116153,116154],{"class":512},"().reset(",[167,116156,116157],{"class":7246},"seed",[167,116159,523],{"class":731},[167,116161,116162],{"class":512},"seed)\n",[167,116164,116165,116168,116170,116173,116175],{"class":169,"line":18665},[167,116166,116167],{"class":512},"        mujoco.mj_resetData(",[167,116169,32830],{"class":184},[167,116171,116172],{"class":512},".model, ",[167,116174,32830],{"class":184},[167,116176,116177],{"class":512},".data)\n",[167,116179,116180],{"class":169,"line":18688},[167,116181,741],{"emptyLinePlaceholder":740},[167,116183,116184,116186,116189,116191,116193,116196,116198,116200,116202,116204,116206,116208,116210,116212,116214,116216,116218],{"class":169,"line":18702},[167,116185,32852],{"class":184},[167,116187,116188],{"class":512},".data.qpos[:] ",[167,116190,523],{"class":731},[167,116192,40874],{"class":184},[167,116194,116195],{"class":512},".np_random.uniform(",[167,116197,115353],{"class":7246},[167,116199,115356],{"class":731},[167,116201,88196],{"class":184},[167,116203,14463],{"class":512},[167,116205,115363],{"class":7246},[167,116207,523],{"class":731},[167,116209,88196],{"class":184},[167,116211,14463],{"class":512},[167,116213,33501],{"class":7246},[167,116215,523],{"class":731},[167,116217,32830],{"class":184},[167,116219,116220],{"class":512},".model.nq)\n",[167,116222,116223,116225,116228,116230],{"class":169,"line":18722},[167,116224,32852],{"class":184},[167,116226,116227],{"class":512},".data.qvel[:] ",[167,116229,523],{"class":731},[167,116231,106352],{"class":184},[167,116233,116234,116237,116239,116241,116243],{"class":169,"line":18728},[167,116235,116236],{"class":512},"        mujoco.mj_forward(",[167,116238,32830],{"class":184},[167,116240,116172],{"class":512},[167,116242,32830],{"class":184},[167,116244,116177],{"class":512},[167,116246,116247],{"class":169,"line":18739},[167,116248,741],{"emptyLinePlaceholder":740},[167,116250,116251,116253,116255,116257],{"class":169,"line":18762},[167,116252,32852],{"class":184},[167,116254,115297],{"class":512},[167,116256,523],{"class":731},[167,116258,49333],{"class":184},[167,116260,116261,116263,116265],{"class":169,"line":18784},[167,116262,16779],{"class":731},[167,116264,40874],{"class":184},[167,116266,116267],{"class":512},"._get_obs(), {}\n",[167,116269,116270],{"class":169,"line":18789},[167,116271,741],{"emptyLinePlaceholder":740},[167,116273,116274,116276,116279],{"class":169,"line":18795},[167,116275,32808],{"class":731},[167,116277,116278],{"class":173}," step",[167,116280,116281],{"class":512},"(self, action):\n",[167,116283,116284,116286,116288,116291,116293,116295],{"class":169,"line":18809},[167,116285,111813],{"class":512},[167,116287,523],{"class":731},[167,116289,116290],{"class":512}," np.asarray(action, ",[167,116292,95486],{"class":7246},[167,116294,523],{"class":731},[167,116296,115387],{"class":512},[167,116298,116299,116301,116303,116305,116307,116310,116312],{"class":169,"line":18822},[167,116300,111813],{"class":512},[167,116302,523],{"class":731},[167,116304,109038],{"class":512},[167,116306,32830],{"class":184},[167,116308,116309],{"class":512},".action_space.low, ",[167,116311,32830],{"class":184},[167,116313,116314],{"class":512},".action_space.high)\n",[167,116316,116317],{"class":169,"line":18827},[167,116318,741],{"emptyLinePlaceholder":740},[167,116320,116321,116323,116326,116328],{"class":169,"line":18841},[167,116322,32852],{"class":184},[167,116324,116325],{"class":512},".data.ctrl[:] ",[167,116327,523],{"class":731},[167,116329,109061],{"class":512},[167,116331,116332,116334,116336,116338,116340,116342,116344],{"class":169,"line":18846},[167,116333,5437],{"class":731},[167,116335,970],{"class":512},[167,116337,973],{"class":731},[167,116339,976],{"class":184},[167,116341,898],{"class":512},[167,116343,32830],{"class":184},[167,116345,116346],{"class":512},".frame_skip):\n",[167,116348,116349,116352,116354,116356,116358],{"class":169,"line":18852},[167,116350,116351],{"class":512},"            mujoco.mj_step(",[167,116353,32830],{"class":184},[167,116355,116172],{"class":512},[167,116357,32830],{"class":184},[167,116359,116177],{"class":512},[167,116361,116362],{"class":169,"line":18857},[167,116363,741],{"emptyLinePlaceholder":740},[167,116365,116366,116368,116370,116372],{"class":169,"line":18871},[167,116367,32852],{"class":184},[167,116369,115297],{"class":512},[167,116371,11505],{"class":731},[167,116373,57688],{"class":184},[167,116375,116376],{"class":169,"line":18876},[167,116377,741],{"emptyLinePlaceholder":740},[167,116379,116380,116382,116384,116386],{"class":169,"line":18881},[167,116381,111773],{"class":512},[167,116383,523],{"class":731},[167,116385,40874],{"class":184},[167,116387,116388],{"class":512},"._get_obs()\n",[167,116390,116391,116393,116395,116397],{"class":169,"line":18895},[167,116392,111878],{"class":512},[167,116394,523],{"class":731},[167,116396,40874],{"class":184},[167,116398,116399],{"class":512},"._get_reward()\n",[167,116401,116402],{"class":169,"line":18907},[167,116403,741],{"emptyLinePlaceholder":740},[167,116405,116406,116408,116410,116412,116414,116416],{"class":169,"line":18912},[167,116407,113728],{"class":512},[167,116409,523],{"class":731},[167,116411,40874],{"class":184},[167,116413,115961],{"class":512},[167,116415,32830],{"class":184},[167,116417,116039],{"class":512},[167,116419,116420,116422,116424,116426,116428,116430],{"class":169,"line":18925},[167,116421,113741],{"class":512},[167,116423,523],{"class":731},[167,116425,40874],{"class":184},[167,116427,115961],{"class":512},[167,116429,32830],{"class":184},[167,116431,116054],{"class":512},[167,116433,116434,116436,116438,116440,116443,116445],{"class":169,"line":18930},[167,116435,116059],{"class":512},[167,116437,523],{"class":731},[167,116439,111388],{"class":184},[167,116441,116442],{"class":512},"(np.linalg.norm(tip ",[167,116444,2732],{"class":731},[167,116446,116447],{"class":512}," target))\n",[167,116449,116450],{"class":169,"line":18935},[167,116451,741],{"emptyLinePlaceholder":740},[167,116453,116454,116457,116459,116461,116463],{"class":169,"line":18940},[167,116455,116456],{"class":512},"        terminated ",[167,116458,523],{"class":731},[167,116460,115280],{"class":512},[167,116462,513],{"class":731},[167,116464,115285],{"class":184},[167,116466,116467,116470,116472,116474,116476,116478,116480],{"class":169,"line":18953},[167,116468,116469],{"class":512},"        truncated ",[167,116471,523],{"class":731},[167,116473,40874],{"class":184},[167,116475,115297],{"class":512},[167,116477,3764],{"class":731},[167,116479,40874],{"class":184},[167,116481,115304],{"class":512},[167,116483,116484,116487,116489,116491,116494],{"class":169,"line":18958},[167,116485,116486],{"class":512},"        info ",[167,116488,523],{"class":731},[167,116490,6480],{"class":512},[167,116492,116493],{"class":177},"\"distance\"",[167,116495,116496],{"class":512},": dist}\n",[167,116498,116499,116501],{"class":169,"line":34636},[167,116500,16779],{"class":731},[167,116502,116503],{"class":512}," obs, reward, terminated, truncated, info\n",[167,116505,116506],{"class":169,"line":34642},[167,116507,741],{"emptyLinePlaceholder":740},[167,116509,116510],{"class":169,"line":34648},[167,116511,741],{"emptyLinePlaceholder":740},[167,116513,116514,116516,116518,116520,116522],{"class":169,"line":34654},[167,116515,845],{"class":731},[167,116517,848],{"class":173},[167,116519,851],{"class":512},[167,116521,854],{"class":184},[167,116523,857],{"class":512},[167,116525,116526,116529,116531],{"class":169,"line":34660},[167,116527,116528],{"class":512},"    env ",[167,116530,523],{"class":731},[167,116532,116533],{"class":512}," ReacherEnv()\n",[167,116535,116536,116539,116541,116544,116546,116548,116550],{"class":169,"line":34671},[167,116537,116538],{"class":512},"    obs, info ",[167,116540,523],{"class":731},[167,116542,116543],{"class":512}," env.reset(",[167,116545,116157],{"class":7246},[167,116547,523],{"class":731},[167,116549,1154],{"class":184},[167,116551,873],{"class":512},[167,116553,116554,116556,116558,116561],{"class":169,"line":34677},[167,116555,895],{"class":184},[167,116557,898],{"class":512},[167,116559,116560],{"class":177},"\"initial obs shape:\"",[167,116562,116563],{"class":512},", obs.shape)\n",[167,116565,116566,116568,116570,116573],{"class":169,"line":34697},[167,116567,895],{"class":184},[167,116569,898],{"class":512},[167,116571,116572],{"class":177},"\"initial info:\"",[167,116574,116575],{"class":512},", info)\n",[167,116577,116578],{"class":169,"line":34703},[167,116579,741],{"emptyLinePlaceholder":740},[167,116581,116582,116584,116586],{"class":169,"line":34714},[167,116583,111744],{"class":512},[167,116585,523],{"class":731},[167,116587,106352],{"class":184},[167,116589,116590,116592,116594,116596,116598,116600,116602],{"class":169,"line":34720},[167,116591,967],{"class":731},[167,116593,33621],{"class":512},[167,116595,973],{"class":731},[167,116597,976],{"class":184},[167,116599,898],{"class":512},[167,116601,2900],{"class":184},[167,116603,984],{"class":512},[167,116605,116606,116608,116610],{"class":169,"line":34726},[167,116607,111813],{"class":512},[167,116609,523],{"class":731},[167,116611,116612],{"class":512}," env.action_space.sample()\n",[167,116614,116615,116618,116620],{"class":169,"line":34732},[167,116616,116617],{"class":512},"        obs, reward, terminated, truncated, info ",[167,116619,523],{"class":731},[167,116621,115006],{"class":512},[167,116623,116624,116626,116628],{"class":169,"line":34738},[167,116625,111888],{"class":512},[167,116627,11505],{"class":731},[167,116629,111893],{"class":512},[167,116631,116632,116634,116636,116638,116640,116643,116645,116647,116650,116652,116654,116657,116659,116661,116664,116666,116668,116670],{"class":169,"line":34744},[167,116633,34454],{"class":184},[167,116635,898],{"class":512},[167,116637,111922],{"class":177},[167,116639,111925],{"class":512},[167,116641,116642],{"class":177},"\"reward:\"",[167,116644,14463],{"class":512},[167,116646,34022],{"class":184},[167,116648,116649],{"class":512},"(reward, ",[167,116651,2281],{"class":184},[167,116653,111936],{"class":512},[167,116655,116656],{"class":177},"\"distance:\"",[167,116658,14463],{"class":512},[167,116660,34022],{"class":184},[167,116662,116663],{"class":512},"(info[",[167,116665,116493],{"class":177},[167,116667,113793],{"class":512},[167,116669,2281],{"class":184},[167,116671,32505],{"class":512},[167,116673,116674,116676,116679,116682],{"class":169,"line":34750},[167,116675,4540],{"class":731},[167,116677,116678],{"class":512}," terminated ",[167,116680,116681],{"class":731},"or",[167,116683,116684],{"class":512}," truncated:\n",[167,116686,116687],{"class":169,"line":34756},[167,116688,116689],{"class":731},"            break\n",[167,116691,116692],{"class":169,"line":34776},[167,116693,741],{"emptyLinePlaceholder":740},[167,116695,116696,116698,116700,116702,116704,116706,116708,116710],{"class":169,"line":34782},[167,116697,895],{"class":184},[167,116699,898],{"class":512},[167,116701,111967],{"class":177},[167,116703,14463],{"class":512},[167,116705,34022],{"class":184},[167,116707,111974],{"class":512},[167,116709,2281],{"class":184},[167,116711,32505],{"class":512},[167,116713,116714],{"class":169,"line":34798},[167,116715,741],{"emptyLinePlaceholder":740},[167,116717,116718],{"class":169,"line":34804},[167,116719,741],{"emptyLinePlaceholder":740},[167,116721,116722,116724,116726,116728,116730],{"class":169,"line":34818},[167,116723,1035],{"class":731},[167,116725,1038],{"class":184},[167,116727,1041],{"class":731},[167,116729,1044],{"class":177},[167,116731,857],{"class":512},[167,116733,116734],{"class":169,"line":34824},[167,116735,1052],{"class":512},[19,116737,105161],{},[26,116739,116741],{"className":161,"code":116740,"language":163,"meta":32,"style":32},"touch ch8_gym_env.py\n",[34,116742,116743],{"__ignoreMap":32},[167,116744,116745,116747],{"class":169,"line":170},[167,116746,714],{"class":173},[167,116748,116749],{"class":177}," ch8_gym_env.py\n",[19,116751,112035],{},[26,116753,116755],{"className":161,"code":116754,"language":163,"meta":32,"style":32},"python ch8_gym_env.py\n",[34,116756,116757],{"__ignoreMap":32},[167,116758,116759,116761],{"class":169,"line":170},[167,116760,305],{"class":173},[167,116762,116749],{"class":177},[494,116764,1055],{"id":1055},[19,116766,116767],{},"继承 Gymnasium 环境：",[26,116769,116771],{"className":723,"code":116770,"language":305,"meta":32,"style":32},"class ReacherEnv(gym.Env):\n",[34,116772,116773],{"__ignoreMap":32},[167,116774,116775,116777,116779,116781,116783,116785,116787],{"class":169,"line":170},[167,116776,16721],{"class":731},[167,116778,115648],{"class":173},[167,116780,898],{"class":512},[167,116782,115131],{"class":173},[167,116784,2758],{"class":512},[167,116786,115657],{"class":173},[167,116788,984],{"class":512},[19,116790,116791],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116793,116794],{},"初始化模型：",[26,116796,116798],{"className":723,"code":116797,"language":305,"meta":32,"style":32},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[34,116799,116800,116814],{"__ignoreMap":32},[167,116801,116802,116804,116806,116808,116810,116812],{"class":169,"line":170},[167,116803,32830],{"class":184},[167,116805,115708],{"class":512},[167,116807,523],{"class":731},[167,116809,868],{"class":512},[167,116811,750],{"class":184},[167,116813,873],{"class":512},[167,116815,116816,116818,116820,116822,116824,116826],{"class":169,"line":191},[167,116817,32830],{"class":184},[167,116819,115723],{"class":512},[167,116821,523],{"class":731},[167,116823,115728],{"class":512},[167,116825,32830],{"class":184},[167,116827,115733],{"class":512},[19,116829,116830,116831,116833],{},"这和前面章节一样，只是现在放到了类的 ",[34,116832,32836],{}," 里。",[19,116835,116836],{},"缓存 site ID：",[26,116838,116840],{"className":723,"code":116839,"language":305,"meta":32,"style":32},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[34,116841,116842,116856],{"__ignoreMap":32},[167,116843,116844,116846,116848,116850,116852,116854],{"class":169,"line":170},[167,116845,32830],{"class":184},[167,116847,115744],{"class":512},[167,116849,523],{"class":731},[167,116851,115749],{"class":512},[167,116853,91540],{"class":184},[167,116855,873],{"class":512},[167,116857,116858,116860,116862,116864,116866,116868],{"class":169,"line":191},[167,116859,32830],{"class":184},[167,116861,115765],{"class":512},[167,116863,523],{"class":731},[167,116865,115749],{"class":512},[167,116867,91540],{"class":184},[167,116869,873],{"class":512},[19,116871,116872],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116874,116875],{},"reset：",[26,116877,116879],{"className":723,"code":116878,"language":305,"meta":32,"style":32},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[34,116880,116881],{"__ignoreMap":32},[167,116882,116883,116885,116887,116889,116891,116893,116895,116897,116899,116901,116903,116905,116907,116909,116911,116913,116915],{"class":169,"line":170},[167,116884,845],{"class":731},[167,116886,116113],{"class":173},[167,116888,116116],{"class":512},[167,116890,2655],{"class":731},[167,116892,116121],{"class":512},[167,116894,2216],{"class":184},[167,116896,27130],{"class":731},[167,116898,40934],{"class":184},[167,116900,753],{"class":731},[167,116902,40934],{"class":184},[167,116904,116134],{"class":512},[167,116906,116137],{"class":184},[167,116908,27130],{"class":731},[167,116910,40934],{"class":184},[167,116912,753],{"class":731},[167,116914,40934],{"class":184},[167,116916,984],{"class":512},[19,116918,116919,116921],{},[34,116920,72044],{}," 做四件事：",[40,116923,116924,116927,116930,116933],{},[43,116925,116926],{},"设置随机种子。",[43,116928,116929],{},"重置 MuJoCo data。",[43,116931,116932],{},"随机初始化关节角。",[43,116934,116935],{},"返回初始观测和 info。",[19,116937,116938],{},"step：",[26,116940,116942],{"className":723,"code":116941,"language":305,"meta":32,"style":32},"def step(self, action):\n",[34,116943,116944],{"__ignoreMap":32},[167,116945,116946,116948,116950],{"class":169,"line":170},[167,116947,845],{"class":731},[167,116949,116278],{"class":173},[167,116951,116281],{"class":512},[19,116953,116954,116956],{},[34,116955,108725],{}," 做六件事：",[40,116958,116959,116962,116968,116971,116974,116977],{},[43,116960,116961],{},"检查并裁剪 action。",[43,116963,116964,116965,423],{},"写入 ",[34,116966,116967],{},"self.data.ctrl",[43,116969,116970],{},"连续推进若干个 MuJoCo 物理步。",[43,116972,116973],{},"计算新观测。",[43,116975,116976],{},"计算奖励和结束条件。",[43,116978,116979],{},"返回 Gymnasium 标准五元组。",[494,116981,1194],{"id":1194},[26,116983,116985],{"className":723,"code":116984,"language":305,"meta":32,"style":32},"import gymnasium as gym\n",[34,116986,116987],{"__ignoreMap":32},[167,116988,116989,116991,116993,116995],{"class":169,"line":170},[167,116990,732],{"class":731},[167,116992,115486],{"class":512},[167,116994,33388],{"class":731},[167,116996,115491],{"class":512},[19,116998,116999,117000,117002,117003,117006],{},"导入 Gymnasium，并起别名 ",[34,117001,115131],{},"。后面写 ",[34,117004,117005],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,117008,117010],{"className":723,"code":117009,"language":305,"meta":32,"style":32},"from gymnasium import spaces\n",[34,117011,117012],{"__ignoreMap":32},[167,117013,117014,117016,117018,117020],{"class":169,"line":170},[167,117015,32745],{"class":731},[167,117017,115486],{"class":512},[167,117019,732],{"class":731},[167,117021,115518],{"class":512},[19,117023,117024,117025,117028],{},"导入空间定义工具。",[34,117026,117027],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,117030,117031],{"className":723,"code":116770,"language":305,"meta":32,"style":32},[34,117032,117033],{"__ignoreMap":32},[167,117034,117035,117037,117039,117041,117043,117045,117047],{"class":169,"line":170},[167,117036,16721],{"class":731},[167,117038,115648],{"class":173},[167,117040,898],{"class":512},[167,117042,115131],{"class":173},[167,117044,2758],{"class":512},[167,117046,115657],{"class":173},[167,117048,984],{"class":512},[19,117050,117051,117052,117055,117056,117058,117059,429,117061,117063],{},"定义一个类，名字叫 ",[34,117053,117054],{},"ReacherEnv","。括号里的 ",[34,117057,117005],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[34,117060,72044],{},[34,117062,108725],{}," 这两个核心方法。",[26,117065,117067],{"className":723,"code":117066,"language":305,"meta":32,"style":32},"metadata = {\"render_modes\": []}\n",[34,117068,117069],{"__ignoreMap":32},[167,117070,117071,117074,117076,117078,117080],{"class":169,"line":170},[167,117072,117073],{"class":512},"metadata ",[167,117075,523],{"class":731},[167,117077,6480],{"class":512},[167,117079,115671],{"class":177},[167,117081,115674],{"class":512},[19,117083,117084],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,117086,117088],{"className":723,"code":117087,"language":305,"meta":32,"style":32},"def __init__(self) -> None:\n",[34,117089,117090],{"__ignoreMap":32},[167,117091,117092,117094,117096,117098,117100],{"class":169,"line":170},[167,117093,845],{"class":731},[167,117095,32811],{"class":184},[167,117097,115687],{"class":512},[167,117099,854],{"class":184},[167,117101,857],{"class":512},[19,117103,117104,117106,117107,423],{},[34,117105,32836],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[34,117108,117109],{},"env = ReacherEnv()",[26,117111,117113],{"className":723,"code":117112,"language":305,"meta":32,"style":32},"super().__init__()\n",[34,117114,117115],{"__ignoreMap":32},[167,117116,117117,117120,117122,117124],{"class":169,"line":170},[167,117118,117119],{"class":184},"super",[167,117121,19287],{"class":512},[167,117123,32836],{"class":184},[167,117125,4020],{"class":512},[19,117127,117128,117129,117131],{},"调用父类 ",[34,117130,117005],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,117133,117134],{"className":723,"code":116797,"language":305,"meta":32,"style":32},[34,117135,117136,117150],{"__ignoreMap":32},[167,117137,117138,117140,117142,117144,117146,117148],{"class":169,"line":170},[167,117139,32830],{"class":184},[167,117141,115708],{"class":512},[167,117143,523],{"class":731},[167,117145,868],{"class":512},[167,117147,750],{"class":184},[167,117149,873],{"class":512},[167,117151,117152,117154,117156,117158,117160,117162],{"class":169,"line":191},[167,117153,32830],{"class":184},[167,117155,115723],{"class":512},[167,117157,523],{"class":731},[167,117159,115728],{"class":512},[167,117161,32830],{"class":184},[167,117163,115733],{"class":512},[19,117165,117166,117167,117169,117170,429,117173,117176],{},"把 MuJoCo 模型和状态保存到 ",[34,117168,32830],{}," 上。",[34,117171,117172],{},"self.model",[34,117174,117175],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,117178,117179],{"className":723,"code":116839,"language":305,"meta":32,"style":32},[34,117180,117181,117195],{"__ignoreMap":32},[167,117182,117183,117185,117187,117189,117191,117193],{"class":169,"line":170},[167,117184,32830],{"class":184},[167,117186,115744],{"class":512},[167,117188,523],{"class":731},[167,117190,115749],{"class":512},[167,117192,91540],{"class":184},[167,117194,873],{"class":512},[167,117196,117197,117199,117201,117203,117205,117207],{"class":169,"line":191},[167,117198,32830],{"class":184},[167,117200,115765],{"class":512},[167,117202,523],{"class":731},[167,117204,115749],{"class":512},[167,117206,91540],{"class":184},[167,117208,873],{"class":512},[19,117210,117211,117212,429,117215,117218],{},"提前查好 tip 和 target 的 site ID。这样 ",[34,117213,117214],{},"_get_obs",[34,117216,117217],{},"_get_reward"," 里就不用每次按名字查找。",[26,117220,117222],{"className":723,"code":117221,"language":305,"meta":32,"style":32},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[34,117223,117224,117234,117244],{"__ignoreMap":32},[167,117225,117226,117228,117230,117232],{"class":169,"line":170},[167,117227,32830],{"class":184},[167,117229,115458],{"class":512},[167,117231,523],{"class":731},[167,117233,56417],{"class":184},[167,117235,117236,117238,117240,117242],{"class":169,"line":191},[167,117237,32830],{"class":184},[167,117239,115837],{"class":512},[167,117241,523],{"class":731},[167,117243,115842],{"class":184},[167,117245,117246,117248,117250,117252],{"class":169,"line":205},[167,117247,32830],{"class":184},[167,117249,115297],{"class":512},[167,117251,523],{"class":731},[167,117253,49333],{"class":184},[19,117255,117256,117259,117260,117263,117264,117267],{},[34,117257,117258],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[34,117261,117262],{},"max_steps"," 是一个 episode 最多运行多少步。",[34,117265,117266],{},"steps"," 记录当前 episode 已经走了多少步。",[26,117269,117270],{"className":723,"code":115336,"language":305,"meta":32,"style":32},[34,117271,117272],{"__ignoreMap":32},[167,117273,117274,117276,117278,117280,117282,117284,117286,117288,117290,117292,117294,117296,117298,117300,117302,117304,117306,117308,117310,117312],{"class":169,"line":170},[167,117275,32830],{"class":184},[167,117277,115345],{"class":512},[167,117279,523],{"class":731},[167,117281,115350],{"class":512},[167,117283,115353],{"class":7246},[167,117285,115356],{"class":731},[167,117287,1894],{"class":184},[167,117289,14463],{"class":512},[167,117291,115363],{"class":7246},[167,117293,523],{"class":731},[167,117295,1894],{"class":184},[167,117297,14463],{"class":512},[167,117299,97947],{"class":7246},[167,117301,523],{"class":731},[167,117303,898],{"class":512},[167,117305,2287],{"class":184},[167,117307,115380],{"class":512},[167,117309,95486],{"class":7246},[167,117311,523],{"class":731},[167,117313,115387],{"class":512},[19,117315,117316,117317,117320,117321,429,117324,117327],{},"定义动作空间。",[34,117318,117319],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[34,117322,117323],{},"low=-1.0",[34,117325,117326],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,117329,117330],{"className":723,"code":115397,"language":305,"meta":32,"style":32},[34,117331,117332],{"__ignoreMap":32},[167,117333,117334,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354,117356,117358,117360,117362,117364,117366,117368],{"class":169,"line":170},[167,117335,32830],{"class":184},[167,117337,115406],{"class":512},[167,117339,523],{"class":731},[167,117341,115350],{"class":512},[167,117343,115353],{"class":7246},[167,117345,115356],{"class":731},[167,117347,115417],{"class":512},[167,117349,115363],{"class":7246},[167,117351,523],{"class":731},[167,117353,115417],{"class":512},[167,117355,97947],{"class":7246},[167,117357,523],{"class":731},[167,117359,898],{"class":512},[167,117361,2646],{"class":184},[167,117363,115380],{"class":512},[167,117365,95486],{"class":7246},[167,117367,523],{"class":731},[167,117369,115387],{"class":512},[19,117371,117372,117373,117376,117377,117380],{},"定义观测空间。",[34,117374,117375],{},"shape=(10,)"," 表示观测是 10 个数。",[34,117378,117379],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,117382,117384],{"className":723,"code":117383,"language":305,"meta":32,"style":32},"def _get_obs(self) -> np.ndarray:\n",[34,117385,117386],{"__ignoreMap":32},[167,117387,117388,117390,117392],{"class":169,"line":170},[167,117389,845],{"class":731},[167,117391,115947],{"class":173},[167,117393,115950],{"class":512},[19,117395,117396,117397,117399],{},"定义内部函数，用来生成观测。函数名前面的 ",[34,117398,1727],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,117401,117403],{"className":723,"code":117402,"language":305,"meta":32,"style":32},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[34,117404,117405,117419],{"__ignoreMap":32},[167,117406,117407,117409,117411,117413,117415,117417],{"class":169,"line":170},[167,117408,113159],{"class":512},[167,117410,523],{"class":731},[167,117412,40874],{"class":184},[167,117414,115961],{"class":512},[167,117416,32830],{"class":184},[167,117418,115966],{"class":512},[167,117420,117421,117423,117425,117427,117429,117431],{"class":169,"line":191},[167,117422,113169],{"class":512},[167,117424,523],{"class":731},[167,117426,40874],{"class":184},[167,117428,115961],{"class":512},[167,117430,32830],{"class":184},[167,117432,115981],{"class":512},[19,117434,117435],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,117437,117439],{"className":723,"code":117438,"language":305,"meta":32,"style":32},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[34,117440,117441,117457],{"__ignoreMap":32},[167,117442,117443,117445,117447,117449,117451,117453,117455],{"class":169,"line":170},[167,117444,112445],{"class":512},[167,117446,523],{"class":731},[167,117448,115990],{"class":512},[167,117450,32830],{"class":184},[167,117452,115995],{"class":512},[167,117454,32830],{"class":184},[167,117456,116000],{"class":512},[167,117458,117459,117461],{"class":169,"line":191},[167,117460,19072],{"class":731},[167,117462,116007],{"class":512},[19,117464,117465,117466,117469,117470,117472],{},"拼接观测，并转换成 ",[34,117467,117468],{},"float32","。很多强化学习库默认使用 ",[34,117471,117468],{},"，所以这里主动转换。",[26,117474,117475],{"className":723,"code":116878,"language":305,"meta":32,"style":32},[34,117476,117477],{"__ignoreMap":32},[167,117478,117479,117481,117483,117485,117487,117489,117491,117493,117495,117497,117499,117501,117503,117505,117507,117509,117511],{"class":169,"line":170},[167,117480,845],{"class":731},[167,117482,116113],{"class":173},[167,117484,116116],{"class":512},[167,117486,2655],{"class":731},[167,117488,116121],{"class":512},[167,117490,2216],{"class":184},[167,117492,27130],{"class":731},[167,117494,40934],{"class":184},[167,117496,753],{"class":731},[167,117498,40934],{"class":184},[167,117500,116134],{"class":512},[167,117502,116137],{"class":184},[167,117504,27130],{"class":731},[167,117506,40934],{"class":184},[167,117508,753],{"class":731},[167,117510,40934],{"class":184},[167,117512,984],{"class":512},[19,117514,117515,117516,117518,117519,117522],{},"定义 reset。",[34,117517,116157],{}," 用来控制随机数，保证实验可以复现。",[34,117520,117521],{},"options"," 用来接收额外配置，本章暂时不用。",[26,117524,117526],{"className":723,"code":117525,"language":305,"meta":32,"style":32},"super().reset(seed=seed)\n",[34,117527,117528],{"__ignoreMap":32},[167,117529,117530,117532,117534,117536,117538],{"class":169,"line":170},[167,117531,117119],{"class":184},[167,117533,116154],{"class":512},[167,117535,116157],{"class":7246},[167,117537,523],{"class":731},[167,117539,116162],{"class":512},[19,117541,117542,117543,117546],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[34,117544,117545],{},"self.np_random"," 生成可复现的随机数。",[26,117548,117550],{"className":723,"code":117549,"language":305,"meta":32,"style":32},"mujoco.mj_resetData(self.model, self.data)\n",[34,117551,117552],{"__ignoreMap":32},[167,117553,117554,117557,117559,117561,117563],{"class":169,"line":170},[167,117555,117556],{"class":512},"mujoco.mj_resetData(",[167,117558,32830],{"class":184},[167,117560,116172],{"class":512},[167,117562,32830],{"class":184},[167,117564,116177],{"class":512},[19,117566,117567],{},"把 MuJoCo 状态重置到默认状态。",[26,117569,117571],{"className":723,"code":117570,"language":305,"meta":32,"style":32},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[34,117572,117573],{"__ignoreMap":32},[167,117574,117575,117577,117579,117581,117583,117585,117587,117589,117591,117593,117595,117597,117599,117601,117603,117605,117607],{"class":169,"line":170},[167,117576,32830],{"class":184},[167,117578,116188],{"class":512},[167,117580,523],{"class":731},[167,117582,40874],{"class":184},[167,117584,116195],{"class":512},[167,117586,115353],{"class":7246},[167,117588,115356],{"class":731},[167,117590,88196],{"class":184},[167,117592,14463],{"class":512},[167,117594,115363],{"class":7246},[167,117596,523],{"class":731},[167,117598,88196],{"class":184},[167,117600,14463],{"class":512},[167,117602,33501],{"class":7246},[167,117604,523],{"class":731},[167,117606,32830],{"class":184},[167,117608,116220],{"class":512},[19,117610,116932,117611,117614,117615,117618,117619,117621],{},[34,117612,117613],{},"[:]"," 表示修改整个数组。",[34,117616,117617],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[34,117620,1640],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,117623,117625],{"className":723,"code":117624,"language":305,"meta":32,"style":32},"self.data.qvel[:] = 0.0\n",[34,117626,117627],{"__ignoreMap":32},[167,117628,117629,117631,117633,117635],{"class":169,"line":170},[167,117630,32830],{"class":184},[167,117632,116227],{"class":512},[167,117634,523],{"class":731},[167,117636,106352],{"class":184},[19,117638,117639],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,117641,117643],{"className":723,"code":117642,"language":305,"meta":32,"style":32},"self.steps = 0\nreturn self._get_obs(), {}\n",[34,117644,117645,117655],{"__ignoreMap":32},[167,117646,117647,117649,117651,117653],{"class":169,"line":170},[167,117648,32830],{"class":184},[167,117650,115297],{"class":512},[167,117652,523],{"class":731},[167,117654,49333],{"class":184},[167,117656,117657,117659,117661],{"class":169,"line":191},[167,117658,19072],{"class":731},[167,117660,40874],{"class":184},[167,117662,116267],{"class":512},[19,117664,117665],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,117667,117668],{"className":723,"code":116941,"language":305,"meta":32,"style":32},[34,117669,117670],{"__ignoreMap":32},[167,117671,117672,117674,117676],{"class":169,"line":170},[167,117673,845],{"class":731},[167,117675,116278],{"class":173},[167,117677,116281],{"class":512},[19,117679,117680],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,117682,117684],{"className":723,"code":117683,"language":305,"meta":32,"style":32},"action = np.asarray(action, dtype=np.float32)\n",[34,117685,117686],{"__ignoreMap":32},[167,117687,117688,117690,117692,117694,117696,117698],{"class":169,"line":170},[167,117689,109033],{"class":512},[167,117691,523],{"class":731},[167,117693,116290],{"class":512},[167,117695,95486],{"class":7246},[167,117697,523],{"class":731},[167,117699,115387],{"class":512},[19,117701,117702,117703,423],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[34,117704,117468],{},[26,117706,117708],{"className":723,"code":117707,"language":305,"meta":32,"style":32},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[34,117709,117710],{"__ignoreMap":32},[167,117711,117712,117714,117716,117718,117720,117722,117724],{"class":169,"line":170},[167,117713,109033],{"class":512},[167,117715,523],{"class":731},[167,117717,109038],{"class":512},[167,117719,32830],{"class":184},[167,117721,116309],{"class":512},[167,117723,32830],{"class":184},[167,117725,116314],{"class":512},[19,117727,117728],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,117730,117732],{"className":723,"code":117731,"language":305,"meta":32,"style":32},"self.data.ctrl[:] = action\n",[34,117733,117734],{"__ignoreMap":32},[167,117735,117736,117738,117740,117742],{"class":169,"line":170},[167,117737,32830],{"class":184},[167,117739,116325],{"class":512},[167,117741,523],{"class":731},[167,117743,109061],{"class":512},[19,117745,117746],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,117748,117750],{"className":723,"code":117749,"language":305,"meta":32,"style":32},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[34,117751,117752,117768],{"__ignoreMap":32},[167,117753,117754,117756,117758,117760,117762,117764,117766],{"class":169,"line":170},[167,117755,1168],{"class":731},[167,117757,970],{"class":512},[167,117759,973],{"class":731},[167,117761,976],{"class":184},[167,117763,898],{"class":512},[167,117765,32830],{"class":184},[167,117767,116346],{"class":512},[167,117769,117770,117773,117775,117777,117779],{"class":169,"line":191},[167,117771,117772],{"class":512},"    mujoco.mj_step(",[167,117774,32830],{"class":184},[167,117776,116172],{"class":512},[167,117778,32830],{"class":184},[167,117780,116177],{"class":512},[19,117782,117783,117784,117787,117788,117790,117791,423],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[34,117785,117786],{},"frame_skip=5","，所以外部调用一次 ",[34,117789,115468],{},"，内部实际执行 5 次 ",[34,117792,644],{},[26,117794,117796],{"className":723,"code":117795,"language":305,"meta":32,"style":32},"self.steps += 1\n",[34,117797,117798],{"__ignoreMap":32},[167,117799,117800,117802,117804,117806],{"class":169,"line":170},[167,117801,32830],{"class":184},[167,117803,115297],{"class":512},[167,117805,11505],{"class":731},[167,117807,57688],{"class":184},[19,117809,117810],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,117812,117814],{"className":723,"code":117813,"language":305,"meta":32,"style":32},"obs = self._get_obs()\nreward = self._get_reward()\n",[34,117815,117816,117826],{"__ignoreMap":32},[167,117817,117818,117820,117822,117824],{"class":169,"line":170},[167,117819,112445],{"class":512},[167,117821,523],{"class":731},[167,117823,40874],{"class":184},[167,117825,116388],{"class":512},[167,117827,117828,117830,117832,117834],{"class":169,"line":191},[167,117829,112596],{"class":512},[167,117831,523],{"class":731},[167,117833,40874],{"class":184},[167,117835,116399],{"class":512},[19,117837,117838],{},"计算新的观测和奖励。",[26,117840,117842],{"className":723,"code":117841,"language":305,"meta":32,"style":32},"dist = float(np.linalg.norm(tip - target))\n",[34,117843,117844],{"__ignoreMap":32},[167,117845,117846,117848,117850,117852,117854,117856],{"class":169,"line":170},[167,117847,113187],{"class":512},[167,117849,523],{"class":731},[167,117851,111388],{"class":184},[167,117853,116442],{"class":512},[167,117855,2732],{"class":731},[167,117857,116447],{"class":512},[19,117859,117860],{},"计算末端到目标的距离，并转换成 Python float。",[26,117862,117863],{"className":723,"code":115268,"language":305,"meta":32,"style":32},[34,117864,117865,117877],{"__ignoreMap":32},[167,117866,117867,117869,117871,117873,117875],{"class":169,"line":170},[167,117868,115275],{"class":512},[167,117870,523],{"class":731},[167,117872,115280],{"class":512},[167,117874,513],{"class":731},[167,117876,115285],{"class":184},[167,117878,117879,117881,117883,117885,117887,117889,117891],{"class":169,"line":191},[167,117880,115290],{"class":512},[167,117882,523],{"class":731},[167,117884,40874],{"class":184},[167,117886,115297],{"class":512},[167,117888,3764],{"class":731},[167,117890,40874],{"class":184},[167,117892,115304],{"class":512},[19,117894,117895],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,117897,117899],{"className":723,"code":117898,"language":305,"meta":32,"style":32},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[34,117900,117901,117914],{"__ignoreMap":32},[167,117902,117903,117906,117908,117910,117912],{"class":169,"line":170},[167,117904,117905],{"class":512},"info ",[167,117907,523],{"class":731},[167,117909,6480],{"class":512},[167,117911,116493],{"class":177},[167,117913,116496],{"class":512},[167,117915,117916,117918],{"class":169,"line":191},[167,117917,19072],{"class":731},[167,117919,116503],{"class":512},[19,117921,117922,117925],{},[34,117923,117924],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,117927,117929],{"className":723,"code":117928,"language":305,"meta":32,"style":32},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[34,117930,117931,117940],{"__ignoreMap":32},[167,117932,117933,117936,117938],{"class":169,"line":170},[167,117934,117935],{"class":512},"env ",[167,117937,523],{"class":731},[167,117939,116533],{"class":512},[167,117941,117942,117944,117946,117948,117950,117952,117954],{"class":169,"line":191},[167,117943,114991],{"class":512},[167,117945,523],{"class":731},[167,117947,116543],{"class":512},[167,117949,116157],{"class":7246},[167,117951,523],{"class":731},[167,117953,1154],{"class":184},[167,117955,873],{"class":512},[19,117957,117958,117959,117962],{},"创建环境并重置。",[34,117960,117961],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,117964,117966],{"className":723,"code":117965,"language":305,"meta":32,"style":32},"action = env.action_space.sample()\n",[34,117967,117968],{"__ignoreMap":32},[167,117969,117970,117972,117974],{"class":169,"line":170},[167,117971,109033],{"class":512},[167,117973,523],{"class":731},[167,117975,116612],{"class":512},[19,117977,117978],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117980,1807],{"id":1806},[19,117982,107075],{},[26,117984,117987],{"className":117985,"code":117986,"language":31,"meta":32},[29],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[34,117988,117986],{"__ignoreMap":32},[19,117990,117991],{},"这个环境已经具备强化学习环境的基本结构。",[19,117993,117994],{},"主函数里使用随机动作：",[26,117996,117997],{"className":723,"code":117965,"language":305,"meta":32,"style":32},[34,117998,117999],{"__ignoreMap":32},[167,118000,118001,118003,118005],{"class":169,"line":170},[167,118002,109033],{"class":512},[167,118004,523],{"class":731},[167,118006,116612],{"class":512},[19,118008,118009],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118011,1839],{"id":1838},[40,118013,118014,118017,118023,118032,118041,118050,118056],{},[43,118015,118016],{},"运行程序。",[43,118018,118019,118020,423],{},"确认 ",[34,118021,118022],{},"obs.shape == (10,)",[43,118024,112772,118025,118028,118029,423],{},[34,118026,118027],{},"env.action_space","，应类似 ",[34,118030,118031],{},"Box(-1.0, 1.0, (2,), float32)",[43,118033,107176,118034,118037,118038,423],{},[34,118035,118036],{},"self.max_steps = 10","，确认环境会更快 ",[34,118039,118040],{},"truncated=True",[43,118042,1902,118043,1905,118046,118049],{},[34,118044,118045],{},"terminated = dist \u003C 0.05",[34,118047,118048],{},"dist \u003C 0.2","，观察是否更容易结束。",[43,118051,1902,118052,118055],{},[34,118053,118054],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[43,118057,118058,118059,118061,118062,118065],{},"在 ",[34,118060,117924],{}," 里加入 ",[34,118063,118064],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118067,1945],{"id":1944},[494,118069,118071],{"id":118070},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118073,118074,118075,118077],{},"Gymnasium 的 ",[34,118076,108725],{}," 返回 5 个值:",[26,118079,118081],{"className":723,"code":118080,"language":305,"meta":32,"style":32},"obs, reward, terminated, truncated, info\n",[34,118082,118083],{"__ignoreMap":32},[167,118084,118085],{"class":169,"line":170},[167,118086,118080],{"class":512},[19,118088,118089],{},"不是旧 Gym 的 4 个值。",[494,118091,118093,118096],{"id":118092},"datactrl-action-维度错误",[34,118094,118095],{},"data.ctrl[:] = action"," 维度错误",[19,118098,2015],{},[26,118100,118102],{"className":723,"code":118101,"language":305,"meta":32,"style":32},"print(self.model.nu)\nprint(action.shape)\n",[34,118103,118104,118115],{"__ignoreMap":32},[167,118105,118106,118108,118110,118112],{"class":169,"line":170},[167,118107,1606],{"class":184},[167,118109,898],{"class":512},[167,118111,32830],{"class":184},[167,118113,118114],{"class":512},".model.nu)\n",[167,118116,118117,118119],{"class":169,"line":191},[167,118118,1606],{"class":184},[167,118120,118121],{"class":512},"(action.shape)\n",[19,118123,118124],{},"两者必须匹配。",[494,118126,118128],{"id":118127},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118130,1954],{},[26,118132,118134],{"className":723,"code":118133,"language":305,"meta":32,"style":32},"mujoco.mj_forward(self.model, self.data)\n",[34,118135,118136],{"__ignoreMap":32},[167,118137,118138,118141,118143,118145,118147],{"class":169,"line":170},[167,118139,118140],{"class":512},"mujoco.mj_forward(",[167,118142,32830],{"class":184},[167,118144,116172],{"class":512},[167,118146,32830],{"class":184},[167,118148,116177],{"class":512},[494,118150,118152,118154],{"id":118151},"observation_space-维度和-obs-不一致",[34,118153,115191],{}," 维度和 obs 不一致",[19,118156,2067],{},[26,118158,118160],{"className":723,"code":118159,"language":305,"meta":32,"style":32},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[34,118161,118162,118172,118179],{"__ignoreMap":32},[167,118163,118164,118166,118168,118170],{"class":169,"line":170},[167,118165,112445],{"class":512},[167,118167,523],{"class":731},[167,118169,40874],{"class":184},[167,118171,116388],{"class":512},[167,118173,118174,118176],{"class":169,"line":191},[167,118175,1606],{"class":184},[167,118177,118178],{"class":512},"(obs.shape)\n",[167,118180,118181,118183,118185,118187],{"class":169,"line":205},[167,118182,1606],{"class":184},[167,118184,898],{"class":512},[167,118186,32830],{"class":184},[167,118188,118189],{"class":512},".observation_space.shape)\n",[19,118191,118192],{},"两者必须一致。本章观测是：",[26,118194,118197],{"className":118195,"code":118196,"language":31,"meta":32},[29],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[34,118198,118196],{"__ignoreMap":32},[494,118200,118202],{"id":118201},"action-超过范围","action 超过范围",[19,118204,118205],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,118207,118208],{"className":723,"code":117707,"language":305,"meta":32,"style":32},[34,118209,118210],{"__ignoreMap":32},[167,118211,118212,118214,118216,118218,118220,118222,118224],{"class":169,"line":170},[167,118213,109033],{"class":512},[167,118215,523],{"class":731},[167,118217,109038],{"class":512},[167,118219,32830],{"class":184},[167,118221,116309],{"class":512},[167,118223,32830],{"class":184},[167,118225,116314],{"class":512},[19,118227,118228,118229,423],{},"这能避免无效动作直接写入 ",[34,118230,489],{},[494,118232,118234],{"id":118233},"忘记返回-info","忘记返回 info",[19,118236,118074,118237,429,118239,118241],{},[34,118238,72044],{},[34,118240,108725],{}," 都会返回 info：",[26,118243,118244],{"className":723,"code":114984,"language":305,"meta":32,"style":32},[34,118245,118246,118254],{"__ignoreMap":32},[167,118247,118248,118250,118252],{"class":169,"line":170},[167,118249,114991],{"class":512},[167,118251,523],{"class":731},[167,118253,114996],{"class":512},[167,118255,118256,118258,118260],{"class":169,"line":191},[167,118257,115001],{"class":512},[167,118259,523],{"class":731},[167,118261,115006],{"class":512},[19,118263,118264,118265,423],{},"即使暂时没有额外信息，也返回 ",[34,118266,34462],{},[14,118268,118270],{"id":118269},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118272,118273],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[40,118275,118276,118279,118282,118285,118288,118291],{},[43,118277,118278],{},"更稳定的 reward。",[43,118280,118281],{},"合理的 episode 长度。",[43,118283,118284],{},"可重复的随机目标采样。",[43,118286,118287],{},"render 接口。",[43,118289,118290],{},"环境注册代码。",[43,118292,118293],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118295,118296],{},"如果只是自己写训练循环，最小形式是：",[26,118298,118300],{"className":723,"code":118299,"language":305,"meta":32,"style":32},"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",[34,118301,118302,118310,118326,118330,118346,118355,118364,118374],{"__ignoreMap":32},[167,118303,118304,118306,118308],{"class":169,"line":170},[167,118305,117935],{"class":512},[167,118307,523],{"class":731},[167,118309,116533],{"class":512},[167,118311,118312,118314,118316,118318,118320,118322,118324],{"class":169,"line":191},[167,118313,114991],{"class":512},[167,118315,523],{"class":731},[167,118317,116543],{"class":512},[167,118319,116157],{"class":7246},[167,118321,523],{"class":731},[167,118323,1154],{"class":184},[167,118325,873],{"class":512},[167,118327,118328],{"class":169,"line":205},[167,118329,741],{"emptyLinePlaceholder":740},[167,118331,118332,118334,118336,118338,118340,118342,118344],{"class":169,"line":219},[167,118333,1168],{"class":731},[167,118335,970],{"class":512},[167,118337,973],{"class":731},[167,118339,976],{"class":184},[167,118341,898],{"class":512},[167,118343,8440],{"class":184},[167,118345,984],{"class":512},[167,118347,118348,118351,118353],{"class":169,"line":230},[167,118349,118350],{"class":512},"    action ",[167,118352,523],{"class":731},[167,118354,116612],{"class":512},[167,118356,118357,118360,118362],{"class":169,"line":241},[167,118358,118359],{"class":512},"    obs, reward, terminated, truncated, info ",[167,118361,523],{"class":731},[167,118363,115006],{"class":512},[167,118365,118366,118368,118370,118372],{"class":169,"line":261},[167,118367,5136],{"class":731},[167,118369,116678],{"class":512},[167,118371,116681],{"class":731},[167,118373,116684],{"class":512},[167,118375,118376,118379,118381],{"class":169,"line":773},[167,118377,118378],{"class":512},"        obs, info ",[167,118380,523],{"class":731},[167,118382,114996],{"class":512},[14,118384,118386],{"id":118385},"_9本章小结","9.本章小结",[19,118388,118389],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,118391,118394],{"className":118392,"code":118393,"language":31,"meta":32},[29],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[34,118395,118393],{"__ignoreMap":32},[19,118397,118398],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2113,118400,118401],{},"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":32,"searchDepth":191,"depth":191,"links":118403},[118404,118405,118406,118413,118417,118418,118419,118429,118430],{"id":16,"depth":191,"text":17},{"id":154,"depth":191,"text":155},{"id":456,"depth":191,"text":457,"children":118407},[118408,118410,118412],{"id":115215,"depth":205,"text":118409},"terminated 和 truncated 的区别",{"id":115318,"depth":205,"text":118411},"observation_space 和 action_space",{"id":115445,"depth":205,"text":115446},{"id":682,"depth":191,"text":683,"children":118414},[118415,118416],{"id":1055,"depth":205,"text":1055},{"id":1194,"depth":205,"text":1194},{"id":1806,"depth":191,"text":1807},{"id":1838,"depth":191,"text":1839},{"id":1944,"depth":191,"text":1945,"children":118420},[118421,118422,118424,118425,118427,118428],{"id":118070,"depth":205,"text":118071},{"id":118092,"depth":205,"text":118423},"data.ctrl[:] = action 维度错误",{"id":118127,"depth":205,"text":118128},{"id":118151,"depth":205,"text":118426},"observation_space 维度和 obs 不一致",{"id":118201,"depth":205,"text":118202},{"id":118233,"depth":205,"text":118234},{"id":118269,"depth":191,"text":118270},{"id":118385,"depth":191,"text":118386},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114968,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118437,"title":118438,"body":118439,"description":118862,"extension":2140,"meta":118863,"navigation":740,"path":118864,"seo":118865,"stem":118866,"__hash__":118867},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118440,"toc":118852},[118441,118445,118448,118451,118471,118477,118483,118493,118496,118499,118519,118522,118526,118529,118535,118538,118552,118555,118558,118632,118635,118641,118644,118667,118670,118720,118723,118729,118732,118735,118738,118757,118760,118766,118769,118772,118775,118795,118798,118801,118804,118849],[10,118442,118444],{"id":118443},"mujoco-学习","MuJoCo 学习",[19,118446,118447],{},"初版",[19,118449,118450],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[40,118452,118453,118456,118459,118468],{},[43,118454,118455],{},"MuJoCo 模型文件在描述什么。",[43,118457,118458],{},"Python 代码怎样读取和推进仿真。",[43,118460,118461,480,118463,480,118465,118467],{},[34,118462,105621],{},[34,118464,105951],{},[34,118466,105954],{}," 这些数组为什么重要。",[43,118469,118470],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118472,118473,118474,118476],{},"默认环境为 Fedora 44、Python >= 3.10、",[34,118475,438],{}," 官方 Python bindings。",[19,118478,118479,118480,118482],{},"注意：本文禁止使用 ",[34,118481,422],{},"。所有示例均使用：",[26,118484,118485],{"className":723,"code":1061,"language":305,"meta":32,"style":32},[34,118486,118487],{"__ignoreMap":32},[167,118488,118489,118491],{"class":169,"line":170},[167,118490,732],{"class":731},[167,118492,735],{"class":512},[14,118494,118495],{"id":118495},"适合谁阅读",[19,118497,118498],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[40,118500,118501,118504,118507,118510],{},[43,118502,118503],{},"没学过 MuJoCo，只会一点 Python。",[43,118505,118506],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[43,118508,118509],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[43,118511,118512,118513,118515,118516,118518],{},"以前接触过 ",[34,118514,422],{},"，现在想迁移到官方 ",[34,118517,432],{}," Python bindings。",[19,118520,118521],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118523,118525],{"id":118524},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118527,118528],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,118530,118533],{"className":118531,"code":118532,"language":31,"meta":32},[29],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[34,118534,118532],{"__ignoreMap":32},[19,118536,118537],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[40,118539,118540,118543,118546,118549],{},[43,118541,118542],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[43,118544,118545],{},"快速测试控制算法，不必一开始就上真实机器人。",[43,118547,118548],{},"生成强化学习环境。",[43,118550,118551],{},"采集状态、动作、图像、奖励等训练数据。",[14,118553,118554],{"id":118554},"学习前的心智模型",[19,118556,118557],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[68,118559,118560,118572],{},[71,118561,118562],{},[74,118563,118564,118567,118570],{},[77,118565,118566],{"align":79},"部分",[77,118568,118569],{"align":79},"负责什么",[77,118571,23213],{"align":79},[85,118573,118574,118585,118597,118609,118621],{},[74,118575,118576,118579,118582],{},[90,118577,118578],{"align":79},"MJCF XML",[90,118580,118581],{"align":79},"定义世界和机器人结构",[90,118583,118584],{"align":79},"地面、盒子、关节、电机、摄像头",[74,118586,118587,118591,118594],{},[90,118588,118589],{"align":79},[34,118590,94],{},[90,118592,118593],{"align":79},"编译后的静态模型",[90,118595,118596],{"align":79},"有几个关节、有几个电机、时间步长是多少",[74,118598,118599,118603,118606],{},[90,118600,118601],{"align":79},[34,118602,104],{},[90,118604,118605],{"align":79},"运行中的动态状态",[90,118607,118608],{"align":79},"当前时间、位置、速度、电机输入",[74,118610,118611,118615,118618],{},[90,118612,118613],{"align":79},[34,118614,644],{},[90,118616,118617],{"align":79},"推进一步物理仿真",[90,118619,118620],{"align":79},"根据重力、力、碰撞更新状态",[74,118622,118623,118626,118629],{},[90,118624,118625],{"align":79},"Viewer \u002F Renderer",[90,118627,118628],{"align":79},"把仿真显示出来",[90,118630,118631],{"align":79},"打开窗口或保存图片",[19,118633,118634],{},"一句话总结：",[26,118636,118639],{"className":118637,"code":118638,"language":31,"meta":32},[29],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[34,118640,118638],{"__ignoreMap":32},[19,118642,118643],{},"参考来源：",[3205,118645,118646,118653,118660],{},[43,118647,118648,118649],{},"MuJoCo Python 官方文档：",[2439,118650,118651],{"href":118651,"rel":118652},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25887],[43,118654,118655,118656],{},"MuJoCo XML Reference：",[2439,118657,118658],{"href":118658,"rel":118659},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25887],[43,118661,118662,118663],{},"MuJoCo Overview：",[2439,118664,118665],{"href":118665,"rel":118666},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25887],[14,118668,118669],{"id":118669},"章节目录",[40,118671,118672,118678,118684,118690,118696,118702,118708,118714],{},[43,118673,118674],{},[2439,118675,118677],{"href":118676},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[43,118679,118680],{},[2439,118681,118683],{"href":118682},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[43,118685,118686],{},[2439,118687,118689],{"href":118688},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[43,118691,118692],{},[2439,118693,118695],{"href":118694},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[43,118697,118698],{},[2439,118699,118701],{"href":118700},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[43,118703,118704],{},[2439,118705,118707],{"href":118706},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[43,118709,118710],{},[2439,118711,118713],{"href":118712},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[43,118715,118716],{},[2439,118717,118719],{"href":118718},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118721,118722],{"id":118722},"推荐学习路线",[26,118724,118727],{"className":118725,"code":118726,"language":31,"meta":32},[29],"环境安装\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",[34,118728,118726],{"__ignoreMap":32},[19,118730,118731],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118733,118734],{"id":118734},"建议的目录结构",[19,118736,118737],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,118739,118741],{"className":161,"code":118740,"language":163,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[34,118742,118743,118751],{"__ignoreMap":32},[167,118744,118745,118747,118749],{"class":169,"line":170},[167,118746,696],{"class":173},[167,118748,699],{"class":184},[167,118750,702],{"class":177},[167,118752,118753,118755],{"class":169,"line":191},[167,118754,707],{"class":184},[167,118756,702],{"class":177},[19,118758,118759],{},"每一章的代码都单独保存：",[26,118761,118764],{"className":118762,"code":118763,"language":31,"meta":32},[29],"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",[34,118765,118763],{"__ignoreMap":32},[19,118767,118768],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118770,118771],{"id":118771},"学习方法",[19,118773,118774],{},"每章建议按这个顺序操作：",[40,118776,118777,118780,118783,118786,118789,118792],{},[43,118778,118779],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[43,118781,118782],{},"复制最小可运行代码，保存成指定文件。",[43,118784,118785],{},"运行代码，确认没有报错。",[43,118787,118788],{},"对照“运行结果说明”理解输出。",[43,118790,118791],{},"做“验证步骤”，主动改一两个参数。",[43,118793,118794],{},"遇到报错先看“常见错误与解决方案”。",[19,118796,118797],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118799,118800],{"id":118800},"全局排错顺序",[19,118802,118803],{},"遇到问题时，按下面顺序查：",[40,118805,118806,118812,118818,118823,118826,118829,118836,118846],{},[43,118807,118808,118809],{},"Python 环境是否激活：",[34,118810,118811],{},"which python",[43,118813,118814,118815],{},"MuJoCo 是否能导入：",[34,118816,118817],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[43,118819,118820,118821],{},"是否误装了 ",[34,118822,422],{},[43,118824,118825],{},"XML 标签是否闭合、属性是否拼写正确",[43,118827,118828],{},"actuator 引用的 joint 名字是否存在",[43,118830,118831,118833,118834],{},[34,118832,489],{}," 的长度是否等于 ",[34,118835,1648],{},[43,118837,107176,118838,449,118840,118842,118843],{},[34,118839,105621],{},[34,118841,105951],{}," 后是否调用了 ",[34,118844,118845],{},"mujoco.mj_forward",[43,118847,118848],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2113,118850,118851],{},"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":32,"searchDepth":191,"depth":191,"links":118853},[118854,118855,118856,118857,118858,118859,118860,118861],{"id":118495,"depth":191,"text":118495},{"id":118524,"depth":191,"text":118525},{"id":118554,"depth":191,"text":118554},{"id":118669,"depth":191,"text":118669},{"id":118722,"depth":191,"text":118722},{"id":118734,"depth":191,"text":118734},{"id":118771,"depth":191,"text":118771},{"id":118800,"depth":191,"text":118800},"仿真搭建。",{"category":25405},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118438,"description":118862},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118869,"title":118870,"body":118871,"description":25403,"extension":2140,"meta":119326,"navigation":740,"path":119327,"seo":119328,"stem":119329,"__hash__":119330},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118872,"toc":119324},[118873,118876,118879,118885,119321],[10,118874,118870],{"id":118875},"_1-最常用的基本操作更新",[19,118877,118878],{},"装linux系统教程：",[19,118880,118881],{},[2439,118882,118883],{"href":118883,"rel":118884},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25887],[26,118886,118890],{"className":118887,"code":118888,"language":118889,"meta":32,"style":32},"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",[34,118891,118892,118897,118902,118911,118916,118925,118930,118950,118955,118966,118971,118980,118985,119013,119018,119037,119042,119061,119065,119070,119086,119090,119095,119125,119129,119134,119150,119154,119159,119174,119178,119183,119199,119203,119208,119220,119232,119236,119241,119258,119262,119267,119285,119289,119294,119303,119307,119312],{"__ignoreMap":32},[167,118893,118894],{"class":169,"line":170},[167,118895,118896],{"class":2268},"#更新相关的知识\n",[167,118898,118899],{"class":169,"line":191},[167,118900,118901],{"class":2268},"# 更新软件包列表（从服务器获取最新软件信息）\n",[167,118903,118904,118906,118909],{"class":169,"line":205},[167,118905,174],{"class":173},[167,118907,118908],{"class":177}," apt",[167,118910,28261],{"class":177},[167,118912,118913],{"class":169,"line":219},[167,118914,118915],{"class":2268},"# 升级所有可更新的软件包（不删除旧包）\n",[167,118917,118918,118920,118922],{"class":169,"line":230},[167,118919,174],{"class":173},[167,118921,118908],{"class":177},[167,118923,118924],{"class":177}," upgrade\n",[167,118926,118927],{"class":169,"line":241},[167,118928,118929],{"class":2268},"#更新和升级软件包\n",[167,118931,118932,118934,118936,118939,118941,118943,118945,118948],{"class":169,"line":261},[167,118933,174],{"class":173},[167,118935,118908],{"class":177},[167,118937,118938],{"class":177}," update",[167,118940,28209],{"class":512},[167,118942,174],{"class":173},[167,118944,118908],{"class":177},[167,118946,118947],{"class":177}," upgrade",[167,118949,391],{"class":184},[167,118951,118952],{"class":169,"line":773},[167,118953,118954],{"class":2268},"#列出可更新的软件包及版本信息\n",[167,118956,118957,118960,118963],{"class":169,"line":779},[167,118958,118959],{"class":173},"apt",[167,118961,118962],{"class":177}," list",[167,118964,118965],{"class":184}," --upgradable\n",[167,118967,118968],{"class":169,"line":785},[167,118969,118970],{"class":2268},"#彻底升级（处理依赖关系，可能删除旧包）\n",[167,118972,118973,118975,118977],{"class":169,"line":790},[167,118974,174],{"class":173},[167,118976,118908],{"class":177},[167,118978,118979],{"class":177}," full-upgrade\n",[167,118981,118982],{"class":169,"line":796},[167,118983,118984],{"class":2268},"#设置指定版本\n",[167,118986,118987,118989,118991,118993,118995,118998,119000,119002,119004,119006,119009,119011],{"class":169,"line":802},[167,118988,174],{"class":173},[167,118990,118908],{"class":177},[167,118992,181],{"class":177},[167,118994,30918],{"class":731},[167,118996,118997],{"class":177},"package_nam",[167,118999,2284],{"class":512},[167,119001,3159],{"class":731},[167,119003,523],{"class":177},[167,119005,513],{"class":731},[167,119007,119008],{"class":177},"version_numbe",[167,119010,2870],{"class":512},[167,119012,537],{"class":731},[167,119014,119015],{"class":169,"line":808},[167,119016,119017],{"class":2268},"#只安装软件包不升级\n",[167,119019,119020,119022,119024,119026,119028,119030,119032,119034],{"class":169,"line":814},[167,119021,174],{"class":173},[167,119023,118908],{"class":177},[167,119025,181],{"class":177},[167,119027,30918],{"class":731},[167,119029,118997],{"class":177},[167,119031,2284],{"class":512},[167,119033,3159],{"class":731},[167,119035,119036],{"class":184}," --no-upgrade\n",[167,119038,119039],{"class":169,"line":820},[167,119040,119041],{"class":2268},"#只升级，不存在就不安装\n",[167,119043,119044,119046,119048,119050,119052,119054,119056,119058],{"class":169,"line":826},[167,119045,174],{"class":173},[167,119047,118908],{"class":177},[167,119049,181],{"class":177},[167,119051,30918],{"class":731},[167,119053,118997],{"class":177},[167,119055,2284],{"class":512},[167,119057,3159],{"class":731},[167,119059,119060],{"class":184}," --only-upgrade\n",[167,119062,119063],{"class":169,"line":832},[167,119064,741],{"emptyLinePlaceholder":740},[167,119066,119067],{"class":169,"line":837},[167,119068,119069],{"class":2268},"#安装指定的软件命令\n",[167,119071,119072,119074,119076,119078,119080,119082,119084],{"class":169,"line":842},[167,119073,174],{"class":173},[167,119075,118908],{"class":177},[167,119077,181],{"class":177},[167,119079,30918],{"class":731},[167,119081,118997],{"class":177},[167,119083,2284],{"class":512},[167,119085,537],{"class":731},[167,119087,119088],{"class":169,"line":860},[167,119089,741],{"emptyLinePlaceholder":740},[167,119091,119092],{"class":169,"line":876},[167,119093,119094],{"class":2268},"#安装多个软件包\n",[167,119096,119097,119099,119101,119103,119105,119108,119111,119113,119115,119118,119120,119122],{"class":169,"line":887},[167,119098,174],{"class":173},[167,119100,118908],{"class":177},[167,119102,181],{"class":177},[167,119104,30918],{"class":731},[167,119106,119107],{"class":177},"package_",[167,119109,119110],{"class":731},"1>",[167,119112,30918],{"class":731},[167,119114,119107],{"class":177},[167,119116,119117],{"class":731},"2>",[167,119119,30918],{"class":731},[167,119121,119107],{"class":177},[167,119123,119124],{"class":731},"3>\n",[167,119126,119127],{"class":169,"line":892},[167,119128,741],{"emptyLinePlaceholder":740},[167,119130,119131],{"class":169,"line":907},[167,119132,119133],{"class":2268},"#更新指定的软件命令\n",[167,119135,119136,119138,119140,119142,119144,119146,119148],{"class":169,"line":920},[167,119137,174],{"class":173},[167,119139,118908],{"class":177},[167,119141,118938],{"class":177},[167,119143,30918],{"class":731},[167,119145,118997],{"class":177},[167,119147,2284],{"class":512},[167,119149,537],{"class":731},[167,119151,119152],{"class":169,"line":933},[167,119153,741],{"emptyLinePlaceholder":740},[167,119155,119156],{"class":169,"line":946},[167,119157,119158],{"class":2268},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[167,119160,119161,119163,119166,119168,119170,119172],{"class":169,"line":959},[167,119162,118959],{"class":173},[167,119164,119165],{"class":177}," show",[167,119167,30918],{"class":731},[167,119169,118997],{"class":177},[167,119171,2284],{"class":512},[167,119173,537],{"class":731},[167,119175,119176],{"class":169,"line":964},[167,119177,741],{"emptyLinePlaceholder":740},[167,119179,119180],{"class":169,"line":987},[167,119181,119182],{"class":2268},"#删除软件包命令\n",[167,119184,119185,119187,119189,119191,119193,119195,119197],{"class":169,"line":993},[167,119186,174],{"class":173},[167,119188,118908],{"class":177},[167,119190,28098],{"class":177},[167,119192,30918],{"class":731},[167,119194,118997],{"class":177},[167,119196,2284],{"class":512},[167,119198,537],{"class":731},[167,119200,119201],{"class":169,"line":998},[167,119202,741],{"emptyLinePlaceholder":740},[167,119204,119205],{"class":169,"line":1010},[167,119206,119207],{"class":2268},"# 清理旧版本和缓存（释放磁盘空间）\n",[167,119209,119210,119212,119214,119217],{"class":169,"line":1022},[167,119211,174],{"class":173},[167,119213,118908],{"class":177},[167,119215,119216],{"class":177}," autoremove",[167,119218,119219],{"class":2268},"  # 删除不再需要的依赖和库文件\n",[167,119221,119222,119224,119226,119229],{"class":169,"line":1027},[167,119223,174],{"class":173},[167,119225,118908],{"class":177},[167,119227,119228],{"class":177}," clean",[167,119230,119231],{"class":2268},"       # 清理下载的缓存包\n",[167,119233,119234],{"class":169,"line":1032},[167,119235,741],{"emptyLinePlaceholder":740},[167,119237,119238],{"class":169,"line":1049},[167,119239,119240],{"class":2268},"#移除软件包及配置文件\n",[167,119242,119243,119245,119247,119250,119252,119254,119256],{"class":169,"line":10005},[167,119244,174],{"class":173},[167,119246,118908],{"class":177},[167,119248,119249],{"class":177}," purge",[167,119251,30918],{"class":731},[167,119253,118997],{"class":177},[167,119255,2284],{"class":512},[167,119257,537],{"class":731},[167,119259,119260],{"class":169,"line":10011},[167,119261,741],{"emptyLinePlaceholder":740},[167,119263,119264],{"class":169,"line":10038},[167,119265,119266],{"class":2268},"#查找软件包命令\n",[167,119268,119269,119271,119273,119276,119278,119281,119283],{"class":169,"line":10043},[167,119270,174],{"class":173},[167,119272,118908],{"class":177},[167,119274,119275],{"class":177}," search",[167,119277,30918],{"class":731},[167,119279,119280],{"class":177},"keywor",[167,119282,2514],{"class":512},[167,119284,537],{"class":731},[167,119286,119287],{"class":169,"line":10049},[167,119288,741],{"emptyLinePlaceholder":740},[167,119290,119291],{"class":169,"line":10061},[167,119292,119293],{"class":2268},"#列出所有已安装的包\n",[167,119295,119296,119298,119300],{"class":169,"line":10073},[167,119297,118959],{"class":173},[167,119299,118962],{"class":177},[167,119301,119302],{"class":184}," --installed\n",[167,119304,119305],{"class":169,"line":10085},[167,119306,741],{"emptyLinePlaceholder":740},[167,119308,119309],{"class":169,"line":11744},[167,119310,119311],{"class":2268},"#列出所有已安装的包的版本信息\n",[167,119313,119314,119316,119318],{"class":169,"line":11769},[167,119315,118959],{"class":173},[167,119317,118962],{"class":177},[167,119319,119320],{"class":184}," --all-versions\n",[2113,119322,119323],{},"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":32,"searchDepth":191,"depth":191,"links":119325},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118870,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119332,"title":119333,"body":119334,"description":25403,"extension":2140,"meta":120075,"navigation":740,"path":120076,"seo":120077,"stem":120078,"__hash__":120079},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119335,"toc":120062},[119336,119339,119343,119346,119352,119356,119360,119366,119371,119376,119381,119386,119391,119394,119397,119400,119403,119407,119410,119415,119418,119423,119426,119431,119438,119441,119444,119447,119450,119453,119464,119468,119472,119477,119482,119486,119491,119495,119500,119504,119508,119513,119516,119561,119566,119570,119574,119579,119585,119590,119600,119605,119615,119620,119625,119652,119656,119659,119664,119667,119692,119696,119701,119704,119709,119714,119734,119739,119742,119757,119761,119814,119817,119822,119826,119829,119844,119847,119850,119855,119859,119863,119866,119870,119874,119877,119882,119887,119891,119898,119906,119909,119916,119921,119926,119929,119934,119941,119946,119953,119957,119959,119964,119968,119971,119974,119979,119982,119987,119990,119995,120000,120005,120009,120014,120018,120059],[10,119337,119333],{"id":119338},"_2-linux装机教程",[14,119340,119342],{"id":119341},"_21-实体机","2.1 实体机",[19,119344,119345],{},"使用清华源：（Ubuntu24.04）",[19,119347,119348],{},[2439,119349,119350],{"href":119350,"rel":119351},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25887],[14,119353,119355],{"id":119354},"_22-普通虚拟机","2.2 普通虚拟机",[494,119357,119359],{"id":119358},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119361,119362],{},[2439,119363,119364],{"href":119364,"rel":119365},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25887],[19,119367,119368],{},[3528,119369],{"alt":32,"src":119370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119372,119373],{},[3528,119374],{"alt":32,"src":119375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119377,119378],{},[3528,119379],{"alt":32,"src":119380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119382,119383],{},[3528,119384],{"alt":32,"src":119385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119387,119388],{},[3528,119389],{"alt":32,"src":119390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119392,119393],{},"内存4G（4096MB）；",[19,119395,119396],{},"CPU给4个核；",[19,119398,119399],{},"硬盘动态分配60G；",[19,119401,119402],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[494,119404,119406],{"id":119405},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119408,119409],{},"按照1.1的步骤下载Ubuntu",[19,119411,119412],{},[3528,119413],{"alt":32,"src":119414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119416,119417],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119419,119420],{},[3528,119421],{"alt":32,"src":119422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119424,119425],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119427,119428],{},[3528,119429],{"alt":32,"src":119430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119432,119433,119434,119437],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2354,119435,119436],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119439,119440],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119442,119443],{},"将改动写入磁盘吗 继续",[19,119445,119446],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119448,119449],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119451,119452],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119454,119455,119456,119459,119460,119463],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2354,119457,119458],{},"除了"," 选不发送系统信息与不升级之外， ",[2354,119461,119462],{},"其它"," 都跳过或前进）",[494,119465,119467],{"id":119466},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24024,119469,119471],{"id":119470},"_2231-全屏","2.2.3.1 全屏",[19,119473,119474],{},[3528,119475],{"alt":32,"src":119476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119478,119479],{},[3528,119480],{"alt":32,"src":119481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24024,119483,119485],{"id":119484},"_2232-文件交换","2.2.3.2 文件交换",[19,119487,119488],{},[3528,119489],{"alt":32,"src":119490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24024,119492,119494],{"id":119493},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119496,119497],{},[3528,119498],{"alt":32,"src":119499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119501,119503],{"id":119502},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[494,119505,119507],{"id":119506},"_231-简介与优缺点","2.3.1 简介与优缺点",[40,119509,119510],{},[43,119511,119512],{},"什么情况下推荐？",[19,119514,119515],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[40,119517,119518],{"start":191},[43,119519,119520,119521],{},"优缺点：",[40,119522,119523,119553],{},[43,119524,119525,119526],{},"优点：",[40,119527,119528,119531,119538,119541,119544,119547,119550],{},[43,119529,119530],{},"WSL2是最好的Linux发行版;(bushi)",[43,119532,119533,119534,119537],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2354,119535,119536],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[43,119539,119540],{},"非常方便调用USB设备，可以USB直通;",[43,119542,119543],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[43,119545,119546],{},"非常方便Win与WSL2互相传文件等协同操作;",[43,119548,119549],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[43,119551,119552],{},"非常方便使用Windows的VScode远程开发;",[43,119554,119555,119556],{},"缺点：",[40,119557,119558],{},[43,119559,119560],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119562,119563],{},[3528,119564],{"alt":32,"src":119565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[494,119567,119569],{"id":119568},"_232-安装教程","2.3.2 安装教程",[24024,119571,119573],{"id":119572},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[40,119575,119576],{},[43,119577,119578],{},"方法一(图形界面)",[19,119580,119581,119582,26640],{},"用Win+R输入",[34,119583,119584],{},"appwiz.cpl",[19,119586,119587],{},[3528,119588],{"alt":32,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119591,119592,119593,119596,119597,28490],{},"点击OK进入 ",[2354,119594,119595],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2354,119598,119599],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119601,119602],{},[3528,119603],{"alt":32,"src":119604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119606,119607,119608,429,119611,119614],{},"选择 ",[2354,119609,119610],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2354,119612,119613],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119616,119617],{},[3528,119618],{"alt":32,"src":119619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[40,119621,119622],{"start":191},[43,119623,119624],{},"方法二(命令行)",[26,119626,119630],{"className":119627,"code":119628,"language":119629,"meta":32,"style":32},"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",[34,119631,119632,119637,119642,119647],{"__ignoreMap":32},[167,119633,119634],{"class":169,"line":170},[167,119635,119636],{},"# 开启 Linux 子系统\n",[167,119638,119639],{"class":169,"line":191},[167,119640,119641],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[167,119643,119644],{"class":169,"line":205},[167,119645,119646],{},"# 开启虚拟机平台\n",[167,119648,119649],{"class":169,"line":219},[167,119650,119651],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24024,119653,119655],{"id":119654},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119657,119658],{},"用管理员权限打开powershell",[19,119660,119661],{},[3528,119662],{"alt":32,"src":119663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119665,119666],{},"升级WSL并设置默认版本为WSL2",[26,119668,119670],{"className":119627,"code":119669,"language":119629,"meta":32,"style":32},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[34,119671,119672,119677,119682,119687],{"__ignoreMap":32},[167,119673,119674],{"class":169,"line":170},[167,119675,119676],{},"# 更新 wsl\n",[167,119678,119679],{"class":169,"line":191},[167,119680,119681],{},"wsl --update\n",[167,119683,119684],{"class":169,"line":205},[167,119685,119686],{},"# 将 wsl 版本设置为 wsl2\n",[167,119688,119689],{"class":169,"line":219},[167,119690,119691],{},"wsl --set-default-version 2\n",[24024,119693,119695],{"id":119694},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[40,119697,119698],{},[43,119699,119700],{},"方式一(商店下载)",[19,119702,119703],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119705,119706],{},[3528,119707],{"alt":32,"src":119708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[40,119710,119711],{"start":191},[43,119712,119713],{},"方式二(命令行安装)",[26,119715,119717],{"className":119627,"code":119716,"language":119629,"meta":32,"style":32},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[34,119718,119719,119724,119729],{"__ignoreMap":32},[167,119720,119721],{"class":169,"line":170},[167,119722,119723],{},"# 列出可安装的 Linux 版本\n",[167,119725,119726],{"class":169,"line":191},[167,119727,119728],{},"#（需要科学手段）\n",[167,119730,119731],{"class":169,"line":205},[167,119732,119733],{},"wsl --list --online\n",[19,119735,119736],{},[3528,119737],{"alt":32,"src":119738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119740,119741],{},"选择对应发行版并安装",[26,119743,119745],{"className":119627,"code":119744,"language":119629,"meta":32,"style":32},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[34,119746,119747,119752],{"__ignoreMap":32},[167,119748,119749],{"class":169,"line":170},[167,119750,119751],{},"# Ubuntu安装完毕后需要重启系统\n",[167,119753,119754],{"class":169,"line":191},[167,119755,119756],{},"wsl --install -d Ubuntu-24.04\n",[24024,119758,119760],{"id":119759},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,119762,119764],{"className":119627,"code":119763,"language":119629,"meta":32,"style":32},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[34,119765,119766,119771,119776,119781,119786,119790,119794,119799,119804,119809],{"__ignoreMap":32},[167,119767,119768],{"class":169,"line":170},[167,119769,119770],{},"# 查看 wsl\n",[167,119772,119773],{"class":169,"line":191},[167,119774,119775],{},"wsl -l\n",[167,119777,119778],{"class":169,"line":205},[167,119779,119780],{},"# 查看 wsl 运行版本或模式\n",[167,119782,119783],{"class":169,"line":219},[167,119784,119785],{},"wsl -l -v\n",[167,119787,119788],{"class":169,"line":230},[167,119789,741],{"emptyLinePlaceholder":740},[167,119791,119792],{"class":169,"line":241},[167,119793,741],{"emptyLinePlaceholder":740},[167,119795,119796],{"class":169,"line":261},[167,119797,119798],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[167,119800,119801],{"class":169,"line":773},[167,119802,119803],{},"wsl --set-version \u003Cdistro> 2\n",[167,119805,119806],{"class":169,"line":779},[167,119807,119808],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[167,119810,119811],{"class":169,"line":785},[167,119812,119813],{},"wsl --unregister \u003Cdistro>\n",[19,119815,119816],{},"输出Version为2即正常",[19,119818,119819],{},[3528,119820],{"alt":32,"src":119821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24024,119823,119825],{"id":119824},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119827,119828],{},"直接在Powershell里输入wsl命令进入子系统",[26,119830,119832],{"className":119627,"code":119831,"language":119629,"meta":32,"style":32},"# 进入子系统\nwsl\n",[34,119833,119834,119839],{"__ignoreMap":32},[167,119835,119836],{"class":169,"line":170},[167,119837,119838],{},"# 进入子系统\n",[167,119840,119841],{"class":169,"line":191},[167,119842,119843],{},"wsl\n",[19,119845,119846],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119848,119849],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119851,119852],{},[3528,119853],{"alt":32,"src":119854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[494,119856,119858],{"id":119857},"_233-配置各种环境","2.3.3 配置各种环境",[24024,119860,119862],{"id":119861},"_2331-换源","2.3.3.1 换源",[19,119864,119865],{},"(同实体机LINUX，往下找教程)",[24024,119867,119869],{"id":119868},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24936,119871,119873],{"id":119872},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119875,119876],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119878,119879],{},[3528,119880],{"alt":32,"src":119881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119883,119884],{},[3528,119885],{"alt":32,"src":119886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24936,119888,119890],{"id":119889},"_23322-cuda","2.3.3.2.2 CUDA",[19,119892,119893,119894],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2439,119895,119896],{"href":119896,"rel":119897},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25887],[19,119899,119900,119903],{},[3528,119901],{"alt":32,"src":119902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3528,119904],{"alt":32,"src":119905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119907,119908],{},"在下方的网站，选择合适的版本。",[19,119910,119911,119912],{},"WSL2 专属 CUDA 指南：",[2439,119913,119914],{"href":119914,"rel":119915},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25887],[19,119917,119918],{},[2354,119919,119920],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119922,119923],{},[3528,119924],{"alt":32,"src":119925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119927,119928],{},"挨行敲一遍",[19,119930,119931],{},[3528,119932],{"alt":32,"src":119933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119935,119936,119937,119940],{},"敲完后，输入",[34,119938,119939],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119942,119943],{},[3528,119944],{"alt":32,"src":119945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119947,119948,119949,119952],{},"（请详看下方教程的",[2354,119950,119951],{},"安装CUDA的配置环境来看","如何配置环境）",[24936,119954,119956],{"id":119955},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119958,119865],{},[19,119960,119961],{},[3528,119962],{"alt":32,"src":119963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24024,119965,119967],{"id":119966},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119969,119970],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119972,119973],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119975,119976],{},[3528,119977],{"alt":32,"src":119978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119980,119981],{},"连接WSL2",[19,119983,119984],{},[3528,119985],{"alt":32,"src":119986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119988,119989],{},"远程开发成功。",[19,119991,119992],{},[3528,119993],{"alt":32,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119996,119997],{},[3528,119998],{"alt":32,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120001,120002],{},[3528,120003],{"alt":32,"src":120004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24024,120006,120008],{"id":120007},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120010,120011],{},[3528,120012],{"alt":32,"src":120013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24024,120015,120017],{"id":120016},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,120019,120021],{"className":118887,"code":120020,"language":118889,"meta":32,"style":32},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[34,120022,120023,120031,120039,120050,120054],{"__ignoreMap":32},[167,120024,120025,120027,120029],{"class":169,"line":170},[167,120026,174],{"class":173},[167,120028,118908],{"class":177},[167,120030,28261],{"class":177},[167,120032,120033,120035,120037],{"class":169,"line":191},[167,120034,174],{"class":173},[167,120036,118908],{"class":177},[167,120038,118924],{"class":177},[167,120040,120041,120043,120045,120047],{"class":169,"line":205},[167,120042,174],{"class":173},[167,120044,118908],{"class":177},[167,120046,181],{"class":177},[167,120048,120049],{"class":177}," mesa-utils\n",[167,120051,120052],{"class":169,"line":219},[167,120053,741],{"emptyLinePlaceholder":740},[167,120055,120056],{"class":169,"line":230},[167,120057,120058],{"class":2268},"#然后重启wsl2即可\n",[2113,120060,120061],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":191,"depth":191,"links":120063},[120064,120065,120070],{"id":119341,"depth":191,"text":119342},{"id":119354,"depth":191,"text":119355,"children":120066},[120067,120068,120069],{"id":119358,"depth":205,"text":119359},{"id":119405,"depth":205,"text":119406},{"id":119466,"depth":205,"text":119467},{"id":119502,"depth":191,"text":119503,"children":120071},[120072,120073,120074],{"id":119506,"depth":205,"text":119507},{"id":119568,"depth":205,"text":119569},{"id":119857,"depth":205,"text":119858},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119333,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120081,"title":120082,"body":120083,"description":25403,"extension":2140,"meta":123019,"navigation":740,"path":123020,"seo":123021,"stem":123022,"__hash__":123023},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120084,"toc":122991},[120085,120088,120092,120098,120102,120108,120112,120300,120303,120308,120312,120316,120319,120322,120328,120333,120336,120339,120344,120377,120382,120386,120463,120466,120471,120475,120478,120517,120520,120529,120547,120552,120559,120676,120681,120684,120711,120716,120720,120729,120779,120786,120790,120793,120807,120814,120848,120853,120857,120880,120883,120888,120892,120895,120898,120901,120943,120947,120950,120953,120994,120998,121002,121005,121010,121015,121018,121041,121044,121052,121057,121060,121065,121070,121073,121078,121082,121087,121110,121115,121177,121185,121190,121195,121198,121203,121206,121211,121216,121234,121239,121245,121250,121264,121268,121271,121274,121277,121320,121323,121328,121429,121432,121437,121441,121445,121482,121486,121490,121494,121540,121544,121589,121593,121600,121608,121663,121666,121743,121746,121769,121773,121776,121781,121786,121794,121797,121802,121807,121812,121815,121820,121829,121832,121837,121840,121911,121916,121919,121924,121927,121932,121935,121940,121943,121948,121953,121956,122031,122034,122047,122052,122055,122069,122072,122101,122106,122135,122138,122143,122147,122152,122161,122164,122169,122172,122177,122180,122183,122188,122191,122196,122201,122204,122209,122212,122337,122342,122372,122375,122380,122385,122402,122405,122448,122451,122478,122483,122496,122639,122643,122648,122662,122665,122716,122719,122749,122752,122768,122773,122787,122790,122857,122862,122871,122876,122879,122891,122896,122903,122927,122930,122935,122938,122957,122962,122969,122981,122988],[10,120086,120082],{"id":120087},"_3-安装必备配置",[14,120089,120091],{"id":120090},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,120093,120096],{"className":120094,"code":120095,"language":31},[29],"  打开下方网站（注意，该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",[34,120097,120095],{"__ignoreMap":32},[494,120099,120101],{"id":120100},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,120103,120106],{"className":120104,"code":120105,"language":31},[29],"  输入以下命令\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",[34,120107,120105],{"__ignoreMap":32},[494,120109,120111],{"id":120110},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,120113,120117],{"className":120114,"code":120115,"language":120116,"meta":32,"style":32},"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",[34,120118,120119,120127,120138,120150,120164,120168,120178,120183,120187,120191,120196,120200,120212,120216,120221,120225,120236,120240,120256,120260,120271,120275,120280,120284,120292],{"__ignoreMap":32},[167,120120,120121,120123,120125],{"class":169,"line":170},[167,120122,174],{"class":173},[167,120124,118908],{"class":177},[167,120126,28261],{"class":177},[167,120128,120129,120131,120133,120135],{"class":169,"line":191},[167,120130,174],{"class":173},[167,120132,118908],{"class":177},[167,120134,181],{"class":177},[167,120136,120137],{"class":177}," vim\n",[167,120139,120140,120142,120145,120147],{"class":169,"line":205},[167,120141,174],{"class":173},[167,120143,120144],{"class":177}," rm",[167,120146,27345],{"class":184},[167,120148,120149],{"class":177}," \u002Fetc\u002Fapt\u002Fsources.list\n",[167,120151,120152,120154,120156,120158,120161],{"class":169,"line":219},[167,120153,174],{"class":173},[167,120155,120144],{"class":177},[167,120157,27345],{"class":184},[167,120159,120160],{"class":177}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[167,120162,120163],{"class":184},"**\n",[167,120165,120166],{"class":169,"line":230},[167,120167,741],{"emptyLinePlaceholder":740},[167,120169,120170,120172,120175],{"class":169,"line":241},[167,120171,174],{"class":173},[167,120173,120174],{"class":177}," vim",[167,120176,120177],{"class":177}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[167,120179,120180],{"class":169,"line":261},[167,120181,120182],{"class":177},"```\n",[167,120184,120185],{"class":169,"line":773},[167,120186,741],{"emptyLinePlaceholder":740},[167,120188,120189],{"class":169,"line":779},[167,120190,741],{"emptyLinePlaceholder":740},[167,120192,120193],{"class":169,"line":785},[167,120194,120195],{"class":173},"选择好Ubuntu版本后，复制下方的内容。\n",[167,120197,120198],{"class":169,"line":790},[167,120199,741],{"emptyLinePlaceholder":740},[167,120201,120202,120204,120207,120210],{"class":169,"line":796},[167,120203,2427],{"class":731},[167,120205,120206],{"class":177},"[](",[167,120208,120209],{"class":173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[167,120211,873],{"class":177},[167,120213,120214],{"class":169,"line":802},[167,120215,741],{"emptyLinePlaceholder":740},[167,120217,120218],{"class":169,"line":808},[167,120219,120220],{"class":173},"粘贴进去\n",[167,120222,120223],{"class":169,"line":814},[167,120224,741],{"emptyLinePlaceholder":740},[167,120226,120227,120229,120231,120234],{"class":169,"line":820},[167,120228,2427],{"class":731},[167,120230,120206],{"class":177},[167,120232,120233],{"class":173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[167,120235,873],{"class":177},[167,120237,120238],{"class":169,"line":826},[167,120239,741],{"emptyLinePlaceholder":740},[167,120241,120242,120245,120248,120251,120253],{"class":169,"line":832},[167,120243,120244],{"class":173},"按一下ESC，然后英文冒号，输入",[167,120246,120247],{"class":177}," `",[167,120249,120250],{"class":173},":wq!",[167,120252,3171],{"class":177},[167,120254,120255],{"class":173},"然后回车\n",[167,120257,120258],{"class":169,"line":837},[167,120259,741],{"emptyLinePlaceholder":740},[167,120261,120262,120264,120266,120269],{"class":169,"line":842},[167,120263,2427],{"class":731},[167,120265,120206],{"class":177},[167,120267,120268],{"class":173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[167,120270,873],{"class":177},[167,120272,120273],{"class":169,"line":860},[167,120274,741],{"emptyLinePlaceholder":740},[167,120276,120277],{"class":169,"line":876},[167,120278,120279],{"class":173},"输入以下命令\n",[167,120281,120282],{"class":169,"line":887},[167,120283,741],{"emptyLinePlaceholder":740},[167,120285,120286,120289],{"class":169,"line":892},[167,120287,120288],{"class":177},"```",[167,120290,120291],{"class":173},"Bash\n",[167,120293,120294,120296,120298],{"class":169,"line":907},[167,120295,174],{"class":173},[167,120297,118908],{"class":177},[167,120299,28261],{"class":177},[19,120301,120302],{},"这里被替换成对应学校则成功",[19,120304,120305],{},[3528,120306],{"alt":32,"src":120307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120309,120311],{"id":120310},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[494,120313,120315],{"id":120314},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120317,120318],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120320,120321],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120323,120324],{},[2439,120325,120326],{"href":120326,"rel":120327},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25887],[19,120329,120330],{},[3528,120331],{"alt":32,"src":120332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120334,120335],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120337,120338],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120340,120341],{},[3528,120342],{"alt":32,"src":120343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,120345,120347],{"className":118887,"code":120346,"language":118889,"meta":32,"style":32},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[34,120348,120349,120354,120361,120366],{"__ignoreMap":32},[167,120350,120351],{"class":169,"line":170},[167,120352,120353],{"class":2268},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[167,120355,120356,120358],{"class":169,"line":191},[167,120357,707],{"class":184},[167,120359,120360],{"class":177}," ~\u002FDownloads\n",[167,120362,120363],{"class":169,"line":205},[167,120364,120365],{"class":2268},"#下方chrome安装包名不一定是这个，根据名字来看\n",[167,120367,120368,120370,120372,120374],{"class":169,"line":219},[167,120369,174],{"class":173},[167,120371,118908],{"class":177},[167,120373,181],{"class":177},[167,120375,120376],{"class":177}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120378,120379],{},[3528,120380],{"alt":32,"src":120381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[494,120383,120385],{"id":120384},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,120387,120389],{"className":118887,"code":120388,"language":118889,"meta":32,"style":32},"# 老版\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",[34,120390,120391,120396,120404,120415,120420,120424,120429,120439,120447,120458],{"__ignoreMap":32},[167,120392,120393],{"class":169,"line":170},[167,120394,120395],{"class":2268},"# 老版\n",[167,120397,120398,120400,120402],{"class":169,"line":191},[167,120399,174],{"class":173},[167,120401,118908],{"class":177},[167,120403,28261],{"class":177},[167,120405,120406,120408,120410,120412],{"class":169,"line":205},[167,120407,174],{"class":173},[167,120409,118908],{"class":177},[167,120411,181],{"class":177},[167,120413,120414],{"class":177}," neofetch\n",[167,120416,120417],{"class":169,"line":219},[167,120418,120419],{"class":173},"neofetch\n",[167,120421,120422],{"class":169,"line":230},[167,120423,741],{"emptyLinePlaceholder":740},[167,120425,120426],{"class":169,"line":241},[167,120427,120428],{"class":2268},"# 新版\n",[167,120430,120431,120433,120436],{"class":169,"line":261},[167,120432,174],{"class":173},[167,120434,120435],{"class":177}," add-apt-repository",[167,120437,120438],{"class":177}," ppa:zhangsongcui3371\u002Ffastfetch\n",[167,120440,120441,120443,120445],{"class":169,"line":773},[167,120442,174],{"class":173},[167,120444,118908],{"class":177},[167,120446,28261],{"class":177},[167,120448,120449,120451,120453,120455],{"class":169,"line":779},[167,120450,174],{"class":173},[167,120452,118908],{"class":177},[167,120454,181],{"class":177},[167,120456,120457],{"class":177}," fastfetch\n",[167,120459,120460],{"class":169,"line":785},[167,120461,120462],{"class":173},"fastfetch\n",[19,120464,120465],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120467,120468],{},[3528,120469],{"alt":32,"src":120470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[494,120472,120474],{"id":120473},"_323-移除snap应用","3.2.3 移除snap应用",[19,120476,120477],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,120479,120481],{"className":118887,"code":120480,"language":118889,"meta":32,"style":32},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[34,120482,120483,120495,120506],{"__ignoreMap":32},[167,120484,120485,120487,120489,120492],{"class":169,"line":170},[167,120486,174],{"class":173},[167,120488,28530],{"class":177},[167,120490,120491],{"class":177}," disable",[167,120493,120494],{"class":177}," snapd.service\n",[167,120496,120497,120499,120501,120503],{"class":169,"line":191},[167,120498,174],{"class":173},[167,120500,28530],{"class":177},[167,120502,120491],{"class":177},[167,120504,120505],{"class":177}," snapd.socket\n",[167,120507,120508,120510,120512,120514],{"class":169,"line":205},[167,120509,174],{"class":173},[167,120511,28530],{"class":177},[167,120513,120491],{"class":177},[167,120515,120516],{"class":177}," snapd.seeded.service\n",[19,120518,120519],{},"然后查看snap应用列表",[19,120521,120522,120523,120528],{},"根据你安装的选择不同（最小安装或普通安装），有",[2439,120524,120527],{"href":120525,"rel":120526},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25887],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,120530,120532],{"className":118887,"code":120531,"language":118889,"meta":32,"style":32},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[34,120533,120534,120539],{"__ignoreMap":32},[167,120535,120536],{"class":169,"line":170},[167,120537,120538],{"class":2268},"# 查询当前系统上snap安装了哪些app\n",[167,120540,120541,120544],{"class":169,"line":191},[167,120542,120543],{"class":173},"snap",[167,120545,120546],{"class":177}," list\n",[19,120548,120549],{},[3528,120550],{"alt":32,"src":120551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120553,120554,120555,120558],{},"卸载掉图中所有应用，按照 ",[2354,120556,120557],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,120560,120562],{"className":118887,"code":120561,"language":118889,"meta":32,"style":32},"#移除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",[34,120563,120564,120569,120581,120586,120597,120602,120613,120618,120629,120634,120638,120643,120654,120665],{"__ignoreMap":32},[167,120565,120566],{"class":169,"line":170},[167,120567,120568],{"class":2268},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[167,120570,120571,120573,120576,120578],{"class":169,"line":191},[167,120572,174],{"class":173},[167,120574,120575],{"class":177}," snap",[167,120577,28098],{"class":177},[167,120579,120580],{"class":177}," snap-store\n",[167,120582,120583],{"class":169,"line":205},[167,120584,120585],{"class":2268},"#移除firefox浏览器\n",[167,120587,120588,120590,120592,120594],{"class":169,"line":219},[167,120589,174],{"class":173},[167,120591,120575],{"class":177},[167,120593,28098],{"class":177},[167,120595,120596],{"class":177}," firefox\n",[167,120598,120599],{"class":169,"line":230},[167,120600,120601],{"class":2268},"#移除gnome-42-2204\n",[167,120603,120604,120606,120608,120610],{"class":169,"line":241},[167,120605,174],{"class":173},[167,120607,120575],{"class":177},[167,120609,28098],{"class":177},[167,120611,120612],{"class":177}," gnome-42-2204\n",[167,120614,120615],{"class":169,"line":261},[167,120616,120617],{"class":2268},"#移除gtk-common-themes\n",[167,120619,120620,120622,120624,120626],{"class":169,"line":773},[167,120621,174],{"class":173},[167,120623,120575],{"class":177},[167,120625,28098],{"class":177},[167,120627,120628],{"class":177}," gtk-common-themes\n",[167,120630,120631],{"class":169,"line":779},[167,120632,120633],{"class":2268},"#移除其它...\n",[167,120635,120636],{"class":169,"line":785},[167,120637,4710],{"class":512},[167,120639,120640],{"class":169,"line":790},[167,120641,120642],{"class":2268},"#移除core22,bare以及snapd\n",[167,120644,120645,120647,120649,120651],{"class":169,"line":796},[167,120646,174],{"class":173},[167,120648,120575],{"class":177},[167,120650,28098],{"class":177},[167,120652,120653],{"class":177}," core22\n",[167,120655,120656,120658,120660,120662],{"class":169,"line":802},[167,120657,174],{"class":173},[167,120659,120575],{"class":177},[167,120661,28098],{"class":177},[167,120663,120664],{"class":177}," bare\n",[167,120666,120667,120669,120671,120673],{"class":169,"line":808},[167,120668,174],{"class":173},[167,120670,120575],{"class":177},[167,120672,28098],{"class":177},[167,120674,120675],{"class":177}," snapd\n",[19,120677,120678],{},[3528,120679],{"alt":32,"src":120680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120682,120683],{},"输入以下命令查看是否还有snap包",[26,120685,120687],{"className":118887,"code":120686,"language":118889,"meta":32,"style":32},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[34,120688,120689,120695,120699,120703,120707],{"__ignoreMap":32},[167,120690,120691,120693],{"class":169,"line":170},[167,120692,120543],{"class":173},[167,120694,120546],{"class":177},[167,120696,120697],{"class":169,"line":191},[167,120698,120395],{"class":2268},[167,120700,120701],{"class":169,"line":205},[167,120702,120419],{"class":173},[167,120704,120705],{"class":169,"line":219},[167,120706,120428],{"class":2268},[167,120708,120709],{"class":169,"line":230},[167,120710,120462],{"class":173},[19,120712,120713],{},[3528,120714],{"alt":32,"src":120715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[494,120717,120719],{"id":120718},"_324-移除snap","3.2.4 移除snap",[19,120721,120722,120723,120728],{},"在删除掉",[2439,120724,120727],{"href":120725,"rel":120726},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25887],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,120730,120732],{"className":118887,"code":120731,"language":118889,"meta":32,"style":32}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[34,120733,120734,120739,120752,120757,120768],{"__ignoreMap":32},[167,120735,120736],{"class":169,"line":170},[167,120737,120738],{"class":2268}," #使用apt移除掉snap\n",[167,120740,120741,120743,120745,120747,120750],{"class":169,"line":191},[167,120742,174],{"class":173},[167,120744,118908],{"class":177},[167,120746,119216],{"class":177},[167,120748,120749],{"class":184}," --purge",[167,120751,120675],{"class":177},[167,120753,120754],{"class":169,"line":205},[167,120755,120756],{"class":2268},"#移除snapd的一些目录\n",[167,120758,120759,120761,120763,120765],{"class":169,"line":219},[167,120760,174],{"class":173},[167,120762,120144],{"class":177},[167,120764,27345],{"class":184},[167,120766,120767],{"class":177}," \u002Fvar\u002Fcache\u002Fsnapd\n",[167,120769,120770,120772,120774,120776],{"class":169,"line":230},[167,120771,174],{"class":173},[167,120773,120144],{"class":177},[167,120775,27345],{"class":184},[167,120777,120778],{"class":177}," ~\u002Fsnap\n",[19,120780,120781,120782,120785],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[34,120783,120784],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[494,120787,120789],{"id":120788},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120791,120792],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,120794,120796],{"className":118887,"code":120795,"language":118889,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[34,120797,120798],{"__ignoreMap":32},[167,120799,120800,120802,120804],{"class":169,"line":170},[167,120801,174],{"class":173},[167,120803,120174],{"class":177},[167,120805,120806],{"class":177}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120808,120809,120810,120813],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[34,120811,120812],{},":wq"," 回车",[26,120815,120817],{"className":118887,"code":120816,"language":118889,"meta":32,"style":32},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[34,120818,120819,120826,120840],{"__ignoreMap":32},[167,120820,120821,120824],{"class":169,"line":170},[167,120822,120823],{"class":173},"Package:",[167,120825,120675],{"class":177},[167,120827,120828,120831,120834,120837],{"class":169,"line":191},[167,120829,120830],{"class":173},"Pin:",[167,120832,120833],{"class":177}," release",[167,120835,120836],{"class":177}," a=",[167,120838,120839],{"class":184},"*\n",[167,120841,120842,120845],{"class":169,"line":205},[167,120843,120844],{"class":173},"Pin-Priority:",[167,120846,120847],{"class":184}," -10\n",[19,120849,120850],{},[3528,120851],{"alt":32,"src":120852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[494,120854,120856],{"id":120855},"_326-测试是否成功","3.2.6 测试是否成功",[26,120858,120860],{"className":118887,"code":120859,"language":118889,"meta":32,"style":32},"sudo apt update\nsudo apt install firefox\n",[34,120861,120862,120870],{"__ignoreMap":32},[167,120863,120864,120866,120868],{"class":169,"line":170},[167,120865,174],{"class":173},[167,120867,118908],{"class":177},[167,120869,28261],{"class":177},[167,120871,120872,120874,120876,120878],{"class":169,"line":191},[167,120873,174],{"class":173},[167,120875,118908],{"class":177},[167,120877,181],{"class":177},[167,120879,120596],{"class":177},[19,120881,120882],{},"这里提示snapd无法被安装，就证明成功了",[19,120884,120885],{},[3528,120886],{"alt":32,"src":120887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[494,120889,120891],{"id":120890},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120893,120894],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120896,120897],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120899,120900],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,120902,120904],{"className":118887,"code":120903,"language":118889,"meta":32,"style":32},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[34,120905,120906,120911,120920,120925,120933],{"__ignoreMap":32},[167,120907,120908],{"class":169,"line":170},[167,120909,120910],{"class":2268},"# 添加Mozilla提供的源\n",[167,120912,120913,120915,120917],{"class":169,"line":191},[167,120914,174],{"class":173},[167,120916,120435],{"class":177},[167,120918,120919],{"class":177}," ppa:mozillateam\u002Fppa\n",[167,120921,120922],{"class":169,"line":205},[167,120923,120924],{"class":2268},"# 安装Firefox\n",[167,120926,120927,120929,120931],{"class":169,"line":219},[167,120928,174],{"class":173},[167,120930,118908],{"class":177},[167,120932,28261],{"class":177},[167,120934,120935,120937,120939,120941],{"class":169,"line":230},[167,120936,174],{"class":173},[167,120938,118908],{"class":177},[167,120940,181],{"class":177},[167,120942,120596],{"class":177},[494,120944,120946],{"id":120945},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120948,120949],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120951,120952],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,120954,120956],{"className":118887,"code":120955,"language":118889,"meta":32,"style":32},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[34,120957,120958,120963,120973,120981,120985],{"__ignoreMap":32},[167,120959,120960],{"class":169,"line":170},[167,120961,120962],{"class":2268},"#删掉禁止安装snap的配置文件\n",[167,120964,120965,120967,120969,120971],{"class":169,"line":191},[167,120966,174],{"class":173},[167,120968,120144],{"class":177},[167,120970,27345],{"class":184},[167,120972,120806],{"class":177},[167,120974,120975,120977,120979],{"class":169,"line":205},[167,120976,174],{"class":173},[167,120978,118908],{"class":177},[167,120980,28261],{"class":177},[167,120982,120983],{"class":169,"line":219},[167,120984,741],{"emptyLinePlaceholder":740},[167,120986,120987,120989,120991],{"class":169,"line":230},[167,120988,174],{"class":173},[167,120990,118908],{"class":177},[167,120992,120993],{"class":177}," dist-update\n",[14,120995,120997],{"id":120996},"_33-中文输入法","3.3 中文输入法",[494,120999,121001],{"id":121000},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121003,121004],{},"官网下载搜狗输入法",[19,121006,121007],{},[3528,121008],{"alt":32,"src":121009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121011,121012],{},[3528,121013],{"alt":32,"src":121014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121016,121017],{},"打开终端输入如下",[26,121019,121021],{"className":118887,"code":121020,"language":118889,"meta":32,"style":32},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[34,121022,121023,121030],{"__ignoreMap":32},[167,121024,121025,121027],{"class":169,"line":170},[167,121026,707],{"class":184},[167,121028,121029],{"class":177}," ~\u002FDownloads\u002F\n",[167,121031,121032,121034,121036,121038],{"class":169,"line":191},[167,121033,174],{"class":173},[167,121035,118908],{"class":177},[167,121037,181],{"class":177},[167,121039,121040],{"class":177}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121042,121043],{},"打开Fcitx",[19,121045,121046,121049],{},[3528,121047],{"alt":32,"src":121048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3528,121050],{"alt":32,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121053,121054],{},[3528,121055],{"alt":32,"src":121056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121058,121059],{},"添加搜狗输入法",[19,121061,121062],{},[3528,121063],{"alt":32,"src":121064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121066,121067],{},[3528,121068],{"alt":32,"src":121069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121071,121072],{},"将搜狗输入法设置为唯一输入法",[19,121074,121075],{},[3528,121076],{"alt":32,"src":121077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[494,121079,121081],{"id":121080},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[40,121083,121084],{},[43,121085,121086],{},"卸载旧输入法",[26,121088,121090],{"className":120114,"code":121089,"language":120116,"meta":32,"style":32},"sudo apt purge fcitx* ibus*\n",[34,121091,121092],{"__ignoreMap":32},[167,121093,121094,121096,121098,121100,121103,121105,121108],{"class":169,"line":170},[167,121095,174],{"class":173},[167,121097,118908],{"class":177},[167,121099,119249],{"class":177},[167,121101,121102],{"class":177}," fcitx",[167,121104,2655],{"class":184},[167,121106,121107],{"class":177}," ibus",[167,121109,120839],{"class":184},[40,121111,121112],{"start":191},[43,121113,121114],{},"安装Fcitx5",[26,121116,121118],{"className":118887,"code":121117,"language":118889,"meta":32,"style":32},"# 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",[34,121119,121120,121125,121139,121143,121148,121157,121165],{"__ignoreMap":32},[167,121121,121122],{"class":169,"line":170},[167,121123,121124],{"class":2268},"# Ubuntu22.04及以上、Debian12及以上\n",[167,121126,121127,121129,121131,121133,121136],{"class":169,"line":191},[167,121128,174],{"class":173},[167,121130,118908],{"class":177},[167,121132,181],{"class":177},[167,121134,121135],{"class":177}," fcitx5",[167,121137,121138],{"class":177}," fcitx5-chinese-addons\n",[167,121140,121141],{"class":169,"line":205},[167,121142,741],{"emptyLinePlaceholder":740},[167,121144,121145],{"class":169,"line":219},[167,121146,121147],{"class":2268},"# Ubuntu20.04\n",[167,121149,121150,121152,121154],{"class":169,"line":230},[167,121151,174],{"class":173},[167,121153,120435],{"class":177},[167,121155,121156],{"class":177}," ppa:zhsj\u002Ffcitx5\n",[167,121158,121159,121161,121163],{"class":169,"line":241},[167,121160,174],{"class":173},[167,121162,118908],{"class":177},[167,121164,28261],{"class":177},[167,121166,121167,121169,121171,121173,121175],{"class":169,"line":261},[167,121168,174],{"class":173},[167,121170,118908],{"class":177},[167,121172,181],{"class":177},[167,121174,121135],{"class":177},[167,121176,121138],{"class":177},[40,121178,121179,121182],{"start":205},[43,121180,121181],{},"Reboot System",[43,121183,121184],{},"启动Fcitx5",[19,121186,121187],{},[3528,121188],{"alt":32,"src":121189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[40,121191,121192],{"start":230},[43,121193,121194],{},"修改一些设置",[19,121196,121197],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121199,121200],{},[3528,121201],{"alt":32,"src":121202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121204,121205],{},"添加快捷键以便于更好切换中英文",[19,121207,121208],{},[3528,121209],{"alt":32,"src":121210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[40,121212,121213],{"start":241},[43,121214,121215],{},"重启",[26,121217,121219],{"className":120114,"code":121218,"language":120116,"meta":32,"style":32},"sudo shutdown -r now\n",[34,121220,121221],{"__ignoreMap":32},[167,121222,121223,121225,121228,121231],{"class":169,"line":170},[167,121224,174],{"class":173},[167,121226,121227],{"class":177}," shutdown",[167,121229,121230],{"class":184}," -r",[167,121232,121233],{"class":177}," now\n",[40,121235,121236],{"start":261},[43,121237,121238],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121240,121241],{},[2439,121242,121243],{"href":121243,"rel":121244},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25887],[40,121246,121247],{"start":773},[43,121248,121249],{},"再重启",[26,121251,121252],{"className":120114,"code":121218,"language":120116,"meta":32,"style":32},[34,121253,121254],{"__ignoreMap":32},[167,121255,121256,121258,121260,121262],{"class":169,"line":170},[167,121257,174],{"class":173},[167,121259,121227],{"class":177},[167,121261,121230],{"class":184},[167,121263,121233],{"class":177},[14,121265,121267],{"id":121266},"_34-pip3源替换","3.4 pip3源替换",[19,121269,121270],{},"非Debian系发行版需要做。",[19,121272,121273],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121275,121276],{},"使用dnf的系统也可能不用做。",[26,121278,121280],{"className":118887,"code":121279,"language":118889,"meta":32,"style":32},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,121281,121282,121287,121294,121299,121304],{"__ignoreMap":32},[167,121283,121284],{"class":169,"line":170},[167,121285,121286],{"class":2268},"# 检查是否已安装 pip\n",[167,121288,121289,121292],{"class":169,"line":191},[167,121290,121291],{"class":173},"pip3",[167,121293,28312],{"class":184},[167,121295,121296],{"class":169,"line":205},[167,121297,121298],{"class":2268},"# 如果未安装，先安装 pip3（见下方）\n",[167,121300,121301],{"class":169,"line":219},[167,121302,121303],{"class":2268},"# 配置 pip 使用清华源\n",[167,121305,121306,121308,121311,121314,121317],{"class":169,"line":230},[167,121307,121291],{"class":173},[167,121309,121310],{"class":177}," config",[167,121312,121313],{"class":177}," set",[167,121315,121316],{"class":177}," global.index-url",[167,121318,121319],{"class":177}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121321,121322],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121324,121325],{},[3528,121326],{"alt":32,"src":121327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,121329,121331],{"className":118887,"code":121330,"language":118889,"meta":32,"style":32},"#安装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",[34,121332,121333,121338,121346,121357,121361,121366,121385,121389,121394,121406,121410,121415],{"__ignoreMap":32},[167,121334,121335],{"class":169,"line":170},[167,121336,121337],{"class":2268},"#安装pip3\n",[167,121339,121340,121342,121344],{"class":169,"line":191},[167,121341,174],{"class":173},[167,121343,118908],{"class":177},[167,121345,28261],{"class":177},[167,121347,121348,121350,121352,121354],{"class":169,"line":205},[167,121349,174],{"class":173},[167,121351,28095],{"class":177},[167,121353,181],{"class":177},[167,121355,121356],{"class":177}," python3-pip\n",[167,121358,121359],{"class":169,"line":219},[167,121360,741],{"emptyLinePlaceholder":740},[167,121362,121363],{"class":169,"line":230},[167,121364,121365],{"class":2268},"#更新pip3\n",[167,121367,121368,121370,121372,121374,121376,121378,121381,121383],{"class":169,"line":241},[167,121369,283],{"class":173},[167,121371,286],{"class":184},[167,121373,310],{"class":177},[167,121375,181],{"class":177},[167,121377,28447],{"class":184},[167,121379,121380],{"class":177}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[167,121382,315],{"class":184},[167,121384,318],{"class":177},[167,121386,121387],{"class":169,"line":261},[167,121388,741],{"emptyLinePlaceholder":740},[167,121390,121391],{"class":169,"line":773},[167,121392,121393],{"class":2268},"#设置pip源为清华源\n",[167,121395,121396,121398,121400,121402,121404],{"class":169,"line":779},[167,121397,121291],{"class":173},[167,121399,121310],{"class":177},[167,121401,121313],{"class":177},[167,121403,121316],{"class":177},[167,121405,121319],{"class":177},[167,121407,121408],{"class":169,"line":785},[167,121409,741],{"emptyLinePlaceholder":740},[167,121411,121412],{"class":169,"line":790},[167,121413,121414],{"class":2268},"#测试\n",[167,121416,121417,121419,121421,121423,121425,121427],{"class":169,"line":796},[167,121418,283],{"class":173},[167,121420,286],{"class":184},[167,121422,310],{"class":177},[167,121424,181],{"class":177},[167,121426,315],{"class":184},[167,121428,318],{"class":177},[19,121430,121431],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121433,121434],{},[3528,121435],{"alt":32,"src":121436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121438,121440],{"id":121439},"_35-显卡驱动安装","3.5 显卡驱动安装",[494,121442,121444],{"id":121443},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,121446,121448],{"className":120114,"code":121447,"language":120116,"meta":32,"style":32},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[34,121449,121450,121455,121470,121475],{"__ignoreMap":32},[167,121451,121452],{"class":169,"line":170},[167,121453,121454],{"class":2268},"# 如果是使用apt安装的驱动\n",[167,121456,121457,121459,121461,121463,121465,121468],{"class":169,"line":191},[167,121458,174],{"class":173},[167,121460,28095],{"class":177},[167,121462,28098],{"class":177},[167,121464,120749],{"class":184},[167,121466,121467],{"class":177}," nvidia",[167,121469,120839],{"class":184},[167,121471,121472],{"class":169,"line":205},[167,121473,121474],{"class":2268},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[167,121476,121477,121479],{"class":169,"line":219},[167,121478,174],{"class":173},[167,121480,121481],{"class":177}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[494,121483,121485],{"id":121484},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24024,121487,121489],{"id":121488},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24936,121491,121493],{"id":121492},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,121495,121497],{"className":120114,"code":121496,"language":120116,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,121498,121499,121504,121515,121520,121530,121535],{"__ignoreMap":32},[167,121500,121501],{"class":169,"line":170},[167,121502,121503],{"class":2268},"# 安装英伟达驱动\n",[167,121505,121506,121508,121510,121512],{"class":169,"line":191},[167,121507,174],{"class":173},[167,121509,118908],{"class":177},[167,121511,181],{"class":177},[167,121513,121514],{"class":177}," nvidia-driver-版本号\n",[167,121516,121517],{"class":169,"line":205},[167,121518,121519],{"class":2268},"# 重启 \n",[167,121521,121522,121524,121526,121528],{"class":169,"line":219},[167,121523,174],{"class":173},[167,121525,121227],{"class":177},[167,121527,121230],{"class":184},[167,121529,121233],{"class":177},[167,121531,121532],{"class":169,"line":230},[167,121533,121534],{"class":2268},"# 检查驱动是否安装成功\n",[167,121536,121537],{"class":169,"line":241},[167,121538,121539],{"class":173},"nvidia-smi\n",[24936,121541,121543],{"id":121542},"_35212-debian","3.5.2.1.2 Debian",[26,121545,121547],{"className":120114,"code":121546,"language":120116,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,121548,121549,121553,121567,121571,121581,121585],{"__ignoreMap":32},[167,121550,121551],{"class":169,"line":170},[167,121552,121503],{"class":2268},[167,121554,121555,121557,121559,121561,121564],{"class":169,"line":191},[167,121556,174],{"class":173},[167,121558,118908],{"class":177},[167,121560,181],{"class":177},[167,121562,121563],{"class":177}," nvidia-driver",[167,121565,121566],{"class":177}," nvidia-settings\n",[167,121568,121569],{"class":169,"line":205},[167,121570,121519],{"class":2268},[167,121572,121573,121575,121577,121579],{"class":169,"line":219},[167,121574,174],{"class":173},[167,121576,121227],{"class":177},[167,121578,121230],{"class":184},[167,121580,121233],{"class":177},[167,121582,121583],{"class":169,"line":230},[167,121584,121534],{"class":2268},[167,121586,121587],{"class":169,"line":241},[167,121588,121539],{"class":173},[24024,121590,121592],{"id":121591},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121594,121595,121596,121599],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2354,121597,121598],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121601,121602,121603],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25580,121604,121605],{},[2354,121606,121607],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,121609,121611],{"className":120114,"code":121610,"language":120116,"meta":32,"style":32},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[34,121612,121613,121618,121628,121633,121646,121651],{"__ignoreMap":32},[167,121614,121615],{"class":169,"line":170},[167,121616,121617],{"class":2268},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[167,121619,121620,121622,121625],{"class":169,"line":191},[167,121621,174],{"class":173},[167,121623,121624],{"class":177}," telinit",[167,121626,121627],{"class":184}," 3\n",[167,121629,121630],{"class":169,"line":205},[167,121631,121632],{"class":2268},"# ubuntu 使用下方命令\n",[167,121634,121635,121637,121640,121643],{"class":169,"line":219},[167,121636,174],{"class":173},[167,121638,121639],{"class":177}," service",[167,121641,121642],{"class":177}," lightdm",[167,121644,121645],{"class":177}," stop\n",[167,121647,121648],{"class":169,"line":230},[167,121649,121650],{"class":2268},"# Fedora 使用下方命令\n",[167,121652,121653,121655,121657,121660],{"class":169,"line":241},[167,121654,174],{"class":173},[167,121656,28530],{"class":177},[167,121658,121659],{"class":177}," isolate",[167,121661,121662],{"class":177}," multi-user.target\n",[19,121664,121665],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,121667,121669],{"className":120114,"code":121668,"language":120116,"meta":32,"style":32},"# 编译环境+准备工作\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",[34,121670,121671,121676,121687,121692,121699,121704,121716,121721,121728,121733],{"__ignoreMap":32},[167,121672,121673],{"class":169,"line":170},[167,121674,121675],{"class":2268},"# 编译环境+准备工作\n",[167,121677,121678,121680,121682,121684],{"class":169,"line":191},[167,121679,174],{"class":173},[167,121681,118908],{"class":177},[167,121683,181],{"class":177},[167,121685,121686],{"class":177}," build-essential\n",[167,121688,121689],{"class":169,"line":205},[167,121690,121691],{"class":2268},"# 进入到.run目录中\n",[167,121693,121694,121696],{"class":169,"line":219},[167,121695,707],{"class":184},[167,121697,121698],{"class":177}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[167,121700,121701],{"class":169,"line":230},[167,121702,121703],{"class":2268},"# 给驱动文件增加可执行权限：\n",[167,121705,121706,121708,121710,121713],{"class":169,"line":241},[167,121707,174],{"class":173},[167,121709,26601],{"class":177},[167,121711,121712],{"class":177}," a+x",[167,121714,121715],{"class":177}," NVIDIA-Linux-x86_64-550.107.02.run\n",[167,121717,121718],{"class":169,"line":261},[167,121719,121720],{"class":2268},"# 然后执行安装：\n",[167,121722,121723,121725],{"class":169,"line":773},[167,121724,174],{"class":173},[167,121726,121727],{"class":177}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[167,121729,121730],{"class":169,"line":779},[167,121731,121732],{"class":2268},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[167,121734,121735,121737,121740],{"class":169,"line":785},[167,121736,174],{"class":173},[167,121738,121739],{"class":177}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[167,121741,121742],{"class":184},"  --no-opengl-files\n",[19,121744,121745],{},"安装完毕重启即可",[26,121747,121749],{"className":120114,"code":121748,"language":120116,"meta":32,"style":32},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,121750,121751,121755,121761,121765],{"__ignoreMap":32},[167,121752,121753],{"class":169,"line":170},[167,121754,121519],{"class":2268},[167,121756,121757,121759],{"class":169,"line":191},[167,121758,174],{"class":173},[167,121760,28664],{"class":177},[167,121762,121763],{"class":169,"line":205},[167,121764,121534],{"class":2268},[167,121766,121767],{"class":169,"line":219},[167,121768,121539],{"class":173},[494,121770,121772],{"id":121771},"_353-安装cuda","3.5.3 安装CUDA",[19,121774,121775],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121777,121778],{},[3528,121779],{"alt":32,"src":121780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[40,121782,121783],{},[43,121784,121785],{},"先查看显卡驱动所支持的最高CUDA版本",[26,121787,121788],{"className":120114,"code":121539,"language":120116,"meta":32,"style":32},[34,121789,121790],{"__ignoreMap":32},[167,121791,121792],{"class":169,"line":170},[167,121793,121539],{"class":173},[19,121795,121796],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121798,121799],{},[3528,121800],{"alt":32,"src":121801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[40,121803,121804],{"start":191},[43,121805,121806],{},"下载CUDA并安装CUDA",[19,121808,119893,121809],{},[2439,121810,119896],{"href":119896,"rel":121811},[25887],[19,121813,121814],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121816,121817],{},[3528,121818],{"alt":32,"src":121819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121821,121822,121823,121828],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2439,121824,121827],{"href":121825,"rel":121826},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25887],"Vinci机器人队单片机教程","）",[19,121830,121831],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121833,121834],{},[3528,121835],{"alt":32,"src":121836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121838,121839],{},"将最下方框框里的命令敲入终端",[26,121841,121843],{"className":120114,"code":121842,"language":120116,"meta":32,"style":32},"# 在当前文件夹下创建一个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",[34,121844,121845,121850,121859,121864,121871,121876,121884,121889,121900,121905],{"__ignoreMap":32},[167,121846,121847],{"class":169,"line":170},[167,121848,121849],{"class":2268},"# 在当前文件夹下创建一个ttt的子文件夹\n",[167,121851,121852,121854,121856],{"class":169,"line":191},[167,121853,696],{"class":173},[167,121855,699],{"class":184},[167,121857,121858],{"class":177}," .\u002Fttt\n",[167,121860,121861],{"class":169,"line":205},[167,121862,121863],{"class":2268},"# 进入ttt文件夹\n",[167,121865,121866,121868],{"class":169,"line":219},[167,121867,707],{"class":184},[167,121869,121870],{"class":177}," ttt\n",[167,121872,121873],{"class":169,"line":230},[167,121874,121875],{"class":2268},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[167,121877,121878,121881],{"class":169,"line":241},[167,121879,121880],{"class":173},"wget",[167,121882,121883],{"class":177}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[167,121885,121886],{"class":169,"line":261},[167,121887,121888],{"class":2268},"# 给予权限\n",[167,121890,121891,121893,121895,121897],{"class":169,"line":773},[167,121892,174],{"class":173},[167,121894,26601],{"class":177},[167,121896,121712],{"class":177},[167,121898,121899],{"class":177}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[167,121901,121902],{"class":169,"line":779},[167,121903,121904],{"class":2268},"# 运行脚本\n",[167,121906,121907,121909],{"class":169,"line":785},[167,121908,174],{"class":173},[167,121910,121899],{"class":177},[19,121912,121913],{},[3528,121914],{"alt":32,"src":121915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121917,121918],{},"正在安装中：",[19,121920,121921],{},[3528,121922],{"alt":32,"src":121923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121925,121926],{},"输入accept接受即可",[19,121928,121929],{},[3528,121930],{"alt":32,"src":121931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121933,121934],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121936,121937],{},[3528,121938],{"alt":32,"src":121939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121941,121942],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121944,121945],{},[3528,121946],{"alt":32,"src":121947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[40,121949,121950],{"start":205},[43,121951,121952],{},"配置环境",[19,121954,121955],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,121957,121959],{"className":120114,"code":121958,"language":120116,"meta":32,"style":32},"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",[34,121960,121961,121977,121992],{"__ignoreMap":32},[167,121962,121963,121966,121969,121972,121975],{"class":169,"line":170},[167,121964,121965],{"class":173},"Please",[167,121967,121968],{"class":177}," make",[167,121970,121971],{"class":177}," sure",[167,121973,121974],{"class":177}," that",[167,121976,4710],{"class":512},[167,121978,121979,121981,121984,121987,121990],{"class":169,"line":191},[167,121980,54266],{"class":173},[167,121982,121983],{"class":177},"   PATH",[167,121985,121986],{"class":177}," includes",[167,121988,121989],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[167,121991,4710],{"class":512},[167,121993,121994,121996,121999,122001,122004,122007,122009,122012,122015,122018,122021,122023,122026,122028],{"class":169,"line":205},[167,121995,54266],{"class":173},[167,121997,121998],{"class":177},"   LD_LIBRARY_PATH",[167,122000,121986],{"class":177},[167,122002,122003],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[167,122005,122006],{"class":177}," or,",[167,122008,7239],{"class":177},[167,122010,122011],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[167,122013,122014],{"class":177}," to",[167,122016,122017],{"class":177}," \u002Fetc\u002Fld.so.conf",[167,122019,122020],{"class":177}," and",[167,122022,29247],{"class":177},[167,122024,122025],{"class":177}," ldconfig",[167,122027,66593],{"class":177},[167,122029,122030],{"class":177}," root\n",[19,122032,122033],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,122035,122037],{"className":120114,"code":122036,"language":120116,"meta":32,"style":32},"which nvcc\n",[34,122038,122039],{"__ignoreMap":32},[167,122040,122041,122044],{"class":169,"line":170},[167,122042,122043],{"class":184},"which",[167,122045,122046],{"class":177}," nvcc\n",[19,122048,122049],{},[3528,122050],{"alt":32,"src":122051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122053,122054],{},"所以我进行以下操作：",[26,122056,122058],{"className":120114,"code":122057,"language":120116,"meta":32,"style":32},"sudo vim ~\u002F.bashrc\n",[34,122059,122060],{"__ignoreMap":32},[167,122061,122062,122064,122066],{"class":169,"line":170},[167,122063,174],{"class":173},[167,122065,120174],{"class":177},[167,122067,122068],{"class":177}," ~\u002F.bashrc\n",[19,122070,122071],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,122073,122075],{"className":120114,"code":122074,"language":120116,"meta":32,"style":32},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[34,122076,122077,122089],{"__ignoreMap":32},[167,122078,122079,122081,122084,122086],{"class":169,"line":170},[167,122080,27063],{"class":731},[167,122082,122083],{"class":512}," PATH",[167,122085,523],{"class":731},[167,122087,122088],{"class":512},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[167,122090,122091,122093,122096,122098],{"class":169,"line":191},[167,122092,27063],{"class":731},[167,122094,122095],{"class":512}," LD_LIBRARY_PATH",[167,122097,523],{"class":731},[167,122099,122100],{"class":512},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122102,122103],{},[3528,122104],{"alt":32,"src":122105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,122107,122109],{"className":120114,"code":122108,"language":120116,"meta":32,"style":32},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[34,122110,122111,122116,122122,122127],{"__ignoreMap":32},[167,122112,122113],{"class":169,"line":170},[167,122114,122115],{"class":2268},"# 刷新当前终端的环境变量\n",[167,122117,122118,122120],{"class":169,"line":191},[167,122119,297],{"class":184},[167,122121,122068],{"class":177},[167,122123,122124],{"class":169,"line":205},[167,122125,122126],{"class":2268},"# 验证CUDA是否安装成功\n",[167,122128,122129,122132],{"class":169,"line":219},[167,122130,122131],{"class":173},"nvcc",[167,122133,122134],{"class":184}," -V\n",[19,122136,122137],{},"出现下图这种则安装成功。",[19,122139,122140],{},[3528,122141],{"alt":32,"src":122142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[494,122144,122146],{"id":122145},"_354-安装cudnn","3.5.4 安装cuDNN",[40,122148,122149],{},[43,122150,122151],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122153,122154,122155,122160],{},"前往 NVIDIA cuDNN 下载页面：",[2439,122156,122159],{"href":122157,"rel":122158},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25887],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122162,122163],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122165,122166],{},[3528,122167],{"alt":32,"src":122168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122170,122171],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122173,122174],{},[3528,122175],{"alt":32,"src":122176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122178,122179],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122181,122182],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122184,122185],{},[2354,122186,122187],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122189,122190],{},"下载好的：",[19,122192,122193],{},[3528,122194],{"alt":32,"src":122195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[40,122197,122198],{"start":191},[43,122199,122200],{},"安装cuDNN",[19,122202,122203],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122205,122206],{},[3528,122207],{"alt":32,"src":122208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122210,122211],{},"解压文件，并复制到对应位置完成安装",[26,122213,122215],{"className":120114,"code":122214,"language":120116,"meta":32,"style":32},"# 解压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",[34,122216,122217,122222,122233,122238,122245,122250,122266,122280,122285,122296,122305,122309,122325],{"__ignoreMap":32},[167,122218,122219],{"class":169,"line":170},[167,122220,122221],{"class":2268},"# 解压cuDNN文件\n",[167,122223,122224,122227,122230],{"class":169,"line":191},[167,122225,122226],{"class":173},"tar",[167,122228,122229],{"class":184}," -xvf",[167,122231,122232],{"class":177}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[167,122234,122235],{"class":169,"line":205},[167,122236,122237],{"class":2268},"# cd进文件夹\n",[167,122239,122240,122242],{"class":169,"line":219},[167,122241,707],{"class":184},[167,122243,122244],{"class":177}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[167,122246,122247],{"class":169,"line":230},[167,122248,122249],{"class":2268},"# 复制cuDNN文件到CUDA目录\n",[167,122251,122252,122254,122256,122259,122261,122264],{"class":169,"line":241},[167,122253,174],{"class":173},[167,122255,29878],{"class":177},[167,122257,122258],{"class":177}," include\u002Fcudnn",[167,122260,2655],{"class":184},[167,122262,122263],{"class":177},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[167,122265,4710],{"class":512},[167,122267,122268,122270,122272,122275,122277],{"class":169,"line":261},[167,122269,174],{"class":173},[167,122271,29878],{"class":177},[167,122273,122274],{"class":177}," lib\u002Flibcudnn",[167,122276,2655],{"class":184},[167,122278,122279],{"class":177},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[167,122281,122282],{"class":169,"line":773},[167,122283,122284],{"class":2268},"# 对比一下有没有缺文件\n",[167,122286,122287,122289,122292,122294],{"class":169,"line":779},[167,122288,28778],{"class":173},[167,122290,122291],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[167,122293,2655],{"class":184},[167,122295,4710],{"class":512},[167,122297,122298,122300,122303],{"class":169,"line":785},[167,122299,28778],{"class":173},[167,122301,122302],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[167,122304,120839],{"class":184},[167,122306,122307],{"class":169,"line":790},[167,122308,121888],{"class":2268},[167,122310,122311,122313,122315,122318,122320,122322],{"class":169,"line":796},[167,122312,174],{"class":173},[167,122314,26601],{"class":177},[167,122316,122317],{"class":177}," a+r",[167,122319,122291],{"class":177},[167,122321,2655],{"class":184},[167,122323,122324],{"class":512},"   \n",[167,122326,122327,122329,122331,122333,122335],{"class":169,"line":802},[167,122328,174],{"class":173},[167,122330,26601],{"class":177},[167,122332,122317],{"class":177},[167,122334,122302],{"class":177},[167,122336,120839],{"class":184},[40,122338,122339],{"start":205},[43,122340,122341],{},"检查是否安装成功",[26,122343,122345],{"className":120114,"code":122344,"language":120116,"meta":32,"style":32},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[34,122346,122347,122352],{"__ignoreMap":32},[167,122348,122349],{"class":169,"line":170},[167,122350,122351],{"class":2268},"# 检查cuDNN版本命令\n",[167,122353,122354,122357,122360,122362,122364,122367,122370],{"class":169,"line":191},[167,122355,122356],{"class":173},"cat",[167,122358,122359],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[167,122361,27130],{"class":731},[167,122363,32250],{"class":173},[167,122365,122366],{"class":177}," CUDNN_MAJOR",[167,122368,122369],{"class":184}," -A",[167,122371,49723],{"class":184},[19,122373,122374],{},"出现下图这样的就是安装成功了",[19,122376,122377],{},[3528,122378],{"alt":32,"src":122379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[40,122381,122382],{"start":219},[43,122383,122384],{},"软链接(一般不需要)",[26,122386,122388],{"className":120114,"code":122387,"language":120116,"meta":32,"style":32},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[34,122389,122390,122395],{"__ignoreMap":32},[167,122391,122392],{"class":169,"line":170},[167,122393,122394],{"class":2268},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[167,122396,122397,122399],{"class":169,"line":191},[167,122398,174],{"class":173},[167,122400,122401],{"class":177}," ldconfig\n",[19,122403,122404],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,122406,122411],{"className":122407,"code":122408,"language":122409,"meta":122410,"style":32},"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",[34,122412,122413,122418,122423,122428,122433,122438,122443],{"__ignoreMap":32},[167,122414,122415],{"class":169,"line":170},[167,122416,122417],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[167,122419,122420],{"class":169,"line":191},[167,122421,122422],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[167,122424,122425],{"class":169,"line":205},[167,122426,122427],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[167,122429,122430],{"class":169,"line":219},[167,122431,122432],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[167,122434,122435],{"class":169,"line":230},[167,122436,122437],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[167,122439,122440],{"class":169,"line":241},[167,122441,122442],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[167,122444,122445],{"class":169,"line":261},[167,122446,122447],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122449,122450],{},"运行下方的命令",[26,122452,122454],{"className":120114,"code":122453,"language":120116,"meta":32,"style":32},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[34,122455,122456,122461,122468,122473],{"__ignoreMap":32},[167,122457,122458],{"class":169,"line":170},[167,122459,122460],{"class":2268},"# cd进入CUDA路径\n",[167,122462,122463,122465],{"class":169,"line":191},[167,122464,707],{"class":184},[167,122466,122467],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[167,122469,122470],{"class":169,"line":205},[167,122471,122472],{"class":2268}," # 查看本路径下的需要软链接的文件名\n",[167,122474,122475],{"class":169,"line":219},[167,122476,122477],{"class":173}," ls\n",[19,122479,122480],{},[3528,122481],{"alt":32,"src":122482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122484,122485,122486,20436,122489,20436,122492,122495],{},"如上图，我需要将",[34,122487,122488],{},"libcudnn_xxx_xxxxx.so.8.9.7",[34,122490,122491],{},"libcudnn_xxx_xxxxx.so.8",[34,122493,122494],{},"libcudnn_xxx_xxxxx.so","软链接",[26,122497,122499],{"className":120114,"code":122498,"language":120116,"meta":32,"style":32},"# 创建符号链接。对于每个 .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",[34,122500,122501,122506,122522,122536,122550,122564,122578,122592,122606,122611,122617,122622],{"__ignoreMap":32},[167,122502,122503],{"class":169,"line":170},[167,122504,122505],{"class":2268},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[167,122507,122508,122510,122513,122516,122519],{"class":169,"line":191},[167,122509,174],{"class":173},[167,122511,122512],{"class":177}," ln",[167,122514,122515],{"class":184}," -sf",[167,122517,122518],{"class":177}," libcudnn_cnn_train.so.8.9.7",[167,122520,122521],{"class":177}," libcudnn_cnn_train.so.8\n",[167,122523,122524,122526,122528,122530,122533],{"class":169,"line":205},[167,122525,174],{"class":173},[167,122527,122512],{"class":177},[167,122529,122515],{"class":184},[167,122531,122532],{"class":177}," libcudnn_adv_infer.so.8.9.7",[167,122534,122535],{"class":177}," libcudnn_adv_infer.so.8\n",[167,122537,122538,122540,122542,122544,122547],{"class":169,"line":219},[167,122539,174],{"class":173},[167,122541,122512],{"class":177},[167,122543,122515],{"class":184},[167,122545,122546],{"class":177}," libcudnn_adv_train.so.8.9.7",[167,122548,122549],{"class":177}," libcudnn_adv_train.so.8\n",[167,122551,122552,122554,122556,122558,122561],{"class":169,"line":230},[167,122553,174],{"class":173},[167,122555,122512],{"class":177},[167,122557,122515],{"class":184},[167,122559,122560],{"class":177}," libcudnn_cnn_infer.so.8.9.7",[167,122562,122563],{"class":177}," libcudnn_cnn_infer.so.8\n",[167,122565,122566,122568,122570,122572,122575],{"class":169,"line":241},[167,122567,174],{"class":173},[167,122569,122512],{"class":177},[167,122571,122515],{"class":184},[167,122573,122574],{"class":177}," libcudnn.so.8.9.7",[167,122576,122577],{"class":177}," libcudnn.so.8\n",[167,122579,122580,122582,122584,122586,122589],{"class":169,"line":261},[167,122581,174],{"class":173},[167,122583,122512],{"class":177},[167,122585,122515],{"class":184},[167,122587,122588],{"class":177}," libcudnn_ops_infer.so.8.9.7",[167,122590,122591],{"class":177}," libcudnn_ops_infer.so.8\n",[167,122593,122594,122596,122598,122600,122603],{"class":169,"line":773},[167,122595,174],{"class":173},[167,122597,122512],{"class":177},[167,122599,122515],{"class":184},[167,122601,122602],{"class":177}," libcudnn_ops_train.so.8.9.7",[167,122604,122605],{"class":177}," libcudnn_ops_train.so.8\n",[167,122607,122608],{"class":169,"line":779},[167,122609,122610],{"class":2268},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[167,122612,122613,122615],{"class":169,"line":785},[167,122614,174],{"class":173},[167,122616,122401],{"class":177},[167,122618,122619],{"class":169,"line":790},[167,122620,122621],{"class":2268},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[167,122623,122624,122626,122629,122632,122634,122637],{"class":169,"line":796},[167,122625,28778],{"class":173},[167,122627,122628],{"class":184}," -l",[167,122630,122631],{"class":177}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[167,122633,2655],{"class":184},[167,122635,122636],{"class":177},".so",[167,122638,120839],{"class":184},[494,122640,122642],{"id":122641},"_355-常见问题","3.5.5 常见问题",[40,122644,122645],{},[43,122646,122647],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,122649,122651],{"className":120114,"code":122650,"language":120116,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[34,122652,122653],{"__ignoreMap":32},[167,122654,122655,122657,122659],{"class":169,"line":170},[167,122656,174],{"class":173},[167,122658,120174],{"class":177},[167,122660,122661],{"class":177}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122663,122664],{},"blacklist-nouveau.conf文件内容如下：",[26,122666,122668],{"className":120114,"code":122667,"language":120116,"meta":32,"style":32},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[34,122669,122670,122678,122685,122697,122707],{"__ignoreMap":32},[167,122671,122672,122675],{"class":169,"line":170},[167,122673,122674],{"class":173},"blacklist",[167,122676,122677],{"class":177}," nouveau\n",[167,122679,122680,122682],{"class":169,"line":191},[167,122681,122674],{"class":173},[167,122683,122684],{"class":177}," lbm-nouveau\n",[167,122686,122687,122689,122692,122695],{"class":169,"line":205},[167,122688,117521],{"class":173},[167,122690,122691],{"class":177}," nouveau",[167,122693,122694],{"class":177}," modeset=",[167,122696,5120],{"class":184},[167,122698,122699,122702,122704],{"class":169,"line":219},[167,122700,122701],{"class":184},"alias",[167,122703,122691],{"class":177},[167,122705,122706],{"class":177}," off\n",[167,122708,122709,122711,122714],{"class":169,"line":230},[167,122710,122701],{"class":184},[167,122712,122713],{"class":177}," lbm-nouveau",[167,122715,122706],{"class":177},[19,122717,122718],{},"接着运行下方命令",[26,122720,122722],{"className":120114,"code":122721,"language":120116,"meta":32,"style":32},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[34,122723,122724,122734,122739],{"__ignoreMap":32},[167,122725,122726,122728,122731],{"class":169,"line":170},[167,122727,174],{"class":173},[167,122729,122730],{"class":177}," update-initramfs",[167,122732,122733],{"class":184}," -u\n",[167,122735,122736],{"class":169,"line":191},[167,122737,122738],{"class":173},"或者\n",[167,122740,122741,122743,122746],{"class":169,"line":205},[167,122742,174],{"class":173},[167,122744,122745],{"class":177}," dracut",[167,122747,122748],{"class":184}," --force\n",[19,122750,122751],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,122753,122755],{"className":120114,"code":122754,"language":120116,"meta":32,"style":32},"lsmod | grep nouveau\n",[34,122756,122757],{"__ignoreMap":32},[167,122758,122759,122762,122764,122766],{"class":169,"line":170},[167,122760,122761],{"class":173},"lsmod",[167,122763,27130],{"class":731},[167,122765,32250],{"class":173},[167,122767,122677],{"class":177},[40,122769,122770],{"start":191},[43,122771,122772],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,122774,122776],{"className":120114,"code":122775,"language":120116,"meta":32,"style":32},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[34,122777,122778],{"__ignoreMap":32},[167,122779,122780,122782,122784],{"class":169,"line":170},[167,122781,174],{"class":173},[167,122783,120174],{"class":177},[167,122785,122786],{"class":177}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122788,122789],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,122791,122793],{"className":120114,"code":122792,"language":120116,"meta":32,"style":32},"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",[34,122794,122795,122803,122811,122819,122826,122834,122844,122852],{"__ignoreMap":32},[167,122796,122797,122800],{"class":169,"line":170},[167,122798,122799],{"class":173},"Section",[167,122801,122802],{"class":177}," \"OutputClass\"\n",[167,122804,122805,122808],{"class":169,"line":191},[167,122806,122807],{"class":173},"   Identifier",[167,122809,122810],{"class":177}," \"nvidia\"\n",[167,122812,122813,122816],{"class":169,"line":205},[167,122814,122815],{"class":173},"   MatchDriver",[167,122817,122818],{"class":177}," \"nvidia-drm\"\n",[167,122820,122821,122824],{"class":169,"line":219},[167,122822,122823],{"class":173},"   Driver",[167,122825,122810],{"class":177},[167,122827,122828,122831],{"class":169,"line":230},[167,122829,122830],{"class":173},"   Option",[167,122832,122833],{"class":177}," \"AllowEmptyInitialConfiguration\"\n",[167,122835,122836,122838,122841],{"class":169,"line":241},[167,122837,122830],{"class":173},[167,122839,122840],{"class":177}," \"PrimaryGPU\"",[167,122842,122843],{"class":177}," \"yes\"\n",[167,122845,122846,122849],{"class":169,"line":261},[167,122847,122848],{"class":173},"   ModulePath",[167,122850,122851],{"class":177}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[167,122853,122854],{"class":169,"line":773},[167,122855,122856],{"class":173},"EndSection\n",[40,122858,122859],{"start":205},[43,122860,122861],{},"安装N卡驱动提示错误",[26,122863,122865],{"className":122407,"code":122864,"language":122409,"meta":122410,"style":32},"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",[34,122866,122867],{"__ignoreMap":32},[167,122868,122869],{"class":169,"line":170},[167,122870,122864],{},[40,122872,122873],{},[43,122874,122875],{},"检查当前运行的内核版本：",[19,122877,122878],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,122880,122882],{"className":118887,"code":122881,"language":118889,"meta":32,"style":32},"uname -r\n",[34,122883,122884],{"__ignoreMap":32},[167,122885,122886,122888],{"class":169,"line":170},[167,122887,72192],{"class":173},[167,122889,122890],{"class":184}," -r\n",[40,122892,122893],{"start":191},[43,122894,122895],{},"安装内核开发文件：",[19,122897,122898,122899,122902],{},"确保你已经安装了与当前内核版本相匹配的 ",[34,122900,122901],{},"kernel-devel"," 包。运行以下命令来安装：",[26,122904,122906],{"className":118887,"code":122905,"language":118889,"meta":32,"style":32},"sudo dnf install kernel-devel-$(uname -r)\n",[34,122907,122908],{"__ignoreMap":32},[167,122909,122910,122912,122914,122916,122919,122921,122923,122925],{"class":169,"line":170},[167,122911,174],{"class":173},[167,122913,178],{"class":177},[167,122915,181],{"class":177},[167,122917,122918],{"class":177}," kernel-devel-",[167,122920,27120],{"class":512},[167,122922,72192],{"class":173},[167,122924,121230],{"class":184},[167,122926,873],{"class":512},[19,122928,122929],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[40,122931,122932],{"start":205},[43,122933,122934],{},"安装内核源代码（如果需要）：",[19,122936,122937],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,122939,122941],{"className":118887,"code":122940,"language":118889,"meta":32,"style":32},"sudo dnf install kernel-headers kernel-source\n",[34,122942,122943],{"__ignoreMap":32},[167,122944,122945,122947,122949,122951,122954],{"class":169,"line":170},[167,122946,174],{"class":173},[167,122948,178],{"class":177},[167,122950,181],{"class":177},[167,122952,122953],{"class":177}," kernel-headers",[167,122955,122956],{"class":177}," kernel-source\n",[40,122958,122959],{"start":219},[43,122960,122961],{},"检查安装：",[19,122963,122964,122965,122968],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[34,122966,122967],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,122970,122972],{"className":118887,"code":122971,"language":118889,"meta":32,"style":32},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[34,122973,122974],{"__ignoreMap":32},[167,122975,122976,122978],{"class":169,"line":170},[167,122977,28778],{"class":173},[167,122979,122980],{"class":177}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122982,122983,122984,122987],{},"如果仍然遇到问题，可以通过 ",[34,122985,122986],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2113,122989,122990],{},"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":32,"searchDepth":191,"depth":191,"links":122992},[122993,122997,123007,123011,123012],{"id":120090,"depth":191,"text":120091,"children":122994},[122995,122996],{"id":120100,"depth":205,"text":120101},{"id":120110,"depth":205,"text":120111},{"id":120310,"depth":191,"text":120311,"children":122998},[122999,123000,123001,123002,123003,123004,123005,123006],{"id":120314,"depth":205,"text":120315},{"id":120384,"depth":205,"text":120385},{"id":120473,"depth":205,"text":120474},{"id":120718,"depth":205,"text":120719},{"id":120788,"depth":205,"text":120789},{"id":120855,"depth":205,"text":120856},{"id":120890,"depth":205,"text":120891},{"id":120945,"depth":205,"text":120946},{"id":120996,"depth":191,"text":120997,"children":123008},[123009,123010],{"id":121000,"depth":205,"text":121001},{"id":121080,"depth":205,"text":121081},{"id":121266,"depth":191,"text":121267},{"id":121439,"depth":191,"text":121440,"children":123013},[123014,123015,123016,123017,123018],{"id":121443,"depth":205,"text":121444},{"id":121484,"depth":205,"text":121485},{"id":121771,"depth":205,"text":121772},{"id":122145,"depth":205,"text":122146},{"id":122641,"depth":205,"text":122642},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120082,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123025,"title":123026,"body":123027,"description":25403,"extension":2140,"meta":123367,"navigation":740,"path":123368,"seo":123369,"stem":123370,"__hash__":123371},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123028,"toc":123365},[123029,123032,123037,123040,123286,123291,123294,123330,123333,123362],[10,123030,123026],{"id":123031},"_4-命令教程长期积累",[40,123033,123034],{},[43,123035,123036],{},"大多数命令",[19,123038,123039],{},"常用 Linux 命令速查：",[26,123041,123043],{"className":118887,"code":123042,"language":118889,"meta":32,"style":32},"# 文件与目录\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",[34,123044,123045,123050,123057,123064,123072,123079,123086,123094,123102,123109,123116,123124,123128,123133,123140,123148,123155,123159,123164,123171,123179,123187,123195,123203,123207,123212,123220,123227,123234,123242,123250,123254,123259,123268,123277],{"__ignoreMap":32},[167,123046,123047],{"class":169,"line":170},[167,123048,123049],{"class":2268},"# 文件与目录\n",[167,123051,123052,123054],{"class":169,"line":191},[167,123053,28778],{"class":173},[167,123055,123056],{"class":2268},"        # 列出目录内容\n",[167,123058,123059,123061],{"class":169,"line":205},[167,123060,707],{"class":184},[167,123062,123063],{"class":2268},"        # 切换目录\n",[167,123065,123066,123069],{"class":169,"line":219},[167,123067,123068],{"class":184},"pwd",[167,123070,123071],{"class":2268},"       # 显示当前路径\n",[167,123073,123074,123076],{"class":169,"line":230},[167,123075,696],{"class":173},[167,123077,123078],{"class":2268},"     # 创建目录\n",[167,123080,123081,123083],{"class":169,"line":241},[167,123082,27342],{"class":173},[167,123084,123085],{"class":2268},"        # 删除文件或目录\n",[167,123087,123088,123091],{"class":169,"line":261},[167,123089,123090],{"class":173},"cp",[167,123092,123093],{"class":2268},"        # 复制文件或目录\n",[167,123095,123096,123099],{"class":169,"line":773},[167,123097,123098],{"class":173},"mv",[167,123100,123101],{"class":2268},"        # 移动\u002F重命名文件或目录\n",[167,123103,123104,123106],{"class":169,"line":779},[167,123105,714],{"class":173},[167,123107,123108],{"class":2268},"     # 创建空文件\n",[167,123110,123111,123113],{"class":169,"line":785},[167,123112,122356],{"class":173},[167,123114,123115],{"class":2268},"       # 查看文件内容\n",[167,123117,123118,123121],{"class":169,"line":790},[167,123119,123120],{"class":173},"head\u002Ftail",[167,123122,123123],{"class":2268}," # 查看文件头部\u002F尾部\n",[167,123125,123126],{"class":169,"line":796},[167,123127,741],{"emptyLinePlaceholder":740},[167,123129,123130],{"class":169,"line":802},[167,123131,123132],{"class":2268},"# 权限管理\n",[167,123134,123135,123137],{"class":169,"line":808},[167,123136,26633],{"class":173},[167,123138,123139],{"class":2268},"     # 修改文件权限\n",[167,123141,123142,123145],{"class":169,"line":814},[167,123143,123144],{"class":173},"chown",[167,123146,123147],{"class":2268},"     # 修改文件所有者\n",[167,123149,123150,123152],{"class":169,"line":820},[167,123151,174],{"class":173},[167,123153,123154],{"class":2268},"      # 以管理员身份执行\n",[167,123156,123157],{"class":169,"line":826},[167,123158,741],{"emptyLinePlaceholder":740},[167,123160,123161],{"class":169,"line":832},[167,123162,123163],{"class":2268},"# 系统信息\n",[167,123165,123166,123168],{"class":169,"line":837},[167,123167,72192],{"class":173},[167,123169,123170],{"class":2268},"     # 系统信息\n",[167,123172,123173,123176],{"class":169,"line":842},[167,123174,123175],{"class":173},"df",[167,123177,123178],{"class":2268},"        # 磁盘使用情况\n",[167,123180,123181,123184],{"class":169,"line":860},[167,123182,123183],{"class":173},"free",[167,123185,123186],{"class":2268},"      # 内存使用情况\n",[167,123188,123189,123192],{"class":169,"line":876},[167,123190,123191],{"class":173},"top\u002Fhtop",[167,123193,123194],{"class":2268},"  # 进程监控\n",[167,123196,123197,123200],{"class":169,"line":887},[167,123198,123199],{"class":173},"ps",[167,123201,123202],{"class":2268},"        # 查看进程\n",[167,123204,123205],{"class":169,"line":892},[167,123206,741],{"emptyLinePlaceholder":740},[167,123208,123209],{"class":169,"line":907},[167,123210,123211],{"class":2268},"# 网络\n",[167,123213,123214,123217],{"class":169,"line":920},[167,123215,123216],{"class":173},"ping",[167,123218,123219],{"class":2268},"      # 测试网络连通性\n",[167,123221,123222,123224],{"class":169,"line":933},[167,123223,28866],{"class":173},[167,123225,123226],{"class":2268},"      # 发送 HTTP 请求\n",[167,123228,123229,123231],{"class":169,"line":946},[167,123230,121880],{"class":173},[167,123232,123233],{"class":2268},"      # 下载文件\n",[167,123235,123236,123239],{"class":169,"line":959},[167,123237,123238],{"class":173},"ssh",[167,123240,123241],{"class":2268},"       # 远程登录\n",[167,123243,123244,123247],{"class":169,"line":964},[167,123245,123246],{"class":173},"scp",[167,123248,123249],{"class":2268},"       # 远程文件传输\n",[167,123251,123252],{"class":169,"line":987},[167,123253,741],{"emptyLinePlaceholder":740},[167,123255,123256],{"class":169,"line":993},[167,123257,123258],{"class":2268},"# 包管理（Debian\u002FUbuntu）\n",[167,123260,123261,123263,123265],{"class":169,"line":998},[167,123262,118959],{"class":173},[167,123264,118938],{"class":177},[167,123266,123267],{"class":2268},"   # 更新软件源\n",[167,123269,123270,123272,123274],{"class":169,"line":1010},[167,123271,118959],{"class":173},[167,123273,181],{"class":177},[167,123275,123276],{"class":2268},"  # 安装软件包\n",[167,123278,123279,123281,123283],{"class":169,"line":1022},[167,123280,118959],{"class":173},[167,123282,28098],{"class":177},[167,123284,123285],{"class":2268},"   # 卸载软件包\n",[40,123287,123288],{"start":191},[43,123289,123290],{},"KDE Dolphin 以root打开",[19,123292,123293],{},"kde5",[26,123295,123297],{"className":118887,"code":123296,"language":118889,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[34,123298,123299],{"__ignoreMap":32},[167,123300,123301,123304,123307,123310,123312,123314,123317,123320,123322,123325,123327],{"class":169,"line":170},[167,123302,123303],{"class":173},"pkexec",[167,123305,123306],{"class":177}," env",[167,123308,123309],{"class":177}," DISPLAY=",[167,123311,30160],{"class":512},[167,123313,30218],{"class":177},[167,123315,123316],{"class":512},"$XAUTHORITY ",[167,123318,123319],{"class":177},"KDE_SESSION_VERSION=",[167,123321,2519],{"class":184},[167,123323,123324],{"class":177}," KDE_FULL_SESSION=",[167,123326,3428],{"class":184},[167,123328,123329],{"class":177}," dolphin\n",[19,123331,123332],{},"kde6",[26,123334,123336],{"className":118887,"code":123335,"language":118889,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[34,123337,123338],{"__ignoreMap":32},[167,123339,123340,123342,123344,123346,123348,123350,123352,123354,123356,123358,123360],{"class":169,"line":170},[167,123341,123303],{"class":173},[167,123343,123306],{"class":177},[167,123345,123309],{"class":177},[167,123347,30160],{"class":512},[167,123349,30218],{"class":177},[167,123351,123316],{"class":512},[167,123353,123319],{"class":177},[167,123355,2544],{"class":184},[167,123357,123324],{"class":177},[167,123359,3428],{"class":184},[167,123361,123329],{"class":177},[2113,123363,123364],{},"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":32,"searchDepth":191,"depth":191,"links":123366},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123026,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123373,"title":123374,"body":123375,"description":25403,"extension":2140,"meta":123389,"navigation":740,"path":123390,"seo":123391,"stem":123392,"__hash__":123393},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123376,"toc":123387},[123377,123380],[10,123378,123374],{"id":123379},"_5-各种环境配置",[19,123381,123382],{},[2439,123383,123386],{"href":123384,"rel":123385},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25887],"电控组环境搭建大全",{"title":32,"searchDepth":191,"depth":191,"links":123388},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123374,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123395,"title":123396,"body":123397,"description":25403,"extension":2140,"meta":123745,"navigation":740,"path":123746,"seo":123747,"stem":123748,"__hash__":123749},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123398,"toc":123737},[123399,123402,123406,123410,123414,123419,123426,123430,123723,123727,123734],[10,123400,123396],{"id":123401},"_6-拓展功能",[14,123403,123405],{"id":123404},"_61-wine","6.1 Wine",[14,123407,123409],{"id":123408},"_62-android","6.2 Android",[494,123411,123413],{"id":123412},"_621-i卡a卡","6.2.1 I卡、A卡",[40,123415,123416],{},[43,123417,123418],{},"Wayland-Waydroid(体验超级好)",[19,123420,123421,123422],{},"Waydroid 官网与安装指南：",[2439,123423,123424],{"href":123424,"rel":123425},"https:\u002F\u002Fwaydro.id\u002F",[25887],[494,123427,123429],{"id":123428},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[40,123431,123432],{},[43,123433,123434,123435,123437,123438,123442,123444,123447,123452,123649],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55707,123436],{},"BlissOS 官网下载：",[2439,123439,123440],{"href":123440,"rel":123441},"https:\u002F\u002Fblissos.org\u002F",[25887],[55707,123443],{},[3528,123445],{"alt":32,"src":123446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[40,123448,123449],{"start":205},[43,123450,123451],{},"比较推荐的配置",[26,123453,123455],{"className":118887,"code":123454,"language":118889,"meta":32,"style":32},"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",[34,123456,123457,123464,123474,123484,123494,123506,123516,123523,123533,123542,123551,123561,123571,123580,123590,123600,123612,123622,123631,123641],{"__ignoreMap":32},[167,123458,123459,123462],{"class":169,"line":170},[167,123460,123461],{"class":173},"qemu-system-x86_64",[167,123463,188],{"class":184},[167,123465,123466,123469,123472],{"class":169,"line":191},[167,123467,123468],{"class":184},"        -M",[167,123470,123471],{"class":177}," q35,vmport=off",[167,123473,188],{"class":184},[167,123475,123476,123479,123482],{"class":169,"line":205},[167,123477,123478],{"class":184},"        -accel",[167,123480,123481],{"class":177}," kvm",[167,123483,188],{"class":184},[167,123485,123486,123489,123492],{"class":169,"line":219},[167,123487,123488],{"class":184},"        -cpu",[167,123490,123491],{"class":177}," qemu64,+sse3,+sse4.2",[167,123493,188],{"class":184},[167,123495,123496,123499,123502,123504],{"class":169,"line":230},[167,123497,123498],{"class":184},"        -smp",[167,123500,123501],{"class":177}," 8,cores=",[167,123503,2494],{"class":184},[167,123505,188],{"class":184},[167,123507,123508,123511,123514],{"class":169,"line":241},[167,123509,123510],{"class":184},"        -m",[167,123512,123513],{"class":177}," 6G",[167,123515,188],{"class":184},[167,123517,123518,123521],{"class":169,"line":261},[167,123519,123520],{"class":184},"        -usb",[167,123522,188],{"class":184},[167,123524,123525,123528,123531],{"class":169,"line":773},[167,123526,123527],{"class":184},"        -device",[167,123529,123530],{"class":177}," virtio-tablet",[167,123532,188],{"class":184},[167,123534,123535,123537,123540],{"class":169,"line":779},[167,123536,123527],{"class":184},[167,123538,123539],{"class":177}," virtio-keyboard",[167,123541,188],{"class":184},[167,123543,123544,123546,123549],{"class":169,"line":785},[167,123545,123527],{"class":184},[167,123547,123548],{"class":177}," usb-tablet",[167,123550,188],{"class":184},[167,123552,123553,123556,123559],{"class":169,"line":790},[167,123554,123555],{"class":184},"        -bios",[167,123557,123558],{"class":177}," OVMF-pure-efi64.fd",[167,123560,188],{"class":184},[167,123562,123563,123566,123569],{"class":169,"line":796},[167,123564,123565],{"class":184},"        -net",[167,123567,123568],{"class":177}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[167,123570,188],{"class":184},[167,123572,123573,123575,123578],{"class":169,"line":802},[167,123574,123565],{"class":184},[167,123576,123577],{"class":177}," nic,model=virtio",[167,123579,188],{"class":184},[167,123581,123582,123585,123588],{"class":169,"line":808},[167,123583,123584],{"class":184},"        -audio",[167,123586,123587],{"class":177}," sdl,model=hda",[167,123589,188],{"class":184},[167,123591,123592,123595,123598],{"class":169,"line":814},[167,123593,123594],{"class":184},"        -display",[167,123596,123597],{"class":177}," sdl,gl=on,show-cursor=on",[167,123599,188],{"class":184},[167,123601,123602,123604,123607,123610],{"class":169,"line":820},[167,123603,123527],{"class":184},[167,123605,123606],{"class":177}," virtio-vga-gl,xres=1920,yres=",[167,123608,123609],{"class":184},"1080",[167,123611,188],{"class":184},[167,123613,123614,123617,123620],{"class":169,"line":826},[167,123615,123616],{"class":184},"        -drive",[167,123618,123619],{"class":177}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[167,123621,188],{"class":184},[167,123623,123624,123626,123629],{"class":169,"line":832},[167,123625,123616],{"class":184},[167,123627,123628],{"class":177}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[167,123630,188],{"class":184},[167,123632,123633,123636,123639],{"class":169,"line":837},[167,123634,123635],{"class":184},"        -monitor",[167,123637,123638],{"class":177}," stdio",[167,123640,188],{"class":184},[167,123642,123643,123646],{"class":169,"line":842},[167,123644,123645],{"class":184},"        -serial",[167,123647,123648],{"class":177}," none\n",[40,123650,123651],{"start":230},[43,123652,123653,123654],{},"常用操作：",[40,123655,123656,123659,123715],{},[43,123657,123658],{},"全屏：Ctrl+Alt+F",[43,123660,123661,123662,123667],{},"adb调试",[40,123663,123664],{},[43,123665,123666],{},"使Linux与Android用ADB连接。",[26,123668,123670],{"className":118887,"code":123669,"language":118889,"meta":32,"style":32},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[34,123671,123672,123677,123688,123693,123705,123710],{"__ignoreMap":32},[167,123673,123674],{"class":169,"line":170},[167,123675,123676],{"class":2268},"# 连接安卓\n",[167,123678,123679,123682,123685],{"class":169,"line":191},[167,123680,123681],{"class":173},"adb",[167,123683,123684],{"class":177}," connect",[167,123686,123687],{"class":184}," 127.0.0.1\n",[167,123689,123690],{"class":169,"line":205},[167,123691,123692],{"class":2268},"# 打开shell\n",[167,123694,123695,123697,123699,123702],{"class":169,"line":219},[167,123696,123681],{"class":173},[167,123698,28900],{"class":184},[167,123700,123701],{"class":177}," 127.0.0.1:5555",[167,123703,123704],{"class":177}," shell\n",[167,123706,123707],{"class":169,"line":230},[167,123708,123709],{"class":2268},"# 使用root权限\n",[167,123711,123712],{"class":169,"line":241},[167,123713,123714],{"class":173},"su\n",[43,123716,123717,123718],{},"中文输入法",[40,123719,123720],{},[43,123721,123722],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123724,123726],{"id":123725},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123728,123729,123730],{},"rEFInd 官网与文档：",[2439,123731,123732],{"href":123732,"rel":123733},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25887],[2113,123735,123736],{},"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":32,"searchDepth":191,"depth":191,"links":123738},[123739,123740,123744],{"id":123404,"depth":191,"text":123405},{"id":123408,"depth":191,"text":123409,"children":123741},[123742,123743],{"id":123412,"depth":205,"text":123413},{"id":123428,"depth":205,"text":123429},{"id":123725,"depth":191,"text":123726},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123396,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123751,"title":123752,"body":123753,"description":25403,"extension":2140,"meta":127052,"navigation":740,"path":127053,"seo":127054,"stem":127055,"__hash__":127056},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123754,"toc":127026},[123755,123758,123762,123765,123772,124022,124025,124097,124100,124104,124108,124113,124116,124119,124122,124127,124130,124133,124136,124141,124144,124149,124152,124155,124160,124163,124168,124171,124175,124179,124182,124187,124190,124204,124207,124210,124219,124222,124231,124234,124237,124246,124249,124258,124261,124264,124273,124276,124279,124294,124297,124300,124309,124314,124317,124320,124329,124332,124341,124344,124353,124356,124365,124370,124373,124381,124386,124389,124398,124401,124409,124414,124417,124426,124429,124432,124436,124439,124444,124447,124452,124466,124471,124476,124487,124492,124498,124503,124518,124523,124526,124531,124536,124541,124549,124554,124561,124566,124577,124582,124585,124589,124592,124595,124600,124603,124622,124627,124630,124639,124644,124647,124669,124672,124702,124705,124710,124713,124727,124732,124751,124754,124757,124762,124774,124779,124784,124787,124792,124795,124810,124813,124818,124823,124827,124832,124872,124875,124879,124885,124891,124896,124899,124906,124911,124918,124921,124924,124931,124945,124948,125008,125011,125025,125037,125040,125043,125046,125110,125113,125116,125119,125139,125142,125147,125154,125158,125161,125165,125170,125175,125179,125182,125185,125227,125232,125235,125257,125272,125274,125279,125291,125351,125353,125355,125409,125411,125413,125419,125424,125427,125432,125436,125439,125501,125506,125509,125511,125515,125527,125609,125611,125613,125667,125673,125675,125679,125684,125686,125691,125695,125715,125750,125754,125757,125760,125763,125770,125773,125785,125788,125803,125806,125825,125873,125876,125893,125896,125910,125915,125918,125927,125942,125954,125992,125997,126006,126011,126016,126042,126051,126055,126059,126064,126067,126071,126075,126080,126083,126088,126091,126096,126099,126104,126107,126111,126116,126119,126124,126127,126131,126136,126139,126144,126147,126152,126155,126159,126164,126167,126172,126175,126180,126183,126187,126192,126195,126200,126203,126208,126211,126216,126219,126224,126227,126232,126235,126239,126244,126247,126252,126259,126263,126268,126271,126276,126279,126283,126288,126291,126294,126297,126300,126303,126307,126310,126320,126325,126330,126352,126357,126362,126369,126373,126378,126381,126384,126389,126392,126395,126398,126401,126404,126407,126410,126413,126416,126419,126422,126425,126430,126435,126440,126445,126450,126455,126460,126463,126467,126470,126474,126479,126484,126489,126494,126498,126504,126512,126517,126520,126525,126540,126543,126548,126582,126597,126600,126655,126681,126693,126696,126705,126708,126723,126728,126731,126737,126742,126745,126750,126753,126758,126763,126770,126773,126788,126791,126826,126831,126839,126877,126880,126883,126888,126891,126896,126907,126941,126946,126949,126958,126963,126969,126972,126977,126986,126991,126994,126997,127002,127010,127013,127018,127023],[10,123756,123752],{"id":123757},"_7-其他操作",[14,123759,123761],{"id":123760},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123763,123764],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123766,123767,123768,123771],{},"进入工控机的硬盘目录，进入",[34,123769,123770],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,123773,123777],{"className":123774,"code":123775,"language":123776,"meta":32,"style":32},"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",[34,123778,123779,123787,123798,123805,123812,123824,123831,123843,123854,123865,123872,123879,123886,123898,123910,123917,123929,123941,123948,123960,123972,123984,123995,124002,124013],{"__ignoreMap":32},[167,123780,123781,123784],{"class":169,"line":170},[167,123782,123783],{"class":516},"network",[167,123785,123786],{"class":512},": \n",[167,123788,123789,123792,123794,123796],{"class":169,"line":191},[167,123790,123791],{"class":516},"  version",[167,123793,53435],{"class":512},[167,123795,2287],{"class":184},[167,123797,4710],{"class":512},[167,123799,123800,123803],{"class":169,"line":205},[167,123801,123802],{"class":516},"  wifis",[167,123804,123786],{"class":512},[167,123806,123807,123810],{"class":169,"line":219},[167,123808,123809],{"class":516},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[167,123811,123786],{"class":512},[167,123813,123814,123817,123819,123822],{"class":169,"line":230},[167,123815,123816],{"class":516},"      renderer",[167,123818,53435],{"class":512},[167,123820,123821],{"class":177},"NetworkManager",[167,123823,4710],{"class":512},[167,123825,123826,123829],{"class":169,"line":241},[167,123827,123828],{"class":516},"      match",[167,123830,123786],{"class":512},[167,123832,123833,123836,123838,123841],{"class":169,"line":261},[167,123834,123835],{"class":516},"        name",[167,123837,53435],{"class":512},[167,123839,123840],{"class":177},"\"wlan0\"",[167,123842,4710],{"class":512},[167,123844,123845,123848,123850,123852],{"class":169,"line":773},[167,123846,123847],{"class":516},"      dhcp4",[167,123849,53435],{"class":512},[167,123851,3428],{"class":184},[167,123853,4710],{"class":512},[167,123855,123856,123859,123861,123863],{"class":169,"line":779},[167,123857,123858],{"class":516},"      dhcp6",[167,123860,53435],{"class":512},[167,123862,3428],{"class":184},[167,123864,4710],{"class":512},[167,123866,123867,123870],{"class":169,"line":785},[167,123868,123869],{"class":516},"      access-points",[167,123871,123786],{"class":512},[167,123873,123874,123877],{"class":169,"line":790},[167,123875,123876],{"class":177},"        \"EMIS_Vinci_Robocon_5G\"",[167,123878,123786],{"class":512},[167,123880,123881,123884],{"class":169,"line":796},[167,123882,123883],{"class":516},"          auth",[167,123885,123786],{"class":512},[167,123887,123888,123891,123893,123896],{"class":169,"line":802},[167,123889,123890],{"class":516},"            key-management",[167,123892,53435],{"class":512},[167,123894,123895],{"class":177},"\"psk\"",[167,123897,4710],{"class":512},[167,123899,123900,123903,123905,123908],{"class":169,"line":808},[167,123901,123902],{"class":516},"            password",[167,123904,53435],{"class":512},[167,123906,123907],{"class":177},"\"vinci666\"",[167,123909,4710],{"class":512},[167,123911,123912,123915],{"class":169,"line":814},[167,123913,123914],{"class":516},"          networkmanager",[167,123916,123786],{"class":512},[167,123918,123919,123922,123924,123927],{"class":169,"line":820},[167,123920,123921],{"class":516},"            uuid",[167,123923,53435],{"class":512},[167,123925,123926],{"class":177},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[167,123928,4710],{"class":512},[167,123930,123931,123934,123936,123939],{"class":169,"line":826},[167,123932,123933],{"class":516},"            name",[167,123935,53435],{"class":512},[167,123937,123938],{"class":177},"\"EMIS_Vinci_Robocon_5G\"",[167,123940,4710],{"class":512},[167,123942,123943,123946],{"class":169,"line":832},[167,123944,123945],{"class":516},"            passthrough",[167,123947,123786],{"class":512},[167,123949,123950,123953,123955,123958],{"class":169,"line":837},[167,123951,123952],{"class":516},"              wifi-security.auth-alg",[167,123954,53435],{"class":512},[167,123956,123957],{"class":177},"\"open\"",[167,123959,4710],{"class":512},[167,123961,123962,123965,123967,123970],{"class":169,"line":842},[167,123963,123964],{"class":516},"              ipv6.addr-gen-mode",[167,123966,53435],{"class":512},[167,123968,123969],{"class":177},"\"default\"",[167,123971,4710],{"class":512},[167,123973,123974,123977,123979,123982],{"class":169,"line":860},[167,123975,123976],{"class":516},"              ipv6.ip6-privacy",[167,123978,53435],{"class":512},[167,123980,123981],{"class":177},"\"-1\"",[167,123983,4710],{"class":512},[167,123985,123986,123989,123991,123993],{"class":169,"line":876},[167,123987,123988],{"class":516},"              proxy._",[167,123990,53435],{"class":512},[167,123992,9682],{"class":177},[167,123994,4710],{"class":512},[167,123996,123997,124000],{"class":169,"line":887},[167,123998,123999],{"class":516},"      networkmanager",[167,124001,123786],{"class":512},[167,124003,124004,124007,124009,124011],{"class":169,"line":892},[167,124005,124006],{"class":516},"        uuid",[167,124008,53435],{"class":512},[167,124010,123926],{"class":177},[167,124012,4710],{"class":512},[167,124014,124015,124017,124019],{"class":169,"line":907},[167,124016,123835],{"class":516},[167,124018,53435],{"class":512},[167,124020,124021],{"class":177},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124023,124024],{},"将其改为新wifi的名和密码：",[26,124026,124028],{"className":123774,"code":124027,"language":123776,"meta":32,"style":32},"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",[34,124029,124030,124036,124045,124051,124058,124067,124075,124081,124087],{"__ignoreMap":32},[167,124031,124032,124034],{"class":169,"line":170},[167,124033,123783],{"class":516},[167,124035,857],{"class":512},[167,124037,124038,124040,124042],{"class":169,"line":191},[167,124039,123791],{"class":516},[167,124041,53435],{"class":512},[167,124043,124044],{"class":184},"2\n",[167,124046,124047,124049],{"class":169,"line":205},[167,124048,123802],{"class":516},[167,124050,857],{"class":512},[167,124052,124053,124056],{"class":169,"line":219},[167,124054,124055],{"class":516},"    wlan0",[167,124057,857],{"class":512},[167,124059,124060,124062,124064],{"class":169,"line":230},[167,124061,123847],{"class":516},[167,124063,53435],{"class":512},[167,124065,124066],{"class":184},"true\n",[167,124068,124069,124071,124073],{"class":169,"line":241},[167,124070,123858],{"class":516},[167,124072,53435],{"class":512},[167,124074,124066],{"class":184},[167,124076,124077,124079],{"class":169,"line":261},[167,124078,123869],{"class":516},[167,124080,857],{"class":512},[167,124082,124083,124085],{"class":169,"line":773},[167,124084,123876],{"class":177},[167,124086,857],{"class":512},[167,124088,124089,124092,124094],{"class":169,"line":779},[167,124090,124091],{"class":516},"          password",[167,124093,53435],{"class":512},[167,124095,124096],{"class":177},"\"vinci666\"\n",[19,124098,124099],{},"工控机开机即可连上网。",[14,124101,124103],{"id":124102},"_72-ssh远程开发","7.2 SSH远程开发",[494,124105,124107],{"id":124106},"_721-环境准备","7.2.1 环境准备",[19,124109,124110],{},[2354,124111,124112],{},"1.硬件准备",[19,124114,124115],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124117,124118],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124120,124121],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124123,124124],{},[2354,124125,124126],{},"2.设置固定IP",[19,124128,124129],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124131,124132],{},"1.进入设置界面",[19,124134,124135],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124137,124138],{},[3528,124139],{"alt":32,"src":124140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124142,124143],{},"2.配置所连接的网络",[19,124145,124146],{},[3528,124147],{"alt":32,"src":124148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124150,124151],{},"3.设置固定IP",[19,124153,124154],{},"查看当前IP地址。",[19,124156,124157],{},[3528,124158],{"alt":32,"src":124159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124161,124162],{},"设置固定IP。",[19,124164,124165],{},[3528,124166],{"alt":32,"src":124167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124169,124170],{},"至此，IP配置完毕。",[494,124172,124174],{"id":124173},"_722-环境搭建","7.2.2 环境搭建",[19,124176,124177],{},[2354,124178,27773],{},[19,124180,124181],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124183,124184],{},[2354,124185,124186],{},"实现",[19,124188,124189],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[40,124191,124192,124195,124198,124201],{},[43,124193,124194],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[43,124196,124197],{},"远程主机启动SSH服务；",[43,124199,124200],{},"本地主机登陆远程主机；",[43,124202,124203],{},"实现数据传输。",[19,124205,124206],{},"1.安装SSH客户端与服务端",[19,124208,124209],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,124211,124213],{"className":122407,"code":124212,"language":122409,"meta":122410,"style":32}," sudo apt install openssh-server\n",[34,124214,124215],{"__ignoreMap":32},[167,124216,124217],{"class":169,"line":170},[167,124218,124212],{},[19,124220,124221],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,124223,124225],{"className":122407,"code":124224,"language":122409,"meta":122410,"style":32},"sudo apt install openssh-client\n",[34,124226,124227],{"__ignoreMap":32},[167,124228,124229],{"class":169,"line":170},[167,124230,124224],{},[19,124232,124233],{},"2.远程主机启动SSH服务",[19,124235,124236],{},"远程主机启动 ssh 服务命令如下：",[26,124238,124240],{"className":122407,"code":124239,"language":122409,"meta":122410,"style":32},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[34,124241,124242],{"__ignoreMap":32},[167,124243,124244],{"class":169,"line":170},[167,124245,124239],{},[19,124247,124248],{},"启动后可使用如下命令查看服务是否正常运行：",[26,124250,124252],{"className":122407,"code":124251,"language":122409,"meta":122410,"style":32},"ps -e | grep ssh\n",[34,124253,124254],{"__ignoreMap":32},[167,124255,124256],{"class":169,"line":170},[167,124257,124251],{},[19,124259,124260],{},"如果启动成功，会包含 sshd 程序。",[19,124262,124263],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,124265,124267],{"className":122407,"code":124266,"language":122409,"meta":122410,"style":32},"sudo systemctl enable ssh\n",[34,124268,124269],{"__ignoreMap":32},[167,124270,124271],{"class":169,"line":170},[167,124272,124266],{},[19,124274,124275],{},"3.本地远程登录",[19,124277,124278],{},"登录远程主机可以调用如下命令:",[26,124280,124282],{"className":118887,"code":124281,"language":118889,"meta":32,"style":32},"ssh -X 用户名@ip地址\n",[34,124283,124284],{"__ignoreMap":32},[167,124285,124286,124288,124291],{"class":169,"line":170},[167,124287,123238],{"class":173},[167,124289,124290],{"class":184}," -X",[167,124292,124293],{"class":177}," 用户名@ip地址\n",[19,124295,124296],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124298,124299],{},"如果退出，可以调用exit命令：",[26,124301,124303],{"className":122407,"code":124302,"language":122409,"meta":122410,"style":32},"exit\n",[34,124304,124305],{"__ignoreMap":32},[167,124306,124307],{"class":169,"line":170},[167,124308,124302],{},[19,124310,124311],{},[2354,124312,124313],{},"4.实现数据传输",[19,124315,124316],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124318,124319],{},"上传文件指令格式如下：",[26,124321,124323],{"className":122407,"code":124322,"language":122409,"meta":122410,"style":32},"scp 本地文件路径 账号@ip:路径\n",[34,124324,124325],{"__ignoreMap":32},[167,124326,124327],{"class":169,"line":170},[167,124328,124322],{},[19,124330,124331],{},"上传文件夹指令格式如下：",[26,124333,124335],{"className":122407,"code":124334,"language":122409,"meta":122410,"style":32},"scp -r 本地文件夹路径 账号@ip:路径\n",[34,124336,124337],{"__ignoreMap":32},[167,124338,124339],{"class":169,"line":170},[167,124340,124334],{},[19,124342,124343],{},"下载文件指令格式如下：",[26,124345,124347],{"className":122407,"code":124346,"language":122409,"meta":122410,"style":32},"scp 账号@ip:路径 本地文件夹路径\n",[34,124348,124349],{"__ignoreMap":32},[167,124350,124351],{"class":169,"line":170},[167,124352,124346],{},[19,124354,124355],{},"下载文件夹指令格式如下：",[26,124357,124359],{"className":122407,"code":124358,"language":122409,"meta":122410,"style":32},"scp -r 账号@ip:路径 本地文件夹路径\n",[34,124360,124361],{"__ignoreMap":32},[167,124362,124363],{"class":169,"line":170},[167,124364,124358],{},[19,124366,124367],{},[2354,124368,124369],{},"优化",[19,124371,124372],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[40,124374,124375,124378],{},[43,124376,124377],{},"本地生成密钥对；",[43,124379,124380],{},"将公钥上传至远程主机。",[19,124382,124383],{},[2354,124384,124385],{},"1.生成密钥对",[19,124387,124388],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,124390,124392],{"className":122407,"code":124391,"language":122409,"meta":122410,"style":32},"ssh-keygen\n",[34,124393,124394],{"__ignoreMap":32},[167,124395,124396],{"class":169,"line":170},[167,124397,124391],{},[19,124399,124400],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[40,124402,124403,124406],{},[43,124404,124405],{},"id_rsa （私钥）；",[43,124407,124408],{},"id_rsa.pub (公钥)。",[19,124410,124411],{},[2354,124412,124413],{},"2.公钥上传",[19,124415,124416],{},"上传指令如下：",[26,124418,124420],{"className":122407,"code":124419,"language":122409,"meta":122410,"style":32},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[34,124421,124422],{"__ignoreMap":32},[167,124423,124424],{"class":169,"line":170},[167,124425,124419],{},[19,124427,124428],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124430,124431],{},"以后再远程登录就无需录入密码了。",[494,124433,124435],{"id":124434},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124437,124438],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124440,124441],{},[2354,124442,124443],{},"1.准备工作",[19,124445,124446],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124448,124449],{},[2354,124450,124451],{},"2.为VScode安装远程开发插件",[19,124453,124454,124455,124458,124459,124462,124463,423],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[34,124456,124457],{},"扩展：商店","的搜索栏输入",[34,124460,124461],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[34,124464,124465],{},"安装",[19,124467,124468],{},[3528,124469],{"alt":32,"src":124470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124472,124473],{},[2354,124474,124475],{},"3.配置远程连接",[19,124477,124478,124479,124482,124483,124486],{},"步骤1：使用快捷键",[34,124480,124481],{},"ctrl + shift + p","打开命令输入窗口，并输入",[34,124484,124485],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124488,124489],{},[3528,124490],{"alt":32,"src":124491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124493,124494,124495,423],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[34,124496,124497],{},"Add New SSH Host",[19,124499,124500],{},[3528,124501],{"alt":32,"src":124502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124504,124505,124506,124509,124510,124513,124514,124517],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[34,124507,124508],{},"ssh +X ubuntu@192.168.43.164","，其中，",[34,124511,124512],{},"ubuntu","需要替换为你的登录用户名，",[34,124515,124516],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124519,124520],{},[3528,124521],{"alt":32,"src":124522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124524,124525],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124527,124528],{},[3528,124529],{"alt":32,"src":124530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124532,124533],{},[3528,124534],{"alt":32,"src":124535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124537,124538],{},[2354,124539,124540],{},"4.使用",[19,124542,124543,124544,124482,124546,124548],{},"步骤1：继续使用快捷键",[34,124545,124481],{},[34,124547,124485],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124550,124551],{},[3528,124552],{"alt":32,"src":124553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124555,124556,124557,124560],{},"或者，也可以点击侧边栏的",[34,124558,124559],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124562,124563],{},[3528,124564],{"alt":32,"src":124565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124567,124568,124569,124572,124573,124576],{},"步骤2：选择菜单栏的",[34,124570,124571],{},"文件","下的",[34,124574,124575],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124578,124579],{},[3528,124580],{"alt":32,"src":124581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124583,124584],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124586,124588],{"id":124587},"_73-远程桌面","7.3 远程桌面",[19,124590,124591],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124593,124594],{},"我们选择使用VNC来看。",[40,124596,124597],{},[43,124598,124599],{},"安装VNC服务器：",[19,124601,124602],{},"这里以TigerVNC为例进行安装：",[26,124604,124606],{"className":118887,"code":124605,"language":118889,"meta":32,"style":32},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[34,124607,124608],{"__ignoreMap":32},[167,124609,124610,124612,124614,124616,124619],{"class":169,"line":170},[167,124611,174],{"class":173},[167,124613,118908],{"class":177},[167,124615,181],{"class":177},[167,124617,124618],{"class":177}," tigervnc-standalone-server",[167,124620,124621],{"class":177}," tigervnc-common\n",[40,124623,124624],{"start":191},[43,124625,124626],{},"设置VNC密码：",[19,124628,124629],{},"为VNC用户设置密码，运行以下命令：",[26,124631,124633],{"className":118887,"code":124632,"language":118889,"meta":32,"style":32},"vncpasswd\n",[34,124634,124635],{"__ignoreMap":32},[167,124636,124637],{"class":169,"line":170},[167,124638,124632],{"class":173},[40,124640,124641],{"start":205},[43,124642,124643],{},"配置VNC启动脚本:",[19,124645,124646],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,124648,124650],{"className":118887,"code":124649,"language":118889,"meta":32,"style":32},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[34,124651,124652,124661],{"__ignoreMap":32},[167,124653,124654,124656,124658],{"class":169,"line":170},[167,124655,696],{"class":173},[167,124657,699],{"class":184},[167,124659,124660],{"class":177}," ~\u002F.vnc\n",[167,124662,124663,124666],{"class":169,"line":191},[167,124664,124665],{"class":173},"nano",[167,124667,124668],{"class":177}," ~\u002F.vnc\u002Fxstartup\n",[19,124670,124671],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,124673,124675],{"className":118887,"code":124674,"language":118889,"meta":32,"style":32},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[34,124676,124677,124682,124690,124697],{"__ignoreMap":32},[167,124678,124679],{"class":169,"line":170},[167,124680,124681],{"class":2268},"#!\u002Fbin\u002Fsh\n",[167,124683,124684,124687],{"class":169,"line":191},[167,124685,124686],{"class":184},"unset",[167,124688,124689],{"class":177}," SESSION_MANAGER\n",[167,124691,124692,124694],{"class":169,"line":205},[167,124693,124686],{"class":184},[167,124695,124696],{"class":177}," DBUS_SESSION_BUS_ADDRESS\n",[167,124698,124699],{"class":169,"line":219},[167,124700,124701],{"class":173},"gnome-session\n",[19,124703,124704],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[40,124706,124707],{"start":219},[43,124708,124709],{},"给予执行权限：",[19,124711,124712],{},"为xstartup文件设置执行权限：",[26,124714,124716],{"className":118887,"code":124715,"language":118889,"meta":32,"style":32},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[34,124717,124718],{"__ignoreMap":32},[167,124719,124720,124722,124725],{"class":169,"line":170},[167,124721,26633],{"class":173},[167,124723,124724],{"class":177}," +x",[167,124726,124668],{"class":177},[40,124728,124729],{"start":230},[43,124730,124731],{},"启动VNC服务器：",[26,124733,124735],{"className":118887,"code":124734,"language":118889,"meta":32,"style":32},"vncserver -geometry 1920x1080 -localhost=0\n",[34,124736,124737],{"__ignoreMap":32},[167,124738,124739,124742,124745,124748],{"class":169,"line":170},[167,124740,124741],{"class":173},"vncserver",[167,124743,124744],{"class":184}," -geometry",[167,124746,124747],{"class":177}," 1920x1080",[167,124749,124750],{"class":184}," -localhost=0\n",[19,124752,124753],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124755,124756],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[40,124758,124759],{"start":241},[43,124760,124761],{},"查看已开启的VNC服务器：",[26,124763,124765],{"className":118887,"code":124764,"language":118889,"meta":32,"style":32},"vncserver -list\n",[34,124766,124767],{"__ignoreMap":32},[167,124768,124769,124771],{"class":169,"line":170},[167,124770,124741],{"class":173},[167,124772,124773],{"class":184}," -list\n",[19,124775,124776],{},[3528,124777],{"alt":32,"src":124778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[40,124780,124781],{"start":261},[43,124782,124783],{},"连接到VNC服务器：",[19,124785,124786],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[40,124788,124789],{"start":773},[43,124790,124791],{},"停止VNC服务器：",[19,124793,124794],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,124796,124798],{"className":118887,"code":124797,"language":118889,"meta":32,"style":32},"vncserver -kill :1\n",[34,124799,124800],{"__ignoreMap":32},[167,124801,124802,124804,124807],{"class":169,"line":170},[167,124803,124741],{"class":173},[167,124805,124806],{"class":184}," -kill",[167,124808,124809],{"class":177}," :1\n",[19,124811,124812],{},"将:1替换为你实际使用的显示编号。",[19,124814,124815],{},[3528,124816],{"alt":32,"src":124817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124819,124820],{},[3528,124821],{"alt":32,"src":124822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124824,124826],{"id":124825},"_74-usb端口设置","7.4 USB端口设置",[19,124828,124829],{},[2354,124830,124831],{},"首先先配置好权限",[26,124833,124835],{"className":118887,"code":124834,"language":118889,"meta":32,"style":32},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[34,124836,124837,124842,124855,124862,124867],{"__ignoreMap":32},[167,124838,124839],{"class":169,"line":170},[167,124840,124841],{"class":2268},"# 将用户权限提高\n",[167,124843,124844,124846,124848,124850,124853],{"class":169,"line":191},[167,124845,174],{"class":173},[167,124847,28591],{"class":177},[167,124849,28594],{"class":184},[167,124851,124852],{"class":177}," dialout",[167,124854,28599],{"class":512},[167,124856,124857,124859],{"class":169,"line":205},[167,124858,28618],{"class":173},[167,124860,124861],{"class":177}," dialout\n",[167,124863,124864],{"class":169,"line":219},[167,124865,124866],{"class":2268},"# 查看下面命令是否输出dialout（若输出才正常）\n",[167,124868,124869],{"class":169,"line":230},[167,124870,124871],{"class":173},"groups\n",[19,124873,124874],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[494,124876,124878],{"id":124877},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124880,124881,124884],{},[2354,124882,124883],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124886,124887,124890],{},[2354,124888,124889],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124892,124893],{},[2354,124894,124895],{},"流程如下：",[19,124897,124898],{},"（1）.查找设备idVendor和idProduct",[19,124900,124901,124902,124905],{},"接入两个USB设备，在终端调用指令",[34,124903,124904],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124907,124908],{},[3528,124909],{"alt":32,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124912,124913,124914,124917],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[34,124915,124916],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124919,124920],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124922,124923],{},"（2）.编写映射规则",[19,124925,124926,124927,124930],{},"在",[34,124928,124929],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,124932,124934],{"className":118887,"code":124933,"language":118889,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[34,124935,124936],{"__ignoreMap":32},[167,124937,124938,124940,124942],{"class":169,"line":170},[167,124939,174],{"class":173},[167,124941,120174],{"class":177},[167,124943,124944],{"class":177}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124946,124947],{},"输入如下内容：",[26,124949,124951],{"className":118887,"code":124950,"language":118889,"meta":32,"style":32},"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",[34,124952,124953,124983],{"__ignoreMap":32},[167,124954,124955,124958,124960,124963,124966,124969,124972,124974,124977,124980],{"class":169,"line":170},[167,124956,124957],{"class":512},"KERNEL",[167,124959,523],{"class":731},[167,124961,124962],{"class":177},"=\"ttyUSB*\",",[167,124964,124965],{"class":173}," ATTRS",[167,124967,124968],{"class":177},"{idVendor}==",[167,124970,124971],{"class":173},"\"10c4\"",[167,124973,2578],{"class":173},[167,124975,124976],{"class":177}," ATTRS{idProduct}==\"ea60\",",[167,124978,124979],{"class":177}," MODE:=\"0777\",",[167,124981,124982],{"class":177}," SYMLINK+=\"mylidar\"\n",[167,124984,124985,124987,124989,124991,124993,124995,124998,125000,125003,125005],{"class":169,"line":191},[167,124986,124957],{"class":512},[167,124988,523],{"class":731},[167,124990,124962],{"class":177},[167,124992,124965],{"class":173},[167,124994,124968],{"class":177},[167,124996,124997],{"class":173},"\"1a86\"",[167,124999,2578],{"class":173},[167,125001,125002],{"class":177}," ATTRS{idProduct}==\"7523\",",[167,125004,124979],{"class":177},[167,125006,125007],{"class":177}," SYMLINK+=\"mycar\"\n",[19,125009,125010],{},"代码解释：",[3205,125012,125013,125016,125019,125022],{},[43,125014,125015],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[43,125017,125018],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[43,125020,125021],{},"SYMLINK是符号连接，即绑定的别名；",[43,125023,125024],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125026,125027,125028,125031,125034],{},"***小提示：***",[25580,125029,125030],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[34,125032,125033],{},"\u002Fetc\u002Fudev\u002Frule.d",[25580,125035,125036],{},"目录即可。",[19,125038,125039],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125041,125042],{},"（3）.使规则生效",[19,125044,125045],{},"在终端下输入如下指令：",[26,125047,125049],{"className":118887,"code":125048,"language":118889,"meta":32,"style":32},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[34,125050,125051,125056,125068,125079,125083,125088,125101],{"__ignoreMap":32},[167,125052,125053],{"class":169,"line":170},[167,125054,125055],{"class":2268},"# Ubuntu用下方命令\n",[167,125057,125058,125060,125062,125065],{"class":169,"line":191},[167,125059,174],{"class":173},[167,125061,121639],{"class":177},[167,125063,125064],{"class":177}," udev",[167,125066,125067],{"class":177}," reload\n",[167,125069,125070,125072,125074,125076],{"class":169,"line":205},[167,125071,174],{"class":173},[167,125073,121639],{"class":177},[167,125075,125064],{"class":177},[167,125077,125078],{"class":177}," restart\n",[167,125080,125081],{"class":169,"line":219},[167,125082,741],{"emptyLinePlaceholder":740},[167,125084,125085],{"class":169,"line":230},[167,125086,125087],{"class":2268},"#Fedora用下方命令\n",[167,125089,125090,125092,125095,125098],{"class":169,"line":241},[167,125091,174],{"class":173},[167,125093,125094],{"class":177}," udevadm",[167,125096,125097],{"class":177}," control",[167,125099,125100],{"class":184}," --reload\n",[167,125102,125103,125105,125107],{"class":169,"line":261},[167,125104,174],{"class":173},[167,125106,125094],{"class":177},[167,125108,125109],{"class":177}," trigger\n",[19,125111,125112],{},"再重新插拔设备即可。",[19,125114,125115],{},"（4）.测试",[19,125117,125118],{},"终端下输入如下指令",[26,125120,125122],{"className":118887,"code":125121,"language":118889,"meta":32,"style":32},"ll \u002Fdev | grep ttyUSB\n",[34,125123,125124],{"__ignoreMap":32},[167,125125,125126,125129,125132,125134,125136],{"class":169,"line":170},[167,125127,125128],{"class":173},"ll",[167,125130,125131],{"class":177}," \u002Fdev",[167,125133,27130],{"class":731},[167,125135,32250],{"class":173},[167,125137,125138],{"class":177}," ttyUSB\n",[19,125140,125141],{},"运行结果如下：",[19,125143,125144],{},[3528,125145],{"alt":32,"src":125146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125148,125149,125150,125153],{},"也可以多次插拔USB设备，会发现设备端口",[34,125151,125152],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125155,125156],{},[2354,125157,119555],{},[19,125159,125160],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[494,125162,125164],{"id":125163},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125166,125167,125169],{},[2354,125168,124883],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125171,125172,125174],{},[2354,125173,124889],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125176,125177],{},[2354,125178,124895],{},[19,125180,125181],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125183,125184],{},"调用如下指令查看第一台雷达的USB信息：",[26,125186,125188],{"className":118887,"code":125187,"language":118889,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[34,125189,125190,125210],{"__ignoreMap":32},[167,125191,125192,125195,125197,125200,125203,125205,125207],{"class":169,"line":170},[167,125193,125194],{"class":173},"udevadm",[167,125196,71809],{"class":177},[167,125198,125199],{"class":184}," --attribute-walk",[167,125201,125202],{"class":184}," --name=\u002Fdev\u002FttyUSB0",[167,125204,27130],{"class":731},[167,125206,32250],{"class":173},[167,125208,125209],{"class":177}," KERNELS\n",[167,125211,125212,125214,125216,125218,125221,125223,125225],{"class":169,"line":191},[167,125213,125194],{"class":173},[167,125215,71809],{"class":177},[167,125217,125199],{"class":184},[167,125219,125220],{"class":184}," --name=\u002Fdev\u002FttyACM0",[167,125222,27130],{"class":731},[167,125224,32250],{"class":173},[167,125226,125209],{"class":177},[19,125228,125229],{},[3528,125230],{"alt":32,"src":125231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125233,125234],{},"调用如下指令查看第二台雷达的USB信息：",[26,125236,125238],{"className":118887,"code":125237,"language":118889,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[34,125239,125240],{"__ignoreMap":32},[167,125241,125242,125244,125246,125248,125251,125253,125255],{"class":169,"line":170},[167,125243,125194],{"class":173},[167,125245,71809],{"class":177},[167,125247,125199],{"class":184},[167,125249,125250],{"class":184}," --name=\u002Fdev\u002FttyUSB1",[167,125252,27130],{"class":731},[167,125254,32250],{"class":173},[167,125256,125209],{"class":177},[19,125258,125259,125260,125263,125264,125267,125268,125271],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[34,125261,125262],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[34,125265,125266],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2354,125269,125270],{},"唯一性标识","”。",[19,125273,124923],{},[19,125275,124926,125276,125278],{},[34,125277,124929],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,125280,125281],{"className":118887,"code":124933,"language":118889,"meta":32,"style":32},[34,125282,125283],{"__ignoreMap":32},[167,125284,125285,125287,125289],{"class":169,"line":170},[167,125286,174],{"class":173},[167,125288,120174],{"class":177},[167,125290,124944],{"class":177},[26,125292,125294],{"className":118887,"code":125293,"language":118889,"meta":32,"style":32},"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",[34,125295,125296,125325],{"__ignoreMap":32},[167,125297,125298,125300,125302,125304,125307,125309,125312,125315,125317,125320,125322],{"class":169,"line":170},[167,125299,124957],{"class":512},[167,125301,523],{"class":731},[167,125303,124962],{"class":177},[167,125305,125306],{"class":512}," KERNELS",[167,125308,523],{"class":731},[167,125310,125311],{"class":177},"=\"1-1.3:1.0\",",[167,125313,125314],{"class":173}," MODE:",[167,125316,523],{"class":177},[167,125318,125319],{"class":173},"\"0777\"",[167,125321,2578],{"class":173},[167,125323,125324],{"class":177}," SYMLINK+=\"rplidar_front\"\n",[167,125326,125327,125329,125331,125333,125335,125337,125340,125342,125344,125346,125348],{"class":169,"line":191},[167,125328,124957],{"class":512},[167,125330,523],{"class":731},[167,125332,124962],{"class":177},[167,125334,125306],{"class":512},[167,125336,523],{"class":731},[167,125338,125339],{"class":177},"=\"1-1.4:1.0\",",[167,125341,125314],{"class":173},[167,125343,523],{"class":177},[167,125345,125319],{"class":173},[167,125347,2578],{"class":173},[167,125349,125350],{"class":177}," SYMLINK+=\"rplidar_back\"\n",[19,125352,125042],{},[19,125354,125045],{},[26,125356,125357],{"className":118887,"code":125048,"language":118889,"meta":32,"style":32},[34,125358,125359,125363,125373,125383,125387,125391,125401],{"__ignoreMap":32},[167,125360,125361],{"class":169,"line":170},[167,125362,125055],{"class":2268},[167,125364,125365,125367,125369,125371],{"class":169,"line":191},[167,125366,174],{"class":173},[167,125368,121639],{"class":177},[167,125370,125064],{"class":177},[167,125372,125067],{"class":177},[167,125374,125375,125377,125379,125381],{"class":169,"line":205},[167,125376,174],{"class":173},[167,125378,121639],{"class":177},[167,125380,125064],{"class":177},[167,125382,125078],{"class":177},[167,125384,125385],{"class":169,"line":219},[167,125386,741],{"emptyLinePlaceholder":740},[167,125388,125389],{"class":169,"line":230},[167,125390,125087],{"class":2268},[167,125392,125393,125395,125397,125399],{"class":169,"line":241},[167,125394,174],{"class":173},[167,125396,125094],{"class":177},[167,125398,125097],{"class":177},[167,125400,125100],{"class":184},[167,125402,125403,125405,125407],{"class":169,"line":261},[167,125404,174],{"class":173},[167,125406,125094],{"class":177},[167,125408,125109],{"class":177},[19,125410,125112],{},[19,125412,125115],{},[19,125414,125118,125415,125418],{},[34,125416,125417],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125420,125421],{},[3528,125422],{"alt":32,"src":125423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125425,125426],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125428,125429,125431],{},[2354,125430,119555],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[494,125433,125435],{"id":125434},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125437,125438],{},"（1）.查看所连接的主机USB接口的信息",[26,125440,125442],{"className":118887,"code":125441,"language":118889,"meta":32,"style":32},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[34,125443,125444,125474],{"__ignoreMap":32},[167,125445,125446,125448,125450,125453,125455,125457,125459,125461,125464,125467,125469,125472],{"class":169,"line":170},[167,125447,125194],{"class":173},[167,125449,71809],{"class":177},[167,125451,125452],{"class":184}," -a",[167,125454,699],{"class":184},[167,125456,30438],{"class":512},[167,125458,125194],{"class":173},[167,125460,71809],{"class":177},[167,125462,125463],{"class":184}," -q",[167,125465,125466],{"class":177}," path",[167,125468,379],{"class":184},[167,125470,125471],{"class":177}," \u002Fdev\u002FttyACM0",[167,125473,873],{"class":512},[167,125475,125476,125478,125480,125482,125484,125486,125488,125490,125492,125494,125496,125499],{"class":169,"line":191},[167,125477,125194],{"class":173},[167,125479,71809],{"class":177},[167,125481,125452],{"class":184},[167,125483,699],{"class":184},[167,125485,30438],{"class":512},[167,125487,125194],{"class":173},[167,125489,71809],{"class":177},[167,125491,125463],{"class":184},[167,125493,125466],{"class":177},[167,125495,379],{"class":184},[167,125497,125498],{"class":177}," \u002Fdev\u002FttyUSB0",[167,125500,873],{"class":512},[19,125502,125503],{},[3528,125504],{"alt":32,"src":125505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125507,125508],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125510,124923],{},[19,125512,124926,125513,125278],{},[34,125514,124929],{},[26,125516,125517],{"className":118887,"code":124933,"language":118889,"meta":32,"style":32},[34,125518,125519],{"__ignoreMap":32},[167,125520,125521,125523,125525],{"class":169,"line":170},[167,125522,174],{"class":173},[167,125524,120174],{"class":177},[167,125526,124944],{"class":177},[26,125528,125530],{"className":118887,"code":125529,"language":118889,"meta":32,"style":32},"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",[34,125531,125532,125560,125586],{"__ignoreMap":32},[167,125533,125534,125536,125538,125541,125543,125545,125547,125549,125552,125555,125557],{"class":169,"line":170},[167,125535,124957],{"class":512},[167,125537,523],{"class":731},[167,125539,125540],{"class":177},"=\"ttyACM*\",",[167,125542,124965],{"class":173},[167,125544,124968],{"class":177},[167,125546,124997],{"class":173},[167,125548,2578],{"class":173},[167,125550,125551],{"class":177}," ATTRS{idProduct}==\"55d4\",",[167,125553,125554],{"class":177}," ATTRS{serial}==\"0001\",",[167,125556,124979],{"class":177},[167,125558,125559],{"class":177}," SYMLINK+=\"ttyACM_MCU\"\n",[167,125561,125562,125564,125566,125568,125570,125572,125574,125576,125578,125581,125583],{"class":169,"line":191},[167,125563,124957],{"class":512},[167,125565,523],{"class":731},[167,125567,125540],{"class":177},[167,125569,124965],{"class":173},[167,125571,124968],{"class":177},[167,125573,124997],{"class":173},[167,125575,2578],{"class":173},[167,125577,125551],{"class":177},[167,125579,125580],{"class":177}," ATTRS{serial}==\"0002\",",[167,125582,124979],{"class":177},[167,125584,125585],{"class":177}," SYMLINK+=\"ttyACM_Lidar\"\n",[167,125587,125588,125590,125592,125594,125596,125598,125600,125602,125604,125606],{"class":169,"line":205},[167,125589,124957],{"class":512},[167,125591,523],{"class":731},[167,125593,124962],{"class":177},[167,125595,124965],{"class":173},[167,125597,124968],{"class":177},[167,125599,124997],{"class":173},[167,125601,2578],{"class":173},[167,125603,125002],{"class":177},[167,125605,124979],{"class":177},[167,125607,125608],{"class":177}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125610,125042],{},[19,125612,125045],{},[26,125614,125615],{"className":118887,"code":125048,"language":118889,"meta":32,"style":32},[34,125616,125617,125621,125631,125641,125645,125649,125659],{"__ignoreMap":32},[167,125618,125619],{"class":169,"line":170},[167,125620,125055],{"class":2268},[167,125622,125623,125625,125627,125629],{"class":169,"line":191},[167,125624,174],{"class":173},[167,125626,121639],{"class":177},[167,125628,125064],{"class":177},[167,125630,125067],{"class":177},[167,125632,125633,125635,125637,125639],{"class":169,"line":205},[167,125634,174],{"class":173},[167,125636,121639],{"class":177},[167,125638,125064],{"class":177},[167,125640,125078],{"class":177},[167,125642,125643],{"class":169,"line":219},[167,125644,741],{"emptyLinePlaceholder":740},[167,125646,125647],{"class":169,"line":230},[167,125648,125087],{"class":2268},[167,125650,125651,125653,125655,125657],{"class":169,"line":241},[167,125652,174],{"class":173},[167,125654,125094],{"class":177},[167,125656,125097],{"class":177},[167,125658,125100],{"class":184},[167,125660,125661,125663,125665],{"class":169,"line":261},[167,125662,174],{"class":173},[167,125664,125094],{"class":177},[167,125666,125109],{"class":177},[19,125668,125669,125670],{},"再重新插拔设备即可，或者 ",[2354,125671,125672],{},"直接重启系统。",[19,125674,125115],{},[19,125676,125118,125677,125418],{},[34,125678,125417],{},[19,125680,125681],{},[3528,125682],{"alt":32,"src":125683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125685,125426],{},[19,125687,125688,125690],{},[2354,125689,119555],{}," 一些设备可能没有串口号等。",[494,125692,125694],{"id":125693},"_744-其他注意事项","7.4.4 其他注意事项",[19,125696,125697,125698,125700,125701,125704,125705,20436,125708,125711,125712,125714],{},"并非所有的USB设备端口号都是",[34,125699,125152],{},"的格式，比如Arduino的端口号可能是",[34,125702,125703],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[34,125706,125707],{},"videon",[34,125709,125710],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[34,125713,125707],{},"端口，绑定时需要关联的也是该接口。",[19,125716,125717,125718,125721,125722,125725,125726,125728,125729,125732,125733,125736,125737,125740,125741,125740,125744,125740,125747,423],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[34,125719,125720],{},"KERNEL==\"ttyUSB*\"","修改为",[34,125723,125724],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[34,125727,125720],{},"修改为类似于",[34,125730,125731],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[34,125734,125735],{},"video[0,2,4,6]","表示可以绑定的端口为",[34,125738,125739],{},"video0","或",[34,125742,125743],{},"video2",[34,125745,125746],{},"video4",[34,125748,125749],{},"video6",[14,125751,125753],{"id":125752},"_75-挂载内网网页","7.5 挂载内网网页",[19,125755,125756],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125758,125759],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125761,125762],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125764,125765,125766],{},"Termux 下载地址（F-Droid）：",[2439,125767,125768],{"href":125768,"rel":125769},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25887],[19,125771,125772],{},"首先打开app后，先更新软件缓存：",[26,125774,125776],{"className":118887,"code":125775,"language":118889,"meta":32,"style":32},"pkg update\n",[34,125777,125778],{"__ignoreMap":32},[167,125779,125780,125783],{"class":169,"line":170},[167,125781,125782],{"class":173},"pkg",[167,125784,28261],{"class":177},[19,125786,125787],{},"然后换源",[26,125789,125791],{"className":118887,"code":125790,"language":118889,"meta":32,"style":32},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[34,125792,125793],{"__ignoreMap":32},[167,125794,125795,125797,125800],{"class":169,"line":170},[167,125796,124665],{"class":173},[167,125798,125799],{"class":512}," $PREFIX",[167,125801,125802],{"class":177},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125804,125805],{},"将该文件内容替换为下面：",[26,125807,125809],{"className":118887,"code":125808,"language":118889,"meta":32,"style":32},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[34,125810,125811],{"__ignoreMap":32},[167,125812,125813,125816,125819,125822],{"class":169,"line":170},[167,125814,125815],{"class":173},"deb",[167,125817,125818],{"class":177}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[167,125820,125821],{"class":177}," stable",[167,125823,125824],{"class":177}," main\n",[3205,125826,125827,125854],{},[43,125828,125829,125830,125832,125833],{},"如果你使用的是",[34,125831,124665],{},"编辑器：",[3205,125834,125835,125842,125848],{},[43,125836,125837,125838,125841],{},"按 ",[34,125839,125840],{},"Ctrl+O"," 保存文件。",[43,125843,125837,125844,125847],{},[34,125845,125846],{},"Enter"," 确认文件名。",[43,125849,125837,125850,125853],{},[34,125851,125852],{},"Ctrl+X"," 退出编辑器。",[43,125855,125829,125856,125832,125859],{},[34,125857,125858],{},"vim",[3205,125860,125861,125867],{},[43,125862,125837,125863,125866],{},[34,125864,125865],{},"Esc"," 退出编辑模式。",[43,125868,125869,125870,125872],{},"输入 ",[34,125871,120812],{}," 保存并退出。",[19,125874,125875],{},"接下来重新更新软件源：",[26,125877,125879],{"className":118887,"code":125878,"language":118889,"meta":32,"style":32},"pkg update && pkg upgrade\n",[34,125880,125881],{"__ignoreMap":32},[167,125882,125883,125885,125887,125889,125891],{"class":169,"line":170},[167,125884,125782],{"class":173},[167,125886,118938],{"class":177},[167,125888,28209],{"class":512},[167,125890,125782],{"class":173},[167,125892,118924],{"class":177},[19,125894,125895],{},"安装python：",[26,125897,125899],{"className":118887,"code":125898,"language":118889,"meta":32,"style":32},"pkg install python\n",[34,125900,125901],{"__ignoreMap":32},[167,125902,125903,125905,125907],{"class":169,"line":170},[167,125904,125782],{"class":173},[167,125906,181],{"class":177},[167,125908,125909],{"class":177}," python\n",[19,125911,125912,28490],{},[2354,125913,125914],{},"通过Termux访问设备存储",[19,125916,125917],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,125919,125921],{"className":118887,"code":125920,"language":118889,"meta":32,"style":32},"termux-setup-storage\n",[34,125922,125923],{"__ignoreMap":32},[167,125924,125925],{"class":169,"line":170},[167,125926,125920],{"class":173},[40,125928,125929],{},[43,125930,125931,28490,125934],{},[2354,125932,125933],{},"进入HTML文件所在的目录",[40,125935,125936],{},[43,125937,125938,125939,125941],{},"使用",[34,125940,707],{},"命令进入HTML文件所在的目录：",[26,125943,125945],{"className":118887,"code":125944,"language":118889,"meta":32,"style":32},"cd ~\u002Fyour_html_folder\n",[34,125946,125947],{"__ignoreMap":32},[167,125948,125949,125951],{"class":169,"line":170},[167,125950,707],{"class":184},[167,125952,125953],{"class":177}," ~\u002Fyour_html_folder\n",[40,125955,125956],{"start":191},[43,125957,125958,28490,125961,125966,125983],{},[2354,125959,125960],{},"启动Python HTTP服务器",[40,125962,125963],{},[43,125964,125965],{},"运行以下命令启动一个简单的HTTP服务器：",[26,125967,125969],{"className":118887,"code":125968,"language":118889,"meta":32,"style":32},"python -m http.server 8000\n",[34,125970,125971],{"__ignoreMap":32},[167,125972,125973,125975,125977,125980],{"class":169,"line":170},[167,125974,305],{"class":173},[167,125976,286],{"class":184},[167,125978,125979],{"class":177}," http.server",[167,125981,125982],{"class":184}," 8000\n",[40,125984,125985],{"start":205},[43,125986,125987,125988,125991],{},"这会在端口",[34,125989,125990],{},"8000","上启动一个Web服务器。",[3205,125993,125994],{},[43,125995,125996],{},"启动服务器后，Termux会显示日志信息，例如：",[26,125998,126000],{"className":122407,"code":125999,"language":122409,"meta":122410,"style":32},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[34,126001,126002],{"__ignoreMap":32},[167,126003,126004],{"class":169,"line":170},[167,126005,125999],{},[3205,126007,126008],{},[43,126009,126010],{},"这表示服务器已成功启动。",[19,126012,126013],{},[2354,126014,126015],{},"在浏览器中访问HTML文件",[40,126017,126018],{},[43,126019,126020,28490,126023,126028],{},[2354,126021,126022],{},"在同一设备上访问",[40,126024,126025],{},[43,126026,126027],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,126029,126032],{"className":126030,"code":126031,"language":73652,"meta":32,"style":32},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[34,126033,126034],{"__ignoreMap":32},[167,126035,126036,126039],{"class":169,"line":170},[167,126037,126038],{"class":512},"http:",[167,126040,126041],{"class":2268},"\u002F\u002Flocalhost:8000\n",[3205,126043,126044],{},[43,126045,126046,126047,126050],{},"如果HTML文件中有",[34,126048,126049],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126052,126054],{"id":126053},"_76-linux重点知识","7.6 Linux重点知识",[494,126056,126058],{"id":126057},"_761-关于点的说明","7.6.1 关于点的说明",[19,126060,126061],{},[3528,126062],{"alt":32,"src":126063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126065,126066],{},"一点本目录，两点上目录",[494,126068,126070],{"id":126069},"_762-目录","7.6.2 目录",[24024,126072,126074],{"id":126073},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126076,126077],{},[2354,126078,126079],{},"\u002Fboot:",[19,126081,126082],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126084,126085],{},[2354,126086,126087],{},"\u002Fetc:",[19,126089,126090],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126092,126093],{},[2354,126094,126095],{},"\u002Flib：",[19,126097,126098],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126100,126101],{},[2354,126102,126103],{},"\u002Fsys:",[19,126105,126106],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24024,126108,126110],{"id":126109},"_7622-指令集合","7.6.2.2 指令集合",[19,126112,126113],{},[2354,126114,126115],{},"\u002Fbin:",[19,126117,126118],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126120,126121],{},[2354,126122,126123],{},"\u002Fsbin:",[19,126125,126126],{},"只有系统管理员才能使用的程序和指令",[24024,126128,126130],{"id":126129},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126132,126133],{},[2354,126134,126135],{},"\u002Fdev:",[19,126137,126138],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126140,126141],{},[2354,126142,126143],{},"\u002Fmedia:",[19,126145,126146],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126148,126149],{},[2354,126150,126151],{},"\u002Fmnt:",[19,126153,126154],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24024,126156,126158],{"id":126157},"_7624-临时文件","7.6.2.4 临时文件",[19,126160,126161],{},[2354,126162,126163],{},"\u002Frun:",[19,126165,126166],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126168,126169],{},[2354,126170,126171],{},"\u002Flost+found:",[19,126173,126174],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126176,126177],{},[2354,126178,126179],{},"\u002Ftmp:",[19,126181,126182],{},"这个目录是用来存放一些临时文件的",[24024,126184,126186],{"id":126185},"_7625-账户","7.6.2.5 账户",[19,126188,126189],{},[2354,126190,126191],{},"\u002Froot：",[19,126193,126194],{},"系统管理员的用户主目录",[19,126196,126197,28490],{},[2354,126198,126199],{},"\u002Fhome",[19,126201,126202],{},"用户的主目录，以用户的账号命名的",[19,126204,126205,28490],{},[2354,126206,126207],{},"\u002Fusr",[19,126209,126210],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126212,126213],{},[2354,126214,126215],{},"\u002Fusr\u002Fbin：",[19,126217,126218],{},"系统用户使用的应用程序与指令",[19,126220,126221],{},[2354,126222,126223],{},"\u002Fusr\u002Fsbin：",[19,126225,126226],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126228,126229],{},[2354,126230,126231],{},"\u002Fusr\u002Fsrc：",[19,126233,126234],{},"内核源代码默认的放置目录",[24024,126236,126238],{"id":126237},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126240,126241],{},[2354,126242,126243],{},"\u002Fvar：",[19,126245,126246],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126248,126249],{},[2354,126250,126251],{},"\u002Fproc:",[19,126253,126254,126255,126258],{},"管理 ",[2354,126256,126257],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24024,126260,126262],{"id":126261},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126264,126265],{},[2354,126266,126267],{},"\u002Fopt:",[19,126269,126270],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126272,126273],{},[2354,126274,126275],{},"\u002Fsrv:",[19,126277,126278],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[494,126280,126282],{"id":126281},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126284,126285],{},[3528,126286],{"alt":32,"src":126287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126289,126290],{},"windows-->linux:",[19,126292,126293],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126295,126296],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126298,126299],{},"linux传输文件到windows",[19,126301,126302],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[494,126304,126306],{"id":126305},"_764-易忘知识","7.6.4 易忘知识",[19,126308,126309],{},"操作系统内核查看",[26,126311,126312],{"className":118887,"code":122881,"language":118889,"meta":32,"style":32},[34,126313,126314],{"__ignoreMap":32},[167,126315,126316,126318],{"class":169,"line":170},[167,126317,72192],{"class":173},[167,126319,122890],{"class":184},[19,126321,126322],{},[3528,126323],{"alt":32,"src":126324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126326,126327],{},[3528,126328],{"alt":32,"src":126329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,126331,126333],{"className":118887,"code":126332,"language":118889,"meta":32,"style":32},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[34,126334,126335,126347],{"__ignoreMap":32},[167,126336,126337,126339,126342,126345],{"class":169,"line":170},[167,126338,123098],{"class":173},[167,126340,126341],{"class":177}," mvtest",[167,126343,126344],{"class":177}," mvtest2",[167,126346,4710],{"class":512},[167,126348,126349],{"class":169,"line":191},[167,126350,126351],{"class":173},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126353,126354],{},[3528,126355],{"alt":32,"src":126356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126358,126359],{},[3528,126360],{"alt":32,"src":126361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126363,126364,126365,126368],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[34,126366,126367],{},"du -a"," 可以快速查看磁盘使用细节。",[494,126370,126372],{"id":126371},"_765-vim","7.6.5 Vim",[19,126374,126375],{},[3528,126376],{"alt":32,"src":126377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126379,126380],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126382,126383],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126385,126386],{},[2354,126387,126388],{},"1.命令模式：",[19,126390,126391],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126393,126394],{},"x 删除当前光标所在处的字符",[19,126396,126397],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126399,126400],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126402,126403],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126405,126406],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126408,126409],{},"dd 剪切当前行",[19,126411,126412],{},"yy 复制当前行",[19,126414,126415],{},"p 粘贴剪贴板内容到光标下方",[19,126417,126418],{},"P 粘贴剪贴板内容到光标上方",[19,126420,126421],{},"u 撤销上一次操作",[19,126423,126424],{},"ctrl+r 重做上一次操作",[19,126426,126427,126429],{},[2995,126428],{}," 保存文件",[19,126431,126432,126434],{},[2845,126433],{}," 退出Vim编辑器",[19,126436,126437,126439],{},[2845,126438],{},"! 强制退出Vim编辑器，不保存修改",[19,126441,126442],{},[2354,126443,126444],{},"2.输入模式：",[19,126446,126447],{},[3528,126448],{"alt":32,"src":126449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126451,126452],{},[2354,126453,126454],{},"3.底线命令模式：",[19,126456,126457],{},[3528,126458],{"alt":32,"src":126459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126461,126462],{},"按下esc可以退出底线命令模式",[494,126464,126466],{"id":126465},"_766-apt","7.6.6 apt",[19,126468,126469],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[494,126471,126473],{"id":126472},"_767-home与root的区别","7.6.7 home与root的区别",[19,126475,126476],{},[3528,126477],{"alt":32,"src":126478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126480,126481],{},[3528,126482],{"alt":32,"src":126483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126485,126486],{},[3528,126487],{"alt":32,"src":126488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126490,126491],{},[3528,126492],{"alt":32,"src":126493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[494,126495,126497],{"id":126496},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126499,126500],{},[2439,126501,126502],{"href":126502,"rel":126503},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25887],[40,126505,126506,126509],{},[43,126507,126508],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[43,126510,126511],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126513,126514],{},[3528,126515],{"alt":32,"src":126516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126518,126519],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126521,126522],{},[3528,126523],{"alt":32,"src":126524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,126526,126528],{"className":122407,"code":126527,"language":122409,"meta":122410,"style":32},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[34,126529,126530,126535],{"__ignoreMap":32},[167,126531,126532],{"class":169,"line":170},[167,126533,126534],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[167,126536,126537],{"class":169,"line":191},[167,126538,126539],{},".\u002Fpycharm.sh\n",[19,126541,126542],{},"3️⃣创建.desktop文件",[19,126544,126545],{},[2354,126546,126547],{},"原理：",[3205,126549,126550,126560],{},[43,126551,126552,126553,126559],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2354,126554,126555,126558],{},[34,126556,126557],{},".desktop"," 文件"," 来识别应用。",[43,126561,126562,126564,126565],{},[34,126563,126557],{}," 文件相当于一个“应用注册表”，告诉系统：",[3205,126566,126567,126570,126573,126576,126579],{},[43,126568,126569],{},"应用名字（Name）",[43,126571,126572],{},"图标（Icon）",[43,126574,126575],{},"执行命令（Exec）",[43,126577,126578],{},"分类（Categories）",[43,126580,126581],{},"是否需要终端（Terminal）",[26,126583,126585],{"className":122407,"code":126584,"language":122409,"meta":122410,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[34,126586,126587,126592],{"__ignoreMap":32},[167,126588,126589],{"class":169,"line":170},[167,126590,126591],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[167,126593,126594],{"class":169,"line":191},[167,126595,126596],{},"nano pycharm.desktop\n",[19,126598,126599],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,126601,126603],{"className":122407,"code":126602,"language":122409,"meta":122410,"style":32},"[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",[34,126604,126605,126610,126615,126620,126625,126630,126635,126640,126645,126650],{"__ignoreMap":32},[167,126606,126607],{"class":169,"line":170},[167,126608,126609],{},"[Desktop Entry]\n",[167,126611,126612],{"class":169,"line":191},[167,126613,126614],{},"Version=1.0\n",[167,126616,126617],{"class":169,"line":205},[167,126618,126619],{},"Type=Application\n",[167,126621,126622],{"class":169,"line":219},[167,126623,126624],{},"Name=PyCharm\n",[167,126626,126627],{"class":169,"line":230},[167,126628,126629],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[167,126631,126632],{"class":169,"line":241},[167,126633,126634],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[167,126636,126637],{"class":169,"line":261},[167,126638,126639],{},"Comment=JetBrains PyCharm IDE\n",[167,126641,126642],{"class":169,"line":773},[167,126643,126644],{},"Categories=Development;IDE;\n",[167,126646,126647],{"class":169,"line":779},[167,126648,126649],{},"Terminal=false\n",[167,126651,126652],{"class":169,"line":785},[167,126653,126654],{},"StartupWMClass=jetbrains-pycharm\n",[3205,126656,126657,126663,126669,126675],{},[43,126658,126659,126662],{},[34,126660,126661],{},"Exec"," → 点击图标时执行的命令",[43,126664,126665,126668],{},[34,126666,126667],{},"Icon"," → 显示在菜单和桌面上的图标",[43,126670,126671,126674],{},[34,126672,126673],{},"Terminal=false"," → 不打开终端",[43,126676,126677,126680],{},[34,126678,126679],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126682,126683,126684],"blockquote",{},[19,126685,126686,126687,126689,126690],{},"可以理解成 ",[34,126688,126557],{}," 文件是 Linux 的 ",[2354,126691,126692],{},"快捷方式配置文件",[19,126694,126695],{},"4️⃣设置可执行权限",[26,126697,126699],{"className":122407,"code":126698,"language":122409,"meta":122410,"style":32},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[34,126700,126701],{"__ignoreMap":32},[167,126702,126703],{"class":169,"line":170},[167,126704,126698],{},[19,126706,126707],{},"5️⃣桌面图标启动的话如下：",[26,126709,126711],{"className":122407,"code":126710,"language":122409,"meta":122410,"style":32},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[34,126712,126713,126718],{"__ignoreMap":32},[167,126714,126715],{"class":169,"line":170},[167,126716,126717],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[167,126719,126720],{"class":169,"line":191},[167,126721,126722],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[40,126724,126725],{"start":205},[43,126726,126727],{},"下载Appimage文件实现软件的安装",[19,126729,126730],{},"1️⃣先下载appimage",[19,126732,126733],{},[2439,126734,126735],{"href":126735,"rel":126736},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25887],[19,126738,126739],{},[3528,126740],{"alt":32,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126743,126744],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126746,126747],{},[3528,126748],{"alt":32,"src":126749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126751,126752],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126754,126755],{},[3528,126756],{"alt":32,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126759,126760],{},[3528,126761],{"alt":32,"src":126762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126764,126765,126766,126769],{},"3️⃣给他们放在",[34,126767,126768],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126771,126772],{},"4️⃣给软件执行权限",[26,126774,126776],{"className":122407,"code":126775,"language":122409,"meta":122410,"style":32},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[34,126777,126778,126783],{"__ignoreMap":32},[167,126779,126780],{"class":169,"line":170},[167,126781,126782],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[167,126784,126785],{"class":169,"line":191},[167,126786,126787],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126789,126790],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,126792,126794],{"className":118887,"code":126793,"language":118889,"meta":32,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[34,126795,126796,126803,126810,126816],{"__ignoreMap":32},[167,126797,126798,126800],{"class":169,"line":170},[167,126799,707],{"class":184},[167,126801,126802],{"class":177}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[167,126804,126805,126807],{"class":169,"line":191},[167,126806,714],{"class":173},[167,126808,126809],{"class":177}," .\u002Fqqmusic.desktop\n",[167,126811,126812,126814],{"class":169,"line":205},[167,126813,125858],{"class":173},[167,126815,126809],{"class":177},[167,126817,126818,126820,126822,126824],{"class":169,"line":219},[167,126819,174],{"class":173},[167,126821,26601],{"class":177},[167,126823,124724],{"class":177},[167,126825,126809],{"class":177},[19,126827,126828,126830],{},[34,126829,714],{},"：一个 Linux 命令，主要功能是：",[3205,126832,126833,126836],{},[43,126834,126835],{},"如果文件不存在，就创建一个新的空文件",[43,126837,126838],{},"如果文件已存在，就更新该文件的最后修改时间",[26,126840,126842],{"className":122407,"code":126841,"language":122409,"meta":122410,"style":32},"[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",[34,126843,126844,126848,126853,126858,126863,126867,126872],{"__ignoreMap":32},[167,126845,126846],{"class":169,"line":170},[167,126847,126609],{},[167,126849,126850],{"class":169,"line":191},[167,126851,126852],{},"Name=QQ音乐\n",[167,126854,126855],{"class":169,"line":205},[167,126856,126857],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[167,126859,126860],{"class":169,"line":219},[167,126861,126862],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[167,126864,126865],{"class":169,"line":230},[167,126866,126619],{},[167,126868,126869],{"class":169,"line":241},[167,126870,126871],{},"Categories=Audio;Music;Player;\n",[167,126873,126874],{"class":169,"line":261},[167,126875,126876],{},"Comment=QQ Music Client for Linux\n",[19,126878,126879],{},"将文件复制进去",[19,126881,126882],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126884,126885],{},[3528,126886],{"alt":32,"src":126887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126889,126890],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126892,126893],{},[3528,126894],{"alt":32,"src":126895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126897,126898,126899,126902,126903,126906],{},"如果你用的不是KDE，那么也可以直接修改",[34,126900,126901],{},"qqmuic.desktop","：在exec的末尾加上",[34,126904,126905],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,126908,126910],{"className":122407,"code":126909,"language":122409,"meta":122410,"style":32},"[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",[34,126911,126912,126916,126920,126925,126929,126933,126937],{"__ignoreMap":32},[167,126913,126914],{"class":169,"line":170},[167,126915,126609],{},[167,126917,126918],{"class":169,"line":191},[167,126919,126852],{},[167,126921,126922],{"class":169,"line":205},[167,126923,126924],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[167,126926,126927],{"class":169,"line":219},[167,126928,126862],{},[167,126930,126931],{"class":169,"line":230},[167,126932,126619],{},[167,126934,126935],{"class":169,"line":241},[167,126936,126871],{},[167,126938,126939],{"class":169,"line":261},[167,126940,126876],{},[19,126942,126943],{},[3528,126944],{"alt":32,"src":126945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126947,126948],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,126950,126952],{"className":122407,"code":126951,"language":122409,"meta":122410,"style":32},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[34,126953,126954],{"__ignoreMap":32},[167,126955,126956],{"class":169,"line":170},[167,126957,126951],{},[40,126959,126960],{"start":219},[43,126961,126962],{},"去Flathub上安装软件",[19,126964,126965],{},[2439,126966,126967],{"href":126967,"rel":126968},"https:\u002F\u002Fflathub.org\u002F",[25887],[19,126970,126971],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126973,126974],{},[3528,126975],{"alt":32,"src":126976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,126978,126980],{"className":122407,"code":126979,"language":122409,"meta":122410,"style":32},"flatpak install flathub com.obsproject.Studio\n",[34,126981,126982],{"__ignoreMap":32},[167,126983,126984],{"class":169,"line":170},[167,126985,126979],{},[19,126987,126988],{},[3528,126989],{"alt":32,"src":126990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126992,126993],{},"2️⃣运行软件",[19,126995,126996],{},"a.官方方式：",[19,126998,126999],{},[3528,127000],{"alt":32,"src":127001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,127003,127004],{"className":122407,"code":126979,"language":122409,"meta":122410,"style":32},[34,127005,127006],{"__ignoreMap":32},[167,127007,127008],{"class":169,"line":170},[167,127009,126979],{},[19,127011,127012],{},"b.当普通软件运行：",[19,127014,127015],{},[3528,127016],{"alt":32,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127019,127020],{},[3528,127021],{"alt":32,"src":127022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2113,127024,127025],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":191,"depth":191,"links":127027},[127028,127029,127034,127035,127041,127042],{"id":123760,"depth":191,"text":123761},{"id":124102,"depth":191,"text":124103,"children":127030},[127031,127032,127033],{"id":124106,"depth":205,"text":124107},{"id":124173,"depth":205,"text":124174},{"id":124434,"depth":205,"text":124435},{"id":124587,"depth":191,"text":124588},{"id":124825,"depth":191,"text":124826,"children":127036},[127037,127038,127039,127040],{"id":124877,"depth":205,"text":124878},{"id":125163,"depth":205,"text":125164},{"id":125434,"depth":205,"text":125435},{"id":125693,"depth":205,"text":125694},{"id":125752,"depth":191,"text":125753},{"id":126053,"depth":191,"text":126054,"children":127043},[127044,127045,127046,127047,127048,127049,127050,127051],{"id":126057,"depth":205,"text":126058},{"id":126069,"depth":205,"text":126070},{"id":126281,"depth":205,"text":126282},{"id":126305,"depth":205,"text":126306},{"id":126371,"depth":205,"text":126372},{"id":126465,"depth":205,"text":126466},{"id":126472,"depth":205,"text":126473},{"id":126496,"depth":205,"text":126497},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123752,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127058,"title":127059,"body":127060,"description":25403,"extension":2140,"meta":127064,"navigation":740,"path":127065,"seo":127066,"stem":127067,"__hash__":127068},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127061,"toc":127062},[],{"title":32,"searchDepth":191,"depth":191,"links":127063},[],{"category":32277},"\u002Fwiki\u002F2025-01-27-linux",{"title":127059,"description":25403},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127070,"title":127071,"body":127072,"description":127076,"extension":2140,"meta":127467,"navigation":740,"path":127468,"seo":127469,"stem":127470,"__hash__":127471},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127073,"toc":127465},[127074,127077,127081,127098,127101,127154,127158,127160,127200,127209,127213,127216,127457,127462],[19,127075,127076],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127078,127080],{"id":127079},"_1ubuntu环境配置","1.Ubuntu环境配置",[40,127082,127083,127086,127089,127092,127095],{},[43,127084,127085],{},"ubuntu环境换源",[43,127087,127088],{},"安装cuda",[43,127090,127091],{},"安装miniconda",[43,127093,127094],{},"安装pytorch",[43,127096,127097],{},"安装genesis",[19,127099,127100],{},"参考链接：",[26,127102,127104],{"className":161,"code":127103,"language":163,"meta":32,"style":32},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[34,127105,127106],{"__ignoreMap":32},[167,127107,127108,127111,127114,127117,127119,127122,127125,127127,127130,127133,127135,127138,127141,127143,127146,127149,127151],{"class":169,"line":170},[167,127109,127110],{"class":173},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[167,127112,127113],{"class":177},"=blogdetail",[167,127115,127116],{"class":512},"&sharetype",[167,127118,523],{"class":731},[167,127120,127121],{"class":177},"blogdetail",[167,127123,127124],{"class":512},"&sharerId",[167,127126,523],{"class":731},[167,127128,127129],{"class":177},"144728092",[167,127131,127132],{"class":512},"&sharerefer",[167,127134,523],{"class":731},[167,127136,127137],{"class":177},"PC",[167,127139,127140],{"class":512},"&sharesource",[167,127142,523],{"class":731},[167,127144,127145],{"class":177},"qq_69379513",[167,127147,127148],{"class":512},"&sharefrom",[167,127150,523],{"class":731},[167,127152,127153],{"class":177},"from_link\n",[10,127155,127157],{"id":127156},"_2genesis-报错issue","2.Genesis 报错issue",[19,127159,127100],{},[26,127161,127162],{"className":161,"code":127103,"language":163,"meta":32,"style":32},[34,127163,127164],{"__ignoreMap":32},[167,127165,127166,127168,127170,127172,127174,127176,127178,127180,127182,127184,127186,127188,127190,127192,127194,127196,127198],{"class":169,"line":170},[167,127167,127110],{"class":173},[167,127169,127113],{"class":177},[167,127171,127116],{"class":512},[167,127173,523],{"class":731},[167,127175,127121],{"class":177},[167,127177,127124],{"class":512},[167,127179,523],{"class":731},[167,127181,127129],{"class":177},[167,127183,127132],{"class":512},[167,127185,523],{"class":731},[167,127187,127137],{"class":177},[167,127189,127140],{"class":512},[167,127191,523],{"class":731},[167,127193,127145],{"class":177},[167,127195,127148],{"class":512},[167,127197,523],{"class":731},[167,127199,127153],{"class":177},[26,127201,127203],{"className":161,"code":127202,"language":163,"meta":32,"style":32},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[34,127204,127205],{"__ignoreMap":32},[167,127206,127207],{"class":169,"line":170},[167,127208,127202],{"class":173},[10,127210,127212],{"id":127211},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127214,127215],{},"hello_robot.py",[26,127217,127219],{"className":723,"code":127218,"language":305,"meta":32,"style":32},"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",[34,127220,127221,127227,127242,127246,127258,127270,127274,127287,127291,127310,127320,127330,127344,127348,127352,127357,127361,127371,127378,127392,127399,127409,127414,127418,127436,127441,127445,127452],{"__ignoreMap":32},[167,127222,127223,127225],{"class":169,"line":170},[167,127224,732],{"class":731},[167,127226,47305],{"class":512},[167,127228,127229,127232,127235,127237,127239],{"class":169,"line":191},[167,127230,127231],{"class":512},"os.environ[",[167,127233,127234],{"class":177},"'PYOPENGL_PLATFORM'",[167,127236,6475],{"class":512},[167,127238,523],{"class":731},[167,127240,127241],{"class":177}," 'glx'\n",[167,127243,127244],{"class":169,"line":205},[167,127245,741],{"emptyLinePlaceholder":740},[167,127247,127248,127250,127253,127255],{"class":169,"line":219},[167,127249,732],{"class":731},[167,127251,127252],{"class":512}," genesis ",[167,127254,33388],{"class":731},[167,127256,127257],{"class":512}," gs\n",[167,127259,127260,127262,127265,127267],{"class":169,"line":230},[167,127261,32745],{"class":731},[167,127263,127264],{"class":512}," pynput ",[167,127266,732],{"class":731},[167,127268,127269],{"class":512}," keyboard\n",[167,127271,127272],{"class":169,"line":241},[167,127273,741],{"emptyLinePlaceholder":740},[167,127275,127276,127279,127282,127284],{"class":169,"line":261},[167,127277,127278],{"class":512},"gs.init(",[167,127280,127281],{"class":7246},"backend",[167,127283,523],{"class":731},[167,127285,127286],{"class":512},"gs.gpu)\n",[167,127288,127289],{"class":169,"line":773},[167,127290,741],{"emptyLinePlaceholder":740},[167,127292,127293,127296,127298,127301,127304,127306,127308],{"class":169,"line":779},[167,127294,127295],{"class":512},"scene ",[167,127297,523],{"class":731},[167,127299,127300],{"class":512}," gs.Scene(",[167,127302,127303],{"class":7246},"show_viewer",[167,127305,523],{"class":731},[167,127307,33481],{"class":184},[167,127309,873],{"class":512},[167,127311,127312,127315,127317],{"class":169,"line":785},[167,127313,127314],{"class":512},"plane ",[167,127316,523],{"class":731},[167,127318,127319],{"class":512}," scene.add_entity(gs.morphs.Plane())\n",[167,127321,127322,127325,127327],{"class":169,"line":790},[167,127323,127324],{"class":512},"franka ",[167,127326,523],{"class":731},[167,127328,127329],{"class":512}," scene.add_entity(\n",[167,127331,127332,127335,127337,127339,127342],{"class":169,"line":796},[167,127333,127334],{"class":512},"    gs.morphs.MJCF(",[167,127336,47354],{"class":7246},[167,127338,523],{"class":731},[167,127340,127341],{"class":177},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[167,127343,40048],{"class":512},[167,127345,127346],{"class":169,"line":802},[167,127347,873],{"class":512},[167,127349,127350],{"class":169,"line":808},[167,127351,741],{"emptyLinePlaceholder":740},[167,127353,127354],{"class":169,"line":814},[167,127355,127356],{"class":512},"scene.build()\n",[167,127358,127359],{"class":169,"line":820},[167,127360,741],{"emptyLinePlaceholder":740},[167,127362,127363,127365,127368],{"class":169,"line":826},[167,127364,845],{"class":731},[167,127366,127367],{"class":173}," on_press",[167,127369,127370],{"class":512},"(key):\n",[167,127372,127373,127376],{"class":169,"line":832},[167,127374,127375],{"class":731},"    try",[167,127377,857],{"class":512},[167,127379,127380,127382,127385,127387,127390],{"class":169,"line":837},[167,127381,4540],{"class":731},[167,127383,127384],{"class":512}," key.char ",[167,127386,4985],{"class":731},[167,127388,127389],{"class":177}," 'q'",[167,127391,857],{"class":512},[167,127393,127394,127396],{"class":169,"line":842},[167,127395,17758],{"class":731},[167,127397,127398],{"class":184}," False\n",[167,127400,127401,127404,127407],{"class":169,"line":860},[167,127402,127403],{"class":731},"    except",[167,127405,127406],{"class":184}," AttributeError",[167,127408,857],{"class":512},[167,127410,127411],{"class":169,"line":876},[167,127412,127413],{"class":731},"        pass\n",[167,127415,127416],{"class":169,"line":887},[167,127417,741],{"emptyLinePlaceholder":740},[167,127419,127420,127423,127425,127428,127431,127433],{"class":169,"line":892},[167,127421,127422],{"class":512},"listener ",[167,127424,523],{"class":731},[167,127426,127427],{"class":512}," keyboard.Listener(",[167,127429,127430],{"class":7246},"on_press",[167,127432,523],{"class":731},[167,127434,127435],{"class":512},"on_press)\n",[167,127437,127438],{"class":169,"line":907},[167,127439,127440],{"class":512},"listener.start()\n",[167,127442,127443],{"class":169,"line":920},[167,127444,741],{"emptyLinePlaceholder":740},[167,127446,127447,127449],{"class":169,"line":933},[167,127448,110254],{"class":731},[167,127450,127451],{"class":512}," listener.running:\n",[167,127453,127454],{"class":169,"line":946},[167,127455,127456],{"class":512},"    scene.step()\n",[19,127458,127459],{},[3528,127460],{"alt":32,"src":127461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2113,127463,127464],{},"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":32,"searchDepth":191,"depth":191,"links":127466},[],{"category":25405},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127071,"description":127076},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127473,"title":127474,"body":127475,"description":25403,"extension":2140,"meta":127490,"navigation":740,"path":127491,"seo":127492,"stem":127493,"__hash__":127494},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127476,"toc":127487},[127477,127480,127484],[10,127478,127474],{"id":127479},"_1-基础知识",[14,127481,127483],{"id":127482},"_11-js的组成","1.1 js的组成",[19,127485,127486],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":32,"searchDepth":191,"depth":191,"links":127488},[127489],{"id":127482,"depth":191,"text":127483},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127474,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127496,"title":127497,"body":127498,"description":25403,"extension":2140,"meta":127637,"navigation":740,"path":127638,"seo":127639,"stem":127640,"__hash__":127641},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127499,"toc":127625},[127500,127503,127507,127510,127514,127524,127528,127531,127534,127537,127541,127548,127554,127558,127564,127575,127579,127582,127586,127589,127593,127596,127600,127603,127607,127610,127613,127616,127619,127622],[10,127501,127497],{"id":127502},"_2-vscode必备内容",[14,127504,127506],{"id":127505},"_21-标签分类","2.1 标签分类",[19,127508,127509],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127511,127513],{"id":127512},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127515,127516,127517,127519,127520,127523],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[34,127518,2427],{}," 然后按 ",[34,127521,127522],{},"Tab","，快速自动生成基本结构。",[14,127525,127527],{"id":127526},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127529,127530],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127532,127533],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127535,127536],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127538,127540],{"id":127539},"_24-视图缩放","2.4 视图缩放",[19,127542,127543,127544,127547],{},"缩放视图 ",[34,127545,127546],{},"ctrl+"," 可实现代码增大。",[19,127549,127550,127553],{},[34,127551,127552],{},"ctrl-"," 可实现代码减小。",[14,127555,127557],{"id":127556},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127559,127560,127561,423],{},"VSCode 新建文件快捷键为 ",[34,127562,127563],{},"ctrl+N",[19,127565,127566,127567,127570,127571,127574],{},"保存快捷键为 ",[34,127568,127569],{},"ctrl+S","，将文本保存为 ",[34,127572,127573],{},".html"," 文件。",[14,127576,127578],{"id":127577},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127580,127581],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127583,127585],{"id":127584},"_27-vscode-icons","2.7 vscode-icons",[19,127587,127588],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127590,127592],{"id":127591},"_28-easy-less","2.8 Easy LESS",[19,127594,127595],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127597,127599],{"id":127598},"_29-会了吧插件","2.9 会了吧插件",[19,127601,127602],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127604,127606],{"id":127605},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127608,127609],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127611,127612],{},"②选定多个相同的单词:ctrl+D",[19,127614,127615],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127617,127618],{},"④全局替换某些单词:ctrl+h",[19,127620,127621],{},"⑤快速定位到某一行:ctrl+g",[19,127623,127624],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":32,"searchDepth":191,"depth":191,"links":127626},[127627,127628,127629,127630,127631,127632,127633,127634,127635,127636],{"id":127505,"depth":191,"text":127506},{"id":127512,"depth":191,"text":127513},{"id":127526,"depth":191,"text":127527},{"id":127539,"depth":191,"text":127540},{"id":127556,"depth":191,"text":127557},{"id":127577,"depth":191,"text":127578},{"id":127584,"depth":191,"text":127585},{"id":127591,"depth":191,"text":127592},{"id":127598,"depth":191,"text":127599},{"id":127605,"depth":191,"text":127606},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127497,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127643,"title":127644,"body":127645,"description":25403,"extension":2140,"meta":127804,"navigation":740,"path":127805,"seo":127806,"stem":127807,"__hash__":127808},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127646,"toc":127796},[127647,127650,127654,127664,127670,127676,127680,127689,127693,127698,127701,127704,127708,127711,127721,127730,127739,127748,127758,127765,127770,127775,127788],[10,127648,127644],{"id":127649},"_3-html文本与容器标签",[14,127651,127653],{"id":127652},"_31-标题标签","3.1 标题标签",[19,127655,127656,127659,127660,127663],{},[34,127657,127658],{},"\u003Ch1>","我是一级标签",[34,127661,127662],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127665,127666,127659,127668],{},[34,127667,127658],{},[34,127669,127662],{},[19,127671,124926,127672,127675],{},[34,127673,127674],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127677,127679],{"id":127678},"_32-段落标签","3.2 段落标签",[19,127681,127682,127685,127686],{},[34,127683,127684],{},"\u003Cp>","....",[34,127687,127688],{},"\u003C\u002Fp>",[14,127690,127692],{"id":127691},"_33-换行标签","3.3 换行标签",[19,127694,127695],{},[34,127696,127697],{},"\u003Cbr \u002F>",[19,127699,127700],{},"具有强制换行的作用",[19,127702,127703],{},"单标签",[14,127705,127707],{"id":127706},"_34-文本格式化标签","3.4 文本格式化标签",[19,127709,127710],{},"提供粗体、斜体和下划线等效果",[19,127712,127713,127714,449,127717,127720],{},"加粗：",[34,127715,127716],{},"\u003Cstrong>...\u003C\u002Fstrong>",[34,127718,127719],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127722,127723,127724,449,127727,127720],{},"斜体：",[34,127725,127726],{},"\u003Cem>...\u003C\u002Fem>",[34,127728,127729],{},"\u003Ci>...\u003C\u002Fi>",[19,127731,127732,127733,449,127736,127720],{},"删除线：",[34,127734,127735],{},"\u003Cdel>...\u003C\u002Fdel>",[34,127737,127738],{},"\u003Cs>...\u003C\u002Fs>",[19,127740,127741,127742,449,127745,127720],{},"下划线：",[34,127743,127744],{},"\u003Cins>...\u003C\u002Fins>",[34,127746,127747],{},"\u003Cu>...\u003C\u002Fu>",[14,127749,127751,127752,20436,127755,104284],{"id":127750},"_35-div和span标签","3.5 ",[34,127753,127754],{},"\u003Cdiv>",[34,127756,127757],{},"\u003Cspan>",[19,127759,127760,429,127762,127764],{},[34,127761,127754],{},[34,127763,127757],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127766,127767],{},[34,127768,127769],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127771,127772],{},[34,127773,127774],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127776,127777,127778,127780,127781,127783,127784,127787],{},"两者特点：①",[34,127779,127754],{}," 标签用来布局，但一行通常只放一个 ",[34,127782,127754],{},"。可以理解为一个大盒子，独占一行，在 ",[34,127785,127786],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127789,79237,127790,127792,127793,127795],{},[34,127791,127757],{}," 标签也可用于布局，一行可以放多个 ",[34,127794,127757],{},"，可理解为小盒子。",{"title":32,"searchDepth":191,"depth":191,"links":127797},[127798,127799,127800,127801,127802],{"id":127652,"depth":191,"text":127653},{"id":127678,"depth":191,"text":127679},{"id":127691,"depth":191,"text":127692},{"id":127706,"depth":191,"text":127707},{"id":127750,"depth":191,"text":127803},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127644,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127810,"title":127811,"body":127812,"description":25403,"extension":2140,"meta":128009,"navigation":740,"path":128010,"seo":128011,"stem":128012,"__hash__":128013},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127813,"toc":128001},[127814,127817,127821,127824,127830,127837,127843,127849,127852,127855,127858,127861,127864,127867,127870,127874,127877,127880,127883,127889,127895,127901,127908,127912,127918,127924,127927,127930,127936,127942,127948,127951,127954,127958,127961,127971,127977,127981,127990,127994,127997],[10,127815,127811],{"id":127816},"_4-html图像与链接",[14,127818,127820],{"id":127819},"_41-图像标签","4.1 图像标签",[19,127822,127823],{},"（1）标签",[19,127825,127826,127829],{},[34,127827,127828],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127831,127832,127833,127836],{},"src是",[34,127834,127835],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127838,127839,127840],{},"alt:文本，替换文本。图像不能显示的文字 ",[34,127841,127842],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127844,127845,127846],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[34,127847,127848],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127850,127851],{},"width:像素，设置图像的宽度",[19,127853,127854],{},"height:像素，设置图像的高度",[19,127856,127857],{},"border：像素，设置图像的边框粗细",[19,127859,127860],{},"（2）图像标签属性的注意点：",[19,127862,127863],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127865,127866],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127868,127869],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127871,127873],{"id":127872},"_42-路径注意要点","4.2 路径注意要点：",[19,127875,127876],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127878,127879],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127881,127882],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127884,127885,127886],{},"①同一级路径：图像文件位于HTML文件同一级，如",[34,127887,127888],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127890,127891,127892],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[34,127893,127894],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127896,127897,127898],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[34,127899,127900],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127902,127903,127904,2452],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2439,127905,127906],{"href":127906,"rel":127907},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25887],[14,127909,127911],{"id":127910},"_43-超链接标签","4.3 超链接标签",[19,127913,127914,127917],{},[34,127915,127916],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127919,127920,127921],{},"①语法格式：",[34,127922,127923],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127925,127926],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127928,127929],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127931,127932,127933],{},"③链接分类：外部链接：",[34,127934,127935],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127937,127938,127939],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[34,127940,127941],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127943,127944,127945],{},"空链接：如果当时没有确定链接目标时，",[34,127946,127947],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127949,127950],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127952,127953],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127955,127957],{"id":127956},"_44-锚点链接","4.4 锚点链接",[19,127959,127960],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127962,127963,127964,127967,127968],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[34,127965,127966],{},"\u003Ca href=\"#two\">","第二级",[34,127969,127970],{},"\u003C\u002Fa>",[19,127972,127973,127974],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[34,127975,127976],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127978,127980],{"id":127979},"_45-注释标签","4.5 注释标签",[19,127982,127983,127986,127987],{},[34,127984,127985],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[34,127988,127989],{},"ctrl+\u002F",[14,127991,127993],{"id":127992},"_46-特殊字符","4.6 特殊字符",[19,127995,127996],{},"可以实现添加多个空格",[3528,127998],{"style":127999,"src":128000},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":32,"searchDepth":191,"depth":191,"links":128002},[128003,128004,128005,128006,128007,128008],{"id":127819,"depth":191,"text":127820},{"id":127872,"depth":191,"text":127873},{"id":127910,"depth":191,"text":127911},{"id":127956,"depth":191,"text":127957},{"id":127979,"depth":191,"text":127980},{"id":127992,"depth":191,"text":127993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127811,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128015,"title":128016,"body":128017,"description":25403,"extension":2140,"meta":128310,"navigation":740,"path":128311,"seo":128312,"stem":128313,"__hash__":128314},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128018,"toc":128301},[128019,128022,128026,128029,128032,128035,128038,128041,128044,128047,128050,128053,128073,128079,128083,128086,128089,128092,128095,128098,128101,128105,128108,128111,128114,128117,128130,128135,128138,128141,128156,128159,128162,128165,128168,128171,128175,128178,128185,128188,128191,128194,128197,128200,128206,128209,128212,128218,128221,128224,128227,128233,128236,128239,128253,128260,128263,128266,128273,128282,128285,128288,128291,128295,128298],[10,128020,128016],{"id":128021},"_5-html表格列表与表单",[14,128023,128025],{"id":128024},"_51-表格标签","5.1 表格标签",[19,128027,128028],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128030,128031],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128033,128034],{},"②表格基本语法：",[3528,128036],{"style":127999,"src":128037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128039,128040],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3528,128042],{"style":127999,"src":128043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128045,128046],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3528,128048],{"style":127999,"src":128049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128051,128052],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128054,128055,128058,128059,128061,128062,128065,128066,128068,128069,128072],{},[34,128056,128057],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[34,128060,128057],{},"内部必须拥有",[34,128063,128064],{},"\u003Ctr>","标签，一般位于第一行，",[34,128067,128057],{},"比",[34,128070,128071],{},"\u003Cth>","范围广",[19,128074,128075,128078],{},[34,128076,128077],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128080,128082],{"id":128081},"_52-合并单元格","5.2 合并单元格",[19,128084,128085],{},"（1）合并单元格方式：",[19,128087,128088],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128090,128091],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128093,128094],{},"（2）目标单元格：",[19,128096,128097],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128099,128100],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128102,128104],{"id":128103},"_53-列表标签","5.3 列表标签",[19,128106,128107],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128109,128110],{},"①无序列表：",[3528,128112],{"style":127999,"src":128113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128115,128116],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128118,128119,128122,128123,128126,128127,128129],{},[34,128120,128121],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[34,128124,128125],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[34,128128,128121],{},"中输入其他标签或文字是不对的",[19,128131,128132,128134],{},[34,128133,128125],{},"之间相当于一个容器，可以容纳所有元素",[19,128136,128137],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128139,128140],{},"在css中去除前边的小圆点采用如下代码:",[26,128142,128146],{"className":128143,"code":128144,"language":128145,"meta":32,"style":32},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[34,128147,128148],{"__ignoreMap":32},[167,128149,128150,128153],{"class":169,"line":170},[167,128151,128152],{"class":516},"list-style",[167,128154,128155],{"class":512},": none;\n",[19,128157,128158],{},"②有序列表：",[3528,128160],{"style":127999,"src":128161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128163,128164],{},"③自定义列表：",[3528,128166],{"style":127999,"src":128167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3528,128169],{"style":127999,"src":128170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128172,128174],{"id":128173},"_54-表单标签","5.4 表单标签",[19,128176,128177],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128179,128180,128181,128184],{},"（1）表单域：包含单元素的区域，",[34,128182,128183],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3528,128186],{"style":127999,"src":128187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128189,128190],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128192,128193],{},"表单元素提交必须有name属性",[19,128195,128196],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128198,128199],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128201,79214,128202,128205],{},[34,128203,128204],{},"\u003Cinput>","输入表单元素",[3528,128207],{"style":127999,"src":128208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3528,128210],{"style":127999,"src":128211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128213,128214,128215],{},"单选按钮：",[34,128216,128217],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3528,128219],{"style":127999,"src":128220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128222,128223],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3528,128225],{"style":127999,"src":128226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128228,128229,128232],{},[2354,128230,128231],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128234,128235],{},"②select下拉表单元素：可以节约页面控件",[3528,128237],{"style":127999,"src":128238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128240,128241,15822,128243,128246,128247,128249,128250,128252],{},[2354,128242,2241],{},[34,128244,128245],{},"\u003Cselect>","中至少包含一对",[34,128248,104305],{},"；在",[34,128251,104305],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128254,128255,128256,128259],{},"③",[34,128257,128258],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3528,128261],{"style":127999,"src":128262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128264,128265],{},"3行20列",[14,128267,128269,128270,104284],{"id":128268},"_55-lable标签","5.5 ",[34,128271,128272],{},"\u003Clable>",[19,128274,128275,128276,128278,128279,128281],{},"它不是表单标签，但常常与表单标签搭配使用，",[34,128277,128272],{},"标签用于绑定一个表单标签，当点击",[34,128280,128272],{},"标签内的文本",[19,128283,128284],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3528,128286],{"style":127999,"src":128287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3528,128289],{"style":127999,"src":128290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128292,128294],{"id":128293},"_56-实例","5.6 实例",[3528,128296],{"style":127999,"src":128297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2113,128299,128300],{},"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":32,"searchDepth":191,"depth":191,"links":128302},[128303,128304,128305,128306,128307,128309],{"id":128024,"depth":191,"text":128025},{"id":128081,"depth":191,"text":128082},{"id":128103,"depth":191,"text":128104},{"id":128173,"depth":191,"text":128174},{"id":128268,"depth":191,"text":128308},"5.5 \u003Clable>标签",{"id":128293,"depth":191,"text":128294},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128016,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128316,"title":128317,"body":128318,"description":25403,"extension":2140,"meta":128867,"navigation":740,"path":128868,"seo":128869,"stem":128870,"__hash__":128871},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128319,"toc":128842},[128320,128323,128327,128330,128333,128337,128340,128343,128346,128349,128352,128355,128358,128362,128365,128369,128372,128375,128378,128382,128385,128388,128391,128397,128400,128403,128406,128409,128412,128415,128418,128451,128455,128458,128461,128464,128468,128471,128474,128477,128480,128483,128487,128490,128493,128496,128500,128503,128507,128510,128514,128517,128522,128526,128529,128533,128536,128539,128542,128545,128572,128575,128579,128582,128585,128590,128593,128596,128600,128603,128608,128611,128614,128617,128621,128624,128627,128630,128634,128637,128640,128643,128647,128651,128654,128694,128697,128701,128708,128711,128715,128718,128764,128768,128771,128774,128777,128805,128809,128812,128839],[10,128321,128317],{"id":128322},"_6-css语法与文本样式",[14,128324,128326],{"id":128325},"_61-css语法规范","6.1 css语法规范",[19,128328,128329],{},"由两部分组成，选择器及一条或多条声明",[3528,128331],{"style":127999,"src":128332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128334,128335],{},[2354,128336,2241],{},[19,128338,128339],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128341,128342],{},"②属性与属性值以“键值对”的形式出现",[19,128344,128345],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128347,128348],{},"④属性和属性值之间用英文“;”分开",[3528,128350],{"style":127999,"src":128351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3528,128353],{"style":127999,"src":128354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3528,128356],{"style":127999,"src":128357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128359,128361],{"id":128360},"_62-css选择器","6.2 css选择器",[19,128363,128364],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[494,128366,128368],{"id":128367},"_621-标签选择器","6.2.1 标签选择器",[19,128370,128371],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128373,128374],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3528,128376],{"style":127999,"src":128377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[494,128379,128381],{"id":128380},"_622-类选择器","6.2.2 类选择器",[19,128383,128384],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128386,128387],{},"②样例",[3528,128389],{"style":127999,"src":128390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128392,128393,128394,128396],{},"③ ",[2354,128395,128231],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128398,128399],{},"可以理解为给这个标签起了个名字，来表示；",[19,128401,128402],{},"长名称或词组可以使用横线来为选择器命名；",[19,128404,128405],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128407,128408],{},"命名要有意义；",[3528,128410],{"style":127999,"src":128411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128413,128414],{},"类选择器也可以指定特殊的元素p.center{}",[19,128416,128417],{},"p.center和.center都对",[26,128419,128421],{"className":128143,"code":128420,"language":128145,"meta":32,"style":32},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[34,128422,128423,128428,128437,128447],{"__ignoreMap":32},[167,128424,128425],{"class":169,"line":170},[167,128426,128427],{"class":2268},"\u002F* 类选择器指定特殊元素 *\u002F\n",[167,128429,128430,128432,128435],{"class":169,"line":191},[167,128431,19],{"class":516},[167,128433,128434],{"class":173},".center",[167,128436,17598],{"class":512},[167,128438,128439,128441,128443,128445],{"class":169,"line":205},[167,128440,72514],{"class":184},[167,128442,53435],{"class":512},[167,128444,53590],{"class":184},[167,128446,3359],{"class":512},[167,128448,128449],{"class":169,"line":219},[167,128450,3630],{"class":512},[494,128452,128454],{"id":128453},"_623-多类名使用","6.2.3 多类名使用",[19,128456,128457],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3528,128459],{"style":127999,"src":128460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128462,128463],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[494,128465,128467],{"id":128466},"_624-id选择器","6.2.4 id选择器",[19,128469,128470],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128472,128473],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3528,128475],{"style":127999,"src":128476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128478,128479],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128481,128482],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[494,128484,128486],{"id":128485},"_625-通配符选择器","6.2.5 通配符选择器",[19,128488,128489],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128491,128492],{},"* {",[19,128494,128495],{},"color=\"red\"}",[494,128497,128499],{"id":128498},"_626-总结","6.2.6 总结",[3528,128501],{"style":127999,"src":128502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128504,128506],{"id":128505},"_63-css字体属性","6.3 css字体属性",[19,128508,128509],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[494,128511,128513],{"id":128512},"_631-字体系列","6.3.1 字体系列",[19,128515,128516],{},"font-family: '宋体';",[19,128518,128519,128521],{},[2354,128520,2241],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[494,128523,128525],{"id":128524},"_632-字体大小","6.3.2 字体大小",[19,128527,128528],{},"font-size: 20px",[19,128530,128531,28490],{},[2354,128532,128231],{},[19,128534,128535],{},"①px（像素）大小是网页的最常用单位",[19,128537,128538],{},"②谷歌浏览器默认为16px",[19,128540,128541],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128543,128544],{},"④可以给body指定整个页面的大小：会自动引用",[26,128546,128548],{"className":128143,"code":128547,"language":128145,"meta":32,"style":32},"body {\n  font-size: 16px;\n}\n",[34,128549,128550,128556,128568],{"__ignoreMap":32},[167,128551,128552,128554],{"class":169,"line":170},[167,128553,517],{"class":516},[167,128555,17598],{"class":512},[167,128557,128558,128560,128562,128564,128566],{"class":169,"line":191},[167,128559,72614],{"class":184},[167,128561,53435],{"class":512},[167,128563,2801],{"class":184},[167,128565,53490],{"class":731},[167,128567,3359],{"class":512},[167,128569,128570],{"class":169,"line":205},[167,128571,3630],{"class":512},[19,128573,128574],{},"⑤标题标签比较特殊，需要单独指定大小",[494,128576,128578],{"id":128577},"_633-字体粗细","6.3.3 字体粗细",[19,128580,128581],{},"font-weight: bold;",[19,128583,128584],{},"font-weight: 100；",[19,128586,128587,128589],{},[2354,128588,2241],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128591,128592],{},"font-weight= 400;",[19,128594,128595],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[494,128597,128599],{"id":128598},"_634-文字样式","6.3.4 文字样式",[19,128601,128602],{},"font-style: normal；",[19,128604,128605,28490],{},[2354,128606,128607],{},"属性值",[19,128609,128610],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128612,128613],{},"②italic：浏览器会显示斜体的字体样式",[3528,128615],{"style":127999,"src":128616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[494,128618,128620],{"id":128619},"_635-字体符合属性","6.3.5 字体符合属性",[3528,128622],{"style":127999,"src":128623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3528,128625],{"style":127999,"src":128626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128628,128629],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128631,128632,28490],{},[2354,128633,128231],{},[19,128635,128636],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128638,128639],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128641,128642],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128644,128646],{"id":128645},"_64-css-test文本属性","6.4 css test文本属性",[494,128648,128650],{"id":128649},"_641-文本颜色","6.4.1 文本颜色",[19,128652,128653],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,128655,128657],{"className":128143,"code":128656,"language":128145,"meta":32,"style":32},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[34,128658,128659,128664,128670,128680,128685,128690],{"__ignoreMap":32},[167,128660,128661],{"class":169,"line":170},[167,128662,128663],{"class":2268},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[167,128665,128666,128668],{"class":169,"line":191},[167,128667,19],{"class":516},[167,128669,17598],{"class":512},[167,128671,128672,128674,128676,128678],{"class":169,"line":205},[167,128673,72893],{"class":184},[167,128675,53435],{"class":512},[167,128677,59410],{"class":184},[167,128679,3359],{"class":512},[167,128681,128682],{"class":169,"line":219},[167,128683,128684],{"class":2268},"  \u002F* color: #ff0000; *\u002F\n",[167,128686,128687],{"class":169,"line":230},[167,128688,128689],{"class":2268},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[167,128691,128692],{"class":169,"line":241},[167,128693,3630],{"class":512},[3528,128695],{"style":127999,"src":128696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[494,128698,128700],{"id":128699},"_642-对齐文本","6.4.2 对齐文本",[19,128702,128703,128704,128707],{},"text-align属于用于设置元素内文本内容的 ",[2354,128705,128706],{},"水平对齐"," 方式",[19,128709,128710],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[494,128712,128714],{"id":128713},"_643-装饰文本","6.4.3 装饰文本",[19,128716,128717],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,128719,128721],{"className":128143,"code":128720,"language":128145,"meta":32,"style":32},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[34,128722,128723,128729,128739,128743,128749,128760],{"__ignoreMap":32},[167,128724,128725,128727],{"class":169,"line":170},[167,128726,2439],{"class":516},[167,128728,17598],{"class":512},[167,128730,128731,128733,128735,128737],{"class":169,"line":191},[167,128732,72490],{"class":184},[167,128734,53435],{"class":512},[167,128736,56727],{"class":184},[167,128738,3359],{"class":512},[167,128740,128741],{"class":169,"line":205},[167,128742,3630],{"class":512},[167,128744,128745,128747],{"class":169,"line":219},[167,128746,19],{"class":516},[167,128748,17598],{"class":512},[167,128750,128751,128753,128755,128758],{"class":169,"line":230},[167,128752,72490],{"class":184},[167,128754,53435],{"class":512},[167,128756,128757],{"class":184},"underline",[167,128759,3359],{"class":512},[167,128761,128762],{"class":169,"line":241},[167,128763,3630],{"class":512},[494,128765,128767],{"id":128766},"_644-文本缩进","6.4.4 文本缩进",[19,128769,128770],{},"实现文本的第一行首行缩进自己指定的距离",[19,128772,128773],{},"20px往右边走；-20px往左边走",[19,128775,128776],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,128778,128780],{"className":128143,"code":128779,"language":128145,"meta":32,"style":32},"p {\n  text-indent: 2em;\n}\n",[34,128781,128782,128788,128801],{"__ignoreMap":32},[167,128783,128784,128786],{"class":169,"line":170},[167,128785,19],{"class":516},[167,128787,17598],{"class":512},[167,128789,128790,128793,128795,128797,128799],{"class":169,"line":191},[167,128791,128792],{"class":184},"  text-indent",[167,128794,53435],{"class":512},[167,128796,2287],{"class":184},[167,128798,25580],{"class":731},[167,128800,3359],{"class":512},[167,128802,128803],{"class":169,"line":205},[167,128804,3630],{"class":512},[494,128806,128808],{"id":128807},"_645-行间距","6.4.5 行间距",[19,128810,128811],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,128813,128815],{"className":128143,"code":128814,"language":128145,"meta":32,"style":32},"p {\n  line-height: 1.6;\n}\n",[34,128816,128817,128823,128835],{"__ignoreMap":32},[167,128818,128819,128821],{"class":169,"line":170},[167,128820,19],{"class":516},[167,128822,17598],{"class":512},[167,128824,128825,128828,128830,128833],{"class":169,"line":191},[167,128826,128827],{"class":184},"  line-height",[167,128829,53435],{"class":512},[167,128831,128832],{"class":184},"1.6",[167,128834,3359],{"class":512},[167,128836,128837],{"class":169,"line":205},[167,128838,3630],{"class":512},[2113,128840,128841],{},"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":32,"searchDepth":191,"depth":191,"links":128843},[128844,128845,128853,128860],{"id":128325,"depth":191,"text":128326},{"id":128360,"depth":191,"text":128361,"children":128846},[128847,128848,128849,128850,128851,128852],{"id":128367,"depth":205,"text":128368},{"id":128380,"depth":205,"text":128381},{"id":128453,"depth":205,"text":128454},{"id":128466,"depth":205,"text":128467},{"id":128485,"depth":205,"text":128486},{"id":128498,"depth":205,"text":128499},{"id":128505,"depth":191,"text":128506,"children":128854},[128855,128856,128857,128858,128859],{"id":128512,"depth":205,"text":128513},{"id":128524,"depth":205,"text":128525},{"id":128577,"depth":205,"text":128578},{"id":128598,"depth":205,"text":128599},{"id":128619,"depth":205,"text":128620},{"id":128645,"depth":191,"text":128646,"children":128861},[128862,128863,128864,128865,128866],{"id":128649,"depth":205,"text":128650},{"id":128699,"depth":205,"text":128700},{"id":128713,"depth":205,"text":128714},{"id":128766,"depth":205,"text":128767},{"id":128807,"depth":205,"text":128808},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128317,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128873,"title":128874,"body":128875,"description":25403,"extension":2140,"meta":129524,"navigation":740,"path":129525,"seo":129526,"stem":129527,"__hash__":129528},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128876,"toc":129505},[128877,128880,128884,128888,128948,128952,128962,128965,128968,128972,128997,129001,129004,129007,129010,129013,129016,129020,129023,129026,129068,129071,129097,129103,129106,129110,129114,129120,129123,129126,129129,129132,129135,129138,129183,129187,129190,129193,129197,129201,129230,129233,129238,129241,129244,129247,129250,129254,129258,129261,129263,129266,129270,129273,129277,129280,129283,129286,129290,129294,129300,129310,129313,129316,129319,129322,129325,129448,129456,129464,129502],[10,128878,128874],{"id":128879},"_7-css引入方式与选择器进阶",[14,128881,128883],{"id":128882},"_71-css引入方式","7.1 css引入方式",[494,128885,128887],{"id":128886},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,128889,128893],{"className":128890,"code":128891,"language":128892,"meta":32,"style":32},"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",[34,128894,128895,128903,128910,128922,128935,128940],{"__ignoreMap":32},[167,128896,128897,128899,128901],{"class":169,"line":170},[167,128898,513],{"class":512},[167,128900,2113],{"class":516},[167,128902,537],{"class":512},[167,128904,128905,128908],{"class":169,"line":191},[167,128906,128907],{"class":516},"  h1",[167,128909,17598],{"class":512},[167,128911,128912,128915,128917,128920],{"class":169,"line":205},[167,128913,128914],{"class":184},"    color",[167,128916,53435],{"class":512},[167,128918,128919],{"class":184},"blue",[167,128921,3359],{"class":512},[167,128923,128924,128927,128929,128931,128933],{"class":169,"line":219},[167,128925,128926],{"class":184},"    font-size",[167,128928,53435],{"class":512},[167,128930,3000],{"class":184},[167,128932,53490],{"class":731},[167,128934,3359],{"class":512},[167,128936,128937],{"class":169,"line":230},[167,128938,128939],{"class":512},"  }\n",[167,128941,128942,128944,128946],{"class":169,"line":241},[167,128943,575],{"class":512},[167,128945,2113],{"class":516},[167,128947,537],{"class":512},[19,128949,128950,28490],{},[2354,128951,128231],{},[19,128953,79214,128954,128957,128958,128961],{},[34,128955,128956],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[34,128959,128960],{},"\u003Chead>","标签中",[19,128963,128964],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128966,128967],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[494,128969,128971],{"id":128970},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,128973,128975],{"className":128890,"code":128974,"language":128892,"meta":32,"style":32},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[34,128976,128977],{"__ignoreMap":32},[167,128978,128979,128981,128983,128985,128987,128990,128993,128995],{"class":169,"line":170},[167,128980,513],{"class":512},[167,128982,19],{"class":516},[167,128984,64615],{"class":173},[167,128986,523],{"class":512},[167,128988,128989],{"class":177},"\"color: red; font-size: 16px;\"",[167,128991,128992],{"class":512},">这是一个段落\u003C\u002F",[167,128994,19],{"class":516},[167,128996,537],{"class":512},[19,128998,128999,28490],{},[2354,129000,128231],{},[19,129002,129003],{},"①style其实就是标签的属性",[19,129005,129006],{},"②在双引号中间，写法要符合css规范",[19,129008,129009],{},"③可以控制当前的标签设置样式",[19,129011,129012],{},"④书写繁琐，简单时才用",[19,129014,129015],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[494,129017,129019],{"id":129018},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129021,129022],{},"使用最多，单独建一个css文件，然后html引用",[19,129024,129025],{},"①css文件部分： style.css",[26,129027,129029],{"className":128143,"code":129028,"language":128145,"meta":32,"style":32},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[34,129030,129031,129036,129042,129052,129064],{"__ignoreMap":32},[167,129032,129033],{"class":169,"line":170},[167,129034,129035],{"class":2268},"\u002F* style.css *\u002F\n",[167,129037,129038,129040],{"class":169,"line":191},[167,129039,10],{"class":516},[167,129041,17598],{"class":512},[167,129043,129044,129046,129048,129050],{"class":169,"line":205},[167,129045,72893],{"class":184},[167,129047,53435],{"class":512},[167,129049,128919],{"class":184},[167,129051,3359],{"class":512},[167,129053,129054,129056,129058,129060,129062],{"class":169,"line":219},[167,129055,72614],{"class":184},[167,129057,53435],{"class":512},[167,129059,3000],{"class":184},[167,129061,53490],{"class":731},[167,129063,3359],{"class":512},[167,129065,129066],{"class":169,"line":230},[167,129067,3630],{"class":512},[19,129069,129070],{},"②html部分",[26,129072,129074],{"className":128890,"code":129073,"language":128892,"meta":32,"style":32},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[34,129075,129076],{"__ignoreMap":32},[167,129077,129078,129080,129082,129084,129086,129088,129090,129092,129095],{"class":169,"line":170},[167,129079,513],{"class":512},[167,129081,70994],{"class":516},[167,129083,70997],{"class":173},[167,129085,523],{"class":512},[167,129087,71002],{"class":177},[167,129089,63046],{"class":173},[167,129091,523],{"class":512},[167,129093,129094],{"class":177},"\"style.css\"",[167,129096,537],{"class":512},[19,129098,129099,129102],{},[34,129100,129101],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129104,129105],{},"ctrl+0回到页面原来大小",[14,129107,129109],{"id":129108},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[494,129111,129113],{"id":129112},"_721-快速生成html","7.2.1 快速生成html",[19,129115,129116,129117],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[34,129118,129119],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129121,129122],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129124,129125],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129127,129128],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129130,129131],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129133,129134],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129136,129137],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,129139,129141],{"className":128890,"code":129140,"language":128892,"meta":32,"style":32},"\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",[34,129142,129143,129148,129153,129158,129163,129168,129173,129178],{"__ignoreMap":32},[167,129144,129145],{"class":169,"line":170},[167,129146,129147],{"class":2268},"\u003C!-- Emmet 语法示例 -->\n",[167,129149,129150],{"class":169,"line":191},[167,129151,129152],{"class":2268},"\u003C!-- div*3        → 生成3个div -->\n",[167,129154,129155],{"class":169,"line":205},[167,129156,129157],{"class":2268},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[167,129159,129160],{"class":169,"line":219},[167,129161,129162],{"class":2268},"\u003C!-- div+p        → 兄弟div和p -->\n",[167,129164,129165],{"class":169,"line":230},[167,129166,129167],{"class":2268},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[167,129169,129170],{"class":169,"line":241},[167,129171,129172],{"class":2268},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[167,129174,129175],{"class":169,"line":261},[167,129176,129177],{"class":2268},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[167,129179,129180],{"class":169,"line":773},[167,129181,129182],{"class":2268},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[494,129184,129186],{"id":129185},"_722-快速生成css","7.2.2 快速生成css",[19,129188,129189],{},"简写开头",[19,129191,129192],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129194,129196],{"id":129195},"_73-css复合选择器","7.3 css复合选择器",[494,129198,129200],{"id":129199},"_731-后代选择器","7.3.1 后代选择器",[26,129202,129204],{"className":128143,"code":129203,"language":128145,"meta":32,"style":32},".parent .child {\n  color: blue;\n}\n",[34,129205,129206,129216,129226],{"__ignoreMap":32},[167,129207,129208,129211,129214],{"class":169,"line":170},[167,129209,129210],{"class":173},".parent",[167,129212,129213],{"class":173}," .child",[167,129215,17598],{"class":512},[167,129217,129218,129220,129222,129224],{"class":169,"line":191},[167,129219,72893],{"class":184},[167,129221,53435],{"class":512},[167,129223,128919],{"class":184},[167,129225,3359],{"class":512},[167,129227,129228],{"class":169,"line":205},[167,129229,3630],{"class":512},[19,129231,129232],{},"元素1 元素2 {样式声明}",[19,129234,129235],{},[2354,129236,129237],{},"注意点:",[19,129239,129240],{},"①元素1和元素2中间用空格隔开",[19,129242,129243],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129245,129246],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129248,129249],{},"④元素1和元素2可以是任意基础选择器",[494,129251,129253],{"id":129252},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129255,129256],{},[2354,129257,129237],{},[19,129259,129260],{},"①元素1和元素2中间用大于号隔开",[19,129262,129243],{},[19,129264,129265],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[494,129267,129269],{"id":129268},"_733-并集选择器","7.3.3 并集选择器",[19,129271,129272],{},"元素1，元素2 {样式声明}",[19,129274,129275],{},[2354,129276,129237],{},[19,129278,129279],{},"①元素1和元素2中间用逗号隔开",[19,129281,129282],{},"②逗号可以理解为和的意思",[19,129284,129285],{},"③并集选择器通常用于集体声明",[494,129287,129289],{"id":129288},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129291,129292],{},[2354,129293,129237],{},[19,129295,129296,129297,129299],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70994,129298],{},"－:visited－:hover－:active。",[19,129301,129302,129303,129306,129307,27760],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129304,129305],"hover",{}," 、 ",[129308,129309],"first-child",{},[19,129311,129312],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129314,129315],{},"link对没访问的进行设置",[19,129317,129318],{},"vistied对已访问的进行改变",[19,129320,129321],{},"hover鼠标经过就会变",[19,129323,129324],{},"active常按(点)就会变",[26,129326,129328],{"className":128143,"code":129327,"language":128145,"meta":32,"style":32},"\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",[34,129329,129330,129335,129344,129354,129364,129368,129377,129388,129392,129400,129410,129420,129424,129433,129444],{"__ignoreMap":32},[167,129331,129332],{"class":169,"line":170},[167,129333,129334],{"class":2268},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[167,129336,129337,129339,129342],{"class":169,"line":191},[167,129338,2439],{"class":516},[167,129340,129341],{"class":173},":link",[167,129343,17598],{"class":512},[167,129345,129346,129348,129350,129352],{"class":169,"line":205},[167,129347,72893],{"class":184},[167,129349,53435],{"class":512},[167,129351,64358],{"class":184},[167,129353,3359],{"class":512},[167,129355,129356,129358,129360,129362],{"class":169,"line":219},[167,129357,72490],{"class":184},[167,129359,53435],{"class":512},[167,129361,56727],{"class":184},[167,129363,3359],{"class":512},[167,129365,129366],{"class":169,"line":230},[167,129367,3630],{"class":512},[167,129369,129370,129372,129375],{"class":169,"line":241},[167,129371,2439],{"class":516},[167,129373,129374],{"class":173},":visited",[167,129376,17598],{"class":512},[167,129378,129379,129381,129383,129386],{"class":169,"line":261},[167,129380,72893],{"class":184},[167,129382,53435],{"class":512},[167,129384,129385],{"class":184},"purple",[167,129387,3359],{"class":512},[167,129389,129390],{"class":169,"line":773},[167,129391,3630],{"class":512},[167,129393,129394,129396,129398],{"class":169,"line":779},[167,129395,2439],{"class":516},[167,129397,62929],{"class":173},[167,129399,17598],{"class":512},[167,129401,129402,129404,129406,129408],{"class":169,"line":785},[167,129403,72893],{"class":184},[167,129405,53435],{"class":512},[167,129407,56879],{"class":184},[167,129409,3359],{"class":512},[167,129411,129412,129414,129416,129418],{"class":169,"line":790},[167,129413,72490],{"class":184},[167,129415,53435],{"class":512},[167,129417,128757],{"class":184},[167,129419,3359],{"class":512},[167,129421,129422],{"class":169,"line":796},[167,129423,3630],{"class":512},[167,129425,129426,129428,129431],{"class":169,"line":802},[167,129427,2439],{"class":516},[167,129429,129430],{"class":173},":active",[167,129432,17598],{"class":512},[167,129434,129435,129437,129439,129442],{"class":169,"line":808},[167,129436,72893],{"class":184},[167,129438,53435],{"class":512},[167,129440,129441],{"class":184},"green",[167,129443,3359],{"class":512},[167,129445,129446],{"class":169,"line":814},[167,129447,3630],{"class":512},[494,129449,129451,129452,129455],{"id":129450},"_735-伪类选择器","7.3.5 ",[129453,129454],"focus",{},"伪类选择器",[19,129457,129458,129460,129461,129463],{},[129453,129459],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[34,129462,128204],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,129465,129467],{"className":128143,"code":129466,"language":128145,"meta":32,"style":32},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[34,129468,129469,129477,129488,129498],{"__ignoreMap":32},[167,129470,129471,129473,129475],{"class":169,"line":170},[167,129472,55812],{"class":516},[167,129474,63889],{"class":173},[167,129476,17598],{"class":512},[167,129478,129479,129482,129484,129486],{"class":169,"line":191},[167,129480,129481],{"class":184},"  border-color",[167,129483,53435],{"class":512},[167,129485,56879],{"class":184},[167,129487,3359],{"class":512},[167,129489,129490,129492,129494,129496],{"class":169,"line":205},[167,129491,72786],{"class":184},[167,129493,53435],{"class":512},[167,129495,56727],{"class":184},[167,129497,3359],{"class":512},[167,129499,129500],{"class":169,"line":219},[167,129501,3630],{"class":512},[2113,129503,129504],{},"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":32,"searchDepth":191,"depth":191,"links":129506},[129507,129512,129516],{"id":128882,"depth":191,"text":128883,"children":129508},[129509,129510,129511],{"id":128886,"depth":205,"text":128887},{"id":128970,"depth":205,"text":128971},{"id":129018,"depth":205,"text":129019},{"id":129108,"depth":191,"text":129109,"children":129513},[129514,129515],{"id":129112,"depth":205,"text":129113},{"id":129185,"depth":205,"text":129186},{"id":129195,"depth":191,"text":129196,"children":129517},[129518,129519,129520,129521,129522],{"id":129199,"depth":205,"text":129200},{"id":129252,"depth":205,"text":129253},{"id":129268,"depth":205,"text":129269},{"id":129288,"depth":205,"text":129289},{"id":129450,"depth":205,"text":129523},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128874,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129530,"title":129531,"body":129532,"description":25403,"extension":2140,"meta":131455,"navigation":740,"path":131456,"seo":131457,"stem":131458,"__hash__":131459},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129533,"toc":131429},[129534,129537,129541,129550,129554,129580,129585,129588,129591,129594,129597,129601,129604,129614,129622,129626,129661,129666,129669,129672,129675,129678,129682,129685,129694,129698,129711,129716,129719,129722,129725,129729,129732,129736,129739,129794,129797,129828,129831,129885,129889,129892,130058,130181,130184,130187,130190,130193,130197,130200,130204,130207,130210,130214,130217,130248,130275,130303,130306,130310,130336,130379,130383,130477,130480,130507,130510,130513,130516,130519,130522,130525,130528,130531,130534,130538,130595,130622,130626,130674,130678,130719,130721,130724,130727,130730,130733,130737,130829,130832,130835,130838,130842,130965,131166,131170,131174,131177,131180,131183,131187,131190,131193,131218,131221,131224,131227,131230,131233,131237,131245,131307,131310,131368,131371,131374,131377,131380,131383,131386,131389,131426],[10,129535,129531],{"id":129536},"_8-css显示模式与背景特性",[14,129538,129540],{"id":129539},"_81-css元素显示模式","8.1 css元素显示模式",[19,129542,129543,129544,129546,129547,129549],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[34,129545,127754],{},"自己占一行，比如一行可以放多个",[34,129548,127757],{},"，HTML 元素一般分为块元素和行内元素两种类型",[494,129551,129553],{"id":129552},"_811-块元素","8.1.1 块元素",[19,129555,129556,129557,129559,129560,480,129563,480,129565,480,129567,480,129570,480,129573,129576,129577,129579],{},"常见的块元素有",[34,129558,127658],{},"~",[34,129561,129562],{},"\u003Ch6>",[34,129564,127684],{},[34,129566,127754],{},[34,129568,129569],{},"\u003Cul>",[34,129571,129572],{},"\u003Col>",[34,129574,129575],{},"\u003Cli>","等，其中 ",[34,129578,127754],{}," 标签是最典型的块元素",[19,129581,129582],{},[2354,129583,129584],{},"块级元素的特点：",[19,129586,129587],{},"① 比较霸道，自己独占一行。",[19,129589,129590],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129592,129593],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129595,129596],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129598,129599],{},[2354,129600,2241],{},[19,129602,129603],{},"①文字类的元素内不能使用块级元素",[19,129605,79237,129606,129608,129609,129611,129612],{},[34,129607,127684],{}," 标签主要用于存放文字，因此 ",[34,129610,127684],{}," 里面不能放块级元素，特别是不能放",[34,129613,127754],{},[19,129615,129616,129617,129559,129619,129621],{},"⑥同理， ",[34,129618,127658],{},[34,129620,129562],{},"等都是文字类块级标签，里面也不能放其他块级元素",[494,129623,129625],{"id":129624},"_812-行内元素","8.1.2 行内元素",[19,129627,129628,129629,480,129631,480,129634,480,129637,480,129640,480,129643,480,129646,480,129649,480,129652,480,129655,129657,129658,129660],{},"常见的行内元素有 ",[34,129630,127916],{},[34,129632,129633],{},"\u003Cstrong>",[34,129635,129636],{},"\u003Cb>",[34,129638,129639],{},"\u003Cem>",[34,129641,129642],{},"\u003Ci>",[34,129644,129645],{},"\u003Cdel>",[34,129647,129648],{},"\u003Cs>",[34,129650,129651],{},"\u003Cins>",[34,129653,129654],{},"\u003Cu>",[34,129656,127757],{}," 等，其中 ",[34,129659,127757],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129662,129663],{},[2354,129664,129665],{},"特点：",[19,129667,129668],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129670,129671],{},"② 高、宽直接设置是无效的。",[19,129673,129674],{},"③ 默认宽度就是它本身内容的宽度。",[19,129676,129677],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129679,129680],{},[2354,129681,2241],{},[19,129683,129684],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129686,129687,129688,129690,129691,129693],{},"②特殊情况链接 ",[34,129689,127916],{}," 里面可以放块级元素，但是给 ",[34,129692,127916],{}," 转换一下块级模式最安全",[494,129695,129697],{"id":129696},"_813-行内块元素","8.1.3 行内块元素",[19,129699,129700,129701,480,129704,480,129707,129710],{},"在行内元素中有几个特殊的标签 —— ",[34,129702,129703],{},"\u003Cimg \u002F>",[34,129705,129706],{},"\u003Cinput \u002F>",[34,129708,129709],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129712,129713],{},[2354,129714,129715],{},"行内块元素的特点：",[19,129717,129718],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129720,129721],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129723,129724],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[494,129726,129728],{"id":129727},"_814-总结","8.1.4 总结",[3528,129730],{"style":127999,"src":129731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[494,129733,129735],{"id":129734},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129737,129738],{},"①转换为块元素：display:block;",[26,129740,129742],{"className":128143,"code":129741,"language":128145,"meta":32,"style":32},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[34,129743,129744,129749,129755,129766,129778,129790],{"__ignoreMap":32},[167,129745,129746],{"class":169,"line":170},[167,129747,129748],{"class":2268},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[167,129750,129751,129753],{"class":169,"line":191},[167,129752,2439],{"class":516},[167,129754,17598],{"class":512},[167,129756,129757,129760,129762,129764],{"class":169,"line":205},[167,129758,129759],{"class":184},"  display",[167,129761,53435],{"class":512},[167,129763,62858],{"class":184},[167,129765,3359],{"class":512},[167,129767,129768,129770,129772,129774,129776],{"class":169,"line":219},[167,129769,72556],{"class":184},[167,129771,53435],{"class":512},[167,129773,981],{"class":184},[167,129775,53490],{"class":731},[167,129777,3359],{"class":512},[167,129779,129780,129782,129784,129786,129788],{"class":169,"line":230},[167,129781,72776],{"class":184},[167,129783,53435],{"class":512},[167,129785,2601],{"class":184},[167,129787,53490],{"class":731},[167,129789,3359],{"class":512},[167,129791,129792],{"class":169,"line":241},[167,129793,3630],{"class":512},[19,129795,129796],{},"②转换为行内元素：display:inline;",[26,129798,129800],{"className":128143,"code":129799,"language":128145,"meta":32,"style":32},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[34,129801,129802,129807,129813,129824],{"__ignoreMap":32},[167,129803,129804],{"class":169,"line":170},[167,129805,129806],{"class":2268},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[167,129808,129809,129811],{"class":169,"line":191},[167,129810,53609],{"class":516},[167,129812,17598],{"class":512},[167,129814,129815,129817,129819,129822],{"class":169,"line":205},[167,129816,129759],{"class":184},[167,129818,53435],{"class":512},[167,129820,129821],{"class":184},"inline",[167,129823,3359],{"class":512},[167,129825,129826],{"class":169,"line":219},[167,129827,3630],{"class":512},[19,129829,129830],{},"③转换为行内块：display:inline-block;",[26,129832,129834],{"className":128143,"code":129833,"language":128145,"meta":32,"style":32},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[34,129835,129836,129841,129847,129857,129869,129881],{"__ignoreMap":32},[167,129837,129838],{"class":169,"line":170},[167,129839,129840],{"class":2268},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[167,129842,129843,129845],{"class":169,"line":191},[167,129844,167],{"class":516},[167,129846,17598],{"class":512},[167,129848,129849,129851,129853,129855],{"class":169,"line":205},[167,129850,129759],{"class":184},[167,129852,53435],{"class":512},[167,129854,74371],{"class":184},[167,129856,3359],{"class":512},[167,129858,129859,129861,129863,129865,129867],{"class":169,"line":219},[167,129860,72556],{"class":184},[167,129862,53435],{"class":512},[167,129864,2812],{"class":184},[167,129866,53490],{"class":731},[167,129868,3359],{"class":512},[167,129870,129871,129873,129875,129877,129879],{"class":169,"line":230},[167,129872,72776],{"class":184},[167,129874,53435],{"class":512},[167,129876,3150],{"class":184},[167,129878,53490],{"class":731},[167,129880,3359],{"class":512},[167,129882,129883],{"class":169,"line":241},[167,129884,3630],{"class":512},[494,129886,129888],{"id":129887},"_816-小米侧边栏","8.1.6 小米侧边栏",[3528,129890],{"style":127999,"src":129891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,129893,129895],{"className":128890,"code":129894,"language":128892,"meta":32,"style":32},"\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",[34,129896,129897,129902,129917,129936,129955,129974,129993,130012,130031,130050],{"__ignoreMap":32},[167,129898,129899],{"class":169,"line":170},[167,129900,129901],{"class":2268},"\u003C!-- 小米侧边栏案例 -->\n",[167,129903,129904,129906,129908,129910,129912,129915],{"class":169,"line":191},[167,129905,513],{"class":512},[167,129907,53609],{"class":516},[167,129909,55479],{"class":173},[167,129911,523],{"class":512},[167,129913,129914],{"class":177},"\"sidebar\"",[167,129916,537],{"class":512},[167,129918,129919,129921,129923,129925,129927,129929,129932,129934],{"class":169,"line":205},[167,129920,542],{"class":512},[167,129922,2439],{"class":516},[167,129924,63046],{"class":173},[167,129926,523],{"class":512},[167,129928,63051],{"class":177},[167,129930,129931],{"class":512},">手机 电话卡\u003C\u002F",[167,129933,2439],{"class":516},[167,129935,537],{"class":512},[167,129937,129938,129940,129942,129944,129946,129948,129951,129953],{"class":169,"line":219},[167,129939,542],{"class":512},[167,129941,2439],{"class":516},[167,129943,63046],{"class":173},[167,129945,523],{"class":512},[167,129947,63051],{"class":177},[167,129949,129950],{"class":512},">电视 盒子\u003C\u002F",[167,129952,2439],{"class":516},[167,129954,537],{"class":512},[167,129956,129957,129959,129961,129963,129965,129967,129970,129972],{"class":169,"line":230},[167,129958,542],{"class":512},[167,129960,2439],{"class":516},[167,129962,63046],{"class":173},[167,129964,523],{"class":512},[167,129966,63051],{"class":177},[167,129968,129969],{"class":512},">笔记本 平板\u003C\u002F",[167,129971,2439],{"class":516},[167,129973,537],{"class":512},[167,129975,129976,129978,129980,129982,129984,129986,129989,129991],{"class":169,"line":241},[167,129977,542],{"class":512},[167,129979,2439],{"class":516},[167,129981,63046],{"class":173},[167,129983,523],{"class":512},[167,129985,63051],{"class":177},[167,129987,129988],{"class":512},">出行 穿戴\u003C\u002F",[167,129990,2439],{"class":516},[167,129992,537],{"class":512},[167,129994,129995,129997,129999,130001,130003,130005,130008,130010],{"class":169,"line":261},[167,129996,542],{"class":512},[167,129998,2439],{"class":516},[167,130000,63046],{"class":173},[167,130002,523],{"class":512},[167,130004,63051],{"class":177},[167,130006,130007],{"class":512},">智能 路由器\u003C\u002F",[167,130009,2439],{"class":516},[167,130011,537],{"class":512},[167,130013,130014,130016,130018,130020,130022,130024,130027,130029],{"class":169,"line":773},[167,130015,542],{"class":512},[167,130017,2439],{"class":516},[167,130019,63046],{"class":173},[167,130021,523],{"class":512},[167,130023,63051],{"class":177},[167,130025,130026],{"class":512},">健康 儿童\u003C\u002F",[167,130028,2439],{"class":516},[167,130030,537],{"class":512},[167,130032,130033,130035,130037,130039,130041,130043,130046,130048],{"class":169,"line":779},[167,130034,542],{"class":512},[167,130036,2439],{"class":516},[167,130038,63046],{"class":173},[167,130040,523],{"class":512},[167,130042,63051],{"class":177},[167,130044,130045],{"class":512},">耳机 音响\u003C\u002F",[167,130047,2439],{"class":516},[167,130049,537],{"class":512},[167,130051,130052,130054,130056],{"class":169,"line":785},[167,130053,575],{"class":512},[167,130055,53609],{"class":516},[167,130057,537],{"class":512},[26,130059,130061],{"className":128143,"code":130060,"language":128145,"meta":32,"style":32},".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",[34,130062,130063,130072,130082,130095,130107,130119,130131,130141,130152,130156,130166,130177],{"__ignoreMap":32},[167,130064,130065,130068,130070],{"class":169,"line":170},[167,130066,130067],{"class":173},".sidebar",[167,130069,3464],{"class":516},[167,130071,17598],{"class":512},[167,130073,130074,130076,130078,130080],{"class":169,"line":191},[167,130075,129759],{"class":184},[167,130077,53435],{"class":512},[167,130079,62858],{"class":184},[167,130081,3359],{"class":512},[167,130083,130084,130086,130088,130091,130093],{"class":169,"line":205},[167,130085,72556],{"class":184},[167,130087,53435],{"class":512},[167,130089,130090],{"class":184},"234",[167,130092,53490],{"class":731},[167,130094,3359],{"class":512},[167,130096,130097,130099,130101,130103,130105],{"class":169,"line":219},[167,130098,72776],{"class":184},[167,130100,53435],{"class":512},[167,130102,2652],{"class":184},[167,130104,53490],{"class":731},[167,130106,3359],{"class":512},[167,130108,130109,130111,130113,130115,130117],{"class":169,"line":230},[167,130110,128827],{"class":184},[167,130112,53435],{"class":512},[167,130114,2652],{"class":184},[167,130116,53490],{"class":731},[167,130118,3359],{"class":512},[167,130120,130121,130123,130125,130127,130129],{"class":169,"line":241},[167,130122,72811],{"class":184},[167,130124,53435],{"class":512},[167,130126,3150],{"class":184},[167,130128,53490],{"class":731},[167,130130,3359],{"class":512},[167,130132,130133,130135,130137,130139],{"class":169,"line":261},[167,130134,72893],{"class":184},[167,130136,53435],{"class":512},[167,130138,62831],{"class":184},[167,130140,3359],{"class":512},[167,130142,130143,130145,130147,130150],{"class":169,"line":773},[167,130144,72866],{"class":184},[167,130146,53435],{"class":512},[167,130148,130149],{"class":184},"#55585a",[167,130151,3359],{"class":512},[167,130153,130154],{"class":169,"line":779},[167,130155,3630],{"class":512},[167,130157,130158,130160,130162,130164],{"class":169,"line":785},[167,130159,130067],{"class":173},[167,130161,3464],{"class":516},[167,130163,62929],{"class":173},[167,130165,17598],{"class":512},[167,130167,130168,130170,130172,130175],{"class":169,"line":790},[167,130169,72866],{"class":184},[167,130171,53435],{"class":512},[167,130173,130174],{"class":184},"#ff6700",[167,130176,3359],{"class":512},[167,130178,130179],{"class":169,"line":796},[167,130180,3630],{"class":512},[3528,130182],{"style":127999,"src":130183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130185,130186],{},"行高=盒子高度：实现文字的垂直居中",[19,130188,130189],{},"原理讲解：",[3528,130191],{"style":127999,"src":130192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130194,130196],{"id":130195},"_82-css背景","8.2 css背景",[19,130198,130199],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[494,130201,130203],{"id":130202},"_821-背景颜色","8.2.1 背景颜色",[19,130205,130206],{},"background-color:颜色值;",[19,130208,130209],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[494,130211,130213],{"id":130212},"_822-背景图片","8.2.2 背景图片",[19,130215,130216],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,130218,130220],{"className":128143,"code":130219,"language":128145,"meta":32,"style":32},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[34,130221,130222,130228,130244],{"__ignoreMap":32},[167,130223,130224,130226],{"class":169,"line":170},[167,130225,53609],{"class":516},[167,130227,17598],{"class":512},[167,130229,130230,130233,130235,130237,130239,130242],{"class":169,"line":191},[167,130231,130232],{"class":184},"  background-image",[167,130234,53435],{"class":512},[167,130236,63715],{"class":184},[167,130238,898],{"class":512},[167,130240,130241],{"class":7246},"images\u002Fbg.png",[167,130243,4755],{"class":512},[167,130245,130246],{"class":169,"line":205},[167,130247,3630],{"class":512},[68,130249,130250,130259],{},[71,130251,130252],{},[74,130253,130254,130257],{},[77,130255,130256],{"align":79},"参数值",[77,130258,104287],{"align":79},[85,130260,130261,130268],{},[74,130262,130263,130265],{},[90,130264,56727],{"align":79},[90,130266,130267],{"align":79},"无背景图（默认的）",[74,130269,130270,130272],{},[90,130271,63715],{"align":79},[90,130273,130274],{"align":79},"使用绝对或相对地址指定背景图像",[26,130276,130277],{"className":128143,"code":130219,"language":128145,"meta":32,"style":32},[34,130278,130279,130285,130299],{"__ignoreMap":32},[167,130280,130281,130283],{"class":169,"line":170},[167,130282,53609],{"class":516},[167,130284,17598],{"class":512},[167,130286,130287,130289,130291,130293,130295,130297],{"class":169,"line":191},[167,130288,130232],{"class":184},[167,130290,53435],{"class":512},[167,130292,63715],{"class":184},[167,130294,898],{"class":512},[167,130296,130241],{"class":7246},[167,130298,4755],{"class":512},[167,130300,130301],{"class":169,"line":205},[167,130302,3630],{"class":512},[19,130304,130305],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[494,130307,130309],{"id":130308},"_823-背景平铺","8.2.3 背景平铺",[26,130311,130313],{"className":128143,"code":130312,"language":128145,"meta":32,"style":32},"div {\n  background-repeat: no-repeat;\n}\n",[34,130314,130315,130321,130332],{"__ignoreMap":32},[167,130316,130317,130319],{"class":169,"line":170},[167,130318,53609],{"class":516},[167,130320,17598],{"class":512},[167,130322,130323,130326,130328,130330],{"class":169,"line":191},[167,130324,130325],{"class":184},"  background-repeat",[167,130327,53435],{"class":512},[167,130329,63725],{"class":184},[167,130331,3359],{"class":512},[167,130333,130334],{"class":169,"line":205},[167,130335,3630],{"class":512},[68,130337,130338,130346],{},[71,130339,130340],{},[74,130341,130342,130344],{},[77,130343,130256],{"align":79},[77,130345,104287],{"align":79},[85,130347,130348,130356,130363,130371],{},[74,130349,130350,130353],{},[90,130351,130352],{"align":79},"repeat",[90,130354,130355],{"align":79},"背景图像在纵向和横向上平铺（默认的）",[74,130357,130358,130360],{},[90,130359,63725],{"align":79},[90,130361,130362],{"align":79},"背景图像不平铺",[74,130364,130365,130368],{},[90,130366,130367],{"align":79},"repeat-x",[90,130369,130370],{"align":79},"背景图像在横向上平铺",[74,130372,130373,130376],{},[90,130374,130375],{"align":79},"repeat-y",[90,130377,130378],{"align":79},"背景图像在纵向平铺",[494,130380,130382],{"id":130381},"_824-背景图片位置","8.2.4 背景图片位置",[26,130384,130386],{"className":128143,"code":130385,"language":128145,"meta":32,"style":32},"\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",[34,130387,130388,130393,130399,130413,130417,130422,130428,130444,130448,130453,130459,130473],{"__ignoreMap":32},[167,130389,130390],{"class":169,"line":170},[167,130391,130392],{"class":2268},"\u002F* 方位名词 *\u002F\n",[167,130394,130395,130397],{"class":169,"line":191},[167,130396,53609],{"class":516},[167,130398,17598],{"class":512},[167,130400,130401,130404,130406,130408,130411],{"class":169,"line":205},[167,130402,130403],{"class":184},"  background-position",[167,130405,53435],{"class":512},[167,130407,53590],{"class":184},[167,130409,130410],{"class":184}," top",[167,130412,3359],{"class":512},[167,130414,130415],{"class":169,"line":219},[167,130416,3630],{"class":512},[167,130418,130419],{"class":169,"line":230},[167,130420,130421],{"class":2268},"\u002F* 精确单位 *\u002F\n",[167,130423,130424,130426],{"class":169,"line":241},[167,130425,53609],{"class":516},[167,130427,17598],{"class":512},[167,130429,130430,130432,130434,130436,130438,130440,130442],{"class":169,"line":261},[167,130431,130403],{"class":184},[167,130433,53435],{"class":512},[167,130435,2900],{"class":184},[167,130437,53490],{"class":731},[167,130439,59493],{"class":184},[167,130441,53490],{"class":731},[167,130443,3359],{"class":512},[167,130445,130446],{"class":169,"line":773},[167,130447,3630],{"class":512},[167,130449,130450],{"class":169,"line":779},[167,130451,130452],{"class":2268},"\u002F* 混合单位 *\u002F\n",[167,130454,130455,130457],{"class":169,"line":785},[167,130456,53609],{"class":516},[167,130458,17598],{"class":512},[167,130460,130461,130463,130465,130467,130469,130471],{"class":169,"line":790},[167,130462,130403],{"class":184},[167,130464,53435],{"class":512},[167,130466,2900],{"class":184},[167,130468,53490],{"class":731},[167,130470,19170],{"class":184},[167,130472,3359],{"class":512},[167,130474,130475],{"class":169,"line":796},[167,130476,3630],{"class":512},[19,130478,130479],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[68,130481,130482,130490],{},[71,130483,130484],{},[74,130485,130486,130488],{},[77,130487,130256],{"align":79},[77,130489,27889],{"align":79},[85,130491,130492,130499],{},[74,130493,130494,130496],{},[90,130495,53964],{"align":79},[90,130497,130498],{"align":79},"百分数|由浮点数和单位标识符组成的长度值",[74,130500,130501,130504],{},[90,130502,130503],{"align":79},"position",[90,130505,130506],{"align":79},"top|center|bottom|left|center|right 方位名词",[19,130508,130509],{},"其他说明：",[19,130511,130512],{},"①参数是方位名词",[19,130514,130515],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130517,130518],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130520,130521],{},"②参数是精确单位",[19,130523,130524],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130526,130527],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130529,130530],{},"③参数是混合单位",[19,130532,130533],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[494,130535,130537],{"id":130536},"_825-背景图片固定","8.2.5 背景图片固定",[26,130539,130541],{"className":128143,"code":130540,"language":128145,"meta":32,"style":32},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[34,130542,130543,130548,130554,130566,130570,130575,130581,130591],{"__ignoreMap":32},[167,130544,130545],{"class":169,"line":170},[167,130546,130547],{"class":2268},"\u002F* 背景滚动（默认） *\u002F\n",[167,130549,130550,130552],{"class":169,"line":191},[167,130551,53609],{"class":516},[167,130553,17598],{"class":512},[167,130555,130556,130559,130561,130564],{"class":169,"line":205},[167,130557,130558],{"class":184},"  background-attachment",[167,130560,53435],{"class":512},[167,130562,130563],{"class":184},"scroll",[167,130565,3359],{"class":512},[167,130567,130568],{"class":169,"line":219},[167,130569,3630],{"class":512},[167,130571,130572],{"class":169,"line":230},[167,130573,130574],{"class":2268},"\u002F* 背景固定 *\u002F\n",[167,130576,130577,130579],{"class":169,"line":241},[167,130578,53609],{"class":516},[167,130580,17598],{"class":512},[167,130582,130583,130585,130587,130589],{"class":169,"line":261},[167,130584,130558],{"class":184},[167,130586,53435],{"class":512},[167,130588,88219],{"class":184},[167,130590,3359],{"class":512},[167,130592,130593],{"class":169,"line":773},[167,130594,3630],{"class":512},[68,130596,130597,130606],{},[71,130598,130599],{},[74,130600,130601,130604],{},[77,130602,130603],{"align":79},"参数",[77,130605,104287],{"align":79},[85,130607,130608,130615],{},[74,130609,130610,130612],{},[90,130611,130563],{"align":79},[90,130613,130614],{"align":79},"背景图像是随对象内容滚动",[74,130616,130617,130619],{},[90,130618,88219],{"align":79},[90,130620,130621],{"align":79},"背景图像固定",[494,130623,130625],{"id":130624},"_826-背景样式合写","8.2.6 背景样式合写",[26,130627,130629],{"className":128143,"code":130628,"language":128145,"meta":32,"style":32},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[34,130630,130631,130636,130642,130670],{"__ignoreMap":32},[167,130632,130633],{"class":169,"line":170},[167,130634,130635],{"class":2268},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[167,130637,130638,130640],{"class":169,"line":191},[167,130639,53609],{"class":516},[167,130641,17598],{"class":512},[167,130643,130644,130646,130648,130650,130653,130655,130657,130659,130661,130664,130666,130668],{"class":169,"line":205},[167,130645,72599],{"class":184},[167,130647,53435],{"class":512},[167,130649,62831],{"class":184},[167,130651,130652],{"class":184}," url",[167,130654,898],{"class":512},[167,130656,130241],{"class":7246},[167,130658,15741],{"class":512},[167,130660,63725],{"class":184},[167,130662,130663],{"class":184}," fixed",[167,130665,19170],{"class":184},[167,130667,130410],{"class":184},[167,130669,3359],{"class":512},[167,130671,130672],{"class":169,"line":219},[167,130673,3630],{"class":512},[494,130675,130677],{"id":130676},"_827-背景色半透明","8.2.7 背景色半透明",[26,130679,130681],{"className":128143,"code":130680,"language":128145,"meta":32,"style":32},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[34,130682,130683,130689,130715],{"__ignoreMap":32},[167,130684,130685,130687],{"class":169,"line":170},[167,130686,53609],{"class":516},[167,130688,17598],{"class":512},[167,130690,130691,130693,130695,130697,130699,130701,130703,130705,130707,130709,130711,130713],{"class":169,"line":191},[167,130692,72599],{"class":184},[167,130694,53435],{"class":512},[167,130696,1393],{"class":184},[167,130698,898],{"class":512},[167,130700,1154],{"class":184},[167,130702,14463],{"class":512},[167,130704,1154],{"class":184},[167,130706,14463],{"class":512},[167,130708,1154],{"class":184},[167,130710,14463],{"class":512},[167,130712,102505],{"class":184},[167,130714,4755],{"class":512},[167,130716,130717],{"class":169,"line":205},[167,130718,3630],{"class":512},[19,130720,101380],{},[19,130722,130723],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130725,130726],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130728,130729],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130731,130732],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[494,130734,130736],{"id":130735},"_828-总结","8.2.8 总结",[68,130738,130739,130750],{},[71,130740,130741],{},[74,130742,130743,130746,130748],{},[77,130744,130745],{"align":79},"属性",[77,130747,104287],{"align":79},[77,130749,2357],{"align":79},[85,130751,130752,130763,130774,130785,130796,130807,130818],{},[74,130753,130754,130757,130760],{},[90,130755,130756],{"align":79},"background-color",[90,130758,130759],{"align":79},"背景颜色",[90,130761,130762],{"align":79},"预定义的颜色值\u002F十六进制\u002FRGB代码",[74,130764,130765,130768,130771],{},[90,130766,130767],{"align":79},"background-image",[90,130769,130770],{"align":79},"背景图片",[90,130772,130773],{"align":79},"url(图片路径)",[74,130775,130776,130779,130782],{},[90,130777,130778],{"align":79},"background-repeat",[90,130780,130781],{"align":79},"是否平铺",[90,130783,130784],{"align":79},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[74,130786,130787,130790,130793],{},[90,130788,130789],{"align":79},"background-position",[90,130791,130792],{"align":79},"背景位置",[90,130794,130795],{"align":79},"length\u002Fposition 分别是x和y坐标",[74,130797,130798,130801,130804],{},[90,130799,130800],{"align":79},"background-attachment",[90,130802,130803],{"align":79},"背景附着",[90,130805,130806],{"align":79},"scroll(背景滚动) \u002Ffixed (背景固定)",[74,130808,130809,130812,130815],{},[90,130810,130811],{"align":79},"背景简写",[90,130813,130814],{"align":79},"书写更简单",[90,130816,130817],{"align":79},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[74,130819,130820,130823,130826],{},[90,130821,130822],{"align":79},"背景半透明",[90,130824,130825],{"align":79},"背景颜色半透明",[90,130827,130828],{"align":79},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130830,130831],{},"颜色渐变：",[3528,130833],{"style":127999,"src":130834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3528,130836],{"style":127999,"src":130837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[494,130839,130841],{"id":130840},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,130843,130845],{"className":128890,"code":130844,"language":128892,"meta":32,"style":32},"\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",[34,130846,130847,130862,130881,130900,130919,130938,130957],{"__ignoreMap":32},[167,130848,130849,130851,130853,130855,130857,130860],{"class":169,"line":170},[167,130850,513],{"class":512},[167,130852,53609],{"class":516},[167,130854,55479],{"class":173},[167,130856,523],{"class":512},[167,130858,130859],{"class":177},"\"nav\"",[167,130861,537],{"class":512},[167,130863,130864,130866,130868,130870,130872,130874,130877,130879],{"class":169,"line":191},[167,130865,542],{"class":512},[167,130867,2439],{"class":516},[167,130869,63046],{"class":173},[167,130871,523],{"class":512},[167,130873,63051],{"class":177},[167,130875,130876],{"class":512},">五彩导航1\u003C\u002F",[167,130878,2439],{"class":516},[167,130880,537],{"class":512},[167,130882,130883,130885,130887,130889,130891,130893,130896,130898],{"class":169,"line":205},[167,130884,542],{"class":512},[167,130886,2439],{"class":516},[167,130888,63046],{"class":173},[167,130890,523],{"class":512},[167,130892,63051],{"class":177},[167,130894,130895],{"class":512},">五彩导航2\u003C\u002F",[167,130897,2439],{"class":516},[167,130899,537],{"class":512},[167,130901,130902,130904,130906,130908,130910,130912,130915,130917],{"class":169,"line":219},[167,130903,542],{"class":512},[167,130905,2439],{"class":516},[167,130907,63046],{"class":173},[167,130909,523],{"class":512},[167,130911,63051],{"class":177},[167,130913,130914],{"class":512},">五彩导航3\u003C\u002F",[167,130916,2439],{"class":516},[167,130918,537],{"class":512},[167,130920,130921,130923,130925,130927,130929,130931,130934,130936],{"class":169,"line":230},[167,130922,542],{"class":512},[167,130924,2439],{"class":516},[167,130926,63046],{"class":173},[167,130928,523],{"class":512},[167,130930,63051],{"class":177},[167,130932,130933],{"class":512},">五彩导航4\u003C\u002F",[167,130935,2439],{"class":516},[167,130937,537],{"class":512},[167,130939,130940,130942,130944,130946,130948,130950,130953,130955],{"class":169,"line":241},[167,130941,542],{"class":512},[167,130943,2439],{"class":516},[167,130945,63046],{"class":173},[167,130947,523],{"class":512},[167,130949,63051],{"class":177},[167,130951,130952],{"class":512},">五彩导航5\u003C\u002F",[167,130954,2439],{"class":516},[167,130956,537],{"class":512},[167,130958,130959,130961,130963],{"class":169,"line":261},[167,130960,575],{"class":512},[167,130962,53609],{"class":516},[167,130964,537],{"class":512},[26,130966,130968],{"className":128143,"code":130967,"language":128145,"meta":32,"style":32},".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",[34,130969,130970,130979,130989,131001,131013,131023,131035,131045,131049,131074,131097,131120,131143],{"__ignoreMap":32},[167,130971,130972,130975,130977],{"class":169,"line":170},[167,130973,130974],{"class":173},".nav",[167,130976,3464],{"class":516},[167,130978,17598],{"class":512},[167,130980,130981,130983,130985,130987],{"class":169,"line":191},[167,130982,129759],{"class":184},[167,130984,53435],{"class":512},[167,130986,74371],{"class":184},[167,130988,3359],{"class":512},[167,130990,130991,130993,130995,130997,130999],{"class":169,"line":205},[167,130992,72556],{"class":184},[167,130994,53435],{"class":512},[167,130996,3017],{"class":184},[167,130998,53490],{"class":731},[167,131000,3359],{"class":512},[167,131002,131003,131005,131007,131009,131011],{"class":169,"line":219},[167,131004,72776],{"class":184},[167,131006,53435],{"class":512},[167,131008,3056],{"class":184},[167,131010,53490],{"class":731},[167,131012,3359],{"class":512},[167,131014,131015,131017,131019,131021],{"class":169,"line":230},[167,131016,72514],{"class":184},[167,131018,53435],{"class":512},[167,131020,53590],{"class":184},[167,131022,3359],{"class":512},[167,131024,131025,131027,131029,131031,131033],{"class":169,"line":241},[167,131026,128827],{"class":184},[167,131028,53435],{"class":512},[167,131030,3056],{"class":184},[167,131032,53490],{"class":731},[167,131034,3359],{"class":512},[167,131036,131037,131039,131041,131043],{"class":169,"line":261},[167,131038,72893],{"class":184},[167,131040,53435],{"class":512},[167,131042,62831],{"class":184},[167,131044,3359],{"class":512},[167,131046,131047],{"class":169,"line":773},[167,131048,3630],{"class":512},[167,131050,131051,131053,131055,131058,131060,131062,131065,131067,131069,131071],{"class":169,"line":779},[167,131052,130974],{"class":173},[167,131054,3464],{"class":516},[167,131056,131057],{"class":173},":nth-child",[167,131059,898],{"class":512},[167,131061,2418],{"class":184},[167,131063,131064],{"class":512},") { ",[167,131066,130756],{"class":184},[167,131068,53435],{"class":512},[167,131070,130174],{"class":184},[167,131072,131073],{"class":512},"; }\n",[167,131075,131076,131078,131080,131082,131084,131086,131088,131090,131092,131095],{"class":169,"line":785},[167,131077,130974],{"class":173},[167,131079,3464],{"class":516},[167,131081,131057],{"class":173},[167,131083,898],{"class":512},[167,131085,2287],{"class":184},[167,131087,131064],{"class":512},[167,131089,130756],{"class":184},[167,131091,53435],{"class":512},[167,131093,131094],{"class":184},"#ff0000",[167,131096,131073],{"class":512},[167,131098,131099,131101,131103,131105,131107,131109,131111,131113,131115,131118],{"class":169,"line":790},[167,131100,130974],{"class":173},[167,131102,3464],{"class":516},[167,131104,131057],{"class":173},[167,131106,898],{"class":512},[167,131108,2281],{"class":184},[167,131110,131064],{"class":512},[167,131112,130756],{"class":184},[167,131114,53435],{"class":512},[167,131116,131117],{"class":184},"#00a4ff",[167,131119,131073],{"class":512},[167,131121,131122,131124,131126,131128,131130,131132,131134,131136,131138,131141],{"class":169,"line":796},[167,131123,130974],{"class":173},[167,131125,3464],{"class":516},[167,131127,131057],{"class":173},[167,131129,898],{"class":512},[167,131131,2494],{"class":184},[167,131133,131064],{"class":512},[167,131135,130756],{"class":184},[167,131137,53435],{"class":512},[167,131139,131140],{"class":184},"#ff00ff",[167,131142,131073],{"class":512},[167,131144,131145,131147,131149,131151,131153,131155,131157,131159,131161,131164],{"class":169,"line":802},[167,131146,130974],{"class":173},[167,131148,3464],{"class":516},[167,131150,131057],{"class":173},[167,131152,898],{"class":512},[167,131154,2519],{"class":184},[167,131156,131064],{"class":512},[167,131158,130756],{"class":184},[167,131160,53435],{"class":512},[167,131162,131163],{"class":184},"#00ff00",[167,131165,131073],{"class":512},[14,131167,131169],{"id":131168},"_83-css三大特性","8.3 css三大特性",[494,131171,131173],{"id":131172},"_831-层叠性","8.3.1 层叠性",[19,131175,131176],{},"为了解决样式冲突问题",[19,131178,131179],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131181,131182],{},"   ②样式不冲突，不会层叠",[494,131184,131186],{"id":131185},"_832-继承性","8.3.2 继承性",[19,131188,131189],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131191,131192],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,131194,131196],{"className":128143,"code":131195,"language":128145,"meta":32,"style":32},"p {\n  color: #333;\n}\n",[34,131197,131198,131204,131214],{"__ignoreMap":32},[167,131199,131200,131202],{"class":169,"line":170},[167,131201,19],{"class":516},[167,131203,17598],{"class":512},[167,131205,131206,131208,131210,131212],{"class":169,"line":191},[167,131207,72893],{"class":184},[167,131209,53435],{"class":512},[167,131211,64358],{"class":184},[167,131213,3359],{"class":512},[167,131215,131216],{"class":169,"line":205},[167,131217,3630],{"class":512},[3528,131219],{"style":127999,"src":131220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131222,131223],{},"解释：①行高可以跟单位也可以不跟单位",[19,131225,131226],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131228,131229],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131231,131232],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[494,131234,131236],{"id":131235},"_833-优先级","8.3.3 优先级",[40,131238,131239,131242],{},[43,131240,131241],{},"选择器相同，则执行层叠性",[43,131243,131244],{},"选择器不同，则根据选择器权重执行",[68,131246,131247,131257],{},[71,131248,131249],{},[74,131250,131251,131254],{},[77,131252,131253],{"align":79},"选择器",[77,131255,131256],{"align":79},"选择器权重",[85,131258,131259,131267,131275,131283,131291,131299],{},[74,131260,131261,131264],{},[90,131262,131263],{"align":79},"继承 或者*",[90,131265,131266],{"align":79},"0，0，0，0",[74,131268,131269,131272],{},[90,131270,131271],{"align":79},"标签选择器",[90,131273,131274],{"align":79},"0，0，0，1",[74,131276,131277,131280],{},[90,131278,131279],{"align":79},"类选择器，伪类选择器",[90,131281,131282],{"align":79},"0，0，1，0",[74,131284,131285,131288],{},[90,131286,131287],{"align":79},"ID选择器",[90,131289,131290],{"align":79},"0，1，0，0",[74,131292,131293,131296],{},[90,131294,131295],{"align":79},"行内样式",[90,131297,131298],{"align":79},"1，0，0，0",[74,131300,131301,131304],{},[90,131302,131303],{"align":79},"！important",[90,131305,131306],{"align":79},"无穷大",[19,131308,131309],{},"! important用法：",[26,131311,131313],{"className":128143,"code":131312,"language":128145,"meta":32,"style":32},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[34,131314,131315,131320,131326,131339,131343,131348,131354,131364],{"__ignoreMap":32},[167,131316,131317],{"class":169,"line":170},[167,131318,131319],{"class":2268},"\u002F* !important 拥有最高优先级 *\u002F\n",[167,131321,131322,131324],{"class":169,"line":191},[167,131323,53609],{"class":516},[167,131325,17598],{"class":512},[167,131327,131328,131330,131332,131334,131337],{"class":169,"line":205},[167,131329,72893],{"class":184},[167,131331,53435],{"class":512},[167,131333,53643],{"class":184},[167,131335,131336],{"class":731}," !important",[167,131338,3359],{"class":512},[167,131340,131341],{"class":169,"line":219},[167,131342,3630],{"class":512},[167,131344,131345],{"class":169,"line":230},[167,131346,131347],{"class":2268},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[167,131349,131350,131352],{"class":169,"line":241},[167,131351,53609],{"class":516},[167,131353,17598],{"class":512},[167,131355,131356,131358,131360,131362],{"class":169,"line":261},[167,131357,72893],{"class":184},[167,131359,53435],{"class":512},[167,131361,59410],{"class":184},[167,131363,3359],{"class":512},[167,131365,131366],{"class":169,"line":773},[167,131367,3630],{"class":512},[19,131369,131370],{},"优先级注意点：",[19,131372,131373],{},"①权重是有4组数字组成,但是不会有进位",[19,131375,131376],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131378,131379],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131381,131382],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131384,131385],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131387,131388],{},"⑥复合选择器",[68,131390,131391,131401],{},[71,131392,131393],{},[74,131394,131395,131398],{},[77,131396,131397],{"align":79},"div ul li",[77,131399,131400],{"align":79},"0,0,0,3",[85,131402,131403,131411,131419],{},[74,131404,131405,131408],{},[90,131406,131407],{"align":79},".nav ul li",[90,131409,131410],{"align":79},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[74,131412,131413,131416],{},[90,131414,131415],{"align":79},"a:hover",[90,131417,131418],{"align":79},"0,0,1,1",[74,131420,131421,131424],{},[90,131422,131423],{"align":79},".nav a",[90,131425,131418],{"align":79},[2113,131427,131428],{},"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":32,"searchDepth":191,"depth":191,"links":131430},[131431,131439,131450],{"id":129539,"depth":191,"text":129540,"children":131432},[131433,131434,131435,131436,131437,131438],{"id":129552,"depth":205,"text":129553},{"id":129624,"depth":205,"text":129625},{"id":129696,"depth":205,"text":129697},{"id":129727,"depth":205,"text":129728},{"id":129734,"depth":205,"text":129735},{"id":129887,"depth":205,"text":129888},{"id":130195,"depth":191,"text":130196,"children":131440},[131441,131442,131443,131444,131445,131446,131447,131448,131449],{"id":130202,"depth":205,"text":130203},{"id":130212,"depth":205,"text":130213},{"id":130308,"depth":205,"text":130309},{"id":130381,"depth":205,"text":130382},{"id":130536,"depth":205,"text":130537},{"id":130624,"depth":205,"text":130625},{"id":130676,"depth":205,"text":130677},{"id":130735,"depth":205,"text":130736},{"id":130840,"depth":205,"text":130841},{"id":131168,"depth":191,"text":131169,"children":131451},[131452,131453,131454],{"id":131172,"depth":205,"text":131173},{"id":131185,"depth":205,"text":131186},{"id":131235,"depth":205,"text":131236},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129531,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131461,"title":131462,"body":131463,"description":25403,"extension":2140,"meta":133053,"navigation":740,"path":133054,"seo":133055,"stem":133056,"__hash__":133057},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131464,"toc":133032},[131465,131468,131472,131475,131478,131481,131484,131487,131490,131493,131497,131505,131542,131578,131581,131595,131600,131634,131637,131730,131735,131738,131768,131771,131776,131784,131788,131795,131841,131885,131890,131893,131896,131899,131902,131905,131908,131910,131913,131917,131922,131966,131971,131974,131977,132014,132019,132022,132025,132028,132031,132063,132066,132069,132072,132104,132107,132110,132113,132117,132120,132152,132155,132159,132179,132182,132190,132193,132197,132202,132205,132237,132242,132245,132283,132287,132292,132295,132298,132329,132332,132349,132354,132406,132466,132471,132525,132563,132567,132571,132574,132578,132586,132589,132591,132602,132607,132655,132689,132692,132695,132698,132701,132745,132748,132751,132754,132757,132760,132763,132807,132810,132813,132816,132819,132822,132825,132831,132834,132878,132881,132884,132887,132890,132893,132937,132940,132942,132945,132949,132953,132991,132995,132998,133001,133005,133013,133017,133020,133023,133026,133029],[10,131466,131462],{"id":131467},"_9-css盒模型浮动与切图",[14,131469,131471],{"id":131470},"_91-盒子模型","9.1 盒子模型",[19,131473,131474],{},"利用盒子来设计网页",[19,131476,131477],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131479,131480],{},"网页布局设置：",[19,131482,131483],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131485,131486],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131488,131489],{},"③往盒子里装内容",[3528,131491],{"style":127999,"src":131492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[494,131494,131496],{"id":131495},"_911-边框border","9.1.1 边框（border）",[40,131498,131499,131502],{},[43,131500,131501],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[43,131503,131504],{},"语法",[26,131506,131508],{"className":128143,"code":131507,"language":128145,"meta":32,"style":32},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[34,131509,131510,131515,131521,131538],{"__ignoreMap":32},[167,131511,131512],{"class":169,"line":170},[167,131513,131514],{"class":2268},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[167,131516,131517,131519],{"class":169,"line":191},[167,131518,53609],{"class":516},[167,131520,17598],{"class":512},[167,131522,131523,131525,131527,131529,131531,131533,131536],{"class":169,"line":205},[167,131524,72884],{"class":184},[167,131526,53435],{"class":512},[167,131528,2418],{"class":184},[167,131530,53490],{"class":731},[167,131532,53519],{"class":184},[167,131534,131535],{"class":184}," #ccc",[167,131537,3359],{"class":512},[167,131539,131540],{"class":169,"line":219},[167,131541,3630],{"class":512},[68,131543,131544,131552],{},[71,131545,131546],{},[74,131547,131548,131550],{},[77,131549,130745],{"align":79},[77,131551,104287],{"align":79},[85,131553,131554,131562,131570],{},[74,131555,131556,131559],{},[90,131557,131558],{"align":79},"border-width",[90,131560,131561],{"align":79},"定义边框粗细，单位是px",[74,131563,131564,131567],{},[90,131565,131566],{"align":79},"border-style",[90,131568,131569],{"align":79},"边框的样式",[74,131571,131572,131575],{},[90,131573,131574],{"align":79},"border-color",[90,131576,131577],{"align":79},"边框的颜色",[19,131579,131580],{},"边框样式 border-style 可以设置如下值：",[3205,131582,131583,131586,131589,131592],{},[43,131584,131585],{},"none：没有边框即忽略所有边框的宽度（默认值）",[43,131587,131588],{},"solid：边框为单实线(最为常用的)",[43,131590,131591],{},"dashed：边框为虚线",[43,131593,131594],{},"dotted：边框为点线",[40,131596,131597],{"start":205},[43,131598,131599],{},"边框的合写分写",[26,131601,131602],{"className":128143,"code":131507,"language":128145,"meta":32,"style":32},[34,131603,131604,131608,131614,131630],{"__ignoreMap":32},[167,131605,131606],{"class":169,"line":170},[167,131607,131514],{"class":2268},[167,131609,131610,131612],{"class":169,"line":191},[167,131611,53609],{"class":516},[167,131613,17598],{"class":512},[167,131615,131616,131618,131620,131622,131624,131626,131628],{"class":169,"line":205},[167,131617,72884],{"class":184},[167,131619,53435],{"class":512},[167,131621,2418],{"class":184},[167,131623,53490],{"class":731},[167,131625,53519],{"class":184},[167,131627,131535],{"class":184},[167,131629,3359],{"class":512},[167,131631,131632],{"class":169,"line":219},[167,131633,3630],{"class":512},[19,131635,131636],{},"边框分开写法：",[26,131638,131640],{"className":128143,"code":131639,"language":128145,"meta":32,"style":32},"\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",[34,131641,131642,131647,131653,131671,131689,131708,131726],{"__ignoreMap":32},[167,131643,131644],{"class":169,"line":170},[167,131645,131646],{"class":2268},"\u002F* 边框分开写法 *\u002F\n",[167,131648,131649,131651],{"class":169,"line":191},[167,131650,53609],{"class":516},[167,131652,17598],{"class":512},[167,131654,131655,131658,131660,131662,131664,131666,131669],{"class":169,"line":205},[167,131656,131657],{"class":184},"  border-top",[167,131659,53435],{"class":512},[167,131661,2418],{"class":184},[167,131663,53490],{"class":731},[167,131665,53519],{"class":184},[167,131667,131668],{"class":184}," #000",[167,131670,3359],{"class":512},[167,131672,131673,131676,131678,131680,131682,131684,131687],{"class":169,"line":219},[167,131674,131675],{"class":184},"  border-right",[167,131677,53435],{"class":512},[167,131679,2287],{"class":184},[167,131681,53490],{"class":731},[167,131683,64230],{"class":184},[167,131685,131686],{"class":184}," #333",[167,131688,3359],{"class":512},[167,131690,131691,131694,131696,131698,131700,131703,131706],{"class":169,"line":230},[167,131692,131693],{"class":184},"  border-bottom",[167,131695,53435],{"class":512},[167,131697,2281],{"class":184},[167,131699,53490],{"class":731},[167,131701,131702],{"class":184}," dotted",[167,131704,131705],{"class":184}," #666",[167,131707,3359],{"class":512},[167,131709,131710,131713,131715,131717,131719,131721,131724],{"class":169,"line":241},[167,131711,131712],{"class":184},"  border-left",[167,131714,53435],{"class":512},[167,131716,2418],{"class":184},[167,131718,53490],{"class":731},[167,131720,53519],{"class":184},[167,131722,131723],{"class":184}," #999",[167,131725,3359],{"class":512},[167,131727,131728],{"class":169,"line":261},[167,131729,3630],{"class":512},[40,131731,131732],{"start":219},[43,131733,131734],{},"表格的细线边框",[19,131736,131737],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,131739,131741],{"className":128143,"code":131740,"language":128145,"meta":32,"style":32},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[34,131742,131743,131748,131754,131764],{"__ignoreMap":32},[167,131744,131745],{"class":169,"line":170},[167,131746,131747],{"class":2268},"\u002F* 表格细线边框合并 *\u002F\n",[167,131749,131750,131752],{"class":169,"line":191},[167,131751,68],{"class":516},[167,131753,17598],{"class":512},[167,131755,131756,131758,131760,131762],{"class":169,"line":205},[167,131757,72566],{"class":184},[167,131759,53435],{"class":512},[167,131761,67024],{"class":184},[167,131763,3359],{"class":512},[167,131765,131766],{"class":169,"line":219},[167,131767,3630],{"class":512},[19,131769,131770],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[40,131772,131773],{"start":230},[43,131774,131775],{},"解决边框额外增加盒子的实际大小的方法：",[3205,131777,131778,131781],{},[43,131779,131780],{},"测量盒子大小的时候,不量边框",[43,131782,131783],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[494,131785,131787],{"id":131786},"_912-内边距","9.1.2 内边距",[40,131789,131790,131793],{},[43,131791,131792],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[43,131794,131504],{},[68,131796,131797,131807],{},[71,131798,131799],{},[74,131800,131801,131804],{},[77,131802,131803],{"align":79},"值的个数",[77,131805,131806],{"align":79},"表达意思",[85,131808,131809,131817,131825,131833],{},[74,131810,131811,131814],{},[90,131812,131813],{"align":79},"padding: 5px;",[90,131815,131816],{"align":79},"1个值，代表上下左右都有5个元素",[74,131818,131819,131822],{},[90,131820,131821],{"align":79},"padding: 5px 10px;",[90,131823,131824],{"align":79},"2个值，代表上下内边距为5像素，左右内边距为10像素",[74,131826,131827,131830],{},[90,131828,131829],{"align":79},"padding: 5px 10px 20px;",[90,131831,131832],{"align":79},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[74,131834,131835,131838],{},[90,131836,131837],{"align":79},"padding: 5px 10px 20px 30px;",[90,131839,131840],{"align":79},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[68,131842,131843,131851],{},[71,131844,131845],{},[74,131846,131847,131849],{},[77,131848,130745],{"align":79},[77,131850,104287],{"align":79},[85,131852,131853,131861,131869,131877],{},[74,131854,131855,131858],{},[90,131856,131857],{"align":79},"padding-left",[90,131859,131860],{"align":79},"左内边距",[74,131862,131863,131866],{},[90,131864,131865],{"align":79},"padding-right",[90,131867,131868],{"align":79},"右内边距",[74,131870,131871,131874],{},[90,131872,131873],{"align":79},"padding-top",[90,131875,131876],{"align":79},"上内边距",[74,131878,131879,131882],{},[90,131880,131881],{"align":79},"padding-bottom",[90,131883,131884],{"align":79},"下内边距",[40,131886,131887],{"start":205},[43,131888,131889],{},"内边距会影响盒子的实际大小",[19,131891,131892],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131894,131895],{},"①内容和边框有了距离，添加了内边距",[19,131897,131898],{},"②padding影响了盒子实际大小",[19,131900,131901],{},"内边距对盒子大小的影响：",[19,131903,131904],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131906,131907],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131909,97206],{},[19,131911,131912],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[494,131914,131916],{"id":131915},"_913-外边距","9.1.3 外边距",[40,131918,131919],{},[43,131920,131921],{},"控制盒子与盒子之间的距离",[68,131923,131924,131932],{},[71,131925,131926],{},[74,131927,131928,131930],{},[77,131929,130745],{"align":79},[77,131931,104287],{"align":79},[85,131933,131934,131942,131950,131958],{},[74,131935,131936,131939],{},[90,131937,131938],{"align":79},"margin-left",[90,131940,131941],{"align":79},"左外边距",[74,131943,131944,131947],{},[90,131945,131946],{"align":79},"margin-right",[90,131948,131949],{"align":79},"右外边距",[74,131951,131952,131955],{},[90,131953,131954],{"align":79},"margin-top",[90,131956,131957],{"align":79},"上外边距",[74,131959,131960,131963],{},[90,131961,131962],{"align":79},"margin-bottom",[90,131964,131965],{"align":79},"下外边距",[40,131967,131968],{"start":191},[43,131969,131970],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131972,131973],{},"①盒子必须指定了宽度（width）",[19,131975,131976],{},"②盒子左右的外边距都设置为 auto",[26,131978,131980],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,131981,131982,131987,131994,132010],{"__ignoreMap":32},[167,131983,131984],{"class":169,"line":170},[167,131985,131986],{"class":2268},"\u002F* margin 复合写法（同上） *\u002F\n",[167,131988,131989,131992],{"class":169,"line":191},[167,131990,131991],{"class":173},".box",[167,131993,17598],{"class":512},[167,131995,131996,131998,132000,132002,132004,132007],{"class":169,"line":205},[167,131997,72458],{"class":184},[167,131999,53435],{"class":512},[167,132001,1154],{"class":184},[167,132003,53554],{"class":184},[167,132005,132006],{"class":512},";  ",[167,132008,132009],{"class":2268},"\u002F* 块级盒子水平居中 *\u002F\n",[167,132011,132012],{"class":169,"line":219},[167,132013,3630],{"class":512},[40,132015,132016],{"start":205},[43,132017,132018],{},"外边距塌陷问题",[19,132020,132021],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3528,132023],{"style":127999,"src":132024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132026,132027],{},"解决方案：",[19,132029,132030],{},"①可以为父亲元素定义上边距",[26,132032,132033],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,132034,132035,132039,132045,132059],{"__ignoreMap":32},[167,132036,132037],{"class":169,"line":170},[167,132038,131986],{"class":2268},[167,132040,132041,132043],{"class":169,"line":191},[167,132042,131991],{"class":173},[167,132044,17598],{"class":512},[167,132046,132047,132049,132051,132053,132055,132057],{"class":169,"line":205},[167,132048,72458],{"class":184},[167,132050,53435],{"class":512},[167,132052,1154],{"class":184},[167,132054,53554],{"class":184},[167,132056,132006],{"class":512},[167,132058,132009],{"class":2268},[167,132060,132061],{"class":169,"line":219},[167,132062,3630],{"class":512},[19,132064,132065],{},"②可以为父亲元素定义上内边距",[19,132067,132068],{},"③可以为父亲元素添加overflow:hidden",[3528,132070],{"style":127999,"src":132071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,132073,132074],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,132075,132076,132080,132086,132100],{"__ignoreMap":32},[167,132077,132078],{"class":169,"line":170},[167,132079,131986],{"class":2268},[167,132081,132082,132084],{"class":169,"line":191},[167,132083,131991],{"class":173},[167,132085,17598],{"class":512},[167,132087,132088,132090,132092,132094,132096,132098],{"class":169,"line":205},[167,132089,72458],{"class":184},[167,132091,53435],{"class":512},[167,132093,1154],{"class":184},[167,132095,53554],{"class":184},[167,132097,132006],{"class":512},[167,132099,132009],{"class":2268},[167,132101,132102],{"class":169,"line":219},[167,132103,3630],{"class":512},[3528,132105],{"style":127999,"src":132106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132108,132109],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132111,132112],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[494,132114,132116],{"id":132115},"_914-清除内外边距","9.1.4 清除内外边距",[19,132118,132119],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,132121,132122],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,132123,132124,132128,132134,132148],{"__ignoreMap":32},[167,132125,132126],{"class":169,"line":170},[167,132127,131986],{"class":2268},[167,132129,132130,132132],{"class":169,"line":191},[167,132131,131991],{"class":173},[167,132133,17598],{"class":512},[167,132135,132136,132138,132140,132142,132144,132146],{"class":169,"line":205},[167,132137,72458],{"class":184},[167,132139,53435],{"class":512},[167,132141,1154],{"class":184},[167,132143,53554],{"class":184},[167,132145,132006],{"class":512},[167,132147,132009],{"class":2268},[167,132149,132150],{"class":169,"line":219},[167,132151,3630],{"class":512},[19,132153,132154],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[494,132156,132158],{"id":132157},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3205,132160,132161,132164,132167,132170,132173,132176],{},[43,132162,132163],{},"文件→打开 ：可以打开我们要测量的图片",[43,132165,132166],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[43,132168,132169],{},"右击标尺，把里面的单位改为像素",[43,132171,132172],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[43,132174,132175],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[43,132177,132178],{},"用选区拖动 可以测量大小",[3528,132180],{"style":127999,"src":132181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3205,132183,132184,132187],{},[43,132185,132186],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[43,132188,132189],{},"吸管取色工具",[3528,132191],{"style":127999,"src":132192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[494,132194,132196],{"id":132195},"_916-案例","9.1.6 案例",[40,132198,132199],{},[43,132200,132201],{},"小米商品",[3528,132203],{"style":127999,"src":132204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,132206,132207],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,132208,132209,132213,132219,132233],{"__ignoreMap":32},[167,132210,132211],{"class":169,"line":170},[167,132212,131986],{"class":2268},[167,132214,132215,132217],{"class":169,"line":191},[167,132216,131991],{"class":173},[167,132218,17598],{"class":512},[167,132220,132221,132223,132225,132227,132229,132231],{"class":169,"line":205},[167,132222,72458],{"class":184},[167,132224,53435],{"class":512},[167,132226,1154],{"class":184},[167,132228,53554],{"class":184},[167,132230,132006],{"class":512},[167,132232,132009],{"class":2268},[167,132234,132235],{"class":169,"line":219},[167,132236,3630],{"class":512},[40,132238,132239],{"start":191},[43,132240,132241],{},"快报模块",[3528,132243],{"style":127999,"src":132244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,132246,132248],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[34,132249,132250,132255,132270,132275],{"__ignoreMap":32},[167,132251,132252],{"class":169,"line":170},[167,132253,132254],{"class":2268},"\u003C!-- HTML 代码示例 -->\n",[167,132256,132257,132259,132261,132263,132265,132268],{"class":169,"line":191},[167,132258,513],{"class":512},[167,132260,53609],{"class":516},[167,132262,55479],{"class":173},[167,132264,523],{"class":512},[167,132266,132267],{"class":177},"\"example\"",[167,132269,537],{"class":512},[167,132271,132272],{"class":169,"line":205},[167,132273,132274],{"class":512},"  示例内容\n",[167,132276,132277,132279,132281],{"class":169,"line":219},[167,132278,575],{"class":512},[167,132280,53609],{"class":516},[167,132282,537],{"class":512},[494,132284,132286],{"id":132285},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[40,132288,132289],{},[43,132290,132291],{},"圆角边框",[19,132293,132294],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3528,132296],{"style":127999,"src":132297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,132299,132301],{"className":128143,"code":132300,"language":128145,"meta":32,"style":32},"div {\n  border: 1px solid #ccc;\n}\n",[34,132302,132303,132309,132325],{"__ignoreMap":32},[167,132304,132305,132307],{"class":169,"line":170},[167,132306,53609],{"class":516},[167,132308,17598],{"class":512},[167,132310,132311,132313,132315,132317,132319,132321,132323],{"class":169,"line":191},[167,132312,72884],{"class":184},[167,132314,53435],{"class":512},[167,132316,2418],{"class":184},[167,132318,53490],{"class":731},[167,132320,53519],{"class":184},[167,132322,131535],{"class":184},[167,132324,3359],{"class":512},[167,132326,132327],{"class":169,"line":205},[167,132328,3630],{"class":512},[19,132330,132331],{},"解释:",[3205,132333,132334,132337,132340,132343,132346],{},[43,132335,132336],{},"参数值可以为数值或百分比的形式",[43,132338,132339],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[43,132341,132342],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[43,132344,132345],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[43,132347,132348],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[40,132350,132351],{"start":191},[43,132352,132353],{},"盒子阴影",[26,132355,132357],{"className":128143,"code":132356,"language":128145,"meta":32,"style":32},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[34,132358,132359,132365,132402],{"__ignoreMap":32},[167,132360,132361,132363],{"class":169,"line":170},[167,132362,53609],{"class":516},[167,132364,17598],{"class":512},[167,132366,132367,132370,132372,132374,132376,132378,132380,132382,132384,132386,132388,132390,132392,132394,132396,132398,132400],{"class":169,"line":191},[167,132368,132369],{"class":184},"  box-shadow",[167,132371,53435],{"class":512},[167,132373,1154],{"class":184},[167,132375,16782],{"class":184},[167,132377,53490],{"class":731},[167,132379,4082],{"class":184},[167,132381,53490],{"class":731},[167,132383,1369],{"class":184},[167,132385,898],{"class":512},[167,132387,1154],{"class":184},[167,132389,14463],{"class":512},[167,132391,1154],{"class":184},[167,132393,14463],{"class":512},[167,132395,1154],{"class":184},[167,132397,14463],{"class":512},[167,132399,88196],{"class":184},[167,132401,4755],{"class":512},[167,132403,132404],{"class":169,"line":205},[167,132405,3630],{"class":512},[68,132407,132408,132416],{},[71,132409,132410],{},[74,132411,132412,132414],{},[77,132413,2357],{"align":79},[77,132415,29506],{"align":79},[85,132417,132418,132426,132434,132442,132450,132458],{},[74,132419,132420,132423],{},[90,132421,132422],{"align":79},"h-shadow",[90,132424,132425],{"align":79},"必需,水平阴影的位置,允许负值",[74,132427,132428,132431],{},[90,132429,132430],{"align":79},"v-shadow",[90,132432,132433],{"align":79},"必需,垂直阴影的位置,允许负值",[74,132435,132436,132439],{},[90,132437,132438],{"align":79},"blur",[90,132440,132441],{"align":79},"可选,模糊距离,就是影子的虚实",[74,132443,132444,132447],{},[90,132445,132446],{"align":79},"spread",[90,132448,132449],{"align":79},"可选,阴影尺寸",[74,132451,132452,132455],{},[90,132453,132454],{"align":79},"color",[90,132456,132457],{"align":79},"可选,阴影的颜色",[74,132459,132460,132463],{},[90,132461,132462],{"align":79},"inset",[90,132464,132465],{"align":79},"可选,将外部阴影(outset)改为内部阴影",[40,132467,132468],{"start":205},[43,132469,132470],{},"文字阴影",[26,132472,132474],{"className":128143,"code":132473,"language":128145,"meta":32,"style":32},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[34,132475,132476,132482,132521],{"__ignoreMap":32},[167,132477,132478,132480],{"class":169,"line":170},[167,132479,19],{"class":516},[167,132481,17598],{"class":512},[167,132483,132484,132487,132489,132491,132493,132495,132497,132499,132501,132503,132505,132507,132509,132511,132513,132515,132517,132519],{"class":169,"line":191},[167,132485,132486],{"class":184},"  text-shadow",[167,132488,53435],{"class":512},[167,132490,2418],{"class":184},[167,132492,53490],{"class":731},[167,132494,27138],{"class":184},[167,132496,53490],{"class":731},[167,132498,16782],{"class":184},[167,132500,53490],{"class":731},[167,132502,1369],{"class":184},[167,132504,898],{"class":512},[167,132506,1154],{"class":184},[167,132508,14463],{"class":512},[167,132510,1154],{"class":184},[167,132512,14463],{"class":512},[167,132514,1154],{"class":184},[167,132516,14463],{"class":512},[167,132518,102505],{"class":184},[167,132520,4755],{"class":512},[167,132522,132523],{"class":169,"line":205},[167,132524,3630],{"class":512},[68,132526,132527,132535],{},[71,132528,132529],{},[74,132530,132531,132533],{},[77,132532,2357],{"align":79},[77,132534,29506],{"align":79},[85,132536,132537,132543,132550,132557],{},[74,132538,132539,132541],{},[90,132540,132422],{"align":79},[90,132542,132425],{"align":79},[74,132544,132545,132547],{},[90,132546,132430],{"align":79},[90,132548,132549],{"align":79},"必需,垂直阴影位置,允许负值",[74,132551,132552,132554],{},[90,132553,132438],{"align":79},[90,132555,132556],{"align":79},"可选,模糊的距离",[74,132558,132559,132561],{},[90,132560,132454],{"align":79},[90,132562,132457],{"align":79},[14,132564,132566],{"id":132565},"_92-浮动","9.2 浮动",[494,132568,132570],{"id":132569},"_921-浮动介绍","9.2.1 浮动介绍",[19,132572,132573],{},"在16.2中详细介绍",[494,132575,132577],{"id":132576},"_922-清除浮动","9.2.2 清除浮动",[40,132579,132580,132583],{},[43,132581,132582],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[43,132584,132585],{},"清除浮动的本质",[19,132587,132588],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132590,11053],{},[3205,132592,132593,132596,132599],{},[43,132594,132595],{},"如果父盒子本身有高度，则不需要清除浮动",[43,132597,132598],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[43,132600,132601],{},"父级有了高度，就不会影响下面的标准流了",[40,132603,132604],{"start":205},[43,132605,132606],{},"清除浮动样式",[26,132608,132610],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[34,132611,132612,132619,132630,132634,132641,132651],{"__ignoreMap":32},[167,132613,132614,132617],{"class":169,"line":170},[167,132615,132616],{"class":173},".left",[167,132618,17598],{"class":512},[167,132620,132621,132624,132626,132628],{"class":169,"line":191},[167,132622,132623],{"class":184},"  float",[167,132625,53435],{"class":512},[167,132627,79],{"class":184},[167,132629,3359],{"class":512},[167,132631,132632],{"class":169,"line":205},[167,132633,3630],{"class":512},[167,132635,132636,132639],{"class":169,"line":219},[167,132637,132638],{"class":173},".right",[167,132640,17598],{"class":512},[167,132642,132643,132645,132647,132649],{"class":169,"line":230},[167,132644,132623],{"class":184},[167,132646,53435],{"class":512},[167,132648,74510],{"class":184},[167,132650,3359],{"class":512},[167,132652,132653],{"class":169,"line":241},[167,132654,3630],{"class":512},[68,132656,132657,132665],{},[71,132658,132659],{},[74,132660,132661,132663],{},[77,132662,128607],{"align":79},[77,132664,29506],{"align":79},[85,132666,132667,132674,132681],{},[74,132668,132669,132671],{},[90,132670,79],{"align":79},[90,132672,132673],{"align":79},"不允许左侧有浮动元素（清除左侧浮动的影响）",[74,132675,132676,132678],{},[90,132677,74510],{"align":79},[90,132679,132680],{"align":79},"不允许右侧有浮动元素（清除右侧浮动的影响）",[74,132682,132683,132686],{},[90,132684,132685],{"align":79},"both",[90,132687,132688],{"align":79},"同时清除左右侧浮动的影响",[19,132690,132691],{},"法一",[19,132693,132694],{},"额外标签法也称为隔墙法",[19,132696,132697],{},"使用方式：",[19,132699,132700],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,132702,132703],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,132704,132705,132711,132721,132725,132731,132741],{"__ignoreMap":32},[167,132706,132707,132709],{"class":169,"line":170},[167,132708,132616],{"class":173},[167,132710,17598],{"class":512},[167,132712,132713,132715,132717,132719],{"class":169,"line":191},[167,132714,132623],{"class":184},[167,132716,53435],{"class":512},[167,132718,79],{"class":184},[167,132720,3359],{"class":512},[167,132722,132723],{"class":169,"line":205},[167,132724,3630],{"class":512},[167,132726,132727,132729],{"class":169,"line":219},[167,132728,132638],{"class":173},[167,132730,17598],{"class":512},[167,132732,132733,132735,132737,132739],{"class":169,"line":230},[167,132734,132623],{"class":184},[167,132736,53435],{"class":512},[167,132738,74510],{"class":184},[167,132740,3359],{"class":512},[167,132742,132743],{"class":169,"line":241},[167,132744,3630],{"class":512},[19,132746,132747],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132749,132750],{},"优点： 通俗易懂，书写方便",[19,132752,132753],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132755,132756],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132758,132759],{},"法二",[19,132761,132762],{},"父级添加overflow属性",[26,132764,132765],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,132766,132767,132773,132783,132787,132793,132803],{"__ignoreMap":32},[167,132768,132769,132771],{"class":169,"line":170},[167,132770,132616],{"class":173},[167,132772,17598],{"class":512},[167,132774,132775,132777,132779,132781],{"class":169,"line":191},[167,132776,132623],{"class":184},[167,132778,53435],{"class":512},[167,132780,79],{"class":184},[167,132782,3359],{"class":512},[167,132784,132785],{"class":169,"line":205},[167,132786,3630],{"class":512},[167,132788,132789,132791],{"class":169,"line":219},[167,132790,132638],{"class":173},[167,132792,17598],{"class":512},[167,132794,132795,132797,132799,132801],{"class":169,"line":230},[167,132796,132623],{"class":184},[167,132798,53435],{"class":512},[167,132800,74510],{"class":184},[167,132802,3359],{"class":512},[167,132804,132805],{"class":169,"line":241},[167,132806,3630],{"class":512},[19,132808,132809],{},"overflow: hidden;",[19,132811,132812],{},"优点：代码简洁",[19,132814,132815],{},"缺点：无法显示溢出的部分",[19,132817,132818],{},"注意：是给父元素添加代码",[19,132820,132821],{},"法三",[19,132823,132824],{},"父级添加after伪元素",[19,132826,132827,132830],{},[132828,132829],"after",{}," 方式是额外标签法的升级版",[19,132832,132833],{},"使用的时候复制就可以",[26,132835,132836],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,132837,132838,132844,132854,132858,132864,132874],{"__ignoreMap":32},[167,132839,132840,132842],{"class":169,"line":170},[167,132841,132616],{"class":173},[167,132843,17598],{"class":512},[167,132845,132846,132848,132850,132852],{"class":169,"line":191},[167,132847,132623],{"class":184},[167,132849,53435],{"class":512},[167,132851,79],{"class":184},[167,132853,3359],{"class":512},[167,132855,132856],{"class":169,"line":205},[167,132857,3630],{"class":512},[167,132859,132860,132862],{"class":169,"line":219},[167,132861,132638],{"class":173},[167,132863,17598],{"class":512},[167,132865,132866,132868,132870,132872],{"class":169,"line":230},[167,132867,132623],{"class":184},[167,132869,53435],{"class":512},[167,132871,74510],{"class":184},[167,132873,3359],{"class":512},[167,132875,132876],{"class":169,"line":241},[167,132877,3630],{"class":512},[19,132879,132880],{},"优点：没有增加标签，结构更简单",[19,132882,132883],{},"缺点：照顾低版本浏览器",[19,132885,132886],{},"代表网站： 百度、淘宝网、网易等",[19,132888,132889],{},"法四",[19,132891,132892],{},"父级添加双伪元素",[26,132894,132895],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,132896,132897,132903,132913,132917,132923,132933],{"__ignoreMap":32},[167,132898,132899,132901],{"class":169,"line":170},[167,132900,132616],{"class":173},[167,132902,17598],{"class":512},[167,132904,132905,132907,132909,132911],{"class":169,"line":191},[167,132906,132623],{"class":184},[167,132908,53435],{"class":512},[167,132910,79],{"class":184},[167,132912,3359],{"class":512},[167,132914,132915],{"class":169,"line":205},[167,132916,3630],{"class":512},[167,132918,132919,132921],{"class":169,"line":219},[167,132920,132638],{"class":173},[167,132922,17598],{"class":512},[167,132924,132925,132927,132929,132931],{"class":169,"line":230},[167,132926,132623],{"class":184},[167,132928,53435],{"class":512},[167,132930,74510],{"class":184},[167,132932,3359],{"class":512},[167,132934,132935],{"class":169,"line":241},[167,132936,3630],{"class":512},[19,132938,132939],{},"优点：代码更简洁",[19,132941,132883],{},[19,132943,132944],{},"代表网站：小米、腾讯等",[14,132946,132948],{"id":132947},"_93-ps切图","9.3 PS切图",[494,132950,132952],{"id":132951},"_931-常见图片格式","9.3.1 常见图片格式",[68,132954,132955,132965],{},[71,132956,132957],{},[74,132958,132959,132962],{},[77,132960,132961],{"align":79},"jpg图像格式",[77,132963,132964],{"align":79},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[85,132966,132967,132975,132983],{},[74,132968,132969,132972],{},[90,132970,132971],{"align":79},"gif图像格式",[90,132973,132974],{"align":79},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[74,132976,132977,132980],{},[90,132978,132979],{"align":79},"png图像格式",[90,132981,132982],{"align":79},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[74,132984,132985,132988],{},[90,132986,132987],{"align":79},"PSD图像格式",[90,132989,132990],{"align":79},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[494,132992,132994],{"id":132993},"_932-图层切图","9.3.2 图层切图",[19,132996,132997],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132999,133000],{},"按住shift选中两个图层->图层菜单->合并图层",[494,133002,133004],{"id":133003},"_933-切片切图","9.3.3 切片切图",[3205,133006,133007,133010],{},[43,133008,133009],{},"利用切片工具手动划出",[43,133011,133012],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[494,133014,133016],{"id":133015},"_934-切图步骤","9.3.4 切图步骤",[19,133018,133019],{},"用切片工具选中：",[3528,133021],{"style":127999,"src":133022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133024,133025],{},"文件 -> 导出",[3528,133027],{"style":127999,"src":133028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2113,133030,133031],{},"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":32,"searchDepth":191,"depth":191,"links":133033},[133034,133043,133047],{"id":131470,"depth":191,"text":131471,"children":133035},[133036,133037,133038,133039,133040,133041,133042],{"id":131495,"depth":205,"text":131496},{"id":131786,"depth":205,"text":131787},{"id":131915,"depth":205,"text":131916},{"id":132115,"depth":205,"text":132116},{"id":132157,"depth":205,"text":132158},{"id":132195,"depth":205,"text":132196},{"id":132285,"depth":205,"text":132286},{"id":132565,"depth":191,"text":132566,"children":133044},[133045,133046],{"id":132569,"depth":205,"text":132570},{"id":132576,"depth":205,"text":132577},{"id":132947,"depth":191,"text":132948,"children":133048},[133049,133050,133051,133052],{"id":132951,"depth":205,"text":132952},{"id":132993,"depth":205,"text":132994},{"id":133003,"depth":205,"text":133004},{"id":133015,"depth":205,"text":133016},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131462,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133059,"title":133060,"body":133061,"description":25403,"extension":2140,"meta":133702,"navigation":740,"path":133703,"seo":133704,"stem":133705,"__hash__":133706},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133062,"toc":133690},[133063,133066,133070,133096,133130,133134,133138,133141,133183,133190,133200,133208,133210,133213,133216,133219,133226,133240,133244,133247,133276,133280,133283,133297,133301,133304,133332,133336,133339,133365,133369,133374,133407,133412,133440,133444,133461,133507,133512,133556,133573,133680,133688],[10,133064,133060],{"id":133065},"_10-css规范与学成在线案例",[14,133067,133069],{"id":133068},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[40,133071,133072,133078,133084,133090],{},[43,133073,133074,133077],{},[2354,133075,133076],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[43,133079,133080,133083],{},[2354,133081,133082],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[43,133085,133086,133089],{},[2354,133087,133088],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[43,133091,133092,133095],{},[2354,133093,133094],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,133097,133098],{"className":128143,"code":131507,"language":128145,"meta":32,"style":32},[34,133099,133100,133104,133110,133126],{"__ignoreMap":32},[167,133101,133102],{"class":169,"line":170},[167,133103,131514],{"class":2268},[167,133105,133106,133108],{"class":169,"line":191},[167,133107,53609],{"class":516},[167,133109,17598],{"class":512},[167,133111,133112,133114,133116,133118,133120,133122,133124],{"class":169,"line":205},[167,133113,72884],{"class":184},[167,133115,53435],{"class":512},[167,133117,2418],{"class":184},[167,133119,53490],{"class":731},[167,133121,53519],{"class":184},[167,133123,131535],{"class":184},[167,133125,3359],{"class":512},[167,133127,133128],{"class":169,"line":219},[167,133129,3630],{"class":512},[14,133131,133133],{"id":133132},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[494,133135,133137],{"id":133136},"_1021-header头部制作","10.2.1 header头部制作",[3528,133139],{"style":127999,"src":133140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3205,133142,133143,133150,133157,133163,133170,133177],{},[43,133144,133145,133146,133149],{},"1号是版心盒子 ",[2354,133147,133148],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[43,133151,133152,133153,133156],{},"版心盒子 里面包含 2号盒子 ",[2354,133154,133155],{},"logo"," 图标",[43,133158,133159,133160,133162],{},"版心盒子 里面包含 3号盒子 ",[2354,133161,55705],{}," 导航栏",[43,133164,133165,133166,133169],{},"版心盒子 里面包含 4号盒子 ",[2354,133167,133168],{},"search"," 搜索框",[43,133171,133172,133173,133176],{},"版心盒子 里面包含 5号盒子 ",[2354,133174,133175],{},"user"," 个人信息",[43,133178,133179,133180],{},"注意，要求里面的 ",[2354,133181,133182],{},"4个子盒子 必须都浮动",[40,133184,133185],{},[43,133186,133187],{},[2354,133188,133189],{},"导航栏注意点:",[19,133191,133192,133193,133196,133197],{},"实际开发中， ",[2354,133194,133195],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2354,133198,133199],{},"用 li 包含链接(li+a)的做法",[3205,133201,133202,133205],{},[43,133203,133204],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[43,133206,133207],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133209,11053],{},[19,133211,133212],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133214,133215],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133217,133218],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[40,133220,133221],{"start":191},[43,133222,133223],{},[2354,133224,133225],{},"4号盒子search的细节：",[3205,133227,133228,133231,133234],{},[43,133229,133230],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[43,133232,133233],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[43,133235,133236,133239],{},[34,133237,133238],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[494,133241,133243],{"id":133242},"_1022-banner制作","10.2.2 banner制作",[3528,133245],{"style":127999,"src":133246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3205,133248,133249,133256,133262,133269],{},[43,133250,133251,133252,133255],{},"1号盒子是通栏的大盒子 ",[2354,133253,133254],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[43,133257,133258,133259,133261],{},"2号盒子是版心 ",[2354,133260,2995],{}," ， 要水平居中对齐",[43,133263,133264,133265,133268],{},"3号盒子版心内，左对齐 ",[2354,133266,133267],{},"subnav"," 侧导航栏",[43,133270,133271,133272,133275],{},"4号盒子版心内，右对齐 ",[2354,133273,133274],{},"course"," 课程",[494,133277,133279],{"id":133278},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3528,133281],{"style":127999,"src":133282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3205,133284,133285,133288,133291,133294],{},[43,133286,133287],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[43,133289,133290],{},"1号盒子是标题 H3 左侧浮动",[43,133292,133293],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[43,133295,133296],{},"3号盒子 右浮动 mod 修改",[494,133298,133300],{"id":133299},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3528,133302],{"style":127999,"src":133303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3205,133305,133306,133312,133319,133326,133329],{},[43,133307,133308,133309,133311],{},"1号盒子为最大的盒子 ",[2354,133310,590],{}," 版心水平居中对齐",[43,133313,133314,133315,133318],{},"2号盒子为上面部分 ",[2354,133316,133317],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[43,133320,133321,133322,133325],{},"3号盒子为底下部分 ",[2354,133323,133324],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[43,133327,133328],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[43,133330,133331],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[494,133333,133335],{"id":133334},"_1025-底部模块制作","10.2.5 底部模块制作",[3528,133337],{"style":127999,"src":133338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3205,133340,133341,133348,133351,133358],{},[43,133342,133343,133344,133347],{},"1号盒子通栏大盒子 底部 ",[2354,133345,133346],{},"footer"," 给高度 底色是白色",[43,133349,133350],{},"2号盒子版心水平居中",[43,133352,133353,133354,133357],{},"3号盒子版权 ",[2354,133355,133356],{},"copyright"," 左对齐",[43,133359,133360,133361,133364],{},"4号盒子 链接组 ",[2354,133362,133363],{},"links"," 右对齐",[494,133366,133368],{"id":133367},"_1026-代码模块","10.2.6 代码模块",[40,133370,133371],{},[43,133372,133373],{},"html部分",[26,133375,133377],{"className":128890,"code":133376,"language":128892,"meta":32,"style":32},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[34,133378,133379],{"__ignoreMap":32},[167,133380,133381,133383,133385,133387,133389,133392,133395,133397,133400,133403,133405],{"class":169,"line":170},[167,133382,513],{"class":512},[167,133384,2439],{"class":516},[167,133386,63046],{"class":173},[167,133388,523],{"class":512},[167,133390,133391],{"class":177},"\"https:\u002F\u002Fexample.com\"",[167,133393,133394],{"class":173}," target",[167,133396,523],{"class":512},[167,133398,133399],{"class":177},"\"_blank\"",[167,133401,133402],{"class":512},">链接文字\u003C\u002F",[167,133404,2439],{"class":516},[167,133406,537],{"class":512},[40,133408,133409],{"start":191},[43,133410,133411],{},"css部分",[26,133413,133414],{"className":128890,"code":133376,"language":128892,"meta":32,"style":32},[34,133415,133416],{"__ignoreMap":32},[167,133417,133418,133420,133422,133424,133426,133428,133430,133432,133434,133436,133438],{"class":169,"line":170},[167,133419,513],{"class":512},[167,133421,2439],{"class":516},[167,133423,63046],{"class":173},[167,133425,523],{"class":512},[167,133427,133391],{"class":177},[167,133429,133394],{"class":173},[167,133431,523],{"class":512},[167,133433,133399],{"class":177},[167,133435,133402],{"class":512},[167,133437,2439],{"class":516},[167,133439,537],{"class":512},[494,133441,133443],{"id":133442},"_1027-收获","10.2.7 收获",[40,133445,133446,133449,133452,133455,133458],{},[43,133447,133448],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[43,133450,133451],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[43,133453,133454],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[43,133456,133457],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[43,133459,133460],{},"遗忘代码",[26,133462,133464],{"className":128143,"code":133463,"language":128145,"meta":32,"style":32},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[34,133465,133466,133488,133493,133503],{"__ignoreMap":32},[167,133467,133468,133470,133472,133474,133476,133478,133480,133482,133484,133486],{"class":169,"line":170},[167,133469,53609],{"class":516},[167,133471,14463],{"class":512},[167,133473,19],{"class":516},[167,133475,14463],{"class":512},[167,133477,10],{"class":516},[167,133479,14463],{"class":512},[167,133481,3205],{"class":516},[167,133483,14463],{"class":512},[167,133485,43],{"class":516},[167,133487,17598],{"class":512},[167,133489,133490],{"class":169,"line":191},[167,133491,133492],{"class":2268},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[167,133494,133495,133497,133499,133501],{"class":169,"line":205},[167,133496,129759],{"class":184},[167,133498,53435],{"class":512},[167,133500,62858],{"class":184},[167,133502,3359],{"class":512},[167,133504,133505],{"class":169,"line":219},[167,133506,3630],{"class":512},[40,133508,133509],{"start":241},[43,133510,133511],{},"html引css的程序",[26,133513,133514],{"className":128143,"code":133463,"language":128145,"meta":32,"style":32},[34,133515,133516,133538,133542,133552],{"__ignoreMap":32},[167,133517,133518,133520,133522,133524,133526,133528,133530,133532,133534,133536],{"class":169,"line":170},[167,133519,53609],{"class":516},[167,133521,14463],{"class":512},[167,133523,19],{"class":516},[167,133525,14463],{"class":512},[167,133527,10],{"class":516},[167,133529,14463],{"class":512},[167,133531,3205],{"class":516},[167,133533,14463],{"class":512},[167,133535,43],{"class":516},[167,133537,17598],{"class":512},[167,133539,133540],{"class":169,"line":191},[167,133541,133492],{"class":2268},[167,133543,133544,133546,133548,133550],{"class":169,"line":205},[167,133545,129759],{"class":184},[167,133547,53435],{"class":512},[167,133549,62858],{"class":184},[167,133551,3359],{"class":512},[167,133553,133554],{"class":169,"line":219},[167,133555,3630],{"class":512},[40,133557,133558,133561,133564,133567,133570],{"start":261},[43,133559,133560],{},"浮动的盒子不会有外边距合并问题",[43,133562,133563],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[43,133565,133566],{},"ctrl+g快速定位行；shift+alt多个光标",[43,133568,133569],{},"学习上方各个模块的选择器起名方法，以后就这样用",[43,133571,133572],{},"在写选择器时尽量写全一些，例如",[26,133574,133576],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},"\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",[34,133577,133578,133583,133599,133604,133619,133624,133639,133644,133659,133664],{"__ignoreMap":32},[167,133579,133580],{"class":169,"line":170},[167,133581,133582],{"class":2268},"\u002F* 静态定位（默认） *\u002F\n",[167,133584,133585,133588,133590,133592,133594,133597],{"class":169,"line":191},[167,133586,133587],{"class":173},".static",[167,133589,81794],{"class":512},[167,133591,130503],{"class":184},[167,133593,53435],{"class":512},[167,133595,133596],{"class":184},"static",[167,133598,131073],{"class":512},[167,133600,133601],{"class":169,"line":205},[167,133602,133603],{"class":2268},"\u002F* 相对定位 *\u002F\n",[167,133605,133606,133609,133611,133613,133615,133617],{"class":169,"line":219},[167,133607,133608],{"class":173},".relative",[167,133610,81794],{"class":512},[167,133612,130503],{"class":184},[167,133614,53435],{"class":512},[167,133616,56754],{"class":184},[167,133618,131073],{"class":512},[167,133620,133621],{"class":169,"line":230},[167,133622,133623],{"class":2268},"\u002F* 绝对定位 *\u002F\n",[167,133625,133626,133629,133631,133633,133635,133637],{"class":169,"line":241},[167,133627,133628],{"class":173},".absolute",[167,133630,81794],{"class":512},[167,133632,130503],{"class":184},[167,133634,53435],{"class":512},[167,133636,56821],{"class":184},[167,133638,131073],{"class":512},[167,133640,133641],{"class":169,"line":261},[167,133642,133643],{"class":2268},"\u002F* 固定定位 *\u002F\n",[167,133645,133646,133649,133651,133653,133655,133657],{"class":169,"line":773},[167,133647,133648],{"class":173},".fixed",[167,133650,81794],{"class":512},[167,133652,130503],{"class":184},[167,133654,53435],{"class":512},[167,133656,88219],{"class":184},[167,133658,131073],{"class":512},[167,133660,133661],{"class":169,"line":779},[167,133662,133663],{"class":2268},"\u002F* 粘性定位 *\u002F\n",[167,133665,133666,133669,133671,133673,133675,133678],{"class":169,"line":785},[167,133667,133668],{"class":173},".sticky",[167,133670,81794],{"class":512},[167,133672,130503],{"class":184},[167,133674,53435],{"class":512},[167,133676,133677],{"class":184},"sticky",[167,133679,131073],{"class":512},[40,133681,133682,133685],{"start":796},[43,133683,133684],{},"一定要用好注释",[43,133686,133687],{},"浮动的盒子不会有外边距合并的问题",[2113,133689,133031],{},{"title":32,"searchDepth":191,"depth":191,"links":133691},[133692,133693],{"id":133068,"depth":191,"text":133069},{"id":133132,"depth":191,"text":133133,"children":133694},[133695,133696,133697,133698,133699,133700,133701],{"id":133136,"depth":205,"text":133137},{"id":133242,"depth":205,"text":133243},{"id":133278,"depth":205,"text":133279},{"id":133299,"depth":205,"text":133300},{"id":133334,"depth":205,"text":133335},{"id":133367,"depth":205,"text":133368},{"id":133442,"depth":205,"text":133443},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133060,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133708,"title":133709,"body":133710,"description":25403,"extension":2140,"meta":135196,"navigation":740,"path":135197,"seo":135198,"stem":135199,"__hash__":135200},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133711,"toc":135188},[133712,133715,133719,133723,133734,133738,133755,133799,133832,133835,133852,133855,133858,133902,133906,133910,133913,133916,133920,133923,133934,133997,134038,134041,134056,134110,134118,134121,134132,134186,134212,134215,134228,134282,134314,134368,134391,134445,134448,134451,134458,134512,134533,134587,134590,134593,134678,134686,134743,134766,134770,134773,134791,134795,134814,134868,134906,134910,134913,134916,134938,134942,134950,134953,134958,134969,134972,134976,134990,135034,135037,135041,135044,135049,135075,135080,135157,135160,135164,135167,135170,135173,135176,135179,135182,135185],[10,133713,133709],{"id":133714},"_11-传统布局与定位体系",[14,133716,133718],{"id":133717},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[494,133720,133722],{"id":133721},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3205,133724,133725,133728,133731],{},[43,133726,133727],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[43,133729,133730],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[43,133732,133733],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[494,133735,133737],{"id":133736},"_1112-浮动","11.1.2 浮动",[3205,133739,133740,133743,133746,133749,133752],{},[43,133741,133742],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[43,133744,133745],{},"浮动可以改变元素标签默认的排列方式",[43,133747,133748],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[43,133750,133751],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[43,133753,133754],{},"在使用行内块转换时盒子之间是有空隙的",[26,133756,133757],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,133758,133759,133765,133775,133779,133785,133795],{"__ignoreMap":32},[167,133760,133761,133763],{"class":169,"line":170},[167,133762,132616],{"class":173},[167,133764,17598],{"class":512},[167,133766,133767,133769,133771,133773],{"class":169,"line":191},[167,133768,132623],{"class":184},[167,133770,53435],{"class":512},[167,133772,79],{"class":184},[167,133774,3359],{"class":512},[167,133776,133777],{"class":169,"line":205},[167,133778,3630],{"class":512},[167,133780,133781,133783],{"class":169,"line":219},[167,133782,132638],{"class":173},[167,133784,17598],{"class":512},[167,133786,133787,133789,133791,133793],{"class":169,"line":230},[167,133788,132623],{"class":184},[167,133790,53435],{"class":512},[167,133792,74510],{"class":184},[167,133794,3359],{"class":512},[167,133796,133797],{"class":169,"line":241},[167,133798,3630],{"class":512},[68,133800,133801,133809],{},[71,133802,133803],{},[74,133804,133805,133807],{},[77,133806,128607],{"align":79},[77,133808,29506],{"align":79},[85,133810,133811,133818,133825],{},[74,133812,133813,133815],{},[90,133814,56727],{"align":79},[90,133816,133817],{"align":79},"元素不浮动（默认值）",[74,133819,133820,133822],{},[90,133821,79],{"align":79},[90,133823,133824],{"align":79},"元素向左浮动",[74,133826,133827,133829],{},[90,133828,74510],{"align":79},[90,133830,133831],{"align":79},"元素向右浮动",[19,133833,133834],{},"浮动重点：",[3205,133836,133837,133840,133843,133846,133849],{},[43,133838,133839],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[43,133841,133842],{},"浮动的元素会一行内显示并且元素顶部对齐",[43,133844,133845],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[43,133847,133848],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[43,133850,133851],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133853,133854],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133856,133857],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,133859,133860],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,133861,133862,133868,133878,133882,133888,133898],{"__ignoreMap":32},[167,133863,133864,133866],{"class":169,"line":170},[167,133865,132616],{"class":173},[167,133867,17598],{"class":512},[167,133869,133870,133872,133874,133876],{"class":169,"line":191},[167,133871,132623],{"class":184},[167,133873,53435],{"class":512},[167,133875,79],{"class":184},[167,133877,3359],{"class":512},[167,133879,133880],{"class":169,"line":205},[167,133881,3630],{"class":512},[167,133883,133884,133886],{"class":169,"line":219},[167,133885,132638],{"class":173},[167,133887,17598],{"class":512},[167,133889,133890,133892,133894,133896],{"class":169,"line":230},[167,133891,132623],{"class":184},[167,133893,53435],{"class":512},[167,133895,74510],{"class":184},[167,133897,3359],{"class":512},[167,133899,133900],{"class":169,"line":241},[167,133901,3630],{"class":512},[494,133903,133905],{"id":133904},"_1113-定位","11.1.3 定位",[24024,133907,133909],{"id":133908},"_11131-使用场景","11.1.3.1 使用场景",[19,133911,133912],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133914,133915],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24024,133917,133919],{"id":133918},"_11132-定位组成","11.1.3.2 定位组成",[19,133921,133922],{},"定位 = 定位模式 + 边偏移",[40,133924,133925],{},[43,133926,133927,133930,133931],{},[2354,133928,133929],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2354,133932,133933],{},"定位模式",[26,133935,133937],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[34,133938,133939,133945,133959,133976,133993],{"__ignoreMap":32},[167,133940,133941,133943],{"class":169,"line":170},[167,133942,131991],{"class":173},[167,133944,17598],{"class":512},[167,133946,133947,133950,133952,133954,133956],{"class":169,"line":191},[167,133948,133949],{"class":184},"  position",[167,133951,53435],{"class":512},[167,133953,56754],{"class":184},[167,133955,132006],{"class":512},[167,133957,133958],{"class":2268},"\u002F* 定位模式 *\u002F\n",[167,133960,133961,133964,133966,133968,133970,133973],{"class":169,"line":205},[167,133962,133963],{"class":184},"  top",[167,133965,53435],{"class":512},[167,133967,2646],{"class":184},[167,133969,53490],{"class":731},[167,133971,133972],{"class":512},";           ",[167,133974,133975],{"class":2268},"\u002F* 边偏移：上 *\u002F\n",[167,133977,133978,133981,133983,133985,133987,133990],{"class":169,"line":219},[167,133979,133980],{"class":184},"  left",[167,133982,53435],{"class":512},[167,133984,2900],{"class":184},[167,133986,53490],{"class":731},[167,133988,133989],{"class":512},";          ",[167,133991,133992],{"class":2268},"\u002F* 边偏移：左 *\u002F\n",[167,133994,133995],{"class":169,"line":230},[167,133996,3630],{"class":512},[68,133998,133999,134008],{},[71,134000,134001],{},[74,134002,134003,134005],{},[77,134004,2357],{"align":79},[77,134006,134007],{"align":79},"语义",[85,134009,134010,134017,134024,134031],{},[74,134011,134012,134014],{},[90,134013,133596],{"align":79},[90,134015,134016],{"align":79},"静态定位",[74,134018,134019,134021],{},[90,134020,56754],{"align":79},[90,134022,134023],{"align":79},"相对定位",[74,134025,134026,134028],{},[90,134027,56821],{"align":79},[90,134029,134030],{"align":79},"绝对定位",[74,134032,134033,134035],{},[90,134034,88219],{"align":79},[90,134036,134037],{"align":79},"固定定位",[19,134039,134040],{},"（1）静态定位：",[3205,134042,134043,134054],{},[43,134044,134045,134046,134049,134050,134053],{},"静态定位是元素的 ",[2354,134047,134048],{},"默认定位方式"," ， ",[2354,134051,134052],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[43,134055,7213],{},[26,134057,134058],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134059,134060,134066,134078,134092,134106],{"__ignoreMap":32},[167,134061,134062,134064],{"class":169,"line":170},[167,134063,131991],{"class":173},[167,134065,17598],{"class":512},[167,134067,134068,134070,134072,134074,134076],{"class":169,"line":191},[167,134069,133949],{"class":184},[167,134071,53435],{"class":512},[167,134073,56754],{"class":184},[167,134075,132006],{"class":512},[167,134077,133958],{"class":2268},[167,134079,134080,134082,134084,134086,134088,134090],{"class":169,"line":205},[167,134081,133963],{"class":184},[167,134083,53435],{"class":512},[167,134085,2646],{"class":184},[167,134087,53490],{"class":731},[167,134089,133972],{"class":512},[167,134091,133975],{"class":2268},[167,134093,134094,134096,134098,134100,134102,134104],{"class":169,"line":219},[167,134095,133980],{"class":184},[167,134097,53435],{"class":512},[167,134099,2900],{"class":184},[167,134101,53490],{"class":731},[167,134103,133989],{"class":512},[167,134105,133992],{"class":2268},[167,134107,134108],{"class":169,"line":230},[167,134109,3630],{"class":512},[3205,134111,134112,134115],{},[43,134113,134114],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[43,134116,134117],{},"静态定位在布局时我们几乎不用的",[19,134119,134120],{},"（2）相对定位",[3205,134122,134123,134130],{},[43,134124,134125,134126,134129],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2354,134127,134128],{},"原来的位置"," 来说的（自恋型）",[43,134131,7213],{},[26,134133,134134],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134135,134136,134142,134154,134168,134182],{"__ignoreMap":32},[167,134137,134138,134140],{"class":169,"line":170},[167,134139,131991],{"class":173},[167,134141,17598],{"class":512},[167,134143,134144,134146,134148,134150,134152],{"class":169,"line":191},[167,134145,133949],{"class":184},[167,134147,53435],{"class":512},[167,134149,56754],{"class":184},[167,134151,132006],{"class":512},[167,134153,133958],{"class":2268},[167,134155,134156,134158,134160,134162,134164,134166],{"class":169,"line":205},[167,134157,133963],{"class":184},[167,134159,53435],{"class":512},[167,134161,2646],{"class":184},[167,134163,53490],{"class":731},[167,134165,133972],{"class":512},[167,134167,133975],{"class":2268},[167,134169,134170,134172,134174,134176,134178,134180],{"class":169,"line":219},[167,134171,133980],{"class":184},[167,134173,53435],{"class":512},[167,134175,2900],{"class":184},[167,134177,53490],{"class":731},[167,134179,133989],{"class":512},[167,134181,133992],{"class":2268},[167,134183,134184],{"class":169,"line":230},[167,134185,3630],{"class":512},[3205,134187,134188],{},[43,134189,134190,134191,134193,134194,134196,134197,134200,134201,134204,134205,134207,134208,134211],{},"相对定位的特点：",[55707,134192],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55707,134195],{},"  ② ",[2354,134198,134199],{},"原来"," 在标准流的 ",[2354,134202,134203],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55707,134206],{},"  ③因此， ",[2354,134209,134210],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134213,134214],{},"（3）绝对定位",[3205,134216,134217,134226],{},[43,134218,134219,134221,134222,134225],{},[2354,134220,134030],{}," 是元素在移动位置的时候，是相对于它 ",[2354,134223,134224],{},"祖先元素"," 来说的（拼爹型）",[43,134227,7213],{},[26,134229,134230],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134231,134232,134238,134250,134264,134278],{"__ignoreMap":32},[167,134233,134234,134236],{"class":169,"line":170},[167,134235,131991],{"class":173},[167,134237,17598],{"class":512},[167,134239,134240,134242,134244,134246,134248],{"class":169,"line":191},[167,134241,133949],{"class":184},[167,134243,53435],{"class":512},[167,134245,56754],{"class":184},[167,134247,132006],{"class":512},[167,134249,133958],{"class":2268},[167,134251,134252,134254,134256,134258,134260,134262],{"class":169,"line":205},[167,134253,133963],{"class":184},[167,134255,53435],{"class":512},[167,134257,2646],{"class":184},[167,134259,53490],{"class":731},[167,134261,133972],{"class":512},[167,134263,133975],{"class":2268},[167,134265,134266,134268,134270,134272,134274,134276],{"class":169,"line":219},[167,134267,133980],{"class":184},[167,134269,53435],{"class":512},[167,134271,2900],{"class":184},[167,134273,53490],{"class":731},[167,134275,133989],{"class":512},[167,134277,133992],{"class":2268},[167,134279,134280],{"class":169,"line":230},[167,134281,3630],{"class":512},[3205,134283,134284,134299,134308,134311],{},[43,134285,134286,134287,134289,134290,134292,134293,134295,134296,134298],{},"绝对定位的特点：",[55707,134288],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55707,134291],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55707,134294],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55707,134297],{},"  (4)固定定位",[43,134300,134301,134303,134304,134307],{},[2354,134302,134037],{}," 是元素 ",[2354,134305,134306],{},"固定于浏览器可视区的位置"," 。（认死理型）",[43,134309,134310],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[43,134312,134313],{},"语法:",[26,134315,134316],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134317,134318,134324,134336,134350,134364],{"__ignoreMap":32},[167,134319,134320,134322],{"class":169,"line":170},[167,134321,131991],{"class":173},[167,134323,17598],{"class":512},[167,134325,134326,134328,134330,134332,134334],{"class":169,"line":191},[167,134327,133949],{"class":184},[167,134329,53435],{"class":512},[167,134331,56754],{"class":184},[167,134333,132006],{"class":512},[167,134335,133958],{"class":2268},[167,134337,134338,134340,134342,134344,134346,134348],{"class":169,"line":205},[167,134339,133963],{"class":184},[167,134341,53435],{"class":512},[167,134343,2646],{"class":184},[167,134345,53490],{"class":731},[167,134347,133972],{"class":512},[167,134349,133975],{"class":2268},[167,134351,134352,134354,134356,134358,134360,134362],{"class":169,"line":219},[167,134353,133980],{"class":184},[167,134355,53435],{"class":512},[167,134357,2900],{"class":184},[167,134359,53490],{"class":731},[167,134361,133989],{"class":512},[167,134363,133992],{"class":2268},[167,134365,134366],{"class":169,"line":230},[167,134367,3630],{"class":512},[3205,134369,134370,134379],{},[43,134371,134372,134373,134375,134376,134378],{},"特点:",[55707,134374],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55707,134377],{},"  ②固定定位不再占有原先的位置,完全脱标",[43,134380,134381,134382,134384,134385,134387,134388,134390],{},"固定在版心位置的方法:",[55707,134383],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55707,134386],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55707,134389],{},"  实例：",[26,134392,134393],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134394,134395,134401,134413,134427,134441],{"__ignoreMap":32},[167,134396,134397,134399],{"class":169,"line":170},[167,134398,131991],{"class":173},[167,134400,17598],{"class":512},[167,134402,134403,134405,134407,134409,134411],{"class":169,"line":191},[167,134404,133949],{"class":184},[167,134406,53435],{"class":512},[167,134408,56754],{"class":184},[167,134410,132006],{"class":512},[167,134412,133958],{"class":2268},[167,134414,134415,134417,134419,134421,134423,134425],{"class":169,"line":205},[167,134416,133963],{"class":184},[167,134418,53435],{"class":512},[167,134420,2646],{"class":184},[167,134422,53490],{"class":731},[167,134424,133972],{"class":512},[167,134426,133975],{"class":2268},[167,134428,134429,134431,134433,134435,134437,134439],{"class":169,"line":219},[167,134430,133980],{"class":184},[167,134432,53435],{"class":512},[167,134434,2900],{"class":184},[167,134436,53490],{"class":731},[167,134438,133989],{"class":512},[167,134440,133992],{"class":2268},[167,134442,134443],{"class":169,"line":230},[167,134444,3630],{"class":512},[3528,134446],{"style":127999,"src":134447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134449,134450],{},"(5)粘性定位",[3205,134452,134453,134456],{},[43,134454,134455],{},"粘性定位可以被认为是相对定位和固定定位的混合",[43,134457,7213],{},[26,134459,134460],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134461,134462,134468,134480,134494,134508],{"__ignoreMap":32},[167,134463,134464,134466],{"class":169,"line":170},[167,134465,131991],{"class":173},[167,134467,17598],{"class":512},[167,134469,134470,134472,134474,134476,134478],{"class":169,"line":191},[167,134471,133949],{"class":184},[167,134473,53435],{"class":512},[167,134475,56754],{"class":184},[167,134477,132006],{"class":512},[167,134479,133958],{"class":2268},[167,134481,134482,134484,134486,134488,134490,134492],{"class":169,"line":205},[167,134483,133963],{"class":184},[167,134485,53435],{"class":512},[167,134487,2646],{"class":184},[167,134489,53490],{"class":731},[167,134491,133972],{"class":512},[167,134493,133975],{"class":2268},[167,134495,134496,134498,134500,134502,134504,134506],{"class":169,"line":219},[167,134497,133980],{"class":184},[167,134499,53435],{"class":512},[167,134501,2900],{"class":184},[167,134503,53490],{"class":731},[167,134505,133989],{"class":512},[167,134507,133992],{"class":2268},[167,134509,134510],{"class":169,"line":230},[167,134511,3630],{"class":512},[3205,134513,134514],{},[43,134515,134516,134517,134519,134520,134522,134523,134525,134526,134529,134530,134532],{},"粘性定位的特点：",[55707,134518],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55707,134521],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55707,134524],{},"  ③必须添加 top 、left、right、bottom ",[2354,134527,134528],{},"其中一个"," 才有效",[55707,134531],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,134534,134535],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134536,134537,134543,134555,134569,134583],{"__ignoreMap":32},[167,134538,134539,134541],{"class":169,"line":170},[167,134540,131991],{"class":173},[167,134542,17598],{"class":512},[167,134544,134545,134547,134549,134551,134553],{"class":169,"line":191},[167,134546,133949],{"class":184},[167,134548,53435],{"class":512},[167,134550,56754],{"class":184},[167,134552,132006],{"class":512},[167,134554,133958],{"class":2268},[167,134556,134557,134559,134561,134563,134565,134567],{"class":169,"line":205},[167,134558,133963],{"class":184},[167,134560,53435],{"class":512},[167,134562,2646],{"class":184},[167,134564,53490],{"class":731},[167,134566,133972],{"class":512},[167,134568,133975],{"class":2268},[167,134570,134571,134573,134575,134577,134579,134581],{"class":169,"line":219},[167,134572,133980],{"class":184},[167,134574,53435],{"class":512},[167,134576,2900],{"class":184},[167,134578,53490],{"class":731},[167,134580,133989],{"class":512},[167,134582,133992],{"class":2268},[167,134584,134585],{"class":169,"line":230},[167,134586,3630],{"class":512},[3528,134588],{"style":127999,"src":134589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134591,134592],{},"(6)总结",[68,134594,134595,134610],{},[71,134596,134597],{},[74,134598,134599,134601,134604,134607],{},[77,134600,133933],{"align":79},[77,134602,134603],{"align":79},"是否脱标",[77,134605,134606],{"align":79},"移动位置",[77,134608,134609],{"align":79},"是否常用",[85,134611,134612,134625,134639,134653,134666],{},[74,134613,134614,134617,134619,134622],{},[90,134615,134616],{"align":79},"Static 静态定位",[90,134618,106269],{"align":79},[90,134620,134621],{"align":79},"不能使用边偏移",[90,134623,134624],{"align":79},"很少",[74,134626,134627,134630,134633,134636],{},[90,134628,134629],{"align":79},"Relative 相对定位",[90,134631,134632],{"align":79},"否(占有位置)",[90,134634,134635],{"align":79},"相对于自身位置移动",[90,134637,134638],{"align":79},"基本单独使用",[74,134640,134641,134644,134647,134650],{},[90,134642,134643],{"align":79},"Absolute 绝对定位",[90,134645,134646],{"align":79},"是(不占有位置)",[90,134648,134649],{"align":79},"带有定位的父级",[90,134651,134652],{"align":79},"要和定位父级元素搭配使用",[74,134654,134655,134658,134660,134663],{},[90,134656,134657],{"align":79},"Fixed 固定定位",[90,134659,134646],{"align":79},[90,134661,134662],{"align":79},"浏览器可视区",[90,134664,134665],{"align":79},"单独使用,不需要父级",[74,134667,134668,134671,134673,134675],{},[90,134669,134670],{"align":79},"Sticky 粘性定位",[90,134672,134632],{"align":79},[90,134674,134662],{"align":79},[90,134676,134677],{"align":79},"当前阶段少",[40,134679,134680],{"start":191},[43,134681,134682,134685],{},[2354,134683,134684],{},"边偏移"," 则决定了该元素的最终位置",[68,134687,134688,134699],{},[71,134689,134690],{},[74,134691,134692,134695,134697],{},[77,134693,134694],{"align":79},"边偏移属性",[77,134696,29509],{"align":79},[77,134698,29506],{"align":79},[85,134700,134701,134712,134723,134733],{},[74,134702,134703,134706,134709],{},[90,134704,134705],{"align":79},"top",[90,134707,134708],{"align":79},"top: 80px;",[90,134710,134711],{"align":79},"顶端偏移量，定义元素相对于父元素上边线的距离",[74,134713,134714,134717,134720],{},[90,134715,134716],{"align":79},"bottom",[90,134718,134719],{"align":79},"bottom: 80px ;",[90,134721,134722],{"align":79},"底部偏移量，定义元素相对于其父元素下边线的距离",[74,134724,134725,134727,134730],{},[90,134726,79],{"align":79},[90,134728,134729],{"align":79},"left: 80px ;",[90,134731,134732],{"align":79},"左侧偏移量，定义元素相对于其父元素左边线的距离",[74,134734,134735,134737,134740],{},[90,134736,74510],{"align":79},[90,134738,134739],{"align":79},"right: 80px ;",[90,134741,134742],{"align":79},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3205,134744,134745],{},[43,134746,11053,134747,134749,134750,134752,134753,134755,134756,134759,134760,134762,134763,134765],{},[55707,134748],{},"  ① ",[2354,134751,134684],{}," 需要和 ",[2354,134754,133933],{}," 联合使用， ",[2354,134757,134758],{},"单独使用无效"," ；",[55707,134761],{},"  ②top和bottom不要同时使用",[55707,134764],{},"  ③left和right不要同时使用",[24024,134767,134769],{"id":134768},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134771,134772],{},"子级是绝对定位的话，父级要用相对定位",[3205,134774,134775,134778,134781,134784],{},[43,134776,134777],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[43,134779,134780],{},"父盒子需要加定位限制子盒子在父盒子内显示",[43,134782,134783],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[43,134785,134786,134787,134790],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2354,134788,134789],{},"子绝父绝"," 也会遇到",[24024,134792,134794],{"id":134793},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3205,134796,134797,134812],{},[43,134798,134799,134800,134803,134804,134807,134808,134811],{},"在使用 ",[2354,134801,134802],{},"定位"," 布局时，可能会 ",[2354,134805,134806],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2354,134809,134810],{},"z-index"," 来控制盒子的前后次序 (z轴)",[43,134813,7213],{},[26,134815,134816],{"className":128143,"code":133936,"language":128145,"meta":32,"style":32},[34,134817,134818,134824,134836,134850,134864],{"__ignoreMap":32},[167,134819,134820,134822],{"class":169,"line":170},[167,134821,131991],{"class":173},[167,134823,17598],{"class":512},[167,134825,134826,134828,134830,134832,134834],{"class":169,"line":191},[167,134827,133949],{"class":184},[167,134829,53435],{"class":512},[167,134831,56754],{"class":184},[167,134833,132006],{"class":512},[167,134835,133958],{"class":2268},[167,134837,134838,134840,134842,134844,134846,134848],{"class":169,"line":205},[167,134839,133963],{"class":184},[167,134841,53435],{"class":512},[167,134843,2646],{"class":184},[167,134845,53490],{"class":731},[167,134847,133972],{"class":512},[167,134849,133975],{"class":2268},[167,134851,134852,134854,134856,134858,134860,134862],{"class":169,"line":219},[167,134853,133980],{"class":184},[167,134855,53435],{"class":512},[167,134857,2900],{"class":184},[167,134859,53490],{"class":731},[167,134861,133989],{"class":512},[167,134863,133992],{"class":2268},[167,134865,134866],{"class":169,"line":230},[167,134867,3630],{"class":512},[3205,134869,134870],{},[43,134871,134872,134873,134749,134875,134877,134878,129306,134881,449,134884,134886,134887,134889,134890,134893,134894,134759,134897,134899,134900,134903,134905],{},"z-index的特性",[55707,134874],{},[2354,134876,128607],{}," ： ",[2354,134879,134880],{},"正整数",[2354,134882,134883],{},"负整数",[2354,134885,1154],{}," ，默认值是 0，数值越大，盒子越靠上；",[55707,134888],{},"  ②如果 ",[2354,134891,134892],{},"属性值相同"," ，则按照书写顺序， ",[2354,134895,134896],{},"后来居上",[55707,134898],{},"  ③数字后面 ",[2354,134901,134902],{},"不能加单位",[55707,134904],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24024,134907,134909],{"id":134908},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134911,134912],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134914,134915],{},"方法:",[3205,134917,134918,134928],{},[43,134919,134920,134921,134924,134925],{},"left: 50%; 让 ",[2354,134922,134923],{},"盒子的左侧"," 移动到 ",[2354,134926,134927],{},"父级元素的水平中心位置",[43,134929,134930,134931,134934,134935],{},"margin-left: -100px; 让盒子 ",[2354,134932,134933],{},"向左"," 移动 ",[2354,134936,134937],{},"自身宽度的一半",[24024,134939,134941],{"id":134940},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[40,134943,134944,134947],{},[43,134945,134946],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[43,134948,134949],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134951,134952],{},"也就是说绝对定位和固定定位和浮动类似",[40,134954,134955],{"start":205},[43,134956,134957],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3205,134959,134960,134963,134966],{},[43,134961,134962],{},"可以用inline-block 转换为行内块",[43,134964,134965],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[43,134967,134968],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134970,134971],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24024,134973,134975],{"id":134974},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[40,134977,134978,134981,134984,134987],{},[43,134979,134980],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[43,134982,134983],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[43,134985,134986],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[43,134988,134989],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,134991,134992],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,134993,134994,135000,135010,135014,135020,135030],{"__ignoreMap":32},[167,134995,134996,134998],{"class":169,"line":170},[167,134997,132616],{"class":173},[167,134999,17598],{"class":512},[167,135001,135002,135004,135006,135008],{"class":169,"line":191},[167,135003,132623],{"class":184},[167,135005,53435],{"class":512},[167,135007,79],{"class":184},[167,135009,3359],{"class":512},[167,135011,135012],{"class":169,"line":205},[167,135013,3630],{"class":512},[167,135015,135016,135018],{"class":169,"line":219},[167,135017,132638],{"class":173},[167,135019,17598],{"class":512},[167,135021,135022,135024,135026,135028],{"class":169,"line":230},[167,135023,132623],{"class":184},[167,135025,53435],{"class":512},[167,135027,74510],{"class":184},[167,135029,3359],{"class":512},[167,135031,135032],{"class":169,"line":241},[167,135033,3630],{"class":512},[3528,135035],{"style":127999,"src":135036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24024,135038,135040],{"id":135039},"_11138-轮播图","11.1.3.8 轮播图",[3528,135042],{"style":127999,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[40,135045,135046],{},[43,135047,135048],{},"制作顺序:",[3205,135050,135051,135054,135057,135066],{},[43,135052,135053],{},"大盒子我们类名为： tb-promo 淘宝广告",[43,135055,135056],{},"里面先放一张图片",[43,135058,135059,135060,135062,135063,135065],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55707,135061],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55707,135064],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[43,135067,135068,135069,135071,135072,135074],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55707,135070],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55707,135073],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[40,135076,135077],{"start":191},[43,135078,135079],{},"代码模块",[26,135081,135083],{"className":128143,"code":135082,"language":128145,"meta":32,"style":32},"\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",[34,135084,135085,135090,135097,135107,135117,135127,135131,135136,135143,135153],{"__ignoreMap":32},[167,135086,135087],{"class":169,"line":170},[167,135088,135089],{"class":2268},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[167,135091,135092,135095],{"class":169,"line":191},[167,135093,135094],{"class":173},".son",[167,135096,17598],{"class":512},[167,135098,135099,135101,135103,135105],{"class":169,"line":205},[167,135100,133949],{"class":184},[167,135102,53435],{"class":512},[167,135104,56821],{"class":184},[167,135106,3359],{"class":512},[167,135108,135109,135111,135113,135115],{"class":169,"line":219},[167,135110,133963],{"class":184},[167,135112,53435],{"class":512},[167,135114,1154],{"class":184},[167,135116,3359],{"class":512},[167,135118,135119,135121,135123,135125],{"class":169,"line":230},[167,135120,133980],{"class":184},[167,135122,53435],{"class":512},[167,135124,1154],{"class":184},[167,135126,3359],{"class":512},[167,135128,135129],{"class":169,"line":241},[167,135130,3630],{"class":512},[167,135132,135133],{"class":169,"line":261},[167,135134,135135],{"class":2268},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[167,135137,135138,135141],{"class":169,"line":773},[167,135139,135140],{"class":173},".father",[167,135142,17598],{"class":512},[167,135144,135145,135147,135149,135151],{"class":169,"line":779},[167,135146,133949],{"class":184},[167,135148,53435],{"class":512},[167,135150,56754],{"class":184},[167,135152,3359],{"class":512},[167,135154,135155],{"class":169,"line":785},[167,135156,3630],{"class":512},[19,135158,135159],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[494,135161,135163],{"id":135162},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3528,135165],{"style":127999,"src":135166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135168,135169],{},"✨ 黄金口诀：",[19,135171,135172],{},"\"TOP正下负上，LEFT正右负左\"",[19,135174,135175],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135177,135178],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135180,135181],{},"✨ 简单记：",[19,135183,135184],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2113,135186,135187],{},"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":32,"searchDepth":191,"depth":191,"links":135189},[135190],{"id":133717,"depth":191,"text":133718,"children":135191},[135192,135193,135194,135195],{"id":133721,"depth":205,"text":133722},{"id":133736,"depth":205,"text":133737},{"id":133904,"depth":205,"text":133905},{"id":135162,"depth":205,"text":135163},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133709,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135202,"title":135203,"body":135204,"description":25403,"extension":2140,"meta":136627,"navigation":740,"path":136628,"seo":136629,"stem":136630,"__hash__":136631},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135205,"toc":136606},[135206,135209,135213,135221,135225,135230,135238,135250,135254,135259,135267,135278,135282,135287,135328,135336,135340,135343,135346,135349,135443,135446,135540,135543,135637,135640,135643,135678,135681,135684,135714,135717,135720,135723,135726,135729,135732,135735,135805,135808,135812,135816,135857,135861,135867,135870,135873,135877,135880,135883,135886,135967,135970,135973,135977,135981,135984,135987,135990,135993,135996,136002,136011,136015,136034,136038,136048,136051,136054,136057,136060,136063,136066,136069,136072,136081,136085,136094,136097,136102,136155,136160,136326,136329,136332,136337,136340,136343,136346,136349,136354,136502,136505,136508,136513,136516,136521,136555,136558,136561,136565,136568,136575,136578,136581,136584,136587,136590,136593,136596,136600,136603],[10,135207,135203],{"id":135208},"_12-显示隐藏与图形资源",[14,135210,135212],{"id":135211},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3205,135214,135215,135218],{},[43,135216,135217],{},"目的:让一个元素在页面中消失或者显示出来",[43,135219,135220],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[494,135222,135224],{"id":135223},"_1211-display-显示","12.1.1 display 显示",[40,135226,135227],{},[43,135228,135229],{},"display 设置或检索对象是否及如何显示",[3205,135231,135232,135235],{},[43,135233,135234],{},"display: none;隐藏对象",[43,135236,135237],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[40,135239,135240,135247],{"start":191},[43,135241,135242,135243,135246],{},"特点： display 隐藏元素后， ",[2354,135244,135245],{},"不再占"," 有原来的位置",[43,135248,135249],{},"在js中使用非常的广泛",[494,135251,135253],{"id":135252},"_1212-visibility可见性","12.1.2 visibility可见性",[40,135255,135256],{},[43,135257,135258],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3205,135260,135261,135264],{},[43,135262,135263],{},"visibility： visible；元素可见",[43,135265,135266],{},"visibility：hidden；元素隐藏",[40,135268,135269,135272,135275],{"start":191},[43,135270,135271],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[43,135273,135274],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[43,135276,135277],{},"隐藏后继续占有原有位置",[494,135279,135281],{"id":135280},"_1213-overflow溢出","12.1.3 overflow溢出",[3205,135283,135284],{},[43,135285,135286],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[68,135288,135289,135297],{},[71,135290,135291],{},[74,135292,135293,135295],{},[77,135294,128607],{"align":79},[77,135296,29506],{"align":79},[85,135298,135299,135307,135314,135321],{},[74,135300,135301,135304],{},[90,135302,135303],{"align":79},"visible",[90,135305,135306],{"align":79},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[74,135308,135309,135311],{},[90,135310,63703],{"align":79},[90,135312,135313],{"align":79},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[74,135315,135316,135318],{},[90,135317,130563],{"align":79},[90,135319,135320],{"align":79},"不管超出内容否，总是显示滚动条",[74,135322,135323,135325],{},[90,135324,74651],{"align":79},[90,135326,135327],{"align":79},"超出自动显示滚动条，不超出不显示滚动条",[3205,135329,135330,135333],{},[43,135331,135332],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[43,135334,135335],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[494,135337,135339],{"id":135338},"_1214-案例收获","12.1.4 案例收获",[3528,135341],{"style":127999,"src":135342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135344,135345],{},"问题：没做出来动态效果，使用hover没实现",[19,135347,135348],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,135350,135351],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,135352,135353,135357,135371,135375,135389,135393,135407,135411,135425,135429],{"__ignoreMap":32},[167,135354,135355],{"class":169,"line":170},[167,135356,133582],{"class":2268},[167,135358,135359,135361,135363,135365,135367,135369],{"class":169,"line":191},[167,135360,133587],{"class":173},[167,135362,81794],{"class":512},[167,135364,130503],{"class":184},[167,135366,53435],{"class":512},[167,135368,133596],{"class":184},[167,135370,131073],{"class":512},[167,135372,135373],{"class":169,"line":205},[167,135374,133603],{"class":2268},[167,135376,135377,135379,135381,135383,135385,135387],{"class":169,"line":219},[167,135378,133608],{"class":173},[167,135380,81794],{"class":512},[167,135382,130503],{"class":184},[167,135384,53435],{"class":512},[167,135386,56754],{"class":184},[167,135388,131073],{"class":512},[167,135390,135391],{"class":169,"line":230},[167,135392,133623],{"class":2268},[167,135394,135395,135397,135399,135401,135403,135405],{"class":169,"line":241},[167,135396,133628],{"class":173},[167,135398,81794],{"class":512},[167,135400,130503],{"class":184},[167,135402,53435],{"class":512},[167,135404,56821],{"class":184},[167,135406,131073],{"class":512},[167,135408,135409],{"class":169,"line":261},[167,135410,133643],{"class":2268},[167,135412,135413,135415,135417,135419,135421,135423],{"class":169,"line":773},[167,135414,133648],{"class":173},[167,135416,81794],{"class":512},[167,135418,130503],{"class":184},[167,135420,53435],{"class":512},[167,135422,88219],{"class":184},[167,135424,131073],{"class":512},[167,135426,135427],{"class":169,"line":779},[167,135428,133663],{"class":2268},[167,135430,135431,135433,135435,135437,135439,135441],{"class":169,"line":785},[167,135432,133668],{"class":173},[167,135434,81794],{"class":512},[167,135436,130503],{"class":184},[167,135438,53435],{"class":512},[167,135440,133677],{"class":184},[167,135442,131073],{"class":512},[19,135444,135445],{},"完整代码：",[26,135447,135448],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,135449,135450,135454,135468,135472,135486,135490,135504,135508,135522,135526],{"__ignoreMap":32},[167,135451,135452],{"class":169,"line":170},[167,135453,133582],{"class":2268},[167,135455,135456,135458,135460,135462,135464,135466],{"class":169,"line":191},[167,135457,133587],{"class":173},[167,135459,81794],{"class":512},[167,135461,130503],{"class":184},[167,135463,53435],{"class":512},[167,135465,133596],{"class":184},[167,135467,131073],{"class":512},[167,135469,135470],{"class":169,"line":205},[167,135471,133603],{"class":2268},[167,135473,135474,135476,135478,135480,135482,135484],{"class":169,"line":219},[167,135475,133608],{"class":173},[167,135477,81794],{"class":512},[167,135479,130503],{"class":184},[167,135481,53435],{"class":512},[167,135483,56754],{"class":184},[167,135485,131073],{"class":512},[167,135487,135488],{"class":169,"line":230},[167,135489,133623],{"class":2268},[167,135491,135492,135494,135496,135498,135500,135502],{"class":169,"line":241},[167,135493,133628],{"class":173},[167,135495,81794],{"class":512},[167,135497,130503],{"class":184},[167,135499,53435],{"class":512},[167,135501,56821],{"class":184},[167,135503,131073],{"class":512},[167,135505,135506],{"class":169,"line":261},[167,135507,133643],{"class":2268},[167,135509,135510,135512,135514,135516,135518,135520],{"class":169,"line":773},[167,135511,133648],{"class":173},[167,135513,81794],{"class":512},[167,135515,130503],{"class":184},[167,135517,53435],{"class":512},[167,135519,88219],{"class":184},[167,135521,131073],{"class":512},[167,135523,135524],{"class":169,"line":779},[167,135525,133663],{"class":2268},[167,135527,135528,135530,135532,135534,135536,135538],{"class":169,"line":785},[167,135529,133668],{"class":173},[167,135531,81794],{"class":512},[167,135533,130503],{"class":184},[167,135535,53435],{"class":512},[167,135537,133677],{"class":184},[167,135539,131073],{"class":512},[19,135541,135542],{},"分布思路重点详解：",[26,135544,135545],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,135546,135547,135551,135565,135569,135583,135587,135601,135605,135619,135623],{"__ignoreMap":32},[167,135548,135549],{"class":169,"line":170},[167,135550,133582],{"class":2268},[167,135552,135553,135555,135557,135559,135561,135563],{"class":169,"line":191},[167,135554,133587],{"class":173},[167,135556,81794],{"class":512},[167,135558,130503],{"class":184},[167,135560,53435],{"class":512},[167,135562,133596],{"class":184},[167,135564,131073],{"class":512},[167,135566,135567],{"class":169,"line":205},[167,135568,133603],{"class":2268},[167,135570,135571,135573,135575,135577,135579,135581],{"class":169,"line":219},[167,135572,133608],{"class":173},[167,135574,81794],{"class":512},[167,135576,130503],{"class":184},[167,135578,53435],{"class":512},[167,135580,56754],{"class":184},[167,135582,131073],{"class":512},[167,135584,135585],{"class":169,"line":230},[167,135586,133623],{"class":2268},[167,135588,135589,135591,135593,135595,135597,135599],{"class":169,"line":241},[167,135590,133628],{"class":173},[167,135592,81794],{"class":512},[167,135594,130503],{"class":184},[167,135596,53435],{"class":512},[167,135598,56821],{"class":184},[167,135600,131073],{"class":512},[167,135602,135603],{"class":169,"line":261},[167,135604,133643],{"class":2268},[167,135606,135607,135609,135611,135613,135615,135617],{"class":169,"line":773},[167,135608,133648],{"class":173},[167,135610,81794],{"class":512},[167,135612,130503],{"class":184},[167,135614,53435],{"class":512},[167,135616,88219],{"class":184},[167,135618,131073],{"class":512},[167,135620,135621],{"class":169,"line":779},[167,135622,133663],{"class":2268},[167,135624,135625,135627,135629,135631,135633,135635],{"class":169,"line":785},[167,135626,133668],{"class":173},[167,135628,81794],{"class":512},[167,135630,130503],{"class":184},[167,135632,53435],{"class":512},[167,135634,133677],{"class":184},[167,135636,131073],{"class":512},[3528,135638],{"style":127999,"src":135639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135641,135642],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,135644,135646],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[34,135647,135648],{"__ignoreMap":32},[167,135649,135650,135652,135654,135656,135658,135661,135663,135665,135668,135671,135673,135676],{"class":169,"line":170},[167,135651,513],{"class":512},[167,135653,3528],{"class":516},[167,135655,57228],{"class":173},[167,135657,523],{"class":512},[167,135659,135660],{"class":177},"\"images\u002Fpic.jpg\"",[167,135662,57236],{"class":173},[167,135664,523],{"class":512},[167,135666,135667],{"class":177},"\"描述文字\"",[167,135669,135670],{"class":173}," title",[167,135672,523],{"class":512},[167,135674,135675],{"class":177},"\"悬停提示\"",[167,135677,537],{"class":512},[3528,135679],{"style":127999,"src":135680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135682,135683],{},"制造遮罩层",[26,135685,135686],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,135687,135688],{"__ignoreMap":32},[167,135689,135690,135692,135694,135696,135698,135700,135702,135704,135706,135708,135710,135712],{"class":169,"line":170},[167,135691,513],{"class":512},[167,135693,3528],{"class":516},[167,135695,57228],{"class":173},[167,135697,523],{"class":512},[167,135699,135660],{"class":177},[167,135701,57236],{"class":173},[167,135703,523],{"class":512},[167,135705,135667],{"class":177},[167,135707,135670],{"class":173},[167,135709,523],{"class":512},[167,135711,135675],{"class":177},[167,135713,537],{"class":512},[19,135715,135716],{},"此时是这样的为标准流",[3528,135718],{"style":127999,"src":135719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135721,135722],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135724,135725],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135727,135728],{},"让他在中间，用center(background-position)",[19,135730,135731],{},"将需要变的尽可能放到一个盒子中",[19,135733,135734],{},"放大盒子上内部盒子发生变化",[26,135736,135738],{"className":128143,"code":135737,"language":128145,"meta":32,"style":32},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[34,135739,135740,135746,135756,135760,135767,135777,135789,135801],{"__ignoreMap":32},[167,135741,135742,135744],{"class":169,"line":170},[167,135743,129210],{"class":173},[167,135745,17598],{"class":512},[167,135747,135748,135750,135752,135754],{"class":169,"line":191},[167,135749,133949],{"class":184},[167,135751,53435],{"class":512},[167,135753,56754],{"class":184},[167,135755,3359],{"class":512},[167,135757,135758],{"class":169,"line":205},[167,135759,3630],{"class":512},[167,135761,135762,135765],{"class":169,"line":219},[167,135763,135764],{"class":173},".child",[167,135766,17598],{"class":512},[167,135768,135769,135771,135773,135775],{"class":169,"line":230},[167,135770,133949],{"class":184},[167,135772,53435],{"class":512},[167,135774,56821],{"class":184},[167,135776,3359],{"class":512},[167,135778,135779,135781,135783,135785,135787],{"class":169,"line":241},[167,135780,133963],{"class":184},[167,135782,53435],{"class":512},[167,135784,2856],{"class":184},[167,135786,2528],{"class":731},[167,135788,3359],{"class":512},[167,135790,135791,135793,135795,135797,135799],{"class":169,"line":261},[167,135792,133980],{"class":184},[167,135794,53435],{"class":512},[167,135796,2856],{"class":184},[167,135798,2528],{"class":731},[167,135800,3359],{"class":512},[167,135802,135803],{"class":169,"line":773},[167,135804,3630],{"class":512},[19,135806,135807],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135809,135811],{"id":135810},"_122-精灵图","12.2 精灵图",[494,135813,135815],{"id":135814},"_1221-理解","12.2.1 理解",[40,135817,135818,135836],{},[43,135819,135820,135821,134049,135824,135827,135828,135831,135832,135835],{},"目的： ",[2354,135822,135823],{},"为了有效地减少服务器接收和发送请求的次数",[2354,135825,135826],{},"提高"," 页面的 ",[2354,135829,135830],{},"加载速度"," ，出现了 ",[2354,135833,135834],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[43,135837,135838,135839,135841,135842,135844,135845,135847,135848,135850,135851,135853,135854,135856],{},"使用精灵图核心：",[55707,135840],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55707,135843],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55707,135846],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55707,135849],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55707,135852],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55707,135855],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[494,135858,135860],{"id":135859},"_1222-扒图","12.2.2 扒图",[26,135862,135865],{"className":135863,"code":135864,"language":31},[29],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[34,135866,135864],{"__ignoreMap":32},[3528,135868],{"style":127999,"src":135869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3528,135871],{"style":127999,"src":135872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[494,135874,135876],{"id":135875},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3528,135878],{"style":127999,"src":135879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135881,135882],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3528,135884],{"style":127999,"src":135885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,135887,135889],{"className":128143,"code":135888,"language":128145,"meta":32,"style":32},"\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",[34,135890,135891,135896,135903,135915,135927,135946,135963],{"__ignoreMap":32},[167,135892,135893],{"class":169,"line":170},[167,135894,135895],{"class":2268},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[167,135897,135898,135901],{"class":169,"line":191},[167,135899,135900],{"class":173},".icon",[167,135902,17598],{"class":512},[167,135904,135905,135907,135909,135911,135913],{"class":169,"line":205},[167,135906,72556],{"class":184},[167,135908,53435],{"class":512},[167,135910,2900],{"class":184},[167,135912,53490],{"class":731},[167,135914,3359],{"class":512},[167,135916,135917,135919,135921,135923,135925],{"class":169,"line":219},[167,135918,72776],{"class":184},[167,135920,53435],{"class":512},[167,135922,2900],{"class":184},[167,135924,53490],{"class":731},[167,135926,3359],{"class":512},[167,135928,135929,135931,135933,135935,135937,135940,135942,135944],{"class":169,"line":230},[167,135930,72599],{"class":184},[167,135932,53435],{"class":512},[167,135934,63715],{"class":184},[167,135936,898],{"class":512},[167,135938,135939],{"class":7246},"sprites.png",[167,135941,15741],{"class":512},[167,135943,63725],{"class":184},[167,135945,3359],{"class":512},[167,135947,135948,135950,135952,135954,135956,135959,135961],{"class":169,"line":241},[167,135949,130403],{"class":184},[167,135951,53435],{"class":512},[167,135953,53761],{"class":184},[167,135955,53490],{"class":731},[167,135957,135958],{"class":184}," -20",[167,135960,53490],{"class":731},[167,135962,3359],{"class":512},[167,135964,135965],{"class":169,"line":261},[167,135966,3630],{"class":512},[3528,135968],{"style":127999,"src":135969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135971,135972],{},"在前端中坐标轴的正方向是右和下",[14,135974,135976],{"id":135975},"_123-字体图标","12.3 字体图标",[494,135978,135980],{"id":135979},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135982,135983],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135985,135986],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135988,135989],{},"1.图片文件还是比较大的。",[19,135991,135992],{},"2.图片本身放大和缩小会失真。",[19,135994,135995],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135997,135998,135999,27760],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2354,136000,136001],{},"字体图标 iconfont",[19,136003,136004,136007,136008,423],{},[2354,136005,136006],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2354,136009,136010],{},"展示的是图标，本质属于字体",[494,136012,136014],{"id":136013},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3205,136016,136017,136022,136025,136028,136031],{},[43,136018,136019,136021],{},[2354,136020,27896],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[43,136023,136024],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[43,136026,136027],{},"兼容性：几乎支持所有的浏览器，请放心使用",[43,136029,136030],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[43,136032,136033],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[494,136035,136037],{"id":136036},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3205,136039,136040],{},[43,136041,136042,136043],{},"icomoon字体库：",[2439,136044,136047],{"href":136045,"rel":136046},"http:\u002F\u002Ficomoon.io\u002F",[25887],"http:\u002F\u002Ficomoon.io",[19,136049,136050],{},"进去之后点icomoon app",[3528,136052],{"style":127999,"src":136053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136055,136056],{},"可以对其编辑：",[3528,136058],{"style":127999,"src":136059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136061,136062],{},"生成字体：",[3528,136064],{"style":127999,"src":136065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136067,136068],{},"下载：",[3528,136070],{"style":127999,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3205,136073,136074],{},[43,136075,136076,136077],{},"阿里iconfont字体库： ",[2439,136078,136079],{"href":136079,"rel":136080},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25887],[494,136082,136084],{"id":136083},"_1234-字体图标的引入","12.3.4 字体图标的引入",[40,136086,136087],{},[43,136088,136089,136090,136093],{},"把下载包里面的 ",[2354,136091,136092],{},"fonts"," 文件夹放入页面根目录下",[3528,136095],{"style":127999,"src":136096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[40,136098,136099],{"start":191},[43,136100,136101],{},"字体文件格式",[68,136103,136104,136113],{},[71,136105,136106],{},[74,136107,136108,136111],{},[77,136109,136110],{"align":79},"格式",[77,136112,25766],{"align":79},[85,136114,136115,136125,136135,136145],{},[74,136116,136117,136122],{},[90,136118,136119],{"align":79},[2354,136120,136121],{},".ttf",[90,136123,136124],{"align":79},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[74,136126,136127,136132],{},[90,136128,136129],{"align":79},[2354,136130,136131],{},".woff",[90,136133,136134],{"align":79},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[74,136136,136137,136142],{},[90,136138,136139],{"align":79},[2354,136140,136141],{},".eot",[90,136143,136144],{"align":79},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[74,136146,136147,136152],{},[90,136148,136149],{"align":79},[2354,136150,136151],{},"svg",[90,136153,136154],{"align":79},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[40,136156,136157],{"start":205},[43,136158,136159],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,136161,136163],{"className":128143,"code":136162,"language":128145,"meta":32,"style":32},"\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",[34,136164,136165,136170,136177,136189,136205,136230,136251,136271,136291,136295,136301,136311,136322],{"__ignoreMap":32},[167,136166,136167],{"class":169,"line":170},[167,136168,136169],{"class":2268},"\u002F* 引入字体图标 *\u002F\n",[167,136171,136172,136175],{"class":169,"line":191},[167,136173,136174],{"class":731},"@font-face",[167,136176,17598],{"class":512},[167,136178,136179,136182,136184,136187],{"class":169,"line":205},[167,136180,136181],{"class":184},"  font-family",[167,136183,53435],{"class":512},[167,136185,136186],{"class":177},"'icomoon'",[167,136188,3359],{"class":512},[167,136190,136191,136194,136196,136198,136200,136203],{"class":169,"line":219},[167,136192,136193],{"class":184},"  src",[167,136195,53435],{"class":512},[167,136197,63715],{"class":184},[167,136199,898],{"class":512},[167,136201,136202],{"class":177},"'fonts\u002Ficomoon.eot'",[167,136204,4755],{"class":512},[167,136206,136207,136209,136211,136213,136215,136218,136220,136223,136225,136228],{"class":169,"line":230},[167,136208,136193],{"class":184},[167,136210,53435],{"class":512},[167,136212,63715],{"class":184},[167,136214,898],{"class":512},[167,136216,136217],{"class":177},"'fonts\u002Ficomoon.eot?#iefix'",[167,136219,15741],{"class":512},[167,136221,136222],{"class":184},"format",[167,136224,898],{"class":512},[167,136226,136227],{"class":177},"'embedded-opentype'",[167,136229,40048],{"class":512},[167,136231,136232,136235,136237,136240,136242,136244,136246,136249],{"class":169,"line":241},[167,136233,136234],{"class":184},"       url",[167,136236,898],{"class":512},[167,136238,136239],{"class":177},"'fonts\u002Ficomoon.woff'",[167,136241,15741],{"class":512},[167,136243,136222],{"class":184},[167,136245,898],{"class":512},[167,136247,136248],{"class":177},"'woff'",[167,136250,40048],{"class":512},[167,136252,136253,136255,136257,136260,136262,136264,136266,136269],{"class":169,"line":261},[167,136254,136234],{"class":184},[167,136256,898],{"class":512},[167,136258,136259],{"class":177},"'fonts\u002Ficomoon.ttf'",[167,136261,15741],{"class":512},[167,136263,136222],{"class":184},[167,136265,898],{"class":512},[167,136267,136268],{"class":177},"'truetype'",[167,136270,40048],{"class":512},[167,136272,136273,136275,136277,136280,136282,136284,136286,136289],{"class":169,"line":773},[167,136274,136234],{"class":184},[167,136276,898],{"class":512},[167,136278,136279],{"class":177},"'fonts\u002Ficomoon.svg#icomoon'",[167,136281,15741],{"class":512},[167,136283,136222],{"class":184},[167,136285,898],{"class":512},[167,136287,136288],{"class":177},"'svg'",[167,136290,4755],{"class":512},[167,136292,136293],{"class":169,"line":779},[167,136294,3630],{"class":512},[167,136296,136297,136299],{"class":169,"line":785},[167,136298,135900],{"class":173},[167,136300,17598],{"class":512},[167,136302,136303,136305,136307,136309],{"class":169,"line":790},[167,136304,136181],{"class":184},[167,136306,53435],{"class":512},[167,136308,136186],{"class":177},[167,136310,3359],{"class":512},[167,136312,136313,136316,136318,136320],{"class":169,"line":796},[167,136314,136315],{"class":184},"  font-style",[167,136317,53435],{"class":512},[167,136319,65830],{"class":184},[167,136321,3359],{"class":512},[167,136323,136324],{"class":169,"line":802},[167,136325,3630],{"class":512},[19,136327,136328],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3528,136330],{"style":127999,"src":136331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[40,136333,136334],{"start":219},[43,136335,136336],{},"添加字体",[3528,136338],{"style":127999,"src":136339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136341,136342],{},"复制：",[3528,136344],{"style":127999,"src":136345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136347,136348],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[40,136350,136351],{"start":230},[43,136352,136353],{},"代码展示：",[26,136355,136356],{"className":128143,"code":136162,"language":128145,"meta":32,"style":32},[34,136357,136358,136362,136368,136378,136392,136414,136432,136450,136468,136472,136478,136488,136498],{"__ignoreMap":32},[167,136359,136360],{"class":169,"line":170},[167,136361,136169],{"class":2268},[167,136363,136364,136366],{"class":169,"line":191},[167,136365,136174],{"class":731},[167,136367,17598],{"class":512},[167,136369,136370,136372,136374,136376],{"class":169,"line":205},[167,136371,136181],{"class":184},[167,136373,53435],{"class":512},[167,136375,136186],{"class":177},[167,136377,3359],{"class":512},[167,136379,136380,136382,136384,136386,136388,136390],{"class":169,"line":219},[167,136381,136193],{"class":184},[167,136383,53435],{"class":512},[167,136385,63715],{"class":184},[167,136387,898],{"class":512},[167,136389,136202],{"class":177},[167,136391,4755],{"class":512},[167,136393,136394,136396,136398,136400,136402,136404,136406,136408,136410,136412],{"class":169,"line":230},[167,136395,136193],{"class":184},[167,136397,53435],{"class":512},[167,136399,63715],{"class":184},[167,136401,898],{"class":512},[167,136403,136217],{"class":177},[167,136405,15741],{"class":512},[167,136407,136222],{"class":184},[167,136409,898],{"class":512},[167,136411,136227],{"class":177},[167,136413,40048],{"class":512},[167,136415,136416,136418,136420,136422,136424,136426,136428,136430],{"class":169,"line":241},[167,136417,136234],{"class":184},[167,136419,898],{"class":512},[167,136421,136239],{"class":177},[167,136423,15741],{"class":512},[167,136425,136222],{"class":184},[167,136427,898],{"class":512},[167,136429,136248],{"class":177},[167,136431,40048],{"class":512},[167,136433,136434,136436,136438,136440,136442,136444,136446,136448],{"class":169,"line":261},[167,136435,136234],{"class":184},[167,136437,898],{"class":512},[167,136439,136259],{"class":177},[167,136441,15741],{"class":512},[167,136443,136222],{"class":184},[167,136445,898],{"class":512},[167,136447,136268],{"class":177},[167,136449,40048],{"class":512},[167,136451,136452,136454,136456,136458,136460,136462,136464,136466],{"class":169,"line":773},[167,136453,136234],{"class":184},[167,136455,898],{"class":512},[167,136457,136279],{"class":177},[167,136459,15741],{"class":512},[167,136461,136222],{"class":184},[167,136463,898],{"class":512},[167,136465,136288],{"class":177},[167,136467,4755],{"class":512},[167,136469,136470],{"class":169,"line":779},[167,136471,3630],{"class":512},[167,136473,136474,136476],{"class":169,"line":785},[167,136475,135900],{"class":173},[167,136477,17598],{"class":512},[167,136479,136480,136482,136484,136486],{"class":169,"line":790},[167,136481,136181],{"class":184},[167,136483,53435],{"class":512},[167,136485,136186],{"class":177},[167,136487,3359],{"class":512},[167,136489,136490,136492,136494,136496],{"class":169,"line":796},[167,136491,136315],{"class":184},[167,136493,53435],{"class":512},[167,136495,65830],{"class":184},[167,136497,3359],{"class":512},[167,136499,136500],{"class":169,"line":802},[167,136501,3630],{"class":512},[3528,136503],{"style":127999,"src":136504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136506,136507],{},"更加细节展示：",[40,136509,136510],{},[43,136511,136512],{},"html 标签内添加小图标",[3528,136514],{"style":127999,"src":136515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[40,136517,136518],{"start":191},[43,136519,136520],{},"给标签定义字体",[26,136522,136523],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,136524,136525,136529,136543,136547],{"__ignoreMap":32},[167,136526,136527],{"class":169,"line":170},[167,136528,132254],{"class":2268},[167,136530,136531,136533,136535,136537,136539,136541],{"class":169,"line":191},[167,136532,513],{"class":512},[167,136534,53609],{"class":516},[167,136536,55479],{"class":173},[167,136538,523],{"class":512},[167,136540,132267],{"class":177},[167,136542,537],{"class":512},[167,136544,136545],{"class":169,"line":205},[167,136546,132274],{"class":512},[167,136548,136549,136551,136553],{"class":169,"line":219},[167,136550,575],{"class":512},[167,136552,53609],{"class":516},[167,136554,537],{"class":512},[19,136556,136557],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3528,136559],{"style":127999,"src":136560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[494,136562,136564],{"id":136563},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136566,136567],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136569,136570,136571,136574],{},"把压缩包里面的 ",[2354,136572,136573],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136576,136577],{},"打开网站，点下方：",[3528,136579],{"style":127999,"src":136580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3528,136582],{"style":127999,"src":136583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3528,136585],{"style":127999,"src":136586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136588,136589],{},"点yes重新加载",[19,136591,136592],{},"然后重复之前的操作就可以实现了",[19,136594,136595],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[494,136597,136599],{"id":136598},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3528,136601],{"style":127999,"src":136602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2113,136604,136605],{},"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":32,"searchDepth":191,"depth":191,"links":136607},[136608,136614,136619],{"id":135211,"depth":191,"text":135212,"children":136609},[136610,136611,136612,136613],{"id":135223,"depth":205,"text":135224},{"id":135252,"depth":205,"text":135253},{"id":135280,"depth":205,"text":135281},{"id":135338,"depth":205,"text":135339},{"id":135810,"depth":191,"text":135811,"children":136615},[136616,136617,136618],{"id":135814,"depth":205,"text":135815},{"id":135859,"depth":205,"text":135860},{"id":135875,"depth":205,"text":135876},{"id":135975,"depth":191,"text":135976,"children":136620},[136621,136622,136623,136624,136625,136626],{"id":135979,"depth":205,"text":135980},{"id":136013,"depth":205,"text":136014},{"id":136036,"depth":205,"text":136037},{"id":136083,"depth":205,"text":136084},{"id":136563,"depth":205,"text":136564},{"id":136598,"depth":205,"text":136599},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135203,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136633,"title":136634,"body":136635,"description":25403,"extension":2140,"meta":137862,"navigation":740,"path":137863,"seo":137864,"stem":137865,"__hash__":137866},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136636,"toc":137843},[136637,136640,136644,136647,136661,136729,136759,136762,136766,136770,136872,136919,136923,136926,136929,136963,136966,136969,136972,136975,136978,136981,136984,136986,136989,136992,136995,136998,137001,137004,137007,137035,137038,137042,137045,137052,137055,137058,137084,137087,137091,137094,137097,137104,137108,137111,137113,137145,137148,137151,137163,137169,137172,137175,137178,137180,137184,137187,137190,137193,137238,137242,137244,137247,137254,137296,137299,137303,137308,137322,137326,137329,137332,137335,137338,137341,137375,137378,137381,137435,137438,137441,137444,137447,137499,137502,137505,137554,137558,137560,137563,137566,137569,137572,137575,137633,137636,137642,137645,137648,137680,137683,137687,137691,137694,137726,137730,137733,137777,137781,137784,137787,137790,137793,137796,137799,137802,137804,137807,137809,137812,137815,137818,137821,137826,137829,137831,137834,137837,137840],[10,136638,136634],{"id":136639},"_13-界面样式与布局技巧",[14,136641,136643],{"id":136642},"_131-css三角","13.1 css三角",[19,136645,136646],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3205,136648,136649,136652,136655,136658],{},[43,136650,136651],{},"用css 边框可以模拟三角效果",[43,136653,136654],{},"宽度高度为0",[43,136656,136657],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[43,136659,136660],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,136662,136664],{"className":128143,"code":136663,"language":128145,"meta":32,"style":32},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[34,136665,136666,136671,136678,136688,136698,136714,136725],{"__ignoreMap":32},[167,136667,136668],{"class":169,"line":170},[167,136669,136670],{"class":2268},"\u002F* CSS 实现三角形 *\u002F\n",[167,136672,136673,136676],{"class":169,"line":191},[167,136674,136675],{"class":173},".triangle",[167,136677,17598],{"class":512},[167,136679,136680,136682,136684,136686],{"class":169,"line":205},[167,136681,72556],{"class":184},[167,136683,53435],{"class":512},[167,136685,1154],{"class":184},[167,136687,3359],{"class":512},[167,136689,136690,136692,136694,136696],{"class":169,"line":219},[167,136691,72776],{"class":184},[167,136693,53435],{"class":512},[167,136695,1154],{"class":184},[167,136697,3359],{"class":512},[167,136699,136700,136702,136704,136706,136708,136710,136712],{"class":169,"line":230},[167,136701,72884],{"class":184},[167,136703,53435],{"class":512},[167,136705,2646],{"class":184},[167,136707,53490],{"class":731},[167,136709,53519],{"class":184},[167,136711,65980],{"class":184},[167,136713,3359],{"class":512},[167,136715,136716,136719,136721,136723],{"class":169,"line":241},[167,136717,136718],{"class":184},"  border-bottom-color",[167,136720,53435],{"class":512},[167,136722,64358],{"class":184},[167,136724,3359],{"class":512},[167,136726,136727],{"class":169,"line":261},[167,136728,3630],{"class":512},[26,136730,136731],{"className":128143,"code":132300,"language":128145,"meta":32,"style":32},[34,136732,136733,136739,136755],{"__ignoreMap":32},[167,136734,136735,136737],{"class":169,"line":170},[167,136736,53609],{"class":516},[167,136738,17598],{"class":512},[167,136740,136741,136743,136745,136747,136749,136751,136753],{"class":169,"line":191},[167,136742,72884],{"class":184},[167,136744,53435],{"class":512},[167,136746,2418],{"class":184},[167,136748,53490],{"class":731},[167,136750,53519],{"class":184},[167,136752,131535],{"class":184},[167,136754,3359],{"class":512},[167,136756,136757],{"class":169,"line":205},[167,136758,3630],{"class":512},[3528,136760],{"style":127999,"src":136761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136763,136765],{"id":136764},"_132-css用户界面样式","13.2 css用户界面样式",[494,136767,136769],{"id":136768},"_1321-鼠标样式","13.2.1 鼠标样式",[26,136771,136773],{"className":128143,"code":136772,"language":128145,"meta":32,"style":32},"\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",[34,136774,136775,136780,136799,136817,136836,136853],{"__ignoreMap":32},[167,136776,136777],{"class":169,"line":170},[167,136778,136779],{"class":2268},"\u002F* 鼠标样式 *\u002F\n",[167,136781,136782,136784,136786,136789,136791,136793,136796],{"class":169,"line":191},[167,136783,53609],{"class":516},[167,136785,81794],{"class":512},[167,136787,136788],{"class":184},"cursor",[167,136790,53435],{"class":512},[167,136792,64019],{"class":184},[167,136794,136795],{"class":512},"; }   ",[167,136797,136798],{"class":2268},"\u002F* 手型 *\u002F\n",[167,136800,136801,136803,136805,136807,136809,136812,136814],{"class":169,"line":205},[167,136802,53609],{"class":516},[167,136804,81794],{"class":512},[167,136806,136788],{"class":184},[167,136808,53435],{"class":512},[167,136810,136811],{"class":184},"default",[167,136813,136795],{"class":512},[167,136815,136816],{"class":2268},"\u002F* 默认 *\u002F\n",[167,136818,136819,136821,136823,136825,136827,136830,136833],{"class":169,"line":219},[167,136820,53609],{"class":516},[167,136822,81794],{"class":512},[167,136824,136788],{"class":184},[167,136826,53435],{"class":512},[167,136828,136829],{"class":184},"move",[167,136831,136832],{"class":512},"; }      ",[167,136834,136835],{"class":2268},"\u002F* 移动 *\u002F\n",[167,136837,136838,136840,136842,136844,136846,136848,136850],{"class":169,"line":230},[167,136839,53609],{"class":516},[167,136841,81794],{"class":512},[167,136843,136788],{"class":184},[167,136845,53435],{"class":512},[167,136847,31],{"class":184},[167,136849,136832],{"class":512},[167,136851,136852],{"class":2268},"\u002F* 文本 *\u002F\n",[167,136854,136855,136857,136859,136861,136863,136866,136869],{"class":169,"line":241},[167,136856,53609],{"class":516},[167,136858,81794],{"class":512},[167,136860,136788],{"class":184},[167,136862,53435],{"class":512},[167,136864,136865],{"class":184},"not-allowed",[167,136867,136868],{"class":512},"; } ",[167,136870,136871],{"class":2268},"\u002F* 禁止 *\u002F\n",[68,136873,136874,136882],{},[71,136875,136876],{},[74,136877,136878,136880],{},[77,136879,128607],{"align":79},[77,136881,29506],{"align":79},[85,136883,136884,136891,136898,136905,136912],{},[74,136885,136886,136888],{},[90,136887,136811],{"align":79},[90,136889,136890],{"align":79},"小白 默认",[74,136892,136893,136895],{},[90,136894,64019],{"align":79},[90,136896,136897],{"align":79},"小手",[74,136899,136900,136902],{},[90,136901,136829],{"align":79},[90,136903,136904],{"align":79},"移动",[74,136906,136907,136909],{},[90,136908,31],{"align":79},[90,136910,136911],{"align":79},"文本",[74,136913,136914,136916],{},[90,136915,136865],{"align":79},[90,136917,136918],{"align":79},"禁止",[494,136920,136922],{"id":136921},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136924,136925],{},"去除表单轮廓线",[19,136927,136928],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,136930,136931],{"className":128143,"code":131507,"language":128145,"meta":32,"style":32},[34,136932,136933,136937,136943,136959],{"__ignoreMap":32},[167,136934,136935],{"class":169,"line":170},[167,136936,131514],{"class":2268},[167,136938,136939,136941],{"class":169,"line":191},[167,136940,53609],{"class":516},[167,136942,17598],{"class":512},[167,136944,136945,136947,136949,136951,136953,136955,136957],{"class":169,"line":205},[167,136946,72884],{"class":184},[167,136948,53435],{"class":512},[167,136950,2418],{"class":184},[167,136952,53490],{"class":731},[167,136954,53519],{"class":184},[167,136956,131535],{"class":184},[167,136958,3359],{"class":512},[167,136960,136961],{"class":169,"line":219},[167,136962,3630],{"class":512},[19,136964,136965],{},"文本域：",[3528,136967],{"style":127999,"src":136968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136970,136971],{},"此时会有一个空白区域",[3528,136973],{"style":127999,"src":136974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136976,136977],{},"写在同一行就不会出现这个问题",[3528,136979],{"style":127999,"src":136980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136982,136983],{},"文本域是行内块元素，一定记住！！！",[19,136985,100217],{},[3528,136987],{"style":127999,"src":136988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136990,136991],{},"文本域尽量放在一行",[19,136993,136994],{},"知识回顾：cols是列，rols是行",[3528,136996],{"style":127999,"src":136997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136999,137000],{},"它可以进行拖动，显然这是我们不愿意看到的",[3528,137002],{"style":127999,"src":137003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137005,137006],{},"使用resize进行解决",[26,137008,137010],{"className":128143,"code":137009,"language":128145,"meta":32,"style":32},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[34,137011,137012,137018,137031],{"__ignoreMap":32},[167,137013,137014,137016],{"class":169,"line":170},[167,137015,55812],{"class":516},[167,137017,17598],{"class":512},[167,137019,137020,137022,137024,137026,137028],{"class":169,"line":191},[167,137021,72786],{"class":184},[167,137023,53435],{"class":512},[167,137025,56727],{"class":184},[167,137027,132006],{"class":512},[167,137029,137030],{"class":2268},"\u002F* 取消表单轮廓线 *\u002F\n",[167,137032,137033],{"class":169,"line":205},[167,137034,3630],{"class":512},[19,137036,137037],{},"此时就无法通过右下方实现拖动了",[494,137039,137041],{"id":137040},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137043,137044],{},"实现一个盒子中的文字和图片对齐",[19,137046,137047,137048,137051],{},"用于设置一个元素的 ",[2354,137049,137050],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137053,137054],{},"图片和文字默认是基线对齐",[3528,137056],{"style":127999,"src":137057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,137059,137060],{"className":128143,"code":137009,"language":128145,"meta":32,"style":32},[34,137061,137062,137068,137080],{"__ignoreMap":32},[167,137063,137064,137066],{"class":169,"line":170},[167,137065,55812],{"class":516},[167,137067,17598],{"class":512},[167,137069,137070,137072,137074,137076,137078],{"class":169,"line":191},[167,137071,72786],{"class":184},[167,137073,53435],{"class":512},[167,137075,56727],{"class":184},[167,137077,132006],{"class":512},[167,137079,137030],{"class":2268},[167,137081,137082],{"class":169,"line":205},[167,137083,3630],{"class":512},[3528,137085],{"style":127999,"src":137086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24024,137088,137090],{"id":137089},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137092,137093],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3528,137095],{"style":127999,"src":137096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137098,137099,137100,137103],{},"此时可以给图片、表单这些行内块元素的 ",[2354,137101,137102],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24024,137105,137107],{"id":137106},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137109,137110],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137112,16660],{},[26,137114,137116],{"className":128143,"code":137115,"language":128145,"meta":32,"style":32},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[34,137117,137118,137123,137129,137141],{"__ignoreMap":32},[167,137119,137120],{"class":169,"line":170},[167,137121,137122],{"class":2268},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[167,137124,137125,137127],{"class":169,"line":191},[167,137126,3528],{"class":516},[167,137128,17598],{"class":512},[167,137130,137131,137134,137136,137139],{"class":169,"line":205},[167,137132,137133],{"class":184},"  vertical-align",[167,137135,53435],{"class":512},[167,137137,137138],{"class":184},"middle",[167,137140,3359],{"class":512},[167,137142,137143],{"class":169,"line":219},[167,137144,3630],{"class":512},[3528,137146],{"style":127999,"src":137147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137149,137150],{},"主要解决方法有两种：",[40,137152,137153],{},[43,137154,137155,137158,137159,137162],{},[2354,137156,137157],{},"给图片"," 添加 ",[2354,137160,137161],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137164,137165,137166],{},"2.把图片转换为块级元素 ",[2354,137167,137168],{},"display: block",[19,137170,137171],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137173,137174],{},"img {",[19,137176,137177],{},"vertical-align:middle;",[19,137179,3145],{},[494,137181,137183],{"id":137182},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137185,137186],{},"效果：",[3528,137188],{"style":127999,"src":137189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137191,137192],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,137194,137196],{"className":128143,"code":137195,"language":128145,"meta":32,"style":32},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[34,137197,137198,137203,137209,137219,137224,137234],{"__ignoreMap":32},[167,137199,137200],{"class":169,"line":170},[167,137201,137202],{"class":2268},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[167,137204,137205,137207],{"class":169,"line":191},[167,137206,3528],{"class":516},[167,137208,17598],{"class":512},[167,137210,137211,137213,137215,137217],{"class":169,"line":205},[167,137212,137133],{"class":184},[167,137214,53435],{"class":512},[167,137216,137138],{"class":184},[167,137218,3359],{"class":512},[167,137220,137221],{"class":169,"line":219},[167,137222,137223],{"class":2268},"  \u002F* 或 *\u002F\n",[167,137225,137226,137228,137230,137232],{"class":169,"line":230},[167,137227,129759],{"class":184},[167,137229,53435],{"class":512},[167,137231,62858],{"class":184},[167,137233,3359],{"class":512},[167,137235,137236],{"class":169,"line":241},[167,137237,3630],{"class":512},[494,137239,137241],{"id":137240},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137243,137186],{},[3528,137245],{"style":127999,"src":137246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137248,137249,137250,137253],{},"多行文本溢出显示省略号， ",[2354,137251,137252],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,137255,137256],{"className":128143,"code":137195,"language":128145,"meta":32,"style":32},[34,137257,137258,137262,137268,137278,137282,137292],{"__ignoreMap":32},[167,137259,137260],{"class":169,"line":170},[167,137261,137202],{"class":2268},[167,137263,137264,137266],{"class":169,"line":191},[167,137265,3528],{"class":516},[167,137267,17598],{"class":512},[167,137269,137270,137272,137274,137276],{"class":169,"line":205},[167,137271,137133],{"class":184},[167,137273,53435],{"class":512},[167,137275,137138],{"class":184},[167,137277,3359],{"class":512},[167,137279,137280],{"class":169,"line":219},[167,137281,137223],{"class":2268},[167,137283,137284,137286,137288,137290],{"class":169,"line":230},[167,137285,129759],{"class":184},[167,137287,53435],{"class":512},[167,137289,62858],{"class":184},[167,137291,3359],{"class":512},[167,137293,137294],{"class":169,"line":241},[167,137295,3630],{"class":512},[19,137297,137298],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137300,137302],{"id":137301},"_133-常见布局技巧","13.3 常见布局技巧",[19,137304,137305],{},[2354,137306,137307],{},"巧妙利用一个技术更快更好的布局：",[40,137309,137310,137313,137316,137319],{},[43,137311,137312],{},"margin负值的运用",[43,137314,137315],{},"文字围绕浮动元素",[43,137317,137318],{},"行内块的巧妙运用",[43,137320,137321],{},"CSS三角强化",[494,137323,137325],{"id":137324},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137327,137328],{},"应用场景：",[3528,137330],{"style":127999,"src":137331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3528,137333],{"style":127999,"src":137334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137336,137337],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137339,137340],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,137342,137343],{"className":128143,"code":131507,"language":128145,"meta":32,"style":32},[34,137344,137345,137349,137355,137371],{"__ignoreMap":32},[167,137346,137347],{"class":169,"line":170},[167,137348,131514],{"class":2268},[167,137350,137351,137353],{"class":169,"line":191},[167,137352,53609],{"class":516},[167,137354,17598],{"class":512},[167,137356,137357,137359,137361,137363,137365,137367,137369],{"class":169,"line":205},[167,137358,72884],{"class":184},[167,137360,53435],{"class":512},[167,137362,2418],{"class":184},[167,137364,53490],{"class":731},[167,137366,53519],{"class":184},[167,137368,131535],{"class":184},[167,137370,3359],{"class":512},[167,137372,137373],{"class":169,"line":219},[167,137374,3630],{"class":512},[3528,137376],{"style":127999,"src":137377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137379,137380],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,137382,137384],{"className":128143,"code":137383,"language":128145,"meta":32,"style":32},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,137385,137386,137391,137397,137407,137419,137431],{"__ignoreMap":32},[167,137387,137388],{"class":169,"line":170},[167,137389,137390],{"class":2268},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[167,137392,137393,137395],{"class":169,"line":191},[167,137394,131991],{"class":173},[167,137396,17598],{"class":512},[167,137398,137399,137401,137403,137405],{"class":169,"line":205},[167,137400,133949],{"class":184},[167,137402,53435],{"class":512},[167,137404,56754],{"class":184},[167,137406,3359],{"class":512},[167,137408,137409,137411,137413,137415,137417],{"class":169,"line":219},[167,137410,133963],{"class":184},[167,137412,53435],{"class":512},[167,137414,2646],{"class":184},[167,137416,53490],{"class":731},[167,137418,3359],{"class":512},[167,137420,137421,137423,137425,137427,137429],{"class":169,"line":230},[167,137422,133980],{"class":184},[167,137424,53435],{"class":512},[167,137426,2900],{"class":184},[167,137428,53490],{"class":731},[167,137430,3359],{"class":512},[167,137432,137433],{"class":169,"line":241},[167,137434,3630],{"class":512},[19,137436,137437],{},"加上上述代码会发现：",[3528,137439],{"style":127999,"src":137440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137442,137443],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137445,137446],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,137448,137449],{"className":128143,"code":137383,"language":128145,"meta":32,"style":32},[34,137450,137451,137455,137461,137471,137483,137495],{"__ignoreMap":32},[167,137452,137453],{"class":169,"line":170},[167,137454,137390],{"class":2268},[167,137456,137457,137459],{"class":169,"line":191},[167,137458,131991],{"class":173},[167,137460,17598],{"class":512},[167,137462,137463,137465,137467,137469],{"class":169,"line":205},[167,137464,133949],{"class":184},[167,137466,53435],{"class":512},[167,137468,56754],{"class":184},[167,137470,3359],{"class":512},[167,137472,137473,137475,137477,137479,137481],{"class":169,"line":219},[167,137474,133963],{"class":184},[167,137476,53435],{"class":512},[167,137478,2646],{"class":184},[167,137480,53490],{"class":731},[167,137482,3359],{"class":512},[167,137484,137485,137487,137489,137491,137493],{"class":169,"line":230},[167,137486,133980],{"class":184},[167,137488,53435],{"class":512},[167,137490,2900],{"class":184},[167,137492,53490],{"class":731},[167,137494,3359],{"class":512},[167,137496,137497],{"class":169,"line":241},[167,137498,3630],{"class":512},[19,137500,137501],{},"解决方式2：",[19,137503,137504],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,137506,137508],{"className":128143,"code":137507,"language":128145,"meta":32,"style":32},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,137509,137510,137516,137526,137538,137550],{"__ignoreMap":32},[167,137511,137512,137514],{"class":169,"line":170},[167,137513,53609],{"class":516},[167,137515,17598],{"class":512},[167,137517,137518,137520,137522,137524],{"class":169,"line":191},[167,137519,133949],{"class":184},[167,137521,53435],{"class":512},[167,137523,56754],{"class":184},[167,137525,3359],{"class":512},[167,137527,137528,137530,137532,137534,137536],{"class":169,"line":205},[167,137529,133963],{"class":184},[167,137531,53435],{"class":512},[167,137533,2646],{"class":184},[167,137535,53490],{"class":731},[167,137537,3359],{"class":512},[167,137539,137540,137542,137544,137546,137548],{"class":169,"line":219},[167,137541,133980],{"class":184},[167,137543,53435],{"class":512},[167,137545,2900],{"class":184},[167,137547,53490],{"class":731},[167,137549,3359],{"class":512},[167,137551,137552],{"class":169,"line":230},[167,137553,3630],{"class":512},[494,137555,137557],{"id":137556},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137559,137328],{},[3528,137561],{"style":127999,"src":137562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137564,137565],{},"实现结构图：",[3528,137567],{"style":127999,"src":137568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137570,137571],{},"巧妙运用浮动元素不会压住文字的特性",[19,137573,137574],{},"代码显示：",[26,137576,137578],{"className":128143,"code":137577,"language":128145,"meta":32,"style":32},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,137579,137580,137586,137596,137600,137605,137609,137615,137629],{"__ignoreMap":32},[167,137581,137582,137584],{"class":169,"line":170},[167,137583,131991],{"class":173},[167,137585,17598],{"class":512},[167,137587,137588,137590,137592,137594],{"class":169,"line":191},[167,137589,132623],{"class":184},[167,137591,53435],{"class":512},[167,137593,79],{"class":184},[167,137595,3359],{"class":512},[167,137597,137598],{"class":169,"line":205},[167,137599,3630],{"class":512},[167,137601,137602],{"class":169,"line":219},[167,137603,137604],{"class":512},"```Css\n",[167,137606,137607],{"class":169,"line":230},[167,137608,131986],{"class":2268},[167,137610,137611,137613],{"class":169,"line":241},[167,137612,131991],{"class":173},[167,137614,17598],{"class":512},[167,137616,137617,137619,137621,137623,137625,137627],{"class":169,"line":261},[167,137618,72458],{"class":184},[167,137620,53435],{"class":512},[167,137622,1154],{"class":184},[167,137624,53554],{"class":184},[167,137626,132006],{"class":512},[167,137628,132009],{"class":2268},[167,137630,137631],{"class":169,"line":773},[167,137632,3630],{"class":512},[19,137634,137635],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,137637,137640],{"className":137638,"code":137639,"language":31},[29],"\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",[34,137641,137639],{"__ignoreMap":32},[3528,137643],{"style":127999,"src":137644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137646,137647],{},"最终展示结果：",[26,137649,137650],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,137651,137652,137656,137662,137676],{"__ignoreMap":32},[167,137653,137654],{"class":169,"line":170},[167,137655,131986],{"class":2268},[167,137657,137658,137660],{"class":169,"line":191},[167,137659,131991],{"class":173},[167,137661,17598],{"class":512},[167,137663,137664,137666,137668,137670,137672,137674],{"class":169,"line":205},[167,137665,72458],{"class":184},[167,137667,53435],{"class":512},[167,137669,1154],{"class":184},[167,137671,53554],{"class":184},[167,137673,132006],{"class":512},[167,137675,132009],{"class":2268},[167,137677,137678],{"class":169,"line":219},[167,137679,3630],{"class":512},[3528,137681],{"style":127999,"src":137682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137684,137686],{"id":137685},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[494,137688,137690],{"id":137689},"_1341-原理","13.4.1 原理",[3528,137692],{"style":127999,"src":137693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,137695,137696],{"className":128143,"code":131979,"language":128145,"meta":32,"style":32},[34,137697,137698,137702,137708,137722],{"__ignoreMap":32},[167,137699,137700],{"class":169,"line":170},[167,137701,131986],{"class":2268},[167,137703,137704,137706],{"class":169,"line":191},[167,137705,131991],{"class":173},[167,137707,17598],{"class":512},[167,137709,137710,137712,137714,137716,137718,137720],{"class":169,"line":205},[167,137711,72458],{"class":184},[167,137713,53435],{"class":512},[167,137715,1154],{"class":184},[167,137717,53554],{"class":184},[167,137719,132006],{"class":512},[167,137721,132009],{"class":2268},[167,137723,137724],{"class":169,"line":219},[167,137725,3630],{"class":512},[494,137727,137729],{"id":137728},"_1342-实例","13.4.2 实例",[3528,137731],{"style":127999,"src":137732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,137734,137735],{"className":128143,"code":132609,"language":128145,"meta":32,"style":32},[34,137736,137737,137743,137753,137757,137763,137773],{"__ignoreMap":32},[167,137738,137739,137741],{"class":169,"line":170},[167,137740,132616],{"class":173},[167,137742,17598],{"class":512},[167,137744,137745,137747,137749,137751],{"class":169,"line":191},[167,137746,132623],{"class":184},[167,137748,53435],{"class":512},[167,137750,79],{"class":184},[167,137752,3359],{"class":512},[167,137754,137755],{"class":169,"line":205},[167,137756,3630],{"class":512},[167,137758,137759,137761],{"class":169,"line":219},[167,137760,132638],{"class":173},[167,137762,17598],{"class":512},[167,137764,137765,137767,137769,137771],{"class":169,"line":230},[167,137766,132623],{"class":184},[167,137768,53435],{"class":512},[167,137770,74510],{"class":184},[167,137772,3359],{"class":512},[167,137774,137775],{"class":169,"line":241},[167,137776,3630],{"class":512},[14,137778,137780],{"id":137779},"_135-css的初始化","13.5 css的初始化",[19,137782,137783],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137785,137786],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137788,137789],{},"每个网页都必须首先进行 CSS初始化。",[19,137791,137792],{},"这里我们以 京东CSS初始化代码为例。",[19,137794,137795],{},"在网页右键查看网页源代码",[19,137797,137798],{},"找到css的link引入语句",[19,137800,137801],{},"然后ctrl+f 输入body",[19,137803,79214],{},[3528,137805],{"style":127999,"src":137806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137808,79237],{},[3528,137810],{"style":127999,"src":137811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137813,137814],{},"③打开了网页上传压缩的代码",[3528,137816],{"style":127999,"src":137817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137819,137820],{},"④从body前可以查看这个网页的初始化代码",[19,137822,137823],{},[2354,137824,137825],{},"Unicode编码字体：",[19,137827,137828],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137830,85193],{},[19,137832,137833],{},"黑体 \\9ED1\\4F53",[19,137835,137836],{},"宋体 \\5B8B\\4F53",[19,137838,137839],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2113,137841,137842],{},"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":32,"searchDepth":191,"depth":191,"links":137844},[137845,137846,137853,137857,137861],{"id":136642,"depth":191,"text":136643},{"id":136764,"depth":191,"text":136765,"children":137847},[137848,137849,137850,137851,137852],{"id":136768,"depth":205,"text":136769},{"id":136921,"depth":205,"text":136922},{"id":137040,"depth":205,"text":137041},{"id":137182,"depth":205,"text":137183},{"id":137240,"depth":205,"text":137241},{"id":137301,"depth":191,"text":137302,"children":137854},[137855,137856],{"id":137324,"depth":205,"text":137325},{"id":137556,"depth":205,"text":137557},{"id":137685,"depth":191,"text":137686,"children":137858},[137859,137860],{"id":137689,"depth":205,"text":137690},{"id":137728,"depth":205,"text":137729},{"id":137779,"depth":191,"text":137780},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136634,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137868,"title":137869,"body":137870,"description":25403,"extension":2140,"meta":139556,"navigation":740,"path":139557,"seo":139558,"stem":139559,"__hash__":139560},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137871,"toc":139545},[137872,137875,137879,137883,137886,137893,137896,137899,137937,137940,137942,137956,137960,137969,137973,137978,137981,137984,137987,138022,138027,138030,138060,138063,138068,138071,138074,138104,138107,138161,138164,138168,138173,138185,138188,138192,138222,138225,138230,138233,138263,138266,138270,138287,138291,138295,138298,138331,138334,138338,138341,138344,138347,138350,138353,138464,138467,138470,138473,138575,138578,138582,138586,138590,138593,138633,138636,138638,138654,138658,138661,138666,138747,138750,138753,138879,138884,138887,138895,138898,138903,138988,138991,138995,138998,139001,139005,139025,139030,139114,139117,139122,139125,139128,139206,139209,139212,139215,139218,139221,139226,139229,139232,139304,139307,139312,139315,139412,139415,139421,139424,139427,139430,139433,139436,139439,139442,139445,139449,139454,139457,139490,139495,139498,139539,139542],[10,137873,137869],{"id":137874},"_14-html5与css3新特性",[14,137876,137878],{"id":137877},"_141-html5的新特性","14.1 HTML5的新特性",[494,137880,137882],{"id":137881},"_1411-基本标签","14.1.1 基本标签",[19,137884,137885],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137887,137888,137889,137892],{},"这些新特性都有兼容性问题，基本是 ",[2354,137890,137891],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137894,137895],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137897,137898],{},"现在使用的是新特性：",[3205,137900,137901,137907,137913,137919,137925,137931],{},[43,137902,137903,137906],{},[34,137904,137905],{},"\u003Cheader>"," 头部标签",[43,137908,137909,137912],{},[34,137910,137911],{},"\u003Cnav>"," 导航标签",[43,137914,137915,137918],{},[34,137916,137917],{},"\u003Carticle>"," 内容标签",[43,137920,137921,137924],{},[34,137922,137923],{},"\u003Csection>"," 定义文档某个区域",[43,137926,137927,137930],{},[34,137928,137929],{},"\u003Caside>"," 侧边栏标签",[43,137932,137933,137936],{},[34,137934,137935],{},"\u003Cfooter>"," 尾部标签",[3528,137938],{"style":127999,"src":137939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137941,2241],{},[3205,137943,137944,137947,137950,137953],{},[43,137945,137946],{},"这种语义化标准主要是针对搜索引擎的",[43,137948,137949],{},"这些标签页面中可以经常使用",[43,137951,137952],{},"在IE9中，需要把这些元素转换为块级元素",[43,137954,137955],{},"移动端更喜欢使用这些标签",[494,137957,137959],{"id":137958},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137961,137962,137963,137965,137966,137968],{},"音频 ",[2354,137964,30191],{}," 和视频 ",[2354,137967,30200],{}," 两个标签",[24024,137970,137972],{"id":137971},"_14121-视频标签-video","14.1.2.1 视频标签- video",[40,137974,137975],{},[43,137976,137977],{},"支持格式：",[3528,137979],{"style":127999,"src":137980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137982,137983],{},"尽量使用MP4，兼容性好",[19,137985,137986],{},"用MP4就可以",[26,137988,137990],{"className":128890,"code":137989,"language":128892,"meta":32,"style":32},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[34,137991,137992],{"__ignoreMap":32},[167,137993,137994,137996,137998,138000,138002,138005,138007,138010,138013,138016,138018,138020],{"class":169,"line":170},[167,137995,513],{"class":512},[167,137997,30200],{"class":516},[167,137999,57228],{"class":173},[167,138001,523],{"class":512},[167,138003,138004],{"class":177},"\"movie.mp4\"",[167,138006,94409],{"class":173},[167,138008,138009],{"class":173}," autoplay",[167,138011,138012],{"class":173}," muted",[167,138014,138015],{"class":173}," loop",[167,138017,57303],{"class":512},[167,138019,30200],{"class":516},[167,138021,537],{"class":512},[40,138023,138024],{"start":191},[43,138025,138026],{},"兼容写法",[19,138028,138029],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,138031,138032],{"className":128890,"code":137989,"language":128892,"meta":32,"style":32},[34,138033,138034],{"__ignoreMap":32},[167,138035,138036,138038,138040,138042,138044,138046,138048,138050,138052,138054,138056,138058],{"class":169,"line":170},[167,138037,513],{"class":512},[167,138039,30200],{"class":516},[167,138041,57228],{"class":173},[167,138043,523],{"class":512},[167,138045,138004],{"class":177},[167,138047,94409],{"class":173},[167,138049,138009],{"class":173},[167,138051,138012],{"class":173},[167,138053,138015],{"class":173},[167,138055,57303],{"class":512},[167,138057,30200],{"class":516},[167,138059,537],{"class":512},[19,138061,138062],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[40,138064,138065],{"start":205},[43,138066,138067],{},"video常用属性",[3528,138069],{"style":127999,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138072,138073],{},"poster属性后面是跟的等待加载图片的地址",[26,138075,138076],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,138077,138078],{"__ignoreMap":32},[167,138079,138080,138082,138084,138086,138088,138090,138092,138094,138096,138098,138100,138102],{"class":169,"line":170},[167,138081,513],{"class":512},[167,138083,3528],{"class":516},[167,138085,57228],{"class":173},[167,138087,523],{"class":512},[167,138089,135660],{"class":177},[167,138091,57236],{"class":173},[167,138093,523],{"class":512},[167,138095,135667],{"class":177},[167,138097,135670],{"class":173},[167,138099,523],{"class":512},[167,138101,135675],{"class":177},[167,138103,537],{"class":512},[19,138105,138106],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,138108,138110],{"className":128143,"code":138109,"language":128145,"meta":32,"style":32},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[34,138111,138112,138117,138123,138147,138152,138157],{"__ignoreMap":32},[167,138113,138114],{"class":169,"line":170},[167,138115,138116],{"class":2268},"\u002F* 2D 位移 *\u002F\n",[167,138118,138119,138121],{"class":169,"line":191},[167,138120,53609],{"class":516},[167,138122,17598],{"class":512},[167,138124,138125,138128,138130,138133,138135,138137,138139,138141,138143,138145],{"class":169,"line":205},[167,138126,138127],{"class":184},"  transform",[167,138129,53435],{"class":512},[167,138131,138132],{"class":184},"translate",[167,138134,898],{"class":512},[167,138136,981],{"class":184},[167,138138,53490],{"class":731},[167,138140,14463],{"class":512},[167,138142,2856],{"class":184},[167,138144,53490],{"class":731},[167,138146,4755],{"class":512},[167,138148,138149],{"class":169,"line":219},[167,138150,138151],{"class":2268},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[167,138153,138154],{"class":169,"line":230},[167,138155,138156],{"class":2268},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[167,138158,138159],{"class":169,"line":241},[167,138160,3630],{"class":512},[19,138162,138163],{},"muted:自动静音属性",[24024,138165,138167],{"id":138166},"_14122-音频标签audio","14.1.2.2 音频标签audio",[40,138169,138170],{},[43,138171,138172],{},"基本使用",[19,138174,138175,138176,138181,138182],{},"当前 ",[2354,138177,138178],{},[34,138179,138180],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2354,138183,138184],{},"mp3格式",[3528,138186],{"style":127999,"src":138187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[40,138189,138190],{"start":191},[43,138191,138026],{},[26,138193,138194],{"className":128890,"code":137989,"language":128892,"meta":32,"style":32},[34,138195,138196],{"__ignoreMap":32},[167,138197,138198,138200,138202,138204,138206,138208,138210,138212,138214,138216,138218,138220],{"class":169,"line":170},[167,138199,513],{"class":512},[167,138201,30200],{"class":516},[167,138203,57228],{"class":173},[167,138205,523],{"class":512},[167,138207,138004],{"class":177},[167,138209,94409],{"class":173},[167,138211,138009],{"class":173},[167,138213,138012],{"class":173},[167,138215,138015],{"class":173},[167,138217,57303],{"class":512},[167,138219,30200],{"class":516},[167,138221,537],{"class":512},[19,138223,138224],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[40,138226,138227],{"start":205},[43,138228,138229],{},"常用属性",[3528,138231],{"style":127999,"src":138232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,138234,138235],{"className":128890,"code":137989,"language":128892,"meta":32,"style":32},[34,138236,138237],{"__ignoreMap":32},[167,138238,138239,138241,138243,138245,138247,138249,138251,138253,138255,138257,138259,138261],{"class":169,"line":170},[167,138240,513],{"class":512},[167,138242,30200],{"class":516},[167,138244,57228],{"class":173},[167,138246,523],{"class":512},[167,138248,138004],{"class":177},[167,138250,94409],{"class":173},[167,138252,138009],{"class":173},[167,138254,138012],{"class":173},[167,138256,138015],{"class":173},[167,138258,57303],{"class":512},[167,138260,30200],{"class":516},[167,138262,537],{"class":512},[19,138264,138265],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24024,138267,138269],{"id":138268},"_14123-总结","14.1.2.3 总结",[3205,138271,138272,138275,138278,138281,138284],{},[43,138273,138274],{},"音频标签和视频标签使用方式基本一致",[43,138276,138277],{},"浏览器支持情况不同",[43,138279,138280],{},"谷歌浏览器把音频和视频自动播放禁止了",[43,138282,138283],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[43,138285,138286],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[494,138288,138290],{"id":138289},"_1413-表单元素","14.1.3 表单元素",[24024,138292,138294],{"id":138293},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3528,138296],{"style":127999,"src":138297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,138299,138301],{"className":128890,"code":138300,"language":128892,"meta":32,"style":32},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[34,138302,138303],{"__ignoreMap":32},[167,138304,138305,138307,138309,138311,138313,138315,138317,138319,138322,138324,138326,138329],{"class":169,"line":170},[167,138306,513],{"class":512},[167,138308,55812],{"class":516},[167,138310,555],{"class":173},[167,138312,523],{"class":512},[167,138314,64688],{"class":177},[167,138316,520],{"class":173},[167,138318,523],{"class":512},[167,138320,138321],{"class":177},"\"username\"",[167,138323,63009],{"class":173},[167,138325,523],{"class":512},[167,138327,138328],{"class":177},"\"请输入用户名\"",[167,138330,537],{"class":512},[3528,138332],{"style":127999,"src":138333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24024,138335,138337],{"id":138336},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3528,138339],{"style":127999,"src":138340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138342,138343],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138345,138346],{},"快捷操作：",[3528,138348],{"style":127999,"src":138349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138351,138352],{},"例子1：",[26,138354,138356],{"className":128890,"code":138355,"language":128892,"meta":32,"style":32},"\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",[34,138357,138358,138381,138408,138437,138456],{"__ignoreMap":32},[167,138359,138360,138362,138364,138366,138368,138371,138374,138376,138379],{"class":169,"line":170},[167,138361,513],{"class":512},[167,138363,68614],{"class":516},[167,138365,68617],{"class":173},[167,138367,523],{"class":512},[167,138369,138370],{"class":177},"\"\u002Fsubmit\"",[167,138372,138373],{"class":173}," method",[167,138375,523],{"class":512},[167,138377,138378],{"class":177},"\"post\"",[167,138380,537],{"class":512},[167,138382,138383,138385,138387,138389,138391,138393,138395,138397,138399,138401,138403,138406],{"class":169,"line":191},[167,138384,542],{"class":512},[167,138386,55812],{"class":516},[167,138388,555],{"class":173},[167,138390,523],{"class":512},[167,138392,64688],{"class":177},[167,138394,520],{"class":173},[167,138396,523],{"class":512},[167,138398,138321],{"class":177},[167,138400,63009],{"class":173},[167,138402,523],{"class":512},[167,138404,138405],{"class":177},"\"用户名\"",[167,138407,537],{"class":512},[167,138409,138410,138412,138414,138416,138418,138421,138423,138425,138428,138430,138432,138435],{"class":169,"line":205},[167,138411,542],{"class":512},[167,138413,55812],{"class":516},[167,138415,555],{"class":173},[167,138417,523],{"class":512},[167,138419,138420],{"class":177},"\"password\"",[167,138422,520],{"class":173},[167,138424,523],{"class":512},[167,138426,138427],{"class":177},"\"pwd\"",[167,138429,63009],{"class":173},[167,138431,523],{"class":512},[167,138433,138434],{"class":177},"\"密码\"",[167,138436,537],{"class":512},[167,138438,138439,138441,138443,138445,138447,138449,138452,138454],{"class":169,"line":219},[167,138440,542],{"class":512},[167,138442,55877],{"class":516},[167,138444,555],{"class":173},[167,138446,523],{"class":512},[167,138448,68637],{"class":177},[167,138450,138451],{"class":512},">提交\u003C\u002F",[167,138453,55877],{"class":516},[167,138455,537],{"class":512},[167,138457,138458,138460,138462],{"class":169,"line":230},[167,138459,575],{"class":512},[167,138461,68614],{"class":516},[167,138463,537],{"class":512},[3528,138465],{"style":127999,"src":138466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138468,138469],{},"value是表单域的内容",[19,138471,138472],{},"例子2：",[26,138474,138475],{"className":128890,"code":138355,"language":128892,"meta":32,"style":32},[34,138476,138477,138497,138523,138549,138567],{"__ignoreMap":32},[167,138478,138479,138481,138483,138485,138487,138489,138491,138493,138495],{"class":169,"line":170},[167,138480,513],{"class":512},[167,138482,68614],{"class":516},[167,138484,68617],{"class":173},[167,138486,523],{"class":512},[167,138488,138370],{"class":177},[167,138490,138373],{"class":173},[167,138492,523],{"class":512},[167,138494,138378],{"class":177},[167,138496,537],{"class":512},[167,138498,138499,138501,138503,138505,138507,138509,138511,138513,138515,138517,138519,138521],{"class":169,"line":191},[167,138500,542],{"class":512},[167,138502,55812],{"class":516},[167,138504,555],{"class":173},[167,138506,523],{"class":512},[167,138508,64688],{"class":177},[167,138510,520],{"class":173},[167,138512,523],{"class":512},[167,138514,138321],{"class":177},[167,138516,63009],{"class":173},[167,138518,523],{"class":512},[167,138520,138405],{"class":177},[167,138522,537],{"class":512},[167,138524,138525,138527,138529,138531,138533,138535,138537,138539,138541,138543,138545,138547],{"class":169,"line":205},[167,138526,542],{"class":512},[167,138528,55812],{"class":516},[167,138530,555],{"class":173},[167,138532,523],{"class":512},[167,138534,138420],{"class":177},[167,138536,520],{"class":173},[167,138538,523],{"class":512},[167,138540,138427],{"class":177},[167,138542,63009],{"class":173},[167,138544,523],{"class":512},[167,138546,138434],{"class":177},[167,138548,537],{"class":512},[167,138550,138551,138553,138555,138557,138559,138561,138563,138565],{"class":169,"line":219},[167,138552,542],{"class":512},[167,138554,55877],{"class":516},[167,138556,555],{"class":173},[167,138558,523],{"class":512},[167,138560,68637],{"class":177},[167,138562,138451],{"class":512},[167,138564,55877],{"class":516},[167,138566,537],{"class":512},[167,138568,138569,138571,138573],{"class":169,"line":230},[167,138570,575],{"class":512},[167,138572,68614],{"class":516},[167,138574,537],{"class":512},[3528,138576],{"style":127999,"src":138577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138579,138581],{"id":138580},"_142-css新特性","14.2 CSS新特性",[494,138583,138585],{"id":138584},"_1421-新增选择器","14.2.1 新增选择器",[24024,138587,138589],{"id":138588},"_14211-属性选择器","14.2.1.1 属性选择器",[3528,138591],{"style":127999,"src":138592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,138594,138596],{"className":128143,"code":138595,"language":128145,"meta":32,"style":32},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[34,138597,138598,138613,138629],{"__ignoreMap":32},[167,138599,138600,138602,138604,138606,138608,138610],{"class":169,"line":170},[167,138601,55812],{"class":516},[167,138603,3090],{"class":512},[167,138605,104698],{"class":173},[167,138607,523],{"class":731},[167,138609,64688],{"class":177},[167,138611,138612],{"class":512},"] {\n",[167,138614,138615,138617,138619,138621,138623,138625,138627],{"class":169,"line":191},[167,138616,72884],{"class":184},[167,138618,53435],{"class":512},[167,138620,2418],{"class":184},[167,138622,53490],{"class":731},[167,138624,53519],{"class":184},[167,138626,131723],{"class":184},[167,138628,3359],{"class":512},[167,138630,138631],{"class":169,"line":205},[167,138632,3630],{"class":512},[3528,138634],{"style":127999,"src":138635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138637,2241],{},[3205,138639,138640,138643,138646,138649],{},[43,138641,138642],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[43,138644,138645],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[43,138647,138648],{},"属性选择器也可以选择出来自定义的属性",[43,138650,138651,138653],{},[2354,138652,11053],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24024,138655,138657],{"id":138656},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3528,138659],{"style":127999,"src":138660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[40,138662,138663],{},[43,138664,138665],{},"fist-child",[26,138667,138669],{"className":128143,"code":138668,"language":128145,"meta":32,"style":32},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[34,138670,138671,138676,138691,138711,138729],{"__ignoreMap":32},[167,138672,138673],{"class":169,"line":170},[167,138674,138675],{"class":2268},"\u002F* 属性选择器 *\u002F\n",[167,138677,138678,138680,138682,138684,138686,138688],{"class":169,"line":191},[167,138679,55812],{"class":516},[167,138681,3090],{"class":512},[167,138683,104698],{"class":173},[167,138685,523],{"class":731},[167,138687,64688],{"class":177},[167,138689,138690],{"class":512},"] { }\n",[167,138692,138693,138695,138697,138699,138702,138705,138708],{"class":169,"line":205},[167,138694,55812],{"class":516},[167,138696,3090],{"class":512},[167,138698,16721],{"class":173},[167,138700,138701],{"class":731},"^=",[167,138703,138704],{"class":177},"\"icon\"",[167,138706,138707],{"class":512},"] { }  ",[167,138709,138710],{"class":2268},"\u002F* 以 icon 开头 *\u002F\n",[167,138712,138713,138715,138717,138719,138722,138724,138726],{"class":169,"line":219},[167,138714,55812],{"class":516},[167,138716,3090],{"class":512},[167,138718,16721],{"class":173},[167,138720,138721],{"class":731},"$=",[167,138723,138704],{"class":177},[167,138725,138707],{"class":512},[167,138727,138728],{"class":2268},"\u002F* 以 icon 结尾 *\u002F\n",[167,138730,138731,138733,138735,138737,138740,138742,138744],{"class":169,"line":230},[167,138732,55812],{"class":516},[167,138734,3090],{"class":512},[167,138736,16721],{"class":173},[167,138738,138739],{"class":731},"*=",[167,138741,138704],{"class":177},[167,138743,138707],{"class":512},[167,138745,138746],{"class":2268},"\u002F* 包含 icon *\u002F\n",[19,138748,138749],{},"ul的第一个儿子文本为红色",[19,138751,138752],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,138754,138756],{"className":128143,"code":138755,"language":128145,"meta":32,"style":32},".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",[34,138757,138758,138764,138774,138778,138782,138787,138800,138813,138829,138846,138863],{"__ignoreMap":32},[167,138759,138760,138762],{"class":169,"line":170},[167,138761,128434],{"class":173},[167,138763,17598],{"class":512},[167,138765,138766,138768,138770,138772],{"class":169,"line":191},[167,138767,72893],{"class":184},[167,138769,53435],{"class":512},[167,138771,59410],{"class":184},[167,138773,3359],{"class":512},[167,138775,138776],{"class":169,"line":205},[167,138777,3630],{"class":512},[167,138779,138780],{"class":169,"line":219},[167,138781,137604],{"class":512},[167,138783,138784],{"class":169,"line":230},[167,138785,138786],{"class":2268},"\u002F* 结构伪类选择器 *\u002F\n",[167,138788,138789,138791,138794,138797],{"class":169,"line":241},[167,138790,43],{"class":516},[167,138792,138793],{"class":173},":first-child",[167,138795,138796],{"class":512}," { }           ",[167,138798,138799],{"class":2268},"\u002F* 第一个 *\u002F\n",[167,138801,138802,138804,138807,138810],{"class":169,"line":261},[167,138803,43],{"class":516},[167,138805,138806],{"class":173},":last-child",[167,138808,138809],{"class":512}," { }            ",[167,138811,138812],{"class":2268},"\u002F* 最后一个 *\u002F\n",[167,138814,138815,138817,138819,138821,138823,138826],{"class":169,"line":773},[167,138816,43],{"class":516},[167,138818,131057],{"class":173},[167,138820,898],{"class":512},[167,138822,2287],{"class":184},[167,138824,138825],{"class":512},") { }          ",[167,138827,138828],{"class":2268},"\u002F* 第2个 *\u002F\n",[167,138830,138831,138833,138835,138837,138840,138843],{"class":169,"line":779},[167,138832,43],{"class":516},[167,138834,131057],{"class":173},[167,138836,898],{"class":512},[167,138838,138839],{"class":184},"2n",[167,138841,138842],{"class":512},") { }         ",[167,138844,138845],{"class":2268},"\u002F* 偶数 *\u002F\n",[167,138847,138848,138850,138852,138854,138857,138860],{"class":169,"line":785},[167,138849,43],{"class":516},[167,138851,131057],{"class":173},[167,138853,898],{"class":512},[167,138855,138856],{"class":184},"2n+1",[167,138858,138859],{"class":512},") { }       ",[167,138861,138862],{"class":2268},"\u002F* 奇数 *\u002F\n",[167,138864,138865,138867,138869,138871,138874,138876],{"class":169,"line":790},[167,138866,43],{"class":516},[167,138868,131057],{"class":173},[167,138870,898],{"class":512},[167,138872,138873],{"class":184},"-n+3",[167,138875,138859],{"class":512},[167,138877,138878],{"class":2268},"\u002F* 前3个 *\u002F\n",[53609,138880,138883],{"className":138881},[138882],"example","\n  示例内容\n",[19,138885,138886],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3205,138888,138889],{},[43,138890,138891,138894],{},[34,138892,138893],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138896,138897],{},"也就是说它选择的是熊大",[40,138899,138900],{"start":241},[43,138901,138902],{},"权重",[26,138904,138906],{"className":128143,"code":138905,"language":128145,"meta":32,"style":32},"\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",[34,138907,138908,138912,138922,138932,138946,138960,138974],{"__ignoreMap":32},[167,138909,138910],{"class":169,"line":170},[167,138911,138786],{"class":2268},[167,138913,138914,138916,138918,138920],{"class":169,"line":191},[167,138915,43],{"class":516},[167,138917,138793],{"class":173},[167,138919,138796],{"class":512},[167,138921,138799],{"class":2268},[167,138923,138924,138926,138928,138930],{"class":169,"line":205},[167,138925,43],{"class":516},[167,138927,138806],{"class":173},[167,138929,138809],{"class":512},[167,138931,138812],{"class":2268},[167,138933,138934,138936,138938,138940,138942,138944],{"class":169,"line":219},[167,138935,43],{"class":516},[167,138937,131057],{"class":173},[167,138939,898],{"class":512},[167,138941,2287],{"class":184},[167,138943,138825],{"class":512},[167,138945,138828],{"class":2268},[167,138947,138948,138950,138952,138954,138956,138958],{"class":169,"line":230},[167,138949,43],{"class":516},[167,138951,131057],{"class":173},[167,138953,898],{"class":512},[167,138955,138839],{"class":184},[167,138957,138842],{"class":512},[167,138959,138845],{"class":2268},[167,138961,138962,138964,138966,138968,138970,138972],{"class":169,"line":241},[167,138963,43],{"class":516},[167,138965,131057],{"class":173},[167,138967,898],{"class":512},[167,138969,138856],{"class":184},[167,138971,138859],{"class":512},[167,138973,138862],{"class":2268},[167,138975,138976,138978,138980,138982,138984,138986],{"class":169,"line":261},[167,138977,43],{"class":516},[167,138979,131057],{"class":173},[167,138981,898],{"class":512},[167,138983,138873],{"class":184},[167,138985,138859],{"class":512},[167,138987,138878],{"class":2268},[19,138989,138990],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24024,138992,138994],{"id":138993},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138996,138997],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3528,138999],{"style":127999,"src":139000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[40,139002,139003],{},[43,139004,2241],{},[3205,139006,139007,139010,139013,139016,139019,139022],{},[43,139008,139009],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[43,139011,139012],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[43,139014,139015],{},"语法： element::before {}",[43,139017,139018],{},"before 和 after 必须有 content 属性",[43,139020,139021],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[43,139023,139024],{},"伪元素选择器和标签选择器一样，权重为 1",[40,139026,139027],{"start":191},[43,139028,139029],{},"实例",[26,139031,139032],{"className":128143,"code":138905,"language":128145,"meta":32,"style":32},[34,139033,139034,139038,139048,139058,139072,139086,139100],{"__ignoreMap":32},[167,139035,139036],{"class":169,"line":170},[167,139037,138786],{"class":2268},[167,139039,139040,139042,139044,139046],{"class":169,"line":191},[167,139041,43],{"class":516},[167,139043,138793],{"class":173},[167,139045,138796],{"class":512},[167,139047,138799],{"class":2268},[167,139049,139050,139052,139054,139056],{"class":169,"line":205},[167,139051,43],{"class":516},[167,139053,138806],{"class":173},[167,139055,138809],{"class":512},[167,139057,138812],{"class":2268},[167,139059,139060,139062,139064,139066,139068,139070],{"class":169,"line":219},[167,139061,43],{"class":516},[167,139063,131057],{"class":173},[167,139065,898],{"class":512},[167,139067,2287],{"class":184},[167,139069,138825],{"class":512},[167,139071,138828],{"class":2268},[167,139073,139074,139076,139078,139080,139082,139084],{"class":169,"line":230},[167,139075,43],{"class":516},[167,139077,131057],{"class":173},[167,139079,898],{"class":512},[167,139081,138839],{"class":184},[167,139083,138842],{"class":512},[167,139085,138845],{"class":2268},[167,139087,139088,139090,139092,139094,139096,139098],{"class":169,"line":241},[167,139089,43],{"class":516},[167,139091,131057],{"class":173},[167,139093,898],{"class":512},[167,139095,138856],{"class":184},[167,139097,138859],{"class":512},[167,139099,138862],{"class":2268},[167,139101,139102,139104,139106,139108,139110,139112],{"class":169,"line":261},[167,139103,43],{"class":516},[167,139105,131057],{"class":173},[167,139107,898],{"class":512},[167,139109,138873],{"class":184},[167,139111,138859],{"class":512},[167,139113,138878],{"class":2268},[3528,139115],{"style":127999,"src":139116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[40,139118,139119],{"start":205},[43,139120,139121],{},"使用场景1",[3528,139123],{"style":127999,"src":139124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139126,139127],{},"不需要再加盒子来整红色那部分了",[26,139129,139131],{"className":128143,"code":139130,"language":128145,"meta":32,"style":32},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[34,139132,139133,139138,139147,139158,139168,139172,139181,139192,139202],{"__ignoreMap":32},[167,139134,139135],{"class":169,"line":170},[167,139136,139137],{"class":2268},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[167,139139,139140,139142,139145],{"class":169,"line":191},[167,139141,53609],{"class":516},[167,139143,139144],{"class":173},"::before",[167,139146,17598],{"class":512},[167,139148,139149,139152,139154,139156],{"class":169,"line":205},[167,139150,139151],{"class":184},"  content",[167,139153,53435],{"class":512},[167,139155,9682],{"class":177},[167,139157,3359],{"class":512},[167,139159,139160,139162,139164,139166],{"class":169,"line":219},[167,139161,129759],{"class":184},[167,139163,53435],{"class":512},[167,139165,62858],{"class":184},[167,139167,3359],{"class":512},[167,139169,139170],{"class":169,"line":230},[167,139171,3630],{"class":512},[167,139173,139174,139176,139179],{"class":169,"line":241},[167,139175,53609],{"class":516},[167,139177,139178],{"class":173},"::after",[167,139180,17598],{"class":512},[167,139182,139183,139185,139187,139190],{"class":169,"line":261},[167,139184,139151],{"class":184},[167,139186,53435],{"class":512},[167,139188,139189],{"class":177},"\"→\"",[167,139191,3359],{"class":512},[167,139193,139194,139196,139198,139200],{"class":169,"line":773},[167,139195,72893],{"class":184},[167,139197,53435],{"class":512},[167,139199,64059],{"class":184},[167,139201,3359],{"class":512},[167,139203,139204],{"class":169,"line":779},[167,139205,3630],{"class":512},[3528,139207],{"style":127999,"src":139208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139210,139211],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3528,139213],{"style":127999,"src":139214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139216,139217],{},"但是在引用时需要先转义一下",[19,139219,139220],{},"content='\\e930'",[40,139222,139223],{"start":219},[43,139224,139225],{},"使用场景2",[19,139227,139228],{},"仿土豆效果",[19,139230,139231],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,139233,139234],{"className":128143,"code":139130,"language":128145,"meta":32,"style":32},[34,139235,139236,139240,139248,139258,139268,139272,139280,139290,139300],{"__ignoreMap":32},[167,139237,139238],{"class":169,"line":170},[167,139239,139137],{"class":2268},[167,139241,139242,139244,139246],{"class":169,"line":191},[167,139243,53609],{"class":516},[167,139245,139144],{"class":173},[167,139247,17598],{"class":512},[167,139249,139250,139252,139254,139256],{"class":169,"line":205},[167,139251,139151],{"class":184},[167,139253,53435],{"class":512},[167,139255,9682],{"class":177},[167,139257,3359],{"class":512},[167,139259,139260,139262,139264,139266],{"class":169,"line":219},[167,139261,129759],{"class":184},[167,139263,53435],{"class":512},[167,139265,62858],{"class":184},[167,139267,3359],{"class":512},[167,139269,139270],{"class":169,"line":230},[167,139271,3630],{"class":512},[167,139273,139274,139276,139278],{"class":169,"line":241},[167,139275,53609],{"class":516},[167,139277,139178],{"class":173},[167,139279,17598],{"class":512},[167,139281,139282,139284,139286,139288],{"class":169,"line":261},[167,139283,139151],{"class":184},[167,139285,53435],{"class":512},[167,139287,139189],{"class":177},[167,139289,3359],{"class":512},[167,139291,139292,139294,139296,139298],{"class":169,"line":773},[167,139293,72893],{"class":184},[167,139295,53435],{"class":512},[167,139297,64059],{"class":184},[167,139299,3359],{"class":512},[167,139301,139302],{"class":169,"line":779},[167,139303,3630],{"class":512},[3528,139305],{"style":127999,"src":139306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[40,139308,139309],{"start":230},[43,139310,139311],{},"使用场景3",[19,139313,139314],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,139316,139318],{"className":128143,"code":139317,"language":128145,"meta":32,"style":32},".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",[34,139319,139320,139326,139336,139340,139344,139348,139356,139366,139376,139380,139388,139398,139408],{"__ignoreMap":32},[167,139321,139322,139324],{"class":169,"line":170},[167,139323,131991],{"class":173},[167,139325,17598],{"class":512},[167,139327,139328,139330,139332,139334],{"class":169,"line":191},[167,139329,132623],{"class":184},[167,139331,53435],{"class":512},[167,139333,79],{"class":184},[167,139335,3359],{"class":512},[167,139337,139338],{"class":169,"line":205},[167,139339,3630],{"class":512},[167,139341,139342],{"class":169,"line":219},[167,139343,137604],{"class":512},[167,139345,139346],{"class":169,"line":230},[167,139347,139137],{"class":2268},[167,139349,139350,139352,139354],{"class":169,"line":241},[167,139351,53609],{"class":516},[167,139353,139144],{"class":173},[167,139355,17598],{"class":512},[167,139357,139358,139360,139362,139364],{"class":169,"line":261},[167,139359,139151],{"class":184},[167,139361,53435],{"class":512},[167,139363,9682],{"class":177},[167,139365,3359],{"class":512},[167,139367,139368,139370,139372,139374],{"class":169,"line":773},[167,139369,129759],{"class":184},[167,139371,53435],{"class":512},[167,139373,62858],{"class":184},[167,139375,3359],{"class":512},[167,139377,139378],{"class":169,"line":779},[167,139379,3630],{"class":512},[167,139381,139382,139384,139386],{"class":169,"line":785},[167,139383,53609],{"class":516},[167,139385,139178],{"class":173},[167,139387,17598],{"class":512},[167,139389,139390,139392,139394,139396],{"class":169,"line":790},[167,139391,139151],{"class":184},[167,139393,53435],{"class":512},[167,139395,139189],{"class":177},[167,139397,3359],{"class":512},[167,139399,139400,139402,139404,139406],{"class":169,"line":796},[167,139401,72893],{"class":184},[167,139403,53435],{"class":512},[167,139405,64059],{"class":184},[167,139407,3359],{"class":512},[167,139409,139410],{"class":169,"line":802},[167,139411,3630],{"class":512},[19,139413,139414],{},"div {\nmargin: 0 auto;\n}",[26,139416,139419],{"className":139417,"code":139418,"language":31},[29],"\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",[34,139420,139418],{"__ignoreMap":32},[19,139422,139423],{},"如果想让多个元素都发生变化",[19,139425,139426],{},"不能如下操作：",[19,139428,139429],{},"transition: width 2s ease 0.5s;",[19,139431,139432],{},"transition: height 2s ease 0.5s;不对！！！",[19,139434,139435],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139437,139438],{},"使用如下：加逗号隔开",[19,139440,139441],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139443,139444],{},"transition all 2s ease;",[494,139446,139448],{"id":139447},"_1426-过渡练习","14.2.6 过渡练习",[40,139450,139451],{},[43,139452,139453],{},"进度条",[3528,139455],{"style":127999,"src":139456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,139458,139460],{"className":128143,"code":139459,"language":128145,"meta":32,"style":32},"div {\n  transition: all 0.3s ease;\n}\n",[34,139461,139462,139468,139486],{"__ignoreMap":32},[167,139463,139464,139466],{"class":169,"line":170},[167,139465,53609],{"class":516},[167,139467,17598],{"class":512},[167,139469,139470,139473,139475,139477,139480,139482,139484],{"class":169,"line":191},[167,139471,139472],{"class":184},"  transition",[167,139474,53435],{"class":512},[167,139476,30138],{"class":184},[167,139478,139479],{"class":184}," 0.3",[167,139481,2895],{"class":731},[167,139483,80668],{"class":184},[167,139485,3359],{"class":512},[167,139487,139488],{"class":169,"line":205},[167,139489,3630],{"class":512},[40,139491,139492],{"start":191},[43,139493,139494],{},"小米logo",[19,139496,139497],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,139499,139501],{"className":128143,"code":139500,"language":128145,"meta":32,"style":32},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[34,139502,139503,139508,139514,139530,139535],{"__ignoreMap":32},[167,139504,139505],{"class":169,"line":170},[167,139506,139507],{"class":2268},"\u002F* CSS3 过渡 *\u002F\n",[167,139509,139510,139512],{"class":169,"line":191},[167,139511,53609],{"class":516},[167,139513,17598],{"class":512},[167,139515,139516,139518,139520,139522,139524,139526,139528],{"class":169,"line":205},[167,139517,139472],{"class":184},[167,139519,53435],{"class":512},[167,139521,30138],{"class":184},[167,139523,139479],{"class":184},[167,139525,2895],{"class":731},[167,139527,80668],{"class":184},[167,139529,3359],{"class":512},[167,139531,139532],{"class":169,"line":219},[167,139533,139534],{"class":2268},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[167,139536,139537],{"class":169,"line":230},[167,139538,3630],{"class":512},[19,139540,139541],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2113,139543,139544],{},"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":32,"searchDepth":191,"depth":191,"links":139546},[139547,139552],{"id":137877,"depth":191,"text":137878,"children":139548},[139549,139550,139551],{"id":137881,"depth":205,"text":137882},{"id":137958,"depth":205,"text":137959},{"id":138289,"depth":205,"text":138290},{"id":138580,"depth":191,"text":138581,"children":139553},[139554,139555],{"id":138584,"depth":205,"text":138585},{"id":139447,"depth":205,"text":139448},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137869,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139562,"title":139563,"body":139564,"description":25403,"extension":2140,"meta":141308,"navigation":740,"path":141309,"seo":141310,"stem":141311,"__hash__":141312},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139565,"toc":141289},[139566,139569,139573,139576,139582,139588,139592,139594,139597,139600,139603,139606,139609,139612,139615,139619,139623,139626,139629,139632,139636,139639,139642,139647,139650,139653,139656,139660,139663,139672,139675,139678,139682,139685,139688,139693,139700,139714,139722,139729,139734,139737,139740,139743,139750,139754,139760,139766,139769,139772,139777,139783,139785,139793,139798,139801,139807,139809,139814,139819,139822,139824,139829,139832,139837,139842,139876,139880,139884,139887,139891,139894,139980,139983,140020,140023,140059,140063,140068,140081,140135,140137,140165,140167,140195,140201,140215,140217,140261,140263,140307,140310,140317,140328,140330,140357,140359,140385,140392,140408,140410,140504,140506,140600,140607,140610,140615,140621,140695,140698,140700,140736,140738,140774,140777,140784,140803,140806,140809,140811,140836,140838,140862,140865,140868,140898,140902,140905,140968,140970,141036,141038,141102,141105,141137,141139,141165,141167,141193,141196,141227,141229,141255,141257,141283,141286],[10,139567,139563],{"id":139568},"_15-品优购项目上篇-搭建与公共模块",[14,139570,139572],{"id":139571},"_151-项目规划","15.1 项目规划",[3528,139574],{"style":127999,"src":139575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139577,139578,139581],{},[2354,139579,139580],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139583,139584,139587],{},[2354,139585,139586],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139589,139591],{"id":139590},"_152-项目介绍","15.2 项目介绍",[19,139593,139580],{},[3528,139595],{"style":127999,"src":139596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139598,139599],{},"主页：",[3528,139601],{"style":127999,"src":139602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139604,139605],{},"列表页：",[3528,139607],{"style":127999,"src":139608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139610,139611],{},"注册页：",[3528,139613],{"style":127999,"src":139614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139616,139618],{"id":139617},"_153-项目搭建工作","15.3 项目搭建工作",[494,139620,139622],{"id":139621},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3528,139624],{"style":127999,"src":139625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139627,139628],{},"经常更换的图片要放到upload文件夹中",[19,139630,139631],{},"不经常换的放到images文件夹中",[494,139633,139635],{"id":139634},"_1532-创建文件如下","15.3.2 创建文件如下",[3528,139637],{"style":127999,"src":139638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3528,139640],{"style":127999,"src":139641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139643,139644],{},[2354,139645,139646],{},"初始化样式：",[19,139648,139649],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139651,139652],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139654,139655],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[494,139657,139659],{"id":139658},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139661,139662],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139664,139665,139666,139671],{},"这里最典型的应用就是 ",[2354,139667,139668],{},[34,139669,139670],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3528,139673],{"style":127999,"src":139674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139676,139677],{},"通过link方法来引入",[494,139679,139681],{"id":139680},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3528,139683],{"style":127999,"src":139684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139686,139687],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[40,139689,139690],{},[43,139691,139692],{},"制作favicon图标",[19,139694,139695,139696,139699],{},"①把品优购图标切成 ",[34,139697,139698],{},"png"," 图片",[19,139701,139702,139703,139705,139706,139709,139710],{},"②把 ",[34,139704,139698],{}," 图片转换为 ",[34,139707,139708],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2439,139711,139712],{"href":139712,"rel":139713},"http:\u002F\u002Fwww.bitbug.net\u002F",[25887],[40,139715,139716,139719],{"start":191},[43,139717,139718],{},"favicon图标放到网站根目录下",[43,139720,139721],{},"HTML页面引入favicon",[19,139723,139724,139725,139728],{},"在html 页面里面的 ",[34,139726,139727],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139730,139731],{},[34,139732,139733],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139735,139736],{},"复制这行代码或者在生成这个的网站进行复制",[3528,139738],{"style":127999,"src":139739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139741,139742],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139744,139745,139746],{},"例如:",[2439,139747,139748],{"href":139748,"rel":139749},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25887],[494,139751,139753],{"id":139752},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139755,139756,139759],{},[2354,139757,139758],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139761,139762,139765],{},[2354,139763,139764],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139767,139768],{},"页面必须有三个标签用来符合 SEO 优化",[3528,139770],{"style":127999,"src":139771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[40,139773,139774],{},[43,139775,139776],{},"title网站标题",[19,139778,139779,139782],{},[2354,139780,139781],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139784,70779],{},[3205,139786,139787,139790],{},[43,139788,139789],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[43,139791,139792],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[40,139794,139795],{"start":191},[43,139796,139797],{},"description网站描述",[19,139799,139800],{},"简要说明我们网站主要是做什么的",[19,139802,139803,139806],{},[2354,139804,139805],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139808,70779],{},[19,139810,139811],{},[34,139812,139813],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[40,139815,139816],{"start":205},[43,139817,139818],{},"keywords关键词",[19,139820,139821],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139823,70779],{},[19,139825,139826],{},[34,139827,139828],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139830,139831],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139833,139834],{},[2354,139835,139836],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[40,139838,139839],{"start":219},[43,139840,139841],{},"代码总结",[26,139843,139844],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,139845,139846,139850,139864,139868],{"__ignoreMap":32},[167,139847,139848],{"class":169,"line":170},[167,139849,132254],{"class":2268},[167,139851,139852,139854,139856,139858,139860,139862],{"class":169,"line":191},[167,139853,513],{"class":512},[167,139855,53609],{"class":516},[167,139857,55479],{"class":173},[167,139859,523],{"class":512},[167,139861,132267],{"class":177},[167,139863,537],{"class":512},[167,139865,139866],{"class":169,"line":205},[167,139867,132274],{"class":512},[167,139869,139870,139872,139874],{"class":169,"line":219},[167,139871,575],{"class":512},[167,139873,53609],{"class":516},[167,139875,537],{"class":512},[14,139877,139879],{"id":139878},"_154-项目公共部分制作","15.4 项目公共部分制作",[494,139881,139883],{"id":139882},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3528,139885],{"style":127999,"src":139886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[494,139888,139890],{"id":139889},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139892,139893],{},"布局思路：",[3205,139895,139896,139899,139902,139924,139957],{},[43,139897,139898],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[43,139900,139901],{},"里面包含版心的盒子",[43,139903,139904,139905],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3205,139906,139907,139915,139921],{},[43,139908,139909,139910,23526,139912,139914],{},"1 号盒子 里面包含一个",[34,139911,3205],{},[34,139913,3205],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[43,139916,139917,139918,139920],{},"里面的内容是水平排列，所以需要给",[34,139919,43],{},"设置浮动",[43,139922,139923],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[43,139925,139926,139927],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3205,139928,139929,139943,139948],{},[43,139930,139931,139932,23526,139934,139936,139937,139939,139940,139942],{},"2 号盒子 里面包含一个",[34,139933,3205],{},[34,139935,3205],{},"包裹",[34,139938,43],{},"，中间的",[34,139941,3120],{},"可以用样式去设置，也可以用字符 |",[43,139944,139945,139946,139920],{},"里面内容水平排列，给",[34,139947,43],{},[43,139949,139950,139951,139953,139954,139956],{},"找到里面所有偶数的 ",[34,139952,43],{}," 设置样式（偶数的 ",[34,139955,43],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[43,139958,139959,139960],{},"需要用到字体图标",[3205,139961,139962,139968,139971,139974,139977],{},[43,139963,139964,139965],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[34,139966,139967],{},"arrow-icon",[43,139969,139970],{},"先要引入字体图片的资源",[43,139972,139973],{},"在样式里面利用 font-face 来进行声明",[43,139975,139976],{},"在伪元素的 content属性设置 图标的编码",[43,139978,139979],{},"给伪元素设置font-family属性",[19,139981,139982],{},"结构实例代码：",[26,139984,139986],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},"div::before {\n  content: \"\";\n  display: block;\n}\n",[34,139987,139988,139996,140006,140016],{"__ignoreMap":32},[167,139989,139990,139992,139994],{"class":169,"line":170},[167,139991,53609],{"class":516},[167,139993,139144],{"class":173},[167,139995,17598],{"class":512},[167,139997,139998,140000,140002,140004],{"class":169,"line":191},[167,139999,139151],{"class":184},[167,140001,53435],{"class":512},[167,140003,9682],{"class":177},[167,140005,3359],{"class":512},[167,140007,140008,140010,140012,140014],{"class":169,"line":205},[167,140009,129759],{"class":184},[167,140011,53435],{"class":512},[167,140013,62858],{"class":184},[167,140015,3359],{"class":512},[167,140017,140018],{"class":169,"line":219},[167,140019,3630],{"class":512},[19,140021,140022],{},"样式实例代码：",[26,140024,140025],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,140026,140027,140035,140045,140055],{"__ignoreMap":32},[167,140028,140029,140031,140033],{"class":169,"line":170},[167,140030,53609],{"class":516},[167,140032,139144],{"class":173},[167,140034,17598],{"class":512},[167,140036,140037,140039,140041,140043],{"class":169,"line":191},[167,140038,139151],{"class":184},[167,140040,53435],{"class":512},[167,140042,9682],{"class":177},[167,140044,3359],{"class":512},[167,140046,140047,140049,140051,140053],{"class":169,"line":205},[167,140048,129759],{"class":184},[167,140050,53435],{"class":512},[167,140052,62858],{"class":184},[167,140054,3359],{"class":512},[167,140056,140057],{"class":169,"line":219},[167,140058,3630],{"class":512},[494,140060,140062],{"id":140061},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3205,140064,140065],{},[43,140066,140067],{},"header 盒子必须要有高度",[19,140069,140070,140071,140073,140074],{},"1 号盒子是 ",[34,140072,133155],{}," 标志定位，在正常开发过程中， ",[2354,140075,140076,140077,140080],{},"logo的布局其实是有讲究的，需要进行 ",[34,140078,140079],{},"logoSEO","的优化 （★★★）",[3205,140082,140083,140091,140099,140126],{},[43,140084,140085,140087,140088,140090],{},[34,140086,133155],{}," 里面首先放一个 ",[34,140089,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[43,140092,140093,140095,140096,140098],{},[34,140094,10],{}," 里面再放一个链接，可以返回首页的，把 ",[34,140097,133155],{}," 的背景图片给链接即可",[43,140100,140101,140102],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3205,140103,140104,140119],{},[43,140105,140106,140107,140110,140111,140114,140115,140118],{},"方法1：",[34,140108,140109],{},"text-indent"," 移到盒子外面（",[34,140112,140113],{},"text-indent: -9999px",") ，然后 ",[34,140116,140117],{},"overflow:hidden"," ，淘宝的做法",[43,140120,140121,140122,140125],{},"方法2：直接给 ",[34,140123,140124],{},"font-size: 0;"," 就看不到文字了，京东的做法",[43,140127,140128,140129,140131,140132,140134],{},"最后给链接一个 ",[34,140130,53405],{}," 属性，这样鼠标放到 ",[34,140133,133155],{}," 上就可以看到提示文字了",[19,140136,139982],{},[26,140138,140139],{"className":128890,"code":133376,"language":128892,"meta":32,"style":32},[34,140140,140141],{"__ignoreMap":32},[167,140142,140143,140145,140147,140149,140151,140153,140155,140157,140159,140161,140163],{"class":169,"line":170},[167,140144,513],{"class":512},[167,140146,2439],{"class":516},[167,140148,63046],{"class":173},[167,140150,523],{"class":512},[167,140152,133391],{"class":177},[167,140154,133394],{"class":173},[167,140156,523],{"class":512},[167,140158,133399],{"class":177},[167,140160,133402],{"class":512},[167,140162,2439],{"class":516},[167,140164,537],{"class":512},[19,140166,140022],{},[26,140168,140169],{"className":128890,"code":133376,"language":128892,"meta":32,"style":32},[34,140170,140171],{"__ignoreMap":32},[167,140172,140173,140175,140177,140179,140181,140183,140185,140187,140189,140191,140193],{"class":169,"line":170},[167,140174,513],{"class":512},[167,140176,2439],{"class":516},[167,140178,63046],{"class":173},[167,140180,523],{"class":512},[167,140182,133391],{"class":177},[167,140184,133394],{"class":173},[167,140186,523],{"class":512},[167,140188,133399],{"class":177},[167,140190,133402],{"class":512},[167,140192,2439],{"class":516},[167,140194,537],{"class":512},[19,140196,140197,140198,140200],{},"2 号盒子是 ",[34,140199,133168],{}," 搜索模块定位",[3205,140202,140203,140206,140209,140212],{},[43,140204,140205],{},"search盒子利用定位的方式放在对应的位置",[43,140207,140208],{},"search盒子设置绝对定位，header盒子设置相对定位",[43,140210,140211],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[43,140213,140214],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140216,139982],{},[26,140218,140219],{"className":128143,"code":133463,"language":128145,"meta":32,"style":32},[34,140220,140221,140243,140247,140257],{"__ignoreMap":32},[167,140222,140223,140225,140227,140229,140231,140233,140235,140237,140239,140241],{"class":169,"line":170},[167,140224,53609],{"class":516},[167,140226,14463],{"class":512},[167,140228,19],{"class":516},[167,140230,14463],{"class":512},[167,140232,10],{"class":516},[167,140234,14463],{"class":512},[167,140236,3205],{"class":516},[167,140238,14463],{"class":512},[167,140240,43],{"class":516},[167,140242,17598],{"class":512},[167,140244,140245],{"class":169,"line":191},[167,140246,133492],{"class":2268},[167,140248,140249,140251,140253,140255],{"class":169,"line":205},[167,140250,129759],{"class":184},[167,140252,53435],{"class":512},[167,140254,62858],{"class":184},[167,140256,3359],{"class":512},[167,140258,140259],{"class":169,"line":219},[167,140260,3630],{"class":512},[19,140262,140022],{},[26,140264,140265],{"className":128143,"code":133463,"language":128145,"meta":32,"style":32},[34,140266,140267,140289,140293,140303],{"__ignoreMap":32},[167,140268,140269,140271,140273,140275,140277,140279,140281,140283,140285,140287],{"class":169,"line":170},[167,140270,53609],{"class":516},[167,140272,14463],{"class":512},[167,140274,19],{"class":516},[167,140276,14463],{"class":512},[167,140278,10],{"class":516},[167,140280,14463],{"class":512},[167,140282,3205],{"class":516},[167,140284,14463],{"class":512},[167,140286,43],{"class":516},[167,140288,17598],{"class":512},[167,140290,140291],{"class":169,"line":191},[167,140292,133492],{"class":2268},[167,140294,140295,140297,140299,140301],{"class":169,"line":205},[167,140296,129759],{"class":184},[167,140298,53435],{"class":512},[167,140300,62858],{"class":184},[167,140302,3359],{"class":512},[167,140304,140305],{"class":169,"line":219},[167,140306,3630],{"class":512},[19,140308,140309],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140311,140312,140313,140316],{},"3 号盒子是 ",[34,140314,140315],{},"hotwords"," 热词模块定位",[3205,140318,140319,140322,140325],{},[43,140320,140321],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[43,140323,140324],{},"给里面所有的a标签设置 左右10px的外边距",[43,140326,140327],{},"给第一个a标签设置文字变红色（#c81623）",[19,140329,139982],{},[26,140331,140333],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},"div {\n  margin: 0 auto;\n}\n",[34,140334,140335,140341,140353],{"__ignoreMap":32},[167,140336,140337,140339],{"class":169,"line":170},[167,140338,53609],{"class":516},[167,140340,17598],{"class":512},[167,140342,140343,140345,140347,140349,140351],{"class":169,"line":191},[167,140344,72458],{"class":184},[167,140346,53435],{"class":512},[167,140348,1154],{"class":184},[167,140350,53554],{"class":184},[167,140352,3359],{"class":512},[167,140354,140355],{"class":169,"line":205},[167,140356,3630],{"class":512},[19,140358,140022],{},[26,140360,140361],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,140362,140363,140369,140381],{"__ignoreMap":32},[167,140364,140365,140367],{"class":169,"line":170},[167,140366,53609],{"class":516},[167,140368,17598],{"class":512},[167,140370,140371,140373,140375,140377,140379],{"class":169,"line":191},[167,140372,72458],{"class":184},[167,140374,53435],{"class":512},[167,140376,1154],{"class":184},[167,140378,53554],{"class":184},[167,140380,3359],{"class":512},[167,140382,140383],{"class":169,"line":205},[167,140384,3630],{"class":512},[19,140386,140387,140388,140391],{},"4 号盒子是 ",[34,140389,140390],{},"shopcar"," 购物车模块",[3205,140393,140394,140399,140402,140405],{},[43,140395,124926,140396,140398],{},[34,140397,140390],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[43,140400,140401],{},"count 统计部分用绝对定位做",[43,140403,140404],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[43,140406,140407],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140409,139982],{},[26,140411,140412],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,140413,140414,140418,140432,140436,140450,140454,140468,140472,140486,140490],{"__ignoreMap":32},[167,140415,140416],{"class":169,"line":170},[167,140417,133582],{"class":2268},[167,140419,140420,140422,140424,140426,140428,140430],{"class":169,"line":191},[167,140421,133587],{"class":173},[167,140423,81794],{"class":512},[167,140425,130503],{"class":184},[167,140427,53435],{"class":512},[167,140429,133596],{"class":184},[167,140431,131073],{"class":512},[167,140433,140434],{"class":169,"line":205},[167,140435,133603],{"class":2268},[167,140437,140438,140440,140442,140444,140446,140448],{"class":169,"line":219},[167,140439,133608],{"class":173},[167,140441,81794],{"class":512},[167,140443,130503],{"class":184},[167,140445,53435],{"class":512},[167,140447,56754],{"class":184},[167,140449,131073],{"class":512},[167,140451,140452],{"class":169,"line":230},[167,140453,133623],{"class":2268},[167,140455,140456,140458,140460,140462,140464,140466],{"class":169,"line":241},[167,140457,133628],{"class":173},[167,140459,81794],{"class":512},[167,140461,130503],{"class":184},[167,140463,53435],{"class":512},[167,140465,56821],{"class":184},[167,140467,131073],{"class":512},[167,140469,140470],{"class":169,"line":261},[167,140471,133643],{"class":2268},[167,140473,140474,140476,140478,140480,140482,140484],{"class":169,"line":773},[167,140475,133648],{"class":173},[167,140477,81794],{"class":512},[167,140479,130503],{"class":184},[167,140481,53435],{"class":512},[167,140483,88219],{"class":184},[167,140485,131073],{"class":512},[167,140487,140488],{"class":169,"line":779},[167,140489,133663],{"class":2268},[167,140491,140492,140494,140496,140498,140500,140502],{"class":169,"line":785},[167,140493,133668],{"class":173},[167,140495,81794],{"class":512},[167,140497,130503],{"class":184},[167,140499,53435],{"class":512},[167,140501,133677],{"class":184},[167,140503,131073],{"class":512},[19,140505,140022],{},[26,140507,140508],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,140509,140510,140514,140528,140532,140546,140550,140564,140568,140582,140586],{"__ignoreMap":32},[167,140511,140512],{"class":169,"line":170},[167,140513,133582],{"class":2268},[167,140515,140516,140518,140520,140522,140524,140526],{"class":169,"line":191},[167,140517,133587],{"class":173},[167,140519,81794],{"class":512},[167,140521,130503],{"class":184},[167,140523,53435],{"class":512},[167,140525,133596],{"class":184},[167,140527,131073],{"class":512},[167,140529,140530],{"class":169,"line":205},[167,140531,133603],{"class":2268},[167,140533,140534,140536,140538,140540,140542,140544],{"class":169,"line":219},[167,140535,133608],{"class":173},[167,140537,81794],{"class":512},[167,140539,130503],{"class":184},[167,140541,53435],{"class":512},[167,140543,56754],{"class":184},[167,140545,131073],{"class":512},[167,140547,140548],{"class":169,"line":230},[167,140549,133623],{"class":2268},[167,140551,140552,140554,140556,140558,140560,140562],{"class":169,"line":241},[167,140553,133628],{"class":173},[167,140555,81794],{"class":512},[167,140557,130503],{"class":184},[167,140559,53435],{"class":512},[167,140561,56821],{"class":184},[167,140563,131073],{"class":512},[167,140565,140566],{"class":169,"line":261},[167,140567,133643],{"class":2268},[167,140569,140570,140572,140574,140576,140578,140580],{"class":169,"line":773},[167,140571,133648],{"class":173},[167,140573,81794],{"class":512},[167,140575,130503],{"class":184},[167,140577,53435],{"class":512},[167,140579,88219],{"class":184},[167,140581,131073],{"class":512},[167,140583,140584],{"class":169,"line":779},[167,140585,133663],{"class":2268},[167,140587,140588,140590,140592,140594,140596,140598],{"class":169,"line":785},[167,140589,133668],{"class":173},[167,140591,81794],{"class":512},[167,140593,130503],{"class":184},[167,140595,53435],{"class":512},[167,140597,133677],{"class":184},[167,140599,131073],{"class":512},[494,140601,140603,140604,140606],{"id":140602},"_1544-nav导航模块制作","15.4.4 ",[34,140605,55705],{},"导航模块制作",[3528,140608],{"style":127999,"src":140609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140611,140612,140614],{},[34,140613,55705],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140616,140617,140618],{},"1 号盒子左侧浮动，",[34,140619,140620],{},"dropdown",[3205,140622,140623,140633,140641,140647,140655,140665,140673,140684],{},[43,140624,140625,140626,429,140629,140632],{},"1号盒子有讲究，根据相关性 里面包含 ",[34,140627,140628],{},".dt",[34,140630,140631],{},".dd"," 两个盒子",[43,140634,140635,140637,140638,140640],{},[34,140636,140628],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[34,140639,140631],{}," 挤到下面去了",[43,140642,140643,140644,140646],{},"给 ",[34,140645,140631],{}," 盒子设置宽度 和 高度，以及背景颜色",[43,140648,140643,140649,140651,140652,121828],{},[34,140650,140631],{}," 盒子里面定义 无序列表 （",[34,140653,140654],{},"ul > li > a",[43,140656,140657,140658,140660,140661,140664],{},"每个 ",[34,140659,43],{}," 都有一个高度（",[34,140662,140663],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[43,140666,140643,140667,140669,140670,121828],{},[34,140668,43],{}," 里面的a设置文字大小（",[34,140671,140672],{},"14px",[43,140674,140643,140675,140677,140678,140680,140681,140683],{},[34,140676,43],{}," 设置 ",[34,140679,129304],{},"，当鼠标移入的时候，让",[34,140682,43],{},"的背景变成白色，让里面的文字变成红色",[43,140685,140686,140688,140689,140691,140692,140694],{},[34,140687,43],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[34,140690,43],{},"的右侧，那么给",[34,140693,43],{},"设置相对定位",[19,140696,140697],{},"一定要注意相关性",[19,140699,139982],{},[26,140701,140702],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,140703,140704,140712,140722,140732],{"__ignoreMap":32},[167,140705,140706,140708,140710],{"class":169,"line":170},[167,140707,53609],{"class":516},[167,140709,139144],{"class":173},[167,140711,17598],{"class":512},[167,140713,140714,140716,140718,140720],{"class":169,"line":191},[167,140715,139151],{"class":184},[167,140717,53435],{"class":512},[167,140719,9682],{"class":177},[167,140721,3359],{"class":512},[167,140723,140724,140726,140728,140730],{"class":169,"line":205},[167,140725,129759],{"class":184},[167,140727,53435],{"class":512},[167,140729,62858],{"class":184},[167,140731,3359],{"class":512},[167,140733,140734],{"class":169,"line":219},[167,140735,3630],{"class":512},[19,140737,140022],{},[26,140739,140740],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,140741,140742,140750,140760,140770],{"__ignoreMap":32},[167,140743,140744,140746,140748],{"class":169,"line":170},[167,140745,53609],{"class":516},[167,140747,139144],{"class":173},[167,140749,17598],{"class":512},[167,140751,140752,140754,140756,140758],{"class":169,"line":191},[167,140753,139151],{"class":184},[167,140755,53435],{"class":512},[167,140757,9682],{"class":177},[167,140759,3359],{"class":512},[167,140761,140762,140764,140766,140768],{"class":169,"line":205},[167,140763,129759],{"class":184},[167,140765,53435],{"class":512},[167,140767,62858],{"class":184},[167,140769,3359],{"class":512},[167,140771,140772],{"class":169,"line":219},[167,140773,3630],{"class":512},[19,140775,140776],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140778,140779,140780,140783],{},"2 号盒子左侧浮动，",[34,140781,140782],{},"navitems"," 导航栏组",[3205,140785,140786,140791,140800],{},[43,140787,140788,140789],{},"里面结构是 ",[34,140790,140654],{},[43,140792,140793,140794,140796,140797,140799],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[34,140795,2439],{},"左右的",[34,140798,32890],{},"把两侧撑开",[43,140801,140802],{},"让文字垂直居中（行高等于高度）",[3528,140804],{"style":127999,"src":140805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140807,140808],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140810,139982],{},[26,140812,140814],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},".box {\n  float: left;\n}\n",[34,140815,140816,140822,140832],{"__ignoreMap":32},[167,140817,140818,140820],{"class":169,"line":170},[167,140819,131991],{"class":173},[167,140821,17598],{"class":512},[167,140823,140824,140826,140828,140830],{"class":169,"line":191},[167,140825,132623],{"class":184},[167,140827,53435],{"class":512},[167,140829,79],{"class":184},[167,140831,3359],{"class":512},[167,140833,140834],{"class":169,"line":205},[167,140835,3630],{"class":512},[19,140837,140022],{},[26,140839,140840],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,140841,140842,140848,140858],{"__ignoreMap":32},[167,140843,140844,140846],{"class":169,"line":170},[167,140845,131991],{"class":173},[167,140847,17598],{"class":512},[167,140849,140850,140852,140854,140856],{"class":169,"line":191},[167,140851,132623],{"class":184},[167,140853,53435],{"class":512},[167,140855,79],{"class":184},[167,140857,3359],{"class":512},[167,140859,140860],{"class":169,"line":205},[167,140861,3630],{"class":512},[19,140863,140864],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3528,140866],{"style":127999,"src":140867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,140869,140870],{"className":128143,"code":132300,"language":128145,"meta":32,"style":32},[34,140871,140872,140878,140894],{"__ignoreMap":32},[167,140873,140874,140876],{"class":169,"line":170},[167,140875,53609],{"class":516},[167,140877,17598],{"class":512},[167,140879,140880,140882,140884,140886,140888,140890,140892],{"class":169,"line":191},[167,140881,72884],{"class":184},[167,140883,53435],{"class":512},[167,140885,2418],{"class":184},[167,140887,53490],{"class":731},[167,140889,53519],{"class":184},[167,140891,131535],{"class":184},[167,140893,3359],{"class":512},[167,140895,140896],{"class":169,"line":205},[167,140897,3630],{"class":512},[494,140899,140901],{"id":140900},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3528,140903],{"style":127999,"src":140904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3205,140906,140907,140912,140917],{},[43,140908,140909,140911],{},[34,140910,133346],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[43,140913,140914,140916],{},[34,140915,133346],{}," 里面有一个大的版心",[43,140918,140919,140920,140923,140924],{},"版心里面包含 1 号盒子，",[34,140921,140922],{},"mod_service"," 是服务模块，mod 是模块的意思",[3205,140925,140926,140931,140944,140960,140965],{},[43,140927,140643,140928,140930],{},[34,140929,140922],{}," 设置高度（80px）和下边框",[43,140932,140933,140934,140937,140938,140940,140941,140943],{},"在里面定义 ",[34,140935,140936],{},"ul > li"," ,每个",[34,140939,43],{}," 宽度是300px 高度是 50px，给每个",[34,140942,43],{},"设置35px的左内边距",[43,140945,140946,140947,140949,140950,140952,140953,140955,140956,20436,140958,121828],{},"在每个",[34,140948,43],{},"里面，放一个 ",[34,140951,24936],{},"（里面放图标），一个",[34,140954,53609],{},"（里面放",[34,140957,53609],{},[34,140959,19],{},[43,140961,140643,140962,140964],{},[34,140963,24936],{},"设置浮动，让h5与这个div左右排列",[43,140966,140967],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140969,139982],{},[26,140971,140973],{"className":128143,"code":140972,"language":128145,"meta":32,"style":32},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[34,140974,140975,140981,140993,141005,141032],{"__ignoreMap":32},[167,140976,140977,140979],{"class":169,"line":170},[167,140978,135900],{"class":173},[167,140980,17598],{"class":512},[167,140982,140983,140985,140987,140989,140991],{"class":169,"line":191},[167,140984,72556],{"class":184},[167,140986,53435],{"class":512},[167,140988,2900],{"class":184},[167,140990,53490],{"class":731},[167,140992,3359],{"class":512},[167,140994,140995,140997,140999,141001,141003],{"class":169,"line":205},[167,140996,72776],{"class":184},[167,140998,53435],{"class":512},[167,141000,2900],{"class":184},[167,141002,53490],{"class":731},[167,141004,3359],{"class":512},[167,141006,141007,141009,141011,141013,141015,141017,141019,141021,141024,141026,141028,141030],{"class":169,"line":219},[167,141008,72599],{"class":184},[167,141010,53435],{"class":512},[167,141012,63715],{"class":184},[167,141014,898],{"class":512},[167,141016,135939],{"class":7246},[167,141018,15741],{"class":512},[167,141020,63725],{"class":184},[167,141022,141023],{"class":184}," -10",[167,141025,53490],{"class":731},[167,141027,135958],{"class":184},[167,141029,53490],{"class":731},[167,141031,3359],{"class":512},[167,141033,141034],{"class":169,"line":230},[167,141035,3630],{"class":512},[19,141037,140022],{},[26,141039,141040],{"className":128143,"code":140972,"language":128145,"meta":32,"style":32},[34,141041,141042,141048,141060,141072,141098],{"__ignoreMap":32},[167,141043,141044,141046],{"class":169,"line":170},[167,141045,135900],{"class":173},[167,141047,17598],{"class":512},[167,141049,141050,141052,141054,141056,141058],{"class":169,"line":191},[167,141051,72556],{"class":184},[167,141053,53435],{"class":512},[167,141055,2900],{"class":184},[167,141057,53490],{"class":731},[167,141059,3359],{"class":512},[167,141061,141062,141064,141066,141068,141070],{"class":169,"line":205},[167,141063,72776],{"class":184},[167,141065,53435],{"class":512},[167,141067,2900],{"class":184},[167,141069,53490],{"class":731},[167,141071,3359],{"class":512},[167,141073,141074,141076,141078,141080,141082,141084,141086,141088,141090,141092,141094,141096],{"class":169,"line":219},[167,141075,72599],{"class":184},[167,141077,53435],{"class":512},[167,141079,63715],{"class":184},[167,141081,898],{"class":512},[167,141083,135939],{"class":7246},[167,141085,15741],{"class":512},[167,141087,63725],{"class":184},[167,141089,141023],{"class":184},[167,141091,53490],{"class":731},[167,141093,135958],{"class":184},[167,141095,53490],{"class":731},[167,141097,3359],{"class":512},[167,141099,141100],{"class":169,"line":230},[167,141101,3630],{"class":512},[19,141103,141104],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3205,141106,141107,141110,141116,141122,141134],{},[43,141108,141109],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[43,141111,141112,141113,121828],{},"里面的布局利用 自定义列表来实现（",[34,141114,141115],{},"dl > dt + dd",[43,141117,140643,141118,141121],{},[34,141119,141120],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[43,141123,140643,141124,141127,141128,20436,141130,141133],{},[34,141125,141126],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[34,141129,141126],{},[34,141131,141132],{},"dd","之间有些距离",[43,141135,141136],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141138,139982],{},[26,141140,141141],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,141142,141143,141149,141161],{"__ignoreMap":32},[167,141144,141145,141147],{"class":169,"line":170},[167,141146,53609],{"class":516},[167,141148,17598],{"class":512},[167,141150,141151,141153,141155,141157,141159],{"class":169,"line":191},[167,141152,72458],{"class":184},[167,141154,53435],{"class":512},[167,141156,1154],{"class":184},[167,141158,53554],{"class":184},[167,141160,3359],{"class":512},[167,141162,141163],{"class":169,"line":205},[167,141164,3630],{"class":512},[19,141166,140022],{},[26,141168,141169],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,141170,141171,141177,141189],{"__ignoreMap":32},[167,141172,141173,141175],{"class":169,"line":170},[167,141174,53609],{"class":516},[167,141176,17598],{"class":512},[167,141178,141179,141181,141183,141185,141187],{"class":169,"line":191},[167,141180,72458],{"class":184},[167,141182,53435],{"class":512},[167,141184,1154],{"class":184},[167,141186,53554],{"class":184},[167,141188,3359],{"class":512},[167,141190,141191],{"class":169,"line":205},[167,141192,3630],{"class":512},[19,141194,141195],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3205,141197,141198,141207,141210,141221],{},[43,141199,141200,141201,141203,141204,141206],{},"分为上下两块，上面是 ",[34,141202,133363],{}," 友情链接，下面是 ",[34,141205,133356],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[43,141208,141209],{},"把内容分别复制到相应模块中",[43,141211,140643,141212,141214,141215,141217,141218,141220],{},[34,141213,133363],{}," 设置 15px 的下外边距，给",[34,141216,133363],{}," 里面 的 ",[34,141219,2439],{}," 标签设置 左右 3px 的外边距",[43,141222,141223,141224,141226],{},"给",[34,141225,133356],{}," 设置 20px 的行高",[19,141228,139982],{},[26,141230,141231],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,141232,141233,141239,141251],{"__ignoreMap":32},[167,141234,141235,141237],{"class":169,"line":170},[167,141236,53609],{"class":516},[167,141238,17598],{"class":512},[167,141240,141241,141243,141245,141247,141249],{"class":169,"line":191},[167,141242,72458],{"class":184},[167,141244,53435],{"class":512},[167,141246,1154],{"class":184},[167,141248,53554],{"class":184},[167,141250,3359],{"class":512},[167,141252,141253],{"class":169,"line":205},[167,141254,3630],{"class":512},[19,141256,140022],{},[26,141258,141259],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,141260,141261,141267,141279],{"__ignoreMap":32},[167,141262,141263,141265],{"class":169,"line":170},[167,141264,53609],{"class":516},[167,141266,17598],{"class":512},[167,141268,141269,141271,141273,141275,141277],{"class":169,"line":191},[167,141270,72458],{"class":184},[167,141272,53435],{"class":512},[167,141274,1154],{"class":184},[167,141276,53554],{"class":184},[167,141278,3359],{"class":512},[167,141280,141281],{"class":169,"line":205},[167,141282,3630],{"class":512},[19,141284,141285],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2113,141287,141288],{},"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":32,"searchDepth":191,"depth":191,"links":141290},[141291,141292,141293,141300],{"id":139571,"depth":191,"text":139572},{"id":139590,"depth":191,"text":139591},{"id":139617,"depth":191,"text":139618,"children":141294},[141295,141296,141297,141298,141299],{"id":139621,"depth":205,"text":139622},{"id":139634,"depth":205,"text":139635},{"id":139658,"depth":205,"text":139659},{"id":139680,"depth":205,"text":139681},{"id":139752,"depth":205,"text":139753},{"id":139878,"depth":191,"text":139879,"children":141301},[141302,141303,141304,141305,141307],{"id":139882,"depth":205,"text":139883},{"id":139889,"depth":205,"text":139890},{"id":140061,"depth":205,"text":140062},{"id":140602,"depth":205,"text":141306},"15.4.4 nav导航模块制作",{"id":140900,"depth":205,"text":140901},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139563,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141314,"title":141315,"body":141316,"description":25403,"extension":2140,"meta":143718,"navigation":740,"path":143719,"seo":143720,"stem":143721,"__hash__":143722},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141317,"toc":143695},[141318,141321,141325,141329,141341,141344,141347,141350,141361,141363,141387,141389,141413,141418,141421,141423,141459,141461,141497,141500,141505,141508,141511,141514,141544,141551,141554,141564,141566,141600,141603,141637,141643,141660,141662,141698,141700,141736,141741,141766,141768,141794,141796,141820,141827,141830,141894,141896,141938,141940,141980,141987,141992,141994,142024,142026,142056,142060,142063,142070,142082,142084,142110,142112,142136,142139,142141,142165,142171,142181,142183,142213,142215,142245,142252,142293,142295,142331,142333,142369,142373,142376,142379,142382,142388,142393,142396,142419,142422,142446,142449,142473,142478,142481,142484,142487,142490,142493,142567,142569,142599,142601,142631,142634,142637,142669,142673,142677,142691,142700,142703,142708,142710,142804,142806,142900,142923,142925,142949,142951,142975,142982,142985,142995,142997,143021,143026,143034,143036,143066,143071,143111,143113,143139,143141,143167,143171,143174,143179,143182,143186,143194,143201,143209,143211,143241,143243,143273,143281,143284,143287,143289,143319,143321,143351,143354,143359,143361,143385,143387,143411,143414,143499,143501,143525,143527,143551,143555,143557,143581,143583,143617,143621,143635,143638,143643,143646,143651,143654,143684,143692],[10,141319,141315],{"id":141320},"_16-品优购项目下篇-主体与页面开发",[14,141322,141324],{"id":141323},"_161-项目主体模块制作","16.1 项目主体模块制作",[494,141326,141328],{"id":141327},"_1611-首页制作","16.1.1 首页制作",[19,141330,141331,141333,141334,141336,141337,141340],{},[2354,141332,1547],{}," 主体模块是 ",[2354,141335,76046],{}," 里面专有的，注意需要新的样式文件 ",[2354,141338,141339],{},"index.css，"," 就不要写在common.css中了",[3528,141342],{"style":127999,"src":141343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3528,141345],{"style":127999,"src":141346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141348,141349],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3205,141351,141352,141355,141358],{},[43,141353,141354],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[43,141356,141357],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[43,141359,141360],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141362,139982],{},[26,141364,141365],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,141366,141367,141373,141383],{"__ignoreMap":32},[167,141368,141369,141371],{"class":169,"line":170},[167,141370,131991],{"class":173},[167,141372,17598],{"class":512},[167,141374,141375,141377,141379,141381],{"class":169,"line":191},[167,141376,132623],{"class":184},[167,141378,53435],{"class":512},[167,141380,79],{"class":184},[167,141382,3359],{"class":512},[167,141384,141385],{"class":169,"line":205},[167,141386,3630],{"class":512},[19,141388,140022],{},[26,141390,141391],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,141392,141393,141399,141409],{"__ignoreMap":32},[167,141394,141395,141397],{"class":169,"line":170},[167,141396,131991],{"class":173},[167,141398,17598],{"class":512},[167,141400,141401,141403,141405,141407],{"class":169,"line":191},[167,141402,132623],{"class":184},[167,141404,53435],{"class":512},[167,141406,79],{"class":184},[167,141408,3359],{"class":512},[167,141410,141411],{"class":169,"line":205},[167,141412,3630],{"class":512},[40,141414,141415],{},[43,141416,141417],{},"左侧focus模块制作",[3528,141419],{"style":127999,"src":141420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141422,139982],{},[26,141424,141425],{"className":128143,"code":129466,"language":128145,"meta":32,"style":32},[34,141426,141427,141435,141445,141455],{"__ignoreMap":32},[167,141428,141429,141431,141433],{"class":169,"line":170},[167,141430,55812],{"class":516},[167,141432,63889],{"class":173},[167,141434,17598],{"class":512},[167,141436,141437,141439,141441,141443],{"class":169,"line":191},[167,141438,129481],{"class":184},[167,141440,53435],{"class":512},[167,141442,56879],{"class":184},[167,141444,3359],{"class":512},[167,141446,141447,141449,141451,141453],{"class":169,"line":205},[167,141448,72786],{"class":184},[167,141450,53435],{"class":512},[167,141452,56727],{"class":184},[167,141454,3359],{"class":512},[167,141456,141457],{"class":169,"line":219},[167,141458,3630],{"class":512},[19,141460,140022],{},[26,141462,141463],{"className":128143,"code":129466,"language":128145,"meta":32,"style":32},[34,141464,141465,141473,141483,141493],{"__ignoreMap":32},[167,141466,141467,141469,141471],{"class":169,"line":170},[167,141468,55812],{"class":516},[167,141470,63889],{"class":173},[167,141472,17598],{"class":512},[167,141474,141475,141477,141479,141481],{"class":169,"line":191},[167,141476,129481],{"class":184},[167,141478,53435],{"class":512},[167,141480,56879],{"class":184},[167,141482,3359],{"class":512},[167,141484,141485,141487,141489,141491],{"class":169,"line":205},[167,141486,72786],{"class":184},[167,141488,53435],{"class":512},[167,141490,56727],{"class":184},[167,141492,3359],{"class":512},[167,141494,141495],{"class":169,"line":219},[167,141496,3630],{"class":512},[19,141498,141499],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[40,141501,141502],{"start":191},[43,141503,141504],{},"右侧newsflash模块制作",[3528,141506],{"style":127999,"src":141507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141509,141510],{},"右侧的模块 分为上中下三个盒子",[19,141512,141513],{},"结构代码：",[26,141515,141516],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,141517,141518],{"__ignoreMap":32},[167,141519,141520,141522,141524,141526,141528,141530,141532,141534,141536,141538,141540,141542],{"class":169,"line":170},[167,141521,513],{"class":512},[167,141523,3528],{"class":516},[167,141525,57228],{"class":173},[167,141527,523],{"class":512},[167,141529,135660],{"class":177},[167,141531,57236],{"class":173},[167,141533,523],{"class":512},[167,141535,135667],{"class":177},[167,141537,135670],{"class":173},[167,141539,523],{"class":512},[167,141541,135675],{"class":177},[167,141543,537],{"class":512},[19,141545,141546,141547,141550],{},"1 号盒子为 ",[34,141548,141549],{},"news"," 新闻模块 高度为 165px",[3528,141552],{"style":127999,"src":141553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141555,141556,141557,141560,141561],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[34,141558,141559],{},"news-hd","，下面是 ",[34,141562,141563],{},"news-bd",[19,141565,141513],{},[26,141567,141568],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,141569,141570,141574,141588,141592],{"__ignoreMap":32},[167,141571,141572],{"class":169,"line":170},[167,141573,132254],{"class":2268},[167,141575,141576,141578,141580,141582,141584,141586],{"class":169,"line":191},[167,141577,513],{"class":512},[167,141579,53609],{"class":516},[167,141581,55479],{"class":173},[167,141583,523],{"class":512},[167,141585,132267],{"class":177},[167,141587,537],{"class":512},[167,141589,141590],{"class":169,"line":205},[167,141591,132274],{"class":512},[167,141593,141594,141596,141598],{"class":169,"line":219},[167,141595,575],{"class":512},[167,141597,53609],{"class":516},[167,141599,537],{"class":512},[19,141601,141602],{},"样式代码：",[26,141604,141605],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,141606,141607,141611,141625,141629],{"__ignoreMap":32},[167,141608,141609],{"class":169,"line":170},[167,141610,132254],{"class":2268},[167,141612,141613,141615,141617,141619,141621,141623],{"class":169,"line":191},[167,141614,513],{"class":512},[167,141616,53609],{"class":516},[167,141618,55479],{"class":173},[167,141620,523],{"class":512},[167,141622,132267],{"class":177},[167,141624,537],{"class":512},[167,141626,141627],{"class":169,"line":205},[167,141628,132274],{"class":512},[167,141630,141631,141633,141635],{"class":169,"line":219},[167,141632,575],{"class":512},[167,141634,53609],{"class":516},[167,141636,537],{"class":512},[19,141638,141639,141640,141642],{},"上面是",[34,141641,141559],{},"，设置高度是 33px，设置下边框",[3205,141644,141645,141651],{},[43,141646,141647,141648,141650],{},"里面放一个",[34,141649,24936],{}," 标题",[43,141652,141653,141654,141656,141657,141659],{},"放一个a",[34,141655,104284],{},"，内容是 更多，然后让 ",[34,141658,2439],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141661,141513],{},[26,141663,141664],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,141665,141666,141674,141684,141694],{"__ignoreMap":32},[167,141667,141668,141670,141672],{"class":169,"line":170},[167,141669,53609],{"class":516},[167,141671,139144],{"class":173},[167,141673,17598],{"class":512},[167,141675,141676,141678,141680,141682],{"class":169,"line":191},[167,141677,139151],{"class":184},[167,141679,53435],{"class":512},[167,141681,9682],{"class":177},[167,141683,3359],{"class":512},[167,141685,141686,141688,141690,141692],{"class":169,"line":205},[167,141687,129759],{"class":184},[167,141689,53435],{"class":512},[167,141691,62858],{"class":184},[167,141693,3359],{"class":512},[167,141695,141696],{"class":169,"line":219},[167,141697,3630],{"class":512},[19,141699,141602],{},[26,141701,141702],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,141703,141704,141712,141722,141732],{"__ignoreMap":32},[167,141705,141706,141708,141710],{"class":169,"line":170},[167,141707,53609],{"class":516},[167,141709,139144],{"class":173},[167,141711,17598],{"class":512},[167,141713,141714,141716,141718,141720],{"class":169,"line":191},[167,141715,139151],{"class":184},[167,141717,53435],{"class":512},[167,141719,9682],{"class":177},[167,141721,3359],{"class":512},[167,141723,141724,141726,141728,141730],{"class":169,"line":205},[167,141725,129759],{"class":184},[167,141727,53435],{"class":512},[167,141729,62858],{"class":184},[167,141731,3359],{"class":512},[167,141733,141734],{"class":169,"line":219},[167,141735,3630],{"class":512},[19,141737,141738,141739],{},"下面是",[34,141740,141563],{},[3205,141742,141743,141751],{},[43,141744,141745,141746,429,141748,141750],{},"里面包含 ",[34,141747,3205],{},[34,141749,43],{}," 还有链接",[43,141752,141223,141753,141755,141756,141758,141759,141762,141763],{},[34,141754,43],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[34,141757,132809],{}," 2.设置 ",[34,141760,141761],{},"white-space: nowrap;"," 3. 设置 ",[34,141764,141765],{},"text-overflow: ellipsis;",[19,141767,141513],{},[26,141769,141771],{"className":128143,"code":141770,"language":128145,"meta":32,"style":32},"div {\n  overflow: hidden;\n}\n",[34,141772,141773,141779,141790],{"__ignoreMap":32},[167,141774,141775,141777],{"class":169,"line":170},[167,141776,53609],{"class":516},[167,141778,17598],{"class":512},[167,141780,141781,141784,141786,141788],{"class":169,"line":191},[167,141782,141783],{"class":184},"  overflow",[167,141785,53435],{"class":512},[167,141787,63703],{"class":184},[167,141789,3359],{"class":512},[167,141791,141792],{"class":169,"line":205},[167,141793,3630],{"class":512},[19,141795,141602],{},[26,141797,141798],{"className":128143,"code":141770,"language":128145,"meta":32,"style":32},[34,141799,141800,141806,141816],{"__ignoreMap":32},[167,141801,141802,141804],{"class":169,"line":170},[167,141803,53609],{"class":516},[167,141805,17598],{"class":512},[167,141807,141808,141810,141812,141814],{"class":169,"line":191},[167,141809,141783],{"class":184},[167,141811,53435],{"class":512},[167,141813,63703],{"class":184},[167,141815,3359],{"class":512},[167,141817,141818],{"class":169,"line":205},[167,141819,3630],{"class":512},[19,141821,141822,141823,141826],{},"2 号盒子为 ",[34,141824,141825],{},"lifeservice"," 生活服务模块 高度为 209px",[3528,141828],{"style":127999,"src":141829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3205,141831,141832,141835,141845,141869,141880],{},[43,141833,141834],{},"设置边框（左右下边框）",[43,141836,141837,141838,141841,141842,141844],{},"里面的内容 是 ",[34,141839,141840],{},"ul > 12*li","，给",[34,141843,43],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[43,141846,141847,141848],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3205,141849,141850,141855,141864],{},[43,141851,141852,141854],{},[34,141853,141825],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[43,141856,141857,141858,141860,141861,141863],{},"可以让 ",[34,141859,141825],{}," 里面的 ",[34,141862,3205],{}," 宽度为 252，就可以装的下 4 个 小 li",[43,141865,141866,141868],{},[34,141867,141825],{}," 盒子 overflow 隐藏多余的部分就可以了",[43,141870,118058,141871,141873,141874,141876,141877,141879],{},[34,141872,43],{}," 里面放一个 ",[34,141875,2641],{},"（里面放图标），下面的文本用 ",[34,141878,19],{}," 标签包裹",[43,141881,140643,141882,141884,141885,141887,141888,140677,141890,141893],{},[34,141883,2641],{}," 设置 24px宽和28px的高（注意 ",[34,141886,2641],{}," 是行内元素， 转成行内块），给 ",[34,141889,43],{},[34,141891,141892],{},"text-align:center"," 让里面内容居中显示",[19,141895,141513],{},[26,141897,141899],{"className":128143,"code":141898,"language":128145,"meta":32,"style":32},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[34,141900,141901,141919,141924,141934],{"__ignoreMap":32},[167,141902,141903,141905,141907,141909,141911,141913,141915,141917],{"class":169,"line":170},[167,141904,167],{"class":516},[167,141906,14463],{"class":512},[167,141908,2439],{"class":516},[167,141910,14463],{"class":512},[167,141912,25580],{"class":516},[167,141914,14463],{"class":512},[167,141916,2354],{"class":516},[167,141918,17598],{"class":512},[167,141920,141921],{"class":169,"line":191},[167,141922,141923],{"class":2268},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[167,141925,141926,141928,141930,141932],{"class":169,"line":205},[167,141927,129759],{"class":184},[167,141929,53435],{"class":512},[167,141931,129821],{"class":184},[167,141933,3359],{"class":512},[167,141935,141936],{"class":169,"line":219},[167,141937,3630],{"class":512},[19,141939,141602],{},[26,141941,141942],{"className":128143,"code":141898,"language":128145,"meta":32,"style":32},[34,141943,141944,141962,141966,141976],{"__ignoreMap":32},[167,141945,141946,141948,141950,141952,141954,141956,141958,141960],{"class":169,"line":170},[167,141947,167],{"class":516},[167,141949,14463],{"class":512},[167,141951,2439],{"class":516},[167,141953,14463],{"class":512},[167,141955,25580],{"class":516},[167,141957,14463],{"class":512},[167,141959,2354],{"class":516},[167,141961,17598],{"class":512},[167,141963,141964],{"class":169,"line":191},[167,141965,141923],{"class":2268},[167,141967,141968,141970,141972,141974],{"class":169,"line":205},[167,141969,129759],{"class":184},[167,141971,53435],{"class":512},[167,141973,129821],{"class":184},[167,141975,3359],{"class":512},[167,141977,141978],{"class":169,"line":219},[167,141979,3630],{"class":512},[19,141981,141982,141983,141986],{},"3 号盒子为 ",[34,141984,141985],{},"bargain"," 特价商品",[3205,141988,141989],{},[43,141990,141991],{},"这个比较简单，直接插入一张图片即可",[19,141993,141513],{},[26,141995,141996],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,141997,141998],{"__ignoreMap":32},[167,141999,142000,142002,142004,142006,142008,142010,142012,142014,142016,142018,142020,142022],{"class":169,"line":170},[167,142001,513],{"class":512},[167,142003,3528],{"class":516},[167,142005,57228],{"class":173},[167,142007,523],{"class":512},[167,142009,135660],{"class":177},[167,142011,57236],{"class":173},[167,142013,523],{"class":512},[167,142015,135667],{"class":177},[167,142017,135670],{"class":173},[167,142019,523],{"class":512},[167,142021,135675],{"class":177},[167,142023,537],{"class":512},[19,142025,141602],{},[26,142027,142028],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,142029,142030],{"__ignoreMap":32},[167,142031,142032,142034,142036,142038,142040,142042,142044,142046,142048,142050,142052,142054],{"class":169,"line":170},[167,142033,513],{"class":512},[167,142035,3528],{"class":516},[167,142037,57228],{"class":173},[167,142039,523],{"class":512},[167,142041,135660],{"class":177},[167,142043,57236],{"class":173},[167,142045,523],{"class":512},[167,142047,135667],{"class":177},[167,142049,135670],{"class":173},[167,142051,523],{"class":512},[167,142053,135675],{"class":177},[167,142055,537],{"class":512},[494,142057,142059],{"id":142058},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3528,142061],{"style":127999,"src":142062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142064,142065,142066,142069],{},"大盒子 ",[34,142067,142068],{},"recom"," 推荐模块 recommend",[3205,142071,142072],{},[43,142073,142074,142075,142077,142078,142081],{},"给这个 ",[34,142076,142068],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[34,142079,142080],{},"#ebebeb","），设置距离上边 12px",[19,142083,141513],{},[26,142085,142087],{"className":128143,"code":142086,"language":128145,"meta":32,"style":32},"div {\n  background-color: #f0f0f0;\n}\n",[34,142088,142089,142095,142106],{"__ignoreMap":32},[167,142090,142091,142093],{"class":169,"line":170},[167,142092,53609],{"class":516},[167,142094,17598],{"class":512},[167,142096,142097,142099,142101,142104],{"class":169,"line":191},[167,142098,72866],{"class":184},[167,142100,53435],{"class":512},[167,142102,142103],{"class":184},"#f0f0f0",[167,142105,3359],{"class":512},[167,142107,142108],{"class":169,"line":205},[167,142109,3630],{"class":512},[19,142111,141602],{},[26,142113,142114],{"className":128143,"code":142086,"language":128145,"meta":32,"style":32},[34,142115,142116,142122,142132],{"__ignoreMap":32},[167,142117,142118,142120],{"class":169,"line":170},[167,142119,53609],{"class":516},[167,142121,17598],{"class":512},[167,142123,142124,142126,142128,142130],{"class":169,"line":191},[167,142125,72866],{"class":184},[167,142127,53435],{"class":512},[167,142129,142103],{"class":184},[167,142131,3359],{"class":512},[167,142133,142134],{"class":169,"line":205},[167,142135,3630],{"class":512},[19,142137,142138],{},"里面包含 2 个盒子， 浮动即可",[19,142140,141513],{},[26,142142,142143],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,142144,142145,142151,142161],{"__ignoreMap":32},[167,142146,142147,142149],{"class":169,"line":170},[167,142148,131991],{"class":173},[167,142150,17598],{"class":512},[167,142152,142153,142155,142157,142159],{"class":169,"line":191},[167,142154,132623],{"class":184},[167,142156,53435],{"class":512},[167,142158,79],{"class":184},[167,142160,3359],{"class":512},[167,142162,142163],{"class":169,"line":205},[167,142164,3630],{"class":512},[19,142166,142167,142168],{},"1 号盒子 ",[34,142169,142170],{},"recom_hd",[3205,142172,142173,142176],{},[43,142174,142175],{},"设置宽度205px，高度163px",[43,142177,141647,142178,142180],{},[34,142179,3528],{},"标签，插入图片即可",[19,142182,141513],{},[26,142184,142185],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,142186,142187],{"__ignoreMap":32},[167,142188,142189,142191,142193,142195,142197,142199,142201,142203,142205,142207,142209,142211],{"class":169,"line":170},[167,142190,513],{"class":512},[167,142192,3528],{"class":516},[167,142194,57228],{"class":173},[167,142196,523],{"class":512},[167,142198,135660],{"class":177},[167,142200,57236],{"class":173},[167,142202,523],{"class":512},[167,142204,135667],{"class":177},[167,142206,135670],{"class":173},[167,142208,523],{"class":512},[167,142210,135675],{"class":177},[167,142212,537],{"class":512},[19,142214,141602],{},[26,142216,142217],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,142218,142219],{"__ignoreMap":32},[167,142220,142221,142223,142225,142227,142229,142231,142233,142235,142237,142239,142241,142243],{"class":169,"line":170},[167,142222,513],{"class":512},[167,142224,3528],{"class":516},[167,142226,57228],{"class":173},[167,142228,523],{"class":512},[167,142230,135660],{"class":177},[167,142232,57236],{"class":173},[167,142234,523],{"class":512},[167,142236,135667],{"class":177},[167,142238,135670],{"class":173},[167,142240,523],{"class":512},[167,142242,135675],{"class":177},[167,142244,537],{"class":512},[19,142246,142247,142248,142251],{},"2 号盒子 ",[34,142249,142250],{},"recom_bd"," ，注意里面的小竖线",[3205,142253,142254,142265,142268,142273,142278],{},[43,142255,142256,142257,142259,142260,142262,142263],{},"右侧结构里面放 ",[34,142258,3205],{}," 包含 4个 ",[34,142261,43],{},"，每个li里面包含一个",[34,142264,3528],{},[43,142266,142267],{},"直接利用切片工具把里面的内容当成一张图片",[43,142269,140643,142270,142272],{},[34,142271,43],{}," 设置浮动",[43,142274,140643,142275,142277],{},[34,142276,3528],{}," 设置宽高，宽度 248px，高度 163px",[43,142279,142280,142281,141841,142284,142286,142287,142289,142290],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[34,142282,142283],{},"top 10px",[34,142285,43],{},"设置相对定位（注意，最后一个",[34,142288,43],{},"不用设置伪元素），可以利用 ",[34,142291,142292],{},"nth-child(-n+3){...}",[19,142294,141513],{},[26,142296,142297],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,142298,142299,142307,142317,142327],{"__ignoreMap":32},[167,142300,142301,142303,142305],{"class":169,"line":170},[167,142302,53609],{"class":516},[167,142304,139144],{"class":173},[167,142306,17598],{"class":512},[167,142308,142309,142311,142313,142315],{"class":169,"line":191},[167,142310,139151],{"class":184},[167,142312,53435],{"class":512},[167,142314,9682],{"class":177},[167,142316,3359],{"class":512},[167,142318,142319,142321,142323,142325],{"class":169,"line":205},[167,142320,129759],{"class":184},[167,142322,53435],{"class":512},[167,142324,62858],{"class":184},[167,142326,3359],{"class":512},[167,142328,142329],{"class":169,"line":219},[167,142330,3630],{"class":512},[19,142332,141602],{},[26,142334,142335],{"className":128143,"code":139985,"language":128145,"meta":32,"style":32},[34,142336,142337,142345,142355,142365],{"__ignoreMap":32},[167,142338,142339,142341,142343],{"class":169,"line":170},[167,142340,53609],{"class":516},[167,142342,139144],{"class":173},[167,142344,17598],{"class":512},[167,142346,142347,142349,142351,142353],{"class":169,"line":191},[167,142348,139151],{"class":184},[167,142350,53435],{"class":512},[167,142352,9682],{"class":177},[167,142354,3359],{"class":512},[167,142356,142357,142359,142361,142363],{"class":169,"line":205},[167,142358,129759],{"class":184},[167,142360,53435],{"class":512},[167,142362,62858],{"class":184},[167,142364,3359],{"class":512},[167,142366,142367],{"class":169,"line":219},[167,142368,3630],{"class":512},[494,142370,142372],{"id":142371},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3528,142374],{"style":127999,"src":142375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142377,142378],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142380,142381],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142383,142384,142387],{},[34,142385,142386],{},"box_hd"," 制作",[19,142389,142167,142390,142392],{},[34,142391,142386],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3528,142394],{"style":127999,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3205,142397,142398,142403,142408,142411],{},[43,142399,142400,142402],{},[34,142401,142386],{}," 给 30px 的高度，2个像素的下边框",[43,142404,142405,142406],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[34,142407,140654],{},[43,142409,142410],{},"左侧盒左浮动，右侧盒子右浮动",[43,142412,142413,142415,142416,142418],{},[34,142414,2439],{},"标签之间的距离用左右的",[34,142417,32890],{},"撑开即可",[19,142420,142421],{},"结构代码",[26,142423,142424],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,142425,142426,142432,142442],{"__ignoreMap":32},[167,142427,142428,142430],{"class":169,"line":170},[167,142429,131991],{"class":173},[167,142431,17598],{"class":512},[167,142433,142434,142436,142438,142440],{"class":169,"line":191},[167,142435,132623],{"class":184},[167,142437,53435],{"class":512},[167,142439,79],{"class":184},[167,142441,3359],{"class":512},[167,142443,142444],{"class":169,"line":205},[167,142445,3630],{"class":512},[19,142447,142448],{},"样式代码",[26,142450,142451],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,142452,142453,142459,142469],{"__ignoreMap":32},[167,142454,142455,142457],{"class":169,"line":170},[167,142456,131991],{"class":173},[167,142458,17598],{"class":512},[167,142460,142461,142463,142465,142467],{"class":169,"line":191},[167,142462,132623],{"class":184},[167,142464,53435],{"class":512},[167,142466,79],{"class":184},[167,142468,3359],{"class":512},[167,142470,142471],{"class":169,"line":205},[167,142472,3630],{"class":512},[19,142474,142475,142387],{},[34,142476,142477],{},"box_bd",[19,142479,142480],{},"2 号盒子 box_bd，不要给高度",[3528,142482],{"style":127999,"src":142483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142485,142486],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142488,142489],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142491,142492],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3205,142494,142495,142507,142523],{},[43,142496,142497,142499,142500,142503,142504,142506],{},[34,142498,142477],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[34,142501,142502],{},"tab_content","，在",[34,142505,142502],{}," 里面包裹tab选项卡对应的内容",[43,142508,142509,142510,142513,142514,142516,142517,142519,142520,142522],{},"内容被一个大盒子包裹（",[34,142511,142512],{},"tab_list_item","），里面是 ",[34,142515,3205],{}," 包裹 5个 ",[34,142518,43],{},"，每个",[34,142521,43],{},"设置对应的宽度，然后设置浮动",[43,142524,142525,142526,142528,142529,142531,142532],{},"而这5个",[34,142527,43],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[34,142530,43],{},"设置",[3205,142533,142534,142552,142555],{},[43,142535,142536,142537,142539,142540,142542,142543,142545,142546,142548,142549,142551],{},"第一个小 ",[34,142538,43],{}," 分为上下结构，上面是 ",[34,142541,3205],{}," 包裹 ",[34,142544,43],{}," ，",[34,142547,43],{},"里面包裹 ",[34,142550,2439],{},"，下面插入一张图片",[43,142553,142554],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[43,142556,142557,142558,142560,142561,142563,142564,142566],{},"后面的小 ",[34,142559,43],{}," 里面先放一个",[34,142562,2439],{},"标签，然后在",[34,142565,2439],{},"标签里面插入图片即可",[19,142568,142421],{},[26,142570,142571],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,142572,142573],{"__ignoreMap":32},[167,142574,142575,142577,142579,142581,142583,142585,142587,142589,142591,142593,142595,142597],{"class":169,"line":170},[167,142576,513],{"class":512},[167,142578,3528],{"class":516},[167,142580,57228],{"class":173},[167,142582,523],{"class":512},[167,142584,135660],{"class":177},[167,142586,57236],{"class":173},[167,142588,523],{"class":512},[167,142590,135667],{"class":177},[167,142592,135670],{"class":173},[167,142594,523],{"class":512},[167,142596,135675],{"class":177},[167,142598,537],{"class":512},[19,142600,142448],{},[26,142602,142603],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,142604,142605],{"__ignoreMap":32},[167,142606,142607,142609,142611,142613,142615,142617,142619,142621,142623,142625,142627,142629],{"class":169,"line":170},[167,142608,513],{"class":512},[167,142610,3528],{"class":516},[167,142612,57228],{"class":173},[167,142614,523],{"class":512},[167,142616,135660],{"class":177},[167,142618,57236],{"class":173},[167,142620,523],{"class":512},[167,142622,135667],{"class":177},[167,142624,135670],{"class":173},[167,142626,523],{"class":512},[167,142628,135675],{"class":177},[167,142630,537],{"class":512},[19,142632,142633],{},"tab栏切换需求！！！！！！介绍：",[3528,142635],{"style":127999,"src":142636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3205,142638,142639,142647,142653,142656],{},[43,142640,142641,142644,142645],{},[34,142642,142643],{},"tab","栏的布局是 ",[34,142646,140654],{},[43,142648,142649,142650,142652],{},"有多少个",[34,142651,142643],{},"选项卡，那么对应就有多少个内容",[43,142654,142655],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[43,142657,142658,142659,142662,142663,142665,142666,142668],{},"等后面我们学习了",[34,142660,142661],{},"js","之后，我们就会配合",[34,142664,142661],{},"来实现，",[34,142667,142643],{},"栏的切换",[14,142670,142672],{"id":142671},"_162-列表制作","16.2 列表制作",[494,142674,142676],{"id":142675},"_1621-准备工作","16.2.1 准备工作",[3205,142678,142679,142682,142685,142688],{},[43,142680,142681],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[43,142683,142684],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[43,142686,142687],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[43,142689,142690],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[494,142692,142694,142695,429,142697,142699],{"id":142693},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[34,142696,133148],{},[34,142698,55705],{}," 修改",[3528,142701],{"style":127999,"src":142702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3205,142704,142705],{},[43,142706,142707],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142709,141513],{},[26,142711,142712],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,142713,142714,142718,142732,142736,142750,142754,142768,142772,142786,142790],{"__ignoreMap":32},[167,142715,142716],{"class":169,"line":170},[167,142717,133582],{"class":2268},[167,142719,142720,142722,142724,142726,142728,142730],{"class":169,"line":191},[167,142721,133587],{"class":173},[167,142723,81794],{"class":512},[167,142725,130503],{"class":184},[167,142727,53435],{"class":512},[167,142729,133596],{"class":184},[167,142731,131073],{"class":512},[167,142733,142734],{"class":169,"line":205},[167,142735,133603],{"class":2268},[167,142737,142738,142740,142742,142744,142746,142748],{"class":169,"line":219},[167,142739,133608],{"class":173},[167,142741,81794],{"class":512},[167,142743,130503],{"class":184},[167,142745,53435],{"class":512},[167,142747,56754],{"class":184},[167,142749,131073],{"class":512},[167,142751,142752],{"class":169,"line":230},[167,142753,133623],{"class":2268},[167,142755,142756,142758,142760,142762,142764,142766],{"class":169,"line":241},[167,142757,133628],{"class":173},[167,142759,81794],{"class":512},[167,142761,130503],{"class":184},[167,142763,53435],{"class":512},[167,142765,56821],{"class":184},[167,142767,131073],{"class":512},[167,142769,142770],{"class":169,"line":261},[167,142771,133643],{"class":2268},[167,142773,142774,142776,142778,142780,142782,142784],{"class":169,"line":773},[167,142775,133648],{"class":173},[167,142777,81794],{"class":512},[167,142779,130503],{"class":184},[167,142781,53435],{"class":512},[167,142783,88219],{"class":184},[167,142785,131073],{"class":512},[167,142787,142788],{"class":169,"line":779},[167,142789,133663],{"class":2268},[167,142791,142792,142794,142796,142798,142800,142802],{"class":169,"line":785},[167,142793,133668],{"class":173},[167,142795,81794],{"class":512},[167,142797,130503],{"class":184},[167,142799,53435],{"class":512},[167,142801,133677],{"class":184},[167,142803,131073],{"class":512},[19,142805,141602],{},[26,142807,142808],{"className":128143,"code":133575,"language":128145,"meta":32,"style":32},[34,142809,142810,142814,142828,142832,142846,142850,142864,142868,142882,142886],{"__ignoreMap":32},[167,142811,142812],{"class":169,"line":170},[167,142813,133582],{"class":2268},[167,142815,142816,142818,142820,142822,142824,142826],{"class":169,"line":191},[167,142817,133587],{"class":173},[167,142819,81794],{"class":512},[167,142821,130503],{"class":184},[167,142823,53435],{"class":512},[167,142825,133596],{"class":184},[167,142827,131073],{"class":512},[167,142829,142830],{"class":169,"line":205},[167,142831,133603],{"class":2268},[167,142833,142834,142836,142838,142840,142842,142844],{"class":169,"line":219},[167,142835,133608],{"class":173},[167,142837,81794],{"class":512},[167,142839,130503],{"class":184},[167,142841,53435],{"class":512},[167,142843,56754],{"class":184},[167,142845,131073],{"class":512},[167,142847,142848],{"class":169,"line":230},[167,142849,133623],{"class":2268},[167,142851,142852,142854,142856,142858,142860,142862],{"class":169,"line":241},[167,142853,133628],{"class":173},[167,142855,81794],{"class":512},[167,142857,130503],{"class":184},[167,142859,53435],{"class":512},[167,142861,56821],{"class":184},[167,142863,131073],{"class":512},[167,142865,142866],{"class":169,"line":261},[167,142867,133643],{"class":2268},[167,142869,142870,142872,142874,142876,142878,142880],{"class":169,"line":773},[167,142871,133648],{"class":173},[167,142873,81794],{"class":512},[167,142875,130503],{"class":184},[167,142877,53435],{"class":512},[167,142879,88219],{"class":184},[167,142881,131073],{"class":512},[167,142883,142884],{"class":169,"line":779},[167,142885,133663],{"class":2268},[167,142887,142888,142890,142892,142894,142896,142898],{"class":169,"line":785},[167,142889,133668],{"class":173},[167,142891,81794],{"class":512},[167,142893,130503],{"class":184},[167,142895,53435],{"class":512},[167,142897,133677],{"class":184},[167,142899,131073],{"class":512},[3205,142901,142902,142913],{},[43,142903,142904,142905,142908,142909,429,142911],{},"1 号盒子左侧浮动 ",[34,142906,142907],{},"sk_list"," 里面包含 ",[34,142910,3205],{},[34,142912,43],{},[43,142914,142915,142916,142908,142919,429,142921],{},"2 号盒子左侧浮动 ",[34,142917,142918],{},"sk_con",[34,142920,3205],{},[34,142922,43],{},[19,142924,141513],{},[26,142926,142927],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,142928,142929,142935,142945],{"__ignoreMap":32},[167,142930,142931,142933],{"class":169,"line":170},[167,142932,131991],{"class":173},[167,142934,17598],{"class":512},[167,142936,142937,142939,142941,142943],{"class":169,"line":191},[167,142938,132623],{"class":184},[167,142940,53435],{"class":512},[167,142942,79],{"class":184},[167,142944,3359],{"class":512},[167,142946,142947],{"class":169,"line":205},[167,142948,3630],{"class":512},[19,142950,141602],{},[26,142952,142953],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,142954,142955,142961,142971],{"__ignoreMap":32},[167,142956,142957,142959],{"class":169,"line":170},[167,142958,131991],{"class":173},[167,142960,17598],{"class":512},[167,142962,142963,142965,142967,142969],{"class":169,"line":191},[167,142964,132623],{"class":184},[167,142966,53435],{"class":512},[167,142968,79],{"class":184},[167,142970,3359],{"class":512},[167,142972,142973],{"class":169,"line":205},[167,142974,3630],{"class":512},[494,142976,142978,142979],{"id":142977},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[34,142980,142981],{},"sk_container",[3528,142983],{"style":127999,"src":142984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3205,142986,142987,142992],{},[43,142988,142167,142989,142991],{},[34,142990,142981],{}," 给宽度 1200，不要给高度",[43,142993,142994],{},"一定不要忘记清除浮动",[19,142996,141513],{},[26,142998,142999],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,143000,143001,143007,143017],{"__ignoreMap":32},[167,143002,143003,143005],{"class":169,"line":170},[167,143004,131991],{"class":173},[167,143006,17598],{"class":512},[167,143008,143009,143011,143013,143015],{"class":169,"line":191},[167,143010,132623],{"class":184},[167,143012,53435],{"class":512},[167,143014,79],{"class":184},[167,143016,3359],{"class":512},[167,143018,143019],{"class":169,"line":205},[167,143020,3630],{"class":512},[40,143022,143023],{},[43,143024,143025],{},"sk_hd制作",[3205,143027,143028],{},[43,143029,142247,143030,143033],{},[34,143031,143032],{},"sk_hd"," ，插入图片即可",[19,143035,141513],{},[26,143037,143038],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,143039,143040],{"__ignoreMap":32},[167,143041,143042,143044,143046,143048,143050,143052,143054,143056,143058,143060,143062,143064],{"class":169,"line":170},[167,143043,513],{"class":512},[167,143045,3528],{"class":516},[167,143047,57228],{"class":173},[167,143049,523],{"class":512},[167,143051,135660],{"class":177},[167,143053,57236],{"class":173},[167,143055,523],{"class":512},[167,143057,135667],{"class":177},[167,143059,135670],{"class":173},[167,143061,523],{"class":512},[167,143063,135675],{"class":177},[167,143065,537],{"class":512},[40,143067,143068],{"start":191},[43,143069,143070],{},"sk_bd制作",[3205,143072,143073],{},[43,143074,143075,143076,143079,143080,429,143082,143084],{},"3 号盒子 ",[34,143077,143078],{},"sk_bd"," ，里面包含很多的 ",[34,143081,3205],{},[34,143083,43],{},[3205,143085,143086,143095],{},[43,143087,143088,143089,143091,143092,143094],{},"当鼠标移入到 ",[34,143090,43],{}," 上面的时候显示红色的边框，在这里先给 ",[34,143093,43],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[43,143096,143097,143098,143100,143101,143103,143104,143107,143108,143110],{},"由于给每个 ",[34,143099,43],{}," 都设置了外边距，导致一行的最后一个 ",[34,143102,43],{}," 掉了下来，在这里我们利用 ",[34,143105,143106],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[34,143109,43],{},"，去掉外边距就好了",[19,143112,141513],{},[26,143114,143115],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,143116,143117,143123,143135],{"__ignoreMap":32},[167,143118,143119,143121],{"class":169,"line":170},[167,143120,53609],{"class":516},[167,143122,17598],{"class":512},[167,143124,143125,143127,143129,143131,143133],{"class":169,"line":191},[167,143126,72458],{"class":184},[167,143128,53435],{"class":512},[167,143130,1154],{"class":184},[167,143132,53554],{"class":184},[167,143134,3359],{"class":512},[167,143136,143137],{"class":169,"line":205},[167,143138,3630],{"class":512},[19,143140,141602],{},[26,143142,143143],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,143144,143145,143151,143163],{"__ignoreMap":32},[167,143146,143147,143149],{"class":169,"line":170},[167,143148,53609],{"class":516},[167,143150,17598],{"class":512},[167,143152,143153,143155,143157,143159,143161],{"class":169,"line":191},[167,143154,72458],{"class":184},[167,143156,53435],{"class":512},[167,143158,1154],{"class":184},[167,143160,53554],{"class":184},[167,143162,3359],{"class":512},[167,143164,143165],{"class":169,"line":205},[167,143166,3630],{"class":512},[14,143168,143170],{"id":143169},"_163-注册页面制作","16.3 注册页面制作",[3528,143172],{"style":127999,"src":143173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143175,143176,143178],{},[2354,143177,11053],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3528,143180],{"style":127999,"src":143181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[494,143183,143185],{"id":143184},"_1631-准备工作","16.3.1 准备工作",[3205,143187,143188,143191],{},[43,143189,143190],{},"创建register.html，引入 base.css，引入favicon图标",[43,143192,143193],{},"创建register.css ，在html页面进行引入",[494,143195,143197,143198,143200],{"id":143196},"_1632-header-头部实现","16.3.2 ",[34,143199,133148],{}," 头部实现",[3205,143202,143203,143206],{},[43,143204,143205],{},"整个内容用 版心 进行包裹",[43,143207,143208],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143210,141513],{},[26,143212,143213],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,143214,143215],{"__ignoreMap":32},[167,143216,143217,143219,143221,143223,143225,143227,143229,143231,143233,143235,143237,143239],{"class":169,"line":170},[167,143218,513],{"class":512},[167,143220,3528],{"class":516},[167,143222,57228],{"class":173},[167,143224,523],{"class":512},[167,143226,135660],{"class":177},[167,143228,57236],{"class":173},[167,143230,523],{"class":512},[167,143232,135667],{"class":177},[167,143234,135670],{"class":173},[167,143236,523],{"class":512},[167,143238,135675],{"class":177},[167,143240,537],{"class":512},[19,143242,141602],{},[26,143244,143245],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,143246,143247],{"__ignoreMap":32},[167,143248,143249,143251,143253,143255,143257,143259,143261,143263,143265,143267,143269,143271],{"class":169,"line":170},[167,143250,513],{"class":512},[167,143252,3528],{"class":516},[167,143254,57228],{"class":173},[167,143256,523],{"class":512},[167,143258,135660],{"class":177},[167,143260,57236],{"class":173},[167,143262,523],{"class":512},[167,143264,135667],{"class":177},[167,143266,135670],{"class":173},[167,143268,523],{"class":512},[167,143270,135675],{"class":177},[167,143272,537],{"class":512},[494,143274,143276,143277,143280],{"id":143275},"_1633-registerarea-主体模块实现","16.3.3 ",[34,143278,143279],{},"registerarea"," 主体模块实现",[3528,143282],{"style":127999,"src":143283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143285,143286],{},"整个大盒子 高度为 522px，设置4个边框",[19,143288,141513],{},[26,143290,143291],{"className":128143,"code":132300,"language":128145,"meta":32,"style":32},[34,143292,143293,143299,143315],{"__ignoreMap":32},[167,143294,143295,143297],{"class":169,"line":170},[167,143296,53609],{"class":516},[167,143298,17598],{"class":512},[167,143300,143301,143303,143305,143307,143309,143311,143313],{"class":169,"line":191},[167,143302,72884],{"class":184},[167,143304,53435],{"class":512},[167,143306,2418],{"class":184},[167,143308,53490],{"class":731},[167,143310,53519],{"class":184},[167,143312,131535],{"class":184},[167,143314,3359],{"class":512},[167,143316,143317],{"class":169,"line":205},[167,143318,3630],{"class":512},[19,143320,141602],{},[26,143322,143323],{"className":128143,"code":132300,"language":128145,"meta":32,"style":32},[34,143324,143325,143331,143347],{"__ignoreMap":32},[167,143326,143327,143329],{"class":169,"line":170},[167,143328,53609],{"class":516},[167,143330,17598],{"class":512},[167,143332,143333,143335,143337,143339,143341,143343,143345],{"class":169,"line":191},[167,143334,72884],{"class":184},[167,143336,53435],{"class":512},[167,143338,2418],{"class":184},[167,143340,53490],{"class":731},[167,143342,53519],{"class":184},[167,143344,131535],{"class":184},[167,143346,3359],{"class":512},[167,143348,143349],{"class":169,"line":205},[167,143350,3630],{"class":512},[19,143352,143353],{},"1号盒子 是一个 h3 标签，放标题",[3205,143355,143356],{},[43,143357,143358],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143360,141513],{},[26,143362,143363],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,143364,143365,143371,143381],{"__ignoreMap":32},[167,143366,143367,143369],{"class":169,"line":170},[167,143368,131991],{"class":173},[167,143370,17598],{"class":512},[167,143372,143373,143375,143377,143379],{"class":169,"line":191},[167,143374,132623],{"class":184},[167,143376,53435],{"class":512},[167,143378,79],{"class":184},[167,143380,3359],{"class":512},[167,143382,143383],{"class":169,"line":205},[167,143384,3630],{"class":512},[19,143386,141602],{},[26,143388,143389],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,143390,143391,143397,143407],{"__ignoreMap":32},[167,143392,143393,143395],{"class":169,"line":170},[167,143394,131991],{"class":173},[167,143396,17598],{"class":512},[167,143398,143399,143401,143403,143405],{"class":169,"line":191},[167,143400,132623],{"class":184},[167,143402,53435],{"class":512},[167,143404,79],{"class":184},[167,143406,3359],{"class":512},[167,143408,143409],{"class":169,"line":205},[167,143410,3630],{"class":512},[19,143412,143413],{},"2号盒子 里面放注册的内容",[3205,143415,143416,143419,143428,143442,143455,143458,143461,143479,143493],{},[43,143417,143418],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[43,143420,143421,143422,143424,143425,143427],{},"里面的内容利用 ",[34,143423,3205],{}," 包含 ",[34,143426,43],{}," 来实现的（不需要用表格）",[43,143429,140657,143430,143432,143433,143435,143436,143438,143439,143441],{},[34,143431,43],{}," 里面，左侧放 ",[34,143434,35610],{}," 标签， 中间放",[34,143437,55812],{}," 标签， 右侧放 ",[34,143440,167],{}," 提示信息",[43,143443,143444,143445,143447,143448,143450,143451,143454],{},"左侧 ",[34,143446,35610],{},"里面的文字都是右对齐，我们可以给",[34,143449,35610],{},"设置一个宽度（88px），然后利用",[34,143452,143453],{},"text-align"," 来设置右对齐",[43,143456,143457],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[43,143459,143460],{},"右侧 span修饰一下文字颜色",[43,143462,143463,143464],{},"提示信息的样式优化",[3205,143465,143466,143469,143472],{},[43,143467,143468],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[43,143470,143471],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[43,143473,143474,143475,143478],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[34,143476,143477],{},"vertical-algin"," 来设置 图片与文字对齐方式",[43,143480,143481,143482],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3205,143483,143484,143490],{},[43,143485,143486,143487,143489],{},"设置 ",[34,143488,25580],{}," 的 左右 12px 的内边距，设置一下文字颜色",[43,143491,143492],{},"分别设置 背景颜色",[43,143494,143495,143496,143498],{},"同意协议 和 完成注册 都是用 ",[34,143497,43],{}," 进行包裹",[19,143500,141513],{},[26,143502,143503],{"className":128143,"code":142086,"language":128145,"meta":32,"style":32},[34,143504,143505,143511,143521],{"__ignoreMap":32},[167,143506,143507,143509],{"class":169,"line":170},[167,143508,53609],{"class":516},[167,143510,17598],{"class":512},[167,143512,143513,143515,143517,143519],{"class":169,"line":191},[167,143514,72866],{"class":184},[167,143516,53435],{"class":512},[167,143518,142103],{"class":184},[167,143520,3359],{"class":512},[167,143522,143523],{"class":169,"line":205},[167,143524,3630],{"class":512},[19,143526,141602],{},[26,143528,143529],{"className":128143,"code":142086,"language":128145,"meta":32,"style":32},[34,143530,143531,143537,143547],{"__ignoreMap":32},[167,143532,143533,143535],{"class":169,"line":170},[167,143534,53609],{"class":516},[167,143536,17598],{"class":512},[167,143538,143539,143541,143543,143545],{"class":169,"line":191},[167,143540,72866],{"class":184},[167,143542,53435],{"class":512},[167,143544,142103],{"class":184},[167,143546,3359],{"class":512},[167,143548,143549],{"class":169,"line":205},[167,143550,3630],{"class":512},[494,143552,143554],{"id":143553},"_1634-底部实现","16.3.4 底部实现",[19,143556,141513],{},[26,143558,143559],{"className":128143,"code":142086,"language":128145,"meta":32,"style":32},[34,143560,143561,143567,143577],{"__ignoreMap":32},[167,143562,143563,143565],{"class":169,"line":170},[167,143564,53609],{"class":516},[167,143566,17598],{"class":512},[167,143568,143569,143571,143573,143575],{"class":169,"line":191},[167,143570,72866],{"class":184},[167,143572,53435],{"class":512},[167,143574,142103],{"class":184},[167,143576,3359],{"class":512},[167,143578,143579],{"class":169,"line":205},[167,143580,3630],{"class":512},[19,143582,141602],{},[26,143584,143585],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,143586,143587,143591,143605,143609],{"__ignoreMap":32},[167,143588,143589],{"class":169,"line":170},[167,143590,132254],{"class":2268},[167,143592,143593,143595,143597,143599,143601,143603],{"class":169,"line":191},[167,143594,513],{"class":512},[167,143596,53609],{"class":516},[167,143598,55479],{"class":173},[167,143600,523],{"class":512},[167,143602,132267],{"class":177},[167,143604,537],{"class":512},[167,143606,143607],{"class":169,"line":205},[167,143608,132274],{"class":512},[167,143610,143611,143613,143615],{"class":169,"line":219},[167,143612,575],{"class":512},[167,143614,53609],{"class":516},[167,143616,537],{"class":512},[14,143618,143620],{"id":143619},"_164-项目总结","16.4 项目总结",[40,143622,143623,143626,143629,143632],{},[43,143624,143625],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[43,143627,143628],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[43,143630,143631],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[43,143633,143634],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3528,143636],{"style":127999,"src":143637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[40,143639,143640],{"start":230},[43,143641,143642],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3528,143644],{"style":127999,"src":143645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[40,143647,143648],{"start":241},[43,143649,143650],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3528,143652],{"style":127999,"src":143653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,143655,143656],{"className":128890,"code":138300,"language":128892,"meta":32,"style":32},[34,143657,143658],{"__ignoreMap":32},[167,143659,143660,143662,143664,143666,143668,143670,143672,143674,143676,143678,143680,143682],{"class":169,"line":170},[167,143661,513],{"class":512},[167,143663,55812],{"class":516},[167,143665,555],{"class":173},[167,143667,523],{"class":512},[167,143669,64688],{"class":177},[167,143671,520],{"class":173},[167,143673,523],{"class":512},[167,143675,138321],{"class":177},[167,143677,63009],{"class":173},[167,143679,523],{"class":512},[167,143681,138328],{"class":177},[167,143683,537],{"class":512},[40,143685,143686,143689],{"start":261},[43,143687,143688],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[43,143690,143691],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2113,143693,143694],{},"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":32,"searchDepth":191,"depth":191,"links":143696},[143697,143702,143709,143717],{"id":141323,"depth":191,"text":141324,"children":143698},[143699,143700,143701],{"id":141327,"depth":205,"text":141328},{"id":142058,"depth":205,"text":142059},{"id":142371,"depth":205,"text":142372},{"id":142671,"depth":191,"text":142672,"children":143703},[143704,143705,143707],{"id":142675,"depth":205,"text":142676},{"id":142693,"depth":205,"text":143706},"16.2.2 列表页 header 和 nav 修改",{"id":142977,"depth":205,"text":143708},"16.2.3 列表页主体 sk_container",{"id":143169,"depth":191,"text":143170,"children":143710},[143711,143712,143714,143716],{"id":143184,"depth":205,"text":143185},{"id":143196,"depth":205,"text":143713},"16.3.2 header 头部实现",{"id":143275,"depth":205,"text":143715},"16.3.3 registerarea 主体模块实现",{"id":143553,"depth":205,"text":143554},{"id":143619,"depth":191,"text":143620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141315,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143724,"title":143725,"body":143726,"description":25403,"extension":2140,"meta":143834,"navigation":740,"path":143835,"seo":143836,"stem":143837,"__hash__":143838},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143727,"toc":143829},[143728,143731,143735,143738,143741,143750,143759,143763,143768,143775,143793,143796,143799,143802,143805,143808,143811,143814,143817,143820,143823,143826],[10,143729,143725],{"id":143730},"_17-web服务器与网站发布",[14,143732,143734],{"id":143733},"_171-web服务器","17.1 Web服务器",[19,143736,143737],{},"把自己网站上传到服务器上，可以让其他人访问",[3528,143739],{"style":127999,"src":143740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143742,143743,143746,143747],{},[2354,143744,143745],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2354,143748,143749],{},"Web 服务器等",[19,143751,143752,143753,429,143756,27760],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2354,143754,143755],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2354,143757,143758],{},"远程服务器",[494,143760,143762],{"id":143761},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143764,143765],{},[2354,143766,143767],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143769,143770,143771],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2439,143772,143773],{"href":143773,"rel":143774},"http:\u002F\u002Ffree.3v.do\u002F",[25887],[3205,143776,143777,143780,143783,143790],{},[43,143778,143779],{},"去免费空间网站注册账号。",[43,143781,143782],{},"记录下主机名、用户名、密码、域名。",[43,143784,143785,143786,143789],{},"利用 ",[34,143787,143788],{},"utftp"," 软件 上传网站到远程服务器",[43,143791,143792],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143794,143795],{},"使用软件上传，对上传软件文件进行解压",[3528,143797],{"style":127999,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3528,143800],{"style":127999,"src":143801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143803,143804],{},"输入刚刚申请的服务器账号信息：",[3528,143806],{"style":127999,"src":143807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3528,143809],{"style":127999,"src":143810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3528,143812],{"style":127999,"src":143813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3528,143815],{"style":127999,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143818,143819],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3528,143821],{"style":127999,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143824,143825],{},"浏览器输入域名即可访问",[19,143827,143828],{},"首页一定必须是index",{"title":32,"searchDepth":191,"depth":191,"links":143830},[143831],{"id":143733,"depth":191,"text":143734,"children":143832},[143833],{"id":143761,"depth":205,"text":143762},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143725,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143840,"title":143841,"body":143842,"description":25403,"extension":2140,"meta":144769,"navigation":740,"path":144770,"seo":144771,"stem":144772,"__hash__":144773},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143843,"toc":144752},[143844,143847,143851,143854,143857,143868,143871,143875,143879,143884,143887,143890,143893,143896,143900,143926,143930,143934,143937,143940,143944,143977,143981,143984,143987,144051,144055,144059,144062,144065,144068,144072,144117,144121,144124,144154,144158,144162,144165,144168,144172,144175,144244,144247,144355,144357,144363,144367,144370,144373,144469,144472,144476,144500,144504,144507,144511,144514,144518,144521,144524,144527,144530,144534,144537,144540,144544,144548,144551,144554,144557,144560,144564,144567,144571,144574,144577,144622,144626,144630,144633,144636,144639,144671,144675,144678,144712,144716,144719,144749],[10,143845,143841],{"id":143846},"_18-2d动画与3d转换",[14,143848,143850],{"id":143849},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143852,143853],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143855,143856],{},"转换（transform）你可以简单理解为变形",[3205,143858,143859,143862,143865],{},[43,143860,143861],{},"移动：translate",[43,143863,143864],{},"旋转：rotate",[43,143866,143867],{},"缩放：scale",[3528,143869],{"style":127999,"src":143870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[494,143872,143874],{"id":143873},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24024,143876,143878],{"id":143877},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143880,143881,143882],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2354,143883,134802],{},[3528,143885],{"style":127999,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143888,143889],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143891,143892],{},"对于行内元素无效",[19,143894,143895],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24024,143897,143899],{"id":143898},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,143901,143902],{"className":128143,"code":140332,"language":128145,"meta":32,"style":32},[34,143903,143904,143910,143922],{"__ignoreMap":32},[167,143905,143906,143908],{"class":169,"line":170},[167,143907,53609],{"class":516},[167,143909,17598],{"class":512},[167,143911,143912,143914,143916,143918,143920],{"class":169,"line":191},[167,143913,72458],{"class":184},[167,143915,53435],{"class":512},[167,143917,1154],{"class":184},[167,143919,53554],{"class":184},[167,143921,3359],{"class":512},[167,143923,143924],{"class":169,"line":205},[167,143925,3630],{"class":512},[494,143927,143929],{"id":143928},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24024,143931,143933],{"id":143932},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143935,143936],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3528,143938],{"style":127999,"src":143939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24024,143941,143943],{"id":143942},"_18122-旋转效果","18.1.2.2 旋转效果",[26,143945,143947],{"className":128143,"code":143946,"language":128145,"meta":32,"style":32},"div {\n  transform: rotate(45deg);\n}\n",[34,143948,143949,143955,143973],{"__ignoreMap":32},[167,143950,143951,143953],{"class":169,"line":170},[167,143952,53609],{"class":516},[167,143954,17598],{"class":512},[167,143956,143957,143959,143961,143964,143966,143968,143971],{"class":169,"line":191},[167,143958,138127],{"class":184},[167,143960,53435],{"class":512},[167,143962,143963],{"class":184},"rotate",[167,143965,898],{"class":512},[167,143967,2729],{"class":184},[167,143969,143970],{"class":731},"deg",[167,143972,4755],{"class":512},[167,143974,143975],{"class":169,"line":205},[167,143976,3630],{"class":512},[24024,143978,143980],{"id":143979},"_18123-三角做法","18.1.2.3 三角做法",[19,143982,143983],{},"该下标当经过最外层大盒子时会实现向上反转",[3528,143985],{"style":127999,"src":143986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,143988,143989],{"className":128143,"code":136663,"language":128145,"meta":32,"style":32},[34,143990,143991,143995,144001,144011,144021,144037,144047],{"__ignoreMap":32},[167,143992,143993],{"class":169,"line":170},[167,143994,136670],{"class":2268},[167,143996,143997,143999],{"class":169,"line":191},[167,143998,136675],{"class":173},[167,144000,17598],{"class":512},[167,144002,144003,144005,144007,144009],{"class":169,"line":205},[167,144004,72556],{"class":184},[167,144006,53435],{"class":512},[167,144008,1154],{"class":184},[167,144010,3359],{"class":512},[167,144012,144013,144015,144017,144019],{"class":169,"line":219},[167,144014,72776],{"class":184},[167,144016,53435],{"class":512},[167,144018,1154],{"class":184},[167,144020,3359],{"class":512},[167,144022,144023,144025,144027,144029,144031,144033,144035],{"class":169,"line":230},[167,144024,72884],{"class":184},[167,144026,53435],{"class":512},[167,144028,2646],{"class":184},[167,144030,53490],{"class":731},[167,144032,53519],{"class":184},[167,144034,65980],{"class":184},[167,144036,3359],{"class":512},[167,144038,144039,144041,144043,144045],{"class":169,"line":241},[167,144040,136718],{"class":184},[167,144042,53435],{"class":512},[167,144044,64358],{"class":184},[167,144046,3359],{"class":512},[167,144048,144049],{"class":169,"line":261},[167,144050,3630],{"class":512},[494,144052,144054],{"id":144053},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24024,144056,144058],{"id":144057},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144060,144061],{},"设置中心点",[3528,144063],{"style":127999,"src":144064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144066,144067],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24024,144069,144071],{"id":144070},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,144073,144075],{"className":128143,"code":144074,"language":128145,"meta":32,"style":32},"\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",[34,144076,144077,144082,144088,144103,144108,144113],{"__ignoreMap":32},[167,144078,144079],{"class":169,"line":170},[167,144080,144081],{"class":2268},"\u002F* 转换中心点 *\u002F\n",[167,144083,144084,144086],{"class":169,"line":191},[167,144085,53609],{"class":516},[167,144087,17598],{"class":512},[167,144089,144090,144093,144095,144097,144099,144101],{"class":169,"line":205},[167,144091,144092],{"class":184},"  transform-origin",[167,144094,53435],{"class":512},[167,144096,53590],{"class":184},[167,144098,19170],{"class":184},[167,144100,132006],{"class":512},[167,144102,136816],{"class":2268},[167,144104,144105],{"class":169,"line":219},[167,144106,144107],{"class":2268},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[167,144109,144110],{"class":169,"line":230},[167,144111,144112],{"class":2268},"  \u002F* transform-origin: left top; *\u002F\n",[167,144114,144115],{"class":169,"line":241},[167,144116,3630],{"class":512},[24024,144118,144120],{"id":144119},"_18133-旋转案例","18.1.3.3 旋转案例",[3528,144122],{"style":127999,"src":144123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,144125,144126],{"className":128143,"code":143946,"language":128145,"meta":32,"style":32},[34,144127,144128,144134,144150],{"__ignoreMap":32},[167,144129,144130,144132],{"class":169,"line":170},[167,144131,53609],{"class":516},[167,144133,17598],{"class":512},[167,144135,144136,144138,144140,144142,144144,144146,144148],{"class":169,"line":191},[167,144137,138127],{"class":184},[167,144139,53435],{"class":512},[167,144141,143963],{"class":184},[167,144143,898],{"class":512},[167,144145,2729],{"class":184},[167,144147,143970],{"class":731},[167,144149,4755],{"class":512},[167,144151,144152],{"class":169,"line":205},[167,144153,3630],{"class":512},[494,144155,144157],{"id":144156},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24024,144159,144161],{"id":144160},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144163,144164],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3528,144166],{"style":127999,"src":144167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24024,144169,144171],{"id":144170},"_18142-分页按钮","18.1.4.2 分页按钮",[3528,144173],{"style":127999,"src":144174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,144176,144178],{"className":128143,"code":144177,"language":128145,"meta":32,"style":32},"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",[34,144179,144180,144186,144202,144206,144210,144215,144221,144235,144240],{"__ignoreMap":32},[167,144181,144182,144184],{"class":169,"line":170},[167,144183,53609],{"class":516},[167,144185,17598],{"class":512},[167,144187,144188,144190,144192,144195,144197,144200],{"class":169,"line":191},[167,144189,138127],{"class":184},[167,144191,53435],{"class":512},[167,144193,144194],{"class":184},"scale",[167,144196,898],{"class":512},[167,144198,144199],{"class":184},"1.2",[167,144201,4755],{"class":512},[167,144203,144204],{"class":169,"line":205},[167,144205,3630],{"class":512},[167,144207,144208],{"class":169,"line":219},[167,144209,137604],{"class":512},[167,144211,144212],{"class":169,"line":230},[167,144213,144214],{"class":2268},"\u002F* 2D 缩放 *\u002F\n",[167,144216,144217,144219],{"class":169,"line":241},[167,144218,53609],{"class":516},[167,144220,17598],{"class":512},[167,144222,144223,144225,144227,144229,144231,144233],{"class":169,"line":261},[167,144224,138127],{"class":184},[167,144226,53435],{"class":512},[167,144228,144194],{"class":184},[167,144230,898],{"class":512},[167,144232,144199],{"class":184},[167,144234,4755],{"class":512},[167,144236,144237],{"class":169,"line":773},[167,144238,144239],{"class":2268},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[167,144241,144242],{"class":169,"line":779},[167,144243,3630],{"class":512},[19,144245,144246],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,144248,144250],{"className":128143,"code":144249,"language":128145,"meta":32,"style":32},"\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",[34,144251,144252,144257,144267,144288,144309,144313,144318,144324,144351],{"__ignoreMap":32},[167,144253,144254],{"class":169,"line":170},[167,144255,144256],{"class":2268},"\u002F* 定义动画 *\u002F\n",[167,144258,144259,144262,144265],{"class":169,"line":191},[167,144260,144261],{"class":731},"@keyframes",[167,144263,144264],{"class":7246}," move",[167,144266,17598],{"class":512},[167,144268,144269,144272,144274,144276,144278,144281,144283,144285],{"class":169,"line":205},[167,144270,144271],{"class":173},"  0%",[167,144273,81794],{"class":512},[167,144275,50134],{"class":184},[167,144277,53435],{"class":512},[167,144279,144280],{"class":184},"translateX",[167,144282,898],{"class":512},[167,144284,1154],{"class":184},[167,144286,144287],{"class":512},"); }\n",[167,144289,144290,144293,144295,144297,144299,144301,144303,144305,144307],{"class":169,"line":219},[167,144291,144292],{"class":173},"  100%",[167,144294,81794],{"class":512},[167,144296,50134],{"class":184},[167,144298,53435],{"class":512},[167,144300,144280],{"class":184},[167,144302,898],{"class":512},[167,144304,981],{"class":184},[167,144306,53490],{"class":731},[167,144308,144287],{"class":512},[167,144310,144311],{"class":169,"line":230},[167,144312,3630],{"class":512},[167,144314,144315],{"class":169,"line":241},[167,144316,144317],{"class":2268},"\u002F* 调用动画 *\u002F\n",[167,144319,144320,144322],{"class":169,"line":261},[167,144321,53609],{"class":516},[167,144323,17598],{"class":512},[167,144325,144326,144329,144331,144333,144335,144337,144339,144341,144343,144346,144349],{"class":169,"line":773},[167,144327,144328],{"class":184},"  animation",[167,144330,53435],{"class":512},[167,144332,136829],{"class":184},[167,144334,27138],{"class":184},[167,144336,2895],{"class":731},[167,144338,80668],{"class":184},[167,144340,6125],{"class":184},[167,144342,2895],{"class":731},[167,144344,144345],{"class":184}," infinite",[167,144347,144348],{"class":184}," alternate",[167,144350,3359],{"class":512},[167,144352,144353],{"class":169,"line":779},[167,144354,3630],{"class":512},[19,144356,144246],{},[26,144358,144361],{"className":144359,"code":144360,"language":31},[29],"\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",[34,144362,144360],{"__ignoreMap":32},[24024,144364,144366],{"id":144365},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144368,144369],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3528,144371],{"style":127999,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,144374,144375],{"className":128143,"code":144249,"language":128145,"meta":32,"style":32},[34,144376,144377,144381,144389,144407,144427,144431,144435,144441,144465],{"__ignoreMap":32},[167,144378,144379],{"class":169,"line":170},[167,144380,144256],{"class":2268},[167,144382,144383,144385,144387],{"class":169,"line":191},[167,144384,144261],{"class":731},[167,144386,144264],{"class":7246},[167,144388,17598],{"class":512},[167,144390,144391,144393,144395,144397,144399,144401,144403,144405],{"class":169,"line":205},[167,144392,144271],{"class":173},[167,144394,81794],{"class":512},[167,144396,50134],{"class":184},[167,144398,53435],{"class":512},[167,144400,144280],{"class":184},[167,144402,898],{"class":512},[167,144404,1154],{"class":184},[167,144406,144287],{"class":512},[167,144408,144409,144411,144413,144415,144417,144419,144421,144423,144425],{"class":169,"line":219},[167,144410,144292],{"class":173},[167,144412,81794],{"class":512},[167,144414,50134],{"class":184},[167,144416,53435],{"class":512},[167,144418,144280],{"class":184},[167,144420,898],{"class":512},[167,144422,981],{"class":184},[167,144424,53490],{"class":731},[167,144426,144287],{"class":512},[167,144428,144429],{"class":169,"line":230},[167,144430,3630],{"class":512},[167,144432,144433],{"class":169,"line":241},[167,144434,144317],{"class":2268},[167,144436,144437,144439],{"class":169,"line":261},[167,144438,53609],{"class":516},[167,144440,17598],{"class":512},[167,144442,144443,144445,144447,144449,144451,144453,144455,144457,144459,144461,144463],{"class":169,"line":773},[167,144444,144328],{"class":184},[167,144446,53435],{"class":512},[167,144448,136829],{"class":184},[167,144450,27138],{"class":184},[167,144452,2895],{"class":731},[167,144454,80668],{"class":184},[167,144456,6125],{"class":184},[167,144458,2895],{"class":731},[167,144460,144345],{"class":184},[167,144462,144348],{"class":184},[167,144464,3359],{"class":512},[167,144466,144467],{"class":169,"line":779},[167,144468,3630],{"class":512},[19,144470,144471],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[494,144473,144475],{"id":144474},"_1823-知识点回顾","18.2.3 知识点回顾",[26,144477,144478],{"className":128143,"code":130312,"language":128145,"meta":32,"style":32},[34,144479,144480,144486,144496],{"__ignoreMap":32},[167,144481,144482,144484],{"class":169,"line":170},[167,144483,53609],{"class":516},[167,144485,17598],{"class":512},[167,144487,144488,144490,144492,144494],{"class":169,"line":191},[167,144489,130325],{"class":184},[167,144491,53435],{"class":512},[167,144493,63725],{"class":184},[167,144495,3359],{"class":512},[167,144497,144498],{"class":169,"line":205},[167,144499,3630],{"class":512},[14,144501,144503],{"id":144502},"_183-3d-转换","18.3 3D 转换",[19,144505,144506],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[494,144508,144510],{"id":144509},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3528,144512],{"style":127999,"src":144513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[494,144515,144517],{"id":144516},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3528,144519],{"style":127999,"src":144520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144522,144523],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144525,144526],{},"translate3d的效果需要搭配透视perspective来使用",[3528,144528],{"style":127999,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[494,144531,144533],{"id":144532},"_1833-透视-perspective","18.3.3 透视 perspective",[3528,144535],{"style":127999,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144538,144539],{},"透视写在父盒子上，单位为像素",[494,144541,144543],{"id":144542},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24024,144545,144547],{"id":144546},"_18341-分开解释","18.3.4.1 分开解释",[3528,144549],{"style":127999,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3528,144552],{"style":127999,"src":144553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3528,144555],{"style":127999,"src":144556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144558,144559],{},"总结来说就是左手原则",[24024,144561,144563],{"id":144562},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3528,144565],{"style":127999,"src":144566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[494,144568,144570],{"id":144569},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3528,144572],{"style":127999,"src":144573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3528,144575],{"style":127999,"src":144576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,144578,144580],{"className":128143,"code":144579,"language":128145,"meta":32,"style":32},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[34,144581,144582,144588,144601,144618],{"__ignoreMap":32},[167,144583,144584,144586],{"class":169,"line":170},[167,144585,53609],{"class":516},[167,144587,17598],{"class":512},[167,144589,144590,144593,144595,144597,144599],{"class":169,"line":191},[167,144591,144592],{"class":184},"  perspective",[167,144594,53435],{"class":512},[167,144596,67063],{"class":184},[167,144598,53490],{"class":731},[167,144600,3359],{"class":512},[167,144602,144603,144605,144607,144610,144612,144614,144616],{"class":169,"line":205},[167,144604,138127],{"class":184},[167,144606,53435],{"class":512},[167,144608,144609],{"class":184},"rotateX",[167,144611,898],{"class":512},[167,144613,2729],{"class":184},[167,144615,143970],{"class":731},[167,144617,4755],{"class":512},[167,144619,144620],{"class":169,"line":219},[167,144621,3630],{"class":512},[494,144623,144625],{"id":144624},"_1836-案例","18.3.6 案例",[24024,144627,144629],{"id":144628},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3528,144631],{"style":127999,"src":144632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3528,144634],{"style":127999,"src":144635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3528,144637],{"style":127999,"src":144638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,144640,144642],{"className":128143,"code":144641,"language":128145,"meta":32,"style":32},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[34,144643,144644,144649,144655,144667],{"__ignoreMap":32},[167,144645,144646],{"class":169,"line":170},[167,144647,144648],{"class":2268},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[167,144650,144651,144653],{"class":169,"line":191},[167,144652,135140],{"class":173},[167,144654,17598],{"class":512},[167,144656,144657,144659,144661,144663,144665],{"class":169,"line":205},[167,144658,144592],{"class":184},[167,144660,53435],{"class":512},[167,144662,67063],{"class":184},[167,144664,53490],{"class":731},[167,144666,3359],{"class":512},[167,144668,144669],{"class":169,"line":219},[167,144670,3630],{"class":512},[24024,144672,144674],{"id":144673},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3528,144676],{"style":127999,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,144679,144680],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,144681,144682,144686,144700,144704],{"__ignoreMap":32},[167,144683,144684],{"class":169,"line":170},[167,144685,132254],{"class":2268},[167,144687,144688,144690,144692,144694,144696,144698],{"class":169,"line":191},[167,144689,513],{"class":512},[167,144691,53609],{"class":516},[167,144693,55479],{"class":173},[167,144695,523],{"class":512},[167,144697,132267],{"class":177},[167,144699,537],{"class":512},[167,144701,144702],{"class":169,"line":205},[167,144703,132274],{"class":512},[167,144705,144706,144708,144710],{"class":169,"line":219},[167,144707,575],{"class":512},[167,144709,53609],{"class":516},[167,144711,537],{"class":512},[24024,144713,144715],{"id":144714},"_18363-旋转木马","18.3.6.3 旋转木马",[3528,144717],{"style":127999,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,144720,144721],{"className":128143,"code":143946,"language":128145,"meta":32,"style":32},[34,144722,144723,144729,144745],{"__ignoreMap":32},[167,144724,144725,144727],{"class":169,"line":170},[167,144726,53609],{"class":516},[167,144728,17598],{"class":512},[167,144730,144731,144733,144735,144737,144739,144741,144743],{"class":169,"line":191},[167,144732,138127],{"class":184},[167,144734,53435],{"class":512},[167,144736,143963],{"class":184},[167,144738,898],{"class":512},[167,144740,2729],{"class":184},[167,144742,143970],{"class":731},[167,144744,4755],{"class":512},[167,144746,144747],{"class":169,"line":205},[167,144748,3630],{"class":512},[2113,144750,144751],{},"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":32,"searchDepth":191,"depth":191,"links":144753},[144754,144761],{"id":143849,"depth":191,"text":143850,"children":144755},[144756,144757,144758,144759,144760],{"id":143873,"depth":205,"text":143874},{"id":143928,"depth":205,"text":143929},{"id":144053,"depth":205,"text":144054},{"id":144156,"depth":205,"text":144157},{"id":144474,"depth":205,"text":144475},{"id":144502,"depth":191,"text":144503,"children":144762},[144763,144764,144765,144766,144767,144768],{"id":144509,"depth":205,"text":144510},{"id":144516,"depth":205,"text":144517},{"id":144532,"depth":205,"text":144533},{"id":144542,"depth":205,"text":144543},{"id":144569,"depth":205,"text":144570},{"id":144624,"depth":205,"text":144625},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143841,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144775,"title":144776,"body":144777,"description":25403,"extension":2140,"meta":144980,"navigation":740,"path":144981,"seo":144982,"stem":144983,"__hash__":144984},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144778,"toc":144969},[144779,144782,144786,144789,144792,144796,144799,144802,144805,144809,144812,144816,144819,144823,144826,144830,144844,144848,144873,144876,144879,144896,144900,144904,144907,144910,144914,144917,144920,144938,144942,144945,144959,144963,144966],[10,144780,144776],{"id":144781},"_19-移动端基础-前缀现状与视口",[14,144783,144785],{"id":144784},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3528,144787],{"style":127999,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144790,144791],{},"意思就是加个前缀，增加兼容性",[14,144793,144795],{"id":144794},"_192-移动端现状认识","19.2 移动端现状认识",[3528,144797],{"style":127999,"src":144798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144800,144801],{},"调试方法：",[3528,144803],{"style":127999,"src":144804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144806,144808],{"id":144807},"_193-视口","19.3 视口",[19,144810,144811],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[494,144813,144815],{"id":144814},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3528,144817],{"style":127999,"src":144818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[494,144820,144822],{"id":144821},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3528,144824],{"style":127999,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[494,144827,144829],{"id":144828},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3205,144831,144832,144835,144838,144841],{},[43,144833,144834],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[43,144836,144837],{},"理想视口，对设备来讲，是最理想的视口尺寸",[43,144839,144840],{},"需要手动添写meta视口标签通知浏览器操作",[43,144842,144843],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[494,144845,144847],{"id":144846},"_1934-meta视口标签","19.3.4 meta视口标签",[26,144849,144851],{"className":128890,"code":144850,"language":128892,"meta":32,"style":32},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[34,144852,144853],{"__ignoreMap":32},[167,144854,144855,144857,144859,144861,144863,144865,144867,144869,144871],{"class":169,"line":170},[167,144856,513],{"class":512},[167,144858,53342],{"class":516},[167,144860,520],{"class":173},[167,144862,523],{"class":512},[167,144864,53389],{"class":177},[167,144866,53369],{"class":173},[167,144868,523],{"class":512},[167,144870,53396],{"class":177},[167,144872,537],{"class":512},[3528,144874],{"style":127999,"src":144875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144877,144878],{},"标准视口设置：",[40,144880,144881,144884,144887,144890,144893],{},[43,144882,144883],{},"视口宽度和设备保持一致",[43,144885,144886],{},"视口的默认缩放比例1.0",[43,144888,144889],{},"不允许用户自行缩放",[43,144891,144892],{},"最大允许的缩放比例1.0",[43,144894,144895],{},"最小允许的缩放比例1.0",[494,144897,144899],{"id":144898},"_1935-二倍图","19.3.5 二倍图",[24024,144901,144903],{"id":144902},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3528,144905],{"style":127999,"src":144906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3528,144908],{"style":127999,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24024,144911,144913],{"id":144912},"_19352-多倍图","19.3.5.2 多倍图",[3528,144915],{"style":127999,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144918,144919],{},"二倍图法，代码如下：",[26,144921,144923],{"className":128143,"code":144922,"language":128145,"meta":32,"style":32},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[34,144924,144925,144930],{"__ignoreMap":32},[167,144926,144927],{"class":169,"line":170},[167,144928,144929],{"class":2268},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[167,144931,144932,144935],{"class":169,"line":191},[167,144933,144934],{"class":516},"background-size",[167,144936,144937],{"class":512},": 50% 50%;\n",[24024,144939,144941],{"id":144940},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3528,144943],{"style":127999,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[40,144946,144947,144950,144953,144956],{},[43,144948,144949],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[43,144951,144952],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[43,144954,144955],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[43,144957,144958],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24024,144960,144962],{"id":144961},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3528,144964],{"style":127999,"src":144965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2113,144967,144968],{},"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":32,"searchDepth":191,"depth":191,"links":144970},[144971,144972,144973],{"id":144784,"depth":191,"text":144785},{"id":144794,"depth":191,"text":144795},{"id":144807,"depth":191,"text":144808,"children":144974},[144975,144976,144977,144978,144979],{"id":144814,"depth":205,"text":144815},{"id":144821,"depth":205,"text":144822},{"id":144828,"depth":205,"text":144829},{"id":144846,"depth":205,"text":144847},{"id":144898,"depth":205,"text":144899},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144776,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144986,"title":144987,"body":144988,"description":25403,"extension":2140,"meta":145865,"navigation":740,"path":145866,"seo":145867,"stem":145868,"__hash__":145869},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144989,"toc":145849},[144990,144993,144997,145004,145007,145014,145017,145022,145025,145029,145033,145040,145043,145046,145050,145053,145056,145059,145062,145065,145069,145072,145076,145078,145081,145084,145087,145090,145092,145095,145097,145127,145129,145159,145163,145166,145170,145173,145190,145193,145196,145272,145274,145277,145280,145283,145286,145288,145291,145294,145298,145320,145323,145326,145330,145333,145339,145342,145346,145349,145352,145356,145359,145362,145365,145369,145372,145375,145378,145381,145385,145388,145392,145399,145402,145405,145408,145411,145421,145424,145427,145434,145437,145441,145444,145447,145451,145454,145457,145460,145505,145508,145511,145514,145516,145645,145647,145685,145688,145691,145693,145811,145813,145847],[10,144991,144987],{"id":144992},"_20-移动端布局实战上篇",[14,144994,144996],{"id":144995},"_201-移动端主流方案","20.1 移动端主流方案",[40,144998,144999],{},[43,145000,145001],{},[2354,145002,145003],{},"单独移动端页面（主流）",[3528,145005],{"style":127999,"src":145006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[40,145008,145009],{"start":191},[43,145010,145011],{},[2354,145012,145013],{},"响应式兼容PC移动端",[3528,145015],{"style":127999,"src":145016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[40,145018,145019],{"start":205},[43,145020,145021],{},"两种页面选型布局方式",[3528,145023],{"style":127999,"src":145024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145026,145028],{"id":145027},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[494,145030,145032],{"id":145031},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145034,145035,145036],{},"官网地址： ",[2439,145037,145038],{"href":145038,"rel":145039},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25887],[3528,145041],{"style":127999,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3528,145044],{"style":127999,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[494,145047,145049],{"id":145048},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3528,145051],{"style":127999,"src":145052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3528,145054],{"style":127999,"src":145055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145057,145058],{},"去除高亮：",[19,145060,145061],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145063,145064],{},"-webkit- tap-highlight-color: transparent;",[14,145066,145068],{"id":145067},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3528,145070],{"style":127999,"src":145071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145073,145075],{"id":145074},"_204-流式布局案例","20.4 流式布局案例",[19,145077,2241],{},[19,145079,145080],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145082,145083],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145085,145086],{},"图片格式：",[3528,145088],{"style":127999,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145091,137186],{},[3528,145093],{"style":127999,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145096,141513],{},[26,145098,145099],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,145100,145101],{"__ignoreMap":32},[167,145102,145103,145105,145107,145109,145111,145113,145115,145117,145119,145121,145123,145125],{"class":169,"line":170},[167,145104,513],{"class":512},[167,145106,3528],{"class":516},[167,145108,57228],{"class":173},[167,145110,523],{"class":512},[167,145112,135660],{"class":177},[167,145114,57236],{"class":173},[167,145116,523],{"class":512},[167,145118,135667],{"class":177},[167,145120,135670],{"class":173},[167,145122,523],{"class":512},[167,145124,135675],{"class":177},[167,145126,537],{"class":512},[19,145128,141602],{},[26,145130,145131],{"className":128890,"code":135645,"language":128892,"meta":32,"style":32},[34,145132,145133],{"__ignoreMap":32},[167,145134,145135,145137,145139,145141,145143,145145,145147,145149,145151,145153,145155,145157],{"class":169,"line":170},[167,145136,513],{"class":512},[167,145138,3528],{"class":516},[167,145140,57228],{"class":173},[167,145142,523],{"class":512},[167,145144,135660],{"class":177},[167,145146,57236],{"class":173},[167,145148,523],{"class":512},[167,145150,135667],{"class":177},[167,145152,135670],{"class":173},[167,145154,523],{"class":512},[167,145156,135675],{"class":177},[167,145158,537],{"class":512},[14,145160,145162],{"id":145161},"_205-flex布局","20.5 flex布局",[3528,145164],{"style":127999,"src":145165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[494,145167,145169],{"id":145168},"_2051-布局原理","20.5.1 布局原理",[19,145171,145172],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3205,145174,145175,145178,145181,145184,145187],{},[43,145176,145177],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[43,145179,145180],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[43,145182,145183],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[43,145185,145186],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[43,145188,145189],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145191,145192],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145194,145195],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,145197,145199],{"className":128143,"code":145198,"language":128145,"meta":32,"style":32},"\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",[34,145200,145201,145206,145213,145223,145235,145246,145257,145268],{"__ignoreMap":32},[167,145202,145203],{"class":169,"line":170},[167,145204,145205],{"class":2268},"\u002F* Flex 弹性布局 *\u002F\n",[167,145207,145208,145211],{"class":169,"line":191},[167,145209,145210],{"class":173},".container",[167,145212,17598],{"class":512},[167,145214,145215,145217,145219,145221],{"class":169,"line":205},[167,145216,129759],{"class":184},[167,145218,53435],{"class":512},[167,145220,53475],{"class":184},[167,145222,3359],{"class":512},[167,145224,145225,145228,145230,145233],{"class":169,"line":219},[167,145226,145227],{"class":184},"  flex-direction",[167,145229,53435],{"class":512},[167,145231,145232],{"class":184},"row",[167,145234,3359],{"class":512},[167,145236,145237,145240,145242,145244],{"class":169,"line":230},[167,145238,145239],{"class":184},"  justify-content",[167,145241,53435],{"class":512},[167,145243,53666],{"class":184},[167,145245,3359],{"class":512},[167,145247,145248,145251,145253,145255],{"class":169,"line":241},[167,145249,145250],{"class":184},"  align-items",[167,145252,53435],{"class":512},[167,145254,53590],{"class":184},[167,145256,3359],{"class":512},[167,145258,145259,145262,145264,145266],{"class":169,"line":261},[167,145260,145261],{"class":184},"  flex-wrap",[167,145263,53435],{"class":512},[167,145265,80598],{"class":184},[167,145267,3359],{"class":512},[167,145269,145270],{"class":169,"line":773},[167,145271,3630],{"class":512},[19,145273,72441],{},[19,145275,145276],{},".form-item .male-label {",[19,145278,145279],{},"   margin-right: 20px;",[19,145281,145282],{},"   display: inline-flex;",[19,145284,145285],{},"   align-items: center;",[19,145287,3145],{},[3528,145289],{"style":127999,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3528,145292],{"style":127999,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[494,145295,145297],{"id":145296},"_2052-常见父项属性","20.5.2 常见父项属性",[40,145299,145300,145303,145306,145309,145312,145315,145318],{},[43,145301,145302],{},"flex-direction：设置主轴的方向",[43,145304,145305],{},"justify-content：设置主轴上的子元素排列方式",[43,145307,145308],{},"flex-wrap：设置子元素是否换行",[43,145310,145311],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[43,145313,145314],{},"align-items：设置侧轴上的子元素排列方式（单行）",[43,145316,145317],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[43,145319,145302],{},[3528,145321],{"style":127999,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3528,145324],{"style":127999,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[40,145327,145328],{"start":191},[43,145329,145305],{},[3528,145331],{"style":127999,"src":145332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145334,145335,145338],{},[34,145336,145337],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145340,145341],{},"跟着主轴走",[40,145343,145344],{"start":205},[43,145345,145308],{},[3528,145347],{"style":127999,"src":145348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145350,145351],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[40,145353,145354],{"start":219},[43,145355,145311],{},[3528,145357],{"style":127999,"src":145358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145360,145361],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145363,145364],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[40,145366,145367],{"start":230},[43,145368,145314],{},[3528,145370],{"style":127999,"src":145371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145373,145374],{},"align-items与align-content之间的区别：",[19,145376,145377],{},"单找items，多找content",[3528,145379],{"style":127999,"src":145380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[40,145382,145383],{"start":241},[43,145384,145317],{},[3528,145386],{"style":127999,"src":145387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[494,145389,145391],{"id":145390},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[40,145393,145394],{},[43,145395,145396],{},[2354,145397,145398],{},"flex 属性",[19,145400,145401],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3528,145403],{"style":127999,"src":145404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145406,145407],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145409,145410],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[40,145412,145413],{"start":191},[43,145414,145415,15822,145418],{},[2354,145416,145417],{},"align-self",[2354,145419,145420],{},"控制子项自己在侧轴上的排列方式",[3528,145422],{"style":127999,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145425,145426],{},"单个子盒子在父盒子侧轴上的排列方式",[40,145428,145429],{"start":205},[43,145430,145431,145433],{},[2354,145432,97283],{}," 属性定义项目的排列顺序",[3528,145435],{"style":127999,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[494,145438,145440],{"id":145439},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3528,145442],{"style":127999,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145445,145446],{},"必须要添加浏览器的私有前缀",[494,145448,145450],{"id":145449},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145452,145453],{},"学到最重要的知识：",[19,145455,145456],{},"flex处理这样的布局思路",[3528,145458],{"style":127999,"src":145459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,145461,145463],{"className":128143,"code":145462,"language":128145,"meta":32,"style":32},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[34,145464,145465,145471,145481,145491,145501],{"__ignoreMap":32},[167,145466,145467,145469],{"class":169,"line":170},[167,145468,145210],{"class":173},[167,145470,17598],{"class":512},[167,145472,145473,145475,145477,145479],{"class":169,"line":191},[167,145474,129759],{"class":184},[167,145476,53435],{"class":512},[167,145478,53475],{"class":184},[167,145480,3359],{"class":512},[167,145482,145483,145485,145487,145489],{"class":169,"line":205},[167,145484,145239],{"class":184},[167,145486,53435],{"class":512},[167,145488,53590],{"class":184},[167,145490,3359],{"class":512},[167,145492,145493,145495,145497,145499],{"class":169,"line":219},[167,145494,145250],{"class":184},[167,145496,53435],{"class":512},[167,145498,53590],{"class":184},[167,145500,3359],{"class":512},[167,145502,145503],{"class":169,"line":230},[167,145504,3630],{"class":512},[19,145506,145507],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145509,145510],{},"使用属性选择器",[3528,145512],{"style":127999,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145515,70878],{},[26,145517,145519],{"className":128890,"code":145518,"language":128892,"meta":32,"style":32},"\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",[34,145520,145521,145526,145540,145545,145565,145570,145589,145594,145613,145618,145637],{"__ignoreMap":32},[167,145522,145523],{"class":169,"line":170},[167,145524,145525],{"class":2268},"\u003C!-- 携程网移动端案例结构 -->\n",[167,145527,145528,145530,145532,145534,145536,145538],{"class":169,"line":191},[167,145529,513],{"class":512},[167,145531,53609],{"class":516},[167,145533,55479],{"class":173},[167,145535,523],{"class":512},[167,145537,94309],{"class":177},[167,145539,537],{"class":512},[167,145541,145542],{"class":169,"line":205},[167,145543,145544],{"class":2268},"  \u003C!-- 搜索栏 -->\n",[167,145546,145547,145549,145551,145553,145555,145558,145561,145563],{"class":169,"line":219},[167,145548,542],{"class":512},[167,145550,53609],{"class":516},[167,145552,55479],{"class":173},[167,145554,523],{"class":512},[167,145556,145557],{"class":177},"\"search-index\"",[167,145559,145560],{"class":512},">...\u003C\u002F",[167,145562,53609],{"class":516},[167,145564,537],{"class":512},[167,145566,145567],{"class":169,"line":230},[167,145568,145569],{"class":2268},"  \u003C!-- 焦点图 -->\n",[167,145571,145572,145574,145576,145578,145580,145583,145585,145587],{"class":169,"line":241},[167,145573,542],{"class":512},[167,145575,53609],{"class":516},[167,145577,55479],{"class":173},[167,145579,523],{"class":512},[167,145581,145582],{"class":177},"\"focus\"",[167,145584,145560],{"class":512},[167,145586,53609],{"class":516},[167,145588,537],{"class":512},[167,145590,145591],{"class":169,"line":261},[167,145592,145593],{"class":2268},"  \u003C!-- 主导航 -->\n",[167,145595,145596,145598,145600,145602,145604,145607,145609,145611],{"class":169,"line":773},[167,145597,542],{"class":512},[167,145599,53609],{"class":516},[167,145601,55479],{"class":173},[167,145603,523],{"class":512},[167,145605,145606],{"class":177},"\"local-nav\"",[167,145608,145560],{"class":512},[167,145610,53609],{"class":516},[167,145612,537],{"class":512},[167,145614,145615],{"class":169,"line":779},[167,145616,145617],{"class":2268},"  \u003C!-- 子导航 -->\n",[167,145619,145620,145622,145624,145626,145628,145631,145633,145635],{"class":169,"line":785},[167,145621,542],{"class":512},[167,145623,53609],{"class":516},[167,145625,55479],{"class":173},[167,145627,523],{"class":512},[167,145629,145630],{"class":177},"\"nav-common\"",[167,145632,145560],{"class":512},[167,145634,53609],{"class":516},[167,145636,537],{"class":512},[167,145638,145639,145641,145643],{"class":169,"line":790},[167,145640,575],{"class":512},[167,145642,53609],{"class":516},[167,145644,537],{"class":512},[19,145646,72441],{},[26,145648,145649],{"className":128143,"code":138595,"language":128145,"meta":32,"style":32},[34,145650,145651,145665,145681],{"__ignoreMap":32},[167,145652,145653,145655,145657,145659,145661,145663],{"class":169,"line":170},[167,145654,55812],{"class":516},[167,145656,3090],{"class":512},[167,145658,104698],{"class":173},[167,145660,523],{"class":731},[167,145662,64688],{"class":177},[167,145664,138612],{"class":512},[167,145666,145667,145669,145671,145673,145675,145677,145679],{"class":169,"line":191},[167,145668,72884],{"class":184},[167,145670,53435],{"class":512},[167,145672,2418],{"class":184},[167,145674,53490],{"class":731},[167,145676,53519],{"class":184},[167,145678,131723],{"class":184},[167,145680,3359],{"class":512},[167,145682,145683],{"class":169,"line":205},[167,145684,3630],{"class":512},[19,145686,145687],{},"总代码和效果展示：",[3528,145689],{"style":127999,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145692,70878],{},[26,145694,145695],{"className":128890,"code":145518,"language":128892,"meta":32,"style":32},[34,145696,145697,145701,145715,145719,145737,145741,145759,145763,145781,145785,145803],{"__ignoreMap":32},[167,145698,145699],{"class":169,"line":170},[167,145700,145525],{"class":2268},[167,145702,145703,145705,145707,145709,145711,145713],{"class":169,"line":191},[167,145704,513],{"class":512},[167,145706,53609],{"class":516},[167,145708,55479],{"class":173},[167,145710,523],{"class":512},[167,145712,94309],{"class":177},[167,145714,537],{"class":512},[167,145716,145717],{"class":169,"line":205},[167,145718,145544],{"class":2268},[167,145720,145721,145723,145725,145727,145729,145731,145733,145735],{"class":169,"line":219},[167,145722,542],{"class":512},[167,145724,53609],{"class":516},[167,145726,55479],{"class":173},[167,145728,523],{"class":512},[167,145730,145557],{"class":177},[167,145732,145560],{"class":512},[167,145734,53609],{"class":516},[167,145736,537],{"class":512},[167,145738,145739],{"class":169,"line":230},[167,145740,145569],{"class":2268},[167,145742,145743,145745,145747,145749,145751,145753,145755,145757],{"class":169,"line":241},[167,145744,542],{"class":512},[167,145746,53609],{"class":516},[167,145748,55479],{"class":173},[167,145750,523],{"class":512},[167,145752,145582],{"class":177},[167,145754,145560],{"class":512},[167,145756,53609],{"class":516},[167,145758,537],{"class":512},[167,145760,145761],{"class":169,"line":261},[167,145762,145593],{"class":2268},[167,145764,145765,145767,145769,145771,145773,145775,145777,145779],{"class":169,"line":773},[167,145766,542],{"class":512},[167,145768,53609],{"class":516},[167,145770,55479],{"class":173},[167,145772,523],{"class":512},[167,145774,145606],{"class":177},[167,145776,145560],{"class":512},[167,145778,53609],{"class":516},[167,145780,537],{"class":512},[167,145782,145783],{"class":169,"line":779},[167,145784,145617],{"class":2268},[167,145786,145787,145789,145791,145793,145795,145797,145799,145801],{"class":169,"line":785},[167,145788,542],{"class":512},[167,145790,53609],{"class":516},[167,145792,55479],{"class":173},[167,145794,523],{"class":512},[167,145796,145630],{"class":177},[167,145798,145560],{"class":512},[167,145800,53609],{"class":516},[167,145802,537],{"class":512},[167,145804,145805,145807,145809],{"class":169,"line":790},[167,145806,575],{"class":512},[167,145808,53609],{"class":516},[167,145810,537],{"class":512},[19,145812,72441],{},[26,145814,145815],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,145816,145817,145821,145835,145839],{"__ignoreMap":32},[167,145818,145819],{"class":169,"line":170},[167,145820,132254],{"class":2268},[167,145822,145823,145825,145827,145829,145831,145833],{"class":169,"line":191},[167,145824,513],{"class":512},[167,145826,53609],{"class":516},[167,145828,55479],{"class":173},[167,145830,523],{"class":512},[167,145832,132267],{"class":177},[167,145834,537],{"class":512},[167,145836,145837],{"class":169,"line":205},[167,145838,132274],{"class":512},[167,145840,145841,145843,145845],{"class":169,"line":219},[167,145842,575],{"class":512},[167,145844,53609],{"class":516},[167,145846,537],{"class":512},[2113,145848,139544],{},{"title":32,"searchDepth":191,"depth":191,"links":145850},[145851,145852,145856,145857,145858],{"id":144995,"depth":191,"text":144996},{"id":145027,"depth":191,"text":145028,"children":145853},[145854,145855],{"id":145031,"depth":205,"text":145032},{"id":145048,"depth":205,"text":145049},{"id":145067,"depth":191,"text":145068},{"id":145074,"depth":191,"text":145075},{"id":145161,"depth":191,"text":145162,"children":145859},[145860,145861,145862,145863,145864],{"id":145168,"depth":205,"text":145169},{"id":145296,"depth":205,"text":145297},{"id":145390,"depth":205,"text":145391},{"id":145439,"depth":205,"text":145440},{"id":145449,"depth":205,"text":145450},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144987,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145871,"title":145872,"body":145873,"description":25403,"extension":2140,"meta":147100,"navigation":740,"path":147101,"seo":147102,"stem":147103,"__hash__":147104},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145874,"toc":147078},[145875,145878,145882,145886,145889,145892,145896,145901,145904,145907,145910,145913,145916,145973,145976,145981,145984,145987,145991,146002,146006,146009,146012,146019,146024,146028,146031,146037,146040,146044,146047,146054,146057,146060,146067,146070,146077,146080,146083,146090,146093,146096,146098,146115,146119,146122,146125,146128,146132,146135,146138,146141,146144,146147,146150,146152,146155,146158,146220,146223,146333,146340,146346,146349,146352,146356,146359,146363,146368,146371,146378,146381,146387,146392,146395,146398,146401,146404,146407,146410,146413,146416,146472,146474,146500,146504,146507,146510,146513,146521,146524,146527,146531,146587,146590,146594,146600,146611,146614,146619,146622,146625,146631,146634,146637,146640,146643,146646,146649,146652,146655,146680,146686,146689,146692,146695,146698,146701,146704,146709,146712,146715,146718,146726,146729,146736,146739,146742,146744,146768,146770,146773,146776,146779,146782,146785,146788,146791,146825,146828,146831,146865,146872,146875,146878,146881,146884,146887,146890,146897,146900,146903,146906,146909,146916,146919,146922,146929,146932,146935,146939,146942,146945,146948,146951,146954,146957,146960,146963,146965,146989,146991,147015,147019,147030,147033,147036,147039,147042,147045,147048,147051,147054,147057,147060,147063,147066,147069,147072,147075],[10,145876,145872],{"id":145877},"_21-移动端布局实战下篇",[14,145879,145881],{"id":145880},"_211-rem适配布局","21.1 rem适配布局",[494,145883,145885],{"id":145884},"_2111-rem单位","21.1.1 rem单位",[3528,145887],{"style":127999,"src":145888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145890,145891],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[494,145893,145895],{"id":145894},"_2112-媒体查询","21.1.2 媒体查询",[40,145897,145898],{},[43,145899,145900],{},"参数介绍",[3528,145902],{"style":127999,"src":145903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3528,145905],{"style":127999,"src":145906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3528,145908],{"style":127999,"src":145909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3528,145911],{"style":127999,"src":145912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3528,145914],{"style":127999,"src":145915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,145917,145919],{"className":128143,"code":145918,"language":128145,"meta":32,"style":32},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[34,145920,145921,145926,145945,145952,145965,145969],{"__ignoreMap":32},[167,145922,145923],{"class":169,"line":170},[167,145924,145925],{"class":2268},"\u002F* 媒体查询 *\u002F\n",[167,145927,145928,145931,145933,145936,145938,145941,145943],{"class":169,"line":191},[167,145929,145930],{"class":731},"@media",[167,145932,3716],{"class":512},[167,145934,145935],{"class":184},"max-width",[167,145937,53435],{"class":512},[167,145939,145940],{"class":184},"768",[167,145942,53490],{"class":731},[167,145944,14470],{"class":512},[167,145946,145947,145950],{"class":169,"line":205},[167,145948,145949],{"class":173},"  .container",[167,145951,17598],{"class":512},[167,145953,145954,145957,145959,145961,145963],{"class":169,"line":219},[167,145955,145956],{"class":184},"    width",[167,145958,53435],{"class":512},[167,145960,981],{"class":184},[167,145962,2528],{"class":731},[167,145964,3359],{"class":512},[167,145966,145967],{"class":169,"line":230},[167,145968,128939],{"class":512},[167,145970,145971],{"class":169,"line":241},[167,145972,3630],{"class":512},[19,145974,145975],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[40,145977,145978],{"start":191},[43,145979,145980],{},"引入资源",[3528,145982],{"style":127999,"src":145983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145985,145986],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[494,145988,145990],{"id":145989},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3205,145992,145993,145996,145999],{},[43,145994,145995],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[43,145997,145998],{},"媒体查询可以根据不同设备宽度来修改样式",[43,146000,146001],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146003,146005],{"id":146004},"_212-less基础","21.2 Less基础",[19,146007,146008],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146010,146011],{},"Less可以解决该问题，它是css的扩展语言",[19,146013,146014,146015],{},"Less中文网址： ",[2439,146016,146017],{"href":146017,"rel":146018},"http:\u002F\u002Flesscss.cn\u002F",[25887],[19,146020,146021],{},[2354,146022,146023],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[494,146025,146027],{"id":146026},"_2121-less安装","21.2.1 less安装",[19,146029,146030],{},"如果使用vscode，则无需进行下方安装步骤",[19,146032,146033],{},[2439,146034,146035],{"href":146035,"rel":146036},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25887],[3528,146038],{"style":127999,"src":146039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[494,146041,146043],{"id":146042},"_2122-less使用","21.2.2 less使用",[19,146045,146046],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[40,146048,146049],{},[43,146050,146051],{},[2354,146052,146053],{},"Less 变量",[3528,146055],{"style":127999,"src":146056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3528,146058],{"style":127999,"src":146059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[40,146061,146062],{"start":191},[43,146063,146064],{},[2354,146065,146066],{},"Less 编译",[3528,146068],{"style":127999,"src":146069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[40,146071,146072],{"start":205},[43,146073,146074],{},[2354,146075,146076],{},"Less 嵌套",[3528,146078],{"style":127999,"src":146079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3528,146081],{"style":127999,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[40,146084,146085],{"start":219},[43,146086,146087],{},[2354,146088,146089],{},"Less 运算",[3528,146091],{"style":127999,"src":146092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146094,146095],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146097,2241],{},[3205,146099,146100,146103,146106,146109,146112],{},[43,146101,146102],{},"乘号（*）和除号（\u002F）的写法",[43,146104,146105],{},"运算符中间左右有个空格隔开 1px + 5",[43,146107,146108],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[43,146110,146111],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[43,146113,146114],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146116,146118],{"id":146117},"_213-rem-适配方案","21.3 rem 适配方案",[19,146120,146121],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146123,146124],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3528,146126],{"style":127999,"src":146127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[494,146129,146131],{"id":146130},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146133,146134],{},"rem + 媒体查询 + less 技术",[3528,146136],{"style":127999,"src":146137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146139,146140],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146142,146143],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3528,146145],{"style":127999,"src":146146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146148,146149],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146151,16660],{},[3528,146153],{"style":127999,"src":146154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146156,146157],{},"index.html:",[26,146159,146161],{"className":128143,"code":146160,"language":128145,"meta":32,"style":32},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[34,146162,146163,146168,146174,146190,146194,146200,146216],{"__ignoreMap":32},[167,146164,146165],{"class":169,"line":170},[167,146166,146167],{"class":2268},"\u002F* rem 适配方案 *\u002F\n",[167,146169,146170,146172],{"class":169,"line":191},[167,146171,52635],{"class":516},[167,146173,17598],{"class":512},[167,146175,146176,146178,146180,146183,146185,146187],{"class":169,"line":205},[167,146177,72614],{"class":184},[167,146179,53435],{"class":512},[167,146181,146182],{"class":184},"62.5",[167,146184,2528],{"class":731},[167,146186,132006],{"class":512},[167,146188,146189],{"class":2268},"\u002F* 1rem = 10px *\u002F\n",[167,146191,146192],{"class":169,"line":219},[167,146193,3630],{"class":512},[167,146195,146196,146198],{"class":169,"line":230},[167,146197,131991],{"class":173},[167,146199,17598],{"class":512},[167,146201,146202,146204,146206,146208,146211,146213],{"class":169,"line":241},[167,146203,72556],{"class":184},[167,146205,53435],{"class":512},[167,146207,2646],{"class":184},[167,146209,146210],{"class":731},"rem",[167,146212,132006],{"class":512},[167,146214,146215],{"class":2268},"\u002F* 100px *\u002F\n",[167,146217,146218],{"class":169,"line":261},[167,146219,3630],{"class":512},[19,146221,146222],{},"common.less",[26,146224,146226],{"className":128143,"code":146225,"language":128145,"meta":32,"style":32},"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",[34,146227,146228,146234,146249,146253,146259,146273,146277,146281,146285,146291,146305,146309,146315,146329],{"__ignoreMap":32},[167,146229,146230,146232],{"class":169,"line":170},[167,146231,52635],{"class":516},[167,146233,17598],{"class":512},[167,146235,146236,146238,146240,146242,146244,146246],{"class":169,"line":191},[167,146237,72614],{"class":184},[167,146239,53435],{"class":512},[167,146241,146182],{"class":184},[167,146243,2528],{"class":731},[167,146245,28086],{"class":512},[167,146247,146248],{"class":2268},"\u002F* 10px *\u002F\n",[167,146250,146251],{"class":169,"line":205},[167,146252,3630],{"class":512},[167,146254,146255,146257],{"class":169,"line":219},[167,146256,53609],{"class":516},[167,146258,17598],{"class":512},[167,146260,146261,146263,146265,146267,146269,146271],{"class":169,"line":230},[167,146262,72556],{"class":184},[167,146264,53435],{"class":512},[167,146266,2646],{"class":184},[167,146268,146210],{"class":731},[167,146270,28086],{"class":512},[167,146272,146215],{"class":2268},[167,146274,146275],{"class":169,"line":241},[167,146276,3630],{"class":512},[167,146278,146279],{"class":169,"line":261},[167,146280,137604],{"class":512},[167,146282,146283],{"class":169,"line":773},[167,146284,146167],{"class":2268},[167,146286,146287,146289],{"class":169,"line":779},[167,146288,52635],{"class":516},[167,146290,17598],{"class":512},[167,146292,146293,146295,146297,146299,146301,146303],{"class":169,"line":785},[167,146294,72614],{"class":184},[167,146296,53435],{"class":512},[167,146298,146182],{"class":184},[167,146300,2528],{"class":731},[167,146302,132006],{"class":512},[167,146304,146189],{"class":2268},[167,146306,146307],{"class":169,"line":790},[167,146308,3630],{"class":512},[167,146310,146311,146313],{"class":169,"line":796},[167,146312,131991],{"class":173},[167,146314,17598],{"class":512},[167,146316,146317,146319,146321,146323,146325,146327],{"class":169,"line":802},[167,146318,72556],{"class":184},[167,146320,53435],{"class":512},[167,146322,2646],{"class":184},[167,146324,146210],{"class":731},[167,146326,132006],{"class":512},[167,146328,146215],{"class":2268},[167,146330,146331],{"class":169,"line":808},[167,146332,3630],{"class":512},[19,146334,146335,146336,146339],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25580,146337,146338],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,146341,146344],{"className":146342,"code":146343,"language":31},[29],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[34,146345,146343],{"__ignoreMap":32},[19,146347,146348],{},"less保存时会自动变成.css文件",[19,146350,146351],{},"好好搞懂上述代码写法",[494,146353,146355],{"id":146354},"_2132-样式导入样式","21.3.2 样式导入样式",[3528,146357],{"style":127999,"src":146358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[494,146360,146362],{"id":146361},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[40,146364,146365],{},[43,146366,146367],{},"准备工作",[3528,146369],{"style":127999,"src":146370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146372,146373,146374],{},"github地址：",[2439,146375,146376],{"href":146376,"rel":146377},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25887],[19,146379,146380],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146382,146383,146384],{},"js文件引入到index.html中使用的是",[34,146385,146386],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[40,146388,146389],{"start":191},[43,146390,146391],{},"vscode插件",[3528,146393],{"style":127999,"src":146394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146396,146397],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146399,146400],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3528,146402],{"style":127999,"src":146403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146405,146406],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3528,146408],{"style":127999,"src":146409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146411,146412],{},"修改成75就可以，alt+z为快捷键",[19,146414,146415],{},"index.css：",[26,146417,146418],{"className":128143,"code":146160,"language":128145,"meta":32,"style":32},[34,146419,146420,146424,146430,146444,146448,146454,146468],{"__ignoreMap":32},[167,146421,146422],{"class":169,"line":170},[167,146423,146167],{"class":2268},[167,146425,146426,146428],{"class":169,"line":191},[167,146427,52635],{"class":516},[167,146429,17598],{"class":512},[167,146431,146432,146434,146436,146438,146440,146442],{"class":169,"line":205},[167,146433,72614],{"class":184},[167,146435,53435],{"class":512},[167,146437,146182],{"class":184},[167,146439,2528],{"class":731},[167,146441,132006],{"class":512},[167,146443,146189],{"class":2268},[167,146445,146446],{"class":169,"line":219},[167,146447,3630],{"class":512},[167,146449,146450,146452],{"class":169,"line":230},[167,146451,131991],{"class":173},[167,146453,17598],{"class":512},[167,146455,146456,146458,146460,146462,146464,146466],{"class":169,"line":241},[167,146457,72556],{"class":184},[167,146459,53435],{"class":512},[167,146461,2646],{"class":184},[167,146463,146210],{"class":731},[167,146465,132006],{"class":512},[167,146467,146215],{"class":2268},[167,146469,146470],{"class":169,"line":261},[167,146471,3630],{"class":512},[19,146473,146157],{},[26,146475,146476],{"className":128143,"code":128547,"language":128145,"meta":32,"style":32},[34,146477,146478,146484,146496],{"__ignoreMap":32},[167,146479,146480,146482],{"class":169,"line":170},[167,146481,517],{"class":516},[167,146483,17598],{"class":512},[167,146485,146486,146488,146490,146492,146494],{"class":169,"line":191},[167,146487,72614],{"class":184},[167,146489,53435],{"class":512},[167,146491,2801],{"class":184},[167,146493,53490],{"class":731},[167,146495,3359],{"class":512},[167,146497,146498],{"class":169,"line":205},[167,146499,3630],{"class":512},[14,146501,146503],{"id":146502},"_214-响应式开发","21.4 响应式开发",[19,146505,146506],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3528,146508],{"style":127999,"src":146509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146511,146512],{},"做法：",[3205,146514,146515,146518],{},[43,146516,146517],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[43,146519,146520],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3528,146522],{"style":127999,"src":146523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146525,146526],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[494,146528,146530],{"id":146529},"_2141-简单代码示范","21.4.1 简单代码示范",[26,146532,146533],{"className":128143,"code":146160,"language":128145,"meta":32,"style":32},[34,146534,146535,146539,146545,146559,146563,146569,146583],{"__ignoreMap":32},[167,146536,146537],{"class":169,"line":170},[167,146538,146167],{"class":2268},[167,146540,146541,146543],{"class":169,"line":191},[167,146542,52635],{"class":516},[167,146544,17598],{"class":512},[167,146546,146547,146549,146551,146553,146555,146557],{"class":169,"line":205},[167,146548,72614],{"class":184},[167,146550,53435],{"class":512},[167,146552,146182],{"class":184},[167,146554,2528],{"class":731},[167,146556,132006],{"class":512},[167,146558,146189],{"class":2268},[167,146560,146561],{"class":169,"line":219},[167,146562,3630],{"class":512},[167,146564,146565,146567],{"class":169,"line":230},[167,146566,131991],{"class":173},[167,146568,17598],{"class":512},[167,146570,146571,146573,146575,146577,146579,146581],{"class":169,"line":241},[167,146572,72556],{"class":184},[167,146574,53435],{"class":512},[167,146576,2646],{"class":184},[167,146578,146210],{"class":731},[167,146580,132006],{"class":512},[167,146582,146215],{"class":2268},[167,146584,146585],{"class":169,"line":261},[167,146586,3630],{"class":512},[19,146588,146589],{},"父盒子一般命名为container",[494,146591,146593],{"id":146592},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146595,146596,146597],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2354,146598,146599],{},"使得 Web 开发更加快捷",[3205,146601,146602],{},[43,146603,146604,146605],{},"官网：",[2354,146606,146607],{},[2439,146608,146609],{"href":146609,"rel":146610},"http:\u002F\u002Fgetbootstrap.com\u002F",[25887],[19,146612,146613],{},"可以直接去官网拿现成的东西",[40,146615,146616],{},[43,146617,146618],{},"Bootstrap的使用",[19,146620,146621],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146623,146624],{},"Bootstrap 使用四步曲：",[19,146626,146627,146630],{},[2354,146628,146629],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3528,146632],{"style":127999,"src":146633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146635,146636],{},"打开Bootstrap官网，然后下载",[3528,146638],{"style":127999,"src":146639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3528,146641],{"style":127999,"src":146642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146644,146645],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146647,146648],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146650,146651],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3528,146653],{"style":127999,"src":146654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,146656,146658],{"className":128143,"code":146657,"language":128145,"meta":32,"style":32},".center {\n  color: red;\n}\n",[34,146659,146660,146666,146676],{"__ignoreMap":32},[167,146661,146662,146664],{"class":169,"line":170},[167,146663,128434],{"class":173},[167,146665,17598],{"class":512},[167,146667,146668,146670,146672,146674],{"class":169,"line":191},[167,146669,72893],{"class":184},[167,146671,53435],{"class":512},[167,146673,59410],{"class":184},[167,146675,3359],{"class":512},[167,146677,146678],{"class":169,"line":205},[167,146679,3630],{"class":512},[19,146681,146682,146685],{},[34,146683,146684],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3528,146687],{"style":127999,"src":146688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3528,146690],{"style":127999,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3528,146693],{"style":127999,"src":146694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146696,146697],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3528,146699],{"style":127999,"src":146700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146702,146703],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[40,146705,146706],{"start":191},[43,146707,146708],{},"布局容器",[3528,146710],{"style":127999,"src":146711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146713,146714],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146716,146717],{},"container-fluid用于移动式布局比较方便",[40,146719,146720],{"start":205},[43,146721,146722,146723],{},"bootstrap ",[2354,146724,146725],{},"栅格系统原理",[3528,146727],{"style":127999,"src":146728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[40,146730,146731],{"start":219},[43,146732,146733],{},[2354,146734,146735],{},"栅格选项参数",[3528,146737],{"style":127999,"src":146738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146740,146741],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146743,16660],{},[26,146745,146746],{"className":128143,"code":146657,"language":128145,"meta":32,"style":32},[34,146747,146748,146754,146764],{"__ignoreMap":32},[167,146749,146750,146752],{"class":169,"line":170},[167,146751,128434],{"class":173},[167,146753,17598],{"class":512},[167,146755,146756,146758,146760,146762],{"class":169,"line":191},[167,146757,72893],{"class":184},[167,146759,53435],{"class":512},[167,146761,59410],{"class":184},[167,146763,3359],{"class":512},[167,146765,146766],{"class":169,"line":205},[167,146767,3630],{"class":512},[19,146769,137186],{},[3528,146771],{"style":127999,"src":146772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146774,146775],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146777,146778],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146780,146781],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146783,146784],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146786,146787],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146789,146790],{},"汇总展示说明：",[26,146792,146793],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,146794,146795,146799,146813,146817],{"__ignoreMap":32},[167,146796,146797],{"class":169,"line":170},[167,146798,132254],{"class":2268},[167,146800,146801,146803,146805,146807,146809,146811],{"class":169,"line":191},[167,146802,513],{"class":512},[167,146804,53609],{"class":516},[167,146806,55479],{"class":173},[167,146808,523],{"class":512},[167,146810,132267],{"class":177},[167,146812,537],{"class":512},[167,146814,146815],{"class":169,"line":205},[167,146816,132274],{"class":512},[167,146818,146819,146821,146823],{"class":169,"line":219},[167,146820,575],{"class":512},[167,146822,53609],{"class":516},[167,146824,537],{"class":512},[3528,146826],{"style":127999,"src":146827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146829,146830],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,146832,146833],{"className":128890,"code":132247,"language":128892,"meta":32,"style":32},[34,146834,146835,146839,146853,146857],{"__ignoreMap":32},[167,146836,146837],{"class":169,"line":170},[167,146838,132254],{"class":2268},[167,146840,146841,146843,146845,146847,146849,146851],{"class":169,"line":191},[167,146842,513],{"class":512},[167,146844,53609],{"class":516},[167,146846,55479],{"class":173},[167,146848,523],{"class":512},[167,146850,132267],{"class":177},[167,146852,537],{"class":512},[167,146854,146855],{"class":169,"line":205},[167,146856,132274],{"class":512},[167,146858,146859,146861,146863],{"class":169,"line":219},[167,146860,575],{"class":512},[167,146862,53609],{"class":516},[167,146864,537],{"class":512},[40,146866,146867],{"start":230},[43,146868,146869],{},[2354,146870,146871],{},"列嵌套",[3528,146873],{"style":127999,"src":146874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146876,146877],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146879,146880],{},"没加row内部这样：",[3528,146882],{"style":127999,"src":146883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146885,146886],{},"加上row之后内部为：",[3528,146888],{"style":127999,"src":146889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[40,146891,146892],{"start":241},[43,146893,146894],{},[2354,146895,146896],{},"列偏移",[3528,146898],{"style":127999,"src":146899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146901,146902],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146904,146905],{},"要加偏移量，即偏移份数",[19,146907,146908],{},"偏移的份数=12-两个盒子的份数",[40,146910,146911],{"start":261},[43,146912,146913],{},[2354,146914,146915],{},"列排序",[3528,146917],{"style":127999,"src":146918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146920,146921],{},"pull拉左；push推右",[40,146923,146924],{"start":773},[43,146925,146926],{},[2354,146927,146928],{},"响应式工具",[3528,146930],{"style":127999,"src":146931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146933,146934],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[494,146936,146938],{"id":146937},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146940,146941],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146943,146944],{},"ul {",[19,146946,146947],{},"list-style: none;",[19,146949,146950],{},"margin:0;",[19,146952,146953],{},"padding:0; }",[3528,146955],{"style":127999,"src":146956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3528,146958],{"style":127999,"src":146959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146961,146962],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146964,70878],{},[26,146966,146967],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,146968,146969,146975,146985],{"__ignoreMap":32},[167,146970,146971,146973],{"class":169,"line":170},[167,146972,131991],{"class":173},[167,146974,17598],{"class":512},[167,146976,146977,146979,146981,146983],{"class":169,"line":191},[167,146978,132623],{"class":184},[167,146980,53435],{"class":512},[167,146982,79],{"class":184},[167,146984,3359],{"class":512},[167,146986,146987],{"class":169,"line":205},[167,146988,3630],{"class":512},[19,146990,72441],{},[26,146992,146993],{"className":128143,"code":140813,"language":128145,"meta":32,"style":32},[34,146994,146995,147001,147011],{"__ignoreMap":32},[167,146996,146997,146999],{"class":169,"line":170},[167,146998,131991],{"class":173},[167,147000,17598],{"class":512},[167,147002,147003,147005,147007,147009],{"class":169,"line":191},[167,147004,132623],{"class":184},[167,147006,53435],{"class":512},[167,147008,79],{"class":184},[167,147010,3359],{"class":512},[167,147012,147013],{"class":169,"line":205},[167,147014,3630],{"class":512},[14,147016,147018],{"id":147017},"_215-swiper-插件使用","21.5 swiper 插件使用",[3205,147020,147021,147024,147027],{},[43,147022,147023],{},"下载需要的css和js文件html页面中 引入相关文件",[43,147025,147026],{},"官网找到类似案例，复制html结构，css样式 js 语法",[43,147028,147029],{},"根据需求定制修改模块",[3528,147031],{"style":127999,"src":147032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147034,147035],{},"解压后将这两部分放到项目中",[3528,147037],{"style":127999,"src":147038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147040,147041],{},"这个插件可以帮助我们实现轮播图效果",[19,147043,147044],{},"用法：",[3528,147046],{"style":127999,"src":147047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147049,147050],{},"找到自己喜欢的",[3528,147052],{"style":127999,"src":147053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147055,147056],{},"右键，查看网页源代码",[3528,147058],{"style":127999,"src":147059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147061,147062],{},"复制人家的结构内容",[19,147064,147065],{},"然后去看API文档：",[3528,147067],{"style":127999,"src":147068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147070,147071],{},"可以看看如何修改样式",[19,147073,147074],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2113,147076,147077],{},"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":32,"searchDepth":191,"depth":191,"links":147079},[147080,147085,147089,147094,147099],{"id":145880,"depth":191,"text":145881,"children":147081},[147082,147083,147084],{"id":145884,"depth":205,"text":145885},{"id":145894,"depth":205,"text":145895},{"id":145989,"depth":205,"text":145990},{"id":146004,"depth":191,"text":146005,"children":147086},[147087,147088],{"id":146026,"depth":205,"text":146027},{"id":146042,"depth":205,"text":146043},{"id":146117,"depth":191,"text":146118,"children":147090},[147091,147092,147093],{"id":146130,"depth":205,"text":146131},{"id":146354,"depth":205,"text":146355},{"id":146361,"depth":205,"text":146362},{"id":146502,"depth":191,"text":146503,"children":147095},[147096,147097,147098],{"id":146529,"depth":205,"text":146530},{"id":146592,"depth":205,"text":146593},{"id":146937,"depth":205,"text":146938},{"id":147017,"depth":191,"text":147018},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145872,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147106,"title":147107,"body":147108,"description":25403,"extension":2140,"meta":147328,"navigation":740,"path":147329,"seo":147330,"stem":147331,"__hash__":147332},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147109,"toc":147324},[147110,147113,147117,147120,147135,147140,147143,147148,147183,147188,147200,147205,147218,147223,147240,147245,147265,147270,147288,147291,147294,147297,147300,147304,147307,147310,147313,147316,147319,147322],[10,147111,147107],{"id":147112},"_22-代码提交与新型相对单位",[14,147114,147116],{"id":147115},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147118,147119],{},"法1：",[40,147121,147122,147129,147132],{},[43,147123,147124,147125],{},"登录网站注册：",[2439,147126,147127],{"href":147127,"rel":147128},"https:\u002F\u002Fgitee.com\u002F",[25887],[43,147130,147131],{},"码云创建新的仓库",[43,147133,147134],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3205,147136,147137],{},[43,147138,147139],{},"在网站根目录右键-- Git Bash Here",[3528,147141],{"style":127999,"src":147142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3205,147144,147145],{},[43,147146,147147],{},"如果是第一次利用git提交，请配置好全局选项",[26,147149,147151],{"className":118887,"code":147150,"language":118889,"meta":32,"style":32},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[34,147152,147153,147169],{"__ignoreMap":32},[167,147154,147155,147158,147160,147163,147166],{"class":169,"line":170},[167,147156,147157],{"class":173},"git",[167,147159,121310],{"class":177},[167,147161,147162],{"class":184}," --global",[167,147164,147165],{"class":177}," user.name",[167,147167,147168],{"class":177}," \"你的名字\"\n",[167,147170,147171,147173,147175,147177,147180],{"class":169,"line":191},[167,147172,147157],{"class":173},[167,147174,121310],{"class":177},[167,147176,147162],{"class":184},[167,147178,147179],{"class":177}," user.email",[167,147181,147182],{"class":177}," \"你的邮箱\"\n",[3205,147184,147185],{},[43,147186,147187],{},"初始化仓库",[26,147189,147191],{"className":118887,"code":147190,"language":118889,"meta":32,"style":32},"git init\n",[34,147192,147193],{"__ignoreMap":32},[167,147194,147195,147197],{"class":169,"line":170},[167,147196,147157],{"class":173},[167,147198,147199],{"class":177}," init\n",[3205,147201,147202],{},[43,147203,147204],{},"把本地文件放到暂存区",[26,147206,147208],{"className":118887,"code":147207,"language":118889,"meta":32,"style":32},"git add .\n",[34,147209,147210],{"__ignoreMap":32},[167,147211,147212,147214,147216],{"class":169,"line":170},[167,147213,147157],{"class":173},[167,147215,7239],{"class":177},[167,147217,30757],{"class":177},[3205,147219,147220],{},[43,147221,147222],{},"把本地文件放到本地仓库里面",[26,147224,147226],{"className":118887,"code":147225,"language":118889,"meta":32,"style":32},"git commit -m \"first commit\"\n",[34,147227,147228],{"__ignoreMap":32},[167,147229,147230,147232,147235,147237],{"class":169,"line":170},[167,147231,147157],{"class":173},[167,147233,147234],{"class":177}," commit",[167,147236,286],{"class":184},[167,147238,147239],{"class":177}," \"first commit\"\n",[3205,147241,147242],{},[43,147243,147244],{},"链接远程仓库",[26,147246,147248],{"className":118887,"code":147247,"language":118889,"meta":32,"style":32},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[34,147249,147250],{"__ignoreMap":32},[167,147251,147252,147254,147257,147259,147262],{"class":169,"line":170},[167,147253,147157],{"class":173},[167,147255,147256],{"class":177}," remote",[167,147258,7239],{"class":177},[167,147260,147261],{"class":177}," origin",[167,147263,147264],{"class":177}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3205,147266,147267],{},[43,147268,147269],{},"把本地仓库的文件推送到远程仓库 push",[26,147271,147273],{"className":118887,"code":147272,"language":118889,"meta":32,"style":32},"git push -u origin master\n",[34,147274,147275],{"__ignoreMap":32},[167,147276,147277,147279,147281,147283,147285],{"class":169,"line":170},[167,147278,147157],{"class":173},[167,147280,31032],{"class":177},[167,147282,30307],{"class":184},[167,147284,147261],{"class":177},[167,147286,147287],{"class":177}," master\n",[3528,147289],{"style":127999,"src":147290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147292,147293],{},"上方方法暂未实现，后边学完git后在整",[19,147295,147296],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3528,147298],{"style":127999,"src":147299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147301,147303],{"id":147302},"_222-新型相对单位","22.2 新型相对单位",[3528,147305],{"style":127999,"src":147306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3528,147308],{"style":127999,"src":147309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147311,147312],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147314,147315],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3528,147317],{"style":127999,"src":147318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147320,147321],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2113,147323,25980],{},{"title":32,"searchDepth":191,"depth":191,"links":147325},[147326,147327],{"id":147115,"depth":191,"text":147116},{"id":147302,"depth":191,"text":147303},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147107,"description":25403},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147334,"title":147335,"body":147336,"description":147340,"extension":2140,"meta":147341,"navigation":740,"path":147342,"seo":147343,"stem":147344,"__hash__":147345},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147337,"toc":147338},[],{"title":32,"searchDepth":191,"depth":191,"links":147339},[],"自己正经开始学编程的第一门语言！",{"category":94825},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147335,"description":147340},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147347,"title":147348,"body":147349,"description":25403,"extension":2140,"meta":148496,"navigation":740,"path":148497,"seo":148498,"stem":148499,"__hash__":148500},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147350,"toc":148472},[147351,147354,147358,147361,147364,147389,147392,147398,147402,147405,147432,147435,147475,147478,147490,147493,147499,147503,147507,147534,147551,147558,147562,147565,147591,147594,147598,147601,147641,147644,147661,147667,147671,147676,147720,147723,147741,147744,147812,147816,147823,147826,147841,147844,147853,147856,147867,147870,147879,147882,147899,147902,147917,147921,147925,147928,147930,147950,147954,147957,147960,147971,147974,147980,147984,147990,148017,148020,148032,148035,148046,148049,148055,148059,148065,148115,148118,148160,148163,148196,148199,148233,148237,148240,148260,148263,148299,148302,148315,148319,148323,148329,148332,148345,148349,148352,148358,148361,148365,148368,148371,148420,148424,148440,148446,148453,148459,148469],[10,147352,147348],{"id":147353},"_1-python环境与第一个程序",[14,147355,147357],{"id":147356},"_11-什么是python","1.1 什么是Python",[19,147359,147360],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147362,147363],{},"理解 Python 时抓住三个关键词：",[40,147365,147366,147369,147372],{},[43,147367,147368],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[43,147370,147371],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[43,147373,147374,147375,480,147378,480,147381,480,147384,480,147386,423],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[34,147376,147377],{},"os",[34,147379,147380],{},"sys",[34,147382,147383],{},"json",[34,147385,59849],{},[34,147387,147388],{},"datetime",[19,147390,147391],{},"Python 程序的运行链路：",[26,147393,147396],{"className":147394,"code":147395,"language":31,"meta":32},[29],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[34,147397,147395],{"__ignoreMap":32},[14,147399,147401],{"id":147400},"_12-python解释器","1.2 Python解释器",[19,147403,147404],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,147406,147408],{"className":161,"code":147407,"language":163,"meta":32,"style":32},"python --version\npython3 --version\npython\npython3\n",[34,147409,147410,147416,147422,147427],{"__ignoreMap":32},[167,147411,147412,147414],{"class":169,"line":170},[167,147413,305],{"class":173},[167,147415,28312],{"class":184},[167,147417,147418,147420],{"class":169,"line":191},[167,147419,283],{"class":173},[167,147421,28312],{"class":184},[167,147423,147424],{"class":169,"line":205},[167,147425,147426],{"class":173},"python\n",[167,147428,147429],{"class":169,"line":219},[167,147430,147431],{"class":173},"python3\n",[19,147433,147434],{},"进入交互模式后，可以直接输入表达式：",[26,147436,147438],{"className":723,"code":147437,"language":305,"meta":32,"style":32},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[34,147439,147440,147451,147456,147470],{"__ignoreMap":32},[167,147441,147442,147445,147447,147449],{"class":169,"line":170},[167,147443,147444],{"class":731},">>>",[167,147446,27138],{"class":184},[167,147448,47566],{"class":731},[167,147450,49723],{"class":184},[167,147452,147453],{"class":169,"line":191},[167,147454,147455],{"class":184},"3\n",[167,147457,147458,147460,147463,147465,147468],{"class":169,"line":205},[167,147459,147444],{"class":731},[167,147461,147462],{"class":184}," print",[167,147464,898],{"class":512},[167,147466,147467],{"class":177},"\"hello python\"",[167,147469,873],{"class":512},[167,147471,147472],{"class":169,"line":219},[167,147473,147474],{"class":512},"hello python\n",[19,147476,147477],{},"退出交互模式：",[26,147479,147481],{"className":723,"code":147480,"language":305,"meta":32,"style":32},"exit()\n",[34,147482,147483],{"__ignoreMap":32},[167,147484,147485,147488],{"class":169,"line":170},[167,147486,147487],{"class":184},"exit",[167,147489,4020],{"class":512},[19,147491,147492],{},"或使用快捷键：",[26,147494,147497],{"className":147495,"code":147496,"language":31,"meta":32},[29],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[34,147498,147496],{"__ignoreMap":32},[14,147500,147502],{"id":147501},"_13-安装python","1.3 安装Python",[494,147504,147506],{"id":147505},"_131-windows安装","1.3.1 Windows安装",[40,147508,147509,147516,147519,147525,147531],{},[43,147510,147511,147512],{},"打开 Python 官网：",[2439,147513,147514],{"href":147514,"rel":147515},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25887],[43,147517,147518],{},"下载 Windows Installer。",[43,147520,147521,147522,423],{},"安装时勾选 ",[34,147523,147524],{},"Add Python to PATH",[43,147526,147527,147528,423],{},"点击 ",[34,147529,147530],{},"Install Now",[43,147532,147533],{},"安装完成后打开命令提示符验证：",[26,147535,147537],{"className":161,"code":147536,"language":163,"meta":32,"style":32},"python --version\npip --version\n",[34,147538,147539,147545],{"__ignoreMap":32},[167,147540,147541,147543],{"class":169,"line":170},[167,147542,305],{"class":173},[167,147544,28312],{"class":184},[167,147546,147547,147549],{"class":169,"line":191},[167,147548,331],{"class":173},[167,147550,28312],{"class":184},[19,147552,147553,147554,147557],{},"如果提示 ",[34,147555,147556],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[494,147559,147561],{"id":147560},"_132-macos安装","1.3.2 macOS安装",[19,147563,147564],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,147566,147568],{"className":161,"code":147567,"language":163,"meta":32,"style":32},"brew install python\npython3 --version\npip3 --version\n",[34,147569,147570,147579,147585],{"__ignoreMap":32},[167,147571,147572,147575,147577],{"class":169,"line":170},[167,147573,147574],{"class":173},"brew",[167,147576,181],{"class":177},[167,147578,125909],{"class":177},[167,147580,147581,147583],{"class":169,"line":191},[167,147582,283],{"class":173},[167,147584,28312],{"class":184},[167,147586,147587,147589],{"class":169,"line":205},[167,147588,121291],{"class":173},[167,147590,28312],{"class":184},[19,147592,147593],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[494,147595,147597],{"id":147596},"_133-linux安装","1.3.3 Linux安装",[19,147599,147600],{},"Ubuntu\u002FDebian：",[26,147602,147604],{"className":161,"code":147603,"language":163,"meta":32,"style":32},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[34,147605,147606,147614,147629,147635],{"__ignoreMap":32},[167,147607,147608,147610,147612],{"class":169,"line":170},[167,147609,174],{"class":173},[167,147611,118908],{"class":177},[167,147613,28261],{"class":177},[167,147615,147616,147618,147620,147622,147624,147626],{"class":169,"line":191},[167,147617,174],{"class":173},[167,147619,118908],{"class":177},[167,147621,181],{"class":177},[167,147623,105994],{"class":177},[167,147625,197],{"class":177},[167,147627,147628],{"class":177}," python3-venv\n",[167,147630,147631,147633],{"class":169,"line":205},[167,147632,283],{"class":173},[167,147634,28312],{"class":184},[167,147636,147637,147639],{"class":169,"line":219},[167,147638,121291],{"class":173},[167,147640,28312],{"class":184},[19,147642,147643],{},"Fedora：",[26,147645,147647],{"className":161,"code":147646,"language":163,"meta":32,"style":32},"sudo dnf install python3 python3-pip\n",[34,147648,147649],{"__ignoreMap":32},[167,147650,147651,147653,147655,147657,147659],{"class":169,"line":170},[167,147652,174],{"class":173},[167,147654,178],{"class":177},[167,147656,181],{"class":177},[167,147658,105994],{"class":177},[167,147660,121356],{"class":177},[19,147662,147663,147664,147666],{},"Linux 上通常使用 ",[34,147665,283],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147668,147670],{"id":147669},"_14-pip包管理器","1.4 pip包管理器",[19,147672,147673,147675],{},[34,147674,331],{}," 用来安装第三方库。",[26,147677,147679],{"className":161,"code":147678,"language":163,"meta":32,"style":32},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[34,147680,147681,147690,147699,147707,147713],{"__ignoreMap":32},[167,147682,147683,147685,147687],{"class":169,"line":170},[167,147684,331],{"class":173},[167,147686,181],{"class":177},[167,147688,147689],{"class":177}," requests\n",[167,147691,147692,147694,147697],{"class":169,"line":191},[167,147693,331],{"class":173},[167,147695,147696],{"class":177}," uninstall",[167,147698,147689],{"class":177},[167,147700,147701,147703,147705],{"class":169,"line":205},[167,147702,331],{"class":173},[167,147704,119165],{"class":177},[167,147706,147689],{"class":177},[167,147708,147709,147711],{"class":169,"line":219},[167,147710,331],{"class":173},[167,147712,120546],{"class":177},[167,147714,147715,147717],{"class":169,"line":230},[167,147716,331],{"class":173},[167,147718,147719],{"class":177}," freeze\n",[19,147721,147722],{},"国内网络较慢时可以临时使用镜像：",[26,147724,147726],{"className":161,"code":147725,"language":163,"meta":32,"style":32},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,147727,147728],{"__ignoreMap":32},[167,147729,147730,147732,147734,147737,147739],{"class":169,"line":170},[167,147731,331],{"class":173},[167,147733,181],{"class":177},[167,147735,147736],{"class":177}," requests",[167,147738,28447],{"class":184},[167,147740,121319],{"class":177},[19,147742,147743],{},"常见第三方库：",[68,147745,147746,147755],{},[71,147747,147748],{},[74,147749,147750,147753],{},[77,147751,147752],{},"库",[77,147754,104287],{},[85,147756,147757,147765,147772,147780,147788,147796,147804],{},[74,147758,147759,147762],{},[90,147760,147761],{},"requests",[90,147763,147764],{},"网络请求",[74,147766,147767,147769],{},[90,147768,102610],{},[90,147770,147771],{},"数值计算",[74,147773,147774,147777],{},[90,147775,147776],{},"pandas",[90,147778,147779],{},"表格数据处理",[74,147781,147782,147785],{},[90,147783,147784],{},"matplotlib",[90,147786,147787],{},"绘图",[74,147789,147790,147793],{},[90,147791,147792],{},"pyecharts",[90,147794,147795],{},"ECharts 图表",[74,147797,147798,147801],{},[90,147799,147800],{},"flask",[90,147802,147803],{},"Web 后端",[74,147805,147806,147809],{},[90,147807,147808],{},"pytest",[90,147810,147811],{},"自动化测试",[14,147813,147815],{"id":147814},"_15-虚拟环境","1.5 虚拟环境",[19,147817,147818,147819,147822],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[34,147820,147821],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147824,147825],{},"创建虚拟环境：",[26,147827,147829],{"className":161,"code":147828,"language":163,"meta":32,"style":32},"python -m venv .venv\n",[34,147830,147831],{"__ignoreMap":32},[167,147832,147833,147835,147837,147839],{"class":169,"line":170},[167,147834,305],{"class":173},[167,147836,286],{"class":184},[167,147838,289],{"class":177},[167,147840,292],{"class":177},[19,147842,147843],{},"Windows 激活：",[26,147845,147847],{"className":161,"code":147846,"language":163,"meta":32,"style":32},".venv\\Scripts\\activate\n",[34,147848,147849],{"__ignoreMap":32},[167,147850,147851],{"class":169,"line":170},[167,147852,147846],{"class":173},[19,147854,147855],{},"macOS\u002FLinux 激活：",[26,147857,147859],{"className":161,"code":147858,"language":163,"meta":32,"style":32},"source .venv\u002Fbin\u002Factivate\n",[34,147860,147861],{"__ignoreMap":32},[167,147862,147863,147865],{"class":169,"line":170},[167,147864,297],{"class":184},[167,147866,300],{"class":177},[19,147868,147869],{},"退出虚拟环境：",[26,147871,147873],{"className":161,"code":147872,"language":163,"meta":32,"style":32},"deactivate\n",[34,147874,147875],{"__ignoreMap":32},[167,147876,147877],{"class":169,"line":170},[167,147878,147872],{"class":173},[19,147880,147881],{},"保存依赖：",[26,147883,147885],{"className":161,"code":147884,"language":163,"meta":32,"style":32},"pip freeze > requirements.txt\n",[34,147886,147887],{"__ignoreMap":32},[167,147888,147889,147891,147894,147896],{"class":169,"line":170},[167,147890,331],{"class":173},[167,147892,147893],{"class":177}," freeze",[167,147895,28241],{"class":731},[167,147897,147898],{"class":177}," requirements.txt\n",[19,147900,147901],{},"安装依赖：",[26,147903,147905],{"className":161,"code":147904,"language":163,"meta":32,"style":32},"pip install -r requirements.txt\n",[34,147906,147907],{"__ignoreMap":32},[167,147908,147909,147911,147913,147915],{"class":169,"line":170},[167,147910,331],{"class":173},[167,147912,181],{"class":177},[167,147914,121230],{"class":184},[167,147916,147898],{"class":177},[14,147918,147920],{"id":147919},"_16-开发工具","1.6 开发工具",[494,147922,147924],{"id":147923},"_161-pycharm","1.6.1 PyCharm",[19,147926,147927],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147929,123653],{},[40,147931,147932,147935,147938,147944,147947],{},[43,147933,147934],{},"New Project：创建项目。",[43,147936,147937],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[43,147939,147940,147941,127574],{},"New Python File：创建 ",[34,147942,147943],{},".py",[43,147945,147946],{},"Run：运行当前文件。",[43,147948,147949],{},"Debug：断点调试。",[494,147951,147953],{"id":147952},"_162-vs-code","1.6.2 VS Code",[19,147955,147956],{},"VS Code 轻量，适合后续多语言开发。",[19,147958,147959],{},"建议安装插件：",[40,147961,147962,147965,147968],{},[43,147963,147964],{},"Python。",[43,147966,147967],{},"Pylance。",[43,147969,147970],{},"Jupyter。",[19,147972,147973],{},"选择解释器：",[26,147975,147978],{"className":147976,"code":147977,"language":31,"meta":32},[29],"Ctrl + Shift + P -> Python: Select Interpreter\n",[34,147979,147977],{"__ignoreMap":32},[14,147981,147983],{"id":147982},"_17-第一个python程序","1.7 第一个Python程序",[19,147985,147986,147987,26640],{},"创建文件 ",[34,147988,147989],{},"hello.py",[26,147991,147993],{"className":723,"code":147992,"language":305,"meta":32,"style":32},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[34,147994,147995,148006],{"__ignoreMap":32},[167,147996,147997,147999,148001,148004],{"class":169,"line":170},[167,147998,1606],{"class":184},[167,148000,898],{"class":512},[167,148002,148003],{"class":177},"\"Hello World\"",[167,148005,873],{"class":512},[167,148007,148008,148010,148012,148015],{"class":169,"line":191},[167,148009,1606],{"class":184},[167,148011,898],{"class":512},[167,148013,148014],{"class":177},"\"你好，Python\"",[167,148016,873],{"class":512},[19,148018,148019],{},"在终端运行：",[26,148021,148023],{"className":161,"code":148022,"language":163,"meta":32,"style":32},"python hello.py\n",[34,148024,148025],{"__ignoreMap":32},[167,148026,148027,148029],{"class":169,"line":170},[167,148028,305],{"class":173},[167,148030,148031],{"class":177}," hello.py\n",[19,148033,148034],{},"或：",[26,148036,148038],{"className":161,"code":148037,"language":163,"meta":32,"style":32},"python3 hello.py\n",[34,148039,148040],{"__ignoreMap":32},[167,148041,148042,148044],{"class":169,"line":170},[167,148043,283],{"class":173},[167,148045,148031],{"class":177},[19,148047,148048],{},"输出：",[26,148050,148053],{"className":148051,"code":148052,"language":31,"meta":32},[29],"Hello World\n你好，Python\n",[34,148054,148052],{"__ignoreMap":32},[14,148056,148058],{"id":148057},"_18-print函数","1.8 print函数",[19,148060,148061,148064],{},[34,148062,148063],{},"print()"," 用来输出内容。",[26,148066,148068],{"className":723,"code":148067,"language":305,"meta":32,"style":32},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[34,148069,148070,148080,148090,148100],{"__ignoreMap":32},[167,148071,148072,148074,148076,148078],{"class":169,"line":170},[167,148073,1606],{"class":184},[167,148075,898],{"class":512},[167,148077,7874],{"class":177},[167,148079,873],{"class":512},[167,148081,148082,148084,148086,148088],{"class":169,"line":191},[167,148083,1606],{"class":184},[167,148085,898],{"class":512},[167,148087,981],{"class":184},[167,148089,873],{"class":512},[167,148091,148092,148094,148096,148098],{"class":169,"line":205},[167,148093,1606],{"class":184},[167,148095,898],{"class":512},[167,148097,2259],{"class":184},[167,148099,873],{"class":512},[167,148101,148102,148104,148106,148109,148111,148113],{"class":169,"line":219},[167,148103,1606],{"class":184},[167,148105,898],{"class":512},[167,148107,148108],{"class":177},"\"年龄:\"",[167,148110,14463],{"class":512},[167,148112,2850],{"class":184},[167,148114,873],{"class":512},[19,148116,148117],{},"多个内容用逗号隔开，默认中间加空格：",[26,148119,148121],{"className":723,"code":148120,"language":305,"meta":32,"style":32},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[34,148122,148123,148133,148143],{"__ignoreMap":32},[167,148124,148125,148128,148130],{"class":169,"line":170},[167,148126,148127],{"class":512},"name ",[167,148129,523],{"class":731},[167,148131,148132],{"class":177}," \"张三\"\n",[167,148134,148135,148138,148140],{"class":169,"line":191},[167,148136,148137],{"class":512},"age ",[167,148139,523],{"class":731},[167,148141,148142],{"class":184}," 18\n",[167,148144,148145,148147,148149,148152,148155,148157],{"class":169,"line":205},[167,148146,1606],{"class":184},[167,148148,898],{"class":512},[167,148150,148151],{"class":177},"\"姓名:\"",[167,148153,148154],{"class":512},", name, ",[167,148156,148108],{"class":177},[167,148158,148159],{"class":512},", age)\n",[19,148161,148162],{},"修改分隔符：",[26,148164,148166],{"className":723,"code":148165,"language":305,"meta":32,"style":32},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[34,148167,148168],{"__ignoreMap":32},[167,148169,148170,148172,148174,148177,148179,148181,148183,148185,148187,148190,148192,148194],{"class":169,"line":170},[167,148171,1606],{"class":184},[167,148173,898],{"class":512},[167,148175,148176],{"class":177},"\"2024\"",[167,148178,14463],{"class":512},[167,148180,56306],{"class":177},[167,148182,14463],{"class":512},[167,148184,56306],{"class":177},[167,148186,14463],{"class":512},[167,148188,148189],{"class":7246},"sep",[167,148191,523],{"class":731},[167,148193,34486],{"class":177},[167,148195,873],{"class":512},[19,148197,148198],{},"修改结尾符：",[26,148200,148202],{"className":723,"code":148201,"language":305,"meta":32,"style":32},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[34,148203,148204,148222],{"__ignoreMap":32},[167,148205,148206,148208,148210,148212,148214,148216,148218,148220],{"class":169,"line":170},[167,148207,1606],{"class":184},[167,148209,898],{"class":512},[167,148211,7874],{"class":177},[167,148213,14463],{"class":512},[167,148215,47801],{"class":7246},[167,148217,523],{"class":731},[167,148219,6391],{"class":177},[167,148221,873],{"class":512},[167,148223,148224,148226,148228,148231],{"class":169,"line":191},[167,148225,1606],{"class":184},[167,148227,898],{"class":512},[167,148229,148230],{"class":177},"\"python\"",[167,148232,873],{"class":512},[14,148234,148236],{"id":148235},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148238,148239],{},"交互运行适合临时验证：",[26,148241,148243],{"className":723,"code":148242,"language":305,"meta":32,"style":32},">>> 10 * 3\n30\n",[34,148244,148245,148255],{"__ignoreMap":32},[167,148246,148247,148249,148251,148253],{"class":169,"line":170},[167,148248,147444],{"class":731},[167,148250,4082],{"class":184},[167,148252,8548],{"class":731},[167,148254,121627],{"class":184},[167,148256,148257],{"class":169,"line":191},[167,148258,148259],{"class":184},"30\n",[19,148261,148262],{},"脚本运行适合保存程序：",[26,148264,148266],{"className":723,"code":148265,"language":305,"meta":32,"style":32},"price = 8\ncount = 5\nprint(price * count)\n",[34,148267,148268,148278,148287],{"__ignoreMap":32},[167,148269,148270,148273,148275],{"class":169,"line":170},[167,148271,148272],{"class":512},"price ",[167,148274,523],{"class":731},[167,148276,148277],{"class":184}," 8\n",[167,148279,148280,148283,148285],{"class":169,"line":191},[167,148281,148282],{"class":512},"count ",[167,148284,523],{"class":731},[167,148286,56417],{"class":184},[167,148288,148289,148291,148294,148296],{"class":169,"line":205},[167,148290,1606],{"class":184},[167,148292,148293],{"class":512},"(price ",[167,148295,2655],{"class":731},[167,148297,148298],{"class":512}," count)\n",[19,148300,148301],{},"实际学习中推荐：",[40,148303,148304,148307,148312],{},[43,148305,148306],{},"临时试一个语法，用交互模式。",[43,148308,148309,148310,127574],{},"写完整练习，用 ",[34,148311,147943],{},[43,148313,148314],{},"写项目，用独立目录和虚拟环境。",[14,148316,148318],{"id":148317},"_110-常见错误","1.10 常见错误",[494,148320,148322],{"id":148321},"_1101-命令找不到","1.10.1 命令找不到",[26,148324,148327],{"className":148325,"code":148326,"language":31,"meta":32},[29],"python: command not found\n",[34,148328,148326],{"__ignoreMap":32},[19,148330,148331],{},"原因：",[40,148333,148334,148337,148340],{},[43,148335,148336],{},"没安装 Python。",[43,148338,148339],{},"PATH 没配置。",[43,148341,148342,148343,423],{},"Linux\u002FmacOS 应该使用 ",[34,148344,283],{},[494,148346,148348],{"id":148347},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148350,148351],{},"不要把文件命名为：",[26,148353,148356],{"className":148354,"code":148355,"language":31,"meta":32},[29],"random.py\njson.py\ntime.py\nrequests.py\n",[34,148357,148355],{"__ignoreMap":32},[19,148359,148360],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[494,148362,148364],{"id":148363},"_1103-中文乱码","1.10.3 中文乱码",[19,148366,148367],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148369,148370],{},"如果读写文件出现乱码，要明确指定编码：",[26,148372,148374],{"className":723,"code":148373,"language":305,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[34,148375,148376,148410],{"__ignoreMap":32},[167,148377,148378,148380,148383,148385,148388,148390,148393,148395,148398,148400,148403,148405,148407],{"class":169,"line":170},[167,148379,109424],{"class":731},[167,148381,148382],{"class":184}," open",[167,148384,898],{"class":512},[167,148386,148387],{"class":177},"\"data.txt\"",[167,148389,14463],{"class":512},[167,148391,148392],{"class":177},"\"r\"",[167,148394,14463],{"class":512},[167,148396,148397],{"class":7246},"encoding",[167,148399,523],{"class":731},[167,148401,148402],{"class":177},"\"utf-8\"",[167,148404,15741],{"class":512},[167,148406,33388],{"class":731},[167,148408,148409],{"class":512}," f:\n",[167,148411,148412,148415,148417],{"class":169,"line":191},[167,148413,148414],{"class":512},"    content ",[167,148416,523],{"class":731},[167,148418,148419],{"class":512}," f.read()\n",[14,148421,148423],{"id":148422},"_111-本章练习","1.11 本章练习",[40,148425,148426,148429,148435],{},[43,148427,148428],{},"安装 Python，并在终端输出版本号。",[43,148430,148431,148432,148434],{},"新建 ",[34,148433,147989],{},"，输出自己的姓名、年龄、学习目标。",[43,148436,105957,148437,148439],{},[34,148438,148063],{}," 输出下面格式：",[26,148441,148444],{"className":148442,"code":148443,"language":31,"meta":32},[29],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[34,148445,148443],{"__ignoreMap":32},[40,148447,148448],{"start":219},[43,148449,105957,148450,148452],{},[34,148451,148189],{}," 输出日期：",[26,148454,148457],{"className":148455,"code":148456,"language":31,"meta":32},[29],"2024-10-10\n",[34,148458,148456],{"__ignoreMap":32},[40,148460,148461],{"start":230},[43,148462,105957,148463,148465,148466,148468],{},[34,148464,47801],{}," 让两次 ",[34,148467,148063],{}," 输出在同一行。",[2113,148470,148471],{},"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":32,"searchDepth":191,"depth":191,"links":148473},[148474,148475,148476,148481,148482,148483,148487,148488,148489,148490,148495],{"id":147356,"depth":191,"text":147357},{"id":147400,"depth":191,"text":147401},{"id":147501,"depth":191,"text":147502,"children":148477},[148478,148479,148480],{"id":147505,"depth":205,"text":147506},{"id":147560,"depth":205,"text":147561},{"id":147596,"depth":205,"text":147597},{"id":147669,"depth":191,"text":147670},{"id":147814,"depth":191,"text":147815},{"id":147919,"depth":191,"text":147920,"children":148484},[148485,148486],{"id":147923,"depth":205,"text":147924},{"id":147952,"depth":205,"text":147953},{"id":147982,"depth":191,"text":147983},{"id":148057,"depth":191,"text":148058},{"id":148235,"depth":191,"text":148236},{"id":148317,"depth":191,"text":148318,"children":148491},[148492,148493,148494],{"id":148321,"depth":205,"text":148322},{"id":148347,"depth":205,"text":148348},{"id":148363,"depth":205,"text":148364},{"id":148422,"depth":191,"text":148423},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147348,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148502,"title":148503,"body":148504,"description":25403,"extension":2140,"meta":150908,"navigation":740,"path":150909,"seo":150910,"stem":150911,"__hash__":150912},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148505,"toc":150893},[148506,148509,148513,148516,148519,148536,148539,148581,148584,148588,148591,148594,148631,148634,148668,148671,148763,148767,148781,148784,148811,148814,148818,148921,148928,148931,148948,148952,148959,149148,149151,149224,149228,149231,149315,149318,149350,149354,149558,149561,149565,149571,149673,149676,149932,149936,149939,149942,149956,149958,150144,150148,150510,150516,150520,150523,150647,150650,150829,150832,150836,150869,150873,150890],[10,148507,148503],{"id":148508},"_10-json与pyecharts折线图",[14,148510,148512],{"id":148511},"_101-数据可视化","10.1 数据可视化",[19,148514,148515],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148517,148518],{},"常见图表：",[40,148520,148521,148524,148527,148530,148533],{},[43,148522,148523],{},"折线图：看趋势。",[43,148525,148526],{},"柱状图：看分类对比。",[43,148528,148529],{},"饼图：看占比。",[43,148531,148532],{},"地图：看地域分布。",[43,148534,148535],{},"散点图：看两个变量之间的关系。",[19,148537,148538],{},"Python 可视化常用库：",[68,148540,148541,148549],{},[71,148542,148543],{},[74,148544,148545,148547],{},[77,148546,147752],{},[77,148548,25766],{},[85,148550,148551,148558,148566,148573],{},[74,148552,148553,148555],{},[90,148554,147784],{},[90,148556,148557],{},"基础、经典、可定制",[74,148559,148560,148563],{},[90,148561,148562],{},"seaborn",[90,148564,148565],{},"统计图表更美观",[74,148567,148568,148570],{},[90,148569,147792],{},[90,148571,148572],{},"生成交互式网页图表",[74,148574,148575,148578],{},[90,148576,148577],{},"plotly",[90,148579,148580],{},"交互图表能力强",[19,148582,148583],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148585,148587],{"id":148586},"_102-json回顾","10.2 JSON回顾",[19,148589,148590],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148592,148593],{},"Python 字典：",[26,148595,148597],{"className":723,"code":148596,"language":305,"meta":32,"style":32},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[34,148598,148599,148607,148618,148627],{"__ignoreMap":32},[167,148600,148601,148603,148605],{"class":169,"line":170},[167,148602,1141],{"class":512},[167,148604,523],{"class":731},[167,148606,17598],{"class":512},[167,148608,148609,148612,148614,148616],{"class":169,"line":191},[167,148610,148611],{"class":177},"    \"name\"",[167,148613,53435],{"class":512},[167,148615,71257],{"class":177},[167,148617,33471],{"class":512},[167,148619,148620,148623,148625],{"class":169,"line":205},[167,148621,148622],{"class":177},"    \"value\"",[167,148624,53435],{"class":512},[167,148626,99442],{"class":184},[167,148628,148629],{"class":169,"line":219},[167,148630,3630],{"class":512},[19,148632,148633],{},"JSON 字符串：",[26,148635,148638],{"className":148636,"code":148637,"language":147383,"meta":32,"style":32},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[34,148639,148640,148644,148655,148664],{"__ignoreMap":32},[167,148641,148642],{"class":169,"line":170},[167,148643,3611],{"class":512},[167,148645,148646,148649,148651,148653],{"class":169,"line":191},[167,148647,148648],{"class":184},"  \"name\"",[167,148650,53435],{"class":512},[167,148652,71257],{"class":177},[167,148654,33471],{"class":512},[167,148656,148657,148660,148662],{"class":169,"line":205},[167,148658,148659],{"class":184},"  \"value\"",[167,148661,53435],{"class":512},[167,148663,99442],{"class":184},[167,148665,148666],{"class":169,"line":219},[167,148667,3630],{"class":512},[19,148669,148670],{},"Python 与 JSON 的转换：",[26,148672,148674],{"className":723,"code":148673,"language":305,"meta":32,"style":32},"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",[34,148675,148676,148683,148687,148712,148716,148735,148742,148746,148756],{"__ignoreMap":32},[167,148677,148678,148680],{"class":169,"line":170},[167,148679,732],{"class":731},[167,148681,148682],{"class":512}," json\n",[167,148684,148685],{"class":169,"line":191},[167,148686,741],{"emptyLinePlaceholder":740},[167,148688,148689,148691,148693,148695,148697,148699,148701,148703,148706,148708,148710],{"class":169,"line":205},[167,148690,1141],{"class":512},[167,148692,523],{"class":731},[167,148694,6480],{"class":512},[167,148696,64668],{"class":177},[167,148698,53435],{"class":512},[167,148700,71257],{"class":177},[167,148702,14463],{"class":512},[167,148704,148705],{"class":177},"\"value\"",[167,148707,53435],{"class":512},[167,148709,981],{"class":184},[167,148711,3630],{"class":512},[167,148713,148714],{"class":169,"line":219},[167,148715,741],{"emptyLinePlaceholder":740},[167,148717,148718,148721,148723,148726,148729,148731,148733],{"class":169,"line":230},[167,148719,148720],{"class":512},"json_text ",[167,148722,523],{"class":731},[167,148724,148725],{"class":512}," json.dumps(data, ",[167,148727,148728],{"class":7246},"ensure_ascii",[167,148730,523],{"class":731},[167,148732,35989],{"class":184},[167,148734,873],{"class":512},[167,148736,148737,148739],{"class":169,"line":241},[167,148738,1606],{"class":184},[167,148740,148741],{"class":512},"(json_text)\n",[167,148743,148744],{"class":169,"line":261},[167,148745,741],{"emptyLinePlaceholder":740},[167,148747,148748,148751,148753],{"class":169,"line":773},[167,148749,148750],{"class":512},"new_data ",[167,148752,523],{"class":731},[167,148754,148755],{"class":512}," json.loads(json_text)\n",[167,148757,148758,148760],{"class":169,"line":779},[167,148759,1606],{"class":184},[167,148761,148762],{"class":512},"(new_data)\n",[14,148764,148766],{"id":148765},"_103-安装pyecharts","10.3 安装pyecharts",[26,148768,148770],{"className":161,"code":148769,"language":163,"meta":32,"style":32},"pip install pyecharts\n",[34,148771,148772],{"__ignoreMap":32},[167,148773,148774,148776,148778],{"class":169,"line":170},[167,148775,331],{"class":173},[167,148777,181],{"class":177},[167,148779,148780],{"class":177}," pyecharts\n",[19,148782,148783],{},"验证：",[26,148785,148787],{"className":723,"code":148786,"language":305,"meta":32,"style":32},"import pyecharts\n\nprint(pyecharts.__version__)\n",[34,148788,148789,148795,148799],{"__ignoreMap":32},[167,148790,148791,148793],{"class":169,"line":170},[167,148792,732],{"class":731},[167,148794,148780],{"class":512},[167,148796,148797],{"class":169,"line":191},[167,148798,741],{"emptyLinePlaceholder":740},[167,148800,148801,148803,148806,148809],{"class":169,"line":205},[167,148802,1606],{"class":184},[167,148804,148805],{"class":512},"(pyecharts.",[167,148807,148808],{"class":184},"__version__",[167,148810,873],{"class":512},[19,148812,148813],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148815,148817],{"id":148816},"_104-第一个折线图","10.4 第一个折线图",[26,148819,148821],{"className":723,"code":148820,"language":305,"meta":32,"style":32},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[34,148822,148823,148835,148839,148849,148879,148911],{"__ignoreMap":32},[167,148824,148825,148827,148830,148832],{"class":169,"line":170},[167,148826,32745],{"class":731},[167,148828,148829],{"class":512}," pyecharts.charts ",[167,148831,732],{"class":731},[167,148833,148834],{"class":512}," Line\n",[167,148836,148837],{"class":169,"line":191},[167,148838,741],{"emptyLinePlaceholder":740},[167,148840,148841,148844,148846],{"class":169,"line":205},[167,148842,148843],{"class":512},"line ",[167,148845,523],{"class":731},[167,148847,148848],{"class":512}," Line()\n",[167,148850,148851,148854,148857,148859,148862,148864,148867,148869,148872,148874,148877],{"class":169,"line":219},[167,148852,148853],{"class":512},"line.add_xaxis([",[167,148855,148856],{"class":177},"\"周一\"",[167,148858,14463],{"class":512},[167,148860,148861],{"class":177},"\"周二\"",[167,148863,14463],{"class":512},[167,148865,148866],{"class":177},"\"周三\"",[167,148868,14463],{"class":512},[167,148870,148871],{"class":177},"\"周四\"",[167,148873,14463],{"class":512},[167,148875,148876],{"class":177},"\"周五\"",[167,148878,6689],{"class":512},[167,148880,148881,148884,148887,148889,148891,148893,148895,148897,148899,148901,148904,148906,148909],{"class":169,"line":230},[167,148882,148883],{"class":512},"line.add_yaxis(",[167,148885,148886],{"class":177},"\"销售额\"",[167,148888,79506],{"class":512},[167,148890,981],{"class":184},[167,148892,14463],{"class":512},[167,148894,3017],{"class":184},[167,148896,14463],{"class":512},[167,148898,3062],{"class":184},[167,148900,14463],{"class":512},[167,148902,148903],{"class":184},"150",[167,148905,14463],{"class":512},[167,148907,148908],{"class":184},"180",[167,148910,6689],{"class":512},[167,148912,148913,148916,148919],{"class":169,"line":241},[167,148914,148915],{"class":512},"line.render(",[167,148917,148918],{"class":177},"\"line.html\"",[167,148920,873],{"class":512},[19,148922,148923,148924,148927],{},"运行后会生成 ",[34,148925,148926],{},"line.html","，用浏览器打开即可看到图表。",[19,148929,148930],{},"核心步骤：",[40,148932,148933,148936,148939,148942,148945],{},[43,148934,148935],{},"导入图表类。",[43,148937,148938],{},"创建图表对象。",[43,148940,148941],{},"添加 x 轴数据。",[43,148943,148944],{},"添加 y 轴数据。",[43,148946,148947],{},"渲染为 HTML。",[14,148949,148951],{"id":148950},"_105-全局配置","10.5 全局配置",[19,148953,148954,148955,148958],{},"常用配置在 ",[34,148956,148957],{},"pyecharts.options"," 中。",[26,148960,148962],{"className":723,"code":148961,"language":305,"meta":32,"style":32},"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",[34,148963,148964,148981,148991,148995,149003,149027,149055,149060,149079,149098,149116,149136,149140],{"__ignoreMap":32},[167,148965,148966,148968,148971,148973,148976,148978],{"class":169,"line":170},[167,148967,32745],{"class":731},[167,148969,148970],{"class":512}," pyecharts ",[167,148972,732],{"class":731},[167,148974,148975],{"class":512}," options ",[167,148977,33388],{"class":731},[167,148979,148980],{"class":512}," opts\n",[167,148982,148983,148985,148987,148989],{"class":169,"line":191},[167,148984,32745],{"class":731},[167,148986,148829],{"class":512},[167,148988,732],{"class":731},[167,148990,148834],{"class":512},[167,148992,148993],{"class":169,"line":205},[167,148994,741],{"emptyLinePlaceholder":740},[167,148996,148997,148999,149001],{"class":169,"line":219},[167,148998,148843],{"class":512},[167,149000,523],{"class":731},[167,149002,148848],{"class":512},[167,149004,149005,149007,149009,149011,149013,149015,149017,149019,149021,149023,149025],{"class":169,"line":230},[167,149006,148853],{"class":512},[167,149008,148856],{"class":177},[167,149010,14463],{"class":512},[167,149012,148861],{"class":177},[167,149014,14463],{"class":512},[167,149016,148866],{"class":177},[167,149018,14463],{"class":512},[167,149020,148871],{"class":177},[167,149022,14463],{"class":512},[167,149024,148876],{"class":177},[167,149026,6689],{"class":512},[167,149028,149029,149031,149033,149035,149037,149039,149041,149043,149045,149047,149049,149051,149053],{"class":169,"line":241},[167,149030,148883],{"class":512},[167,149032,148886],{"class":177},[167,149034,79506],{"class":512},[167,149036,981],{"class":184},[167,149038,14463],{"class":512},[167,149040,3017],{"class":184},[167,149042,14463],{"class":512},[167,149044,3062],{"class":184},[167,149046,14463],{"class":512},[167,149048,148903],{"class":184},[167,149050,14463],{"class":512},[167,149052,148908],{"class":184},[167,149054,6689],{"class":512},[167,149056,149057],{"class":169,"line":261},[167,149058,149059],{"class":512},"line.set_global_opts(\n",[167,149061,149062,149065,149067,149070,149072,149074,149077],{"class":169,"line":773},[167,149063,149064],{"class":7246},"    title_opts",[167,149066,523],{"class":731},[167,149068,149069],{"class":512},"opts.TitleOpts(",[167,149071,53405],{"class":7246},[167,149073,523],{"class":731},[167,149075,149076],{"class":177},"\"一周销售额\"",[167,149078,40048],{"class":512},[167,149080,149081,149084,149086,149089,149091,149093,149096],{"class":169,"line":779},[167,149082,149083],{"class":7246},"    xaxis_opts",[167,149085,523],{"class":731},[167,149087,149088],{"class":512},"opts.AxisOpts(",[167,149090,81797],{"class":7246},[167,149092,523],{"class":731},[167,149094,149095],{"class":177},"\"日期\"",[167,149097,40048],{"class":512},[167,149099,149100,149103,149105,149107,149109,149111,149114],{"class":169,"line":785},[167,149101,149102],{"class":7246},"    yaxis_opts",[167,149104,523],{"class":731},[167,149106,149088],{"class":512},[167,149108,81797],{"class":7246},[167,149110,523],{"class":731},[167,149112,149113],{"class":177},"\"金额\"",[167,149115,40048],{"class":512},[167,149117,149118,149121,149123,149126,149129,149131,149134],{"class":169,"line":790},[167,149119,149120],{"class":7246},"    tooltip_opts",[167,149122,523],{"class":731},[167,149124,149125],{"class":512},"opts.TooltipOpts(",[167,149127,149128],{"class":7246},"trigger",[167,149130,523],{"class":731},[167,149132,149133],{"class":177},"\"axis\"",[167,149135,40048],{"class":512},[167,149137,149138],{"class":169,"line":796},[167,149139,873],{"class":512},[167,149141,149142,149144,149146],{"class":169,"line":802},[167,149143,148915],{"class":512},[167,149145,148918],{"class":177},[167,149147,873],{"class":512},[19,149149,149150],{},"常见全局配置：",[68,149152,149153,149162],{},[71,149154,149155],{},[74,149156,149157,149160],{},[77,149158,149159],{},"配置",[77,149161,104287],{},[85,149163,149164,149174,149184,149194,149204,149214],{},[74,149165,149166,149171],{},[90,149167,149168],{},[34,149169,149170],{},"TitleOpts",[90,149172,149173],{},"标题",[74,149175,149176,149181],{},[90,149177,149178],{},[34,149179,149180],{},"LegendOpts",[90,149182,149183],{},"图例",[74,149185,149186,149191],{},[90,149187,149188],{},[34,149189,149190],{},"TooltipOpts",[90,149192,149193],{},"提示框",[74,149195,149196,149201],{},[90,149197,149198],{},[34,149199,149200],{},"AxisOpts",[90,149202,149203],{},"坐标轴",[74,149205,149206,149211],{},[90,149207,149208],{},[34,149209,149210],{},"VisualMapOpts",[90,149212,149213],{},"视觉映射",[74,149215,149216,149221],{},[90,149217,149218],{},[34,149219,149220],{},"DataZoomOpts",[90,149222,149223],{},"区域缩放",[14,149225,149227],{"id":149226},"_106-系列配置","10.6 系列配置",[19,149229,149230],{},"系列配置作用于某一组数据。",[26,149232,149234],{"className":723,"code":149233,"language":305,"meta":32,"style":32},"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",[34,149235,149236,149241,149252,149281,149292,149311],{"__ignoreMap":32},[167,149237,149238],{"class":169,"line":170},[167,149239,149240],{"class":512},"line.add_yaxis(\n",[167,149242,149243,149246,149248,149250],{"class":169,"line":191},[167,149244,149245],{"class":7246},"    series_name",[167,149247,523],{"class":731},[167,149249,148886],{"class":177},[167,149251,33471],{"class":512},[167,149253,149254,149257,149259,149261,149263,149265,149267,149269,149271,149273,149275,149277,149279],{"class":169,"line":205},[167,149255,149256],{"class":7246},"    y_axis",[167,149258,523],{"class":731},[167,149260,3090],{"class":512},[167,149262,981],{"class":184},[167,149264,14463],{"class":512},[167,149266,3017],{"class":184},[167,149268,14463],{"class":512},[167,149270,3062],{"class":184},[167,149272,14463],{"class":512},[167,149274,148903],{"class":184},[167,149276,14463],{"class":512},[167,149278,148908],{"class":184},[167,149280,89822],{"class":512},[167,149282,149283,149286,149288,149290],{"class":169,"line":219},[167,149284,149285],{"class":7246},"    is_smooth",[167,149287,523],{"class":731},[167,149289,33481],{"class":184},[167,149291,33471],{"class":512},[167,149293,149294,149297,149299,149302,149305,149307,149309],{"class":169,"line":230},[167,149295,149296],{"class":7246},"    label_opts",[167,149298,523],{"class":731},[167,149300,149301],{"class":512},"opts.LabelOpts(",[167,149303,149304],{"class":7246},"is_show",[167,149306,523],{"class":731},[167,149308,33481],{"class":184},[167,149310,40048],{"class":512},[167,149312,149313],{"class":169,"line":241},[167,149314,873],{"class":512},[19,149316,149317],{},"常用参数：",[40,149319,149320,149326,149332,149338,149344],{},[43,149321,149322,149325],{},[34,149323,149324],{},"series_name","：系列名称。",[43,149327,149328,149331],{},[34,149329,149330],{},"y_axis","：y 轴数据。",[43,149333,149334,149337],{},[34,149335,149336],{},"is_smooth","：是否平滑曲线。",[43,149339,149340,149343],{},[34,149341,149342],{},"label_opts","：标签配置。",[43,149345,149346,149349],{},[34,149347,149348],{},"symbol_size","：标记点大小。",[14,149351,149353],{"id":149352},"_107-多条折线","10.7 多条折线",[26,149355,149357],{"className":723,"code":149356,"language":305,"meta":32,"style":32},"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",[34,149358,149359,149373,149383,149387,149416,149420,149428,149433,149471,149508,149512,149529,149545,149549],{"__ignoreMap":32},[167,149360,149361,149363,149365,149367,149369,149371],{"class":169,"line":170},[167,149362,32745],{"class":731},[167,149364,148970],{"class":512},[167,149366,732],{"class":731},[167,149368,148975],{"class":512},[167,149370,33388],{"class":731},[167,149372,148980],{"class":512},[167,149374,149375,149377,149379,149381],{"class":169,"line":191},[167,149376,32745],{"class":731},[167,149378,148829],{"class":512},[167,149380,732],{"class":731},[167,149382,148834],{"class":512},[167,149384,149385],{"class":169,"line":205},[167,149386,741],{"emptyLinePlaceholder":740},[167,149388,149389,149392,149394,149396,149398,149400,149402,149404,149406,149408,149410,149412,149414],{"class":169,"line":219},[167,149390,149391],{"class":512},"dates ",[167,149393,523],{"class":731},[167,149395,54221],{"class":512},[167,149397,148856],{"class":177},[167,149399,14463],{"class":512},[167,149401,148861],{"class":177},[167,149403,14463],{"class":512},[167,149405,148866],{"class":177},[167,149407,14463],{"class":512},[167,149409,148871],{"class":177},[167,149411,14463],{"class":512},[167,149413,148876],{"class":177},[167,149415,35249],{"class":512},[167,149417,149418],{"class":169,"line":230},[167,149419,741],{"emptyLinePlaceholder":740},[167,149421,149422,149424,149426],{"class":169,"line":241},[167,149423,148843],{"class":512},[167,149425,523],{"class":731},[167,149427,148848],{"class":512},[167,149429,149430],{"class":169,"line":261},[167,149431,149432],{"class":512},"line.add_xaxis(dates)\n",[167,149434,149435,149437,149440,149442,149444,149446,149449,149451,149453,149455,149457,149459,149461,149463,149465,149467,149469],{"class":169,"line":773},[167,149436,148883],{"class":512},[167,149438,149439],{"class":177},"\"线上销售\"",[167,149441,79506],{"class":512},[167,149443,981],{"class":184},[167,149445,14463],{"class":512},[167,149447,149448],{"class":184},"130",[167,149450,14463],{"class":512},[167,149452,3017],{"class":184},[167,149454,14463],{"class":512},[167,149456,23074],{"class":184},[167,149458,14463],{"class":512},[167,149460,3776],{"class":184},[167,149462,113793],{"class":512},[167,149464,149336],{"class":7246},[167,149466,523],{"class":731},[167,149468,33481],{"class":184},[167,149470,873],{"class":512},[167,149472,149473,149475,149478,149480,149482,149484,149486,149488,149490,149492,149494,149496,149498,149500,149502,149504,149506],{"class":169,"line":779},[167,149474,148883],{"class":512},[167,149476,149477],{"class":177},"\"线下销售\"",[167,149479,79506],{"class":512},[167,149481,2812],{"class":184},[167,149483,14463],{"class":512},[167,149485,3062],{"class":184},[167,149487,14463],{"class":512},[167,149489,981],{"class":184},[167,149491,14463],{"class":512},[167,149493,3017],{"class":184},[167,149495,14463],{"class":512},[167,149497,148903],{"class":184},[167,149499,113793],{"class":512},[167,149501,149336],{"class":7246},[167,149503,523],{"class":731},[167,149505,33481],{"class":184},[167,149507,873],{"class":512},[167,149509,149510],{"class":169,"line":785},[167,149511,149059],{"class":512},[167,149513,149514,149516,149518,149520,149522,149524,149527],{"class":169,"line":790},[167,149515,149064],{"class":7246},[167,149517,523],{"class":731},[167,149519,149069],{"class":512},[167,149521,53405],{"class":7246},[167,149523,523],{"class":731},[167,149525,149526],{"class":177},"\"线上线下销售趋势\"",[167,149528,40048],{"class":512},[167,149530,149531,149533,149535,149537,149539,149541,149543],{"class":169,"line":796},[167,149532,149120],{"class":7246},[167,149534,523],{"class":731},[167,149536,149125],{"class":512},[167,149538,149128],{"class":7246},[167,149540,523],{"class":731},[167,149542,149133],{"class":177},[167,149544,40048],{"class":512},[167,149546,149547],{"class":169,"line":802},[167,149548,873],{"class":512},[167,149550,149551,149553,149556],{"class":169,"line":808},[167,149552,148915],{"class":512},[167,149554,149555],{"class":177},"\"sales.html\"",[167,149557,873],{"class":512},[19,149559,149560],{},"多条折线适合比较不同指标或不同地区。",[14,149562,149564],{"id":149563},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149566,149567,149568,26640],{},"假设 ",[34,149569,149570],{},"sales.json",[26,149572,149574],{"className":148636,"code":149573,"language":147383,"meta":32,"style":32},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[34,149575,149576,149581,149613,149641,149669],{"__ignoreMap":32},[167,149577,149578],{"class":169,"line":170},[167,149579,149580],{"class":512},"[\n",[167,149582,149583,149586,149589,149591,149593,149595,149598,149600,149602,149604,149607,149609,149611],{"class":169,"line":191},[167,149584,149585],{"class":512},"  {",[167,149587,149588],{"class":184},"\"date\"",[167,149590,53435],{"class":512},[167,149592,148856],{"class":177},[167,149594,14463],{"class":512},[167,149596,149597],{"class":184},"\"online\"",[167,149599,53435],{"class":512},[167,149601,981],{"class":184},[167,149603,14463],{"class":512},[167,149605,149606],{"class":184},"\"offline\"",[167,149608,53435],{"class":512},[167,149610,2812],{"class":184},[167,149612,6962],{"class":512},[167,149614,149615,149617,149619,149621,149623,149625,149627,149629,149631,149633,149635,149637,149639],{"class":169,"line":205},[167,149616,149585],{"class":512},[167,149618,149588],{"class":184},[167,149620,53435],{"class":512},[167,149622,148861],{"class":177},[167,149624,14463],{"class":512},[167,149626,149597],{"class":184},[167,149628,53435],{"class":512},[167,149630,149448],{"class":184},[167,149632,14463],{"class":512},[167,149634,149606],{"class":184},[167,149636,53435],{"class":512},[167,149638,3062],{"class":184},[167,149640,6962],{"class":512},[167,149642,149643,149645,149647,149649,149651,149653,149655,149657,149659,149661,149663,149665,149667],{"class":169,"line":219},[167,149644,149585],{"class":512},[167,149646,149588],{"class":184},[167,149648,53435],{"class":512},[167,149650,148866],{"class":177},[167,149652,14463],{"class":512},[167,149654,149597],{"class":184},[167,149656,53435],{"class":512},[167,149658,3017],{"class":184},[167,149660,14463],{"class":512},[167,149662,149606],{"class":184},[167,149664,53435],{"class":512},[167,149666,981],{"class":184},[167,149668,3630],{"class":512},[167,149670,149671],{"class":169,"line":230},[167,149672,35249],{"class":512},[19,149674,149675],{},"读取并绘图：",[26,149677,149679],{"className":723,"code":149678,"language":305,"meta":32,"style":32},"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",[34,149680,149681,149687,149701,149711,149715,149747,149760,149764,149772,149781,149790,149794,149806,149815,149824,149833,149837,149845,149849,149866,149883,149887,149904,149920,149924],{"__ignoreMap":32},[167,149682,149683,149685],{"class":169,"line":170},[167,149684,732],{"class":731},[167,149686,148682],{"class":512},[167,149688,149689,149691,149693,149695,149697,149699],{"class":169,"line":191},[167,149690,32745],{"class":731},[167,149692,148970],{"class":512},[167,149694,732],{"class":731},[167,149696,148975],{"class":512},[167,149698,33388],{"class":731},[167,149700,148980],{"class":512},[167,149702,149703,149705,149707,149709],{"class":169,"line":205},[167,149704,32745],{"class":731},[167,149706,148829],{"class":512},[167,149708,732],{"class":731},[167,149710,148834],{"class":512},[167,149712,149713],{"class":169,"line":219},[167,149714,741],{"emptyLinePlaceholder":740},[167,149716,149717,149719,149721,149723,149726,149728,149730,149732,149734,149736,149738,149740,149742,149745],{"class":169,"line":230},[167,149718,109424],{"class":731},[167,149720,148382],{"class":184},[167,149722,898],{"class":512},[167,149724,149725],{"class":177},"\"sales.json\"",[167,149727,14463],{"class":512},[167,149729,148392],{"class":177},[167,149731,14463],{"class":512},[167,149733,148397],{"class":7246},[167,149735,523],{"class":731},[167,149737,148402],{"class":177},[167,149739,15741],{"class":512},[167,149741,33388],{"class":731},[167,149743,149744],{"class":7246}," file",[167,149746,857],{"class":512},[167,149748,149749,149751,149753,149756,149758],{"class":169,"line":241},[167,149750,879],{"class":512},[167,149752,523],{"class":731},[167,149754,149755],{"class":512}," json.load(",[167,149757,47354],{"class":7246},[167,149759,873],{"class":512},[167,149761,149762],{"class":169,"line":261},[167,149763,741],{"emptyLinePlaceholder":740},[167,149765,149766,149768,149770],{"class":169,"line":773},[167,149767,149391],{"class":512},[167,149769,523],{"class":731},[167,149771,53834],{"class":512},[167,149773,149774,149777,149779],{"class":169,"line":779},[167,149775,149776],{"class":512},"online_sales ",[167,149778,523],{"class":731},[167,149780,53834],{"class":512},[167,149782,149783,149786,149788],{"class":169,"line":785},[167,149784,149785],{"class":512},"offline_sales ",[167,149787,523],{"class":731},[167,149789,53834],{"class":512},[167,149791,149792],{"class":169,"line":790},[167,149793,741],{"emptyLinePlaceholder":740},[167,149795,149796,149798,149801,149803],{"class":169,"line":796},[167,149797,1168],{"class":731},[167,149799,149800],{"class":512}," item ",[167,149802,973],{"class":731},[167,149804,149805],{"class":512}," data:\n",[167,149807,149808,149811,149813],{"class":169,"line":802},[167,149809,149810],{"class":512},"    dates.append(item[",[167,149812,149588],{"class":177},[167,149814,6689],{"class":512},[167,149816,149817,149820,149822],{"class":169,"line":808},[167,149818,149819],{"class":512},"    online_sales.append(item[",[167,149821,149597],{"class":177},[167,149823,6689],{"class":512},[167,149825,149826,149829,149831],{"class":169,"line":814},[167,149827,149828],{"class":512},"    offline_sales.append(item[",[167,149830,149606],{"class":177},[167,149832,6689],{"class":512},[167,149834,149835],{"class":169,"line":820},[167,149836,741],{"emptyLinePlaceholder":740},[167,149838,149839,149841,149843],{"class":169,"line":826},[167,149840,148843],{"class":512},[167,149842,523],{"class":731},[167,149844,148848],{"class":512},[167,149846,149847],{"class":169,"line":832},[167,149848,149432],{"class":512},[167,149850,149851,149853,149855,149858,149860,149862,149864],{"class":169,"line":837},[167,149852,148883],{"class":512},[167,149854,149439],{"class":177},[167,149856,149857],{"class":512},", online_sales, ",[167,149859,149336],{"class":7246},[167,149861,523],{"class":731},[167,149863,33481],{"class":184},[167,149865,873],{"class":512},[167,149867,149868,149870,149872,149875,149877,149879,149881],{"class":169,"line":842},[167,149869,148883],{"class":512},[167,149871,149477],{"class":177},[167,149873,149874],{"class":512},", offline_sales, ",[167,149876,149336],{"class":7246},[167,149878,523],{"class":731},[167,149880,33481],{"class":184},[167,149882,873],{"class":512},[167,149884,149885],{"class":169,"line":860},[167,149886,149059],{"class":512},[167,149888,149889,149891,149893,149895,149897,149899,149902],{"class":169,"line":876},[167,149890,149064],{"class":7246},[167,149892,523],{"class":731},[167,149894,149069],{"class":512},[167,149896,53405],{"class":7246},[167,149898,523],{"class":731},[167,149900,149901],{"class":177},"\"销售趋势\"",[167,149903,40048],{"class":512},[167,149905,149906,149908,149910,149912,149914,149916,149918],{"class":169,"line":887},[167,149907,149120],{"class":7246},[167,149909,523],{"class":731},[167,149911,149125],{"class":512},[167,149913,149128],{"class":7246},[167,149915,523],{"class":731},[167,149917,149133],{"class":177},[167,149919,40048],{"class":512},[167,149921,149922],{"class":169,"line":892},[167,149923,873],{"class":512},[167,149925,149926,149928,149930],{"class":169,"line":907},[167,149927,148915],{"class":512},[167,149929,149555],{"class":177},[167,149931,873],{"class":512},[14,149933,149935],{"id":149934},"_109-数据清洗","10.9 数据清洗",[19,149937,149938],{},"真实数据经常不整齐，需要清洗。",[19,149940,149941],{},"常见问题：",[40,149943,149944,149947,149950,149953],{},[43,149945,149946],{},"数字是字符串。",[43,149948,149949],{},"字段缺失。",[43,149951,149952],{},"空值。",[43,149954,149955],{},"日期格式不统一。",[19,149957,17161],{},[26,149959,149961],{"className":723,"code":149960,"language":305,"meta":32,"style":32},"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",[34,149962,149963,149972,149995,150015,150036,150040,150044,150052,150061,150065,150076,150090,150099,150104,150108,150116,150126,150130,150137],{"__ignoreMap":32},[167,149964,149965,149968,149970],{"class":169,"line":170},[167,149966,149967],{"class":512},"raw_data ",[167,149969,523],{"class":731},[167,149971,57436],{"class":512},[167,149973,149974,149977,149979,149981,149983,149985,149988,149990,149993],{"class":169,"line":191},[167,149975,149976],{"class":512},"    {",[167,149978,149588],{"class":177},[167,149980,53435],{"class":512},[167,149982,148856],{"class":177},[167,149984,14463],{"class":512},[167,149986,149987],{"class":177},"\"sales\"",[167,149989,53435],{"class":512},[167,149991,149992],{"class":177},"\"100\"",[167,149994,6962],{"class":512},[167,149996,149997,149999,150001,150003,150005,150007,150009,150011,150013],{"class":169,"line":205},[167,149998,149976],{"class":512},[167,150000,149588],{"class":177},[167,150002,53435],{"class":512},[167,150004,148861],{"class":177},[167,150006,14463],{"class":512},[167,150008,149987],{"class":177},[167,150010,53435],{"class":512},[167,150012,9682],{"class":177},[167,150014,6962],{"class":512},[167,150016,150017,150019,150021,150023,150025,150027,150029,150031,150034],{"class":169,"line":219},[167,150018,149976],{"class":512},[167,150020,149588],{"class":177},[167,150022,53435],{"class":512},[167,150024,148866],{"class":177},[167,150026,14463],{"class":512},[167,150028,149987],{"class":177},[167,150030,53435],{"class":512},[167,150032,150033],{"class":177},"\"120\"",[167,150035,6962],{"class":512},[167,150037,150038],{"class":169,"line":230},[167,150039,35249],{"class":512},[167,150041,150042],{"class":169,"line":241},[167,150043,741],{"emptyLinePlaceholder":740},[167,150045,150046,150048,150050],{"class":169,"line":261},[167,150047,149391],{"class":512},[167,150049,523],{"class":731},[167,150051,53834],{"class":512},[167,150053,150054,150057,150059],{"class":169,"line":773},[167,150055,150056],{"class":512},"sales ",[167,150058,523],{"class":731},[167,150060,53834],{"class":512},[167,150062,150063],{"class":169,"line":779},[167,150064,741],{"emptyLinePlaceholder":740},[167,150066,150067,150069,150071,150073],{"class":169,"line":785},[167,150068,1168],{"class":731},[167,150070,149800],{"class":512},[167,150072,973],{"class":731},[167,150074,150075],{"class":512}," raw_data:\n",[167,150077,150078,150081,150083,150086,150088],{"class":169,"line":790},[167,150079,150080],{"class":512},"    value ",[167,150082,523],{"class":731},[167,150084,150085],{"class":512}," item.get(",[167,150087,149987],{"class":177},[167,150089,873],{"class":512},[167,150091,150092,150094,150096],{"class":169,"line":796},[167,150093,5136],{"class":731},[167,150095,40931],{"class":731},[167,150097,150098],{"class":512}," value:\n",[167,150100,150101],{"class":169,"line":802},[167,150102,150103],{"class":731},"        continue\n",[167,150105,150106],{"class":169,"line":808},[167,150107,741],{"emptyLinePlaceholder":740},[167,150109,150110,150112,150114],{"class":169,"line":814},[167,150111,149810],{"class":512},[167,150113,149588],{"class":177},[167,150115,6689],{"class":512},[167,150117,150118,150121,150123],{"class":169,"line":820},[167,150119,150120],{"class":512},"    sales.append(",[167,150122,2216],{"class":184},[167,150124,150125],{"class":512},"(value))\n",[167,150127,150128],{"class":169,"line":826},[167,150129,741],{"emptyLinePlaceholder":740},[167,150131,150132,150134],{"class":169,"line":832},[167,150133,1606],{"class":184},[167,150135,150136],{"class":512},"(dates)\n",[167,150138,150139,150141],{"class":169,"line":837},[167,150140,1606],{"class":184},[167,150142,150143],{"class":512},"(sales)\n",[14,150145,150147],{"id":150146},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,150149,150151],{"className":723,"code":150150,"language":305,"meta":32,"style":32},"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",[34,150152,150153,150167,150177,150181,150189,150210,150232,150254,150276,150298,150302,150306,150328,150349,150353,150361,150365,150369,150379,150388,150398,150414,150418,150422,150439,150455,150471,150487,150497,150501],{"__ignoreMap":32},[167,150154,150155,150157,150159,150161,150163,150165],{"class":169,"line":170},[167,150156,32745],{"class":731},[167,150158,148970],{"class":512},[167,150160,732],{"class":731},[167,150162,148975],{"class":512},[167,150164,33388],{"class":731},[167,150166,148980],{"class":512},[167,150168,150169,150171,150173,150175],{"class":169,"line":191},[167,150170,32745],{"class":731},[167,150172,148829],{"class":512},[167,150174,732],{"class":731},[167,150176,148834],{"class":512},[167,150178,150179],{"class":169,"line":205},[167,150180,741],{"emptyLinePlaceholder":740},[167,150182,150183,150185,150187],{"class":169,"line":219},[167,150184,150056],{"class":512},[167,150186,523],{"class":731},[167,150188,57436],{"class":512},[167,150190,150191,150193,150195,150197,150200,150202,150204,150206,150208],{"class":169,"line":230},[167,150192,149976],{"class":512},[167,150194,149588],{"class":177},[167,150196,53435],{"class":512},[167,150198,150199],{"class":177},"\"2024-10-01\"",[167,150201,14463],{"class":512},[167,150203,86070],{"class":177},[167,150205,53435],{"class":512},[167,150207,94009],{"class":184},[167,150209,6962],{"class":512},[167,150211,150212,150214,150216,150218,150221,150223,150225,150227,150230],{"class":169,"line":241},[167,150213,149976],{"class":512},[167,150215,149588],{"class":177},[167,150217,53435],{"class":512},[167,150219,150220],{"class":177},"\"2024-10-02\"",[167,150222,14463],{"class":512},[167,150224,86070],{"class":177},[167,150226,53435],{"class":512},[167,150228,150229],{"class":184},"1800",[167,150231,6962],{"class":512},[167,150233,150234,150236,150238,150240,150243,150245,150247,150249,150252],{"class":169,"line":261},[167,150235,149976],{"class":512},[167,150237,149588],{"class":177},[167,150239,53435],{"class":512},[167,150241,150242],{"class":177},"\"2024-10-03\"",[167,150244,14463],{"class":512},[167,150246,86070],{"class":177},[167,150248,53435],{"class":512},[167,150250,150251],{"class":184},"1500",[167,150253,6962],{"class":512},[167,150255,150256,150258,150260,150262,150265,150267,150269,150271,150274],{"class":169,"line":773},[167,150257,149976],{"class":512},[167,150259,149588],{"class":177},[167,150261,53435],{"class":512},[167,150263,150264],{"class":177},"\"2024-10-04\"",[167,150266,14463],{"class":512},[167,150268,86070],{"class":177},[167,150270,53435],{"class":512},[167,150272,150273],{"class":184},"2100",[167,150275,6962],{"class":512},[167,150277,150278,150280,150282,150284,150287,150289,150291,150293,150296],{"class":169,"line":779},[167,150279,149976],{"class":512},[167,150281,149588],{"class":177},[167,150283,53435],{"class":512},[167,150285,150286],{"class":177},"\"2024-10-05\"",[167,150288,14463],{"class":512},[167,150290,86070],{"class":177},[167,150292,53435],{"class":512},[167,150294,150295],{"class":184},"2600",[167,150297,6962],{"class":512},[167,150299,150300],{"class":169,"line":785},[167,150301,35249],{"class":512},[167,150303,150304],{"class":169,"line":790},[167,150305,741],{"emptyLinePlaceholder":740},[167,150307,150308,150310,150312,150315,150317,150319,150321,150323,150325],{"class":169,"line":796},[167,150309,149391],{"class":512},[167,150311,523],{"class":731},[167,150313,150314],{"class":512}," [item[",[167,150316,149588],{"class":177},[167,150318,6475],{"class":512},[167,150320,1168],{"class":731},[167,150322,149800],{"class":512},[167,150324,973],{"class":731},[167,150326,150327],{"class":512}," sales]\n",[167,150329,150330,150333,150335,150337,150339,150341,150343,150345,150347],{"class":169,"line":802},[167,150331,150332],{"class":512},"amounts ",[167,150334,523],{"class":731},[167,150336,150314],{"class":512},[167,150338,86070],{"class":177},[167,150340,6475],{"class":512},[167,150342,1168],{"class":731},[167,150344,149800],{"class":512},[167,150346,973],{"class":731},[167,150348,150327],{"class":512},[167,150350,150351],{"class":169,"line":808},[167,150352,741],{"emptyLinePlaceholder":740},[167,150354,150355,150357,150359],{"class":169,"line":814},[167,150356,148843],{"class":512},[167,150358,523],{"class":731},[167,150360,148848],{"class":512},[167,150362,150363],{"class":169,"line":820},[167,150364,149432],{"class":512},[167,150366,150367],{"class":169,"line":826},[167,150368,149240],{"class":512},[167,150370,150371,150373,150375,150377],{"class":169,"line":832},[167,150372,149245],{"class":7246},[167,150374,523],{"class":731},[167,150376,148886],{"class":177},[167,150378,33471],{"class":512},[167,150380,150381,150383,150385],{"class":169,"line":837},[167,150382,149256],{"class":7246},[167,150384,523],{"class":731},[167,150386,150387],{"class":512},"amounts,\n",[167,150389,150390,150392,150394,150396],{"class":169,"line":842},[167,150391,149285],{"class":7246},[167,150393,523],{"class":731},[167,150395,33481],{"class":184},[167,150397,33471],{"class":512},[167,150399,150400,150402,150404,150406,150408,150410,150412],{"class":169,"line":860},[167,150401,149296],{"class":7246},[167,150403,523],{"class":731},[167,150405,149301],{"class":512},[167,150407,149304],{"class":7246},[167,150409,523],{"class":731},[167,150411,33481],{"class":184},[167,150413,40048],{"class":512},[167,150415,150416],{"class":169,"line":876},[167,150417,873],{"class":512},[167,150419,150420],{"class":169,"line":887},[167,150421,149059],{"class":512},[167,150423,150424,150426,150428,150430,150432,150434,150437],{"class":169,"line":892},[167,150425,149064],{"class":7246},[167,150427,523],{"class":731},[167,150429,149069],{"class":512},[167,150431,53405],{"class":7246},[167,150433,523],{"class":731},[167,150435,150436],{"class":177},"\"每日销售额\"",[167,150438,40048],{"class":512},[167,150440,150441,150443,150445,150447,150449,150451,150453],{"class":169,"line":907},[167,150442,149083],{"class":7246},[167,150444,523],{"class":731},[167,150446,149088],{"class":512},[167,150448,81797],{"class":7246},[167,150450,523],{"class":731},[167,150452,149095],{"class":177},[167,150454,40048],{"class":512},[167,150456,150457,150459,150461,150463,150465,150467,150469],{"class":169,"line":920},[167,150458,149102],{"class":7246},[167,150460,523],{"class":731},[167,150462,149088],{"class":512},[167,150464,81797],{"class":7246},[167,150466,523],{"class":731},[167,150468,149113],{"class":177},[167,150470,40048],{"class":512},[167,150472,150473,150475,150477,150479,150481,150483,150485],{"class":169,"line":933},[167,150474,149120],{"class":7246},[167,150476,523],{"class":731},[167,150478,149125],{"class":512},[167,150480,149128],{"class":7246},[167,150482,523],{"class":731},[167,150484,149133],{"class":177},[167,150486,40048],{"class":512},[167,150488,150489,150492,150494],{"class":169,"line":946},[167,150490,150491],{"class":7246},"    datazoom_opts",[167,150493,523],{"class":731},[167,150495,150496],{"class":512},"[opts.DataZoomOpts()],\n",[167,150498,150499],{"class":169,"line":959},[167,150500,873],{"class":512},[167,150502,150503,150505,150508],{"class":169,"line":964},[167,150504,148915],{"class":512},[167,150506,150507],{"class":177},"\"daily_sales.html\"",[167,150509,873],{"class":512},[19,150511,150512,150515],{},[34,150513,150514],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150517,150519],{"id":150518},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150521,150522],{},"如果数据结构如下：",[26,150524,150526],{"className":723,"code":150525,"language":305,"meta":32,"style":32},"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",[34,150527,150528,150536,150544,150566,150587,150592,150599,150619,150639,150643],{"__ignoreMap":32},[167,150529,150530,150532,150534],{"class":169,"line":170},[167,150531,1141],{"class":512},[167,150533,523],{"class":731},[167,150535,17598],{"class":512},[167,150537,150538,150541],{"class":169,"line":191},[167,150539,150540],{"class":177},"    \"北京\"",[167,150542,150543],{"class":512},": [\n",[167,150545,150546,150548,150550,150552,150555,150557,150560,150562,150564],{"class":169,"line":205},[167,150547,6949],{"class":512},[167,150549,149588],{"class":177},[167,150551,53435],{"class":512},[167,150553,150554],{"class":177},"\"2024-01-01\"",[167,150556,14463],{"class":512},[167,150558,150559],{"class":177},"\"confirm\"",[167,150561,53435],{"class":512},[167,150563,2646],{"class":184},[167,150565,6962],{"class":512},[167,150567,150568,150570,150572,150574,150577,150579,150581,150583,150585],{"class":169,"line":219},[167,150569,6949],{"class":512},[167,150571,149588],{"class":177},[167,150573,53435],{"class":512},[167,150575,150576],{"class":177},"\"2024-01-02\"",[167,150578,14463],{"class":512},[167,150580,150559],{"class":177},[167,150582,53435],{"class":512},[167,150584,2698],{"class":184},[167,150586,6962],{"class":512},[167,150588,150589],{"class":169,"line":230},[167,150590,150591],{"class":512},"    ],\n",[167,150593,150594,150597],{"class":169,"line":241},[167,150595,150596],{"class":177},"    \"上海\"",[167,150598,150543],{"class":512},[167,150600,150601,150603,150605,150607,150609,150611,150613,150615,150617],{"class":169,"line":261},[167,150602,6949],{"class":512},[167,150604,149588],{"class":177},[167,150606,53435],{"class":512},[167,150608,150554],{"class":177},[167,150610,14463],{"class":512},[167,150612,150559],{"class":177},[167,150614,53435],{"class":512},[167,150616,2595],{"class":184},[167,150618,6962],{"class":512},[167,150620,150621,150623,150625,150627,150629,150631,150633,150635,150637],{"class":169,"line":773},[167,150622,6949],{"class":512},[167,150624,149588],{"class":177},[167,150626,53435],{"class":512},[167,150628,150576],{"class":177},[167,150630,14463],{"class":512},[167,150632,150559],{"class":177},[167,150634,53435],{"class":512},[167,150636,2723],{"class":184},[167,150638,6962],{"class":512},[167,150640,150641],{"class":169,"line":779},[167,150642,150591],{"class":512},[167,150644,150645],{"class":169,"line":785},[167,150646,3630],{"class":512},[19,150648,150649],{},"绘制多地区趋势：",[26,150651,150653],{"className":723,"code":150652,"language":305,"meta":32,"style":32},"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",[34,150654,150655,150669,150679,150683,150708,150712,150720,150724,150728,150740,150762,150775,150779,150783,150800,150816,150820],{"__ignoreMap":32},[167,150656,150657,150659,150661,150663,150665,150667],{"class":169,"line":170},[167,150658,32745],{"class":731},[167,150660,148970],{"class":512},[167,150662,732],{"class":731},[167,150664,148975],{"class":512},[167,150666,33388],{"class":731},[167,150668,148980],{"class":512},[167,150670,150671,150673,150675,150677],{"class":169,"line":191},[167,150672,32745],{"class":731},[167,150674,148829],{"class":512},[167,150676,732],{"class":731},[167,150678,148834],{"class":512},[167,150680,150681],{"class":169,"line":205},[167,150682,741],{"emptyLinePlaceholder":740},[167,150684,150685,150687,150689,150691,150693,150695,150697,150699,150701,150704,150706],{"class":169,"line":219},[167,150686,149391],{"class":512},[167,150688,523],{"class":731},[167,150690,150314],{"class":512},[167,150692,149588],{"class":177},[167,150694,6475],{"class":512},[167,150696,1168],{"class":731},[167,150698,149800],{"class":512},[167,150700,973],{"class":731},[167,150702,150703],{"class":512}," data[",[167,150705,71257],{"class":177},[167,150707,79515],{"class":512},[167,150709,150710],{"class":169,"line":230},[167,150711,741],{"emptyLinePlaceholder":740},[167,150713,150714,150716,150718],{"class":169,"line":241},[167,150715,148843],{"class":512},[167,150717,523],{"class":731},[167,150719,148848],{"class":512},[167,150721,150722],{"class":169,"line":261},[167,150723,149432],{"class":512},[167,150725,150726],{"class":169,"line":773},[167,150727,741],{"emptyLinePlaceholder":740},[167,150729,150730,150732,150735,150737],{"class":169,"line":779},[167,150731,1168],{"class":731},[167,150733,150734],{"class":512}," city, records ",[167,150736,973],{"class":731},[167,150738,150739],{"class":512}," data.items():\n",[167,150741,150742,150745,150747,150749,150751,150753,150755,150757,150759],{"class":169,"line":785},[167,150743,150744],{"class":512},"    values ",[167,150746,523],{"class":731},[167,150748,150314],{"class":512},[167,150750,150559],{"class":177},[167,150752,6475],{"class":512},[167,150754,1168],{"class":731},[167,150756,149800],{"class":512},[167,150758,973],{"class":731},[167,150760,150761],{"class":512}," records]\n",[167,150763,150764,150767,150769,150771,150773],{"class":169,"line":790},[167,150765,150766],{"class":512},"    line.add_yaxis(city, values, ",[167,150768,149336],{"class":7246},[167,150770,523],{"class":731},[167,150772,33481],{"class":184},[167,150774,873],{"class":512},[167,150776,150777],{"class":169,"line":796},[167,150778,741],{"emptyLinePlaceholder":740},[167,150780,150781],{"class":169,"line":802},[167,150782,149059],{"class":512},[167,150784,150785,150787,150789,150791,150793,150795,150798],{"class":169,"line":808},[167,150786,149064],{"class":7246},[167,150788,523],{"class":731},[167,150790,149069],{"class":512},[167,150792,53405],{"class":7246},[167,150794,523],{"class":731},[167,150796,150797],{"class":177},"\"多地区趋势图\"",[167,150799,40048],{"class":512},[167,150801,150802,150804,150806,150808,150810,150812,150814],{"class":169,"line":814},[167,150803,149120],{"class":7246},[167,150805,523],{"class":731},[167,150807,149125],{"class":512},[167,150809,149128],{"class":7246},[167,150811,523],{"class":731},[167,150813,149133],{"class":177},[167,150815,40048],{"class":512},[167,150817,150818],{"class":169,"line":820},[167,150819,873],{"class":512},[167,150821,150822,150824,150827],{"class":169,"line":826},[167,150823,148915],{"class":512},[167,150825,150826],{"class":177},"\"trend.html\"",[167,150828,873],{"class":512},[19,150830,150831],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150833,150835],{"id":150834},"_1012-易错点","10.12 易错点",[40,150837,150838,150844,150850,150860,150866],{},[43,150839,150840,150843],{},[34,150841,150842],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[43,150845,150846,150849],{},[34,150847,150848],{},"render()"," 生成的是 HTML，不是图片。",[43,150851,150852,150853,150856,150857,423],{},"JSON 字符串用 ",[34,150854,150855],{},"json.loads()","，JSON 文件用 ",[34,150858,150859],{},"json.load()",[43,150861,150862,150863,423],{},"中文 JSON 保存时加 ",[34,150864,150865],{},"ensure_ascii=False",[43,150867,150868],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150870,150872],{"id":150871},"_1013-本章练习","10.13 本章练习",[40,150874,150875,150878,150881,150884,150887],{},[43,150876,150877],{},"安装 pyecharts 并生成第一个折线图。",[43,150879,150880],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[43,150882,150883],{},"绘制两条折线，对比线上和线下销售额。",[43,150885,150886],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[43,150888,150889],{},"对含有空值的销售数据进行清洗后再绘图。",[2113,150891,150892],{},"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":32,"searchDepth":191,"depth":191,"links":150894},[150895,150896,150897,150898,150899,150900,150901,150902,150903,150904,150905,150906,150907],{"id":148511,"depth":191,"text":148512},{"id":148586,"depth":191,"text":148587},{"id":148765,"depth":191,"text":148766},{"id":148816,"depth":191,"text":148817},{"id":148950,"depth":191,"text":148951},{"id":149226,"depth":191,"text":149227},{"id":149352,"depth":191,"text":149353},{"id":149563,"depth":191,"text":149564},{"id":149934,"depth":191,"text":149935},{"id":150146,"depth":191,"text":150147},{"id":150518,"depth":191,"text":150519},{"id":150834,"depth":191,"text":150835},{"id":150871,"depth":191,"text":150872},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148503,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150914,"title":150915,"body":150916,"description":25403,"extension":2140,"meta":153276,"navigation":740,"path":153277,"seo":153278,"stem":153279,"__hash__":153280},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150917,"toc":153253},[150918,150921,150925,150928,150931,151007,151010,151101,151104,151108,151111,151155,151168,151172,151175,151242,151245,151249,151252,151336,151344,151348,151353,151494,151497,151508,151514,151520,151634,151638,151641,151644,151897,151900,151904,151907,152011,152014,152018,152169,152173,152180,152293,152297,152300,152406,152409,152413,152416,152447,152450,152555,152558,152562,152566,152576,152644,152648,152655,152719,152722,152726,152732,152828,152837,152841,153165,153174,153178,153206,153210,153250],[10,150919,150915],{"id":150920},"_11-面向对象基础",[14,150922,150924],{"id":150923},"_111-什么是面向对象","11.1 什么是面向对象",[19,150926,150927],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150929,150930],{},"面向过程：",[26,150932,150934],{"className":723,"code":150933,"language":305,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[34,150935,150936,150945,150953,150957,150967,150998,151002],{"__ignoreMap":32},[167,150937,150938,150940,150942],{"class":169,"line":170},[167,150939,148127],{"class":512},[167,150941,523],{"class":731},[167,150943,150944],{"class":177}," \"小明\"\n",[167,150946,150947,150949,150951],{"class":169,"line":191},[167,150948,148137],{"class":512},[167,150950,523],{"class":731},[167,150952,148142],{"class":184},[167,150954,150955],{"class":169,"line":205},[167,150956,741],{"emptyLinePlaceholder":740},[167,150958,150959,150961,150964],{"class":169,"line":219},[167,150960,845],{"class":731},[167,150962,150963],{"class":173}," introduce",[167,150965,150966],{"class":512},"(name, age):\n",[167,150968,150969,150971,150973,150975,150978,150980,150982,150984,150987,150989,150991,150993,150996],{"class":169,"line":230},[167,150970,895],{"class":184},[167,150972,898],{"class":512},[167,150974,2262],{"class":731},[167,150976,150977],{"class":177},"\"我叫",[167,150979,3096],{"class":184},[167,150981,81797],{"class":512},[167,150983,3145],{"class":184},[167,150985,150986],{"class":177},"，今年",[167,150988,3096],{"class":184},[167,150990,72209],{"class":512},[167,150992,3145],{"class":184},[167,150994,150995],{"class":177},"岁\"",[167,150997,873],{"class":512},[167,150999,151000],{"class":169,"line":241},[167,151001,741],{"emptyLinePlaceholder":740},[167,151003,151004],{"class":169,"line":261},[167,151005,151006],{"class":512},"introduce(name, age)\n",[19,151008,151009],{},"面向对象：",[26,151011,151013],{"className":723,"code":151012,"language":305,"meta":32,"style":32},"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",[34,151014,151015,151023,151031,151060,151064,151068,151078,151087,151096],{"__ignoreMap":32},[167,151016,151017,151019,151021],{"class":169,"line":170},[167,151018,16721],{"class":731},[167,151020,9928],{"class":173},[167,151022,857],{"class":512},[167,151024,151025,151027,151029],{"class":169,"line":191},[167,151026,32808],{"class":731},[167,151028,150963],{"class":173},[167,151030,32814],{"class":512},[167,151032,151033,151035,151037,151039,151041,151044,151046,151048,151050,151052,151054,151056,151058],{"class":169,"line":205},[167,151034,34454],{"class":184},[167,151036,898],{"class":512},[167,151038,2262],{"class":731},[167,151040,150977],{"class":177},[167,151042,151043],{"class":184},"{self",[167,151045,82288],{"class":512},[167,151047,3145],{"class":184},[167,151049,150986],{"class":177},[167,151051,151043],{"class":184},[167,151053,82300],{"class":512},[167,151055,3145],{"class":184},[167,151057,150995],{"class":177},[167,151059,873],{"class":512},[167,151061,151062],{"class":169,"line":219},[167,151063,741],{"emptyLinePlaceholder":740},[167,151065,151066],{"class":169,"line":230},[167,151067,741],{"emptyLinePlaceholder":740},[167,151069,151070,151073,151075],{"class":169,"line":241},[167,151071,151072],{"class":512},"student ",[167,151074,523],{"class":731},[167,151076,151077],{"class":512}," Student()\n",[167,151079,151080,151083,151085],{"class":169,"line":261},[167,151081,151082],{"class":512},"student.name ",[167,151084,523],{"class":731},[167,151086,150944],{"class":177},[167,151088,151089,151092,151094],{"class":169,"line":773},[167,151090,151091],{"class":512},"student.age ",[167,151093,523],{"class":731},[167,151095,148142],{"class":184},[167,151097,151098],{"class":169,"line":779},[167,151099,151100],{"class":512},"student.introduce()\n",[19,151102,151103],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151105,151107],{"id":151106},"_112-类和对象","11.2 类和对象",[19,151109,151110],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,151112,151114],{"className":723,"code":151113,"language":305,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[34,151115,151116,151124,151129,151133,151137,151146],{"__ignoreMap":32},[167,151117,151118,151120,151122],{"class":169,"line":170},[167,151119,16721],{"class":731},[167,151121,9928],{"class":173},[167,151123,857],{"class":512},[167,151125,151126],{"class":169,"line":191},[167,151127,151128],{"class":731},"    pass\n",[167,151130,151131],{"class":169,"line":205},[167,151132,741],{"emptyLinePlaceholder":740},[167,151134,151135],{"class":169,"line":219},[167,151136,741],{"emptyLinePlaceholder":740},[167,151138,151139,151142,151144],{"class":169,"line":230},[167,151140,151141],{"class":512},"student1 ",[167,151143,523],{"class":731},[167,151145,151077],{"class":512},[167,151147,151148,151151,151153],{"class":169,"line":241},[167,151149,151150],{"class":512},"student2 ",[167,151152,523],{"class":731},[167,151154,151077],{"class":512},[19,151156,151157,151160,151161,429,151164,151167],{},[34,151158,151159],{},"Student"," 是类，",[34,151162,151163],{},"student1",[34,151165,151166],{},"student2"," 是对象。",[14,151169,151171],{"id":151170},"_113-属性","11.3 属性",[19,151173,151174],{},"属性是对象保存的数据。",[26,151176,151178],{"className":723,"code":151177,"language":305,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[34,151179,151180,151188,151192,151196,151200,151208,151216,151224,151228,151235],{"__ignoreMap":32},[167,151181,151182,151184,151186],{"class":169,"line":170},[167,151183,16721],{"class":731},[167,151185,9928],{"class":173},[167,151187,857],{"class":512},[167,151189,151190],{"class":169,"line":191},[167,151191,151128],{"class":731},[167,151193,151194],{"class":169,"line":205},[167,151195,741],{"emptyLinePlaceholder":740},[167,151197,151198],{"class":169,"line":219},[167,151199,741],{"emptyLinePlaceholder":740},[167,151201,151202,151204,151206],{"class":169,"line":230},[167,151203,151072],{"class":512},[167,151205,523],{"class":731},[167,151207,151077],{"class":512},[167,151209,151210,151212,151214],{"class":169,"line":241},[167,151211,151082],{"class":512},[167,151213,523],{"class":731},[167,151215,150944],{"class":177},[167,151217,151218,151220,151222],{"class":169,"line":261},[167,151219,151091],{"class":512},[167,151221,523],{"class":731},[167,151223,148142],{"class":184},[167,151225,151226],{"class":169,"line":773},[167,151227,741],{"emptyLinePlaceholder":740},[167,151229,151230,151232],{"class":169,"line":779},[167,151231,1606],{"class":184},[167,151233,151234],{"class":512},"(student.name)\n",[167,151236,151237,151239],{"class":169,"line":785},[167,151238,1606],{"class":184},[167,151240,151241],{"class":512},"(student.age)\n",[19,151243,151244],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151246,151248],{"id":151247},"_114-方法","11.4 方法",[19,151250,151251],{},"类中的函数叫方法。",[26,151253,151254],{"className":723,"code":151012,"language":305,"meta":32,"style":32},[34,151255,151256,151264,151272,151300,151304,151308,151316,151324,151332],{"__ignoreMap":32},[167,151257,151258,151260,151262],{"class":169,"line":170},[167,151259,16721],{"class":731},[167,151261,9928],{"class":173},[167,151263,857],{"class":512},[167,151265,151266,151268,151270],{"class":169,"line":191},[167,151267,32808],{"class":731},[167,151269,150963],{"class":173},[167,151271,32814],{"class":512},[167,151273,151274,151276,151278,151280,151282,151284,151286,151288,151290,151292,151294,151296,151298],{"class":169,"line":205},[167,151275,34454],{"class":184},[167,151277,898],{"class":512},[167,151279,2262],{"class":731},[167,151281,150977],{"class":177},[167,151283,151043],{"class":184},[167,151285,82288],{"class":512},[167,151287,3145],{"class":184},[167,151289,150986],{"class":177},[167,151291,151043],{"class":184},[167,151293,82300],{"class":512},[167,151295,3145],{"class":184},[167,151297,150995],{"class":177},[167,151299,873],{"class":512},[167,151301,151302],{"class":169,"line":219},[167,151303,741],{"emptyLinePlaceholder":740},[167,151305,151306],{"class":169,"line":230},[167,151307,741],{"emptyLinePlaceholder":740},[167,151309,151310,151312,151314],{"class":169,"line":241},[167,151311,151072],{"class":512},[167,151313,523],{"class":731},[167,151315,151077],{"class":512},[167,151317,151318,151320,151322],{"class":169,"line":261},[167,151319,151082],{"class":512},[167,151321,523],{"class":731},[167,151323,150944],{"class":177},[167,151325,151326,151328,151330],{"class":169,"line":773},[167,151327,151091],{"class":512},[167,151329,523],{"class":731},[167,151331,148142],{"class":184},[167,151333,151334],{"class":169,"line":779},[167,151335,151100],{"class":512},[19,151337,151338,151340,151341,151343],{},[34,151339,32830],{}," 表示当前对象。调用方法时不需要手动传入 ",[34,151342,32830],{},"，Python 会自动传。",[14,151345,151347],{"id":151346},"_115-构造方法__init__","11.5 构造方法__init__",[19,151349,151350,151352],{},[34,151351,32836],{}," 在对象创建时自动执行，用于初始化属性。",[26,151354,151356],{"className":723,"code":151355,"language":305,"meta":32,"style":32},"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",[34,151357,151358,151366,151375,151387,151399,151410,151414,151422,151460,151464,151468,151490],{"__ignoreMap":32},[167,151359,151360,151362,151364],{"class":169,"line":170},[167,151361,16721],{"class":731},[167,151363,9928],{"class":173},[167,151365,857],{"class":512},[167,151367,151368,151370,151372],{"class":169,"line":191},[167,151369,32808],{"class":731},[167,151371,32811],{"class":184},[167,151373,151374],{"class":512},"(self, name, age, score):\n",[167,151376,151377,151379,151382,151384],{"class":169,"line":205},[167,151378,32852],{"class":184},[167,151380,151381],{"class":512},".name ",[167,151383,523],{"class":731},[167,151385,151386],{"class":512}," name\n",[167,151388,151389,151391,151394,151396],{"class":169,"line":219},[167,151390,32852],{"class":184},[167,151392,151393],{"class":512},".age ",[167,151395,523],{"class":731},[167,151397,151398],{"class":512}," age\n",[167,151400,151401,151403,151406,151408],{"class":169,"line":230},[167,151402,32852],{"class":184},[167,151404,151405],{"class":512},".score ",[167,151407,523],{"class":731},[167,151409,3644],{"class":512},[167,151411,151412],{"class":169,"line":241},[167,151413,741],{"emptyLinePlaceholder":740},[167,151415,151416,151418,151420],{"class":169,"line":261},[167,151417,32808],{"class":731},[167,151419,150963],{"class":173},[167,151421,32814],{"class":512},[167,151423,151424,151426,151428,151430,151432,151434,151436,151438,151440,151442,151444,151446,151449,151451,151454,151456,151458],{"class":169,"line":773},[167,151425,34454],{"class":184},[167,151427,898],{"class":512},[167,151429,2262],{"class":731},[167,151431,150977],{"class":177},[167,151433,151043],{"class":184},[167,151435,82288],{"class":512},[167,151437,3145],{"class":184},[167,151439,150986],{"class":177},[167,151441,151043],{"class":184},[167,151443,82300],{"class":512},[167,151445,3145],{"class":184},[167,151447,151448],{"class":177},"岁，成绩",[167,151450,151043],{"class":184},[167,151452,151453],{"class":512},".score",[167,151455,3145],{"class":184},[167,151457,2452],{"class":177},[167,151459,873],{"class":512},[167,151461,151462],{"class":169,"line":779},[167,151463,741],{"emptyLinePlaceholder":740},[167,151465,151466],{"class":169,"line":785},[167,151467,741],{"emptyLinePlaceholder":740},[167,151469,151470,151472,151474,151477,151480,151482,151484,151486,151488],{"class":169,"line":790},[167,151471,151072],{"class":512},[167,151473,523],{"class":731},[167,151475,151476],{"class":512}," Student(",[167,151478,151479],{"class":177},"\"小明\"",[167,151481,14463],{"class":512},[167,151483,2850],{"class":184},[167,151485,14463],{"class":512},[167,151487,3188],{"class":184},[167,151489,873],{"class":512},[167,151491,151492],{"class":169,"line":796},[167,151493,151100],{"class":512},[19,151495,151496],{},"构造方法的好处：",[40,151498,151499,151502,151505],{},[43,151500,151501],{},"创建对象时必须提供必要数据。",[43,151503,151504],{},"属性初始化集中，不容易漏。",[43,151506,151507],{},"对象状态更完整。",[14,151509,151511,151512],{"id":151510},"_116-str","11.6 ",[2354,151513,3368],{},[19,151515,151516,151517,423],{},"直接打印对象时，默认输出不直观。可以定义 ",[34,151518,151519],{},"__str__",[26,151521,151523],{"className":723,"code":151522,"language":305,"meta":32,"style":32},"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",[34,151524,151525,151533,151542,151552,151562,151566,151575,151603,151607,151611,151627],{"__ignoreMap":32},[167,151526,151527,151529,151531],{"class":169,"line":170},[167,151528,16721],{"class":731},[167,151530,9928],{"class":173},[167,151532,857],{"class":512},[167,151534,151535,151537,151539],{"class":169,"line":191},[167,151536,32808],{"class":731},[167,151538,32811],{"class":184},[167,151540,151541],{"class":512},"(self, name, age):\n",[167,151543,151544,151546,151548,151550],{"class":169,"line":205},[167,151545,32852],{"class":184},[167,151547,151381],{"class":512},[167,151549,523],{"class":731},[167,151551,151386],{"class":512},[167,151553,151554,151556,151558,151560],{"class":169,"line":219},[167,151555,32852],{"class":184},[167,151557,151393],{"class":512},[167,151559,523],{"class":731},[167,151561,151398],{"class":512},[167,151563,151564],{"class":169,"line":230},[167,151565,741],{"emptyLinePlaceholder":740},[167,151567,151568,151570,151573],{"class":169,"line":241},[167,151569,32808],{"class":731},[167,151571,151572],{"class":184}," __str__",[167,151574,32814],{"class":512},[167,151576,151577,151579,151582,151585,151587,151589,151591,151594,151596,151598,151600],{"class":169,"line":261},[167,151578,16779],{"class":731},[167,151580,151581],{"class":731}," f",[167,151583,151584],{"class":177},"\"Student(name=",[167,151586,151043],{"class":184},[167,151588,82288],{"class":512},[167,151590,3145],{"class":184},[167,151592,151593],{"class":177},", age=",[167,151595,151043],{"class":184},[167,151597,82300],{"class":512},[167,151599,3145],{"class":184},[167,151601,151602],{"class":177},")\"\n",[167,151604,151605],{"class":169,"line":773},[167,151606,741],{"emptyLinePlaceholder":740},[167,151608,151609],{"class":169,"line":779},[167,151610,741],{"emptyLinePlaceholder":740},[167,151612,151613,151615,151617,151619,151621,151623,151625],{"class":169,"line":785},[167,151614,151072],{"class":512},[167,151616,523],{"class":731},[167,151618,151476],{"class":512},[167,151620,151479],{"class":177},[167,151622,14463],{"class":512},[167,151624,2850],{"class":184},[167,151626,873],{"class":512},[167,151628,151629,151631],{"class":169,"line":790},[167,151630,1606],{"class":184},[167,151632,151633],{"class":512},"(student)\n",[14,151635,151637],{"id":151636},"_117-封装","11.7 封装",[19,151639,151640],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151642,151643],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,151645,151647],{"className":723,"code":151646,"language":305,"meta":32,"style":32},"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",[34,151648,151649,151658,151667,151679,151691,151695,151704,151713,151717,151727,151740,151751,151756,151767,151771,151780,151792,151803,151807,151820,151831,151835,151846,151850,151854,151872,151881,151890],{"__ignoreMap":32},[167,151650,151651,151653,151656],{"class":169,"line":170},[167,151652,16721],{"class":731},[167,151654,151655],{"class":173}," Account",[167,151657,857],{"class":512},[167,151659,151660,151662,151664],{"class":169,"line":191},[167,151661,32808],{"class":731},[167,151663,32811],{"class":184},[167,151665,151666],{"class":512},"(self, owner, balance):\n",[167,151668,151669,151671,151674,151676],{"class":169,"line":205},[167,151670,32852],{"class":184},[167,151672,151673],{"class":512},".owner ",[167,151675,523],{"class":731},[167,151677,151678],{"class":512}," owner\n",[167,151680,151681,151683,151686,151688],{"class":169,"line":219},[167,151682,32852],{"class":184},[167,151684,151685],{"class":512},".__balance ",[167,151687,523],{"class":731},[167,151689,151690],{"class":512}," balance\n",[167,151692,151693],{"class":169,"line":230},[167,151694,741],{"emptyLinePlaceholder":740},[167,151696,151697,151699,151702],{"class":169,"line":241},[167,151698,32808],{"class":731},[167,151700,151701],{"class":173}," get_balance",[167,151703,32814],{"class":512},[167,151705,151706,151708,151710],{"class":169,"line":261},[167,151707,16779],{"class":731},[167,151709,40874],{"class":184},[167,151711,151712],{"class":512},".__balance\n",[167,151714,151715],{"class":169,"line":773},[167,151716,741],{"emptyLinePlaceholder":740},[167,151718,151719,151721,151724],{"class":169,"line":779},[167,151720,32808],{"class":731},[167,151722,151723],{"class":173}," deposit",[167,151725,151726],{"class":512},"(self, money):\n",[167,151728,151729,151731,151734,151736,151738],{"class":169,"line":785},[167,151730,4540],{"class":731},[167,151732,151733],{"class":512}," money ",[167,151735,3653],{"class":731},[167,151737,6125],{"class":184},[167,151739,857],{"class":512},[167,151741,151742,151744,151746,151749],{"class":169,"line":790},[167,151743,36652],{"class":184},[167,151745,898],{"class":512},[167,151747,151748],{"class":177},"\"存款金额必须大于0\"",[167,151750,873],{"class":512},[167,151752,151753],{"class":169,"line":796},[167,151754,151755],{"class":731},"            return\n",[167,151757,151758,151760,151762,151764],{"class":169,"line":802},[167,151759,32852],{"class":184},[167,151761,151685],{"class":512},[167,151763,11505],{"class":731},[167,151765,151766],{"class":512}," money\n",[167,151768,151769],{"class":169,"line":808},[167,151770,741],{"emptyLinePlaceholder":740},[167,151772,151773,151775,151778],{"class":169,"line":814},[167,151774,32808],{"class":731},[167,151776,151777],{"class":173}," withdraw",[167,151779,151726],{"class":512},[167,151781,151782,151784,151786,151788,151790],{"class":169,"line":820},[167,151783,4540],{"class":731},[167,151785,151733],{"class":512},[167,151787,3653],{"class":731},[167,151789,6125],{"class":184},[167,151791,857],{"class":512},[167,151793,151794,151796,151798,151801],{"class":169,"line":826},[167,151795,36652],{"class":184},[167,151797,898],{"class":512},[167,151799,151800],{"class":177},"\"取款金额必须大于0\"",[167,151802,873],{"class":512},[167,151804,151805],{"class":169,"line":832},[167,151806,151755],{"class":731},[167,151808,151809,151811,151813,151815,151817],{"class":169,"line":837},[167,151810,4540],{"class":731},[167,151812,151733],{"class":512},[167,151814,3159],{"class":731},[167,151816,40874],{"class":184},[167,151818,151819],{"class":512},".__balance:\n",[167,151821,151822,151824,151826,151829],{"class":169,"line":842},[167,151823,36652],{"class":184},[167,151825,898],{"class":512},[167,151827,151828],{"class":177},"\"余额不足\"",[167,151830,873],{"class":512},[167,151832,151833],{"class":169,"line":860},[167,151834,151755],{"class":731},[167,151836,151837,151839,151841,151844],{"class":169,"line":876},[167,151838,32852],{"class":184},[167,151840,151685],{"class":512},[167,151842,151843],{"class":731},"-=",[167,151845,151766],{"class":512},[167,151847,151848],{"class":169,"line":887},[167,151849,741],{"emptyLinePlaceholder":740},[167,151851,151852],{"class":169,"line":892},[167,151853,741],{"emptyLinePlaceholder":740},[167,151855,151856,151859,151861,151864,151866,151868,151870],{"class":169,"line":907},[167,151857,151858],{"class":512},"account ",[167,151860,523],{"class":731},[167,151862,151863],{"class":512}," Account(",[167,151865,151479],{"class":177},[167,151867,14463],{"class":512},[167,151869,8440],{"class":184},[167,151871,873],{"class":512},[167,151873,151874,151877,151879],{"class":169,"line":920},[167,151875,151876],{"class":512},"account.deposit(",[167,151878,3776],{"class":184},[167,151880,873],{"class":512},[167,151882,151883,151886,151888],{"class":169,"line":933},[167,151884,151885],{"class":512},"account.withdraw(",[167,151887,981],{"class":184},[167,151889,873],{"class":512},[167,151891,151892,151894],{"class":169,"line":946},[167,151893,1606],{"class":184},[167,151895,151896],{"class":512},"(account.get_balance())\n",[19,151898,151899],{},"封装的意义是避免外部随意修改内部状态。",[14,151901,151903],{"id":151902},"_118-继承","11.8 继承",[19,151905,151906],{},"继承可以让子类复用父类的属性和方法。",[26,151908,151910],{"className":723,"code":151909,"language":305,"meta":32,"style":32},"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",[34,151911,151912,151921,151930,151941,151945,151949,151963,151972,151983,151987,151991,152001,152006],{"__ignoreMap":32},[167,151913,151914,151916,151919],{"class":169,"line":170},[167,151915,16721],{"class":731},[167,151917,151918],{"class":173}," Animal",[167,151920,857],{"class":512},[167,151922,151923,151925,151928],{"class":169,"line":191},[167,151924,32808],{"class":731},[167,151926,151927],{"class":173}," eat",[167,151929,32814],{"class":512},[167,151931,151932,151934,151936,151939],{"class":169,"line":205},[167,151933,34454],{"class":184},[167,151935,898],{"class":512},[167,151937,151938],{"class":177},"\"吃东西\"",[167,151940,873],{"class":512},[167,151942,151943],{"class":169,"line":219},[167,151944,741],{"emptyLinePlaceholder":740},[167,151946,151947],{"class":169,"line":230},[167,151948,741],{"emptyLinePlaceholder":740},[167,151950,151951,151953,151956,151958,151961],{"class":169,"line":241},[167,151952,16721],{"class":731},[167,151954,151955],{"class":173}," Dog",[167,151957,898],{"class":512},[167,151959,151960],{"class":173},"Animal",[167,151962,984],{"class":512},[167,151964,151965,151967,151970],{"class":169,"line":261},[167,151966,32808],{"class":731},[167,151968,151969],{"class":173}," bark",[167,151971,32814],{"class":512},[167,151973,151974,151976,151978,151981],{"class":169,"line":773},[167,151975,34454],{"class":184},[167,151977,898],{"class":512},[167,151979,151980],{"class":177},"\"汪汪\"",[167,151982,873],{"class":512},[167,151984,151985],{"class":169,"line":779},[167,151986,741],{"emptyLinePlaceholder":740},[167,151988,151989],{"class":169,"line":785},[167,151990,741],{"emptyLinePlaceholder":740},[167,151992,151993,151996,151998],{"class":169,"line":790},[167,151994,151995],{"class":512},"dog ",[167,151997,523],{"class":731},[167,151999,152000],{"class":512}," Dog()\n",[167,152002,152003],{"class":169,"line":796},[167,152004,152005],{"class":512},"dog.eat()\n",[167,152007,152008],{"class":169,"line":802},[167,152009,152010],{"class":512},"dog.bark()\n",[19,152012,152013],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152015,152017],{"id":152016},"_119-方法重写","11.9 方法重写",[26,152019,152021],{"className":723,"code":152020,"language":305,"meta":32,"style":32},"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",[34,152022,152023,152031,152040,152051,152055,152059,152071,152079,152089,152093,152097,152110,152118,152129,152133,152137,152145,152155,152159,152164],{"__ignoreMap":32},[167,152024,152025,152027,152029],{"class":169,"line":170},[167,152026,16721],{"class":731},[167,152028,151918],{"class":173},[167,152030,857],{"class":512},[167,152032,152033,152035,152038],{"class":169,"line":191},[167,152034,32808],{"class":731},[167,152036,152037],{"class":173}," speak",[167,152039,32814],{"class":512},[167,152041,152042,152044,152046,152049],{"class":169,"line":205},[167,152043,34454],{"class":184},[167,152045,898],{"class":512},[167,152047,152048],{"class":177},"\"动物叫\"",[167,152050,873],{"class":512},[167,152052,152053],{"class":169,"line":219},[167,152054,741],{"emptyLinePlaceholder":740},[167,152056,152057],{"class":169,"line":230},[167,152058,741],{"emptyLinePlaceholder":740},[167,152060,152061,152063,152065,152067,152069],{"class":169,"line":241},[167,152062,16721],{"class":731},[167,152064,151955],{"class":173},[167,152066,898],{"class":512},[167,152068,151960],{"class":173},[167,152070,984],{"class":512},[167,152072,152073,152075,152077],{"class":169,"line":261},[167,152074,32808],{"class":731},[167,152076,152037],{"class":173},[167,152078,32814],{"class":512},[167,152080,152081,152083,152085,152087],{"class":169,"line":773},[167,152082,34454],{"class":184},[167,152084,898],{"class":512},[167,152086,151980],{"class":177},[167,152088,873],{"class":512},[167,152090,152091],{"class":169,"line":779},[167,152092,741],{"emptyLinePlaceholder":740},[167,152094,152095],{"class":169,"line":785},[167,152096,741],{"emptyLinePlaceholder":740},[167,152098,152099,152101,152104,152106,152108],{"class":169,"line":790},[167,152100,16721],{"class":731},[167,152102,152103],{"class":173}," Cat",[167,152105,898],{"class":512},[167,152107,151960],{"class":173},[167,152109,984],{"class":512},[167,152111,152112,152114,152116],{"class":169,"line":796},[167,152113,32808],{"class":731},[167,152115,152037],{"class":173},[167,152117,32814],{"class":512},[167,152119,152120,152122,152124,152127],{"class":169,"line":802},[167,152121,34454],{"class":184},[167,152123,898],{"class":512},[167,152125,152126],{"class":177},"\"喵喵\"",[167,152128,873],{"class":512},[167,152130,152131],{"class":169,"line":808},[167,152132,741],{"emptyLinePlaceholder":740},[167,152134,152135],{"class":169,"line":814},[167,152136,741],{"emptyLinePlaceholder":740},[167,152138,152139,152141,152143],{"class":169,"line":820},[167,152140,151995],{"class":512},[167,152142,523],{"class":731},[167,152144,152000],{"class":512},[167,152146,152147,152150,152152],{"class":169,"line":826},[167,152148,152149],{"class":512},"cat ",[167,152151,523],{"class":731},[167,152153,152154],{"class":512}," Cat()\n",[167,152156,152157],{"class":169,"line":832},[167,152158,741],{"emptyLinePlaceholder":740},[167,152160,152161],{"class":169,"line":837},[167,152162,152163],{"class":512},"dog.speak()\n",[167,152165,152166],{"class":169,"line":842},[167,152167,152168],{"class":512},"cat.speak()\n",[14,152170,152172],{"id":152171},"_1110-super","11.10 super",[19,152174,152175,152176,152179],{},"子类可以通过 ",[34,152177,152178],{},"super()"," 调用父类方法。",[26,152181,152183],{"className":723,"code":152182,"language":305,"meta":32,"style":32},"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",[34,152184,152185,152193,152202,152212,152216,152220,152232,152241,152252,152262,152266,152270,152286],{"__ignoreMap":32},[167,152186,152187,152189,152191],{"class":169,"line":170},[167,152188,16721],{"class":731},[167,152190,17595],{"class":173},[167,152192,857],{"class":512},[167,152194,152195,152197,152199],{"class":169,"line":191},[167,152196,32808],{"class":731},[167,152198,32811],{"class":184},[167,152200,152201],{"class":512},"(self, name):\n",[167,152203,152204,152206,152208,152210],{"class":169,"line":205},[167,152205,32852],{"class":184},[167,152207,151381],{"class":512},[167,152209,523],{"class":731},[167,152211,151386],{"class":512},[167,152213,152214],{"class":169,"line":219},[167,152215,741],{"emptyLinePlaceholder":740},[167,152217,152218],{"class":169,"line":230},[167,152219,741],{"emptyLinePlaceholder":740},[167,152221,152222,152224,152226,152228,152230],{"class":169,"line":241},[167,152223,16721],{"class":731},[167,152225,9928],{"class":173},[167,152227,898],{"class":512},[167,152229,21072],{"class":173},[167,152231,984],{"class":512},[167,152233,152234,152236,152238],{"class":169,"line":261},[167,152235,32808],{"class":731},[167,152237,32811],{"class":184},[167,152239,152240],{"class":512},"(self, name, score):\n",[167,152242,152243,152245,152247,152249],{"class":169,"line":773},[167,152244,32824],{"class":184},[167,152246,19287],{"class":512},[167,152248,32836],{"class":184},[167,152250,152251],{"class":512},"(name)\n",[167,152253,152254,152256,152258,152260],{"class":169,"line":779},[167,152255,32852],{"class":184},[167,152257,151405],{"class":512},[167,152259,523],{"class":731},[167,152261,3644],{"class":512},[167,152263,152264],{"class":169,"line":785},[167,152265,741],{"emptyLinePlaceholder":740},[167,152267,152268],{"class":169,"line":790},[167,152269,741],{"emptyLinePlaceholder":740},[167,152271,152272,152274,152276,152278,152280,152282,152284],{"class":169,"line":796},[167,152273,151072],{"class":512},[167,152275,523],{"class":731},[167,152277,151476],{"class":512},[167,152279,151479],{"class":177},[167,152281,14463],{"class":512},[167,152283,3188],{"class":184},[167,152285,873],{"class":512},[167,152287,152288,152290],{"class":169,"line":802},[167,152289,1606],{"class":184},[167,152291,152292],{"class":512},"(student.name, student.score)\n",[14,152294,152296],{"id":152295},"_1111-多态","11.11 多态",[19,152298,152299],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,152301,152303],{"className":723,"code":152302,"language":305,"meta":32,"style":32},"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",[34,152304,152305,152313,152321,152331,152335,152339,152347,152355,152365,152369,152373,152383,152388,152392,152396,152401],{"__ignoreMap":32},[167,152306,152307,152309,152311],{"class":169,"line":170},[167,152308,16721],{"class":731},[167,152310,151955],{"class":173},[167,152312,857],{"class":512},[167,152314,152315,152317,152319],{"class":169,"line":191},[167,152316,32808],{"class":731},[167,152318,152037],{"class":173},[167,152320,32814],{"class":512},[167,152322,152323,152325,152327,152329],{"class":169,"line":205},[167,152324,34454],{"class":184},[167,152326,898],{"class":512},[167,152328,151980],{"class":177},[167,152330,873],{"class":512},[167,152332,152333],{"class":169,"line":219},[167,152334,741],{"emptyLinePlaceholder":740},[167,152336,152337],{"class":169,"line":230},[167,152338,741],{"emptyLinePlaceholder":740},[167,152340,152341,152343,152345],{"class":169,"line":241},[167,152342,16721],{"class":731},[167,152344,152103],{"class":173},[167,152346,857],{"class":512},[167,152348,152349,152351,152353],{"class":169,"line":261},[167,152350,32808],{"class":731},[167,152352,152037],{"class":173},[167,152354,32814],{"class":512},[167,152356,152357,152359,152361,152363],{"class":169,"line":773},[167,152358,34454],{"class":184},[167,152360,898],{"class":512},[167,152362,152126],{"class":177},[167,152364,873],{"class":512},[167,152366,152367],{"class":169,"line":779},[167,152368,741],{"emptyLinePlaceholder":740},[167,152370,152371],{"class":169,"line":785},[167,152372,741],{"emptyLinePlaceholder":740},[167,152374,152375,152377,152380],{"class":169,"line":790},[167,152376,845],{"class":731},[167,152378,152379],{"class":173}," make_sound",[167,152381,152382],{"class":512},"(animal):\n",[167,152384,152385],{"class":169,"line":796},[167,152386,152387],{"class":512},"    animal.speak()\n",[167,152389,152390],{"class":169,"line":802},[167,152391,741],{"emptyLinePlaceholder":740},[167,152393,152394],{"class":169,"line":808},[167,152395,741],{"emptyLinePlaceholder":740},[167,152397,152398],{"class":169,"line":814},[167,152399,152400],{"class":512},"make_sound(Dog())\n",[167,152402,152403],{"class":169,"line":820},[167,152404,152405],{"class":512},"make_sound(Cat())\n",[19,152407,152408],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152410,152412],{"id":152411},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152414,152415],{},"实例属性属于对象：",[26,152417,152419],{"className":723,"code":152418,"language":305,"meta":32,"style":32},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[34,152420,152421,152429,152437],{"__ignoreMap":32},[167,152422,152423,152425,152427],{"class":169,"line":170},[167,152424,16721],{"class":731},[167,152426,9928],{"class":173},[167,152428,857],{"class":512},[167,152430,152431,152433,152435],{"class":169,"line":191},[167,152432,32808],{"class":731},[167,152434,32811],{"class":184},[167,152436,152201],{"class":512},[167,152438,152439,152441,152443,152445],{"class":169,"line":205},[167,152440,32852],{"class":184},[167,152442,151381],{"class":512},[167,152444,523],{"class":731},[167,152446,151386],{"class":512},[19,152448,152449],{},"类属性属于类，所有对象共享：",[26,152451,152453],{"className":723,"code":152452,"language":305,"meta":32,"style":32},"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",[34,152454,152455,152463,152473,152477,152485,152495,152499,152503,152516,152530,152534,152541,152548],{"__ignoreMap":32},[167,152456,152457,152459,152461],{"class":169,"line":170},[167,152458,16721],{"class":731},[167,152460,9928],{"class":173},[167,152462,857],{"class":512},[167,152464,152465,152468,152470],{"class":169,"line":191},[167,152466,152467],{"class":512},"    school ",[167,152469,523],{"class":731},[167,152471,152472],{"class":177}," \"黑马学校\"\n",[167,152474,152475],{"class":169,"line":205},[167,152476,741],{"emptyLinePlaceholder":740},[167,152478,152479,152481,152483],{"class":169,"line":219},[167,152480,32808],{"class":731},[167,152482,32811],{"class":184},[167,152484,152201],{"class":512},[167,152486,152487,152489,152491,152493],{"class":169,"line":230},[167,152488,32852],{"class":184},[167,152490,151381],{"class":512},[167,152492,523],{"class":731},[167,152494,151386],{"class":512},[167,152496,152497],{"class":169,"line":241},[167,152498,741],{"emptyLinePlaceholder":740},[167,152500,152501],{"class":169,"line":261},[167,152502,741],{"emptyLinePlaceholder":740},[167,152504,152505,152508,152510,152512,152514],{"class":169,"line":773},[167,152506,152507],{"class":512},"s1 ",[167,152509,523],{"class":731},[167,152511,151476],{"class":512},[167,152513,151479],{"class":177},[167,152515,873],{"class":512},[167,152517,152518,152521,152523,152525,152528],{"class":169,"line":779},[167,152519,152520],{"class":512},"s2 ",[167,152522,523],{"class":731},[167,152524,151476],{"class":512},[167,152526,152527],{"class":177},"\"小红\"",[167,152529,873],{"class":512},[167,152531,152532],{"class":169,"line":785},[167,152533,741],{"emptyLinePlaceholder":740},[167,152535,152536,152538],{"class":169,"line":790},[167,152537,1606],{"class":184},[167,152539,152540],{"class":512},"(s1.school)\n",[167,152542,152543,152545],{"class":169,"line":796},[167,152544,1606],{"class":184},[167,152546,152547],{"class":512},"(s2.school)\n",[167,152549,152550,152552],{"class":169,"line":802},[167,152551,1606],{"class":184},[167,152553,152554],{"class":512},"(Student.school)\n",[19,152556,152557],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152559,152561],{"id":152560},"_1113-类方法和静态方法","11.13 类方法和静态方法",[494,152563,152565],{"id":152564},"_11131-类方法","11.13.1 类方法",[19,152567,152568,152569,152572,152573,423],{},"类方法使用 ",[34,152570,152571],{},"@classmethod","，第一个参数通常是 ",[34,152574,152575],{},"cls",[26,152577,152579],{"className":723,"code":152578,"language":305,"meta":32,"style":32},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[34,152580,152581,152589,152597,152601,152609,152619,152629,152633,152637],{"__ignoreMap":32},[167,152582,152583,152585,152587],{"class":169,"line":170},[167,152584,16721],{"class":731},[167,152586,9928],{"class":173},[167,152588,857],{"class":512},[167,152590,152591,152593,152595],{"class":169,"line":191},[167,152592,152467],{"class":512},[167,152594,523],{"class":731},[167,152596,152472],{"class":177},[167,152598,152599],{"class":169,"line":205},[167,152600,741],{"emptyLinePlaceholder":740},[167,152602,152603,152606],{"class":169,"line":219},[167,152604,152605],{"class":173},"    @",[167,152607,152608],{"class":184},"classmethod\n",[167,152610,152611,152613,152616],{"class":169,"line":230},[167,152612,32808],{"class":731},[167,152614,152615],{"class":173}," get_school",[167,152617,152618],{"class":512},"(cls):\n",[167,152620,152621,152623,152626],{"class":169,"line":241},[167,152622,16779],{"class":731},[167,152624,152625],{"class":184}," cls",[167,152627,152628],{"class":512},".school\n",[167,152630,152631],{"class":169,"line":261},[167,152632,741],{"emptyLinePlaceholder":740},[167,152634,152635],{"class":169,"line":773},[167,152636,741],{"emptyLinePlaceholder":740},[167,152638,152639,152641],{"class":169,"line":779},[167,152640,1606],{"class":184},[167,152642,152643],{"class":512},"(Student.get_school())\n",[494,152645,152647],{"id":152646},"_11132-静态方法","11.13.2 静态方法",[19,152649,152650,152651,152654],{},"静态方法使用 ",[34,152652,152653],{},"@staticmethod","，不需要访问实例和类。",[26,152656,152658],{"className":723,"code":152657,"language":305,"meta":32,"style":32},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[34,152659,152660,152669,152676,152685,152696,152700,152704],{"__ignoreMap":32},[167,152661,152662,152664,152667],{"class":169,"line":170},[167,152663,16721],{"class":731},[167,152665,152666],{"class":173}," MathUtils",[167,152668,857],{"class":512},[167,152670,152671,152673],{"class":169,"line":191},[167,152672,152605],{"class":173},[167,152674,152675],{"class":184},"staticmethod\n",[167,152677,152678,152680,152682],{"class":169,"line":205},[167,152679,32808],{"class":731},[167,152681,7239],{"class":173},[167,152683,152684],{"class":512},"(a, b):\n",[167,152686,152687,152689,152691,152693],{"class":169,"line":219},[167,152688,16779],{"class":731},[167,152690,12897],{"class":512},[167,152692,2681],{"class":731},[167,152694,152695],{"class":512}," b\n",[167,152697,152698],{"class":169,"line":230},[167,152699,741],{"emptyLinePlaceholder":740},[167,152701,152702],{"class":169,"line":241},[167,152703,741],{"emptyLinePlaceholder":740},[167,152705,152706,152708,152711,152713,152715,152717],{"class":169,"line":261},[167,152707,1606],{"class":184},[167,152709,152710],{"class":512},"(MathUtils.add(",[167,152712,2418],{"class":184},[167,152714,14463],{"class":512},[167,152716,2287],{"class":184},[167,152718,32505],{"class":512},[19,152720,152721],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152723,152725],{"id":152724},"_1114-dataclass","11.14 dataclass",[19,152727,152728,152731],{},[34,152729,152730],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,152733,152735],{"className":723,"code":152734,"language":305,"meta":32,"style":32},"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",[34,152736,152737,152749,152753,152757,152762,152770,152778,152786,152794,152798,152802,152822],{"__ignoreMap":32},[167,152738,152739,152741,152744,152746],{"class":169,"line":170},[167,152740,32745],{"class":731},[167,152742,152743],{"class":512}," dataclasses ",[167,152745,732],{"class":731},[167,152747,152748],{"class":512}," dataclass\n",[167,152750,152751],{"class":169,"line":191},[167,152752,741],{"emptyLinePlaceholder":740},[167,152754,152755],{"class":169,"line":205},[167,152756,741],{"emptyLinePlaceholder":740},[167,152758,152759],{"class":169,"line":219},[167,152760,152761],{"class":173},"@dataclass\n",[167,152763,152764,152766,152768],{"class":169,"line":230},[167,152765,16721],{"class":731},[167,152767,9928],{"class":173},[167,152769,857],{"class":512},[167,152771,152772,152775],{"class":169,"line":241},[167,152773,152774],{"class":512},"    name: ",[167,152776,152777],{"class":184},"str\n",[167,152779,152780,152783],{"class":169,"line":261},[167,152781,152782],{"class":512},"    age: ",[167,152784,152785],{"class":184},"int\n",[167,152787,152788,152791],{"class":169,"line":773},[167,152789,152790],{"class":512},"    score: ",[167,152792,152793],{"class":184},"float\n",[167,152795,152796],{"class":169,"line":779},[167,152797,741],{"emptyLinePlaceholder":740},[167,152799,152800],{"class":169,"line":785},[167,152801,741],{"emptyLinePlaceholder":740},[167,152803,152804,152806,152808,152810,152812,152814,152816,152818,152820],{"class":169,"line":790},[167,152805,151072],{"class":512},[167,152807,523],{"class":731},[167,152809,151476],{"class":512},[167,152811,151479],{"class":177},[167,152813,14463],{"class":512},[167,152815,2850],{"class":184},[167,152817,14463],{"class":512},[167,152819,3188],{"class":184},[167,152821,873],{"class":512},[167,152823,152824,152826],{"class":169,"line":796},[167,152825,1606],{"class":184},[167,152827,151633],{"class":512},[19,152829,152830,152831,480,152833,152836],{},"它会自动生成 ",[34,152832,32836],{},[34,152834,152835],{},"__repr__"," 等方法。适合数据模型类。",[14,152838,152840],{"id":152839},"_1115-小案例学生类","11.15 小案例：学生类",[26,152842,152844],{"className":723,"code":152843,"language":305,"meta":32,"style":32},"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",[34,152845,152846,152854,152863,152875,152885,152895,152905,152909,152918,152931,152935,152944,152950,152962,152974,152986,152998,153002,153006,153012,153022,153031,153041,153049,153057,153066,153070,153074,153082,153118,153122,153126,153151,153158],{"__ignoreMap":32},[167,152847,152848,152850,152852],{"class":169,"line":170},[167,152849,16721],{"class":731},[167,152851,9928],{"class":173},[167,152853,857],{"class":512},[167,152855,152856,152858,152860],{"class":169,"line":191},[167,152857,32808],{"class":731},[167,152859,32811],{"class":184},[167,152861,152862],{"class":512},"(self, student_id, name, age, score):\n",[167,152864,152865,152867,152870,152872],{"class":169,"line":205},[167,152866,32852],{"class":184},[167,152868,152869],{"class":512},".student_id ",[167,152871,523],{"class":731},[167,152873,152874],{"class":512}," student_id\n",[167,152876,152877,152879,152881,152883],{"class":169,"line":219},[167,152878,32852],{"class":184},[167,152880,151381],{"class":512},[167,152882,523],{"class":731},[167,152884,151386],{"class":512},[167,152886,152887,152889,152891,152893],{"class":169,"line":230},[167,152888,32852],{"class":184},[167,152890,151393],{"class":512},[167,152892,523],{"class":731},[167,152894,151398],{"class":512},[167,152896,152897,152899,152901,152903],{"class":169,"line":241},[167,152898,32852],{"class":184},[167,152900,151405],{"class":512},[167,152902,523],{"class":731},[167,152904,3644],{"class":512},[167,152906,152907],{"class":169,"line":261},[167,152908,741],{"emptyLinePlaceholder":740},[167,152910,152911,152913,152916],{"class":169,"line":773},[167,152912,32808],{"class":731},[167,152914,152915],{"class":173}," is_passed",[167,152917,32814],{"class":512},[167,152919,152920,152922,152924,152926,152928],{"class":169,"line":779},[167,152921,16779],{"class":731},[167,152923,40874],{"class":184},[167,152925,151405],{"class":512},[167,152927,3764],{"class":731},[167,152929,152930],{"class":184}," 60\n",[167,152932,152933],{"class":169,"line":785},[167,152934,741],{"emptyLinePlaceholder":740},[167,152936,152937,152939,152942],{"class":169,"line":790},[167,152938,32808],{"class":731},[167,152940,152941],{"class":173}," to_dict",[167,152943,32814],{"class":512},[167,152945,152946,152948],{"class":169,"line":796},[167,152947,16779],{"class":731},[167,152949,17598],{"class":512},[167,152951,152952,152955,152957,152959],{"class":169,"line":802},[167,152953,152954],{"class":177},"            \"student_id\"",[167,152956,53435],{"class":512},[167,152958,32830],{"class":184},[167,152960,152961],{"class":512},".student_id,\n",[167,152963,152964,152967,152969,152971],{"class":169,"line":808},[167,152965,152966],{"class":177},"            \"name\"",[167,152968,53435],{"class":512},[167,152970,32830],{"class":184},[167,152972,152973],{"class":512},".name,\n",[167,152975,152976,152979,152981,152983],{"class":169,"line":814},[167,152977,152978],{"class":177},"            \"age\"",[167,152980,53435],{"class":512},[167,152982,32830],{"class":184},[167,152984,152985],{"class":512},".age,\n",[167,152987,152988,152991,152993,152995],{"class":169,"line":820},[167,152989,152990],{"class":177},"            \"score\"",[167,152992,53435],{"class":512},[167,152994,32830],{"class":184},[167,152996,152997],{"class":512},".score,\n",[167,152999,153000],{"class":169,"line":826},[167,153001,4572],{"class":512},[167,153003,153004],{"class":169,"line":832},[167,153005,741],{"emptyLinePlaceholder":740},[167,153007,153008,153010],{"class":169,"line":837},[167,153009,152605],{"class":173},[167,153011,152608],{"class":184},[167,153013,153014,153016,153019],{"class":169,"line":842},[167,153015,32808],{"class":731},[167,153017,153018],{"class":173}," from_dict",[167,153020,153021],{"class":512},"(cls, data):\n",[167,153023,153024,153026,153028],{"class":169,"line":860},[167,153025,16779],{"class":731},[167,153027,152625],{"class":184},[167,153029,153030],{"class":512},"(\n",[167,153032,153033,153036,153039],{"class":169,"line":876},[167,153034,153035],{"class":512},"            data[",[167,153037,153038],{"class":177},"\"student_id\"",[167,153040,89822],{"class":512},[167,153042,153043,153045,153047],{"class":169,"line":887},[167,153044,153035],{"class":512},[167,153046,64668],{"class":177},[167,153048,89822],{"class":512},[167,153050,153051,153053,153055],{"class":169,"line":892},[167,153052,153035],{"class":512},[167,153054,71113],{"class":177},[167,153056,89822],{"class":512},[167,153058,153059,153061,153064],{"class":169,"line":907},[167,153060,153035],{"class":512},[167,153062,153063],{"class":177},"\"score\"",[167,153065,89822],{"class":512},[167,153067,153068],{"class":169,"line":920},[167,153069,40127],{"class":512},[167,153071,153072],{"class":169,"line":933},[167,153073,741],{"emptyLinePlaceholder":740},[167,153075,153076,153078,153080],{"class":169,"line":946},[167,153077,32808],{"class":731},[167,153079,151572],{"class":184},[167,153081,32814],{"class":512},[167,153083,153084,153086,153088,153090,153092,153095,153097,153100,153102,153104,153106,153108,153110,153112,153114,153116],{"class":169,"line":959},[167,153085,16779],{"class":731},[167,153087,151581],{"class":731},[167,153089,2452],{"class":177},[167,153091,151043],{"class":184},[167,153093,153094],{"class":512},".student_id",[167,153096,3145],{"class":184},[167,153098,153099],{"class":184}," {self",[167,153101,82288],{"class":512},[167,153103,3145],{"class":184},[167,153105,153099],{"class":184},[167,153107,82300],{"class":512},[167,153109,3145],{"class":184},[167,153111,153099],{"class":184},[167,153113,151453],{"class":512},[167,153115,3145],{"class":184},[167,153117,27153],{"class":177},[167,153119,153120],{"class":169,"line":964},[167,153121,741],{"emptyLinePlaceholder":740},[167,153123,153124],{"class":169,"line":987},[167,153125,741],{"emptyLinePlaceholder":740},[167,153127,153128,153130,153132,153134,153137,153139,153141,153143,153145,153147,153149],{"class":169,"line":993},[167,153129,151072],{"class":512},[167,153131,523],{"class":731},[167,153133,151476],{"class":512},[167,153135,153136],{"class":177},"\"001\"",[167,153138,14463],{"class":512},[167,153140,151479],{"class":177},[167,153142,14463],{"class":512},[167,153144,2850],{"class":184},[167,153146,14463],{"class":512},[167,153148,3188],{"class":184},[167,153150,873],{"class":512},[167,153152,153153,153155],{"class":169,"line":998},[167,153154,1606],{"class":184},[167,153156,153157],{"class":512},"(student.is_passed())\n",[167,153159,153160,153162],{"class":169,"line":1010},[167,153161,1606],{"class":184},[167,153163,153164],{"class":512},"(student.to_dict())\n",[19,153166,153167,429,153170,153173],{},[34,153168,153169],{},"to_dict()",[34,153171,153172],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153175,153177],{"id":153176},"_1116-易错点","11.16 易错点",[40,153179,153180,153186,153192,153197,153200,153203],{},[43,153181,153182,153183,423],{},"类名推荐使用大驼峰，如 ",[34,153184,153185],{},"StudentManager",[43,153187,153188,153189,153191],{},"方法第一个参数必须写 ",[34,153190,32830],{},"，调用时不用传。",[43,153193,153194,153196],{},[34,153195,32836],{}," 不是普通方法，它在创建对象时自动执行。",[43,153198,153199],{},"私有属性不是绝对安全，只是约定和名称改写。",[43,153201,153202],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[43,153204,153205],{},"类中方法太多时，说明职责可能过重。",[14,153207,153209],{"id":153208},"_1117-本章练习","11.17 本章练习",[40,153211,153212,153218,153224,153229,153242],{},[43,153213,153214,153215,153217],{},"定义 ",[34,153216,151159],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[43,153219,153214,153220,153223],{},[34,153221,153222],{},"Account"," 类，实现存款、取款、查询余额。",[43,153225,153214,153226,153228],{},[34,153227,19252],{}," 类，计算圆的周长和面积。",[43,153230,153214,153231,480,153234,153237,153238,153241],{},[34,153232,153233],{},"Dog",[34,153235,153236],{},"Cat"," 类，并用同一个函数调用它们的 ",[34,153239,153240],{},"speak()"," 方法。",[43,153243,105957,153244,153246,153247,423],{},[34,153245,152730],{}," 定义一个商品类 ",[34,153248,153249],{},"Product",[2113,153251,153252],{},"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":32,"searchDepth":191,"depth":191,"links":153254},[153255,153256,153257,153258,153259,153260,153262,153263,153264,153265,153266,153267,153268,153272,153273,153274,153275],{"id":150923,"depth":191,"text":150924},{"id":151106,"depth":191,"text":151107},{"id":151170,"depth":191,"text":151171},{"id":151247,"depth":191,"text":151248},{"id":151346,"depth":191,"text":151347},{"id":151510,"depth":191,"text":153261},"11.6 str",{"id":151636,"depth":191,"text":151637},{"id":151902,"depth":191,"text":151903},{"id":152016,"depth":191,"text":152017},{"id":152171,"depth":191,"text":152172},{"id":152295,"depth":191,"text":152296},{"id":152411,"depth":191,"text":152412},{"id":152560,"depth":191,"text":152561,"children":153269},[153270,153271],{"id":152564,"depth":205,"text":152565},{"id":152646,"depth":205,"text":152647},{"id":152724,"depth":191,"text":152725},{"id":152839,"depth":191,"text":152840},{"id":153176,"depth":191,"text":153177},{"id":153208,"depth":191,"text":153209},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150915,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153282,"title":153283,"body":153284,"description":25403,"extension":2140,"meta":156597,"navigation":740,"path":156598,"seo":156599,"stem":156600,"__hash__":156601},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153285,"toc":156573},[153286,153289,153293,153296,153299,153328,153331,153339,153343,153347,153350,153373,153376,153382,153386,154832,154835,154856,154860,154863,154875,154878,155062,155065,155191,155194,155198,155202,155338,155342,155428,155432,155514,155518,155555,155559,155748,155752,155755,155985,155989,155992,156173,156176,156180,156183,156189,156192,156218,156222,156225,156239,156242,156267,156270,156284,156287,156304,156307,156324,156327,156344,156348,156374,156378,156401,156405,156408,156410,156416,156418,156439,156442,156448,156454,156458,156461,156537,156540,156544,156570],[10,153287,153283],{"id":153288},"_12-综合案例与复习路线",[14,153290,153292],{"id":153291},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153294,153295],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153297,153298],{},"一个合格的入门综合项目最好覆盖：",[40,153300,153301,153304,153307,153310,153313,153316,153319,153322,153325],{},[43,153302,153303],{},"输入输出。",[43,153305,153306],{},"判断和循环。",[43,153308,153309],{},"函数拆分。",[43,153311,153312],{},"列表、字典等容器。",[43,153314,153315],{},"文件持久化。",[43,153317,153318],{},"异常处理。",[43,153320,153321],{},"模块拆分。",[43,153323,153324],{},"可选：面向对象。",[43,153326,153327],{},"可选：数据可视化。",[19,153329,153330],{},"本章整理两个方向：",[40,153332,153333,153336],{},[43,153334,153335],{},"学生管理系统。",[43,153337,153338],{},"销售数据统计和可视化。",[14,153340,153342],{"id":153341},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[494,153344,153346],{"id":153345},"_1221-需求","12.2.1 需求",[19,153348,153349],{},"实现一个命令行学生管理系统：",[40,153351,153352,153355,153358,153361,153364,153367,153370],{},[43,153353,153354],{},"添加学生。",[43,153356,153357],{},"删除学生。",[43,153359,153360],{},"修改学生。",[43,153362,153363],{},"查询学生。",[43,153365,153366],{},"显示所有学生。",[43,153368,153369],{},"保存到 JSON 文件。",[43,153371,153372],{},"程序启动时自动读取 JSON 文件。",[19,153374,153375],{},"学生字段：",[26,153377,153380],{"className":153378,"code":153379,"language":31,"meta":32},[29],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[34,153381,153379],{"__ignoreMap":32},[14,153383,153385],{"id":153384},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,153387,153389],{"className":723,"code":153388,"language":305,"meta":32,"style":32},"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",[34,153390,153391,153397,153407,153411,153425,153429,153433,153442,153454,153460,153464,153470,153501,153511,153518,153529,153535,153539,153543,153553,153584,153610,153614,153618,153627,153638,153649,153660,153671,153682,153693,153704,153708,153712,153722,153734,153750,153757,153764,153768,153772,153782,153790,153797,153810,153820,153831,153835,153839,153848,153856,153862,153874,153882,153893,153897,153901,153910,153926,153930,153937,153948,153953,153957,153973,153988,154003,154007,154012,154020,154028,154036,154044,154048,154053,154064,154068,154072,154081,154096,154106,154110,154122,154133,154137,154141,154146,154150,154161,154165,154169,154178,154193,154201,154205,154217,154227,154231,154235,154250,154263,154276,154280,154293,154305,154317,154321,154325,154336,154340,154344,154353,154368,154376,154380,154392,154402,154406,154410,154415,154419,154423,154433,154439,154461,154480,154499,154518,154523,154527,154531,154540,154548,154559,154563,154567,154593,154603,154608,154612,154616,154624,154634,154638,154646,154651,154667,154671,154685,154690,154704,154709,154722,154727,154740,154745,154758,154763,154776,154787,154791,154797,154808,154812,154816,154828],{"__ignoreMap":32},[167,153392,153393,153395],{"class":169,"line":170},[167,153394,732],{"class":731},[167,153396,148682],{"class":512},[167,153398,153399,153401,153403,153405],{"class":169,"line":191},[167,153400,32745],{"class":731},[167,153402,109902],{"class":512},[167,153404,732],{"class":731},[167,153406,109907],{"class":512},[167,153408,153409],{"class":169,"line":205},[167,153410,741],{"emptyLinePlaceholder":740},[167,153412,153413,153416,153418,153420,153423],{"class":169,"line":219},[167,153414,153415],{"class":184},"DATA_FILE",[167,153417,753],{"class":731},[167,153419,110136],{"class":512},[167,153421,153422],{"class":177},"\"students.json\"",[167,153424,873],{"class":512},[167,153426,153427],{"class":169,"line":230},[167,153428,741],{"emptyLinePlaceholder":740},[167,153430,153431],{"class":169,"line":241},[167,153432,741],{"emptyLinePlaceholder":740},[167,153434,153435,153437,153440],{"class":169,"line":261},[167,153436,845],{"class":731},[167,153438,153439],{"class":173}," load_students",[167,153441,33957],{"class":512},[167,153443,153444,153446,153448,153451],{"class":169,"line":773},[167,153445,5136],{"class":731},[167,153447,40931],{"class":731},[167,153449,153450],{"class":184}," DATA_FILE",[167,153452,153453],{"class":512},".exists():\n",[167,153455,153456,153458],{"class":169,"line":779},[167,153457,16779],{"class":731},[167,153459,53834],{"class":512},[167,153461,153462],{"class":169,"line":785},[167,153463,741],{"emptyLinePlaceholder":740},[167,153465,153466,153468],{"class":169,"line":790},[167,153467,127375],{"class":731},[167,153469,857],{"class":512},[167,153471,153472,153475,153477,153479,153481,153483,153485,153487,153489,153491,153493,153495,153497,153499],{"class":169,"line":796},[167,153473,153474],{"class":731},"        with",[167,153476,148382],{"class":184},[167,153478,898],{"class":512},[167,153480,153415],{"class":184},[167,153482,14463],{"class":512},[167,153484,148392],{"class":177},[167,153486,14463],{"class":512},[167,153488,148397],{"class":7246},[167,153490,523],{"class":731},[167,153492,148402],{"class":177},[167,153494,15741],{"class":512},[167,153496,33388],{"class":731},[167,153498,149744],{"class":7246},[167,153500,857],{"class":512},[167,153502,153503,153505,153507,153509],{"class":169,"line":802},[167,153504,17758],{"class":731},[167,153506,149755],{"class":512},[167,153508,47354],{"class":7246},[167,153510,873],{"class":512},[167,153512,153513,153515],{"class":169,"line":808},[167,153514,127403],{"class":731},[167,153516,153517],{"class":512}," json.JSONDecodeError:\n",[167,153519,153520,153522,153524,153527],{"class":169,"line":814},[167,153521,34454],{"class":184},[167,153523,898],{"class":512},[167,153525,153526],{"class":177},"\"数据文件格式错误，已使用空数据启动\"",[167,153528,873],{"class":512},[167,153530,153531,153533],{"class":169,"line":820},[167,153532,16779],{"class":731},[167,153534,53834],{"class":512},[167,153536,153537],{"class":169,"line":826},[167,153538,741],{"emptyLinePlaceholder":740},[167,153540,153541],{"class":169,"line":832},[167,153542,741],{"emptyLinePlaceholder":740},[167,153544,153545,153547,153550],{"class":169,"line":837},[167,153546,845],{"class":731},[167,153548,153549],{"class":173}," save_students",[167,153551,153552],{"class":512},"(students):\n",[167,153554,153555,153557,153559,153561,153563,153565,153568,153570,153572,153574,153576,153578,153580,153582],{"class":169,"line":842},[167,153556,36180],{"class":731},[167,153558,148382],{"class":184},[167,153560,898],{"class":512},[167,153562,153415],{"class":184},[167,153564,14463],{"class":512},[167,153566,153567],{"class":177},"\"w\"",[167,153569,14463],{"class":512},[167,153571,148397],{"class":7246},[167,153573,523],{"class":731},[167,153575,148402],{"class":177},[167,153577,15741],{"class":512},[167,153579,33388],{"class":731},[167,153581,149744],{"class":7246},[167,153583,857],{"class":512},[167,153585,153586,153589,153591,153593,153595,153597,153599,153601,153604,153606,153608],{"class":169,"line":860},[167,153587,153588],{"class":512},"        json.dump(students, ",[167,153590,47354],{"class":7246},[167,153592,14463],{"class":512},[167,153594,148728],{"class":7246},[167,153596,523],{"class":731},[167,153598,35989],{"class":184},[167,153600,14463],{"class":512},[167,153602,153603],{"class":7246},"indent",[167,153605,523],{"class":731},[167,153607,2287],{"class":184},[167,153609,873],{"class":512},[167,153611,153612],{"class":169,"line":876},[167,153613,741],{"emptyLinePlaceholder":740},[167,153615,153616],{"class":169,"line":887},[167,153617,741],{"emptyLinePlaceholder":740},[167,153619,153620,153622,153625],{"class":169,"line":892},[167,153621,845],{"class":731},[167,153623,153624],{"class":173}," show_menu",[167,153626,33957],{"class":512},[167,153628,153629,153631,153633,153636],{"class":169,"line":907},[167,153630,895],{"class":184},[167,153632,898],{"class":512},[167,153634,153635],{"class":177},"\"====== 学生管理系统 ======\"",[167,153637,873],{"class":512},[167,153639,153640,153642,153644,153647],{"class":169,"line":920},[167,153641,895],{"class":184},[167,153643,898],{"class":512},[167,153645,153646],{"class":177},"\"1. 添加学生\"",[167,153648,873],{"class":512},[167,153650,153651,153653,153655,153658],{"class":169,"line":933},[167,153652,895],{"class":184},[167,153654,898],{"class":512},[167,153656,153657],{"class":177},"\"2. 删除学生\"",[167,153659,873],{"class":512},[167,153661,153662,153664,153666,153669],{"class":169,"line":946},[167,153663,895],{"class":184},[167,153665,898],{"class":512},[167,153667,153668],{"class":177},"\"3. 修改学生\"",[167,153670,873],{"class":512},[167,153672,153673,153675,153677,153680],{"class":169,"line":959},[167,153674,895],{"class":184},[167,153676,898],{"class":512},[167,153678,153679],{"class":177},"\"4. 查询学生\"",[167,153681,873],{"class":512},[167,153683,153684,153686,153688,153691],{"class":169,"line":964},[167,153685,895],{"class":184},[167,153687,898],{"class":512},[167,153689,153690],{"class":177},"\"5. 显示所有学生\"",[167,153692,873],{"class":512},[167,153694,153695,153697,153699,153702],{"class":169,"line":987},[167,153696,895],{"class":184},[167,153698,898],{"class":512},[167,153700,153701],{"class":177},"\"0. 退出系统\"",[167,153703,873],{"class":512},[167,153705,153706],{"class":169,"line":993},[167,153707,741],{"emptyLinePlaceholder":740},[167,153709,153710],{"class":169,"line":998},[167,153711,741],{"emptyLinePlaceholder":740},[167,153713,153714,153716,153719],{"class":169,"line":1010},[167,153715,845],{"class":731},[167,153717,153718],{"class":173}," find_student",[167,153720,153721],{"class":512},"(students, student_id):\n",[167,153723,153724,153726,153729,153731],{"class":169,"line":1022},[167,153725,967],{"class":731},[167,153727,153728],{"class":512}," student ",[167,153730,973],{"class":731},[167,153732,153733],{"class":512}," students:\n",[167,153735,153736,153738,153741,153743,153745,153747],{"class":169,"line":1027},[167,153737,4540],{"class":731},[167,153739,153740],{"class":512}," student[",[167,153742,153038],{"class":177},[167,153744,6475],{"class":512},[167,153746,4985],{"class":731},[167,153748,153749],{"class":512}," student_id:\n",[167,153751,153752,153754],{"class":169,"line":1032},[167,153753,17758],{"class":731},[167,153755,153756],{"class":512}," student\n",[167,153758,153759,153761],{"class":169,"line":1049},[167,153760,6122],{"class":731},[167,153762,153763],{"class":184}," None\n",[167,153765,153766],{"class":169,"line":10005},[167,153767,741],{"emptyLinePlaceholder":740},[167,153769,153770],{"class":169,"line":10011},[167,153771,741],{"emptyLinePlaceholder":740},[167,153773,153774,153776,153779],{"class":169,"line":10038},[167,153775,845],{"class":731},[167,153777,153778],{"class":173}," input_int",[167,153780,153781],{"class":512},"(prompt):\n",[167,153783,153784,153786,153788],{"class":169,"line":10043},[167,153785,4295],{"class":731},[167,153787,97278],{"class":184},[167,153789,857],{"class":512},[167,153791,153792,153795],{"class":169,"line":10049},[167,153793,153794],{"class":731},"        try",[167,153796,857],{"class":512},[167,153798,153799,153801,153803,153805,153807],{"class":169,"line":10061},[167,153800,17758],{"class":731},[167,153802,4426],{"class":184},[167,153804,898],{"class":512},[167,153806,55812],{"class":184},[167,153808,153809],{"class":512},"(prompt))\n",[167,153811,153812,153815,153818],{"class":169,"line":10073},[167,153813,153814],{"class":731},"        except",[167,153816,153817],{"class":184}," ValueError",[167,153819,857],{"class":512},[167,153821,153822,153824,153826,153829],{"class":169,"line":10085},[167,153823,36652],{"class":184},[167,153825,898],{"class":512},[167,153827,153828],{"class":177},"\"请输入整数\"",[167,153830,873],{"class":512},[167,153832,153833],{"class":169,"line":11744},[167,153834,741],{"emptyLinePlaceholder":740},[167,153836,153837],{"class":169,"line":11769},[167,153838,741],{"emptyLinePlaceholder":740},[167,153840,153841,153843,153846],{"class":169,"line":11792},[167,153842,845],{"class":731},[167,153844,153845],{"class":173}," input_float",[167,153847,153781],{"class":512},[167,153849,153850,153852,153854],{"class":169,"line":11816},[167,153851,4295],{"class":731},[167,153853,97278],{"class":184},[167,153855,857],{"class":512},[167,153857,153858,153860],{"class":169,"line":11821},[167,153859,153794],{"class":731},[167,153861,857],{"class":512},[167,153863,153864,153866,153868,153870,153872],{"class":169,"line":11826},[167,153865,17758],{"class":731},[167,153867,111388],{"class":184},[167,153869,898],{"class":512},[167,153871,55812],{"class":184},[167,153873,153809],{"class":512},[167,153875,153876,153878,153880],{"class":169,"line":11831},[167,153877,153814],{"class":731},[167,153879,153817],{"class":184},[167,153881,857],{"class":512},[167,153883,153884,153886,153888,153891],{"class":169,"line":11840},[167,153885,36652],{"class":184},[167,153887,898],{"class":512},[167,153889,153890],{"class":177},"\"请输入数字\"",[167,153892,873],{"class":512},[167,153894,153895],{"class":169,"line":11845},[167,153896,741],{"emptyLinePlaceholder":740},[167,153898,153899],{"class":169,"line":11851},[167,153900,741],{"emptyLinePlaceholder":740},[167,153902,153903,153905,153908],{"class":169,"line":11872},[167,153904,845],{"class":731},[167,153906,153907],{"class":173}," add_student",[167,153909,153552],{"class":512},[167,153911,153912,153915,153917,153919,153921,153924],{"class":169,"line":11878},[167,153913,153914],{"class":512},"    student_id ",[167,153916,523],{"class":731},[167,153918,62594],{"class":184},[167,153920,898],{"class":512},[167,153922,153923],{"class":177},"\"请输入学号:\"",[167,153925,873],{"class":512},[167,153927,153928],{"class":169,"line":11892},[167,153929,741],{"emptyLinePlaceholder":740},[167,153931,153932,153934],{"class":169,"line":11898},[167,153933,5136],{"class":731},[167,153935,153936],{"class":512}," find_student(students, student_id):\n",[167,153938,153939,153941,153943,153946],{"class":169,"line":11925},[167,153940,34454],{"class":184},[167,153942,898],{"class":512},[167,153944,153945],{"class":177},"\"学号已存在\"",[167,153947,873],{"class":512},[167,153949,153950],{"class":169,"line":11934},[167,153951,153952],{"class":731},"        return\n",[167,153954,153955],{"class":169,"line":11940},[167,153956,741],{"emptyLinePlaceholder":740},[167,153958,153959,153962,153964,153966,153968,153971],{"class":169,"line":11948},[167,153960,153961],{"class":512},"    name ",[167,153963,523],{"class":731},[167,153965,62594],{"class":184},[167,153967,898],{"class":512},[167,153969,153970],{"class":177},"\"请输入姓名:\"",[167,153972,873],{"class":512},[167,153974,153975,153978,153980,153983,153986],{"class":169,"line":11953},[167,153976,153977],{"class":512},"    age ",[167,153979,523],{"class":731},[167,153981,153982],{"class":512}," input_int(",[167,153984,153985],{"class":177},"\"请输入年龄:\"",[167,153987,873],{"class":512},[167,153989,153990,153993,153995,153998,154001],{"class":169,"line":18630},[167,153991,153992],{"class":512},"    score ",[167,153994,523],{"class":731},[167,153996,153997],{"class":512}," input_float(",[167,153999,154000],{"class":177},"\"请输入成绩:\"",[167,154002,873],{"class":512},[167,154004,154005],{"class":169,"line":18636},[167,154006,741],{"emptyLinePlaceholder":740},[167,154008,154009],{"class":169,"line":18659},[167,154010,154011],{"class":512},"    students.append({\n",[167,154013,154014,154017],{"class":169,"line":18665},[167,154015,154016],{"class":177},"        \"student_id\"",[167,154018,154019],{"class":512},": student_id,\n",[167,154021,154022,154025],{"class":169,"line":18688},[167,154023,154024],{"class":177},"        \"name\"",[167,154026,154027],{"class":512},": name,\n",[167,154029,154030,154033],{"class":169,"line":18702},[167,154031,154032],{"class":177},"        \"age\"",[167,154034,154035],{"class":512},": age,\n",[167,154037,154038,154041],{"class":169,"line":18722},[167,154039,154040],{"class":177},"        \"score\"",[167,154042,154043],{"class":512},": score,\n",[167,154045,154046],{"class":169,"line":18728},[167,154047,35463],{"class":512},[167,154049,154050],{"class":169,"line":18739},[167,154051,154052],{"class":512},"    save_students(students)\n",[167,154054,154055,154057,154059,154062],{"class":169,"line":18762},[167,154056,895],{"class":184},[167,154058,898],{"class":512},[167,154060,154061],{"class":177},"\"添加成功\"",[167,154063,873],{"class":512},[167,154065,154066],{"class":169,"line":18784},[167,154067,741],{"emptyLinePlaceholder":740},[167,154069,154070],{"class":169,"line":18789},[167,154071,741],{"emptyLinePlaceholder":740},[167,154073,154074,154076,154079],{"class":169,"line":18795},[167,154075,845],{"class":731},[167,154077,154078],{"class":173}," delete_student",[167,154080,153552],{"class":512},[167,154082,154083,154085,154087,154089,154091,154094],{"class":169,"line":18809},[167,154084,153914],{"class":512},[167,154086,523],{"class":731},[167,154088,62594],{"class":184},[167,154090,898],{"class":512},[167,154092,154093],{"class":177},"\"请输入要删除的学号:\"",[167,154095,873],{"class":512},[167,154097,154098,154101,154103],{"class":169,"line":18822},[167,154099,154100],{"class":512},"    student ",[167,154102,523],{"class":731},[167,154104,154105],{"class":512}," find_student(students, student_id)\n",[167,154107,154108],{"class":169,"line":18827},[167,154109,741],{"emptyLinePlaceholder":740},[167,154111,154112,154114,154116,154118,154120],{"class":169,"line":18841},[167,154113,5136],{"class":731},[167,154115,153728],{"class":512},[167,154117,40928],{"class":731},[167,154119,40934],{"class":184},[167,154121,857],{"class":512},[167,154123,154124,154126,154128,154131],{"class":169,"line":18846},[167,154125,34454],{"class":184},[167,154127,898],{"class":512},[167,154129,154130],{"class":177},"\"学生不存在\"",[167,154132,873],{"class":512},[167,154134,154135],{"class":169,"line":18852},[167,154136,153952],{"class":731},[167,154138,154139],{"class":169,"line":18857},[167,154140,741],{"emptyLinePlaceholder":740},[167,154142,154143],{"class":169,"line":18871},[167,154144,154145],{"class":512},"    students.remove(student)\n",[167,154147,154148],{"class":169,"line":18876},[167,154149,154052],{"class":512},[167,154151,154152,154154,154156,154159],{"class":169,"line":18881},[167,154153,895],{"class":184},[167,154155,898],{"class":512},[167,154157,154158],{"class":177},"\"删除成功\"",[167,154160,873],{"class":512},[167,154162,154163],{"class":169,"line":18895},[167,154164,741],{"emptyLinePlaceholder":740},[167,154166,154167],{"class":169,"line":18907},[167,154168,741],{"emptyLinePlaceholder":740},[167,154170,154171,154173,154176],{"class":169,"line":18912},[167,154172,845],{"class":731},[167,154174,154175],{"class":173}," update_student",[167,154177,153552],{"class":512},[167,154179,154180,154182,154184,154186,154188,154191],{"class":169,"line":18925},[167,154181,153914],{"class":512},[167,154183,523],{"class":731},[167,154185,62594],{"class":184},[167,154187,898],{"class":512},[167,154189,154190],{"class":177},"\"请输入要修改的学号:\"",[167,154192,873],{"class":512},[167,154194,154195,154197,154199],{"class":169,"line":18930},[167,154196,154100],{"class":512},[167,154198,523],{"class":731},[167,154200,154105],{"class":512},[167,154202,154203],{"class":169,"line":18935},[167,154204,741],{"emptyLinePlaceholder":740},[167,154206,154207,154209,154211,154213,154215],{"class":169,"line":18940},[167,154208,5136],{"class":731},[167,154210,153728],{"class":512},[167,154212,40928],{"class":731},[167,154214,40934],{"class":184},[167,154216,857],{"class":512},[167,154218,154219,154221,154223,154225],{"class":169,"line":18953},[167,154220,34454],{"class":184},[167,154222,898],{"class":512},[167,154224,154130],{"class":177},[167,154226,873],{"class":512},[167,154228,154229],{"class":169,"line":18958},[167,154230,153952],{"class":731},[167,154232,154233],{"class":169,"line":34636},[167,154234,741],{"emptyLinePlaceholder":740},[167,154236,154237,154239,154241,154243,154245,154248],{"class":169,"line":34642},[167,154238,153961],{"class":512},[167,154240,523],{"class":731},[167,154242,62594],{"class":184},[167,154244,898],{"class":512},[167,154246,154247],{"class":177},"\"请输入新姓名:\"",[167,154249,873],{"class":512},[167,154251,154252,154254,154256,154258,154261],{"class":169,"line":34648},[167,154253,153977],{"class":512},[167,154255,523],{"class":731},[167,154257,153982],{"class":512},[167,154259,154260],{"class":177},"\"请输入新年龄:\"",[167,154262,873],{"class":512},[167,154264,154265,154267,154269,154271,154274],{"class":169,"line":34654},[167,154266,153992],{"class":512},[167,154268,523],{"class":731},[167,154270,153997],{"class":512},[167,154272,154273],{"class":177},"\"请输入新成绩:\"",[167,154275,873],{"class":512},[167,154277,154278],{"class":169,"line":34660},[167,154279,741],{"emptyLinePlaceholder":740},[167,154281,154282,154285,154287,154289,154291],{"class":169,"line":34671},[167,154283,154284],{"class":512},"    student[",[167,154286,64668],{"class":177},[167,154288,6475],{"class":512},[167,154290,523],{"class":731},[167,154292,151386],{"class":512},[167,154294,154295,154297,154299,154301,154303],{"class":169,"line":34677},[167,154296,154284],{"class":512},[167,154298,71113],{"class":177},[167,154300,6475],{"class":512},[167,154302,523],{"class":731},[167,154304,151398],{"class":512},[167,154306,154307,154309,154311,154313,154315],{"class":169,"line":34697},[167,154308,154284],{"class":512},[167,154310,153063],{"class":177},[167,154312,6475],{"class":512},[167,154314,523],{"class":731},[167,154316,3644],{"class":512},[167,154318,154319],{"class":169,"line":34703},[167,154320,741],{"emptyLinePlaceholder":740},[167,154322,154323],{"class":169,"line":34714},[167,154324,154052],{"class":512},[167,154326,154327,154329,154331,154334],{"class":169,"line":34720},[167,154328,895],{"class":184},[167,154330,898],{"class":512},[167,154332,154333],{"class":177},"\"修改成功\"",[167,154335,873],{"class":512},[167,154337,154338],{"class":169,"line":34726},[167,154339,741],{"emptyLinePlaceholder":740},[167,154341,154342],{"class":169,"line":34732},[167,154343,741],{"emptyLinePlaceholder":740},[167,154345,154346,154348,154351],{"class":169,"line":34738},[167,154347,845],{"class":731},[167,154349,154350],{"class":173}," query_student",[167,154352,153552],{"class":512},[167,154354,154355,154357,154359,154361,154363,154366],{"class":169,"line":34744},[167,154356,153914],{"class":512},[167,154358,523],{"class":731},[167,154360,62594],{"class":184},[167,154362,898],{"class":512},[167,154364,154365],{"class":177},"\"请输入要查询的学号:\"",[167,154367,873],{"class":512},[167,154369,154370,154372,154374],{"class":169,"line":34750},[167,154371,154100],{"class":512},[167,154373,523],{"class":731},[167,154375,154105],{"class":512},[167,154377,154378],{"class":169,"line":34756},[167,154379,741],{"emptyLinePlaceholder":740},[167,154381,154382,154384,154386,154388,154390],{"class":169,"line":34776},[167,154383,5136],{"class":731},[167,154385,153728],{"class":512},[167,154387,40928],{"class":731},[167,154389,40934],{"class":184},[167,154391,857],{"class":512},[167,154393,154394,154396,154398,154400],{"class":169,"line":34782},[167,154395,34454],{"class":184},[167,154397,898],{"class":512},[167,154399,154130],{"class":177},[167,154401,873],{"class":512},[167,154403,154404],{"class":169,"line":34798},[167,154405,153952],{"class":731},[167,154407,154408],{"class":169,"line":34804},[167,154409,741],{"emptyLinePlaceholder":740},[167,154411,154412],{"class":169,"line":34818},[167,154413,154414],{"class":512},"    print_student(student)\n",[167,154416,154417],{"class":169,"line":34824},[167,154418,741],{"emptyLinePlaceholder":740},[167,154420,154421],{"class":169,"line":34839},[167,154422,741],{"emptyLinePlaceholder":740},[167,154424,154425,154427,154430],{"class":169,"line":34845},[167,154426,845],{"class":731},[167,154428,154429],{"class":173}," print_student",[167,154431,154432],{"class":512},"(student):\n",[167,154434,154435,154437],{"class":169,"line":34854},[167,154436,895],{"class":184},[167,154438,153030],{"class":512},[167,154440,154441,154444,154446,154448,154451,154454,154456,154459],{"class":169,"line":34860},[167,154442,154443],{"class":731},"        f",[167,154445,2452],{"class":177},[167,154447,3096],{"class":184},[167,154449,154450],{"class":512},"student[",[167,154452,154453],{"class":177},"'student_id'",[167,154455,3139],{"class":512},[167,154457,154458],{"class":184},"}\\t",[167,154460,27153],{"class":177},[167,154462,154463,154465,154467,154469,154471,154474,154476,154478],{"class":169,"line":34869},[167,154464,154443],{"class":731},[167,154466,2452],{"class":177},[167,154468,3096],{"class":184},[167,154470,154450],{"class":512},[167,154472,154473],{"class":177},"'name'",[167,154475,3139],{"class":512},[167,154477,154458],{"class":184},[167,154479,27153],{"class":177},[167,154481,154482,154484,154486,154488,154490,154493,154495,154497],{"class":169,"line":34875},[167,154483,154443],{"class":731},[167,154485,2452],{"class":177},[167,154487,3096],{"class":184},[167,154489,154450],{"class":512},[167,154491,154492],{"class":177},"'age'",[167,154494,3139],{"class":512},[167,154496,154458],{"class":184},[167,154498,27153],{"class":177},[167,154500,154501,154503,154505,154507,154509,154512,154514,154516],{"class":169,"line":34881},[167,154502,154443],{"class":731},[167,154504,2452],{"class":177},[167,154506,3096],{"class":184},[167,154508,154450],{"class":512},[167,154510,154511],{"class":177},"'score'",[167,154513,3139],{"class":512},[167,154515,3145],{"class":184},[167,154517,27153],{"class":177},[167,154519,154520],{"class":169,"line":34890},[167,154521,154522],{"class":512},"    )\n",[167,154524,154525],{"class":169,"line":34896},[167,154526,741],{"emptyLinePlaceholder":740},[167,154528,154529],{"class":169,"line":34907},[167,154530,741],{"emptyLinePlaceholder":740},[167,154532,154533,154535,154538],{"class":169,"line":34913},[167,154534,845],{"class":731},[167,154536,154537],{"class":173}," show_all_students",[167,154539,153552],{"class":512},[167,154541,154542,154544,154546],{"class":169,"line":34932},[167,154543,5136],{"class":731},[167,154545,40931],{"class":731},[167,154547,153733],{"class":512},[167,154549,154550,154552,154554,154557],{"class":169,"line":34938},[167,154551,34454],{"class":184},[167,154553,898],{"class":512},[167,154555,154556],{"class":177},"\"暂无学生\"",[167,154558,873],{"class":512},[167,154560,154561],{"class":169,"line":34949},[167,154562,153952],{"class":731},[167,154564,154565],{"class":169,"line":34955},[167,154566,741],{"emptyLinePlaceholder":740},[167,154568,154569,154571,154573,154576,154578,154581,154583,154586,154588,154591],{"class":169,"line":34975},[167,154570,895],{"class":184},[167,154572,898],{"class":512},[167,154574,154575],{"class":177},"\"学号",[167,154577,3299],{"class":184},[167,154579,154580],{"class":177},"姓名",[167,154582,3299],{"class":184},[167,154584,154585],{"class":177},"年龄",[167,154587,3299],{"class":184},[167,154589,154590],{"class":177},"成绩\"",[167,154592,873],{"class":512},[167,154594,154595,154597,154599,154601],{"class":169,"line":34991},[167,154596,967],{"class":731},[167,154598,153728],{"class":512},[167,154600,973],{"class":731},[167,154602,153733],{"class":512},[167,154604,154605],{"class":169,"line":34997},[167,154606,154607],{"class":512},"        print_student(student)\n",[167,154609,154610],{"class":169,"line":35011},[167,154611,741],{"emptyLinePlaceholder":740},[167,154613,154614],{"class":169,"line":35017},[167,154615,741],{"emptyLinePlaceholder":740},[167,154617,154618,154620,154622],{"class":169,"line":35023},[167,154619,845],{"class":731},[167,154621,848],{"class":173},[167,154623,33957],{"class":512},[167,154625,154626,154629,154631],{"class":169,"line":35034},[167,154627,154628],{"class":512},"    students ",[167,154630,523],{"class":731},[167,154632,154633],{"class":512}," load_students()\n",[167,154635,154636],{"class":169,"line":35040},[167,154637,741],{"emptyLinePlaceholder":740},[167,154639,154640,154642,154644],{"class":169,"line":35046},[167,154641,4295],{"class":731},[167,154643,97278],{"class":184},[167,154645,857],{"class":512},[167,154647,154648],{"class":169,"line":35056},[167,154649,154650],{"class":512},"        show_menu()\n",[167,154652,154653,154656,154658,154660,154662,154665],{"class":169,"line":35062},[167,154654,154655],{"class":512},"        choice ",[167,154657,523],{"class":731},[167,154659,62594],{"class":184},[167,154661,898],{"class":512},[167,154663,154664],{"class":177},"\"请输入操作:\"",[167,154666,873],{"class":512},[167,154668,154669],{"class":169,"line":35073},[167,154670,741],{"emptyLinePlaceholder":740},[167,154672,154673,154675,154678,154680,154683],{"class":169,"line":35079},[167,154674,4540],{"class":731},[167,154676,154677],{"class":512}," choice ",[167,154679,4985],{"class":731},[167,154681,154682],{"class":177}," \"1\"",[167,154684,857],{"class":512},[167,154686,154687],{"class":169,"line":35089},[167,154688,154689],{"class":512},"            add_student(students)\n",[167,154691,154692,154695,154697,154699,154702],{"class":169,"line":35094},[167,154693,154694],{"class":731},"        elif",[167,154696,154677],{"class":512},[167,154698,4985],{"class":731},[167,154700,154701],{"class":177}," \"2\"",[167,154703,857],{"class":512},[167,154705,154706],{"class":169,"line":35100},[167,154707,154708],{"class":512},"            delete_student(students)\n",[167,154710,154711,154713,154715,154717,154720],{"class":169,"line":35149},[167,154712,154694],{"class":731},[167,154714,154677],{"class":512},[167,154716,4985],{"class":731},[167,154718,154719],{"class":177}," \"3\"",[167,154721,857],{"class":512},[167,154723,154724],{"class":169,"line":35196},[167,154725,154726],{"class":512},"            update_student(students)\n",[167,154728,154729,154731,154733,154735,154738],{"class":169,"line":35201},[167,154730,154694],{"class":731},[167,154732,154677],{"class":512},[167,154734,4985],{"class":731},[167,154736,154737],{"class":177}," \"4\"",[167,154739,857],{"class":512},[167,154741,154742],{"class":169,"line":35207},[167,154743,154744],{"class":512},"            query_student(students)\n",[167,154746,154747,154749,154751,154753,154756],{"class":169,"line":35226},[167,154748,154694],{"class":731},[167,154750,154677],{"class":512},[167,154752,4985],{"class":731},[167,154754,154755],{"class":177}," \"5\"",[167,154757,857],{"class":512},[167,154759,154760],{"class":169,"line":35232},[167,154761,154762],{"class":512},"            show_all_students(students)\n",[167,154764,154765,154767,154769,154771,154774],{"class":169,"line":35252},[167,154766,154694],{"class":731},[167,154768,154677],{"class":512},[167,154770,4985],{"class":731},[167,154772,154773],{"class":177}," \"0\"",[167,154775,857],{"class":512},[167,154777,154778,154780,154782,154785],{"class":169,"line":35258},[167,154779,36652],{"class":184},[167,154781,898],{"class":512},[167,154783,154784],{"class":177},"\"退出系统\"",[167,154786,873],{"class":512},[167,154788,154789],{"class":169,"line":35264},[167,154790,116689],{"class":731},[167,154792,154793,154795],{"class":169,"line":35274},[167,154794,4577],{"class":731},[167,154796,857],{"class":512},[167,154798,154799,154801,154803,154806],{"class":169,"line":35279},[167,154800,36652],{"class":184},[167,154802,898],{"class":512},[167,154804,154805],{"class":177},"\"输入错误\"",[167,154807,873],{"class":512},[167,154809,154810],{"class":169,"line":35285},[167,154811,741],{"emptyLinePlaceholder":740},[167,154813,154814],{"class":169,"line":35301},[167,154815,741],{"emptyLinePlaceholder":740},[167,154817,154818,154820,154822,154824,154826],{"class":169,"line":35346},[167,154819,1035],{"class":731},[167,154821,1038],{"class":184},[167,154823,1041],{"class":731},[167,154825,1044],{"class":177},[167,154827,857],{"class":512},[167,154829,154830],{"class":169,"line":35352},[167,154831,1052],{"class":512},[19,154833,154834],{},"这个项目串联了：",[40,154836,154837,154840,154843,154846,154849,154851],{},[43,154838,154839],{},"菜单循环。",[43,154841,154842],{},"函数封装。",[43,154844,154845],{},"列表字典。",[43,154847,154848],{},"JSON 读写。",[43,154850,153318],{},[43,154852,154853,423],{},[34,154854,154855],{},"if __name__ == \"__main__\"",[14,154857,154859],{"id":154858},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154861,154862],{},"可以进一步拆成两个类：",[40,154864,154865,154870],{},[43,154866,154867,154869],{},[34,154868,151159],{},"：表示单个学生。",[43,154871,154872,154874],{},[34,154873,153185],{},"：负责学生增删改查和文件保存。",[19,154876,154877],{},"示意代码：",[26,154879,154881],{"className":723,"code":154880,"language":305,"meta":32,"style":32},"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",[34,154882,154883,154893,154897,154901,154905,154913,154920,154926,154932,154938,154942,154950,154956,154966,154976,154986,154996,155000,155004,155010,155018,155026,155034,155042,155050,155058],{"__ignoreMap":32},[167,154884,154885,154887,154889,154891],{"class":169,"line":170},[167,154886,32745],{"class":731},[167,154888,152743],{"class":512},[167,154890,732],{"class":731},[167,154892,152748],{"class":512},[167,154894,154895],{"class":169,"line":191},[167,154896,741],{"emptyLinePlaceholder":740},[167,154898,154899],{"class":169,"line":205},[167,154900,741],{"emptyLinePlaceholder":740},[167,154902,154903],{"class":169,"line":219},[167,154904,152761],{"class":173},[167,154906,154907,154909,154911],{"class":169,"line":230},[167,154908,16721],{"class":731},[167,154910,9928],{"class":173},[167,154912,857],{"class":512},[167,154914,154915,154918],{"class":169,"line":241},[167,154916,154917],{"class":512},"    student_id: ",[167,154919,152777],{"class":184},[167,154921,154922,154924],{"class":169,"line":261},[167,154923,152774],{"class":512},[167,154925,152777],{"class":184},[167,154927,154928,154930],{"class":169,"line":773},[167,154929,152782],{"class":512},[167,154931,152785],{"class":184},[167,154933,154934,154936],{"class":169,"line":779},[167,154935,152790],{"class":512},[167,154937,152793],{"class":184},[167,154939,154940],{"class":169,"line":785},[167,154941,741],{"emptyLinePlaceholder":740},[167,154943,154944,154946,154948],{"class":169,"line":790},[167,154945,32808],{"class":731},[167,154947,152941],{"class":173},[167,154949,32814],{"class":512},[167,154951,154952,154954],{"class":169,"line":796},[167,154953,16779],{"class":731},[167,154955,17598],{"class":512},[167,154957,154958,154960,154962,154964],{"class":169,"line":802},[167,154959,152954],{"class":177},[167,154961,53435],{"class":512},[167,154963,32830],{"class":184},[167,154965,152961],{"class":512},[167,154967,154968,154970,154972,154974],{"class":169,"line":808},[167,154969,152966],{"class":177},[167,154971,53435],{"class":512},[167,154973,32830],{"class":184},[167,154975,152973],{"class":512},[167,154977,154978,154980,154982,154984],{"class":169,"line":814},[167,154979,152978],{"class":177},[167,154981,53435],{"class":512},[167,154983,32830],{"class":184},[167,154985,152985],{"class":512},[167,154987,154988,154990,154992,154994],{"class":169,"line":820},[167,154989,152990],{"class":177},[167,154991,53435],{"class":512},[167,154993,32830],{"class":184},[167,154995,152997],{"class":512},[167,154997,154998],{"class":169,"line":826},[167,154999,4572],{"class":512},[167,155001,155002],{"class":169,"line":832},[167,155003,741],{"emptyLinePlaceholder":740},[167,155005,155006,155008],{"class":169,"line":837},[167,155007,152605],{"class":173},[167,155009,152608],{"class":184},[167,155011,155012,155014,155016],{"class":169,"line":842},[167,155013,32808],{"class":731},[167,155015,153018],{"class":173},[167,155017,153021],{"class":512},[167,155019,155020,155022,155024],{"class":169,"line":860},[167,155021,16779],{"class":731},[167,155023,152625],{"class":184},[167,155025,153030],{"class":512},[167,155027,155028,155030,155032],{"class":169,"line":876},[167,155029,153035],{"class":512},[167,155031,153038],{"class":177},[167,155033,89822],{"class":512},[167,155035,155036,155038,155040],{"class":169,"line":887},[167,155037,153035],{"class":512},[167,155039,64668],{"class":177},[167,155041,89822],{"class":512},[167,155043,155044,155046,155048],{"class":169,"line":892},[167,155045,153035],{"class":512},[167,155047,71113],{"class":177},[167,155049,89822],{"class":512},[167,155051,155052,155054,155056],{"class":169,"line":907},[167,155053,153035],{"class":512},[167,155055,153063],{"class":177},[167,155057,89822],{"class":512},[167,155059,155060],{"class":169,"line":920},[167,155061,40127],{"class":512},[19,155063,155064],{},"管理器示意：",[26,155066,155068],{"className":723,"code":155067,"language":305,"meta":32,"style":32},"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",[34,155069,155070,155079,155087,155098,155102,155112,155125,155136,155143,155149,155153,155162,155171,155177,155184],{"__ignoreMap":32},[167,155071,155072,155074,155077],{"class":169,"line":170},[167,155073,16721],{"class":731},[167,155075,155076],{"class":173}," StudentManager",[167,155078,857],{"class":512},[167,155080,155081,155083,155085],{"class":169,"line":191},[167,155082,32808],{"class":731},[167,155084,32811],{"class":184},[167,155086,32814],{"class":512},[167,155088,155089,155091,155094,155096],{"class":169,"line":205},[167,155090,32852],{"class":184},[167,155092,155093],{"class":512},".students ",[167,155095,523],{"class":731},[167,155097,53834],{"class":512},[167,155099,155100],{"class":169,"line":219},[167,155101,741],{"emptyLinePlaceholder":740},[167,155103,155104,155106,155109],{"class":169,"line":230},[167,155105,32808],{"class":731},[167,155107,155108],{"class":173}," find_by_id",[167,155110,155111],{"class":512},"(self, student_id):\n",[167,155113,155114,155116,155118,155120,155122],{"class":169,"line":241},[167,155115,5437],{"class":731},[167,155117,153728],{"class":512},[167,155119,973],{"class":731},[167,155121,40874],{"class":184},[167,155123,155124],{"class":512},".students:\n",[167,155126,155127,155129,155132,155134],{"class":169,"line":261},[167,155128,6674],{"class":731},[167,155130,155131],{"class":512}," student.student_id ",[167,155133,4985],{"class":731},[167,155135,153749],{"class":512},[167,155137,155138,155141],{"class":169,"line":773},[167,155139,155140],{"class":731},"                return",[167,155142,153756],{"class":512},[167,155144,155145,155147],{"class":169,"line":779},[167,155146,16779],{"class":731},[167,155148,153763],{"class":184},[167,155150,155151],{"class":169,"line":785},[167,155152,741],{"emptyLinePlaceholder":740},[167,155154,155155,155157,155159],{"class":169,"line":790},[167,155156,32808],{"class":731},[167,155158,7239],{"class":173},[167,155160,155161],{"class":512},"(self, student):\n",[167,155163,155164,155166,155168],{"class":169,"line":796},[167,155165,4540],{"class":731},[167,155167,40874],{"class":184},[167,155169,155170],{"class":512},".find_by_id(student.student_id):\n",[167,155172,155173,155175],{"class":169,"line":802},[167,155174,17758],{"class":731},[167,155176,127398],{"class":184},[167,155178,155179,155181],{"class":169,"line":808},[167,155180,32852],{"class":184},[167,155182,155183],{"class":512},".students.append(student)\n",[167,155185,155186,155188],{"class":169,"line":814},[167,155187,16779],{"class":731},[167,155189,155190],{"class":184}," True\n",[19,155192,155193],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155195,155197],{"id":155196},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[494,155199,155201],{"id":155200},"_1251-数据结构","12.5.1 数据结构",[26,155203,155205],{"className":723,"code":155204,"language":305,"meta":32,"style":32},"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",[34,155206,155207,155215,155246,155276,155305,155334],{"__ignoreMap":32},[167,155208,155209,155211,155213],{"class":169,"line":170},[167,155210,150056],{"class":512},[167,155212,523],{"class":731},[167,155214,57436],{"class":512},[167,155216,155217,155219,155221,155223,155225,155227,155230,155232,155235,155237,155239,155241,155244],{"class":169,"line":191},[167,155218,149976],{"class":512},[167,155220,149588],{"class":177},[167,155222,53435],{"class":512},[167,155224,150199],{"class":177},[167,155226,14463],{"class":512},[167,155228,155229],{"class":177},"\"category\"",[167,155231,53435],{"class":512},[167,155233,155234],{"class":177},"\"手机\"",[167,155236,14463],{"class":512},[167,155238,86070],{"class":177},[167,155240,53435],{"class":512},[167,155242,155243],{"class":184},"12000",[167,155245,6962],{"class":512},[167,155247,155248,155250,155252,155254,155256,155258,155260,155262,155265,155267,155269,155271,155274],{"class":169,"line":205},[167,155249,149976],{"class":512},[167,155251,149588],{"class":177},[167,155253,53435],{"class":512},[167,155255,150199],{"class":177},[167,155257,14463],{"class":512},[167,155259,155229],{"class":177},[167,155261,53435],{"class":512},[167,155263,155264],{"class":177},"\"电脑\"",[167,155266,14463],{"class":512},[167,155268,86070],{"class":177},[167,155270,53435],{"class":512},[167,155272,155273],{"class":184},"18000",[167,155275,6962],{"class":512},[167,155277,155278,155280,155282,155284,155286,155288,155290,155292,155294,155296,155298,155300,155303],{"class":169,"line":219},[167,155279,149976],{"class":512},[167,155281,149588],{"class":177},[167,155283,53435],{"class":512},[167,155285,150220],{"class":177},[167,155287,14463],{"class":512},[167,155289,155229],{"class":177},[167,155291,53435],{"class":512},[167,155293,155234],{"class":177},[167,155295,14463],{"class":512},[167,155297,86070],{"class":177},[167,155299,53435],{"class":512},[167,155301,155302],{"class":184},"15000",[167,155304,6962],{"class":512},[167,155306,155307,155309,155311,155313,155315,155317,155319,155321,155323,155325,155327,155329,155332],{"class":169,"line":230},[167,155308,149976],{"class":512},[167,155310,149588],{"class":177},[167,155312,53435],{"class":512},[167,155314,150220],{"class":177},[167,155316,14463],{"class":512},[167,155318,155229],{"class":177},[167,155320,53435],{"class":512},[167,155322,155264],{"class":177},[167,155324,14463],{"class":512},[167,155326,86070],{"class":177},[167,155328,53435],{"class":512},[167,155330,155331],{"class":184},"16000",[167,155333,6962],{"class":512},[167,155335,155336],{"class":169,"line":241},[167,155337,35249],{"class":512},[494,155339,155341],{"id":155340},"_1252-按日期统计","12.5.2 按日期统计",[26,155343,155345],{"className":723,"code":155344,"language":305,"meta":32,"style":32},"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",[34,155346,155347,155356,155360,155371,155385,155398,155417,155421],{"__ignoreMap":32},[167,155348,155349,155352,155354],{"class":169,"line":170},[167,155350,155351],{"class":512},"daily_total ",[167,155353,523],{"class":731},[167,155355,89854],{"class":512},[167,155357,155358],{"class":169,"line":191},[167,155359,741],{"emptyLinePlaceholder":740},[167,155361,155362,155364,155366,155368],{"class":169,"line":205},[167,155363,1168],{"class":731},[167,155365,149800],{"class":512},[167,155367,973],{"class":731},[167,155369,155370],{"class":512}," sales:\n",[167,155372,155373,155376,155378,155381,155383],{"class":169,"line":219},[167,155374,155375],{"class":512},"    date ",[167,155377,523],{"class":731},[167,155379,155380],{"class":512}," item[",[167,155382,149588],{"class":177},[167,155384,35249],{"class":512},[167,155386,155387,155390,155392,155394,155396],{"class":169,"line":230},[167,155388,155389],{"class":512},"    amount ",[167,155391,523],{"class":731},[167,155393,155380],{"class":512},[167,155395,86070],{"class":177},[167,155397,35249],{"class":512},[167,155399,155400,155403,155405,155408,155410,155412,155414],{"class":169,"line":241},[167,155401,155402],{"class":512},"    daily_total[date] ",[167,155404,523],{"class":731},[167,155406,155407],{"class":512}," daily_total.get(date, ",[167,155409,1154],{"class":184},[167,155411,15741],{"class":512},[167,155413,2681],{"class":731},[167,155415,155416],{"class":512}," amount\n",[167,155418,155419],{"class":169,"line":261},[167,155420,741],{"emptyLinePlaceholder":740},[167,155422,155423,155425],{"class":169,"line":773},[167,155424,1606],{"class":184},[167,155426,155427],{"class":512},"(daily_total)\n",[494,155429,155431],{"id":155430},"_1253-按类别统计","12.5.3 按类别统计",[26,155433,155435],{"className":723,"code":155434,"language":305,"meta":32,"style":32},"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",[34,155436,155437,155446,155450,155460,155473,155485,155503,155507],{"__ignoreMap":32},[167,155438,155439,155442,155444],{"class":169,"line":170},[167,155440,155441],{"class":512},"category_total ",[167,155443,523],{"class":731},[167,155445,89854],{"class":512},[167,155447,155448],{"class":169,"line":191},[167,155449,741],{"emptyLinePlaceholder":740},[167,155451,155452,155454,155456,155458],{"class":169,"line":205},[167,155453,1168],{"class":731},[167,155455,149800],{"class":512},[167,155457,973],{"class":731},[167,155459,155370],{"class":512},[167,155461,155462,155465,155467,155469,155471],{"class":169,"line":219},[167,155463,155464],{"class":512},"    category ",[167,155466,523],{"class":731},[167,155468,155380],{"class":512},[167,155470,155229],{"class":177},[167,155472,35249],{"class":512},[167,155474,155475,155477,155479,155481,155483],{"class":169,"line":230},[167,155476,155389],{"class":512},[167,155478,523],{"class":731},[167,155480,155380],{"class":512},[167,155482,86070],{"class":177},[167,155484,35249],{"class":512},[167,155486,155487,155490,155492,155495,155497,155499,155501],{"class":169,"line":241},[167,155488,155489],{"class":512},"    category_total[category] ",[167,155491,523],{"class":731},[167,155493,155494],{"class":512}," category_total.get(category, ",[167,155496,1154],{"class":184},[167,155498,15741],{"class":512},[167,155500,2681],{"class":731},[167,155502,155416],{"class":512},[167,155504,155505],{"class":169,"line":261},[167,155506,741],{"emptyLinePlaceholder":740},[167,155508,155509,155511],{"class":169,"line":773},[167,155510,1606],{"class":184},[167,155512,155513],{"class":512},"(category_total)\n",[494,155515,155517],{"id":155516},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,155519,155521],{"className":723,"code":155520,"language":305,"meta":32,"style":32},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[34,155522,155523,155548],{"__ignoreMap":32},[167,155524,155525,155528,155530,155532,155535,155538,155541,155544,155546],{"class":169,"line":170},[167,155526,155527],{"class":512},"top_date, top_amount ",[167,155529,523],{"class":731},[167,155531,7981],{"class":184},[167,155533,155534],{"class":512},"(daily_total.items(), ",[167,155536,155537],{"class":7246},"key",[167,155539,155540],{"class":731},"=lambda",[167,155542,155543],{"class":512}," item: item[",[167,155545,2418],{"class":184},[167,155547,6689],{"class":512},[167,155549,155550,155552],{"class":169,"line":191},[167,155551,1606],{"class":184},[167,155553,155554],{"class":512},"(top_date, top_amount)\n",[14,155556,155558],{"id":155557},"_126-绘制柱状图","12.6 绘制柱状图",[26,155560,155562],{"className":723,"code":155561,"language":305,"meta":32,"style":32},"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",[34,155563,155564,155578,155589,155593,155601,155613,155625,155636,155640,155644,155654,155665,155679,155684,155701,155718,155734,155738],{"__ignoreMap":32},[167,155565,155566,155568,155570,155572,155574,155576],{"class":169,"line":170},[167,155567,32745],{"class":731},[167,155569,148970],{"class":512},[167,155571,732],{"class":731},[167,155573,148975],{"class":512},[167,155575,33388],{"class":731},[167,155577,148980],{"class":512},[167,155579,155580,155582,155584,155586],{"class":169,"line":191},[167,155581,32745],{"class":731},[167,155583,148829],{"class":512},[167,155585,732],{"class":731},[167,155587,155588],{"class":512}," Bar\n",[167,155590,155591],{"class":169,"line":205},[167,155592,741],{"emptyLinePlaceholder":740},[167,155594,155595,155597,155599],{"class":169,"line":219},[167,155596,155441],{"class":512},[167,155598,523],{"class":731},[167,155600,17598],{"class":512},[167,155602,155603,155606,155608,155611],{"class":169,"line":230},[167,155604,155605],{"class":177},"    \"手机\"",[167,155607,53435],{"class":512},[167,155609,155610],{"class":184},"27000",[167,155612,33471],{"class":512},[167,155614,155615,155618,155620,155623],{"class":169,"line":241},[167,155616,155617],{"class":177},"    \"电脑\"",[167,155619,53435],{"class":512},[167,155621,155622],{"class":184},"34000",[167,155624,33471],{"class":512},[167,155626,155627,155630,155632,155634],{"class":169,"line":261},[167,155628,155629],{"class":177},"    \"耳机\"",[167,155631,53435],{"class":512},[167,155633,125990],{"class":184},[167,155635,33471],{"class":512},[167,155637,155638],{"class":169,"line":773},[167,155639,3630],{"class":512},[167,155641,155642],{"class":169,"line":779},[167,155643,741],{"emptyLinePlaceholder":740},[167,155645,155646,155649,155651],{"class":169,"line":785},[167,155647,155648],{"class":512},"bar ",[167,155650,523],{"class":731},[167,155652,155653],{"class":512}," Bar()\n",[167,155655,155656,155659,155662],{"class":169,"line":790},[167,155657,155658],{"class":512},"bar.add_xaxis(",[167,155660,155661],{"class":184},"list",[167,155663,155664],{"class":512},"(category_total.keys()))\n",[167,155666,155667,155670,155672,155674,155676],{"class":169,"line":796},[167,155668,155669],{"class":512},"bar.add_yaxis(",[167,155671,148886],{"class":177},[167,155673,14463],{"class":512},[167,155675,155661],{"class":184},[167,155677,155678],{"class":512},"(category_total.values()))\n",[167,155680,155681],{"class":169,"line":802},[167,155682,155683],{"class":512},"bar.set_global_opts(\n",[167,155685,155686,155688,155690,155692,155694,155696,155699],{"class":169,"line":808},[167,155687,149064],{"class":7246},[167,155689,523],{"class":731},[167,155691,149069],{"class":512},[167,155693,53405],{"class":7246},[167,155695,523],{"class":731},[167,155697,155698],{"class":177},"\"品类销售额\"",[167,155700,40048],{"class":512},[167,155702,155703,155705,155707,155709,155711,155713,155716],{"class":169,"line":814},[167,155704,149083],{"class":7246},[167,155706,523],{"class":731},[167,155708,149088],{"class":512},[167,155710,81797],{"class":7246},[167,155712,523],{"class":731},[167,155714,155715],{"class":177},"\"品类\"",[167,155717,40048],{"class":512},[167,155719,155720,155722,155724,155726,155728,155730,155732],{"class":169,"line":820},[167,155721,149102],{"class":7246},[167,155723,523],{"class":731},[167,155725,149088],{"class":512},[167,155727,81797],{"class":7246},[167,155729,523],{"class":731},[167,155731,148886],{"class":177},[167,155733,40048],{"class":512},[167,155735,155736],{"class":169,"line":826},[167,155737,873],{"class":512},[167,155739,155740,155743,155746],{"class":169,"line":832},[167,155741,155742],{"class":512},"bar.render(",[167,155744,155745],{"class":177},"\"category_sales.html\"",[167,155747,873],{"class":512},[14,155749,155751],{"id":155750},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155753,155754],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,155756,155758],{"className":723,"code":155757,"language":305,"meta":32,"style":32},"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",[34,155759,155760,155774,155785,155789,155797,155821,155844,155869,155873,155877,155887,155891,155902,155911,155921,155935,155966,155971,155975],{"__ignoreMap":32},[167,155761,155762,155764,155766,155768,155770,155772],{"class":169,"line":170},[167,155763,32745],{"class":731},[167,155765,148970],{"class":512},[167,155767,732],{"class":731},[167,155769,148975],{"class":512},[167,155771,33388],{"class":731},[167,155773,148980],{"class":512},[167,155775,155776,155778,155780,155782],{"class":169,"line":191},[167,155777,32745],{"class":731},[167,155779,148829],{"class":512},[167,155781,732],{"class":731},[167,155783,155784],{"class":512}," Bar, Timeline\n",[167,155786,155787],{"class":169,"line":205},[167,155788,741],{"emptyLinePlaceholder":740},[167,155790,155791,155793,155795],{"class":169,"line":219},[167,155792,1141],{"class":512},[167,155794,523],{"class":731},[167,155796,17598],{"class":512},[167,155798,155799,155802,155805,155807,155809,155811,155813,155815,155817,155819],{"class":169,"line":230},[167,155800,155801],{"class":177},"    \"2024-10-01\"",[167,155803,155804],{"class":512},": {",[167,155806,155234],{"class":177},[167,155808,53435],{"class":512},[167,155810,155243],{"class":184},[167,155812,14463],{"class":512},[167,155814,155264],{"class":177},[167,155816,53435],{"class":512},[167,155818,155273],{"class":184},[167,155820,6962],{"class":512},[167,155822,155823,155826,155828,155830,155832,155834,155836,155838,155840,155842],{"class":169,"line":241},[167,155824,155825],{"class":177},"    \"2024-10-02\"",[167,155827,155804],{"class":512},[167,155829,155234],{"class":177},[167,155831,53435],{"class":512},[167,155833,155302],{"class":184},[167,155835,14463],{"class":512},[167,155837,155264],{"class":177},[167,155839,53435],{"class":512},[167,155841,155331],{"class":184},[167,155843,6962],{"class":512},[167,155845,155846,155849,155851,155853,155855,155858,155860,155862,155864,155867],{"class":169,"line":261},[167,155847,155848],{"class":177},"    \"2024-10-03\"",[167,155850,155804],{"class":512},[167,155852,155234],{"class":177},[167,155854,53435],{"class":512},[167,155856,155857],{"class":184},"17000",[167,155859,14463],{"class":512},[167,155861,155264],{"class":177},[167,155863,53435],{"class":512},[167,155865,155866],{"class":184},"19000",[167,155868,6962],{"class":512},[167,155870,155871],{"class":169,"line":773},[167,155872,3630],{"class":512},[167,155874,155875],{"class":169,"line":779},[167,155876,741],{"emptyLinePlaceholder":740},[167,155878,155879,155882,155884],{"class":169,"line":785},[167,155880,155881],{"class":512},"timeline ",[167,155883,523],{"class":731},[167,155885,155886],{"class":512}," Timeline()\n",[167,155888,155889],{"class":169,"line":790},[167,155890,741],{"emptyLinePlaceholder":740},[167,155892,155893,155895,155898,155900],{"class":169,"line":796},[167,155894,1168],{"class":731},[167,155896,155897],{"class":512}," date, category_data ",[167,155899,973],{"class":731},[167,155901,150739],{"class":512},[167,155903,155904,155907,155909],{"class":169,"line":802},[167,155905,155906],{"class":512},"    bar ",[167,155908,523],{"class":731},[167,155910,155653],{"class":512},[167,155912,155913,155916,155918],{"class":169,"line":808},[167,155914,155915],{"class":512},"    bar.add_xaxis(",[167,155917,155661],{"class":184},[167,155919,155920],{"class":512},"(category_data.keys()))\n",[167,155922,155923,155926,155928,155930,155932],{"class":169,"line":814},[167,155924,155925],{"class":512},"    bar.add_yaxis(",[167,155927,148886],{"class":177},[167,155929,14463],{"class":512},[167,155931,155661],{"class":184},[167,155933,155934],{"class":512},"(category_data.values()))\n",[167,155936,155937,155940,155943,155945,155947,155949,155951,155953,155955,155957,155959,155961,155964],{"class":169,"line":820},[167,155938,155939],{"class":512},"    bar.set_global_opts(",[167,155941,155942],{"class":7246},"title_opts",[167,155944,523],{"class":731},[167,155946,149069],{"class":512},[167,155948,53405],{"class":7246},[167,155950,523],{"class":731},[167,155952,2262],{"class":731},[167,155954,2452],{"class":177},[167,155956,3096],{"class":184},[167,155958,75914],{"class":512},[167,155960,3145],{"class":184},[167,155962,155963],{"class":177},"销售额\"",[167,155965,32505],{"class":512},[167,155967,155968],{"class":169,"line":826},[167,155969,155970],{"class":512},"    timeline.add(bar, date)\n",[167,155972,155973],{"class":169,"line":832},[167,155974,741],{"emptyLinePlaceholder":740},[167,155976,155977,155980,155983],{"class":169,"line":837},[167,155978,155979],{"class":512},"timeline.render(",[167,155981,155982],{"class":177},"\"timeline_sales.html\"",[167,155984,873],{"class":512},[14,155986,155988],{"id":155987},"_128-绘制地图","12.8 绘制地图",[19,155990,155991],{},"地图适合展示地区数据。",[26,155993,155995],{"className":723,"code":155994,"language":305,"meta":32,"style":32},"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",[34,155996,155997,156011,156022,156026,156034,156047,156059,156072,156085,156089,156093,156103,156118,156123,156140,156159,156163],{"__ignoreMap":32},[167,155998,155999,156001,156003,156005,156007,156009],{"class":169,"line":170},[167,156000,32745],{"class":731},[167,156002,148970],{"class":512},[167,156004,732],{"class":731},[167,156006,148975],{"class":512},[167,156008,33388],{"class":731},[167,156010,148980],{"class":512},[167,156012,156013,156015,156017,156019],{"class":169,"line":191},[167,156014,32745],{"class":731},[167,156016,148829],{"class":512},[167,156018,732],{"class":731},[167,156020,156021],{"class":512}," Map\n",[167,156023,156024],{"class":169,"line":205},[167,156025,741],{"emptyLinePlaceholder":740},[167,156027,156028,156030,156032],{"class":169,"line":219},[167,156029,1141],{"class":512},[167,156031,523],{"class":731},[167,156033,57436],{"class":512},[167,156035,156036,156039,156041,156043,156045],{"class":169,"line":230},[167,156037,156038],{"class":512},"    (",[167,156040,71257],{"class":177},[167,156042,14463],{"class":512},[167,156044,3017],{"class":184},[167,156046,40048],{"class":512},[167,156048,156049,156051,156053,156055,156057],{"class":169,"line":241},[167,156050,156038],{"class":512},[167,156052,71277],{"class":177},[167,156054,14463],{"class":512},[167,156056,148903],{"class":184},[167,156058,40048],{"class":512},[167,156060,156061,156063,156066,156068,156070],{"class":169,"line":261},[167,156062,156038],{"class":512},[167,156064,156065],{"class":177},"\"广东\"",[167,156067,14463],{"class":512},[167,156069,3776],{"class":184},[167,156071,40048],{"class":512},[167,156073,156074,156076,156079,156081,156083],{"class":169,"line":773},[167,156075,156038],{"class":512},[167,156077,156078],{"class":177},"\"浙江\"",[167,156080,14463],{"class":512},[167,156082,148908],{"class":184},[167,156084,40048],{"class":512},[167,156086,156087],{"class":169,"line":779},[167,156088,35249],{"class":512},[167,156090,156091],{"class":169,"line":785},[167,156092,741],{"emptyLinePlaceholder":740},[167,156094,156095,156098,156100],{"class":169,"line":790},[167,156096,156097],{"class":512},"map_chart ",[167,156099,523],{"class":731},[167,156101,156102],{"class":512}," Map()\n",[167,156104,156105,156108,156110,156113,156116],{"class":169,"line":796},[167,156106,156107],{"class":512},"map_chart.add(",[167,156109,148886],{"class":177},[167,156111,156112],{"class":512},", data, ",[167,156114,156115],{"class":177},"\"china\"",[167,156117,873],{"class":512},[167,156119,156120],{"class":169,"line":802},[167,156121,156122],{"class":512},"map_chart.set_global_opts(\n",[167,156124,156125,156127,156129,156131,156133,156135,156138],{"class":169,"line":808},[167,156126,149064],{"class":7246},[167,156128,523],{"class":731},[167,156130,149069],{"class":512},[167,156132,53405],{"class":7246},[167,156134,523],{"class":731},[167,156136,156137],{"class":177},"\"地区销售额\"",[167,156139,40048],{"class":512},[167,156141,156142,156145,156147,156150,156153,156155,156157],{"class":169,"line":814},[167,156143,156144],{"class":7246},"    visualmap_opts",[167,156146,523],{"class":731},[167,156148,156149],{"class":512},"opts.VisualMapOpts(",[167,156151,156152],{"class":7246},"max_",[167,156154,523],{"class":731},[167,156156,3776],{"class":184},[167,156158,40048],{"class":512},[167,156160,156161],{"class":169,"line":820},[167,156162,873],{"class":512},[167,156164,156165,156168,156171],{"class":169,"line":826},[167,156166,156167],{"class":512},"map_chart.render(",[167,156169,156170],{"class":177},"\"map_sales.html\"",[167,156172,873],{"class":512},[19,156174,156175],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156177,156179],{"id":156178},"_129-项目拆分建议","12.9 项目拆分建议",[19,156181,156182],{},"当代码超过一个文件时，可以这样组织：",[26,156184,156187],{"className":156185,"code":156186,"language":31,"meta":32},[29],"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",[34,156188,156186],{"__ignoreMap":32},[19,156190,156191],{},"职责：",[40,156193,156194,156200,156206,156212],{},[43,156195,156196,156199],{},[34,156197,156198],{},"main.py","：程序入口。",[43,156201,156202,156205],{},[34,156203,156204],{},"file_utils.py","：读写 JSON。",[43,156207,156208,156211],{},[34,156209,156210],{},"sales_service.py","：统计销售数据。",[43,156213,156214,156217],{},[34,156215,156216],{},"chart_builder.py","：生成图表。",[14,156219,156221],{"id":156220},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156223,156224],{},"语法基础：",[40,156226,156227,156230,156233,156236],{},[43,156228,156229],{},"会写变量、注释、输入输出。",[43,156231,156232],{},"会使用 int、float、str、bool。",[43,156234,156235],{},"会做类型转换。",[43,156237,156238],{},"会使用 f-string 格式化输出。",[19,156240,156241],{},"流程控制：",[40,156243,156244,156250,156256,156264],{},[43,156245,156246,156247,423],{},"会写 ",[34,156248,156249],{},"if elif else",[43,156251,156246,156252,429,156254,423],{},[34,156253,110254],{},[34,156255,1168],{},[43,156257,156258,156259,429,156261,423],{},"理解 ",[34,156260,4097],{},[34,156262,156263],{},"continue",[43,156265,156266],{},"能写嵌套循环。",[19,156268,156269],{},"函数：",[40,156271,156272,156275,156278,156281],{},[43,156273,156274],{},"会定义和调用函数。",[43,156276,156277],{},"理解参数和返回值。",[43,156279,156280],{},"知道局部变量和全局变量。",[43,156282,156283],{},"会使用默认参数、关键字参数、不定长参数。",[19,156285,156286],{},"容器：",[40,156288,156289,156292,156295,156298,156301],{},[43,156290,156291],{},"会使用列表增删改查。",[43,156293,156294],{},"会遍历列表、字典。",[43,156296,156297],{},"会使用切片。",[43,156299,156300],{},"会用集合去重。",[43,156302,156303],{},"会处理列表嵌套字典。",[19,156305,156306],{},"文件和模块：",[40,156308,156309,156312,156315,156318,156321],{},[43,156310,156311],{},"会读写文本文件。",[43,156313,156314],{},"会读写 JSON。",[43,156316,156317],{},"会捕获常见异常。",[43,156319,156320],{},"会导入模块和第三方包。",[43,156322,156323],{},"会创建简单包结构。",[19,156325,156326],{},"项目能力：",[40,156328,156329,156332,156335,156338,156341],{},[43,156330,156331],{},"能把代码拆成函数。",[43,156333,156334],{},"能把数据保存到文件。",[43,156336,156337],{},"能处理用户输入错误。",[43,156339,156340],{},"能写一个完整菜单程序。",[43,156342,156343],{},"能用 pyecharts 生成图表。",[14,156345,156347],{"id":156346},"_1211-推荐练习顺序","12.11 推荐练习顺序",[40,156349,156350,156353,156356,156359,156362,156365,156368,156371],{},[43,156351,156352],{},"猜数字游戏。",[43,156354,156355],{},"ATM 菜单程序。",[43,156357,156358],{},"学生成绩统计。",[43,156360,156361],{},"学生管理系统函数版。",[43,156363,156364],{},"学生管理系统文件持久化版。",[43,156366,156367],{},"学生管理系统面向对象版。",[43,156369,156370],{},"销售数据统计。",[43,156372,156373],{},"销售数据可视化。",[14,156375,156377],{"id":156376},"_1212-常见学习误区","12.12 常见学习误区",[40,156379,156380,156383,156386,156389,156392,156395,156398],{},[43,156381,156382],{},"只看视频不敲代码。",[43,156384,156385],{},"一报错就复制错误去搜，不先读报错位置。",[43,156387,156388],{},"变量名随便写，后续自己看不懂。",[43,156390,156391],{},"所有代码都写在一个文件一个函数里。",[43,156393,156394],{},"不保存练习代码，复习时没有材料。",[43,156396,156397],{},"还没掌握列表字典就急着学框架。",[43,156399,156400],{},"不会读官方文档，只依赖教程。",[14,156402,156404],{"id":156403},"_1213-如何读报错","12.13 如何读报错",[19,156406,156407],{},"报错通常从下往上看最后几行。",[19,156409,17161],{},[26,156411,156414],{"className":156412,"code":156413,"language":31,"meta":32},[29],"ValueError: invalid literal for int() with base 10: 'abc'\n",[34,156415,156413],{"__ignoreMap":32},[19,156417,26621],{},[40,156419,156420,156426,156436],{},[43,156421,156422,156423,423],{},"异常类型是 ",[34,156424,156425],{},"ValueError",[43,156427,108936,156428,156431,156432,156435],{},[34,156429,156430],{},"int()"," 无法把 ",[34,156433,156434],{},"'abc'"," 转成整数。",[43,156437,156438],{},"应该检查输入内容或增加异常处理。",[19,156440,156441],{},"再看文件名和行号：",[26,156443,156446],{"className":156444,"code":156445,"language":31,"meta":32},[29],"File \"main.py\", line 10, in \u003Cmodule>\n",[34,156447,156445],{"__ignoreMap":32},[19,156449,156450,156451,156453],{},"表示错误发生在 ",[34,156452,156198],{}," 第 10 行。",[14,156455,156457],{"id":156456},"_1214-后续学习方向","12.14 后续学习方向",[19,156459,156460],{},"Python 基础完成后，可以按兴趣选择方向：",[40,156462,156463,156475,156484,156496,156507,156516,156526],{},[43,156464,156465,156466,480,156469,480,156472,423],{},"自动化办公：",[34,156467,156468],{},"openpyxl",[34,156470,156471],{},"python-docx",[34,156473,156474],{},"pdfplumber",[43,156476,156477,156478,480,156480,480,156482,423],{},"数据分析：",[34,156479,102610],{},[34,156481,147776],{},[34,156483,147784],{},[43,156485,156486,156487,480,156490,480,156493,423],{},"Web 后端：",[34,156488,156489],{},"Flask",[34,156491,156492],{},"FastAPI",[34,156494,156495],{},"Django",[43,156497,156498,156499,480,156501,480,156504,423],{},"爬虫：",[34,156500,147761],{},[34,156502,156503],{},"BeautifulSoup",[34,156505,156506],{},"Scrapy",[43,156508,156509,156510,480,156512,156515],{},"测试开发：",[34,156511,147808],{},[34,156513,156514],{},"selenium","、接口测试。",[43,156517,156518,156519,480,156521,480,156523,423],{},"人工智能：",[34,156520,102610],{},[34,156522,147776],{},[34,156524,156525],{},"pytorch",[43,156527,156528,156529,480,156531,480,156534,423],{},"运维脚本：",[34,156530,147377],{},[34,156532,156533],{},"subprocess",[34,156535,156536],{},"paramiko",[19,156538,156539],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156541,156543],{"id":156542},"_1215-结课练习","12.15 结课练习",[40,156545,156546,156549,156552,156555,156558,156561,156564,156567],{},[43,156547,156548],{},"完成函数版学生管理系统。",[43,156550,156551],{},"给学生管理系统增加 JSON 持久化。",[43,156553,156554],{},"给学生管理系统增加异常处理。",[43,156556,156557],{},"把学生管理系统改成面向对象版。",[43,156559,156560],{},"使用 pyecharts 绘制学生成绩柱状图。",[43,156562,156563],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[43,156565,156566],{},"按品类统计销售额并绘制柱状图。",[43,156568,156569],{},"写一份自己的 Python 学习路线图。",[2113,156571,156572],{},"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":32,"searchDepth":191,"depth":191,"links":156574},[156575,156576,156579,156580,156581,156587,156588,156589,156590,156591,156592,156593,156594,156595,156596],{"id":153291,"depth":191,"text":153292},{"id":153341,"depth":191,"text":153342,"children":156577},[156578],{"id":153345,"depth":205,"text":153346},{"id":153384,"depth":191,"text":153385},{"id":154858,"depth":191,"text":154859},{"id":155196,"depth":191,"text":155197,"children":156582},[156583,156584,156585,156586],{"id":155200,"depth":205,"text":155201},{"id":155340,"depth":205,"text":155341},{"id":155430,"depth":205,"text":155431},{"id":155516,"depth":205,"text":155517},{"id":155557,"depth":191,"text":155558},{"id":155750,"depth":191,"text":155751},{"id":155987,"depth":191,"text":155988},{"id":156178,"depth":191,"text":156179},{"id":156220,"depth":191,"text":156221},{"id":156346,"depth":191,"text":156347},{"id":156376,"depth":191,"text":156377},{"id":156403,"depth":191,"text":156404},{"id":156456,"depth":191,"text":156457},{"id":156542,"depth":191,"text":156543},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153283,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156603,"title":156604,"body":156605,"description":25403,"extension":2140,"meta":159074,"navigation":740,"path":159075,"seo":159076,"stem":159077,"__hash__":159078},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156606,"toc":159049},[156607,156610,156614,156617,156620,156640,156643,156666,156669,156672,156694,156697,156719,156723,156726,156766,156769,156890,156894,156897,156937,156940,156964,156967,156971,156974,156988,157021,157024,157059,157062,157085,157088,157121,157124,157126,157132,157207,157210,157216,157233,157273,157277,157280,157326,157328,157366,157369,157404,157407,157442,157445,157477,157480,157499,157503,157507,157620,157622,157697,157701,157747,157750,157776,157785,157789,157792,157855,157863,157891,157895,157935,158000,158004,158007,158046,158049,158094,158097,158158,158162,158189,158192,158220,158223,158227,158231,158296,158299,158337,158340,158372,158376,158475,158479,158482,158555,158558,158606,158610,158616,158656,158659,158706,158709,158758,158762,158764,158778,158780,158961,158965,158992,159012,159019,159023,159040,159046],[10,156608,156604],{"id":156609},"_2-基础语法变量与字符串",[14,156611,156613],{"id":156612},"_21-注释","2.1 注释",[19,156615,156616],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156618,156619],{},"单行注释：",[26,156621,156623],{"className":723,"code":156622,"language":305,"meta":32,"style":32},"# 这是单行注释\nprint(\"hello\")\n",[34,156624,156625,156630],{"__ignoreMap":32},[167,156626,156627],{"class":169,"line":170},[167,156628,156629],{"class":2268},"# 这是单行注释\n",[167,156631,156632,156634,156636,156638],{"class":169,"line":191},[167,156633,1606],{"class":184},[167,156635,898],{"class":512},[167,156637,7874],{"class":177},[167,156639,873],{"class":512},[19,156641,156642],{},"多行说明常用三引号：",[26,156644,156646],{"className":723,"code":156645,"language":305,"meta":32,"style":32},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[34,156647,156648,156652,156657,156662],{"__ignoreMap":32},[167,156649,156650],{"class":169,"line":170},[167,156651,829],{"class":177},[167,156653,156654],{"class":169,"line":191},[167,156655,156656],{"class":177},"这是多行说明。\n",[167,156658,156659],{"class":169,"line":205},[167,156660,156661],{"class":177},"常用于文件顶部说明、函数说明等。\n",[167,156663,156664],{"class":169,"line":219},[167,156665,829],{"class":177},[19,156667,156668],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156670,156671],{},"不好：",[26,156673,156675],{"className":723,"code":156674,"language":305,"meta":32,"style":32},"# age 加 1\nage = age + 1\n",[34,156676,156677,156682],{"__ignoreMap":32},[167,156678,156679],{"class":169,"line":170},[167,156680,156681],{"class":2268},"# age 加 1\n",[167,156683,156684,156686,156688,156690,156692],{"class":169,"line":191},[167,156685,148137],{"class":512},[167,156687,523],{"class":731},[167,156689,17733],{"class":512},[167,156691,2681],{"class":731},[167,156693,57688],{"class":184},[19,156695,156696],{},"较好：",[26,156698,156700],{"className":723,"code":156699,"language":305,"meta":32,"style":32},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[34,156701,156702,156707],{"__ignoreMap":32},[167,156703,156704],{"class":169,"line":170},[167,156705,156706],{"class":2268},"# 用户过完生日后，年龄增加一岁\n",[167,156708,156709,156711,156713,156715,156717],{"class":169,"line":191},[167,156710,148137],{"class":512},[167,156712,523],{"class":731},[167,156714,17733],{"class":512},[167,156716,2681],{"class":731},[167,156718,57688],{"class":184},[14,156720,156722],{"id":156721},"_22-字面量","2.2 字面量",[19,156724,156725],{},"字面量就是代码中直接写出来的数据。",[26,156727,156729],{"className":723,"code":156728,"language":305,"meta":32,"style":32},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[34,156730,156731,156738,156745,156752,156759],{"__ignoreMap":32},[167,156732,156733,156735],{"class":169,"line":170},[167,156734,981],{"class":184},[167,156736,156737],{"class":2268},"          # 整数\n",[167,156739,156740,156742],{"class":169,"line":191},[167,156741,2259],{"class":184},[167,156743,156744],{"class":2268},"         # 小数\n",[167,156746,156747,156749],{"class":169,"line":205},[167,156748,7874],{"class":177},[167,156750,156751],{"class":2268},"      # 字符串\n",[167,156753,156754,156756],{"class":169,"line":219},[167,156755,33481],{"class":184},[167,156757,156758],{"class":2268},"         # 布尔值\n",[167,156760,156761,156763],{"class":169,"line":230},[167,156762,854],{"class":184},[167,156764,156765],{"class":2268},"         # 空值\n",[19,156767,156768],{},"常见字面量类型：",[68,156770,156771,156781],{},[71,156772,156773],{},[74,156774,156775,156777,156779],{},[77,156776,25763],{},[77,156778,29509],{},[77,156780,27889],{},[85,156782,156783,156794,156805,156816,156828,156840,156852,156865,156877],{},[74,156784,156785,156787,156791],{},[90,156786,2216],{},[90,156788,156789],{},[34,156790,981],{},[90,156792,156793],{},"整数",[74,156795,156796,156798,156802],{},[90,156797,2251],{},[90,156799,156800],{},[34,156801,2259],{},[90,156803,156804],{},"浮点数",[74,156806,156807,156809,156813],{},[90,156808,3368],{},[90,156810,156811],{},[34,156812,7874],{},[90,156814,156815],{},"字符串",[74,156817,156818,156820,156826],{},[90,156819,3420],{},[90,156821,156822,480,156824],{},[34,156823,33481],{},[34,156825,35989],{},[90,156827,68004],{},[74,156829,156830,156833,156837],{},[90,156831,156832],{},"NoneType",[90,156834,156835],{},[34,156836,854],{},[90,156838,156839],{},"空值",[74,156841,156842,156844,156849],{},[90,156843,155661],{},[90,156845,156846],{},[34,156847,156848],{},"[1, 2, 3]",[90,156850,156851],{},"列表",[74,156853,156854,156857,156862],{},[90,156855,156856],{},"tuple",[90,156858,156859],{},[34,156860,156861],{},"(1, 2, 3)",[90,156863,156864],{},"元组",[74,156866,156867,156869,156874],{},[90,156868,116137],{},[90,156870,156871],{},[34,156872,156873],{},"{\"name\": \"张三\"}",[90,156875,156876],{},"字典",[74,156878,156879,156882,156887],{},[90,156880,156881],{},"set",[90,156883,156884],{},[34,156885,156886],{},"{1, 2, 3}",[90,156888,156889],{},"集合",[14,156891,156893],{"id":156892},"_23-变量","2.3 变量",[19,156895,156896],{},"变量是保存数据的名字。",[26,156898,156900],{"className":723,"code":156899,"language":305,"meta":32,"style":32},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[34,156901,156902,156910,156918,156928],{"__ignoreMap":32},[167,156903,156904,156906,156908],{"class":169,"line":170},[167,156905,148127],{"class":512},[167,156907,523],{"class":731},[167,156909,150944],{"class":177},[167,156911,156912,156914,156916],{"class":169,"line":191},[167,156913,148137],{"class":512},[167,156915,523],{"class":731},[167,156917,148142],{"class":184},[167,156919,156920,156923,156925],{"class":169,"line":205},[167,156921,156922],{"class":512},"height ",[167,156924,523],{"class":731},[167,156926,156927],{"class":184}," 1.75\n",[167,156929,156930,156933,156935],{"class":169,"line":219},[167,156931,156932],{"class":512},"is_student ",[167,156934,523],{"class":731},[167,156936,155190],{"class":184},[19,156938,156939],{},"Python 的变量不需要提前声明类型：",[26,156941,156943],{"className":723,"code":156942,"language":305,"meta":32,"style":32},"score = 100\nscore = \"满分\"\n",[34,156944,156945,156955],{"__ignoreMap":32},[167,156946,156947,156950,156952],{"class":169,"line":170},[167,156948,156949],{"class":512},"score ",[167,156951,523],{"class":731},[167,156953,156954],{"class":184}," 100\n",[167,156956,156957,156959,156961],{"class":169,"line":191},[167,156958,156949],{"class":512},[167,156960,523],{"class":731},[167,156962,156963],{"class":177}," \"满分\"\n",[19,156965,156966],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156968,156970],{"id":156969},"_24-变量命名规则","2.4 变量命名规则",[19,156972,156973],{},"硬性规则：",[40,156975,156976,156979,156982,156985],{},[43,156977,156978],{},"只能由字母、数字、下划线组成。",[43,156980,156981],{},"不能以数字开头。",[43,156983,156984],{},"不能使用 Python 关键字。",[43,156986,156987],{},"区分大小写。",[26,156989,156991],{"className":723,"code":156990,"language":305,"meta":32,"style":32},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[34,156992,156993,157002,157011],{"__ignoreMap":32},[167,156994,156995,156998,157000],{"class":169,"line":170},[167,156996,156997],{"class":512},"user_name ",[167,156999,523],{"class":731},[167,157001,148132],{"class":177},[167,157003,157004,157007,157009],{"class":169,"line":191},[167,157005,157006],{"class":512},"age2 ",[167,157008,523],{"class":731},[167,157010,148142],{"class":184},[167,157012,157013,157016,157018],{"class":169,"line":205},[167,157014,157015],{"class":512},"_token ",[167,157017,523],{"class":731},[167,157019,157020],{"class":177}," \"abc\"\n",[19,157022,157023],{},"错误写法：",[26,157025,157027],{"className":723,"code":157026,"language":305,"meta":32,"style":32},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[34,157028,157029,157038,157050],{"__ignoreMap":32},[167,157030,157031,157034,157036],{"class":169,"line":170},[167,157032,157033],{"class":79391},"2age",[167,157035,753],{"class":731},[167,157037,148142],{"class":184},[167,157039,157040,157042,157044,157046,157048],{"class":169,"line":191},[167,157041,133175],{"class":512},[167,157043,2732],{"class":731},[167,157045,148127],{"class":512},[167,157047,523],{"class":731},[167,157049,148132],{"class":177},[167,157051,157052,157054,157056],{"class":169,"line":205},[167,157053,16721],{"class":731},[167,157055,753],{"class":731},[167,157057,157058],{"class":177}," \"一班\"\n",[19,157060,157061],{},"查看关键字：",[26,157063,157065],{"className":723,"code":157064,"language":305,"meta":32,"style":32},"import keyword\n\nprint(keyword.kwlist)\n",[34,157066,157067,157074,157078],{"__ignoreMap":32},[167,157068,157069,157071],{"class":169,"line":170},[167,157070,732],{"class":731},[167,157072,157073],{"class":512}," keyword\n",[167,157075,157076],{"class":169,"line":191},[167,157077,741],{"emptyLinePlaceholder":740},[167,157079,157080,157082],{"class":169,"line":205},[167,157081,1606],{"class":184},[167,157083,157084],{"class":512},"(keyword.kwlist)\n",[19,157086,157087],{},"推荐命名风格：",[26,157089,157091],{"className":723,"code":157090,"language":305,"meta":32,"style":32},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[34,157092,157093,157102,157112],{"__ignoreMap":32},[167,157094,157095,157098,157100],{"class":169,"line":170},[167,157096,157097],{"class":512},"student_name ",[167,157099,523],{"class":731},[167,157101,150944],{"class":177},[167,157103,157104,157107,157109],{"class":169,"line":191},[167,157105,157106],{"class":512},"total_price ",[167,157108,523],{"class":731},[167,157110,157111],{"class":184}," 99.8\n",[167,157113,157114,157117,157119],{"class":169,"line":205},[167,157115,157116],{"class":512},"is_finished ",[167,157118,523],{"class":731},[167,157120,127398],{"class":184},[19,157122,157123],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157125,52732],{"id":52731},[19,157127,105957,157128,157131],{},[34,157129,157130],{},"type()"," 查看数据类型：",[26,157133,157135],{"className":723,"code":157134,"language":305,"meta":32,"style":32},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[34,157136,157137,157151,157165,157179,157193],{"__ignoreMap":32},[167,157138,157139,157141,157143,157145,157147,157149],{"class":169,"line":170},[167,157140,1606],{"class":184},[167,157142,898],{"class":512},[167,157144,104698],{"class":184},[167,157146,898],{"class":512},[167,157148,981],{"class":184},[167,157150,32505],{"class":512},[167,157152,157153,157155,157157,157159,157161,157163],{"class":169,"line":191},[167,157154,1606],{"class":184},[167,157156,898],{"class":512},[167,157158,104698],{"class":184},[167,157160,898],{"class":512},[167,157162,2259],{"class":184},[167,157164,32505],{"class":512},[167,157166,157167,157169,157171,157173,157175,157177],{"class":169,"line":205},[167,157168,1606],{"class":184},[167,157170,898],{"class":512},[167,157172,104698],{"class":184},[167,157174,898],{"class":512},[167,157176,7874],{"class":177},[167,157178,32505],{"class":512},[167,157180,157181,157183,157185,157187,157189,157191],{"class":169,"line":219},[167,157182,1606],{"class":184},[167,157184,898],{"class":512},[167,157186,104698],{"class":184},[167,157188,898],{"class":512},[167,157190,33481],{"class":184},[167,157192,32505],{"class":512},[167,157194,157195,157197,157199,157201,157203,157205],{"class":169,"line":230},[167,157196,1606],{"class":184},[167,157198,898],{"class":512},[167,157200,104698],{"class":184},[167,157202,898],{"class":512},[167,157204,854],{"class":184},[167,157206,32505],{"class":512},[19,157208,157209],{},"输出类似：",[26,157211,157214],{"className":157212,"code":157213,"language":31,"meta":32},[29],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[34,157215,157213],{"__ignoreMap":32},[19,157217,11053,157218,108874,157220,157222,157223,157225,157226,23526,157228,157225,157230,157232],{},[34,157219,3420],{},[34,157221,2216],{}," 的子类，",[34,157224,33481],{}," 可以当作 ",[34,157227,2418],{},[34,157229,35989],{},[34,157231,1154],{},"，但业务代码中不要滥用。",[26,157234,157236],{"className":723,"code":157235,"language":305,"meta":32,"style":32},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[34,157237,157238,157256],{"__ignoreMap":32},[167,157239,157240,157242,157244,157246,157248,157250,157253],{"class":169,"line":170},[167,157241,1606],{"class":184},[167,157243,898],{"class":512},[167,157245,33481],{"class":184},[167,157247,47566],{"class":731},[167,157249,27138],{"class":184},[167,157251,157252],{"class":512},")   ",[167,157254,157255],{"class":2268},"# 2\n",[167,157257,157258,157260,157262,157264,157266,157268,157270],{"class":169,"line":191},[167,157259,1606],{"class":184},[167,157261,898],{"class":512},[167,157263,35989],{"class":184},[167,157265,47566],{"class":731},[167,157267,27138],{"class":184},[167,157269,47808],{"class":512},[167,157271,157272],{"class":2268},"# 1\n",[14,157274,157276],{"id":157275},"_26-类型转换","2.6 类型转换",[19,157278,157279],{},"常用转换函数：",[26,157281,157283],{"className":723,"code":157282,"language":305,"meta":32,"style":32},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[34,157284,157285,157295,157306,157316],{"__ignoreMap":32},[167,157286,157287,157289,157291,157293],{"class":169,"line":170},[167,157288,2216],{"class":184},[167,157290,898],{"class":512},[167,157292,56306],{"class":177},[167,157294,873],{"class":512},[167,157296,157297,157299,157301,157304],{"class":169,"line":191},[167,157298,2251],{"class":184},[167,157300,898],{"class":512},[167,157302,157303],{"class":177},"\"3.14\"",[167,157305,873],{"class":512},[167,157307,157308,157310,157312,157314],{"class":169,"line":205},[167,157309,3368],{"class":184},[167,157311,898],{"class":512},[167,157313,981],{"class":184},[167,157315,873],{"class":512},[167,157317,157318,157320,157322,157324],{"class":169,"line":219},[167,157319,3420],{"class":184},[167,157321,898],{"class":512},[167,157323,2418],{"class":184},[167,157325,873],{"class":512},[19,157327,17161],{},[26,157329,157331],{"className":723,"code":157330,"language":305,"meta":32,"style":32},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[34,157332,157333,157342,157353],{"__ignoreMap":32},[167,157334,157335,157337,157339],{"class":169,"line":170},[167,157336,148137],{"class":512},[167,157338,523],{"class":731},[167,157340,157341],{"class":177}," \"18\"\n",[167,157343,157344,157346,157348,157350],{"class":169,"line":191},[167,157345,148137],{"class":512},[167,157347,523],{"class":731},[167,157349,4426],{"class":184},[167,157351,157352],{"class":512},"(age)\n",[167,157354,157355,157357,157360,157362,157364],{"class":169,"line":205},[167,157356,1606],{"class":184},[167,157358,157359],{"class":512},"(age ",[167,157361,2681],{"class":731},[167,157363,27138],{"class":184},[167,157365,873],{"class":512},[19,157367,157368],{},"输入得到的内容永远是字符串：",[26,157370,157372],{"className":723,"code":157371,"language":305,"meta":32,"style":32},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[34,157373,157374,157390],{"__ignoreMap":32},[167,157375,157376,157379,157381,157383,157385,157388],{"class":169,"line":170},[167,157377,157378],{"class":512},"num ",[167,157380,523],{"class":731},[167,157382,62594],{"class":184},[167,157384,898],{"class":512},[167,157386,157387],{"class":177},"\"请输入数字:\"",[167,157389,873],{"class":512},[167,157391,157392,157394,157396,157398,157401],{"class":169,"line":191},[167,157393,1606],{"class":184},[167,157395,898],{"class":512},[167,157397,104698],{"class":184},[167,157399,157400],{"class":512},"(num))  ",[167,157402,157403],{"class":2268},"# str\n",[19,157405,157406],{},"如果要做数学运算，必须转换：",[26,157408,157410],{"className":723,"code":157409,"language":305,"meta":32,"style":32},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[34,157411,157412,157430],{"__ignoreMap":32},[167,157413,157414,157416,157418,157420,157422,157424,157426,157428],{"class":169,"line":170},[167,157415,157378],{"class":512},[167,157417,523],{"class":731},[167,157419,4426],{"class":184},[167,157421,898],{"class":512},[167,157423,55812],{"class":184},[167,157425,898],{"class":512},[167,157427,157387],{"class":177},[167,157429,32505],{"class":512},[167,157431,157432,157434,157436,157438,157440],{"class":169,"line":191},[167,157433,1606],{"class":184},[167,157435,47619],{"class":512},[167,157437,2681],{"class":731},[167,157439,4082],{"class":184},[167,157441,873],{"class":512},[19,157443,157444],{},"常见错误：",[26,157446,157448],{"className":723,"code":157447,"language":305,"meta":32,"style":32},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[34,157449,157450,157463],{"__ignoreMap":32},[167,157451,157452,157454,157456,157458,157460],{"class":169,"line":170},[167,157453,2216],{"class":184},[167,157455,898],{"class":512},[167,157457,157303],{"class":177},[167,157459,157252],{"class":512},[167,157461,157462],{"class":2268},"# 错误\n",[167,157464,157465,157467,157469,157472,157475],{"class":169,"line":191},[167,157466,2216],{"class":184},[167,157468,898],{"class":512},[167,157470,157471],{"class":177},"\"abc\"",[167,157473,157474],{"class":512},")    ",[167,157476,157462],{"class":2268},[19,157478,157479],{},"正确写法：",[26,157481,157483],{"className":723,"code":157482,"language":305,"meta":32,"style":32},"num = float(\"3.14\")\n",[34,157484,157485],{"__ignoreMap":32},[167,157486,157487,157489,157491,157493,157495,157497],{"class":169,"line":170},[167,157488,157378],{"class":512},[167,157490,523],{"class":731},[167,157492,111388],{"class":184},[167,157494,898],{"class":512},[167,157496,157303],{"class":177},[167,157498,873],{"class":512},[14,157500,157502],{"id":157501},"_27-运算符","2.7 运算符",[494,157504,157506],{"id":157505},"_271-算术运算符","2.7.1 算术运算符",[68,157508,157509,157520],{},[71,157510,157511],{},[74,157512,157513,157516,157518],{},[77,157514,157515],{},"运算符",[77,157517,27889],{},[77,157519,29509],{},[85,157521,157522,157536,157550,157564,157578,157592,157606],{},[74,157523,157524,157528,157531],{},[90,157525,157526],{},[34,157527,2681],{},[90,157529,157530],{},"加法",[90,157532,157533],{},[34,157534,157535],{},"1 + 2",[74,157537,157538,157542,157545],{},[90,157539,157540],{},[34,157541,2732],{},[90,157543,157544],{},"减法",[90,157546,157547],{},[34,157548,157549],{},"5 - 3",[74,157551,157552,157556,157559],{},[90,157553,157554],{},[34,157555,2655],{},[90,157557,157558],{},"乘法",[90,157560,157561],{},[34,157562,157563],{},"2 * 3",[74,157565,157566,157570,157573],{},[90,157567,157568],{},[34,157569,2784],{},[90,157571,157572],{},"除法，结果是浮点数",[90,157574,157575],{},[34,157576,157577],{},"5 \u002F 2",[74,157579,157580,157584,157587],{},[90,157581,157582],{},[34,157583,35332],{},[90,157585,157586],{},"整除",[90,157588,157589],{},[34,157590,157591],{},"5 \u002F\u002F 2",[74,157593,157594,157598,157601],{},[90,157595,157596],{},[34,157597,2528],{},[90,157599,157600],{},"取余",[90,157602,157603],{},[34,157604,157605],{},"5 % 2",[74,157607,157608,157612,157615],{},[90,157609,157610],{},[34,157611,12689],{},[90,157613,157614],{},"幂运算",[90,157616,157617],{},[34,157618,157619],{},"2 ** 3",[19,157621,17161],{},[26,157623,157625],{"className":723,"code":157624,"language":305,"meta":32,"style":32},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[34,157626,157627,157645,157662,157679],{"__ignoreMap":32},[167,157628,157629,157631,157633,157635,157638,157640,157642],{"class":169,"line":170},[167,157630,1606],{"class":184},[167,157632,898],{"class":512},[167,157634,2519],{"class":184},[167,157636,157637],{"class":731}," \u002F",[167,157639,16782],{"class":184},[167,157641,157252],{"class":512},[167,157643,157644],{"class":2268},"# 2.5\n",[167,157646,157647,157649,157651,157653,157656,157658,157660],{"class":169,"line":191},[167,157648,1606],{"class":184},[167,157650,898],{"class":512},[167,157652,2519],{"class":184},[167,157654,157655],{"class":731}," \u002F\u002F",[167,157657,16782],{"class":184},[167,157659,47808],{"class":512},[167,157661,157255],{"class":2268},[167,157663,157664,157666,157668,157670,157673,157675,157677],{"class":169,"line":205},[167,157665,1606],{"class":184},[167,157667,898],{"class":512},[167,157669,2519],{"class":184},[167,157671,157672],{"class":731}," %",[167,157674,16782],{"class":184},[167,157676,157252],{"class":512},[167,157678,157272],{"class":2268},[167,157680,157681,157683,157685,157687,157690,157692,157694],{"class":169,"line":219},[167,157682,1606],{"class":184},[167,157684,898],{"class":512},[167,157686,2287],{"class":184},[167,157688,157689],{"class":731}," **",[167,157691,80058],{"class":184},[167,157693,47808],{"class":512},[167,157695,157696],{"class":2268},"# 8\n",[494,157698,157700],{"id":157699},"_272-赋值运算符","2.7.2 赋值运算符",[26,157702,157704],{"className":723,"code":157703,"language":305,"meta":32,"style":32},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[34,157705,157706,157714,157722,157730,157738],{"__ignoreMap":32},[167,157707,157708,157710,157712],{"class":169,"line":170},[167,157709,157378],{"class":512},[167,157711,523],{"class":731},[167,157713,60417],{"class":184},[167,157715,157716,157718,157720],{"class":169,"line":191},[167,157717,157378],{"class":512},[167,157719,11505],{"class":731},[167,157721,56417],{"class":184},[167,157723,157724,157726,157728],{"class":169,"line":205},[167,157725,157378],{"class":512},[167,157727,151843],{"class":731},[167,157729,49723],{"class":184},[167,157731,157732,157734,157736],{"class":169,"line":219},[167,157733,157378],{"class":512},[167,157735,138739],{"class":731},[167,157737,121627],{"class":184},[167,157739,157740,157742,157745],{"class":169,"line":230},[167,157741,157378],{"class":512},[167,157743,157744],{"class":731},"\u002F=",[167,157746,49723],{"class":184},[19,157748,157749],{},"等价关系：",[26,157751,157753],{"className":723,"code":157752,"language":305,"meta":32,"style":32},"num += 1\nnum = num + 1\n",[34,157754,157755,157763],{"__ignoreMap":32},[167,157756,157757,157759,157761],{"class":169,"line":170},[167,157758,157378],{"class":512},[167,157760,11505],{"class":731},[167,157762,57688],{"class":184},[167,157764,157765,157767,157769,157772,157774],{"class":169,"line":191},[167,157766,157378],{"class":512},[167,157768,523],{"class":731},[167,157770,157771],{"class":512}," num ",[167,157773,2681],{"class":731},[167,157775,57688],{"class":184},[19,157777,157778,157779,429,157782,423],{},"Python 没有 ",[34,157780,157781],{},"num++",[34,157783,157784],{},"num--",[494,157786,157788],{"id":157787},"_273-比较运算符","2.7.3 比较运算符",[19,157790,157791],{},"比较运算结果是布尔值。",[26,157793,157795],{"className":723,"code":157794,"language":305,"meta":32,"style":32},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[34,157796,157797,157811,157826,157840],{"__ignoreMap":32},[167,157798,157799,157801,157803,157805,157807,157809],{"class":169,"line":170},[167,157800,1606],{"class":184},[167,157802,898],{"class":512},[167,157804,2646],{"class":184},[167,157806,28241],{"class":731},[167,157808,4192],{"class":184},[167,157810,873],{"class":512},[167,157812,157813,157815,157817,157819,157822,157824],{"class":169,"line":191},[167,157814,1606],{"class":184},[167,157816,898],{"class":512},[167,157818,2646],{"class":184},[167,157820,157821],{"class":731}," >=",[167,157823,4082],{"class":184},[167,157825,873],{"class":512},[167,157827,157828,157830,157832,157834,157836,157838],{"class":169,"line":205},[167,157829,1606],{"class":184},[167,157831,898],{"class":512},[167,157833,2646],{"class":184},[167,157835,1041],{"class":731},[167,157837,4127],{"class":184},[167,157839,873],{"class":512},[167,157841,157842,157844,157846,157848,157851,157853],{"class":169,"line":219},[167,157843,1606],{"class":184},[167,157845,898],{"class":512},[167,157847,2646],{"class":184},[167,157849,157850],{"class":731}," !=",[167,157852,4127],{"class":184},[167,157854,873],{"class":512},[19,157856,157857,157858,157860,157861,423],{},"注意：判断相等用 ",[34,157859,4985],{},"，赋值用 ",[34,157862,523],{},[26,157864,157866],{"className":723,"code":157865,"language":305,"meta":32,"style":32},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[34,157867,157868,157880],{"__ignoreMap":32},[167,157869,157870,157872,157874,157877],{"class":169,"line":170},[167,157871,148137],{"class":512},[167,157873,523],{"class":731},[167,157875,157876],{"class":184}," 18",[167,157878,157879],{"class":2268},"       # 赋值\n",[167,157881,157882,157884,157886,157888],{"class":169,"line":191},[167,157883,148137],{"class":512},[167,157885,4985],{"class":731},[167,157887,157876],{"class":184},[167,157889,157890],{"class":2268},"      # 判断是否相等\n",[494,157892,157894],{"id":157893},"_274-逻辑运算符","2.7.4 逻辑运算符",[68,157896,157897,157905],{},[71,157898,157899],{},[74,157900,157901,157903],{},[77,157902,157515],{},[77,157904,27889],{},[85,157906,157907,157916,157925],{},[74,157908,157909,157913],{},[90,157910,157911],{},[34,157912,32470],{},[90,157914,157915],{},"并且",[74,157917,157918,157922],{},[90,157919,157920],{},[34,157921,116681],{},[90,157923,157924],{},"或者",[74,157926,157927,157932],{},[90,157928,157929],{},[34,157930,157931],{},"not",[90,157933,157934],{},"取反",[26,157936,157938],{"className":723,"code":157937,"language":305,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[34,157939,157940,157948,157957,157961,157976,157990],{"__ignoreMap":32},[167,157941,157942,157944,157946],{"class":169,"line":170},[167,157943,148137],{"class":512},[167,157945,523],{"class":731},[167,157947,90051],{"class":184},[167,157949,157950,157953,157955],{"class":169,"line":191},[167,157951,157952],{"class":512},"has_ticket ",[167,157954,523],{"class":731},[167,157956,155190],{"class":184},[167,157958,157959],{"class":169,"line":205},[167,157960,741],{"emptyLinePlaceholder":740},[167,157962,157963,157965,157967,157969,157971,157973],{"class":169,"line":219},[167,157964,1606],{"class":184},[167,157966,157359],{"class":512},[167,157968,3764],{"class":731},[167,157970,157876],{"class":184},[167,157972,122020],{"class":731},[167,157974,157975],{"class":512}," has_ticket)\n",[167,157977,157978,157980,157982,157984,157986,157988],{"class":169,"line":230},[167,157979,1606],{"class":184},[167,157981,157359],{"class":512},[167,157983,513],{"class":731},[167,157985,157876],{"class":184},[167,157987,115792],{"class":731},[167,157989,157975],{"class":512},[167,157991,157992,157994,157996,157998],{"class":169,"line":241},[167,157993,1606],{"class":184},[167,157995,898],{"class":512},[167,157997,157931],{"class":731},[167,157999,157975],{"class":512},[14,158001,158003],{"id":158002},"_28-字符串定义","2.8 字符串定义",[19,158005,158006],{},"三种常见写法：",[26,158008,158010],{"className":723,"code":158009,"language":305,"meta":32,"style":32},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[34,158011,158012,158022,158031,158041],{"__ignoreMap":32},[167,158013,158014,158017,158019],{"class":169,"line":170},[167,158015,158016],{"class":512},"name1 ",[167,158018,523],{"class":731},[167,158020,158021],{"class":177}," '小明'\n",[167,158023,158024,158027,158029],{"class":169,"line":191},[167,158025,158026],{"class":512},"name2 ",[167,158028,523],{"class":731},[167,158030,150944],{"class":177},[167,158032,158033,158036,158038],{"class":169,"line":205},[167,158034,158035],{"class":512},"text ",[167,158037,523],{"class":731},[167,158039,158040],{"class":177}," \"\"\"这是多行字符串\n",[167,158042,158043],{"class":169,"line":219},[167,158044,158045],{"class":177},"可以换行\"\"\"\n",[19,158047,158048],{},"字符串中包含引号：",[26,158050,158052],{"className":723,"code":158051,"language":305,"meta":32,"style":32},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[34,158053,158054,158064,158074],{"__ignoreMap":32},[167,158055,158056,158059,158061],{"class":169,"line":170},[167,158057,158058],{"class":512},"msg ",[167,158060,523],{"class":731},[167,158062,158063],{"class":177}," \"他说:'你好'\"\n",[167,158065,158066,158069,158071],{"class":169,"line":191},[167,158067,158068],{"class":512},"msg2 ",[167,158070,523],{"class":731},[167,158072,158073],{"class":177}," '他说:\"你好\"'\n",[167,158075,158076,158079,158081,158084,158087,158090,158092],{"class":169,"line":205},[167,158077,158078],{"class":512},"msg3 ",[167,158080,523],{"class":731},[167,158082,158083],{"class":177}," \"他说:",[167,158085,158086],{"class":184},"\\\"",[167,158088,158089],{"class":177},"你好",[167,158091,158086],{"class":184},[167,158093,27153],{"class":177},[19,158095,158096],{},"常见转义字符：",[68,158098,158099,158108],{},[71,158100,158101],{},[74,158102,158103,158106],{},[77,158104,158105],{},"写法",[77,158107,83],{},[85,158109,158110,158120,158129,158139,158148],{},[74,158111,158112,158117],{},[90,158113,158114],{},[34,158115,158116],{},"\\n",[90,158118,158119],{},"换行",[74,158121,158122,158126],{},[90,158123,158124],{},[34,158125,3299],{},[90,158127,158128],{},"制表符",[74,158130,158131,158136],{},[90,158132,158133],{},[34,158134,158135],{},"\\\\",[90,158137,158138],{},"反斜杠",[74,158140,158141,158145],{},[90,158142,158143],{},[34,158144,158086],{},[90,158146,158147],{},"双引号",[74,158149,158150,158155],{},[90,158151,158152],{},[34,158153,158154],{},"\\'",[90,158156,158157],{},"单引号",[14,158159,158161],{"id":158160},"_29-字符串拼接","2.9 字符串拼接",[26,158163,158165],{"className":723,"code":158164,"language":305,"meta":32,"style":32},"name = \"小明\"\nprint(\"你好，\" + name)\n",[34,158166,158167,158175],{"__ignoreMap":32},[167,158168,158169,158171,158173],{"class":169,"line":170},[167,158170,148127],{"class":512},[167,158172,523],{"class":731},[167,158174,150944],{"class":177},[167,158176,158177,158179,158181,158184,158186],{"class":169,"line":191},[167,158178,1606],{"class":184},[167,158180,898],{"class":512},[167,158182,158183],{"class":177},"\"你好，\"",[167,158185,47566],{"class":731},[167,158187,158188],{"class":512}," name)\n",[19,158190,158191],{},"字符串只能和字符串拼接：",[26,158193,158195],{"className":723,"code":158194,"language":305,"meta":32,"style":32},"age = 18\nprint(\"年龄:\" + str(age))\n",[34,158196,158197,158205],{"__ignoreMap":32},[167,158198,158199,158201,158203],{"class":169,"line":170},[167,158200,148137],{"class":512},[167,158202,523],{"class":731},[167,158204,148142],{"class":184},[167,158206,158207,158209,158211,158213,158215,158217],{"class":169,"line":191},[167,158208,1606],{"class":184},[167,158210,898],{"class":512},[167,158212,148108],{"class":177},[167,158214,47566],{"class":731},[167,158216,75907],{"class":184},[167,158218,158219],{"class":512},"(age))\n",[19,158221,158222],{},"更推荐使用格式化字符串。",[14,158224,158226],{"id":158225},"_210-字符串格式化","2.10 字符串格式化",[494,158228,158230],{"id":158229},"_2101-百分号格式化","2.10.1 百分号格式化",[26,158232,158234],{"className":723,"code":158233,"language":305,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[34,158235,158236,158244,158252,158261,158265],{"__ignoreMap":32},[167,158237,158238,158240,158242],{"class":169,"line":170},[167,158239,148127],{"class":512},[167,158241,523],{"class":731},[167,158243,150944],{"class":177},[167,158245,158246,158248,158250],{"class":169,"line":191},[167,158247,148137],{"class":512},[167,158249,523],{"class":731},[167,158251,148142],{"class":184},[167,158253,158254,158256,158258],{"class":169,"line":205},[167,158255,156949],{"class":512},[167,158257,523],{"class":731},[167,158259,158260],{"class":184}," 95.5\n",[167,158262,158263],{"class":169,"line":219},[167,158264,741],{"emptyLinePlaceholder":740},[167,158266,158267,158269,158271,158274,158277,158280,158283,158286,158289,158291,158293],{"class":169,"line":230},[167,158268,1606],{"class":184},[167,158270,898],{"class":512},[167,158272,158273],{"class":177},"\"姓名:",[167,158275,158276],{"class":184},"%s",[167,158278,158279],{"class":177}," 年龄:",[167,158281,158282],{"class":184},"%d",[167,158284,158285],{"class":177}," 分数:",[167,158287,158288],{"class":184},"%.1f",[167,158290,2452],{"class":177},[167,158292,157672],{"class":731},[167,158294,158295],{"class":512}," (name, age, score))\n",[19,158297,158298],{},"常用占位符：",[68,158300,158301,158310],{},[71,158302,158303],{},[74,158304,158305,158308],{},[77,158306,158307],{},"占位符",[77,158309,27889],{},[85,158311,158312,158320,158328],{},[74,158313,158314,158318],{},[90,158315,158316],{},[34,158317,158276],{},[90,158319,156815],{},[74,158321,158322,158326],{},[90,158323,158324],{},[34,158325,158282],{},[90,158327,156793],{},[74,158329,158330,158335],{},[90,158331,158332],{},[34,158333,158334],{},"%f",[90,158336,156804],{},[19,158338,158339],{},"精度控制：",[26,158341,158343],{"className":723,"code":158342,"language":305,"meta":32,"style":32},"price = 12.3456\nprint(\"%.2f\" % price)\n",[34,158344,158345,158354],{"__ignoreMap":32},[167,158346,158347,158349,158351],{"class":169,"line":170},[167,158348,148272],{"class":512},[167,158350,523],{"class":731},[167,158352,158353],{"class":184}," 12.3456\n",[167,158355,158356,158358,158360,158362,158365,158367,158369],{"class":169,"line":191},[167,158357,1606],{"class":184},[167,158359,898],{"class":512},[167,158361,2452],{"class":177},[167,158363,158364],{"class":184},"%.2f",[167,158366,2452],{"class":177},[167,158368,157672],{"class":731},[167,158370,158371],{"class":512}," price)\n",[494,158373,158375],{"id":158374},"_2102-format方法","2.10.2 format方法",[26,158377,158379],{"className":723,"code":158378,"language":305,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[34,158380,158381,158389,158397,158401,158420,158440],{"__ignoreMap":32},[167,158382,158383,158385,158387],{"class":169,"line":170},[167,158384,148127],{"class":512},[167,158386,523],{"class":731},[167,158388,150944],{"class":177},[167,158390,158391,158393,158395],{"class":169,"line":191},[167,158392,148137],{"class":512},[167,158394,523],{"class":731},[167,158396,148142],{"class":184},[167,158398,158399],{"class":169,"line":205},[167,158400,741],{"emptyLinePlaceholder":740},[167,158402,158403,158405,158407,158409,158411,158413,158415,158417],{"class":169,"line":219},[167,158404,1606],{"class":184},[167,158406,898],{"class":512},[167,158408,158273],{"class":177},[167,158410,34462],{"class":184},[167,158412,158279],{"class":177},[167,158414,34462],{"class":184},[167,158416,2452],{"class":177},[167,158418,158419],{"class":512},".format(name, age))\n",[167,158421,158422,158424,158426,158428,158431,158433,158436,158438],{"class":169,"line":230},[167,158423,1606],{"class":184},[167,158425,898],{"class":512},[167,158427,158273],{"class":177},[167,158429,158430],{"class":184},"{0}",[167,158432,158279],{"class":177},[167,158434,158435],{"class":184},"{1}",[167,158437,2452],{"class":177},[167,158439,158419],{"class":512},[167,158441,158442,158444,158446,158448,158451,158453,158456,158458,158461,158463,158465,158468,158470,158472],{"class":169,"line":241},[167,158443,1606],{"class":184},[167,158445,898],{"class":512},[167,158447,158273],{"class":177},[167,158449,158450],{"class":184},"{name}",[167,158452,158279],{"class":177},[167,158454,158455],{"class":184},"{age}",[167,158457,2452],{"class":177},[167,158459,158460],{"class":512},".format(",[167,158462,81797],{"class":7246},[167,158464,523],{"class":731},[167,158466,158467],{"class":512},"name, ",[167,158469,72209],{"class":7246},[167,158471,523],{"class":731},[167,158473,158474],{"class":512},"age))\n",[494,158476,158478],{"id":158477},"_2103-f-string","2.10.3 f-string",[19,158480,158481],{},"推荐写法：",[26,158483,158485],{"className":723,"code":158484,"language":305,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[34,158486,158487,158495,158503,158511,158515],{"__ignoreMap":32},[167,158488,158489,158491,158493],{"class":169,"line":170},[167,158490,148127],{"class":512},[167,158492,523],{"class":731},[167,158494,150944],{"class":177},[167,158496,158497,158499,158501],{"class":169,"line":191},[167,158498,148137],{"class":512},[167,158500,523],{"class":731},[167,158502,148142],{"class":184},[167,158504,158505,158507,158509],{"class":169,"line":205},[167,158506,156949],{"class":512},[167,158508,523],{"class":731},[167,158510,158260],{"class":184},[167,158512,158513],{"class":169,"line":219},[167,158514,741],{"emptyLinePlaceholder":740},[167,158516,158517,158519,158521,158523,158525,158527,158529,158531,158533,158535,158537,158539,158541,158543,158546,158549,158551,158553],{"class":169,"line":230},[167,158518,1606],{"class":184},[167,158520,898],{"class":512},[167,158522,2262],{"class":731},[167,158524,158273],{"class":177},[167,158526,3096],{"class":184},[167,158528,81797],{"class":512},[167,158530,3145],{"class":184},[167,158532,158279],{"class":177},[167,158534,3096],{"class":184},[167,158536,72209],{"class":512},[167,158538,3145],{"class":184},[167,158540,158285],{"class":177},[167,158542,3096],{"class":184},[167,158544,158545],{"class":512},"score",[167,158547,158548],{"class":731},":.1f",[167,158550,3145],{"class":184},[167,158552,2452],{"class":177},[167,158554,873],{"class":512},[19,158556,158557],{},"表达式也可以放进去：",[26,158559,158561],{"className":723,"code":158560,"language":305,"meta":32,"style":32},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[34,158562,158563,158571,158579],{"__ignoreMap":32},[167,158564,158565,158567,158569],{"class":169,"line":170},[167,158566,148272],{"class":512},[167,158568,523],{"class":731},[167,158570,148277],{"class":184},[167,158572,158573,158575,158577],{"class":169,"line":191},[167,158574,148282],{"class":512},[167,158576,523],{"class":731},[167,158578,56417],{"class":184},[167,158580,158581,158583,158585,158587,158590,158592,158594,158596,158599,158601,158604],{"class":169,"line":205},[167,158582,1606],{"class":184},[167,158584,898],{"class":512},[167,158586,2262],{"class":731},[167,158588,158589],{"class":177},"\"总价:",[167,158591,3096],{"class":184},[167,158593,148272],{"class":512},[167,158595,2655],{"class":731},[167,158597,158598],{"class":512}," count",[167,158600,3145],{"class":184},[167,158602,158603],{"class":177},"元\"",[167,158605,873],{"class":512},[14,158607,158609],{"id":158608},"_211-input输入","2.11 input输入",[19,158611,158612,158615],{},[34,158613,158614],{},"input()"," 会暂停程序，等待用户输入。",[26,158617,158619],{"className":723,"code":158618,"language":305,"meta":32,"style":32},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[34,158620,158621,158635],{"__ignoreMap":32},[167,158622,158623,158625,158627,158629,158631,158633],{"class":169,"line":170},[167,158624,148127],{"class":512},[167,158626,523],{"class":731},[167,158628,62594],{"class":184},[167,158630,898],{"class":512},[167,158632,153970],{"class":177},[167,158634,873],{"class":512},[167,158636,158637,158639,158641,158643,158646,158648,158650,158652,158654],{"class":169,"line":191},[167,158638,1606],{"class":184},[167,158640,898],{"class":512},[167,158642,2262],{"class":731},[167,158644,158645],{"class":177},"\"你好，",[167,158647,3096],{"class":184},[167,158649,81797],{"class":512},[167,158651,3145],{"class":184},[167,158653,2452],{"class":177},[167,158655,873],{"class":512},[19,158657,158658],{},"输入整数：",[26,158660,158662],{"className":723,"code":158661,"language":305,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[34,158663,158664,158682],{"__ignoreMap":32},[167,158665,158666,158668,158670,158672,158674,158676,158678,158680],{"class":169,"line":170},[167,158667,148137],{"class":512},[167,158669,523],{"class":731},[167,158671,4426],{"class":184},[167,158673,898],{"class":512},[167,158675,55812],{"class":184},[167,158677,898],{"class":512},[167,158679,153985],{"class":177},[167,158681,32505],{"class":512},[167,158683,158684,158686,158688,158690,158693,158695,158697,158699,158702,158704],{"class":169,"line":191},[167,158685,1606],{"class":184},[167,158687,898],{"class":512},[167,158689,2262],{"class":731},[167,158691,158692],{"class":177},"\"明年你",[167,158694,3096],{"class":184},[167,158696,148137],{"class":512},[167,158698,2681],{"class":731},[167,158700,158701],{"class":184}," 1}",[167,158703,150995],{"class":177},[167,158705,873],{"class":512},[19,158707,158708],{},"输入小数：",[26,158710,158712],{"className":723,"code":158711,"language":305,"meta":32,"style":32},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[34,158713,158714,158733],{"__ignoreMap":32},[167,158715,158716,158718,158720,158722,158724,158726,158728,158731],{"class":169,"line":170},[167,158717,156922],{"class":512},[167,158719,523],{"class":731},[167,158721,111388],{"class":184},[167,158723,898],{"class":512},[167,158725,55812],{"class":184},[167,158727,898],{"class":512},[167,158729,158730],{"class":177},"\"请输入身高:\"",[167,158732,32505],{"class":512},[167,158734,158735,158737,158739,158741,158744,158746,158748,158751,158753,158756],{"class":169,"line":191},[167,158736,1606],{"class":184},[167,158738,898],{"class":512},[167,158740,2262],{"class":731},[167,158742,158743],{"class":177},"\"身高:",[167,158745,3096],{"class":184},[167,158747,27002],{"class":512},[167,158749,158750],{"class":731},":.2f",[167,158752,3145],{"class":184},[167,158754,158755],{"class":177},"米\"",[167,158757,873],{"class":512},[14,158759,158761],{"id":158760},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158763,124883],{},[40,158765,158766,158769,158772,158775],{},[43,158767,158768],{},"输入商品单价。",[43,158770,158771],{},"输入购买数量。",[43,158773,158774],{},"输入折扣，例如 0.8 表示八折。",[43,158776,158777],{},"输出最终金额，保留两位小数。",[19,158779,12063],{},[26,158781,158783],{"className":723,"code":158782,"language":305,"meta":32,"style":32},"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",[34,158784,158785,158804,158823,158843,158847,158867,158871,158894,158915,158937],{"__ignoreMap":32},[167,158786,158787,158789,158791,158793,158795,158797,158799,158802],{"class":169,"line":170},[167,158788,148272],{"class":512},[167,158790,523],{"class":731},[167,158792,111388],{"class":184},[167,158794,898],{"class":512},[167,158796,55812],{"class":184},[167,158798,898],{"class":512},[167,158800,158801],{"class":177},"\"请输入商品单价:\"",[167,158803,32505],{"class":512},[167,158805,158806,158808,158810,158812,158814,158816,158818,158821],{"class":169,"line":191},[167,158807,148282],{"class":512},[167,158809,523],{"class":731},[167,158811,4426],{"class":184},[167,158813,898],{"class":512},[167,158815,55812],{"class":184},[167,158817,898],{"class":512},[167,158819,158820],{"class":177},"\"请输入购买数量:\"",[167,158822,32505],{"class":512},[167,158824,158825,158828,158830,158832,158834,158836,158838,158841],{"class":169,"line":205},[167,158826,158827],{"class":512},"discount ",[167,158829,523],{"class":731},[167,158831,111388],{"class":184},[167,158833,898],{"class":512},[167,158835,55812],{"class":184},[167,158837,898],{"class":512},[167,158839,158840],{"class":177},"\"请输入折扣:\"",[167,158842,32505],{"class":512},[167,158844,158845],{"class":169,"line":219},[167,158846,741],{"emptyLinePlaceholder":740},[167,158848,158849,158852,158854,158857,158859,158862,158864],{"class":169,"line":230},[167,158850,158851],{"class":512},"total ",[167,158853,523],{"class":731},[167,158855,158856],{"class":512}," price ",[167,158858,2655],{"class":731},[167,158860,158861],{"class":512}," count ",[167,158863,2655],{"class":731},[167,158865,158866],{"class":512}," discount\n",[167,158868,158869],{"class":169,"line":241},[167,158870,741],{"emptyLinePlaceholder":740},[167,158872,158873,158875,158877,158879,158882,158884,158886,158888,158890,158892],{"class":169,"line":261},[167,158874,1606],{"class":184},[167,158876,898],{"class":512},[167,158878,2262],{"class":731},[167,158880,158881],{"class":177},"\"商品单价:",[167,158883,3096],{"class":184},[167,158885,81802],{"class":512},[167,158887,158750],{"class":731},[167,158889,3145],{"class":184},[167,158891,2452],{"class":177},[167,158893,873],{"class":512},[167,158895,158896,158898,158900,158902,158905,158907,158909,158911,158913],{"class":169,"line":773},[167,158897,1606],{"class":184},[167,158899,898],{"class":512},[167,158901,2262],{"class":731},[167,158903,158904],{"class":177},"\"购买数量:",[167,158906,3096],{"class":184},[167,158908,86420],{"class":512},[167,158910,3145],{"class":184},[167,158912,2452],{"class":177},[167,158914,873],{"class":512},[167,158916,158917,158919,158921,158923,158926,158928,158931,158933,158935],{"class":169,"line":779},[167,158918,1606],{"class":184},[167,158920,898],{"class":512},[167,158922,2262],{"class":731},[167,158924,158925],{"class":177},"\"折扣:",[167,158927,3096],{"class":184},[167,158929,158930],{"class":512},"discount",[167,158932,3145],{"class":184},[167,158934,2452],{"class":177},[167,158936,873],{"class":512},[167,158938,158939,158941,158943,158945,158948,158950,158953,158955,158957,158959],{"class":169,"line":785},[167,158940,1606],{"class":184},[167,158942,898],{"class":512},[167,158944,2262],{"class":731},[167,158946,158947],{"class":177},"\"应付金额:",[167,158949,3096],{"class":184},[167,158951,158952],{"class":512},"total",[167,158954,158750],{"class":731},[167,158956,3145],{"class":184},[167,158958,158603],{"class":177},[167,158960,873],{"class":512},[14,158962,158964],{"id":158963},"_213-易错点","2.13 易错点",[40,158966,158967,158972,158978,158986,158989],{},[43,158968,158969,158971],{},[34,158970,158614],{}," 的结果是字符串，做运算前要转换。",[43,158973,158974,158975,423],{},"字符串拼接时，数字要先 ",[34,158976,158977],{},"str()",[43,158979,158980,158982,158983,158985],{},[34,158981,523],{}," 是赋值，",[34,158984,4985],{}," 是比较。",[43,158987,158988],{},"Python 没有自增自减运算符。",[43,158990,158991],{},"浮点数计算可能有精度误差：",[26,158993,158995],{"className":723,"code":158994,"language":305,"meta":32,"style":32},"print(0.1 + 0.2)\n",[34,158996,158997],{"__ignoreMap":32},[167,158998,158999,159001,159003,159005,159007,159010],{"class":169,"line":170},[167,159000,1606],{"class":184},[167,159002,898],{"class":512},[167,159004,88196],{"class":184},[167,159006,47566],{"class":731},[167,159008,159009],{"class":184}," 0.2",[167,159011,873],{"class":512},[19,159013,159014,159015,159018],{},"金额计算如果要求严格，可以后续学习 ",[34,159016,159017],{},"decimal"," 模块。",[14,159020,159022],{"id":159021},"_214-本章练习","2.14 本章练习",[40,159024,159025,159028,159031,159034,159037],{},[43,159026,159027],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[43,159029,159030],{},"输入圆的半径，计算面积，保留两位小数。",[43,159032,159033],{},"输入工资和奖金，计算总收入。",[43,159035,159036],{},"输入摄氏温度，转换为华氏温度。",[43,159038,159039],{},"写一个 BMI 计算程序：",[26,159041,159044],{"className":159042,"code":159043,"language":31,"meta":32},[29],"BMI = 体重kg \u002F 身高m ** 2\n",[34,159045,159043],{"__ignoreMap":32},[2113,159047,159048],{},"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":32,"searchDepth":191,"depth":191,"links":159050},[159051,159052,159053,159054,159055,159056,159057,159063,159064,159065,159070,159071,159072,159073],{"id":156612,"depth":191,"text":156613},{"id":156721,"depth":191,"text":156722},{"id":156892,"depth":191,"text":156893},{"id":156969,"depth":191,"text":156970},{"id":52731,"depth":191,"text":52732},{"id":157275,"depth":191,"text":157276},{"id":157501,"depth":191,"text":157502,"children":159058},[159059,159060,159061,159062],{"id":157505,"depth":205,"text":157506},{"id":157699,"depth":205,"text":157700},{"id":157787,"depth":205,"text":157788},{"id":157893,"depth":205,"text":157894},{"id":158002,"depth":191,"text":158003},{"id":158160,"depth":191,"text":158161},{"id":158225,"depth":191,"text":158226,"children":159066},[159067,159068,159069],{"id":158229,"depth":205,"text":158230},{"id":158374,"depth":205,"text":158375},{"id":158477,"depth":205,"text":158478},{"id":158608,"depth":191,"text":158609},{"id":158760,"depth":191,"text":158761},{"id":158963,"depth":191,"text":158964},{"id":159021,"depth":191,"text":159022},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156604,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159080,"title":159081,"body":159082,"description":25403,"extension":2140,"meta":160718,"navigation":740,"path":160719,"seo":160720,"stem":160721,"__hash__":160722},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159083,"toc":160699},[159084,159087,159091,159094,159109,159112,159140,159144,159194,159196,159212,159215,159241,159244,159248,159315,159318,159334,159338,159341,159459,159462,159469,159518,159524,159528,159531,159644,159647,159651,159655,159658,159708,159712,159715,159765,159769,159772,159810,159814,159817,159863,159866,159901,159905,159910,159913,159959,159961,160028,160032,160038,160149,160158,160162,160164,160175,160177,160343,160347,160349,160363,160365,160579,160583,160602,160619,160622,160668,160672,160696],[10,159085,159081],{"id":159086},"_3-判断语句",[14,159088,159090],{"id":159089},"_31-布尔值","3.1 布尔值",[19,159092,159093],{},"判断语句依赖布尔值：",[26,159095,159097],{"className":723,"code":159096,"language":305,"meta":32,"style":32},"True\nFalse\n",[34,159098,159099,159104],{"__ignoreMap":32},[167,159100,159101],{"class":169,"line":170},[167,159102,159103],{"class":184},"True\n",[167,159105,159106],{"class":169,"line":191},[167,159107,159108],{"class":184},"False\n",[19,159110,159111],{},"比较表达式会产生布尔值：",[26,159113,159115],{"className":723,"code":159114,"language":305,"meta":32,"style":32},"age = 18\nprint(age >= 18)  # True\n",[34,159116,159117,159125],{"__ignoreMap":32},[167,159118,159119,159121,159123],{"class":169,"line":170},[167,159120,148137],{"class":512},[167,159122,523],{"class":731},[167,159124,148142],{"class":184},[167,159126,159127,159129,159131,159133,159135,159137],{"class":169,"line":191},[167,159128,1606],{"class":184},[167,159130,157359],{"class":512},[167,159132,3764],{"class":731},[167,159134,157876],{"class":184},[167,159136,47808],{"class":512},[167,159138,159139],{"class":2268},"# True\n",[14,159141,159143],{"id":159142},"_32-if基础语法","3.2 if基础语法",[26,159145,159147],{"className":723,"code":159146,"language":305,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[34,159148,159149,159167,159171,159183],{"__ignoreMap":32},[167,159150,159151,159153,159155,159157,159159,159161,159163,159165],{"class":169,"line":170},[167,159152,148137],{"class":512},[167,159154,523],{"class":731},[167,159156,4426],{"class":184},[167,159158,898],{"class":512},[167,159160,55812],{"class":184},[167,159162,898],{"class":512},[167,159164,153985],{"class":177},[167,159166,32505],{"class":512},[167,159168,159169],{"class":169,"line":191},[167,159170,741],{"emptyLinePlaceholder":740},[167,159172,159173,159175,159177,159179,159181],{"class":169,"line":205},[167,159174,1035],{"class":731},[167,159176,17733],{"class":512},[167,159178,3764],{"class":731},[167,159180,157876],{"class":184},[167,159182,857],{"class":512},[167,159184,159185,159187,159189,159192],{"class":169,"line":219},[167,159186,895],{"class":184},[167,159188,898],{"class":512},[167,159190,159191],{"class":177},"\"可以进入网吧\"",[167,159193,873],{"class":512},[19,159195,11053],{},[40,159197,159198,159203,159206,159209],{},[43,159199,159200,159202],{},[34,159201,1035],{}," 后面是条件表达式。",[43,159204,159205],{},"条件后面必须写冒号。",[43,159207,159208],{},"条件成立时执行缩进代码块。",[43,159210,159211],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159213,159214],{},"错误示例：",[26,159216,159218],{"className":723,"code":159217,"language":305,"meta":32,"style":32},"if age >= 18\n    print(\"可以进入\")\n",[34,159219,159220,159230],{"__ignoreMap":32},[167,159221,159222,159224,159226,159228],{"class":169,"line":170},[167,159223,1035],{"class":731},[167,159225,17733],{"class":512},[167,159227,3764],{"class":731},[167,159229,148142],{"class":184},[167,159231,159232,159234,159236,159239],{"class":169,"line":191},[167,159233,895],{"class":184},[167,159235,898],{"class":512},[167,159237,159238],{"class":177},"\"可以进入\"",[167,159240,873],{"class":512},[19,159242,159243],{},"缺少冒号。",[14,159245,159247],{"id":159246},"_33-if-else","3.3 if else",[26,159249,159251],{"className":723,"code":159250,"language":305,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[34,159252,159253,159271,159275,159287,159298,159304],{"__ignoreMap":32},[167,159254,159255,159257,159259,159261,159263,159265,159267,159269],{"class":169,"line":170},[167,159256,148137],{"class":512},[167,159258,523],{"class":731},[167,159260,4426],{"class":184},[167,159262,898],{"class":512},[167,159264,55812],{"class":184},[167,159266,898],{"class":512},[167,159268,153985],{"class":177},[167,159270,32505],{"class":512},[167,159272,159273],{"class":169,"line":191},[167,159274,741],{"emptyLinePlaceholder":740},[167,159276,159277,159279,159281,159283,159285],{"class":169,"line":205},[167,159278,1035],{"class":731},[167,159280,17733],{"class":512},[167,159282,3764],{"class":731},[167,159284,157876],{"class":184},[167,159286,857],{"class":512},[167,159288,159289,159291,159293,159296],{"class":169,"line":219},[167,159290,895],{"class":184},[167,159292,898],{"class":512},[167,159294,159295],{"class":177},"\"成年人\"",[167,159297,873],{"class":512},[167,159299,159300,159302],{"class":169,"line":230},[167,159301,3755],{"class":731},[167,159303,857],{"class":512},[167,159305,159306,159308,159310,159313],{"class":169,"line":241},[167,159307,895],{"class":184},[167,159309,898],{"class":512},[167,159311,159312],{"class":177},"\"未成年人\"",[167,159314,873],{"class":512},[19,159316,159317],{},"执行逻辑：",[40,159319,159320,159326,159331],{},[43,159321,159322,159323,159325],{},"条件成立，执行 ",[34,159324,1035],{}," 代码块。",[43,159327,159328,159329,159325],{},"条件不成立，执行 ",[34,159330,3755],{},[43,159332,159333],{},"两个代码块只会执行其中一个。",[14,159335,159337],{"id":159336},"_34-if-elif-else","3.4 if elif else",[19,159339,159340],{},"多条件判断：",[26,159342,159344],{"className":723,"code":159343,"language":305,"meta":32,"style":32},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[34,159345,159346,159364,159368,159382,159393,159407,159418,159431,159442,159448],{"__ignoreMap":32},[167,159347,159348,159350,159352,159354,159356,159358,159360,159362],{"class":169,"line":170},[167,159349,156949],{"class":512},[167,159351,523],{"class":731},[167,159353,4426],{"class":184},[167,159355,898],{"class":512},[167,159357,55812],{"class":184},[167,159359,898],{"class":512},[167,159361,154000],{"class":177},[167,159363,32505],{"class":512},[167,159365,159366],{"class":169,"line":191},[167,159367,741],{"emptyLinePlaceholder":740},[167,159369,159370,159372,159375,159377,159380],{"class":169,"line":205},[167,159371,1035],{"class":731},[167,159373,159374],{"class":512}," score ",[167,159376,3764],{"class":731},[167,159378,159379],{"class":184}," 90",[167,159381,857],{"class":512},[167,159383,159384,159386,159388,159391],{"class":169,"line":219},[167,159385,895],{"class":184},[167,159387,898],{"class":512},[167,159389,159390],{"class":177},"\"优秀\"",[167,159392,873],{"class":512},[167,159394,159395,159398,159400,159402,159405],{"class":169,"line":230},[167,159396,159397],{"class":731},"elif",[167,159399,159374],{"class":512},[167,159401,3764],{"class":731},[167,159403,159404],{"class":184}," 80",[167,159406,857],{"class":512},[167,159408,159409,159411,159413,159416],{"class":169,"line":241},[167,159410,895],{"class":184},[167,159412,898],{"class":512},[167,159414,159415],{"class":177},"\"良好\"",[167,159417,873],{"class":512},[167,159419,159420,159422,159424,159426,159429],{"class":169,"line":261},[167,159421,159397],{"class":731},[167,159423,159374],{"class":512},[167,159425,3764],{"class":731},[167,159427,159428],{"class":184}," 60",[167,159430,857],{"class":512},[167,159432,159433,159435,159437,159440],{"class":169,"line":773},[167,159434,895],{"class":184},[167,159436,898],{"class":512},[167,159438,159439],{"class":177},"\"及格\"",[167,159441,873],{"class":512},[167,159443,159444,159446],{"class":169,"line":779},[167,159445,3755],{"class":731},[167,159447,857],{"class":512},[167,159449,159450,159452,159454,159457],{"class":169,"line":785},[167,159451,895],{"class":184},[167,159453,898],{"class":512},[167,159455,159456],{"class":177},"\"不及格\"",[167,159458,873],{"class":512},[19,159460,159461],{},"注意判断顺序很重要。",[19,159463,159464,159465,159468],{},"如果把 ",[34,159466,159467],{},"score >= 60"," 放在最前面：",[26,159470,159472],{"className":723,"code":159471,"language":305,"meta":32,"style":32},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[34,159473,159474,159486,159496,159508],{"__ignoreMap":32},[167,159475,159476,159478,159480,159482,159484],{"class":169,"line":170},[167,159477,1035],{"class":731},[167,159479,159374],{"class":512},[167,159481,3764],{"class":731},[167,159483,159428],{"class":184},[167,159485,857],{"class":512},[167,159487,159488,159490,159492,159494],{"class":169,"line":191},[167,159489,895],{"class":184},[167,159491,898],{"class":512},[167,159493,159439],{"class":177},[167,159495,873],{"class":512},[167,159497,159498,159500,159502,159504,159506],{"class":169,"line":205},[167,159499,159397],{"class":731},[167,159501,159374],{"class":512},[167,159503,3764],{"class":731},[167,159505,159379],{"class":184},[167,159507,857],{"class":512},[167,159509,159510,159512,159514,159516],{"class":169,"line":219},[167,159511,895],{"class":184},[167,159513,898],{"class":512},[167,159515,159390],{"class":177},[167,159517,873],{"class":512},[19,159519,159520,159521,159523],{},"成绩 95 会先满足 ",[34,159522,159467],{},"，后面的优秀分支就不会执行。",[14,159525,159527],{"id":159526},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159529,159530],{},"嵌套判断就是在一个判断内部再写判断。",[26,159532,159534],{"className":723,"code":159533,"language":305,"meta":32,"style":32},"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",[34,159535,159536,159554,159569,159573,159585,159599,159609,159616,159627,159633],{"__ignoreMap":32},[167,159537,159538,159540,159542,159544,159546,159548,159550,159552],{"class":169,"line":170},[167,159539,148137],{"class":512},[167,159541,523],{"class":731},[167,159543,4426],{"class":184},[167,159545,898],{"class":512},[167,159547,55812],{"class":184},[167,159549,898],{"class":512},[167,159551,153985],{"class":177},[167,159553,32505],{"class":512},[167,159555,159556,159558,159560,159562,159564,159567],{"class":169,"line":191},[167,159557,157952],{"class":512},[167,159559,523],{"class":731},[167,159561,62594],{"class":184},[167,159563,898],{"class":512},[167,159565,159566],{"class":177},"\"是否有票(y\u002Fn):\"",[167,159568,873],{"class":512},[167,159570,159571],{"class":169,"line":205},[167,159572,741],{"emptyLinePlaceholder":740},[167,159574,159575,159577,159579,159581,159583],{"class":169,"line":219},[167,159576,1035],{"class":731},[167,159578,17733],{"class":512},[167,159580,3764],{"class":731},[167,159582,157876],{"class":184},[167,159584,857],{"class":512},[167,159586,159587,159589,159592,159594,159597],{"class":169,"line":230},[167,159588,5136],{"class":731},[167,159590,159591],{"class":512}," has_ticket ",[167,159593,4985],{"class":731},[167,159595,159596],{"class":177}," \"y\"",[167,159598,857],{"class":512},[167,159600,159601,159603,159605,159607],{"class":169,"line":241},[167,159602,34454],{"class":184},[167,159604,898],{"class":512},[167,159606,159238],{"class":177},[167,159608,873],{"class":512},[167,159610,159611,159614],{"class":169,"line":261},[167,159612,159613],{"class":731},"    else",[167,159615,857],{"class":512},[167,159617,159618,159620,159622,159625],{"class":169,"line":773},[167,159619,34454],{"class":184},[167,159621,898],{"class":512},[167,159623,159624],{"class":177},"\"请先买票\"",[167,159626,873],{"class":512},[167,159628,159629,159631],{"class":169,"line":779},[167,159630,3755],{"class":731},[167,159632,857],{"class":512},[167,159634,159635,159637,159639,159642],{"class":169,"line":785},[167,159636,895],{"class":184},[167,159638,898],{"class":512},[167,159640,159641],{"class":177},"\"未成年人禁止进入\"",[167,159643,873],{"class":512},[19,159645,159646],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159648,159650],{"id":159649},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[494,159652,159654],{"id":159653},"_361-and","3.6.1 and",[19,159656,159657],{},"两个条件都成立才成立。",[26,159659,159661],{"className":723,"code":159660,"language":305,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[34,159662,159663,159671,159679,159683,159698],{"__ignoreMap":32},[167,159664,159665,159667,159669],{"class":169,"line":170},[167,159666,148137],{"class":512},[167,159668,523],{"class":731},[167,159670,90051],{"class":184},[167,159672,159673,159675,159677],{"class":169,"line":191},[167,159674,157952],{"class":512},[167,159676,523],{"class":731},[167,159678,155190],{"class":184},[167,159680,159681],{"class":169,"line":205},[167,159682,741],{"emptyLinePlaceholder":740},[167,159684,159685,159687,159689,159691,159693,159695],{"class":169,"line":219},[167,159686,1035],{"class":731},[167,159688,17733],{"class":512},[167,159690,3764],{"class":731},[167,159692,157876],{"class":184},[167,159694,122020],{"class":731},[167,159696,159697],{"class":512}," has_ticket:\n",[167,159699,159700,159702,159704,159706],{"class":169,"line":230},[167,159701,895],{"class":184},[167,159703,898],{"class":512},[167,159705,159238],{"class":177},[167,159707,873],{"class":512},[494,159709,159711],{"id":159710},"_362-or","3.6.2 or",[19,159713,159714],{},"只要一个条件成立就成立。",[26,159716,159718],{"className":723,"code":159717,"language":305,"meta":32,"style":32},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[34,159719,159720,159729,159738,159742,159754],{"__ignoreMap":32},[167,159721,159722,159725,159727],{"class":169,"line":170},[167,159723,159724],{"class":512},"is_vip ",[167,159726,523],{"class":731},[167,159728,127398],{"class":184},[167,159730,159731,159734,159736],{"class":169,"line":191},[167,159732,159733],{"class":512},"coupon ",[167,159735,523],{"class":731},[167,159737,155190],{"class":184},[167,159739,159740],{"class":169,"line":205},[167,159741,741],{"emptyLinePlaceholder":740},[167,159743,159744,159746,159749,159751],{"class":169,"line":219},[167,159745,1035],{"class":731},[167,159747,159748],{"class":512}," is_vip ",[167,159750,116681],{"class":731},[167,159752,159753],{"class":512}," coupon:\n",[167,159755,159756,159758,159760,159763],{"class":169,"line":230},[167,159757,895],{"class":184},[167,159759,898],{"class":512},[167,159761,159762],{"class":177},"\"可以享受优惠\"",[167,159764,873],{"class":512},[494,159766,159768],{"id":159767},"_363-not","3.6.3 not",[19,159770,159771],{},"取反。",[26,159773,159775],{"className":723,"code":159774,"language":305,"meta":32,"style":32},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[34,159776,159777,159786,159790,159799],{"__ignoreMap":32},[167,159778,159779,159782,159784],{"class":169,"line":170},[167,159780,159781],{"class":512},"is_closed ",[167,159783,523],{"class":731},[167,159785,127398],{"class":184},[167,159787,159788],{"class":169,"line":191},[167,159789,741],{"emptyLinePlaceholder":740},[167,159791,159792,159794,159796],{"class":169,"line":205},[167,159793,1035],{"class":731},[167,159795,40931],{"class":731},[167,159797,159798],{"class":512}," is_closed:\n",[167,159800,159801,159803,159805,159808],{"class":169,"line":219},[167,159802,895],{"class":184},[167,159804,898],{"class":512},[167,159806,159807],{"class":177},"\"店铺营业中\"",[167,159809,873],{"class":512},[14,159811,159813],{"id":159812},"_37-链式比较","3.7 链式比较",[19,159815,159816],{},"Python 支持链式比较：",[26,159818,159820],{"className":723,"code":159819,"language":305,"meta":32,"style":32},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[34,159821,159822,159831,159835,159852],{"__ignoreMap":32},[167,159823,159824,159826,159828],{"class":169,"line":170},[167,159825,156949],{"class":512},[167,159827,523],{"class":731},[167,159829,159830],{"class":184}," 85\n",[167,159832,159833],{"class":169,"line":191},[167,159834,741],{"emptyLinePlaceholder":740},[167,159836,159837,159839,159841,159844,159846,159848,159850],{"class":169,"line":205},[167,159838,1035],{"class":731},[167,159840,6125],{"class":184},[167,159842,159843],{"class":731}," \u003C=",[167,159845,159374],{"class":512},[167,159847,3653],{"class":731},[167,159849,7784],{"class":184},[167,159851,857],{"class":512},[167,159853,159854,159856,159858,159861],{"class":169,"line":219},[167,159855,895],{"class":184},[167,159857,898],{"class":512},[167,159859,159860],{"class":177},"\"成绩合法\"",[167,159862,873],{"class":512},[19,159864,159865],{},"等价于：",[26,159867,159869],{"className":723,"code":159868,"language":305,"meta":32,"style":32},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[34,159870,159871,159891],{"__ignoreMap":32},[167,159872,159873,159875,159877,159879,159881,159883,159885,159887,159889],{"class":169,"line":170},[167,159874,1035],{"class":731},[167,159876,159374],{"class":512},[167,159878,3764],{"class":731},[167,159880,6125],{"class":184},[167,159882,122020],{"class":731},[167,159884,159374],{"class":512},[167,159886,3653],{"class":731},[167,159888,7784],{"class":184},[167,159890,857],{"class":512},[167,159892,159893,159895,159897,159899],{"class":169,"line":191},[167,159894,895],{"class":184},[167,159896,898],{"class":512},[167,159898,159860],{"class":177},[167,159900,873],{"class":512},[14,159902,159904],{"id":159903},"_38-真值和假值","3.8 真值和假值",[19,159906,118058,159907,159909],{},[34,159908,1035],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159911,159912],{},"假值：",[26,159914,159916],{"className":723,"code":159915,"language":305,"meta":32,"style":32},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[34,159917,159918,159922,159927,159931,159935,159940,159944,159948,159953],{"__ignoreMap":32},[167,159919,159920],{"class":169,"line":170},[167,159921,159108],{"class":184},[167,159923,159924],{"class":169,"line":191},[167,159925,159926],{"class":184},"None\n",[167,159928,159929],{"class":169,"line":205},[167,159930,5120],{"class":184},[167,159932,159933],{"class":169,"line":219},[167,159934,34346],{"class":184},[167,159936,159937],{"class":169,"line":230},[167,159938,159939],{"class":177},"\"\"\n",[167,159941,159942],{"class":169,"line":241},[167,159943,34361],{"class":512},[167,159945,159946],{"class":169,"line":261},[167,159947,4020],{"class":512},[167,159949,159950],{"class":169,"line":773},[167,159951,159952],{"class":512},"{}\n",[167,159954,159955,159957],{"class":169,"line":779},[167,159956,156881],{"class":184},[167,159958,4020],{"class":512},[19,159960,17161],{},[26,159962,159964],{"className":723,"code":159963,"language":305,"meta":32,"style":32},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[34,159965,159966,159980,159984,159991,160011,160017],{"__ignoreMap":32},[167,159967,159968,159970,159972,159974,159976,159978],{"class":169,"line":170},[167,159969,148127],{"class":512},[167,159971,523],{"class":731},[167,159973,62594],{"class":184},[167,159975,898],{"class":512},[167,159977,153970],{"class":177},[167,159979,873],{"class":512},[167,159981,159982],{"class":169,"line":191},[167,159983,741],{"emptyLinePlaceholder":740},[167,159985,159986,159988],{"class":169,"line":205},[167,159987,1035],{"class":731},[167,159989,159990],{"class":512}," name:\n",[167,159992,159993,159995,159997,159999,160001,160003,160005,160007,160009],{"class":169,"line":219},[167,159994,895],{"class":184},[167,159996,898],{"class":512},[167,159998,2262],{"class":731},[167,160000,158645],{"class":177},[167,160002,3096],{"class":184},[167,160004,81797],{"class":512},[167,160006,3145],{"class":184},[167,160008,2452],{"class":177},[167,160010,873],{"class":512},[167,160012,160013,160015],{"class":169,"line":230},[167,160014,3755],{"class":731},[167,160016,857],{"class":512},[167,160018,160019,160021,160023,160026],{"class":169,"line":241},[167,160020,895],{"class":184},[167,160022,898],{"class":512},[167,160024,160025],{"class":177},"\"姓名不能为空\"",[167,160027,873],{"class":512},[14,160029,160031],{"id":160030},"_39-match语句","3.9 match语句",[19,160033,160034,160035,160037],{},"Python 3.10 开始支持 ",[34,160036,73253],{},"。它适合处理固定选项。",[26,160039,160041],{"className":723,"code":160040,"language":305,"meta":32,"style":32},"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",[34,160042,160043,160059,160063,160070,160080,160091,160100,160111,160120,160131,160138],{"__ignoreMap":32},[167,160044,160045,160048,160050,160052,160054,160057],{"class":169,"line":170},[167,160046,160047],{"class":512},"command ",[167,160049,523],{"class":731},[167,160051,62594],{"class":184},[167,160053,898],{"class":512},[167,160055,160056],{"class":177},"\"请输入命令:\"",[167,160058,873],{"class":512},[167,160060,160061],{"class":169,"line":191},[167,160062,741],{"emptyLinePlaceholder":740},[167,160064,160065,160067],{"class":169,"line":205},[167,160066,73253],{"class":731},[167,160068,160069],{"class":512}," command:\n",[167,160071,160072,160075,160078],{"class":169,"line":219},[167,160073,160074],{"class":731},"    case",[167,160076,160077],{"class":177}," \"start\"",[167,160079,857],{"class":512},[167,160081,160082,160084,160086,160089],{"class":169,"line":230},[167,160083,34454],{"class":184},[167,160085,898],{"class":512},[167,160087,160088],{"class":177},"\"启动\"",[167,160090,873],{"class":512},[167,160092,160093,160095,160098],{"class":169,"line":241},[167,160094,160074],{"class":731},[167,160096,160097],{"class":177}," \"stop\"",[167,160099,857],{"class":512},[167,160101,160102,160104,160106,160109],{"class":169,"line":261},[167,160103,34454],{"class":184},[167,160105,898],{"class":512},[167,160107,160108],{"class":177},"\"停止\"",[167,160110,873],{"class":512},[167,160112,160113,160115,160118],{"class":169,"line":773},[167,160114,160074],{"class":731},[167,160116,160117],{"class":177}," \"restart\"",[167,160119,857],{"class":512},[167,160121,160122,160124,160126,160129],{"class":169,"line":779},[167,160123,34454],{"class":184},[167,160125,898],{"class":512},[167,160127,160128],{"class":177},"\"重启\"",[167,160130,873],{"class":512},[167,160132,160133,160135],{"class":169,"line":785},[167,160134,160074],{"class":731},[167,160136,160137],{"class":512}," _:\n",[167,160139,160140,160142,160144,160147],{"class":169,"line":790},[167,160141,34454],{"class":184},[167,160143,898],{"class":512},[167,160145,160146],{"class":177},"\"未知命令\"",[167,160148,873],{"class":512},[19,160150,160151,160152,160154,160155,160157],{},"入门阶段掌握 ",[34,160153,156249],{}," 更重要，",[34,160156,73253],{}," 可以作为补充。",[14,160159,160161],{"id":160160},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160163,124883],{},[40,160165,160166,160169,160172],{},[43,160167,160168],{},"输入成绩。",[43,160170,160171],{},"判断成绩是否合法。",[43,160173,160174],{},"输出等级。",[19,160176,12063],{},[26,160178,160180],{"className":723,"code":160179,"language":305,"meta":32,"style":32},"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",[34,160181,160182,160200,160204,160222,160233,160245,160256,160268,160279,160292,160303,160315,160326,160332],{"__ignoreMap":32},[167,160183,160184,160186,160188,160190,160192,160194,160196,160198],{"class":169,"line":170},[167,160185,156949],{"class":512},[167,160187,523],{"class":731},[167,160189,111388],{"class":184},[167,160191,898],{"class":512},[167,160193,55812],{"class":184},[167,160195,898],{"class":512},[167,160197,154000],{"class":177},[167,160199,32505],{"class":512},[167,160201,160202],{"class":169,"line":191},[167,160203,741],{"emptyLinePlaceholder":740},[167,160205,160206,160208,160210,160212,160214,160216,160218,160220],{"class":169,"line":205},[167,160207,1035],{"class":731},[167,160209,40931],{"class":731},[167,160211,6125],{"class":184},[167,160213,159843],{"class":731},[167,160215,159374],{"class":512},[167,160217,3653],{"class":731},[167,160219,7784],{"class":184},[167,160221,857],{"class":512},[167,160223,160224,160226,160228,160231],{"class":169,"line":219},[167,160225,895],{"class":184},[167,160227,898],{"class":512},[167,160229,160230],{"class":177},"\"成绩不合法\"",[167,160232,873],{"class":512},[167,160234,160235,160237,160239,160241,160243],{"class":169,"line":230},[167,160236,159397],{"class":731},[167,160238,159374],{"class":512},[167,160240,3764],{"class":731},[167,160242,159379],{"class":184},[167,160244,857],{"class":512},[167,160246,160247,160249,160251,160254],{"class":169,"line":241},[167,160248,895],{"class":184},[167,160250,898],{"class":512},[167,160252,160253],{"class":177},"\"等级:A\"",[167,160255,873],{"class":512},[167,160257,160258,160260,160262,160264,160266],{"class":169,"line":261},[167,160259,159397],{"class":731},[167,160261,159374],{"class":512},[167,160263,3764],{"class":731},[167,160265,159404],{"class":184},[167,160267,857],{"class":512},[167,160269,160270,160272,160274,160277],{"class":169,"line":773},[167,160271,895],{"class":184},[167,160273,898],{"class":512},[167,160275,160276],{"class":177},"\"等级:B\"",[167,160278,873],{"class":512},[167,160280,160281,160283,160285,160287,160290],{"class":169,"line":779},[167,160282,159397],{"class":731},[167,160284,159374],{"class":512},[167,160286,3764],{"class":731},[167,160288,160289],{"class":184}," 70",[167,160291,857],{"class":512},[167,160293,160294,160296,160298,160301],{"class":169,"line":785},[167,160295,895],{"class":184},[167,160297,898],{"class":512},[167,160299,160300],{"class":177},"\"等级:C\"",[167,160302,873],{"class":512},[167,160304,160305,160307,160309,160311,160313],{"class":169,"line":790},[167,160306,159397],{"class":731},[167,160308,159374],{"class":512},[167,160310,3764],{"class":731},[167,160312,159428],{"class":184},[167,160314,857],{"class":512},[167,160316,160317,160319,160321,160324],{"class":169,"line":796},[167,160318,895],{"class":184},[167,160320,898],{"class":512},[167,160322,160323],{"class":177},"\"等级:D\"",[167,160325,873],{"class":512},[167,160327,160328,160330],{"class":169,"line":802},[167,160329,3755],{"class":731},[167,160331,857],{"class":512},[167,160333,160334,160336,160338,160341],{"class":169,"line":808},[167,160335,895],{"class":184},[167,160337,898],{"class":512},[167,160339,160340],{"class":177},"\"等级:E\"",[167,160342,873],{"class":512},[14,160344,160346],{"id":160345},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160348,124883],{},[40,160350,160351,160354,160357,160360],{},[43,160352,160353],{},"输入消费金额。",[43,160355,160356],{},"输入会员等级，普通、银卡、金卡。",[43,160358,160359],{},"普通不打折，银卡 9 折，金卡 8 折。",[43,160361,160362],{},"满 500 再减 50。",[19,160364,12063],{},[26,160366,160368],{"className":723,"code":160367,"language":305,"meta":32,"style":32},"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",[34,160369,160370,160390,160406,160410,160418,160422,160436,160446,160459,160468,160481,160489,160495,160506,160510,160524,160528,160542,160552,160556],{"__ignoreMap":32},[167,160371,160372,160375,160377,160379,160381,160383,160385,160388],{"class":169,"line":170},[167,160373,160374],{"class":512},"amount ",[167,160376,523],{"class":731},[167,160378,111388],{"class":184},[167,160380,898],{"class":512},[167,160382,55812],{"class":184},[167,160384,898],{"class":512},[167,160386,160387],{"class":177},"\"请输入消费金额:\"",[167,160389,32505],{"class":512},[167,160391,160392,160395,160397,160399,160401,160404],{"class":169,"line":191},[167,160393,160394],{"class":512},"level ",[167,160396,523],{"class":731},[167,160398,62594],{"class":184},[167,160400,898],{"class":512},[167,160402,160403],{"class":177},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[167,160405,873],{"class":512},[167,160407,160408],{"class":169,"line":205},[167,160409,741],{"emptyLinePlaceholder":740},[167,160411,160412,160414,160416],{"class":169,"line":219},[167,160413,158827],{"class":512},[167,160415,523],{"class":731},[167,160417,57688],{"class":184},[167,160419,160420],{"class":169,"line":230},[167,160421,741],{"emptyLinePlaceholder":740},[167,160423,160424,160426,160429,160431,160434],{"class":169,"line":241},[167,160425,1035],{"class":731},[167,160427,160428],{"class":512}," level ",[167,160430,4985],{"class":731},[167,160432,160433],{"class":177}," \"银卡\"",[167,160435,857],{"class":512},[167,160437,160438,160441,160443],{"class":169,"line":261},[167,160439,160440],{"class":512},"    discount ",[167,160442,523],{"class":731},[167,160444,160445],{"class":184}," 0.9\n",[167,160447,160448,160450,160452,160454,160457],{"class":169,"line":773},[167,160449,159397],{"class":731},[167,160451,160428],{"class":512},[167,160453,4985],{"class":731},[167,160455,160456],{"class":177}," \"金卡\"",[167,160458,857],{"class":512},[167,160460,160461,160463,160465],{"class":169,"line":779},[167,160462,160440],{"class":512},[167,160464,523],{"class":731},[167,160466,160467],{"class":184}," 0.8\n",[167,160469,160470,160472,160474,160476,160479],{"class":169,"line":785},[167,160471,159397],{"class":731},[167,160473,160428],{"class":512},[167,160475,4985],{"class":731},[167,160477,160478],{"class":177}," \"普通\"",[167,160480,857],{"class":512},[167,160482,160483,160485,160487],{"class":169,"line":790},[167,160484,160440],{"class":512},[167,160486,523],{"class":731},[167,160488,57688],{"class":184},[167,160490,160491,160493],{"class":169,"line":796},[167,160492,3755],{"class":731},[167,160494,857],{"class":512},[167,160496,160497,160499,160501,160504],{"class":169,"line":802},[167,160498,895],{"class":184},[167,160500,898],{"class":512},[167,160502,160503],{"class":177},"\"会员等级输入错误，按普通会员计算\"",[167,160505,873],{"class":512},[167,160507,160508],{"class":169,"line":808},[167,160509,741],{"emptyLinePlaceholder":740},[167,160511,160512,160515,160517,160520,160522],{"class":169,"line":814},[167,160513,160514],{"class":512},"pay ",[167,160516,523],{"class":731},[167,160518,160519],{"class":512}," amount ",[167,160521,2655],{"class":731},[167,160523,158866],{"class":512},[167,160525,160526],{"class":169,"line":820},[167,160527,741],{"emptyLinePlaceholder":740},[167,160529,160530,160532,160535,160537,160540],{"class":169,"line":826},[167,160531,1035],{"class":731},[167,160533,160534],{"class":512}," pay ",[167,160536,3764],{"class":731},[167,160538,160539],{"class":184}," 500",[167,160541,857],{"class":512},[167,160543,160544,160547,160549],{"class":169,"line":832},[167,160545,160546],{"class":512},"    pay ",[167,160548,151843],{"class":731},[167,160550,160551],{"class":184}," 50\n",[167,160553,160554],{"class":169,"line":837},[167,160555,741],{"emptyLinePlaceholder":740},[167,160557,160558,160560,160562,160564,160566,160568,160571,160573,160575,160577],{"class":169,"line":842},[167,160559,1606],{"class":184},[167,160561,898],{"class":512},[167,160563,2262],{"class":731},[167,160565,158947],{"class":177},[167,160567,3096],{"class":184},[167,160569,160570],{"class":512},"pay",[167,160572,158750],{"class":731},[167,160574,3145],{"class":184},[167,160576,158603],{"class":177},[167,160578,873],{"class":512},[14,160580,160582],{"id":160581},"_312-易错点","3.12 易错点",[40,160584,160585,160588,160591,160594,160599],{},[43,160586,160587],{},"冒号不能漏。",[43,160589,160590],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[43,160592,160593],{},"多分支判断要注意顺序。",[43,160595,160596,160597,423],{},"判断相等用 ",[34,160598,4985],{},[43,160600,160601],{},"字符串比较区分大小写：",[26,160603,160605],{"className":723,"code":160604,"language":305,"meta":32,"style":32},"\"Y\" == \"y\"  # False\n",[34,160606,160607],{"__ignoreMap":32},[167,160608,160609,160612,160614,160616],{"class":169,"line":170},[167,160610,160611],{"class":177},"\"Y\"",[167,160613,1041],{"class":731},[167,160615,159596],{"class":177},[167,160617,160618],{"class":2268},"  # False\n",[19,160620,160621],{},"可转换后再判断：",[26,160623,160625],{"className":723,"code":160624,"language":305,"meta":32,"style":32},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[34,160626,160627,160644,160657],{"__ignoreMap":32},[167,160628,160629,160632,160634,160636,160638,160641],{"class":169,"line":170},[167,160630,160631],{"class":512},"answer ",[167,160633,523],{"class":731},[167,160635,62594],{"class":184},[167,160637,898],{"class":512},[167,160639,160640],{"class":177},"\"是否继续(y\u002Fn):\"",[167,160642,160643],{"class":512},").lower()\n",[167,160645,160646,160648,160651,160653,160655],{"class":169,"line":191},[167,160647,1035],{"class":731},[167,160649,160650],{"class":512}," answer ",[167,160652,4985],{"class":731},[167,160654,159596],{"class":177},[167,160656,857],{"class":512},[167,160658,160659,160661,160663,160666],{"class":169,"line":205},[167,160660,895],{"class":184},[167,160662,898],{"class":512},[167,160664,160665],{"class":177},"\"继续\"",[167,160667,873],{"class":512},[14,160669,160671],{"id":160670},"_313-本章练习","3.13 本章练习",[40,160673,160674,160677,160680,160683,160693],{},[43,160675,160676],{},"输入年龄，判断是否成年。",[43,160678,160679],{},"输入年份，判断是否为闰年。",[43,160681,160682],{},"输入三个数字，输出最大值。",[43,160684,160685,160686,160689,160690,160692],{},"写登录判断：用户名是 ",[34,160687,160688],{},"admin"," 且密码是 ",[34,160691,17110],{}," 才登录成功。",[43,160694,160695],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2113,160697,160698],{},"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":32,"searchDepth":191,"depth":191,"links":160700},[160701,160702,160703,160704,160705,160706,160711,160712,160713,160714,160715,160716,160717],{"id":159089,"depth":191,"text":159090},{"id":159142,"depth":191,"text":159143},{"id":159246,"depth":191,"text":159247},{"id":159336,"depth":191,"text":159337},{"id":159526,"depth":191,"text":159527},{"id":159649,"depth":191,"text":159650,"children":160707},[160708,160709,160710],{"id":159653,"depth":205,"text":159654},{"id":159710,"depth":205,"text":159711},{"id":159767,"depth":205,"text":159768},{"id":159812,"depth":191,"text":159813},{"id":159903,"depth":191,"text":159904},{"id":160030,"depth":191,"text":160031},{"id":160160,"depth":191,"text":160161},{"id":160345,"depth":191,"text":160346},{"id":160581,"depth":191,"text":160582},{"id":160670,"depth":191,"text":160671},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159081,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160724,"title":160725,"body":160726,"description":25403,"extension":2140,"meta":162495,"navigation":740,"path":162496,"seo":162497,"stem":162498,"__hash__":162499},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160727,"toc":162475},[160728,160731,160735,160741,160744,160761,160765,160767,160784,160786,160831,160833,160850,160854,160857,160923,160926,160944,160948,161109,161118,161122,161126,161131,161178,161180,161186,161190,161195,161242,161244,161250,161254,161259,161295,161298,161345,161349,161355,161413,161418,161449,161454,161458,161513,161516,161588,161591,161650,161654,161657,161732,161735,161739,161845,161848,161874,161878,161890,161959,161962,162054,162058,162060,162071,162073,162203,162207,162409,162417,162421,162451,162455,162472],[10,160729,160725],{"id":160730},"_4-循环语句",[14,160732,160734],{"id":160733},"_41-为什么需要循环","4.1 为什么需要循环",[19,160736,160737,160738,160740],{},"如果要输出 1 到 100，不应该写 100 行 ",[34,160739,148063],{},"，而应该用循环。",[19,160742,160743],{},"循环适合处理重复任务：",[40,160745,160746,160749,160752,160755,160758],{},[43,160747,160748],{},"重复输出。",[43,160750,160751],{},"重复输入。",[43,160753,160754],{},"遍历数据。",[43,160756,160757],{},"持续执行菜单。",[43,160759,160760],{},"批量处理文件或数据。",[14,160762,160764],{"id":160763},"_42-while循环","4.2 while循环",[19,160766,7213],{},[26,160768,160770],{"className":723,"code":160769,"language":305,"meta":32,"style":32},"while 条件:\n    循环体\n",[34,160771,160772,160779],{"__ignoreMap":32},[167,160773,160774,160776],{"class":169,"line":170},[167,160775,110254],{"class":731},[167,160777,160778],{"class":512}," 条件:\n",[167,160780,160781],{"class":169,"line":191},[167,160782,160783],{"class":512},"    循环体\n",[19,160785,17161],{},[26,160787,160789],{"className":723,"code":160788,"language":305,"meta":32,"style":32},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[34,160790,160791,160799,160803,160815,160822],{"__ignoreMap":32},[167,160792,160793,160795,160797],{"class":169,"line":170},[167,160794,102132],{"class":512},[167,160796,523],{"class":731},[167,160798,57688],{"class":184},[167,160800,160801],{"class":169,"line":191},[167,160802,741],{"emptyLinePlaceholder":740},[167,160804,160805,160807,160809,160811,160813],{"class":169,"line":205},[167,160806,110254],{"class":731},[167,160808,11466],{"class":512},[167,160810,3653],{"class":731},[167,160812,4192],{"class":184},[167,160814,857],{"class":512},[167,160816,160817,160819],{"class":169,"line":219},[167,160818,895],{"class":184},[167,160820,160821],{"class":512},"(i)\n",[167,160823,160824,160827,160829],{"class":169,"line":230},[167,160825,160826],{"class":512},"    i ",[167,160828,11505],{"class":731},[167,160830,57688],{"class":184},[19,160832,82916],{},[40,160834,160835,160841,160844,160847],{},[43,160836,160837,160838,423],{},"判断条件 ",[34,160839,160840],{},"i \u003C= 5",[43,160842,160843],{},"条件成立，执行循环体。",[43,160845,160846],{},"执行完后回到条件判断。",[43,160848,160849],{},"条件不成立，退出循环。",[14,160851,160853],{"id":160852},"_43-while累加","4.3 while累加",[19,160855,160856],{},"计算 1 到 100 的和：",[26,160858,160860],{"className":723,"code":160859,"language":305,"meta":32,"style":32},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[34,160861,160862,160870,160878,160882,160894,160904,160912,160916],{"__ignoreMap":32},[167,160863,160864,160866,160868],{"class":169,"line":170},[167,160865,102132],{"class":512},[167,160867,523],{"class":731},[167,160869,57688],{"class":184},[167,160871,160872,160874,160876],{"class":169,"line":191},[167,160873,158851],{"class":512},[167,160875,523],{"class":731},[167,160877,49333],{"class":184},[167,160879,160880],{"class":169,"line":205},[167,160881,741],{"emptyLinePlaceholder":740},[167,160883,160884,160886,160888,160890,160892],{"class":169,"line":219},[167,160885,110254],{"class":731},[167,160887,11466],{"class":512},[167,160889,3653],{"class":731},[167,160891,7784],{"class":184},[167,160893,857],{"class":512},[167,160895,160896,160899,160901],{"class":169,"line":230},[167,160897,160898],{"class":512},"    total ",[167,160900,11505],{"class":731},[167,160902,160903],{"class":512}," i\n",[167,160905,160906,160908,160910],{"class":169,"line":241},[167,160907,160826],{"class":512},[167,160909,11505],{"class":731},[167,160911,57688],{"class":184},[167,160913,160914],{"class":169,"line":261},[167,160915,741],{"emptyLinePlaceholder":740},[167,160917,160918,160920],{"class":169,"line":773},[167,160919,1606],{"class":184},[167,160921,160922],{"class":512},"(total)\n",[19,160924,160925],{},"核心思想：",[40,160927,160928,160933,160938],{},[43,160929,160930,160932],{},[34,160931,2641],{}," 控制循环次数。",[43,160934,160935,160937],{},[34,160936,158952],{}," 保存累加结果。",[43,160939,160940,160941,160943],{},"每轮循环都要更新 ",[34,160942,2641],{},"，否则可能死循环。",[14,160945,160947],{"id":160946},"_44-while猜数字","4.4 while猜数字",[26,160949,160951],{"className":723,"code":160950,"language":305,"meta":32,"style":32},"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",[34,160952,160953,160959,160963,160980,160988,160992,161000,161020,161029,161033,161045,161056,161066,161077,161083,161105],{"__ignoreMap":32},[167,160954,160955,160957],{"class":169,"line":170},[167,160956,732],{"class":731},[167,160958,47328],{"class":512},[167,160960,160961],{"class":169,"line":191},[167,160962,741],{"emptyLinePlaceholder":740},[167,160964,160965,160967,160969,160972,160974,160976,160978],{"class":169,"line":205},[167,160966,160631],{"class":512},[167,160968,523],{"class":731},[167,160970,160971],{"class":512}," random.randint(",[167,160973,2418],{"class":184},[167,160975,14463],{"class":512},[167,160977,981],{"class":184},[167,160979,873],{"class":512},[167,160981,160982,160984,160986],{"class":169,"line":219},[167,160983,148282],{"class":512},[167,160985,523],{"class":731},[167,160987,49333],{"class":184},[167,160989,160990],{"class":169,"line":230},[167,160991,741],{"emptyLinePlaceholder":740},[167,160993,160994,160996,160998],{"class":169,"line":241},[167,160995,110254],{"class":731},[167,160997,97278],{"class":184},[167,160999,857],{"class":512},[167,161001,161002,161005,161007,161009,161011,161013,161015,161018],{"class":169,"line":261},[167,161003,161004],{"class":512},"    guess ",[167,161006,523],{"class":731},[167,161008,4426],{"class":184},[167,161010,898],{"class":512},[167,161012,55812],{"class":184},[167,161014,898],{"class":512},[167,161016,161017],{"class":177},"\"请输入1到100之间的数字:\"",[167,161019,32505],{"class":512},[167,161021,161022,161025,161027],{"class":169,"line":773},[167,161023,161024],{"class":512},"    count ",[167,161026,11505],{"class":731},[167,161028,57688],{"class":184},[167,161030,161031],{"class":169,"line":779},[167,161032,741],{"emptyLinePlaceholder":740},[167,161034,161035,161037,161040,161042],{"class":169,"line":785},[167,161036,5136],{"class":731},[167,161038,161039],{"class":512}," guess ",[167,161041,3159],{"class":731},[167,161043,161044],{"class":512}," answer:\n",[167,161046,161047,161049,161051,161054],{"class":169,"line":790},[167,161048,34454],{"class":184},[167,161050,898],{"class":512},[167,161052,161053],{"class":177},"\"猜大了\"",[167,161055,873],{"class":512},[167,161057,161058,161060,161062,161064],{"class":169,"line":796},[167,161059,41293],{"class":731},[167,161061,161039],{"class":512},[167,161063,513],{"class":731},[167,161065,161044],{"class":512},[167,161067,161068,161070,161072,161075],{"class":169,"line":802},[167,161069,34454],{"class":184},[167,161071,898],{"class":512},[167,161073,161074],{"class":177},"\"猜小了\"",[167,161076,873],{"class":512},[167,161078,161079,161081],{"class":169,"line":808},[167,161080,159613],{"class":731},[167,161082,857],{"class":512},[167,161084,161085,161087,161089,161091,161094,161096,161098,161100,161103],{"class":169,"line":814},[167,161086,34454],{"class":184},[167,161088,898],{"class":512},[167,161090,2262],{"class":731},[167,161092,161093],{"class":177},"\"猜对了，一共猜了",[167,161095,3096],{"class":184},[167,161097,86420],{"class":512},[167,161099,3145],{"class":184},[167,161101,161102],{"class":177},"次\"",[167,161104,873],{"class":512},[167,161106,161107],{"class":169,"line":820},[167,161108,33632],{"class":731},[19,161110,161111,161114,161115,161117],{},[34,161112,161113],{},"while True"," 表示无限循环，通常配合 ",[34,161116,4097],{}," 使用。",[14,161119,161121],{"id":161120},"_45-break和continue","4.5 break和continue",[494,161123,161125],{"id":161124},"_451-break","4.5.1 break",[19,161127,161128,161130],{},[34,161129,4097],{}," 直接结束整个循环。",[26,161132,161134],{"className":723,"code":161133,"language":305,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[34,161135,161136,161156,161168,161172],{"__ignoreMap":32},[167,161137,161138,161140,161142,161144,161146,161148,161150,161152,161154],{"class":169,"line":170},[167,161139,1168],{"class":731},[167,161141,11466],{"class":512},[167,161143,973],{"class":731},[167,161145,976],{"class":184},[167,161147,898],{"class":512},[167,161149,2418],{"class":184},[167,161151,14463],{"class":512},[167,161153,2544],{"class":184},[167,161155,984],{"class":512},[167,161157,161158,161160,161162,161164,161166],{"class":169,"line":191},[167,161159,5136],{"class":731},[167,161161,11466],{"class":512},[167,161163,4985],{"class":731},[167,161165,80058],{"class":184},[167,161167,857],{"class":512},[167,161169,161170],{"class":169,"line":205},[167,161171,33632],{"class":731},[167,161173,161174,161176],{"class":169,"line":219},[167,161175,895],{"class":184},[167,161177,160821],{"class":512},[19,161179,148048],{},[26,161181,161184],{"className":161182,"code":161183,"language":31,"meta":32},[29],"1\n2\n",[34,161185,161183],{"__ignoreMap":32},[494,161187,161189],{"id":161188},"_452-continue","4.5.2 continue",[19,161191,161192,161194],{},[34,161193,156263],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,161196,161198],{"className":723,"code":161197,"language":305,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[34,161199,161200,161220,161232,161236],{"__ignoreMap":32},[167,161201,161202,161204,161206,161208,161210,161212,161214,161216,161218],{"class":169,"line":170},[167,161203,1168],{"class":731},[167,161205,11466],{"class":512},[167,161207,973],{"class":731},[167,161209,976],{"class":184},[167,161211,898],{"class":512},[167,161213,2418],{"class":184},[167,161215,14463],{"class":512},[167,161217,2544],{"class":184},[167,161219,984],{"class":512},[167,161221,161222,161224,161226,161228,161230],{"class":169,"line":191},[167,161223,5136],{"class":731},[167,161225,11466],{"class":512},[167,161227,4985],{"class":731},[167,161229,80058],{"class":184},[167,161231,857],{"class":512},[167,161233,161234],{"class":169,"line":205},[167,161235,150103],{"class":731},[167,161237,161238,161240],{"class":169,"line":219},[167,161239,895],{"class":184},[167,161241,160821],{"class":512},[19,161243,148048],{},[26,161245,161248],{"className":161246,"code":161247,"language":31,"meta":32},[29],"1\n2\n4\n5\n",[34,161249,161247],{"__ignoreMap":32},[14,161251,161253],{"id":161252},"_46-for循环","4.6 for循环",[19,161255,161256,161258],{},[34,161257,1168],{}," 常用于遍历序列。",[26,161260,161262],{"className":723,"code":161261,"language":305,"meta":32,"style":32},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[34,161263,161264,161273,161277,161288],{"__ignoreMap":32},[167,161265,161266,161268,161270],{"class":169,"line":170},[167,161267,148127],{"class":512},[167,161269,523],{"class":731},[167,161271,161272],{"class":177}," \"python\"\n",[167,161274,161275],{"class":169,"line":191},[167,161276,741],{"emptyLinePlaceholder":740},[167,161278,161279,161281,161284,161286],{"class":169,"line":205},[167,161280,1168],{"class":731},[167,161282,161283],{"class":512}," ch ",[167,161285,973],{"class":731},[167,161287,159990],{"class":512},[167,161289,161290,161292],{"class":169,"line":219},[167,161291,895],{"class":184},[167,161293,161294],{"class":512},"(ch)\n",[19,161296,161297],{},"遍历列表：",[26,161299,161301],{"className":723,"code":161300,"language":305,"meta":32,"style":32},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[34,161302,161303,161325,161329,161339],{"__ignoreMap":32},[167,161304,161305,161308,161310,161312,161314,161316,161318,161320,161323],{"class":169,"line":170},[167,161306,161307],{"class":512},"students ",[167,161309,523],{"class":731},[167,161311,54221],{"class":512},[167,161313,151479],{"class":177},[167,161315,14463],{"class":512},[167,161317,152527],{"class":177},[167,161319,14463],{"class":512},[167,161321,161322],{"class":177},"\"小刚\"",[167,161324,35249],{"class":512},[167,161326,161327],{"class":169,"line":191},[167,161328,741],{"emptyLinePlaceholder":740},[167,161330,161331,161333,161335,161337],{"class":169,"line":205},[167,161332,1168],{"class":731},[167,161334,153728],{"class":512},[167,161336,973],{"class":731},[167,161338,153733],{"class":512},[167,161340,161341,161343],{"class":169,"line":219},[167,161342,895],{"class":184},[167,161344,151633],{"class":512},[14,161346,161348],{"id":161347},"_47-range函数","4.7 range函数",[19,161350,161351,161354],{},[34,161352,161353],{},"range()"," 用于生成整数序列。",[26,161356,161358],{"className":723,"code":161357,"language":305,"meta":32,"style":32},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[34,161359,161360,161374,161392],{"__ignoreMap":32},[167,161361,161362,161364,161366,161368,161371],{"class":169,"line":170},[167,161363,35418],{"class":184},[167,161365,898],{"class":512},[167,161367,2519],{"class":184},[167,161369,161370],{"class":512},")          ",[167,161372,161373],{"class":2268},"# 0,1,2,3,4\n",[167,161375,161376,161378,161380,161382,161384,161386,161389],{"class":169,"line":191},[167,161377,35418],{"class":184},[167,161379,898],{"class":512},[167,161381,2418],{"class":184},[167,161383,14463],{"class":512},[167,161385,2519],{"class":184},[167,161387,161388],{"class":512},")       ",[167,161390,161391],{"class":2268},"# 1,2,3,4\n",[167,161393,161394,161396,161398,161400,161402,161404,161406,161408,161410],{"class":169,"line":205},[167,161395,35418],{"class":184},[167,161397,898],{"class":512},[167,161399,2418],{"class":184},[167,161401,14463],{"class":512},[167,161403,2646],{"class":184},[167,161405,14463],{"class":512},[167,161407,2287],{"class":184},[167,161409,157252],{"class":512},[167,161411,161412],{"class":2268},"# 1,3,5,7,9\n",[19,161414,161415,161416,26640],{},"配合 ",[34,161417,1168],{},[26,161419,161421],{"className":723,"code":161420,"language":305,"meta":32,"style":32},"for i in range(1, 6):\n    print(i)\n",[34,161422,161423,161443],{"__ignoreMap":32},[167,161424,161425,161427,161429,161431,161433,161435,161437,161439,161441],{"class":169,"line":170},[167,161426,1168],{"class":731},[167,161428,11466],{"class":512},[167,161430,973],{"class":731},[167,161432,976],{"class":184},[167,161434,898],{"class":512},[167,161436,2418],{"class":184},[167,161438,14463],{"class":512},[167,161440,2544],{"class":184},[167,161442,984],{"class":512},[167,161444,161445,161447],{"class":169,"line":191},[167,161446,895],{"class":184},[167,161448,160821],{"class":512},[19,161450,11053,161451,161453],{},[34,161452,35418],{}," 的结束值不包含在内。",[14,161455,161457],{"id":161456},"_48-for循环求和","4.8 for循环求和",[26,161459,161461],{"className":723,"code":161460,"language":305,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[34,161462,161463,161471,161475,161495,161503,161507],{"__ignoreMap":32},[167,161464,161465,161467,161469],{"class":169,"line":170},[167,161466,158851],{"class":512},[167,161468,523],{"class":731},[167,161470,49333],{"class":184},[167,161472,161473],{"class":169,"line":191},[167,161474,741],{"emptyLinePlaceholder":740},[167,161476,161477,161479,161481,161483,161485,161487,161489,161491,161493],{"class":169,"line":205},[167,161478,1168],{"class":731},[167,161480,11466],{"class":512},[167,161482,973],{"class":731},[167,161484,976],{"class":184},[167,161486,898],{"class":512},[167,161488,2418],{"class":184},[167,161490,14463],{"class":512},[167,161492,2537],{"class":184},[167,161494,984],{"class":512},[167,161496,161497,161499,161501],{"class":169,"line":219},[167,161498,160898],{"class":512},[167,161500,11505],{"class":731},[167,161502,160903],{"class":512},[167,161504,161505],{"class":169,"line":230},[167,161506,741],{"emptyLinePlaceholder":740},[167,161508,161509,161511],{"class":169,"line":241},[167,161510,1606],{"class":184},[167,161512,160922],{"class":512},[19,161514,161515],{},"求偶数和：",[26,161517,161519],{"className":723,"code":161518,"language":305,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[34,161520,161521,161529,161533,161553,161569,161578,161582],{"__ignoreMap":32},[167,161522,161523,161525,161527],{"class":169,"line":170},[167,161524,158851],{"class":512},[167,161526,523],{"class":731},[167,161528,49333],{"class":184},[167,161530,161531],{"class":169,"line":191},[167,161532,741],{"emptyLinePlaceholder":740},[167,161534,161535,161537,161539,161541,161543,161545,161547,161549,161551],{"class":169,"line":205},[167,161536,1168],{"class":731},[167,161538,11466],{"class":512},[167,161540,973],{"class":731},[167,161542,976],{"class":184},[167,161544,898],{"class":512},[167,161546,2418],{"class":184},[167,161548,14463],{"class":512},[167,161550,2537],{"class":184},[167,161552,984],{"class":512},[167,161554,161555,161557,161559,161561,161563,161565,161567],{"class":169,"line":219},[167,161556,5136],{"class":731},[167,161558,11466],{"class":512},[167,161560,2528],{"class":731},[167,161562,16782],{"class":184},[167,161564,1041],{"class":731},[167,161566,6125],{"class":184},[167,161568,857],{"class":512},[167,161570,161571,161574,161576],{"class":169,"line":230},[167,161572,161573],{"class":512},"        total ",[167,161575,11505],{"class":731},[167,161577,160903],{"class":512},[167,161579,161580],{"class":169,"line":241},[167,161581,741],{"emptyLinePlaceholder":740},[167,161583,161584,161586],{"class":169,"line":261},[167,161585,1606],{"class":184},[167,161587,160922],{"class":512},[19,161589,161590],{},"也可以：",[26,161592,161594],{"className":723,"code":161593,"language":305,"meta":32,"style":32},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[34,161595,161596,161604,161608,161632,161640,161644],{"__ignoreMap":32},[167,161597,161598,161600,161602],{"class":169,"line":170},[167,161599,158851],{"class":512},[167,161601,523],{"class":731},[167,161603,49333],{"class":184},[167,161605,161606],{"class":169,"line":191},[167,161607,741],{"emptyLinePlaceholder":740},[167,161609,161610,161612,161614,161616,161618,161620,161622,161624,161626,161628,161630],{"class":169,"line":205},[167,161611,1168],{"class":731},[167,161613,11466],{"class":512},[167,161615,973],{"class":731},[167,161617,976],{"class":184},[167,161619,898],{"class":512},[167,161621,2287],{"class":184},[167,161623,14463],{"class":512},[167,161625,2537],{"class":184},[167,161627,14463],{"class":512},[167,161629,2287],{"class":184},[167,161631,984],{"class":512},[167,161633,161634,161636,161638],{"class":169,"line":219},[167,161635,160898],{"class":512},[167,161637,11505],{"class":731},[167,161639,160903],{"class":512},[167,161641,161642],{"class":169,"line":230},[167,161643,741],{"emptyLinePlaceholder":740},[167,161645,161646,161648],{"class":169,"line":241},[167,161647,1606],{"class":184},[167,161649,160922],{"class":512},[14,161651,161653],{"id":161652},"_49-循环嵌套","4.9 循环嵌套",[19,161655,161656],{},"嵌套循环就是循环里面再写循环。",[26,161658,161660],{"className":723,"code":161659,"language":305,"meta":32,"style":32},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[34,161661,161662,161682,161702],{"__ignoreMap":32},[167,161663,161664,161666,161668,161670,161672,161674,161676,161678,161680],{"class":169,"line":170},[167,161665,1168],{"class":731},[167,161667,11466],{"class":512},[167,161669,973],{"class":731},[167,161671,976],{"class":184},[167,161673,898],{"class":512},[167,161675,2418],{"class":184},[167,161677,14463],{"class":512},[167,161679,2494],{"class":184},[167,161681,984],{"class":512},[167,161683,161684,161686,161688,161690,161692,161694,161696,161698,161700],{"class":169,"line":191},[167,161685,967],{"class":731},[167,161687,11528],{"class":512},[167,161689,973],{"class":731},[167,161691,976],{"class":184},[167,161693,898],{"class":512},[167,161695,2418],{"class":184},[167,161697,14463],{"class":512},[167,161699,2494],{"class":184},[167,161701,984],{"class":512},[167,161703,161704,161706,161708,161710,161713,161715,161717,161719,161722,161724,161726,161728,161730],{"class":169,"line":205},[167,161705,34454],{"class":184},[167,161707,898],{"class":512},[167,161709,2262],{"class":731},[167,161711,161712],{"class":177},"\"i=",[167,161714,3096],{"class":184},[167,161716,2641],{"class":512},[167,161718,3145],{"class":184},[167,161720,161721],{"class":177},", j=",[167,161723,3096],{"class":184},[167,161725,2667],{"class":512},[167,161727,3145],{"class":184},[167,161729,2452],{"class":177},[167,161731,873],{"class":512},[19,161733,161734],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161736,161738],{"id":161737},"_410-九九乘法表","4.10 九九乘法表",[26,161740,161742],{"className":723,"code":161741,"language":305,"meta":32,"style":32},"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",[34,161743,161744,161764,161787,161839],{"__ignoreMap":32},[167,161745,161746,161748,161750,161752,161754,161756,161758,161760,161762],{"class":169,"line":170},[167,161747,1168],{"class":731},[167,161749,11466],{"class":512},[167,161751,973],{"class":731},[167,161753,976],{"class":184},[167,161755,898],{"class":512},[167,161757,2418],{"class":184},[167,161759,14463],{"class":512},[167,161761,2646],{"class":184},[167,161763,984],{"class":512},[167,161765,161766,161768,161770,161772,161774,161776,161778,161781,161783,161785],{"class":169,"line":191},[167,161767,967],{"class":731},[167,161769,11528],{"class":512},[167,161771,973],{"class":731},[167,161773,976],{"class":184},[167,161775,898],{"class":512},[167,161777,2418],{"class":184},[167,161779,161780],{"class":512},", i ",[167,161782,2681],{"class":731},[167,161784,27138],{"class":184},[167,161786,984],{"class":512},[167,161788,161789,161791,161793,161795,161797,161799,161801,161803,161805,161807,161809,161811,161813,161815,161817,161819,161821,161823,161825,161827,161829,161831,161833,161835,161837],{"class":169,"line":205},[167,161790,34454],{"class":184},[167,161792,898],{"class":512},[167,161794,2262],{"class":731},[167,161796,2452],{"class":177},[167,161798,3096],{"class":184},[167,161800,2667],{"class":512},[167,161802,3145],{"class":184},[167,161804,2655],{"class":177},[167,161806,3096],{"class":184},[167,161808,2641],{"class":512},[167,161810,3145],{"class":184},[167,161812,523],{"class":177},[167,161814,3096],{"class":184},[167,161816,102132],{"class":512},[167,161818,2655],{"class":731},[167,161820,5444],{"class":512},[167,161822,3145],{"class":184},[167,161824,2452],{"class":177},[167,161826,14463],{"class":512},[167,161828,47801],{"class":7246},[167,161830,523],{"class":731},[167,161832,2452],{"class":177},[167,161834,3299],{"class":184},[167,161836,2452],{"class":177},[167,161838,873],{"class":512},[167,161840,161841,161843],{"class":169,"line":219},[167,161842,895],{"class":184},[167,161844,4020],{"class":512},[19,161846,161847],{},"关键点：",[40,161849,161850,161856,161862,161868],{},[43,161851,161852,161853,161855],{},"外层 ",[34,161854,2641],{}," 控制行。",[43,161857,161858,161859,161861],{},"内层 ",[34,161860,2667],{}," 控制列。",[43,161863,161864,161865,161867],{},"每行结束后用 ",[34,161866,148063],{}," 换行。",[43,161869,161870,161873],{},[34,161871,161872],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161875,161877],{"id":161876},"_411-循环else","4.11 循环else",[19,161879,161880,161881,161883,161884,161886,161887,161889],{},"Python 的循环可以带 ",[34,161882,3755],{},"。当循环正常结束时执行 ",[34,161885,3755],{},"，如果被 ",[34,161888,4097],{}," 打断，则不执行。",[26,161891,161893],{"className":723,"code":161892,"language":305,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,161894,161895,161915,161927,161938,161942,161948],{"__ignoreMap":32},[167,161896,161897,161899,161901,161903,161905,161907,161909,161911,161913],{"class":169,"line":170},[167,161898,1168],{"class":731},[167,161900,11466],{"class":512},[167,161902,973],{"class":731},[167,161904,976],{"class":184},[167,161906,898],{"class":512},[167,161908,2418],{"class":184},[167,161910,14463],{"class":512},[167,161912,2544],{"class":184},[167,161914,984],{"class":512},[167,161916,161917,161919,161921,161923,161925],{"class":169,"line":191},[167,161918,5136],{"class":731},[167,161920,11466],{"class":512},[167,161922,4985],{"class":731},[167,161924,4082],{"class":184},[167,161926,857],{"class":512},[167,161928,161929,161931,161933,161936],{"class":169,"line":205},[167,161930,34454],{"class":184},[167,161932,898],{"class":512},[167,161934,161935],{"class":177},"\"找到了\"",[167,161937,873],{"class":512},[167,161939,161940],{"class":169,"line":219},[167,161941,33632],{"class":731},[167,161943,161944,161946],{"class":169,"line":230},[167,161945,3755],{"class":731},[167,161947,857],{"class":512},[167,161949,161950,161952,161954,161957],{"class":169,"line":241},[167,161951,895],{"class":184},[167,161953,898],{"class":512},[167,161955,161956],{"class":177},"\"没找到\"",[167,161958,873],{"class":512},[19,161960,161961],{},"常用于搜索。",[26,161963,161965],{"className":723,"code":161964,"language":305,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,161966,161967,161988,161997,162001,162013,162024,162034,162038,162044],{"__ignoreMap":32},[167,161968,161969,161972,161974,161976,161978,161980,161982,161984,161986],{"class":169,"line":170},[167,161970,161971],{"class":512},"names ",[167,161973,523],{"class":731},[167,161975,54221],{"class":512},[167,161977,151479],{"class":177},[167,161979,14463],{"class":512},[167,161981,152527],{"class":177},[167,161983,14463],{"class":512},[167,161985,161322],{"class":177},[167,161987,35249],{"class":512},[167,161989,161990,161992,161994],{"class":169,"line":191},[167,161991,113169],{"class":512},[167,161993,523],{"class":731},[167,161995,161996],{"class":177}," \"小李\"\n",[167,161998,161999],{"class":169,"line":205},[167,162000,741],{"emptyLinePlaceholder":740},[167,162002,162003,162005,162008,162010],{"class":169,"line":219},[167,162004,1168],{"class":731},[167,162006,162007],{"class":512}," name ",[167,162009,973],{"class":731},[167,162011,162012],{"class":512}," names:\n",[167,162014,162015,162017,162019,162021],{"class":169,"line":230},[167,162016,5136],{"class":731},[167,162018,162007],{"class":512},[167,162020,4985],{"class":731},[167,162022,162023],{"class":512}," target:\n",[167,162025,162026,162028,162030,162032],{"class":169,"line":241},[167,162027,34454],{"class":184},[167,162029,898],{"class":512},[167,162031,161935],{"class":177},[167,162033,873],{"class":512},[167,162035,162036],{"class":169,"line":261},[167,162037,33632],{"class":731},[167,162039,162040,162042],{"class":169,"line":773},[167,162041,3755],{"class":731},[167,162043,857],{"class":512},[167,162045,162046,162048,162050,162052],{"class":169,"line":779},[167,162047,895],{"class":184},[167,162049,898],{"class":512},[167,162051,161956],{"class":177},[167,162053,873],{"class":512},[14,162055,162057],{"id":162056},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162059,124883],{},[40,162061,162062,162065,162068],{},[43,162063,162064],{},"用户最多输入 3 次密码。",[43,162066,162067],{},"密码正确则登录成功。",[43,162069,162070],{},"3 次都错误则锁定账号。",[19,162072,12063],{},[26,162074,162076],{"className":723,"code":162075,"language":305,"meta":32,"style":32},"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",[34,162077,162078,162088,162092,162108,162124,162128,162140,162151,162155,162161,162186,162192],{"__ignoreMap":32},[167,162079,162080,162083,162085],{"class":169,"line":170},[167,162081,162082],{"class":512},"password ",[167,162084,523],{"class":731},[167,162086,162087],{"class":177}," \"123456\"\n",[167,162089,162090],{"class":169,"line":191},[167,162091,741],{"emptyLinePlaceholder":740},[167,162093,162094,162096,162098,162100,162102,162104,162106],{"class":169,"line":205},[167,162095,1168],{"class":731},[167,162097,11466],{"class":512},[167,162099,973],{"class":731},[167,162101,976],{"class":184},[167,162103,898],{"class":512},[167,162105,2281],{"class":184},[167,162107,984],{"class":512},[167,162109,162110,162113,162115,162117,162119,162122],{"class":169,"line":219},[167,162111,162112],{"class":512},"    user_password ",[167,162114,523],{"class":731},[167,162116,62594],{"class":184},[167,162118,898],{"class":512},[167,162120,162121],{"class":177},"\"请输入密码:\"",[167,162123,873],{"class":512},[167,162125,162126],{"class":169,"line":230},[167,162127,741],{"emptyLinePlaceholder":740},[167,162129,162130,162132,162135,162137],{"class":169,"line":241},[167,162131,5136],{"class":731},[167,162133,162134],{"class":512}," user_password ",[167,162136,4985],{"class":731},[167,162138,162139],{"class":512}," password:\n",[167,162141,162142,162144,162146,162149],{"class":169,"line":261},[167,162143,34454],{"class":184},[167,162145,898],{"class":512},[167,162147,162148],{"class":177},"\"登录成功\"",[167,162150,873],{"class":512},[167,162152,162153],{"class":169,"line":773},[167,162154,33632],{"class":731},[167,162156,162157,162159],{"class":169,"line":779},[167,162158,159613],{"class":731},[167,162160,857],{"class":512},[167,162162,162163,162165,162167,162169,162172,162175,162177,162179,162181,162184],{"class":169,"line":785},[167,162164,34454],{"class":184},[167,162166,898],{"class":512},[167,162168,2262],{"class":731},[167,162170,162171],{"class":177},"\"密码错误，还剩",[167,162173,162174],{"class":184},"{2",[167,162176,54266],{"class":731},[167,162178,5067],{"class":512},[167,162180,3145],{"class":184},[167,162182,162183],{"class":177},"次机会\"",[167,162185,873],{"class":512},[167,162187,162188,162190],{"class":169,"line":790},[167,162189,3755],{"class":731},[167,162191,857],{"class":512},[167,162193,162194,162196,162198,162201],{"class":169,"line":796},[167,162195,895],{"class":184},[167,162197,898],{"class":512},[167,162199,162200],{"class":177},"\"账号已锁定\"",[167,162202,873],{"class":512},[14,162204,162206],{"id":162205},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,162208,162210],{"className":723,"code":162209,"language":305,"meta":32,"style":32},"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",[34,162211,162212,162220,162231,162242,162253,162264,162275,162279,162294,162298,162310,162321,162333,162344,162356,162367,162379,162389,162393,162399],{"__ignoreMap":32},[167,162213,162214,162216,162218],{"class":169,"line":170},[167,162215,110254],{"class":731},[167,162217,97278],{"class":184},[167,162219,857],{"class":512},[167,162221,162222,162224,162226,162229],{"class":169,"line":191},[167,162223,895],{"class":184},[167,162225,898],{"class":512},[167,162227,162228],{"class":177},"\"====== 菜单 ======\"",[167,162230,873],{"class":512},[167,162232,162233,162235,162237,162240],{"class":169,"line":205},[167,162234,895],{"class":184},[167,162236,898],{"class":512},[167,162238,162239],{"class":177},"\"1. 查询余额\"",[167,162241,873],{"class":512},[167,162243,162244,162246,162248,162251],{"class":169,"line":219},[167,162245,895],{"class":184},[167,162247,898],{"class":512},[167,162249,162250],{"class":177},"\"2. 存款\"",[167,162252,873],{"class":512},[167,162254,162255,162257,162259,162262],{"class":169,"line":230},[167,162256,895],{"class":184},[167,162258,898],{"class":512},[167,162260,162261],{"class":177},"\"3. 取款\"",[167,162263,873],{"class":512},[167,162265,162266,162268,162270,162273],{"class":169,"line":241},[167,162267,895],{"class":184},[167,162269,898],{"class":512},[167,162271,162272],{"class":177},"\"0. 退出\"",[167,162274,873],{"class":512},[167,162276,162277],{"class":169,"line":261},[167,162278,741],{"emptyLinePlaceholder":740},[167,162280,162281,162284,162286,162288,162290,162292],{"class":169,"line":773},[167,162282,162283],{"class":512},"    choice ",[167,162285,523],{"class":731},[167,162287,62594],{"class":184},[167,162289,898],{"class":512},[167,162291,154664],{"class":177},[167,162293,873],{"class":512},[167,162295,162296],{"class":169,"line":779},[167,162297,741],{"emptyLinePlaceholder":740},[167,162299,162300,162302,162304,162306,162308],{"class":169,"line":785},[167,162301,5136],{"class":731},[167,162303,154677],{"class":512},[167,162305,4985],{"class":731},[167,162307,154682],{"class":177},[167,162309,857],{"class":512},[167,162311,162312,162314,162316,162319],{"class":169,"line":790},[167,162313,34454],{"class":184},[167,162315,898],{"class":512},[167,162317,162318],{"class":177},"\"余额为1000元\"",[167,162320,873],{"class":512},[167,162322,162323,162325,162327,162329,162331],{"class":169,"line":796},[167,162324,41293],{"class":731},[167,162326,154677],{"class":512},[167,162328,4985],{"class":731},[167,162330,154701],{"class":177},[167,162332,857],{"class":512},[167,162334,162335,162337,162339,162342],{"class":169,"line":802},[167,162336,34454],{"class":184},[167,162338,898],{"class":512},[167,162340,162341],{"class":177},"\"存款功能\"",[167,162343,873],{"class":512},[167,162345,162346,162348,162350,162352,162354],{"class":169,"line":808},[167,162347,41293],{"class":731},[167,162349,154677],{"class":512},[167,162351,4985],{"class":731},[167,162353,154719],{"class":177},[167,162355,857],{"class":512},[167,162357,162358,162360,162362,162365],{"class":169,"line":814},[167,162359,34454],{"class":184},[167,162361,898],{"class":512},[167,162363,162364],{"class":177},"\"取款功能\"",[167,162366,873],{"class":512},[167,162368,162369,162371,162373,162375,162377],{"class":169,"line":820},[167,162370,41293],{"class":731},[167,162372,154677],{"class":512},[167,162374,4985],{"class":731},[167,162376,154773],{"class":177},[167,162378,857],{"class":512},[167,162380,162381,162383,162385,162387],{"class":169,"line":826},[167,162382,34454],{"class":184},[167,162384,898],{"class":512},[167,162386,154784],{"class":177},[167,162388,873],{"class":512},[167,162390,162391],{"class":169,"line":832},[167,162392,33632],{"class":731},[167,162394,162395,162397],{"class":169,"line":837},[167,162396,159613],{"class":731},[167,162398,857],{"class":512},[167,162400,162401,162403,162405,162407],{"class":169,"line":842},[167,162402,34454],{"class":184},[167,162404,898],{"class":512},[167,162406,154805],{"class":177},[167,162408,873],{"class":512},[19,162410,162411,162412,162414,162415,423],{},"菜单类程序通常使用 ",[34,162413,161113],{},"，用户选择退出时 ",[34,162416,4097],{},[14,162418,162420],{"id":162419},"_414-易错点","4.14 易错点",[40,162422,162423,162428,162434,162442,162448],{},[43,162424,162425,162427],{},[34,162426,110254],{}," 循环必须更新控制变量。",[43,162429,162430,162433],{},[34,162431,162432],{},"range(1, 10)"," 不包含 10。",[43,162435,162436,162438,162439,162441],{},[34,162437,4097],{}," 结束整个循环，",[34,162440,156263],{}," 只跳过本轮。",[43,162443,162444,162445,162447],{},"嵌套循环中，",[34,162446,4097],{}," 只跳出当前所在的一层循环。",[43,162449,162450],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162452,162454],{"id":162453},"_415-本章练习","4.15 本章练习",[40,162456,162457,162460,162463,162466,162469],{},[43,162458,162459],{},"输出 1 到 100。",[43,162461,162462],{},"计算 1 到 100 的偶数和。",[43,162464,162465],{},"输出 100 以内能被 3 和 5 同时整除的数。",[43,162467,162468],{},"编写猜数字游戏，限制最多猜 7 次。",[43,162470,162471],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2113,162473,162474],{},"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":32,"searchDepth":191,"depth":191,"links":162476},[162477,162478,162479,162480,162481,162485,162486,162487,162488,162489,162490,162491,162492,162493,162494],{"id":160733,"depth":191,"text":160734},{"id":160763,"depth":191,"text":160764},{"id":160852,"depth":191,"text":160853},{"id":160946,"depth":191,"text":160947},{"id":161120,"depth":191,"text":161121,"children":162482},[162483,162484],{"id":161124,"depth":205,"text":161125},{"id":161188,"depth":205,"text":161189},{"id":161252,"depth":191,"text":161253},{"id":161347,"depth":191,"text":161348},{"id":161456,"depth":191,"text":161457},{"id":161652,"depth":191,"text":161653},{"id":161737,"depth":191,"text":161738},{"id":161876,"depth":191,"text":161877},{"id":162056,"depth":191,"text":162057},{"id":162205,"depth":191,"text":162206},{"id":162419,"depth":191,"text":162420},{"id":162453,"depth":191,"text":162454},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160725,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162501,"title":162502,"body":162503,"description":25403,"extension":2140,"meta":164508,"navigation":740,"path":164509,"seo":164510,"stem":164511,"__hash__":164512},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162504,"toc":164488},[162505,162508,162512,162515,162518,162532,162535,162549,162553,162555,162574,162576,162623,162625,162639,162643,162717,162720,162724,162727,162786,162794,162797,162850,162853,162857,162862,162917,162925,162975,162979,162984,162992,163091,163097,163101,163106,163109,163120,163161,163174,163178,163181,163217,163220,163233,163236,163296,163300,163304,163307,163358,163362,163365,163412,163418,163484,163487,163491,163494,163610,163613,163617,163620,163726,163730,163733,163771,163774,163816,163819,163879,163882,163886,164350,164353,164357,164384,164390,164451,164455,164485],[10,162506,162502],{"id":162507},"_5-函数基础",[14,162509,162511],{"id":162510},"_51-为什么需要函数","5.1 为什么需要函数",[19,162513,162514],{},"函数用于封装一段可以重复使用的代码。",[19,162516,162517],{},"不使用函数的问题：",[40,162519,162520,162523,162526,162529],{},[43,162521,162522],{},"重复代码多。",[43,162524,162525],{},"修改逻辑时容易漏改。",[43,162527,162528],{},"主流程不清晰。",[43,162530,162531],{},"程序越写越长，难以维护。",[19,162533,162534],{},"使用函数后的好处：",[40,162536,162537,162540,162543,162546],{},[43,162538,162539],{},"提高复用性。",[43,162541,162542],{},"提高可读性。",[43,162544,162545],{},"便于调试。",[43,162547,162548],{},"便于分工。",[14,162550,162552],{"id":162551},"_52-函数定义","5.2 函数定义",[19,162554,7213],{},[26,162556,162558],{"className":723,"code":162557,"language":305,"meta":32,"style":32},"def 函数名():\n    函数体\n",[34,162559,162560,162569],{"__ignoreMap":32},[167,162561,162562,162564,162567],{"class":169,"line":170},[167,162563,845],{"class":731},[167,162565,162566],{"class":173}," 函数名",[167,162568,33957],{"class":512},[167,162570,162571],{"class":169,"line":191},[167,162572,162573],{"class":512},"    函数体\n",[19,162575,17161],{},[26,162577,162579],{"className":723,"code":162578,"language":305,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[34,162580,162581,162590,162600,162610,162614,162618],{"__ignoreMap":32},[167,162582,162583,162585,162588],{"class":169,"line":170},[167,162584,845],{"class":731},[167,162586,162587],{"class":173}," say_hello",[167,162589,33957],{"class":512},[167,162591,162592,162594,162596,162598],{"class":169,"line":191},[167,162593,895],{"class":184},[167,162595,898],{"class":512},[167,162597,7874],{"class":177},[167,162599,873],{"class":512},[167,162601,162602,162604,162606,162608],{"class":169,"line":205},[167,162603,895],{"class":184},[167,162605,898],{"class":512},[167,162607,148230],{"class":177},[167,162609,873],{"class":512},[167,162611,162612],{"class":169,"line":219},[167,162613,741],{"emptyLinePlaceholder":740},[167,162615,162616],{"class":169,"line":230},[167,162617,741],{"emptyLinePlaceholder":740},[167,162619,162620],{"class":169,"line":241},[167,162621,162622],{"class":512},"say_hello()\n",[19,162624,11053],{},[40,162626,162627,162630,162633,162636],{},[43,162628,162629],{},"函数必须先定义，再调用。",[43,162631,162632],{},"函数名遵循变量命名规则。",[43,162634,162635],{},"函数体需要缩进。",[43,162637,162638],{},"函数不调用就不会执行。",[14,162640,162642],{"id":162641},"_53-函数调用","5.3 函数调用",[26,162644,162646],{"className":723,"code":162645,"language":305,"meta":32,"style":32},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[34,162647,162648,162657,162668,162679,162690,162700,162704,162708,162713],{"__ignoreMap":32},[167,162649,162650,162652,162655],{"class":169,"line":170},[167,162651,845],{"class":731},[167,162653,162654],{"class":173}," print_menu",[167,162656,33957],{"class":512},[167,162658,162659,162661,162663,162666],{"class":169,"line":191},[167,162660,895],{"class":184},[167,162662,898],{"class":512},[167,162664,162665],{"class":177},"\"1. 查询\"",[167,162667,873],{"class":512},[167,162669,162670,162672,162674,162677],{"class":169,"line":205},[167,162671,895],{"class":184},[167,162673,898],{"class":512},[167,162675,162676],{"class":177},"\"2. 添加\"",[167,162678,873],{"class":512},[167,162680,162681,162683,162685,162688],{"class":169,"line":219},[167,162682,895],{"class":184},[167,162684,898],{"class":512},[167,162686,162687],{"class":177},"\"3. 删除\"",[167,162689,873],{"class":512},[167,162691,162692,162694,162696,162698],{"class":169,"line":230},[167,162693,895],{"class":184},[167,162695,898],{"class":512},[167,162697,162272],{"class":177},[167,162699,873],{"class":512},[167,162701,162702],{"class":169,"line":241},[167,162703,741],{"emptyLinePlaceholder":740},[167,162705,162706],{"class":169,"line":261},[167,162707,741],{"emptyLinePlaceholder":740},[167,162709,162710],{"class":169,"line":773},[167,162711,162712],{"class":512},"print_menu()\n",[167,162714,162715],{"class":169,"line":779},[167,162716,162712],{"class":512},[19,162718,162719],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162721,162723],{"id":162722},"_54-参数","5.4 参数",[19,162725,162726],{},"参数用于向函数传递数据。",[26,162728,162730],{"className":723,"code":162729,"language":305,"meta":32,"style":32},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[34,162731,162732,162741,162761,162765,162769,162778],{"__ignoreMap":32},[167,162733,162734,162736,162738],{"class":169,"line":170},[167,162735,845],{"class":731},[167,162737,162587],{"class":173},[167,162739,162740],{"class":512},"(name):\n",[167,162742,162743,162745,162747,162749,162751,162753,162755,162757,162759],{"class":169,"line":191},[167,162744,895],{"class":184},[167,162746,898],{"class":512},[167,162748,2262],{"class":731},[167,162750,158645],{"class":177},[167,162752,3096],{"class":184},[167,162754,81797],{"class":512},[167,162756,3145],{"class":184},[167,162758,2452],{"class":177},[167,162760,873],{"class":512},[167,162762,162763],{"class":169,"line":205},[167,162764,741],{"emptyLinePlaceholder":740},[167,162766,162767],{"class":169,"line":219},[167,162768,741],{"emptyLinePlaceholder":740},[167,162770,162771,162774,162776],{"class":169,"line":230},[167,162772,162773],{"class":512},"say_hello(",[167,162775,151479],{"class":177},[167,162777,873],{"class":512},[167,162779,162780,162782,162784],{"class":169,"line":241},[167,162781,162773],{"class":512},[167,162783,152527],{"class":177},[167,162785,873],{"class":512},[19,162787,162788,162790,162791,162793],{},[34,162789,81797],{}," 是形参，",[34,162792,151479],{}," 是实参。",[19,162795,162796],{},"多个参数：",[26,162798,162800],{"className":723,"code":162799,"language":305,"meta":32,"style":32},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[34,162801,162802,162810,162823,162829,162833,162837],{"__ignoreMap":32},[167,162803,162804,162806,162808],{"class":169,"line":170},[167,162805,845],{"class":731},[167,162807,7239],{"class":173},[167,162809,152684],{"class":512},[167,162811,162812,162815,162817,162819,162821],{"class":169,"line":191},[167,162813,162814],{"class":512},"    result ",[167,162816,523],{"class":731},[167,162818,12897],{"class":512},[167,162820,2681],{"class":731},[167,162822,152695],{"class":512},[167,162824,162825,162827],{"class":169,"line":205},[167,162826,895],{"class":184},[167,162828,78573],{"class":512},[167,162830,162831],{"class":169,"line":219},[167,162832,741],{"emptyLinePlaceholder":740},[167,162834,162835],{"class":169,"line":230},[167,162836,741],{"emptyLinePlaceholder":740},[167,162838,162839,162842,162844,162846,162848],{"class":169,"line":241},[167,162840,162841],{"class":512},"add(",[167,162843,2646],{"class":184},[167,162845,14463],{"class":512},[167,162847,2900],{"class":184},[167,162849,873],{"class":512},[19,162851,162852],{},"调用时参数数量必须匹配。",[14,162854,162856],{"id":162855},"_55-返回值","5.5 返回值",[19,162858,162859,162861],{},[34,162860,19072],{}," 用于把函数内部的结果返回给调用者。",[26,162863,162865],{"className":723,"code":162864,"language":305,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[34,162866,162867,162875,162885,162889,162893,162911],{"__ignoreMap":32},[167,162868,162869,162871,162873],{"class":169,"line":170},[167,162870,845],{"class":731},[167,162872,7239],{"class":173},[167,162874,152684],{"class":512},[167,162876,162877,162879,162881,162883],{"class":169,"line":191},[167,162878,6122],{"class":731},[167,162880,12897],{"class":512},[167,162882,2681],{"class":731},[167,162884,152695],{"class":512},[167,162886,162887],{"class":169,"line":205},[167,162888,741],{"emptyLinePlaceholder":740},[167,162890,162891],{"class":169,"line":219},[167,162892,741],{"emptyLinePlaceholder":740},[167,162894,162895,162898,162900,162903,162905,162907,162909],{"class":169,"line":230},[167,162896,162897],{"class":512},"result ",[167,162899,523],{"class":731},[167,162901,162902],{"class":512}," add(",[167,162904,2646],{"class":184},[167,162906,14463],{"class":512},[167,162908,2900],{"class":184},[167,162910,873],{"class":512},[167,162912,162913,162915],{"class":169,"line":241},[167,162914,1606],{"class":184},[167,162916,78573],{"class":512},[19,162918,162919,162920,162922,162923,423],{},"如果函数没有写 ",[34,162921,19072],{},"，默认返回 ",[34,162924,854],{},[26,162926,162928],{"className":723,"code":162927,"language":305,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[34,162929,162930,162938,162948,162952,162956,162965],{"__ignoreMap":32},[167,162931,162932,162934,162936],{"class":169,"line":170},[167,162933,845],{"class":731},[167,162935,162587],{"class":173},[167,162937,33957],{"class":512},[167,162939,162940,162942,162944,162946],{"class":169,"line":191},[167,162941,895],{"class":184},[167,162943,898],{"class":512},[167,162945,7874],{"class":177},[167,162947,873],{"class":512},[167,162949,162950],{"class":169,"line":205},[167,162951,741],{"emptyLinePlaceholder":740},[167,162953,162954],{"class":169,"line":219},[167,162955,741],{"emptyLinePlaceholder":740},[167,162957,162958,162960,162962],{"class":169,"line":230},[167,162959,162897],{"class":512},[167,162961,523],{"class":731},[167,162963,162964],{"class":512}," say_hello()\n",[167,162966,162967,162969,162972],{"class":169,"line":241},[167,162968,1606],{"class":184},[167,162970,162971],{"class":512},"(result)  ",[167,162973,162974],{"class":2268},"# None\n",[14,162976,162978],{"id":162977},"_56-return的作用","5.6 return的作用",[19,162980,162981,162983],{},[34,162982,19072],{}," 有两个作用：",[40,162985,162986,162989],{},[43,162987,162988],{},"返回结果。",[43,162990,162991],{},"结束函数。",[26,162993,162995],{"className":723,"code":162994,"language":305,"meta":32,"style":32},"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",[34,162996,162997,163007,163019,163026,163030,163042,163049,163053,163060,163064,163068,163079],{"__ignoreMap":32},[167,162998,162999,163001,163004],{"class":169,"line":170},[167,163000,845],{"class":731},[167,163002,163003],{"class":173}," check_age",[167,163005,163006],{"class":512},"(age):\n",[167,163008,163009,163011,163013,163015,163017],{"class":169,"line":191},[167,163010,5136],{"class":731},[167,163012,17733],{"class":512},[167,163014,513],{"class":731},[167,163016,6125],{"class":184},[167,163018,857],{"class":512},[167,163020,163021,163023],{"class":169,"line":205},[167,163022,16779],{"class":731},[167,163024,163025],{"class":177}," \"年龄不合法\"\n",[167,163027,163028],{"class":169,"line":219},[167,163029,741],{"emptyLinePlaceholder":740},[167,163031,163032,163034,163036,163038,163040],{"class":169,"line":230},[167,163033,5136],{"class":731},[167,163035,17733],{"class":512},[167,163037,3764],{"class":731},[167,163039,157876],{"class":184},[167,163041,857],{"class":512},[167,163043,163044,163046],{"class":169,"line":241},[167,163045,16779],{"class":731},[167,163047,163048],{"class":177}," \"成年人\"\n",[167,163050,163051],{"class":169,"line":261},[167,163052,741],{"emptyLinePlaceholder":740},[167,163054,163055,163057],{"class":169,"line":773},[167,163056,6122],{"class":731},[167,163058,163059],{"class":177}," \"未成年人\"\n",[167,163061,163062],{"class":169,"line":779},[167,163063,741],{"emptyLinePlaceholder":740},[167,163065,163066],{"class":169,"line":785},[167,163067,741],{"emptyLinePlaceholder":740},[167,163069,163070,163072,163075,163077],{"class":169,"line":790},[167,163071,1606],{"class":184},[167,163073,163074],{"class":512},"(check_age(",[167,163076,2900],{"class":184},[167,163078,32505],{"class":512},[167,163080,163081,163083,163085,163087,163089],{"class":169,"line":796},[167,163082,1606],{"class":184},[167,163084,163074],{"class":512},[167,163086,2732],{"class":731},[167,163088,2418],{"class":184},[167,163090,32505],{"class":512},[19,163092,163093,163094,163096],{},"函数执行到 ",[34,163095,19072],{}," 后，后面的代码不会继续执行。",[14,163098,163100],{"id":163099},"_57-none","5.7 None",[19,163102,163103,163105],{},[34,163104,854],{}," 表示空值或没有结果。",[19,163107,163108],{},"常见使用场景：",[40,163110,163111,163114,163117],{},[43,163112,163113],{},"函数没有返回值。",[43,163115,163116],{},"变量暂时没有具体值。",[43,163118,163119],{},"表示查询不到结果。",[26,163121,163123],{"className":723,"code":163122,"language":305,"meta":32,"style":32},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[34,163124,163125,163133,163137,163150],{"__ignoreMap":32},[167,163126,163127,163129,163131],{"class":169,"line":170},[167,163128,162897],{"class":512},[167,163130,523],{"class":731},[167,163132,153763],{"class":184},[167,163134,163135],{"class":169,"line":191},[167,163136,741],{"emptyLinePlaceholder":740},[167,163138,163139,163141,163144,163146,163148],{"class":169,"line":205},[167,163140,1035],{"class":731},[167,163142,163143],{"class":512}," result ",[167,163145,40928],{"class":731},[167,163147,40934],{"class":184},[167,163149,857],{"class":512},[167,163151,163152,163154,163156,163159],{"class":169,"line":219},[167,163153,895],{"class":184},[167,163155,898],{"class":512},[167,163157,163158],{"class":177},"\"没有数据\"",[167,163160,873],{"class":512},[19,163162,163163,163164,163166,163167,163170,163171,423],{},"判断 ",[34,163165,854],{}," 推荐使用 ",[34,163168,163169],{},"is None","，不要写成 ",[34,163172,163173],{},"== None",[14,163175,163177],{"id":163176},"_58-函数文档字符串","5.8 函数文档字符串",[19,163179,163180],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,163182,163184],{"className":723,"code":163183,"language":305,"meta":32,"style":32},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[34,163185,163186,163196,163201],{"__ignoreMap":32},[167,163187,163188,163190,163193],{"class":169,"line":170},[167,163189,845],{"class":731},[167,163191,163192],{"class":173}," calculate_bmi",[167,163194,163195],{"class":512},"(weight, height):\n",[167,163197,163198],{"class":169,"line":191},[167,163199,163200],{"class":177},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[167,163202,163203,163205,163208,163210,163213,163215],{"class":169,"line":205},[167,163204,6122],{"class":731},[167,163206,163207],{"class":512}," weight ",[167,163209,2784],{"class":731},[167,163211,163212],{"class":512}," height ",[167,163214,12689],{"class":731},[167,163216,49723],{"class":184},[19,163218,163219],{},"查看说明：",[26,163221,163223],{"className":723,"code":163222,"language":305,"meta":32,"style":32},"help(calculate_bmi)\n",[34,163224,163225],{"__ignoreMap":32},[167,163226,163227,163230],{"class":169,"line":170},[167,163228,163229],{"class":184},"help",[167,163231,163232],{"class":512},"(calculate_bmi)\n",[19,163234,163235],{},"较完整的写法：",[26,163237,163239],{"className":723,"code":163238,"language":305,"meta":32,"style":32},"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",[34,163240,163241,163249,163254,163259,163263,163268,163273,163278,163282],{"__ignoreMap":32},[167,163242,163243,163245,163247],{"class":169,"line":170},[167,163244,845],{"class":731},[167,163246,163192],{"class":173},[167,163248,163195],{"class":512},[167,163250,163251],{"class":169,"line":191},[167,163252,163253],{"class":177},"    \"\"\"\n",[167,163255,163256],{"class":169,"line":205},[167,163257,163258],{"class":177},"    计算BMI。\n",[167,163260,163261],{"class":169,"line":219},[167,163262,741],{"emptyLinePlaceholder":740},[167,163264,163265],{"class":169,"line":230},[167,163266,163267],{"class":177},"    :param weight: 体重，单位kg\n",[167,163269,163270],{"class":169,"line":241},[167,163271,163272],{"class":177},"    :param height: 身高，单位m\n",[167,163274,163275],{"class":169,"line":261},[167,163276,163277],{"class":177},"    :return: BMI数值\n",[167,163279,163280],{"class":169,"line":773},[167,163281,163253],{"class":177},[167,163283,163284,163286,163288,163290,163292,163294],{"class":169,"line":779},[167,163285,6122],{"class":731},[167,163287,163207],{"class":512},[167,163289,2784],{"class":731},[167,163291,163212],{"class":512},[167,163293,12689],{"class":731},[167,163295,49723],{"class":184},[14,163297,163299],{"id":163298},"_59-变量作用域","5.9 变量作用域",[494,163301,163303],{"id":163302},"_591-局部变量","5.9.1 局部变量",[19,163305,163306],{},"在函数内部定义的变量，只能在函数内部使用。",[26,163308,163310],{"className":723,"code":163309,"language":305,"meta":32,"style":32},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[34,163311,163312,163321,163329,163335,163339,163343,163348],{"__ignoreMap":32},[167,163313,163314,163316,163319],{"class":169,"line":170},[167,163315,845],{"class":731},[167,163317,163318],{"class":173}," test",[167,163320,33957],{"class":512},[167,163322,163323,163325,163327],{"class":169,"line":191},[167,163324,47593],{"class":512},[167,163326,523],{"class":731},[167,163328,60417],{"class":184},[167,163330,163331,163333],{"class":169,"line":205},[167,163332,895],{"class":184},[167,163334,2225],{"class":512},[167,163336,163337],{"class":169,"line":219},[167,163338,741],{"emptyLinePlaceholder":740},[167,163340,163341],{"class":169,"line":230},[167,163342,741],{"emptyLinePlaceholder":740},[167,163344,163345],{"class":169,"line":241},[167,163346,163347],{"class":512},"test()\n",[167,163349,163350,163352,163355],{"class":169,"line":261},[167,163351,1606],{"class":184},[167,163353,163354],{"class":512},"(num)  ",[167,163356,163357],{"class":2268},"# 报错\n",[494,163359,163361],{"id":163360},"_592-全局变量","5.9.2 全局变量",[19,163363,163364],{},"在函数外部定义的变量，可以在函数内部读取。",[26,163366,163368],{"className":723,"code":163367,"language":305,"meta":32,"style":32},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[34,163369,163370,163378,163382,163386,163394,163400,163404,163408],{"__ignoreMap":32},[167,163371,163372,163374,163376],{"class":169,"line":170},[167,163373,148127],{"class":512},[167,163375,523],{"class":731},[167,163377,150944],{"class":177},[167,163379,163380],{"class":169,"line":191},[167,163381,741],{"emptyLinePlaceholder":740},[167,163383,163384],{"class":169,"line":205},[167,163385,741],{"emptyLinePlaceholder":740},[167,163387,163388,163390,163392],{"class":169,"line":219},[167,163389,845],{"class":731},[167,163391,162587],{"class":173},[167,163393,33957],{"class":512},[167,163395,163396,163398],{"class":169,"line":230},[167,163397,895],{"class":184},[167,163399,152251],{"class":512},[167,163401,163402],{"class":169,"line":241},[167,163403,741],{"emptyLinePlaceholder":740},[167,163405,163406],{"class":169,"line":261},[167,163407,741],{"emptyLinePlaceholder":740},[167,163409,163410],{"class":169,"line":773},[167,163411,162622],{"class":512},[19,163413,163414,163415,423],{},"如果要在函数内部修改全局变量，需要 ",[34,163416,163417],{},"global",[26,163419,163421],{"className":723,"code":163420,"language":305,"meta":32,"style":32},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[34,163422,163423,163431,163435,163439,163448,163456,163464,163468,163472,163477],{"__ignoreMap":32},[167,163424,163425,163427,163429],{"class":169,"line":170},[167,163426,148282],{"class":512},[167,163428,523],{"class":731},[167,163430,49333],{"class":184},[167,163432,163433],{"class":169,"line":191},[167,163434,741],{"emptyLinePlaceholder":740},[167,163436,163437],{"class":169,"line":205},[167,163438,741],{"emptyLinePlaceholder":740},[167,163440,163441,163443,163446],{"class":169,"line":219},[167,163442,845],{"class":731},[167,163444,163445],{"class":173}," add_count",[167,163447,33957],{"class":512},[167,163449,163450,163453],{"class":169,"line":230},[167,163451,163452],{"class":731},"    global",[167,163454,163455],{"class":512}," count\n",[167,163457,163458,163460,163462],{"class":169,"line":241},[167,163459,161024],{"class":512},[167,163461,11505],{"class":731},[167,163463,57688],{"class":184},[167,163465,163466],{"class":169,"line":261},[167,163467,741],{"emptyLinePlaceholder":740},[167,163469,163470],{"class":169,"line":773},[167,163471,741],{"emptyLinePlaceholder":740},[167,163473,163474],{"class":169,"line":779},[167,163475,163476],{"class":512},"add_count()\n",[167,163478,163479,163481],{"class":169,"line":785},[167,163480,1606],{"class":184},[167,163482,163483],{"class":512},"(count)\n",[19,163485,163486],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163488,163490],{"id":163489},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163492,163493],{},"一个函数中可以调用另一个函数。",[26,163495,163497],{"className":723,"code":163496,"language":305,"meta":32,"style":32},"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",[34,163498,163499,163508,163522,163526,163530,163539,163544,163564,163585,163589,163593,163597],{"__ignoreMap":32},[167,163500,163501,163503,163506],{"class":169,"line":170},[167,163502,845],{"class":731},[167,163504,163505],{"class":173}," print_line",[167,163507,33957],{"class":512},[167,163509,163510,163512,163514,163516,163518,163520],{"class":169,"line":191},[167,163511,895],{"class":184},[167,163513,898],{"class":512},[167,163515,34486],{"class":177},[167,163517,8548],{"class":731},[167,163519,80653],{"class":184},[167,163521,873],{"class":512},[167,163523,163524],{"class":169,"line":205},[167,163525,741],{"emptyLinePlaceholder":740},[167,163527,163528],{"class":169,"line":219},[167,163529,741],{"emptyLinePlaceholder":740},[167,163531,163532,163534,163537],{"class":169,"line":230},[167,163533,845],{"class":731},[167,163535,163536],{"class":173}," print_info",[167,163538,150966],{"class":512},[167,163540,163541],{"class":169,"line":241},[167,163542,163543],{"class":512},"    print_line()\n",[167,163545,163546,163548,163550,163552,163554,163556,163558,163560,163562],{"class":169,"line":261},[167,163547,895],{"class":184},[167,163549,898],{"class":512},[167,163551,2262],{"class":731},[167,163553,158273],{"class":177},[167,163555,3096],{"class":184},[167,163557,81797],{"class":512},[167,163559,3145],{"class":184},[167,163561,2452],{"class":177},[167,163563,873],{"class":512},[167,163565,163566,163568,163570,163572,163575,163577,163579,163581,163583],{"class":169,"line":773},[167,163567,895],{"class":184},[167,163569,898],{"class":512},[167,163571,2262],{"class":731},[167,163573,163574],{"class":177},"\"年龄:",[167,163576,3096],{"class":184},[167,163578,72209],{"class":512},[167,163580,3145],{"class":184},[167,163582,2452],{"class":177},[167,163584,873],{"class":512},[167,163586,163587],{"class":169,"line":779},[167,163588,163543],{"class":512},[167,163590,163591],{"class":169,"line":785},[167,163592,741],{"emptyLinePlaceholder":740},[167,163594,163595],{"class":169,"line":790},[167,163596,741],{"emptyLinePlaceholder":740},[167,163598,163599,163602,163604,163606,163608],{"class":169,"line":796},[167,163600,163601],{"class":512},"print_info(",[167,163603,151479],{"class":177},[167,163605,14463],{"class":512},[167,163607,2850],{"class":184},[167,163609,873],{"class":512},[19,163611,163612],{},"这种方式可以把小功能组合成大功能。",[14,163614,163616],{"id":163615},"_511-参数检查","5.11 参数检查",[19,163618,163619],{},"函数内部可以检查参数是否合法。",[26,163621,163623],{"className":723,"code":163622,"language":305,"meta":32,"style":32},"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",[34,163624,163625,163634,163646,163652,163662,163666,163670,163687,163691,163703,163714,163720],{"__ignoreMap":32},[167,163626,163627,163629,163632],{"class":169,"line":170},[167,163628,845],{"class":731},[167,163630,163631],{"class":173}," divide",[167,163633,152684],{"class":512},[167,163635,163636,163638,163640,163642,163644],{"class":169,"line":191},[167,163637,5136],{"class":731},[167,163639,12910],{"class":512},[167,163641,4985],{"class":731},[167,163643,6125],{"class":184},[167,163645,857],{"class":512},[167,163647,163648,163650],{"class":169,"line":205},[167,163649,16779],{"class":731},[167,163651,153763],{"class":184},[167,163653,163654,163656,163658,163660],{"class":169,"line":219},[167,163655,6122],{"class":731},[167,163657,12897],{"class":512},[167,163659,2784],{"class":731},[167,163661,152695],{"class":512},[167,163663,163664],{"class":169,"line":230},[167,163665,741],{"emptyLinePlaceholder":740},[167,163667,163668],{"class":169,"line":241},[167,163669,741],{"emptyLinePlaceholder":740},[167,163671,163672,163674,163676,163679,163681,163683,163685],{"class":169,"line":261},[167,163673,162897],{"class":512},[167,163675,523],{"class":731},[167,163677,163678],{"class":512}," divide(",[167,163680,2646],{"class":184},[167,163682,14463],{"class":512},[167,163684,1154],{"class":184},[167,163686,873],{"class":512},[167,163688,163689],{"class":169,"line":773},[167,163690,741],{"emptyLinePlaceholder":740},[167,163692,163693,163695,163697,163699,163701],{"class":169,"line":779},[167,163694,1035],{"class":731},[167,163696,163143],{"class":512},[167,163698,40928],{"class":731},[167,163700,40934],{"class":184},[167,163702,857],{"class":512},[167,163704,163705,163707,163709,163712],{"class":169,"line":785},[167,163706,895],{"class":184},[167,163708,898],{"class":512},[167,163710,163711],{"class":177},"\"除数不能为0\"",[167,163713,873],{"class":512},[167,163715,163716,163718],{"class":169,"line":790},[167,163717,3755],{"class":731},[167,163719,857],{"class":512},[167,163721,163722,163724],{"class":169,"line":796},[167,163723,895],{"class":184},[167,163725,78573],{"class":512},[14,163727,163729],{"id":163728},"_512-类型提示","5.12 类型提示",[19,163731,163732],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,163734,163736],{"className":723,"code":163735,"language":305,"meta":32,"style":32},"def add(a: int, b: int) -> int:\n    return a + b\n",[34,163737,163738,163761],{"__ignoreMap":32},[167,163739,163740,163742,163744,163747,163749,163752,163754,163757,163759],{"class":169,"line":170},[167,163741,845],{"class":731},[167,163743,7239],{"class":173},[167,163745,163746],{"class":512},"(a: ",[167,163748,2216],{"class":184},[167,163750,163751],{"class":512},", b: ",[167,163753,2216],{"class":184},[167,163755,163756],{"class":512},") -> ",[167,163758,2216],{"class":184},[167,163760,857],{"class":512},[167,163762,163763,163765,163767,163769],{"class":169,"line":191},[167,163764,6122],{"class":731},[167,163766,12897],{"class":512},[167,163768,2681],{"class":731},[167,163770,152695],{"class":512},[19,163772,163773],{},"字符串参数：",[26,163775,163777],{"className":723,"code":163776,"language":305,"meta":32,"style":32},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[34,163778,163779,163796],{"__ignoreMap":32},[167,163780,163781,163783,163785,163788,163790,163792,163794],{"class":169,"line":170},[167,163782,845],{"class":731},[167,163784,162587],{"class":173},[167,163786,163787],{"class":512},"(name: ",[167,163789,3368],{"class":184},[167,163791,163756],{"class":512},[167,163793,854],{"class":184},[167,163795,857],{"class":512},[167,163797,163798,163800,163802,163804,163806,163808,163810,163812,163814],{"class":169,"line":191},[167,163799,895],{"class":184},[167,163801,898],{"class":512},[167,163803,2262],{"class":731},[167,163805,158645],{"class":177},[167,163807,3096],{"class":184},[167,163809,81797],{"class":512},[167,163811,3145],{"class":184},[167,163813,2452],{"class":177},[167,163815,873],{"class":512},[19,163817,163818],{},"列表参数：",[26,163820,163822],{"className":723,"code":163821,"language":305,"meta":32,"style":32},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[34,163823,163824,163843,163851,163863,163872],{"__ignoreMap":32},[167,163825,163826,163828,163831,163834,163836,163839,163841],{"class":169,"line":170},[167,163827,845],{"class":731},[167,163829,163830],{"class":173}," get_total",[167,163832,163833],{"class":512},"(numbers: list[",[167,163835,2216],{"class":184},[167,163837,163838],{"class":512},"]) -> ",[167,163840,2216],{"class":184},[167,163842,857],{"class":512},[167,163844,163845,163847,163849],{"class":169,"line":191},[167,163846,160898],{"class":512},[167,163848,523],{"class":731},[167,163850,49333],{"class":184},[167,163852,163853,163855,163858,163860],{"class":169,"line":205},[167,163854,967],{"class":731},[167,163856,163857],{"class":512}," number ",[167,163859,973],{"class":731},[167,163861,163862],{"class":512}," numbers:\n",[167,163864,163865,163867,163869],{"class":169,"line":219},[167,163866,161573],{"class":512},[167,163868,11505],{"class":731},[167,163870,163871],{"class":512}," number\n",[167,163873,163874,163876],{"class":169,"line":230},[167,163875,6122],{"class":731},[167,163877,163878],{"class":512}," total\n",[19,163880,163881],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163883,163885],{"id":163884},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,163887,163889],{"className":723,"code":163888,"language":305,"meta":32,"style":32},"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",[34,163890,163891,163901,163905,163909,163917,163928,163938,163948,163958,163968,163972,163976,163985,164007,164011,164015,164024,164030,164050,164062,164073,164077,164086,164097,164102,164106,164110,164119,164125,164144,164156,164166,164170,164181,164191,164195,164203,164214,164218,164222,164226,164234,164239,164253,164257,164269,164274,164286,164291,164303,164308,164320,164330,164334,164340],{"__ignoreMap":32},[167,163892,163893,163896,163898],{"class":169,"line":170},[167,163894,163895],{"class":512},"balance ",[167,163897,523],{"class":731},[167,163899,163900],{"class":184}," 1000\n",[167,163902,163903],{"class":169,"line":191},[167,163904,741],{"emptyLinePlaceholder":740},[167,163906,163907],{"class":169,"line":205},[167,163908,741],{"emptyLinePlaceholder":740},[167,163910,163911,163913,163915],{"class":169,"line":219},[167,163912,845],{"class":731},[167,163914,153624],{"class":173},[167,163916,33957],{"class":512},[167,163918,163919,163921,163923,163926],{"class":169,"line":230},[167,163920,895],{"class":184},[167,163922,898],{"class":512},[167,163924,163925],{"class":177},"\"====== ATM ======\"",[167,163927,873],{"class":512},[167,163929,163930,163932,163934,163936],{"class":169,"line":241},[167,163931,895],{"class":184},[167,163933,898],{"class":512},[167,163935,162239],{"class":177},[167,163937,873],{"class":512},[167,163939,163940,163942,163944,163946],{"class":169,"line":261},[167,163941,895],{"class":184},[167,163943,898],{"class":512},[167,163945,162250],{"class":177},[167,163947,873],{"class":512},[167,163949,163950,163952,163954,163956],{"class":169,"line":773},[167,163951,895],{"class":184},[167,163953,898],{"class":512},[167,163955,162261],{"class":177},[167,163957,873],{"class":512},[167,163959,163960,163962,163964,163966],{"class":169,"line":779},[167,163961,895],{"class":184},[167,163963,898],{"class":512},[167,163965,162272],{"class":177},[167,163967,873],{"class":512},[167,163969,163970],{"class":169,"line":785},[167,163971,741],{"emptyLinePlaceholder":740},[167,163973,163974],{"class":169,"line":790},[167,163975,741],{"emptyLinePlaceholder":740},[167,163977,163978,163980,163983],{"class":169,"line":796},[167,163979,845],{"class":731},[167,163981,163982],{"class":173}," show_balance",[167,163984,33957],{"class":512},[167,163986,163987,163989,163991,163993,163996,163998,164001,164003,164005],{"class":169,"line":802},[167,163988,895],{"class":184},[167,163990,898],{"class":512},[167,163992,2262],{"class":731},[167,163994,163995],{"class":177},"\"当前余额:",[167,163997,3096],{"class":184},[167,163999,164000],{"class":512},"balance",[167,164002,3145],{"class":184},[167,164004,158603],{"class":177},[167,164006,873],{"class":512},[167,164008,164009],{"class":169,"line":808},[167,164010,741],{"emptyLinePlaceholder":740},[167,164012,164013],{"class":169,"line":814},[167,164014,741],{"emptyLinePlaceholder":740},[167,164016,164017,164019,164022],{"class":169,"line":820},[167,164018,845],{"class":731},[167,164020,164021],{"class":173}," save_money",[167,164023,33957],{"class":512},[167,164025,164026,164028],{"class":169,"line":826},[167,164027,163452],{"class":731},[167,164029,151690],{"class":512},[167,164031,164032,164035,164037,164039,164041,164043,164045,164048],{"class":169,"line":832},[167,164033,164034],{"class":512},"    money ",[167,164036,523],{"class":731},[167,164038,111388],{"class":184},[167,164040,898],{"class":512},[167,164042,55812],{"class":184},[167,164044,898],{"class":512},[167,164046,164047],{"class":177},"\"请输入存款金额:\"",[167,164049,32505],{"class":512},[167,164051,164052,164054,164056,164058,164060],{"class":169,"line":837},[167,164053,5136],{"class":731},[167,164055,151733],{"class":512},[167,164057,3653],{"class":731},[167,164059,6125],{"class":184},[167,164061,857],{"class":512},[167,164063,164064,164066,164068,164071],{"class":169,"line":842},[167,164065,34454],{"class":184},[167,164067,898],{"class":512},[167,164069,164070],{"class":177},"\"金额必须大于0\"",[167,164072,873],{"class":512},[167,164074,164075],{"class":169,"line":860},[167,164076,153952],{"class":731},[167,164078,164079,164082,164084],{"class":169,"line":876},[167,164080,164081],{"class":512},"    balance ",[167,164083,11505],{"class":731},[167,164085,151766],{"class":512},[167,164087,164088,164090,164092,164095],{"class":169,"line":887},[167,164089,895],{"class":184},[167,164091,898],{"class":512},[167,164093,164094],{"class":177},"\"存款成功\"",[167,164096,873],{"class":512},[167,164098,164099],{"class":169,"line":892},[167,164100,164101],{"class":512},"    show_balance()\n",[167,164103,164104],{"class":169,"line":907},[167,164105,741],{"emptyLinePlaceholder":740},[167,164107,164108],{"class":169,"line":920},[167,164109,741],{"emptyLinePlaceholder":740},[167,164111,164112,164114,164117],{"class":169,"line":933},[167,164113,845],{"class":731},[167,164115,164116],{"class":173}," withdraw_money",[167,164118,33957],{"class":512},[167,164120,164121,164123],{"class":169,"line":946},[167,164122,163452],{"class":731},[167,164124,151690],{"class":512},[167,164126,164127,164129,164131,164133,164135,164137,164139,164142],{"class":169,"line":959},[167,164128,164034],{"class":512},[167,164130,523],{"class":731},[167,164132,111388],{"class":184},[167,164134,898],{"class":512},[167,164136,55812],{"class":184},[167,164138,898],{"class":512},[167,164140,164141],{"class":177},"\"请输入取款金额:\"",[167,164143,32505],{"class":512},[167,164145,164146,164148,164150,164152,164154],{"class":169,"line":964},[167,164147,5136],{"class":731},[167,164149,151733],{"class":512},[167,164151,3653],{"class":731},[167,164153,6125],{"class":184},[167,164155,857],{"class":512},[167,164157,164158,164160,164162,164164],{"class":169,"line":987},[167,164159,34454],{"class":184},[167,164161,898],{"class":512},[167,164163,164070],{"class":177},[167,164165,873],{"class":512},[167,164167,164168],{"class":169,"line":993},[167,164169,153952],{"class":731},[167,164171,164172,164174,164176,164178],{"class":169,"line":998},[167,164173,5136],{"class":731},[167,164175,151733],{"class":512},[167,164177,3159],{"class":731},[167,164179,164180],{"class":512}," balance:\n",[167,164182,164183,164185,164187,164189],{"class":169,"line":1010},[167,164184,34454],{"class":184},[167,164186,898],{"class":512},[167,164188,151828],{"class":177},[167,164190,873],{"class":512},[167,164192,164193],{"class":169,"line":1022},[167,164194,153952],{"class":731},[167,164196,164197,164199,164201],{"class":169,"line":1027},[167,164198,164081],{"class":512},[167,164200,151843],{"class":731},[167,164202,151766],{"class":512},[167,164204,164205,164207,164209,164212],{"class":169,"line":1032},[167,164206,895],{"class":184},[167,164208,898],{"class":512},[167,164210,164211],{"class":177},"\"取款成功\"",[167,164213,873],{"class":512},[167,164215,164216],{"class":169,"line":1049},[167,164217,164101],{"class":512},[167,164219,164220],{"class":169,"line":10005},[167,164221,741],{"emptyLinePlaceholder":740},[167,164223,164224],{"class":169,"line":10011},[167,164225,741],{"emptyLinePlaceholder":740},[167,164227,164228,164230,164232],{"class":169,"line":10038},[167,164229,110254],{"class":731},[167,164231,97278],{"class":184},[167,164233,857],{"class":512},[167,164235,164236],{"class":169,"line":10043},[167,164237,164238],{"class":512},"    show_menu()\n",[167,164240,164241,164243,164245,164247,164249,164251],{"class":169,"line":10049},[167,164242,162283],{"class":512},[167,164244,523],{"class":731},[167,164246,62594],{"class":184},[167,164248,898],{"class":512},[167,164250,154664],{"class":177},[167,164252,873],{"class":512},[167,164254,164255],{"class":169,"line":10061},[167,164256,741],{"emptyLinePlaceholder":740},[167,164258,164259,164261,164263,164265,164267],{"class":169,"line":10073},[167,164260,5136],{"class":731},[167,164262,154677],{"class":512},[167,164264,4985],{"class":731},[167,164266,154682],{"class":177},[167,164268,857],{"class":512},[167,164270,164271],{"class":169,"line":10085},[167,164272,164273],{"class":512},"        show_balance()\n",[167,164275,164276,164278,164280,164282,164284],{"class":169,"line":11744},[167,164277,41293],{"class":731},[167,164279,154677],{"class":512},[167,164281,4985],{"class":731},[167,164283,154701],{"class":177},[167,164285,857],{"class":512},[167,164287,164288],{"class":169,"line":11769},[167,164289,164290],{"class":512},"        save_money()\n",[167,164292,164293,164295,164297,164299,164301],{"class":169,"line":11792},[167,164294,41293],{"class":731},[167,164296,154677],{"class":512},[167,164298,4985],{"class":731},[167,164300,154719],{"class":177},[167,164302,857],{"class":512},[167,164304,164305],{"class":169,"line":11816},[167,164306,164307],{"class":512},"        withdraw_money()\n",[167,164309,164310,164312,164314,164316,164318],{"class":169,"line":11821},[167,164311,41293],{"class":731},[167,164313,154677],{"class":512},[167,164315,4985],{"class":731},[167,164317,154773],{"class":177},[167,164319,857],{"class":512},[167,164321,164322,164324,164326,164328],{"class":169,"line":11826},[167,164323,34454],{"class":184},[167,164325,898],{"class":512},[167,164327,154784],{"class":177},[167,164329,873],{"class":512},[167,164331,164332],{"class":169,"line":11831},[167,164333,33632],{"class":731},[167,164335,164336,164338],{"class":169,"line":11840},[167,164337,159613],{"class":731},[167,164339,857],{"class":512},[167,164341,164342,164344,164346,164348],{"class":169,"line":11845},[167,164343,34454],{"class":184},[167,164345,898],{"class":512},[167,164347,154805],{"class":177},[167,164349,873],{"class":512},[19,164351,164352],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164354,164356],{"id":164355},"_514-易错点","5.14 易错点",[40,164358,164359,164362,164365,164370,164375,164378],{},[43,164360,164361],{},"函数定义后必须调用才会执行。",[43,164363,164364],{},"函数名后面有括号才是调用。",[43,164366,164367,164369],{},[34,164368,19072],{}," 后面的代码不会执行。",[43,164371,164372,164373,423],{},"没有返回值的函数默认返回 ",[34,164374,854],{},[43,164376,164377],{},"局部变量不能在函数外部访问。",[43,164379,164380,164381,164383],{},"不要滥用 ",[34,164382,163417],{},"，更好的方式是让函数返回新值。",[19,164385,164386,164387,164389],{},"例如不用 ",[34,164388,163417],{}," 改写存款：",[26,164391,164393],{"className":723,"code":164392,"language":305,"meta":32,"style":32},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[34,164394,164395,164404,164415,164419,164423,164431,164444],{"__ignoreMap":32},[167,164396,164397,164399,164401],{"class":169,"line":170},[167,164398,845],{"class":731},[167,164400,164021],{"class":173},[167,164402,164403],{"class":512},"(balance, money):\n",[167,164405,164406,164408,164411,164413],{"class":169,"line":191},[167,164407,6122],{"class":731},[167,164409,164410],{"class":512}," balance ",[167,164412,2681],{"class":731},[167,164414,151766],{"class":512},[167,164416,164417],{"class":169,"line":205},[167,164418,741],{"emptyLinePlaceholder":740},[167,164420,164421],{"class":169,"line":219},[167,164422,741],{"emptyLinePlaceholder":740},[167,164424,164425,164427,164429],{"class":169,"line":230},[167,164426,163895],{"class":512},[167,164428,523],{"class":731},[167,164430,163900],{"class":184},[167,164432,164433,164435,164437,164440,164442],{"class":169,"line":241},[167,164434,163895],{"class":512},[167,164436,523],{"class":731},[167,164438,164439],{"class":512}," save_money(balance, ",[167,164441,3776],{"class":184},[167,164443,873],{"class":512},[167,164445,164446,164448],{"class":169,"line":261},[167,164447,1606],{"class":184},[167,164449,164450],{"class":512},"(balance)\n",[14,164452,164454],{"id":164453},"_515-本章练习","5.15 本章练习",[40,164456,164457,164464,164470,164476,164482],{},[43,164458,164459,164460,164463],{},"定义函数 ",[34,164461,164462],{},"print_student(name, age)","，输出学生信息。",[43,164465,164459,164466,164469],{},[34,164467,164468],{},"get_max(a, b, c)","，返回三个数中的最大值。",[43,164471,164459,164472,164475],{},[34,164473,164474],{},"is_even(num)","，判断一个数是否为偶数。",[43,164477,164459,164478,164481],{},[34,164479,164480],{},"calculate_bmi(weight, height)","，返回 BMI。",[43,164483,164484],{},"把第 4 章的菜单程序拆分成多个函数。",[2113,164486,164487],{},"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":32,"searchDepth":191,"depth":191,"links":164489},[164490,164491,164492,164493,164494,164495,164496,164497,164498,164502,164503,164504,164505,164506,164507],{"id":162510,"depth":191,"text":162511},{"id":162551,"depth":191,"text":162552},{"id":162641,"depth":191,"text":162642},{"id":162722,"depth":191,"text":162723},{"id":162855,"depth":191,"text":162856},{"id":162977,"depth":191,"text":162978},{"id":163099,"depth":191,"text":163100},{"id":163176,"depth":191,"text":163177},{"id":163298,"depth":191,"text":163299,"children":164499},[164500,164501],{"id":163302,"depth":205,"text":163303},{"id":163360,"depth":205,"text":163361},{"id":163489,"depth":191,"text":163490},{"id":163615,"depth":191,"text":163616},{"id":163728,"depth":191,"text":163729},{"id":163884,"depth":191,"text":163885},{"id":164355,"depth":191,"text":164356},{"id":164453,"depth":191,"text":164454},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162502,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164514,"title":164515,"body":164516,"description":25403,"extension":2140,"meta":167560,"navigation":740,"path":167561,"seo":167562,"stem":167563,"__hash__":167564},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164517,"toc":167541},[164518,164521,164525,164528,164531,164635,164638,164642,164645,164725,164728,164732,164735,164795,164798,164834,164837,164852,164856,164929,164932,164987,164990,165060,165063,165147,165157,165215,165219,165264,165267,165293,165296,165402,165406,165409,165451,165454,165518,165521,165525,165528,165589,165592,165622,165625,165663,165667,165670,165679,165682,165806,165809,165850,165854,165857,165868,165908,165911,165926,165931,165934,166001,166004,166094,166098,166101,166149,166152,166179,166181,166211,166214,166234,166237,166268,166271,166304,166308,166311,166335,166338,166362,166365,166389,166393,166396,166526,166529,166609,166612,166687,166691,166694,166744,166747,166789,166792,166816,166818,166842,166845,166900,166903,166969,166973,166976,166979,167017,167020,167073,167076,167122,167125,167158,167161,167165,167484,167488,167517,167521,167538],[10,164519,164515],{"id":164520},"_6-数据容器",[14,164522,164524],{"id":164523},"_61-什么是数据容器","6.1 什么是数据容器",[19,164526,164527],{},"数据容器用于一次保存多个数据。",[19,164529,164530],{},"常见容器：",[68,164532,164533,164550],{},[71,164534,164535],{},[74,164536,164537,164539,164542,164545,164548],{},[77,164538,27791],{},[77,164540,164541],{},"是否有序",[77,164543,164544],{},"是否可变",[77,164546,164547],{},"是否允许重复",[77,164549,29509],{},[85,164551,164552,164570,164586,164601,164618],{},[74,164553,164554,164557,164560,164563,164566],{},[90,164555,164556],{},"list列表",[90,164558,164559],{},"有序",[90,164561,164562],{},"可变",[90,164564,164565],{},"允许",[90,164567,164568],{},[34,164569,156848],{},[74,164571,164572,164575,164577,164580,164582],{},[90,164573,164574],{},"tuple元组",[90,164576,164559],{},[90,164578,164579],{},"不可变",[90,164581,164565],{},[90,164583,164584],{},[34,164585,156861],{},[74,164587,164588,164591,164593,164595,164597],{},[90,164589,164590],{},"str字符串",[90,164592,164559],{},[90,164594,164579],{},[90,164596,164565],{},[90,164598,164599],{},[34,164600,157471],{},[74,164602,164603,164606,164609,164611,164614],{},[90,164604,164605],{},"set集合",[90,164607,164608],{},"无序",[90,164610,164562],{},[90,164612,164613],{},"不允许",[90,164615,164616],{},[34,164617,156886],{},[74,164619,164620,164623,164625,164627,164630],{},[90,164621,164622],{},"dict字典",[90,164624,164559],{},[90,164626,164562],{},[90,164628,164629],{},"key不允许重复",[90,164631,164632],{},[34,164633,164634],{},"{\"name\": \"小明\"}",[19,164636,164637],{},"Python 3.7 之后，字典保持插入顺序。",[14,164639,164641],{"id":164640},"_62-列表list","6.2 列表list",[19,164643,164644],{},"列表用于保存一组有顺序的数据。",[26,164646,164648],{"className":723,"code":164647,"language":305,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[34,164649,164650,164670,164695,164716],{"__ignoreMap":32},[167,164651,164652,164654,164656,164658,164660,164662,164664,164666,164668],{"class":169,"line":170},[167,164653,161971],{"class":512},[167,164655,523],{"class":731},[167,164657,54221],{"class":512},[167,164659,151479],{"class":177},[167,164661,14463],{"class":512},[167,164663,152527],{"class":177},[167,164665,14463],{"class":512},[167,164667,161322],{"class":177},[167,164669,35249],{"class":512},[167,164671,164672,164675,164677,164679,164681,164683,164685,164687,164689,164691,164693],{"class":169,"line":191},[167,164673,164674],{"class":512},"numbers ",[167,164676,523],{"class":731},[167,164678,54221],{"class":512},[167,164680,2418],{"class":184},[167,164682,14463],{"class":512},[167,164684,2287],{"class":184},[167,164686,14463],{"class":512},[167,164688,2281],{"class":184},[167,164690,14463],{"class":512},[167,164692,2494],{"class":184},[167,164694,35249],{"class":512},[167,164696,164697,164700,164702,164704,164706,164708,164710,164712,164714],{"class":169,"line":205},[167,164698,164699],{"class":512},"mixed ",[167,164701,523],{"class":731},[167,164703,54221],{"class":512},[167,164705,151479],{"class":177},[167,164707,14463],{"class":512},[167,164709,2850],{"class":184},[167,164711,14463],{"class":512},[167,164713,33481],{"class":184},[167,164715,35249],{"class":512},[167,164717,164718,164721,164723],{"class":169,"line":219},[167,164719,164720],{"class":512},"empty ",[167,164722,523],{"class":731},[167,164724,53834],{"class":512},[19,164726,164727],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164729,164731],{"id":164730},"_63-列表索引","6.3 列表索引",[19,164733,164734],{},"正向索引从 0 开始：",[26,164736,164738],{"className":723,"code":164737,"language":305,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[34,164739,164740,164760,164764,164775,164785],{"__ignoreMap":32},[167,164741,164742,164744,164746,164748,164750,164752,164754,164756,164758],{"class":169,"line":170},[167,164743,161971],{"class":512},[167,164745,523],{"class":731},[167,164747,54221],{"class":512},[167,164749,151479],{"class":177},[167,164751,14463],{"class":512},[167,164753,152527],{"class":177},[167,164755,14463],{"class":512},[167,164757,161322],{"class":177},[167,164759,35249],{"class":512},[167,164761,164762],{"class":169,"line":191},[167,164763,741],{"emptyLinePlaceholder":740},[167,164765,164766,164768,164771,164773],{"class":169,"line":205},[167,164767,1606],{"class":184},[167,164769,164770],{"class":512},"(names[",[167,164772,1154],{"class":184},[167,164774,6689],{"class":512},[167,164776,164777,164779,164781,164783],{"class":169,"line":219},[167,164778,1606],{"class":184},[167,164780,164770],{"class":512},[167,164782,2418],{"class":184},[167,164784,6689],{"class":512},[167,164786,164787,164789,164791,164793],{"class":169,"line":230},[167,164788,1606],{"class":184},[167,164790,164770],{"class":512},[167,164792,2287],{"class":184},[167,164794,6689],{"class":512},[19,164796,164797],{},"反向索引从 -1 开始：",[26,164799,164801],{"className":723,"code":164800,"language":305,"meta":32,"style":32},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[34,164802,164803,164819],{"__ignoreMap":32},[167,164804,164805,164807,164809,164811,164813,164816],{"class":169,"line":170},[167,164806,1606],{"class":184},[167,164808,164770],{"class":512},[167,164810,2732],{"class":731},[167,164812,2418],{"class":184},[167,164814,164815],{"class":512},"])  ",[167,164817,164818],{"class":2268},"# 小刚\n",[167,164820,164821,164823,164825,164827,164829,164831],{"class":169,"line":191},[167,164822,1606],{"class":184},[167,164824,164770],{"class":512},[167,164826,2732],{"class":731},[167,164828,2287],{"class":184},[167,164830,164815],{"class":512},[167,164832,164833],{"class":2268},"# 小红\n",[19,164835,164836],{},"索引越界会报错：",[26,164838,164840],{"className":723,"code":164839,"language":305,"meta":32,"style":32},"print(names[3])\n",[34,164841,164842],{"__ignoreMap":32},[167,164843,164844,164846,164848,164850],{"class":169,"line":170},[167,164845,1606],{"class":184},[167,164847,164770],{"class":512},[167,164849,2281],{"class":184},[167,164851,6689],{"class":512},[14,164853,164855],{"id":164854},"_64-列表常用方法","6.4 列表常用方法",[26,164857,164859],{"className":723,"code":164858,"language":305,"meta":32,"style":32},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[34,164860,164861,164877,164881,164890,164904,164918,164922],{"__ignoreMap":32},[167,164862,164863,164865,164867,164869,164871,164873,164875],{"class":169,"line":170},[167,164864,161971],{"class":512},[167,164866,523],{"class":731},[167,164868,54221],{"class":512},[167,164870,151479],{"class":177},[167,164872,14463],{"class":512},[167,164874,152527],{"class":177},[167,164876,35249],{"class":512},[167,164878,164879],{"class":169,"line":191},[167,164880,741],{"emptyLinePlaceholder":740},[167,164882,164883,164886,164888],{"class":169,"line":205},[167,164884,164885],{"class":512},"names.append(",[167,164887,161322],{"class":177},[167,164889,873],{"class":512},[167,164891,164892,164895,164897,164899,164902],{"class":169,"line":219},[167,164893,164894],{"class":512},"names.insert(",[167,164896,2418],{"class":184},[167,164898,14463],{"class":512},[167,164900,164901],{"class":177},"\"小李\"",[167,164903,873],{"class":512},[167,164905,164906,164909,164911,164913,164916],{"class":169,"line":230},[167,164907,164908],{"class":512},"names.extend([",[167,164910,10711],{"class":177},[167,164912,14463],{"class":512},[167,164914,164915],{"class":177},"\"小赵\"",[167,164917,6689],{"class":512},[167,164919,164920],{"class":169,"line":241},[167,164921,741],{"emptyLinePlaceholder":740},[167,164923,164924,164926],{"class":169,"line":261},[167,164925,1606],{"class":184},[167,164927,164928],{"class":512},"(names)\n",[19,164930,164931],{},"删除元素：",[26,164933,164935],{"className":723,"code":164934,"language":305,"meta":32,"style":32},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[34,164936,164937,164946,164956,164970,164982],{"__ignoreMap":32},[167,164938,164939,164942,164944],{"class":169,"line":170},[167,164940,164941],{"class":512},"names.remove(",[167,164943,152527],{"class":177},[167,164945,873],{"class":512},[167,164947,164948,164951,164953],{"class":169,"line":191},[167,164949,164950],{"class":512},"last ",[167,164952,523],{"class":731},[167,164954,164955],{"class":512}," names.pop()\n",[167,164957,164958,164961,164963,164966,164968],{"class":169,"line":205},[167,164959,164960],{"class":512},"first ",[167,164962,523],{"class":731},[167,164964,164965],{"class":512}," names.pop(",[167,164967,1154],{"class":184},[167,164969,873],{"class":512},[167,164971,164972,164975,164978,164980],{"class":169,"line":219},[167,164973,164974],{"class":731},"del",[167,164976,164977],{"class":512}," names[",[167,164979,1154],{"class":184},[167,164981,35249],{"class":512},[167,164983,164984],{"class":169,"line":230},[167,164985,164986],{"class":512},"names.clear()\n",[19,164988,164989],{},"查询和统计：",[26,164991,164993],{"className":723,"code":164992,"language":305,"meta":32,"style":32},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[34,164994,164995,165023,165027,165038,165049],{"__ignoreMap":32},[167,164996,164997,164999,165001,165003,165005,165007,165009,165011,165013,165015,165017,165019,165021],{"class":169,"line":170},[167,164998,164674],{"class":512},[167,165000,523],{"class":731},[167,165002,54221],{"class":512},[167,165004,2418],{"class":184},[167,165006,14463],{"class":512},[167,165008,2287],{"class":184},[167,165010,14463],{"class":512},[167,165012,2281],{"class":184},[167,165014,14463],{"class":512},[167,165016,2287],{"class":184},[167,165018,14463],{"class":512},[167,165020,2494],{"class":184},[167,165022,35249],{"class":512},[167,165024,165025],{"class":169,"line":191},[167,165026,741],{"emptyLinePlaceholder":740},[167,165028,165029,165031,165034,165036],{"class":169,"line":205},[167,165030,1606],{"class":184},[167,165032,165033],{"class":512},"(numbers.index(",[167,165035,2281],{"class":184},[167,165037,32505],{"class":512},[167,165039,165040,165042,165045,165047],{"class":169,"line":219},[167,165041,1606],{"class":184},[167,165043,165044],{"class":512},"(numbers.count(",[167,165046,2287],{"class":184},[167,165048,32505],{"class":512},[167,165050,165051,165053,165055,165057],{"class":169,"line":230},[167,165052,1606],{"class":184},[167,165054,898],{"class":512},[167,165056,9388],{"class":184},[167,165058,165059],{"class":512},"(numbers))\n",[19,165061,165062],{},"排序：",[26,165064,165066],{"className":723,"code":165065,"language":305,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[34,165067,165068,165092,165096,165101,165108,165112,165126,165132,165136,165141],{"__ignoreMap":32},[167,165069,165070,165072,165074,165076,165078,165080,165082,165084,165086,165088,165090],{"class":169,"line":170},[167,165071,164674],{"class":512},[167,165073,523],{"class":731},[167,165075,54221],{"class":512},[167,165077,2281],{"class":184},[167,165079,14463],{"class":512},[167,165081,2418],{"class":184},[167,165083,14463],{"class":512},[167,165085,2519],{"class":184},[167,165087,14463],{"class":512},[167,165089,2287],{"class":184},[167,165091,35249],{"class":512},[167,165093,165094],{"class":169,"line":191},[167,165095,741],{"emptyLinePlaceholder":740},[167,165097,165098],{"class":169,"line":205},[167,165099,165100],{"class":512},"numbers.sort()\n",[167,165102,165103,165105],{"class":169,"line":219},[167,165104,1606],{"class":184},[167,165106,165107],{"class":512},"(numbers)\n",[167,165109,165110],{"class":169,"line":230},[167,165111,741],{"emptyLinePlaceholder":740},[167,165113,165114,165117,165120,165122,165124],{"class":169,"line":241},[167,165115,165116],{"class":512},"numbers.sort(",[167,165118,165119],{"class":7246},"reverse",[167,165121,523],{"class":731},[167,165123,33481],{"class":184},[167,165125,873],{"class":512},[167,165127,165128,165130],{"class":169,"line":261},[167,165129,1606],{"class":184},[167,165131,165107],{"class":512},[167,165133,165134],{"class":169,"line":773},[167,165135,741],{"emptyLinePlaceholder":740},[167,165137,165138],{"class":169,"line":779},[167,165139,165140],{"class":512},"numbers.reverse()\n",[167,165142,165143,165145],{"class":169,"line":785},[167,165144,1606],{"class":184},[167,165146,165107],{"class":512},[19,165148,165149,165152,165153,165156],{},[34,165150,165151],{},"sort()"," 会修改原列表，",[34,165154,165155],{},"sorted()"," 返回新列表。",[26,165158,165160],{"className":723,"code":165159,"language":305,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[34,165161,165162,165186,165198,165202,165208],{"__ignoreMap":32},[167,165163,165164,165166,165168,165170,165172,165174,165176,165178,165180,165182,165184],{"class":169,"line":170},[167,165165,164674],{"class":512},[167,165167,523],{"class":731},[167,165169,54221],{"class":512},[167,165171,2281],{"class":184},[167,165173,14463],{"class":512},[167,165175,2418],{"class":184},[167,165177,14463],{"class":512},[167,165179,2519],{"class":184},[167,165181,14463],{"class":512},[167,165183,2287],{"class":184},[167,165185,35249],{"class":512},[167,165187,165188,165191,165193,165196],{"class":169,"line":191},[167,165189,165190],{"class":512},"new_numbers ",[167,165192,523],{"class":731},[167,165194,165195],{"class":184}," sorted",[167,165197,165107],{"class":512},[167,165199,165200],{"class":169,"line":205},[167,165201,741],{"emptyLinePlaceholder":740},[167,165203,165204,165206],{"class":169,"line":219},[167,165205,1606],{"class":184},[167,165207,165107],{"class":512},[167,165209,165210,165212],{"class":169,"line":230},[167,165211,1606],{"class":184},[167,165213,165214],{"class":512},"(new_numbers)\n",[14,165216,165218],{"id":165217},"_65-列表遍历","6.5 列表遍历",[26,165220,165222],{"className":723,"code":165221,"language":305,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[34,165223,165224,165244,165248,165258],{"__ignoreMap":32},[167,165225,165226,165228,165230,165232,165234,165236,165238,165240,165242],{"class":169,"line":170},[167,165227,161971],{"class":512},[167,165229,523],{"class":731},[167,165231,54221],{"class":512},[167,165233,151479],{"class":177},[167,165235,14463],{"class":512},[167,165237,152527],{"class":177},[167,165239,14463],{"class":512},[167,165241,161322],{"class":177},[167,165243,35249],{"class":512},[167,165245,165246],{"class":169,"line":191},[167,165247,741],{"emptyLinePlaceholder":740},[167,165249,165250,165252,165254,165256],{"class":169,"line":205},[167,165251,1168],{"class":731},[167,165253,162007],{"class":512},[167,165255,973],{"class":731},[167,165257,162012],{"class":512},[167,165259,165260,165262],{"class":169,"line":219},[167,165261,895],{"class":184},[167,165263,152251],{"class":512},[19,165265,165266],{},"需要索引时：",[26,165268,165270],{"className":723,"code":165269,"language":305,"meta":32,"style":32},"for index, name in enumerate(names):\n    print(index, name)\n",[34,165271,165272,165286],{"__ignoreMap":32},[167,165273,165274,165276,165279,165281,165283],{"class":169,"line":170},[167,165275,1168],{"class":731},[167,165277,165278],{"class":512}," index, name ",[167,165280,973],{"class":731},[167,165282,33611],{"class":184},[167,165284,165285],{"class":512},"(names):\n",[167,165287,165288,165290],{"class":169,"line":191},[167,165289,895],{"class":184},[167,165291,165292],{"class":512},"(index, name)\n",[19,165294,165295],{},"统计总分：",[26,165297,165299],{"className":723,"code":165298,"language":305,"meta":32,"style":32},"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",[34,165300,165301,165326,165334,165338,165349,165357,165361,165378],{"__ignoreMap":32},[167,165302,165303,165306,165308,165310,165312,165314,165316,165318,165320,165322,165324],{"class":169,"line":170},[167,165304,165305],{"class":512},"scores ",[167,165307,523],{"class":731},[167,165309,54221],{"class":512},[167,165311,3062],{"class":184},[167,165313,14463],{"class":512},[167,165315,2936],{"class":184},[167,165317,14463],{"class":512},[167,165319,2455],{"class":184},[167,165321,14463],{"class":512},[167,165323,2761],{"class":184},[167,165325,35249],{"class":512},[167,165327,165328,165330,165332],{"class":169,"line":191},[167,165329,158851],{"class":512},[167,165331,523],{"class":731},[167,165333,49333],{"class":184},[167,165335,165336],{"class":169,"line":205},[167,165337,741],{"emptyLinePlaceholder":740},[167,165339,165340,165342,165344,165346],{"class":169,"line":219},[167,165341,1168],{"class":731},[167,165343,159374],{"class":512},[167,165345,973],{"class":731},[167,165347,165348],{"class":512}," scores:\n",[167,165350,165351,165353,165355],{"class":169,"line":230},[167,165352,160898],{"class":512},[167,165354,11505],{"class":731},[167,165356,3644],{"class":512},[167,165358,165359],{"class":169,"line":241},[167,165360,741],{"emptyLinePlaceholder":740},[167,165362,165363,165366,165368,165371,165373,165375],{"class":169,"line":261},[167,165364,165365],{"class":512},"avg ",[167,165367,523],{"class":731},[167,165369,165370],{"class":512}," total ",[167,165372,2784],{"class":731},[167,165374,9361],{"class":184},[167,165376,165377],{"class":512},"(scores)\n",[167,165379,165380,165382,165384,165386,165389,165391,165394,165396,165398,165400],{"class":169,"line":773},[167,165381,1606],{"class":184},[167,165383,898],{"class":512},[167,165385,2262],{"class":731},[167,165387,165388],{"class":177},"\"平均分:",[167,165390,3096],{"class":184},[167,165392,165393],{"class":512},"avg",[167,165395,158750],{"class":731},[167,165397,3145],{"class":184},[167,165399,2452],{"class":177},[167,165401,873],{"class":512},[14,165403,165405],{"id":165404},"_66-元组tuple","6.6 元组tuple",[19,165407,165408],{},"元组和列表类似，但不可修改。",[26,165410,165412],{"className":723,"code":165411,"language":305,"meta":32,"style":32},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[34,165413,165414,165431],{"__ignoreMap":32},[167,165415,165416,165419,165421,165423,165425,165427,165429],{"class":169,"line":170},[167,165417,165418],{"class":512},"point ",[167,165420,523],{"class":731},[167,165422,3716],{"class":512},[167,165424,2646],{"class":184},[167,165426,14463],{"class":512},[167,165428,2900],{"class":184},[167,165430,873],{"class":512},[167,165432,165433,165435,165437,165439,165441,165443,165445,165447,165449],{"class":169,"line":191},[167,165434,117905],{"class":512},[167,165436,523],{"class":731},[167,165438,3716],{"class":512},[167,165440,151479],{"class":177},[167,165442,14463],{"class":512},[167,165444,2850],{"class":184},[167,165446,14463],{"class":512},[167,165448,71257],{"class":177},[167,165450,873],{"class":512},[19,165452,165453],{},"单元素元组必须加逗号：",[26,165455,165457],{"className":723,"code":165456,"language":305,"meta":32,"style":32},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[34,165458,165459,165473,165486,165490,165504],{"__ignoreMap":32},[167,165460,165461,165464,165466,165468,165470],{"class":169,"line":170},[167,165462,165463],{"class":512},"t1 ",[167,165465,523],{"class":731},[167,165467,3716],{"class":512},[167,165469,2646],{"class":184},[167,165471,165472],{"class":512},",)\n",[167,165474,165475,165478,165480,165482,165484],{"class":169,"line":191},[167,165476,165477],{"class":512},"t2 ",[167,165479,523],{"class":731},[167,165481,3716],{"class":512},[167,165483,2646],{"class":184},[167,165485,873],{"class":512},[167,165487,165488],{"class":169,"line":205},[167,165489,741],{"emptyLinePlaceholder":740},[167,165491,165492,165494,165496,165498,165501],{"class":169,"line":219},[167,165493,1606],{"class":184},[167,165495,898],{"class":512},[167,165497,104698],{"class":184},[167,165499,165500],{"class":512},"(t1))  ",[167,165502,165503],{"class":2268},"# tuple\n",[167,165505,165506,165508,165510,165512,165515],{"class":169,"line":230},[167,165507,1606],{"class":184},[167,165509,898],{"class":512},[167,165511,104698],{"class":184},[167,165513,165514],{"class":512},"(t2))  ",[167,165516,165517],{"class":2268},"# int\n",[19,165519,165520],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165522,165524],{"id":165523},"_67-字符串str","6.7 字符串str",[19,165526,165527],{},"字符串也是序列，可以索引、切片和遍历。",[26,165529,165531],{"className":723,"code":165530,"language":305,"meta":32,"style":32},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[34,165532,165533,165541,165545,165556,165568,165572,165583],{"__ignoreMap":32},[167,165534,165535,165537,165539],{"class":169,"line":170},[167,165536,158035],{"class":512},[167,165538,523],{"class":731},[167,165540,161272],{"class":177},[167,165542,165543],{"class":169,"line":191},[167,165544,741],{"emptyLinePlaceholder":740},[167,165546,165547,165549,165552,165554],{"class":169,"line":205},[167,165548,1606],{"class":184},[167,165550,165551],{"class":512},"(text[",[167,165553,1154],{"class":184},[167,165555,6689],{"class":512},[167,165557,165558,165560,165562,165564,165566],{"class":169,"line":219},[167,165559,1606],{"class":184},[167,165561,165551],{"class":512},[167,165563,2732],{"class":731},[167,165565,2418],{"class":184},[167,165567,6689],{"class":512},[167,165569,165570],{"class":169,"line":230},[167,165571,741],{"emptyLinePlaceholder":740},[167,165573,165574,165576,165578,165580],{"class":169,"line":241},[167,165575,1168],{"class":731},[167,165577,161283],{"class":512},[167,165579,973],{"class":731},[167,165581,165582],{"class":512}," text:\n",[167,165584,165585,165587],{"class":169,"line":261},[167,165586,895],{"class":184},[167,165588,161294],{"class":512},[19,165590,165591],{},"字符串不可变：",[26,165593,165595],{"className":723,"code":165594,"language":305,"meta":32,"style":32},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[34,165596,165597,165605],{"__ignoreMap":32},[167,165598,165599,165601,165603],{"class":169,"line":170},[167,165600,158035],{"class":512},[167,165602,523],{"class":731},[167,165604,161272],{"class":177},[167,165606,165607,165610,165612,165614,165616,165619],{"class":169,"line":191},[167,165608,165609],{"class":512},"text[",[167,165611,1154],{"class":184},[167,165613,6475],{"class":512},[167,165615,523],{"class":731},[167,165617,165618],{"class":177}," \"P\"",[167,165620,165621],{"class":2268},"  # 报错\n",[19,165623,165624],{},"如果要得到新字符串：",[26,165626,165628],{"className":723,"code":165627,"language":305,"meta":32,"style":32},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[34,165629,165630,165638,165656],{"__ignoreMap":32},[167,165631,165632,165634,165636],{"class":169,"line":170},[167,165633,158035],{"class":512},[167,165635,523],{"class":731},[167,165637,161272],{"class":177},[167,165639,165640,165642,165644,165646,165648,165651,165653],{"class":169,"line":191},[167,165641,158035],{"class":512},[167,165643,523],{"class":731},[167,165645,165618],{"class":177},[167,165647,47566],{"class":731},[167,165649,165650],{"class":512}," text[",[167,165652,2418],{"class":184},[167,165654,165655],{"class":512},":]\n",[167,165657,165658,165660],{"class":169,"line":205},[167,165659,1606],{"class":184},[167,165661,165662],{"class":512},"(text)\n",[14,165664,165666],{"id":165665},"_68-切片","6.8 切片",[19,165668,165669],{},"切片用于从序列中取一部分。",[26,165671,165673],{"className":723,"code":165672,"language":305,"meta":32,"style":32},"序列[开始:结束:步长]\n",[34,165674,165675],{"__ignoreMap":32},[167,165676,165677],{"class":169,"line":170},[167,165678,165672],{"class":512},[19,165680,165681],{},"结束位置不包含。",[26,165683,165685],{"className":723,"code":165684,"language":305,"meta":32,"style":32},"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",[34,165686,165687,165724,165728,165747,165762,165776,165790],{"__ignoreMap":32},[167,165688,165689,165692,165694,165696,165698,165700,165702,165704,165706,165708,165710,165712,165714,165716,165718,165720,165722],{"class":169,"line":170},[167,165690,165691],{"class":512},"nums ",[167,165693,523],{"class":731},[167,165695,54221],{"class":512},[167,165697,1154],{"class":184},[167,165699,14463],{"class":512},[167,165701,2418],{"class":184},[167,165703,14463],{"class":512},[167,165705,2287],{"class":184},[167,165707,14463],{"class":512},[167,165709,2281],{"class":184},[167,165711,14463],{"class":512},[167,165713,2494],{"class":184},[167,165715,14463],{"class":512},[167,165717,2519],{"class":184},[167,165719,14463],{"class":512},[167,165721,2544],{"class":184},[167,165723,35249],{"class":512},[167,165725,165726],{"class":169,"line":191},[167,165727,741],{"emptyLinePlaceholder":740},[167,165729,165730,165732,165735,165737,165739,165741,165744],{"class":169,"line":205},[167,165731,1606],{"class":184},[167,165733,165734],{"class":512},"(nums[",[167,165736,2418],{"class":184},[167,165738,3059],{"class":512},[167,165740,2494],{"class":184},[167,165742,165743],{"class":512},"])    ",[167,165745,165746],{"class":2268},"# [1, 2, 3]\n",[167,165748,165749,165751,165754,165756,165759],{"class":169,"line":219},[167,165750,1606],{"class":184},[167,165752,165753],{"class":512},"(nums[:",[167,165755,2281],{"class":184},[167,165757,165758],{"class":512},"])     ",[167,165760,165761],{"class":2268},"# [0, 1, 2]\n",[167,165763,165764,165766,165768,165770,165773],{"class":169,"line":230},[167,165765,1606],{"class":184},[167,165767,165734],{"class":512},[167,165769,2281],{"class":184},[167,165771,165772],{"class":512},":])     ",[167,165774,165775],{"class":2268},"# [3, 4, 5, 6]\n",[167,165777,165778,165780,165783,165785,165787],{"class":169,"line":241},[167,165779,1606],{"class":184},[167,165781,165782],{"class":512},"(nums[::",[167,165784,2287],{"class":184},[167,165786,165743],{"class":512},[167,165788,165789],{"class":2268},"# [0, 2, 4, 6]\n",[167,165791,165792,165794,165796,165798,165800,165803],{"class":169,"line":261},[167,165793,1606],{"class":184},[167,165795,165782],{"class":512},[167,165797,2732],{"class":731},[167,165799,2418],{"class":184},[167,165801,165802],{"class":512},"])   ",[167,165804,165805],{"class":2268},"# 反转\n",[19,165807,165808],{},"字符串切片：",[26,165810,165812],{"className":723,"code":165811,"language":305,"meta":32,"style":32},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[34,165813,165814,165823,165837],{"__ignoreMap":32},[167,165815,165816,165818,165820],{"class":169,"line":170},[167,165817,158035],{"class":512},[167,165819,523],{"class":731},[167,165821,165822],{"class":177}," \"abcdef\"\n",[167,165824,165825,165827,165829,165831,165833,165835],{"class":169,"line":191},[167,165826,1606],{"class":184},[167,165828,165551],{"class":512},[167,165830,2418],{"class":184},[167,165832,3059],{"class":512},[167,165834,2494],{"class":184},[167,165836,6689],{"class":512},[167,165838,165839,165841,165844,165846,165848],{"class":169,"line":205},[167,165840,1606],{"class":184},[167,165842,165843],{"class":512},"(text[::",[167,165845,2732],{"class":731},[167,165847,2418],{"class":184},[167,165849,6689],{"class":512},[14,165851,165853],{"id":165852},"_69-集合set","6.9 集合set",[19,165855,165856],{},"集合特点：",[40,165858,165859,165862,165865],{},[43,165860,165861],{},"无序。",[43,165863,165864],{},"元素不重复。",[43,165866,165867],{},"可以做交集、并集、差集。",[26,165869,165871],{"className":723,"code":165870,"language":305,"meta":32,"style":32},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[34,165872,165873,165901],{"__ignoreMap":32},[167,165874,165875,165877,165879,165881,165883,165885,165887,165889,165891,165893,165895,165897,165899],{"class":169,"line":170},[167,165876,165691],{"class":512},[167,165878,523],{"class":731},[167,165880,6480],{"class":512},[167,165882,2418],{"class":184},[167,165884,14463],{"class":512},[167,165886,2287],{"class":184},[167,165888,14463],{"class":512},[167,165890,2281],{"class":184},[167,165892,14463],{"class":512},[167,165894,2281],{"class":184},[167,165896,14463],{"class":512},[167,165898,2494],{"class":184},[167,165900,3630],{"class":512},[167,165902,165903,165905],{"class":169,"line":191},[167,165904,1606],{"class":184},[167,165906,165907],{"class":512},"(nums)\n",[19,165909,165910],{},"创建空集合：",[26,165912,165914],{"className":723,"code":165913,"language":305,"meta":32,"style":32},"s = set()\n",[34,165915,165916],{"__ignoreMap":32},[167,165917,165918,165920,165922,165924],{"class":169,"line":170},[167,165919,12607],{"class":512},[167,165921,523],{"class":731},[167,165923,121313],{"class":184},[167,165925,4020],{"class":512},[19,165927,11053,165928,165930],{},[34,165929,34462],{}," 是空字典，不是空集合。",[19,165932,165933],{},"集合常用操作：",[26,165935,165937],{"className":723,"code":165936,"language":305,"meta":32,"style":32},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[34,165938,165939,165959,165963,165972,165981,165990],{"__ignoreMap":32},[167,165940,165941,165943,165945,165947,165949,165951,165953,165955,165957],{"class":169,"line":170},[167,165942,12607],{"class":512},[167,165944,523],{"class":731},[167,165946,6480],{"class":512},[167,165948,2418],{"class":184},[167,165950,14463],{"class":512},[167,165952,2287],{"class":184},[167,165954,14463],{"class":512},[167,165956,2281],{"class":184},[167,165958,3630],{"class":512},[167,165960,165961],{"class":169,"line":191},[167,165962,741],{"emptyLinePlaceholder":740},[167,165964,165965,165968,165970],{"class":169,"line":205},[167,165966,165967],{"class":512},"s.add(",[167,165969,2494],{"class":184},[167,165971,873],{"class":512},[167,165973,165974,165977,165979],{"class":169,"line":219},[167,165975,165976],{"class":512},"s.remove(",[167,165978,2287],{"class":184},[167,165980,873],{"class":512},[167,165982,165983,165986,165988],{"class":169,"line":230},[167,165984,165985],{"class":512},"s.discard(",[167,165987,2646],{"class":184},[167,165989,873],{"class":512},[167,165991,165992,165994,165996,165998],{"class":169,"line":241},[167,165993,1606],{"class":184},[167,165995,898],{"class":512},[167,165997,9388],{"class":184},[167,165999,166000],{"class":512},"(s))\n",[19,166002,166003],{},"交并差：",[26,166005,166007],{"className":723,"code":166006,"language":305,"meta":32,"style":32},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[34,166008,166009,166029,166049,166053,166068,166081],{"__ignoreMap":32},[167,166010,166011,166013,166015,166017,166019,166021,166023,166025,166027],{"class":169,"line":170},[167,166012,12947],{"class":512},[167,166014,523],{"class":731},[167,166016,6480],{"class":512},[167,166018,2418],{"class":184},[167,166020,14463],{"class":512},[167,166022,2287],{"class":184},[167,166024,14463],{"class":512},[167,166026,2281],{"class":184},[167,166028,3630],{"class":512},[167,166030,166031,166033,166035,166037,166039,166041,166043,166045,166047],{"class":169,"line":191},[167,166032,12973],{"class":512},[167,166034,523],{"class":731},[167,166036,6480],{"class":512},[167,166038,2281],{"class":184},[167,166040,14463],{"class":512},[167,166042,2494],{"class":184},[167,166044,14463],{"class":512},[167,166046,2519],{"class":184},[167,166048,3630],{"class":512},[167,166050,166051],{"class":169,"line":205},[167,166052,741],{"emptyLinePlaceholder":740},[167,166054,166055,166057,166060,166062,166065],{"class":169,"line":219},[167,166056,1606],{"class":184},[167,166058,166059],{"class":512},"(a ",[167,166061,2553],{"class":731},[167,166063,166064],{"class":512}," b)  ",[167,166066,166067],{"class":2268},"# 交集\n",[167,166069,166070,166072,166074,166076,166078],{"class":169,"line":230},[167,166071,1606],{"class":184},[167,166073,166059],{"class":512},[167,166075,3120],{"class":731},[167,166077,166064],{"class":512},[167,166079,166080],{"class":2268},"# 并集\n",[167,166082,166083,166085,166087,166089,166091],{"class":169,"line":241},[167,166084,1606],{"class":184},[167,166086,166059],{"class":512},[167,166088,2732],{"class":731},[167,166090,166064],{"class":512},[167,166092,166093],{"class":2268},"# 差集\n",[14,166095,166097],{"id":166096},"_610-字典dict","6.10 字典dict",[19,166099,166100],{},"字典通过 key-value 保存数据。",[26,166102,166104],{"className":723,"code":166103,"language":305,"meta":32,"style":32},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[34,166105,166106,166114,166124,166135,166145],{"__ignoreMap":32},[167,166107,166108,166110,166112],{"class":169,"line":170},[167,166109,151072],{"class":512},[167,166111,523],{"class":731},[167,166113,17598],{"class":512},[167,166115,166116,166118,166120,166122],{"class":169,"line":191},[167,166117,148611],{"class":177},[167,166119,53435],{"class":512},[167,166121,151479],{"class":177},[167,166123,33471],{"class":512},[167,166125,166126,166129,166131,166133],{"class":169,"line":205},[167,166127,166128],{"class":177},"    \"age\"",[167,166130,53435],{"class":512},[167,166132,2850],{"class":184},[167,166134,33471],{"class":512},[167,166136,166137,166140,166142],{"class":169,"line":219},[167,166138,166139],{"class":177},"    \"score\"",[167,166141,53435],{"class":512},[167,166143,166144],{"class":184},"95\n",[167,166146,166147],{"class":169,"line":230},[167,166148,3630],{"class":512},[19,166150,166151],{},"获取值：",[26,166153,166155],{"className":723,"code":166154,"language":305,"meta":32,"style":32},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[34,166156,166157,166168],{"__ignoreMap":32},[167,166158,166159,166161,166164,166166],{"class":169,"line":170},[167,166160,1606],{"class":184},[167,166162,166163],{"class":512},"(student[",[167,166165,64668],{"class":177},[167,166167,6689],{"class":512},[167,166169,166170,166172,166175,166177],{"class":169,"line":191},[167,166171,1606],{"class":184},[167,166173,166174],{"class":512},"(student.get(",[167,166176,64668],{"class":177},[167,166178,32505],{"class":512},[19,166180,17414],{},[26,166182,166184],{"className":723,"code":166183,"language":305,"meta":32,"style":32},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[34,166185,166186,166199],{"__ignoreMap":32},[167,166187,166188,166190,166193,166196],{"class":169,"line":170},[167,166189,154450],{"class":512},[167,166191,166192],{"class":177},"\"address\"",[167,166194,166195],{"class":512},"]     ",[167,166197,166198],{"class":2268},"# key不存在会报错\n",[167,166200,166201,166204,166206,166208],{"class":169,"line":191},[167,166202,166203],{"class":512},"student.get(",[167,166205,166192],{"class":177},[167,166207,15741],{"class":512},[167,166209,166210],{"class":2268},"# key不存在返回None\n",[19,166212,166213],{},"设置默认值：",[26,166215,166217],{"className":723,"code":166216,"language":305,"meta":32,"style":32},"print(student.get(\"address\", \"未知\"))\n",[34,166218,166219],{"__ignoreMap":32},[167,166220,166221,166223,166225,166227,166229,166232],{"class":169,"line":170},[167,166222,1606],{"class":184},[167,166224,166174],{"class":512},[167,166226,166192],{"class":177},[167,166228,14463],{"class":512},[167,166230,166231],{"class":177},"\"未知\"",[167,166233,32505],{"class":512},[19,166235,166236],{},"新增和修改：",[26,166238,166240],{"className":723,"code":166239,"language":305,"meta":32,"style":32},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[34,166241,166242,166255],{"__ignoreMap":32},[167,166243,166244,166246,166248,166250,166252],{"class":169,"line":170},[167,166245,154450],{"class":512},[167,166247,71113],{"class":177},[167,166249,6475],{"class":512},[167,166251,523],{"class":731},[167,166253,166254],{"class":184}," 19\n",[167,166256,166257,166259,166261,166263,166265],{"class":169,"line":191},[167,166258,154450],{"class":512},[167,166260,166192],{"class":177},[167,166262,6475],{"class":512},[167,166264,523],{"class":731},[167,166266,166267],{"class":177}," \"北京\"\n",[19,166269,166270],{},"删除：",[26,166272,166274],{"className":723,"code":166273,"language":305,"meta":32,"style":32},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[34,166275,166276,166289,166299],{"__ignoreMap":32},[167,166277,166278,166280,166282,166285,166287],{"class":169,"line":170},[167,166279,156949],{"class":512},[167,166281,523],{"class":731},[167,166283,166284],{"class":512}," student.pop(",[167,166286,153063],{"class":177},[167,166288,873],{"class":512},[167,166290,166291,166293,166295,166297],{"class":169,"line":191},[167,166292,164974],{"class":731},[167,166294,153740],{"class":512},[167,166296,71113],{"class":177},[167,166298,35249],{"class":512},[167,166300,166301],{"class":169,"line":205},[167,166302,166303],{"class":512},"student.clear()\n",[14,166305,166307],{"id":166306},"_611-字典遍历","6.11 字典遍历",[19,166309,166310],{},"遍历 key：",[26,166312,166314],{"className":723,"code":166313,"language":305,"meta":32,"style":32},"for key in student:\n    print(key, student[key])\n",[34,166315,166316,166328],{"__ignoreMap":32},[167,166317,166318,166320,166323,166325],{"class":169,"line":170},[167,166319,1168],{"class":731},[167,166321,166322],{"class":512}," key ",[167,166324,973],{"class":731},[167,166326,166327],{"class":512}," student:\n",[167,166329,166330,166332],{"class":169,"line":191},[167,166331,895],{"class":184},[167,166333,166334],{"class":512},"(key, student[key])\n",[19,166336,166337],{},"遍历 value：",[26,166339,166341],{"className":723,"code":166340,"language":305,"meta":32,"style":32},"for value in student.values():\n    print(value)\n",[34,166342,166343,166355],{"__ignoreMap":32},[167,166344,166345,166347,166350,166352],{"class":169,"line":170},[167,166346,1168],{"class":731},[167,166348,166349],{"class":512}," value ",[167,166351,973],{"class":731},[167,166353,166354],{"class":512}," student.values():\n",[167,166356,166357,166359],{"class":169,"line":191},[167,166358,895],{"class":184},[167,166360,166361],{"class":512},"(value)\n",[19,166363,166364],{},"遍历 key 和 value：",[26,166366,166368],{"className":723,"code":166367,"language":305,"meta":32,"style":32},"for key, value in student.items():\n    print(key, value)\n",[34,166369,166370,166382],{"__ignoreMap":32},[167,166371,166372,166374,166377,166379],{"class":169,"line":170},[167,166373,1168],{"class":731},[167,166375,166376],{"class":512}," key, value ",[167,166378,973],{"class":731},[167,166380,166381],{"class":512}," student.items():\n",[167,166383,166384,166386],{"class":169,"line":191},[167,166385,895],{"class":184},[167,166387,166388],{"class":512},"(key, value)\n",[14,166390,166392],{"id":166391},"_612-嵌套容器","6.12 嵌套容器",[19,166394,166395],{},"列表中保存字典，是项目中最常见的结构之一。",[26,166397,166399],{"className":723,"code":166398,"language":305,"meta":32,"style":32},"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",[34,166400,166401,166409,166437,166465,166493,166497,166501,166511],{"__ignoreMap":32},[167,166402,166403,166405,166407],{"class":169,"line":170},[167,166404,161307],{"class":512},[167,166406,523],{"class":731},[167,166408,57436],{"class":512},[167,166410,166411,166413,166415,166417,166419,166421,166423,166425,166427,166429,166431,166433,166435],{"class":169,"line":191},[167,166412,149976],{"class":512},[167,166414,64668],{"class":177},[167,166416,53435],{"class":512},[167,166418,151479],{"class":177},[167,166420,14463],{"class":512},[167,166422,71113],{"class":177},[167,166424,53435],{"class":512},[167,166426,2850],{"class":184},[167,166428,14463],{"class":512},[167,166430,153063],{"class":177},[167,166432,53435],{"class":512},[167,166434,3188],{"class":184},[167,166436,6962],{"class":512},[167,166438,166439,166441,166443,166445,166447,166449,166451,166453,166455,166457,166459,166461,166463],{"class":169,"line":205},[167,166440,149976],{"class":512},[167,166442,64668],{"class":177},[167,166444,53435],{"class":512},[167,166446,152527],{"class":177},[167,166448,14463],{"class":512},[167,166450,71113],{"class":177},[167,166452,53435],{"class":512},[167,166454,2825],{"class":184},[167,166456,14463],{"class":512},[167,166458,153063],{"class":177},[167,166460,53435],{"class":512},[167,166462,3011],{"class":184},[167,166464,6962],{"class":512},[167,166466,166467,166469,166471,166473,166475,166477,166479,166481,166483,166485,166487,166489,166491],{"class":169,"line":219},[167,166468,149976],{"class":512},[167,166470,64668],{"class":177},[167,166472,53435],{"class":512},[167,166474,161322],{"class":177},[167,166476,14463],{"class":512},[167,166478,71113],{"class":177},[167,166480,53435],{"class":512},[167,166482,2875],{"class":184},[167,166484,14463],{"class":512},[167,166486,153063],{"class":177},[167,166488,53435],{"class":512},[167,166490,2606],{"class":184},[167,166492,6962],{"class":512},[167,166494,166495],{"class":169,"line":230},[167,166496,35249],{"class":512},[167,166498,166499],{"class":169,"line":241},[167,166500,741],{"emptyLinePlaceholder":740},[167,166502,166503,166505,166507,166509],{"class":169,"line":261},[167,166504,1168],{"class":731},[167,166506,153728],{"class":512},[167,166508,973],{"class":731},[167,166510,153733],{"class":512},[167,166512,166513,166515,166517,166519,166522,166524],{"class":169,"line":773},[167,166514,895],{"class":184},[167,166516,166163],{"class":512},[167,166518,64668],{"class":177},[167,166520,166521],{"class":512},"], student[",[167,166523,153063],{"class":177},[167,166525,6689],{"class":512},[19,166527,166528],{},"统计平均分：",[26,166530,166532],{"className":723,"code":166531,"language":305,"meta":32,"style":32},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[34,166533,166534,166542,166546,166556,166568,166572,166587],{"__ignoreMap":32},[167,166535,166536,166538,166540],{"class":169,"line":170},[167,166537,158851],{"class":512},[167,166539,523],{"class":731},[167,166541,49333],{"class":184},[167,166543,166544],{"class":169,"line":191},[167,166545,741],{"emptyLinePlaceholder":740},[167,166547,166548,166550,166552,166554],{"class":169,"line":205},[167,166549,1168],{"class":731},[167,166551,153728],{"class":512},[167,166553,973],{"class":731},[167,166555,153733],{"class":512},[167,166557,166558,166560,166562,166564,166566],{"class":169,"line":219},[167,166559,160898],{"class":512},[167,166561,11505],{"class":731},[167,166563,153740],{"class":512},[167,166565,153063],{"class":177},[167,166567,35249],{"class":512},[167,166569,166570],{"class":169,"line":230},[167,166571,741],{"emptyLinePlaceholder":740},[167,166573,166574,166576,166578,166580,166582,166584],{"class":169,"line":241},[167,166575,165365],{"class":512},[167,166577,523],{"class":731},[167,166579,165370],{"class":512},[167,166581,2784],{"class":731},[167,166583,9361],{"class":184},[167,166585,166586],{"class":512},"(students)\n",[167,166588,166589,166591,166593,166595,166597,166599,166601,166603,166605,166607],{"class":169,"line":261},[167,166590,1606],{"class":184},[167,166592,898],{"class":512},[167,166594,2262],{"class":731},[167,166596,165388],{"class":177},[167,166598,3096],{"class":184},[167,166600,165393],{"class":512},[167,166602,158750],{"class":731},[167,166604,3145],{"class":184},[167,166606,2452],{"class":177},[167,166608,873],{"class":512},[19,166610,166611],{},"查找学生：",[26,166613,166615],{"className":723,"code":166614,"language":305,"meta":32,"style":32},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[34,166616,166617,166632,166636,166646,166660,166666,166670,166676],{"__ignoreMap":32},[167,166618,166619,166621,166623,166625,166627,166630],{"class":169,"line":170},[167,166620,113169],{"class":512},[167,166622,523],{"class":731},[167,166624,62594],{"class":184},[167,166626,898],{"class":512},[167,166628,166629],{"class":177},"\"请输入学生姓名:\"",[167,166631,873],{"class":512},[167,166633,166634],{"class":169,"line":191},[167,166635,741],{"emptyLinePlaceholder":740},[167,166637,166638,166640,166642,166644],{"class":169,"line":205},[167,166639,1168],{"class":731},[167,166641,153728],{"class":512},[167,166643,973],{"class":731},[167,166645,153733],{"class":512},[167,166647,166648,166650,166652,166654,166656,166658],{"class":169,"line":219},[167,166649,5136],{"class":731},[167,166651,153740],{"class":512},[167,166653,64668],{"class":177},[167,166655,6475],{"class":512},[167,166657,4985],{"class":731},[167,166659,162023],{"class":512},[167,166661,166662,166664],{"class":169,"line":230},[167,166663,34454],{"class":184},[167,166665,151633],{"class":512},[167,166667,166668],{"class":169,"line":241},[167,166669,33632],{"class":731},[167,166671,166672,166674],{"class":169,"line":261},[167,166673,3755],{"class":731},[167,166675,857],{"class":512},[167,166677,166678,166680,166682,166685],{"class":169,"line":773},[167,166679,895],{"class":184},[167,166681,898],{"class":512},[167,166683,166684],{"class":177},"\"没有找到\"",[167,166686,873],{"class":512},[14,166688,166690],{"id":166689},"_613-容器通用操作","6.13 容器通用操作",[19,166692,166693],{},"长度：",[26,166695,166697],{"className":723,"code":166696,"language":305,"meta":32,"style":32},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[34,166698,166699,166718,166728],{"__ignoreMap":32},[167,166700,166701,166703,166706,166708,166710,166712,166714,166716],{"class":169,"line":170},[167,166702,9388],{"class":184},[167,166704,166705],{"class":512},"([",[167,166707,2418],{"class":184},[167,166709,14463],{"class":512},[167,166711,2287],{"class":184},[167,166713,14463],{"class":512},[167,166715,2281],{"class":184},[167,166717,6689],{"class":512},[167,166719,166720,166722,166724,166726],{"class":169,"line":191},[167,166721,9388],{"class":184},[167,166723,898],{"class":512},[167,166725,157471],{"class":177},[167,166727,873],{"class":512},[167,166729,166730,166732,166735,166737,166739,166741],{"class":169,"line":205},[167,166731,9388],{"class":184},[167,166733,166734],{"class":512},"({",[167,166736,64668],{"class":177},[167,166738,53435],{"class":512},[167,166740,151479],{"class":177},[167,166742,166743],{"class":512},"})\n",[19,166745,166746],{},"最大最小：",[26,166748,166750],{"className":723,"code":166749,"language":305,"meta":32,"style":32},"max([1, 2, 3])\nmin([1, 2, 3])\n",[34,166751,166752,166770],{"__ignoreMap":32},[167,166753,166754,166756,166758,166760,166762,166764,166766,166768],{"class":169,"line":170},[167,166755,8045],{"class":184},[167,166757,166705],{"class":512},[167,166759,2418],{"class":184},[167,166761,14463],{"class":512},[167,166763,2287],{"class":184},[167,166765,14463],{"class":512},[167,166767,2281],{"class":184},[167,166769,6689],{"class":512},[167,166771,166772,166775,166777,166779,166781,166783,166785,166787],{"class":169,"line":191},[167,166773,166774],{"class":184},"min",[167,166776,166705],{"class":512},[167,166778,2418],{"class":184},[167,166780,14463],{"class":512},[167,166782,2287],{"class":184},[167,166784,14463],{"class":512},[167,166786,2281],{"class":184},[167,166788,6689],{"class":512},[19,166790,166791],{},"求和：",[26,166793,166795],{"className":723,"code":166794,"language":305,"meta":32,"style":32},"sum([1, 2, 3])\n",[34,166796,166797],{"__ignoreMap":32},[167,166798,166799,166802,166804,166806,166808,166810,166812,166814],{"class":169,"line":170},[167,166800,166801],{"class":184},"sum",[167,166803,166705],{"class":512},[167,166805,2418],{"class":184},[167,166807,14463],{"class":512},[167,166809,2287],{"class":184},[167,166811,14463],{"class":512},[167,166813,2281],{"class":184},[167,166815,6689],{"class":512},[19,166817,165062],{},[26,166819,166821],{"className":723,"code":166820,"language":305,"meta":32,"style":32},"sorted([3, 1, 2])\n",[34,166822,166823],{"__ignoreMap":32},[167,166824,166825,166828,166830,166832,166834,166836,166838,166840],{"class":169,"line":170},[167,166826,166827],{"class":184},"sorted",[167,166829,166705],{"class":512},[167,166831,2281],{"class":184},[167,166833,14463],{"class":512},[167,166835,2418],{"class":184},[167,166837,14463],{"class":512},[167,166839,2287],{"class":184},[167,166841,6689],{"class":512},[19,166843,166844],{},"类型转换：",[26,166846,166848],{"className":723,"code":166847,"language":305,"meta":32,"style":32},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[34,166849,166850,166860,166878],{"__ignoreMap":32},[167,166851,166852,166854,166856,166858],{"class":169,"line":170},[167,166853,155661],{"class":184},[167,166855,898],{"class":512},[167,166857,157471],{"class":177},[167,166859,873],{"class":512},[167,166861,166862,166864,166866,166868,166870,166872,166874,166876],{"class":169,"line":191},[167,166863,156856],{"class":184},[167,166865,166705],{"class":512},[167,166867,2418],{"class":184},[167,166869,14463],{"class":512},[167,166871,2287],{"class":184},[167,166873,14463],{"class":512},[167,166875,2281],{"class":184},[167,166877,6689],{"class":512},[167,166879,166880,166882,166884,166886,166888,166890,166892,166894,166896,166898],{"class":169,"line":205},[167,166881,156881],{"class":184},[167,166883,166705],{"class":512},[167,166885,2418],{"class":184},[167,166887,14463],{"class":512},[167,166889,2418],{"class":184},[167,166891,14463],{"class":512},[167,166893,2287],{"class":184},[167,166895,14463],{"class":512},[167,166897,2281],{"class":184},[167,166899,6689],{"class":512},[19,166901,166902],{},"成员判断：",[26,166904,166906],{"className":723,"code":166905,"language":305,"meta":32,"style":32},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[34,166907,166908,166925,166949],{"__ignoreMap":32},[167,166909,166910,166912,166914,166917,166920,166923],{"class":169,"line":170},[167,166911,1606],{"class":184},[167,166913,898],{"class":512},[167,166915,166916],{"class":177},"\"a\"",[167,166918,166919],{"class":731}," in",[167,166921,166922],{"class":177}," \"abc\"",[167,166924,873],{"class":512},[167,166926,166927,166929,166931,166933,166935,166937,166939,166941,166943,166945,166947],{"class":169,"line":191},[167,166928,1606],{"class":184},[167,166930,898],{"class":512},[167,166932,2418],{"class":184},[167,166934,166919],{"class":731},[167,166936,54221],{"class":512},[167,166938,2418],{"class":184},[167,166940,14463],{"class":512},[167,166942,2287],{"class":184},[167,166944,14463],{"class":512},[167,166946,2281],{"class":184},[167,166948,6689],{"class":512},[167,166950,166951,166953,166955,166957,166959,166961,166963,166965,166967],{"class":169,"line":205},[167,166952,1606],{"class":184},[167,166954,898],{"class":512},[167,166956,64668],{"class":177},[167,166958,166919],{"class":731},[167,166960,6480],{"class":512},[167,166962,64668],{"class":177},[167,166964,53435],{"class":512},[167,166966,151479],{"class":177},[167,166968,166743],{"class":512},[14,166970,166972],{"id":166971},"_614-推导式","6.14 推导式",[19,166974,166975],{},"推导式用于快速生成容器。",[19,166977,166978],{},"列表推导式：",[26,166980,166982],{"className":723,"code":166981,"language":305,"meta":32,"style":32},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[34,166983,166984,167011],{"__ignoreMap":32},[167,166985,166986,166988,166990,166993,166995,166997,166999,167001,167003,167005,167007,167009],{"class":169,"line":170},[167,166987,165691],{"class":512},[167,166989,523],{"class":731},[167,166991,166992],{"class":512}," [i ",[167,166994,1168],{"class":731},[167,166996,11466],{"class":512},[167,166998,973],{"class":731},[167,167000,976],{"class":184},[167,167002,898],{"class":512},[167,167004,2418],{"class":184},[167,167006,14463],{"class":512},[167,167008,2544],{"class":184},[167,167010,99284],{"class":512},[167,167012,167013,167015],{"class":169,"line":191},[167,167014,1606],{"class":184},[167,167016,165907],{"class":512},[19,167018,167019],{},"带条件：",[26,167021,167023],{"className":723,"code":167022,"language":305,"meta":32,"style":32},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[34,167024,167025,167066],{"__ignoreMap":32},[167,167026,167027,167030,167032,167034,167036,167038,167040,167042,167044,167046,167048,167050,167052,167054,167056,167058,167060,167062,167064],{"class":169,"line":170},[167,167028,167029],{"class":512},"even_nums ",[167,167031,523],{"class":731},[167,167033,166992],{"class":512},[167,167035,1168],{"class":731},[167,167037,11466],{"class":512},[167,167039,973],{"class":731},[167,167041,976],{"class":184},[167,167043,898],{"class":512},[167,167045,2418],{"class":184},[167,167047,14463],{"class":512},[167,167049,2537],{"class":184},[167,167051,15741],{"class":512},[167,167053,1035],{"class":731},[167,167055,11466],{"class":512},[167,167057,2528],{"class":731},[167,167059,16782],{"class":184},[167,167061,1041],{"class":731},[167,167063,6125],{"class":184},[167,167065,35249],{"class":512},[167,167067,167068,167070],{"class":169,"line":191},[167,167069,1606],{"class":184},[167,167071,167072],{"class":512},"(even_nums)\n",[19,167074,167075],{},"字典推导式：",[26,167077,167079],{"className":723,"code":167078,"language":305,"meta":32,"style":32},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[34,167080,167081,167115],{"__ignoreMap":32},[167,167082,167083,167086,167088,167091,167093,167095,167098,167100,167102,167104,167106,167108,167110,167112],{"class":169,"line":170},[167,167084,167085],{"class":512},"squares ",[167,167087,523],{"class":731},[167,167089,167090],{"class":512}," {i: i ",[167,167092,12689],{"class":731},[167,167094,16782],{"class":184},[167,167096,167097],{"class":731}," for",[167,167099,11466],{"class":512},[167,167101,973],{"class":731},[167,167103,976],{"class":184},[167,167105,898],{"class":512},[167,167107,2418],{"class":184},[167,167109,14463],{"class":512},[167,167111,2544],{"class":184},[167,167113,167114],{"class":512},")}\n",[167,167116,167117,167119],{"class":169,"line":191},[167,167118,1606],{"class":184},[167,167120,167121],{"class":512},"(squares)\n",[19,167123,167124],{},"集合推导式：",[26,167126,167128],{"className":723,"code":167127,"language":305,"meta":32,"style":32},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[34,167129,167130,167151],{"__ignoreMap":32},[167,167131,167132,167135,167137,167140,167142,167144,167146,167149],{"class":169,"line":170},[167,167133,167134],{"class":512},"chars ",[167,167136,523],{"class":731},[167,167138,167139],{"class":512}," {ch ",[167,167141,1168],{"class":731},[167,167143,161283],{"class":512},[167,167145,973],{"class":731},[167,167147,167148],{"class":177}," \"hello\"",[167,167150,3630],{"class":512},[167,167152,167153,167155],{"class":169,"line":191},[167,167154,1606],{"class":184},[167,167156,167157],{"class":512},"(chars)\n",[19,167159,167160],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167162,167164],{"id":167163},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,167166,167168],{"className":723,"code":167167,"language":305,"meta":32,"style":32},"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",[34,167169,167170,167178,167198,167218,167238,167258,167262,167266,167274,167288,167297,167301,167311,167323,167327,167347,167356,167360,167376,167381,167385,167399,167403,167425,167461],{"__ignoreMap":32},[167,167171,167172,167174,167176],{"class":169,"line":170},[167,167173,161307],{"class":512},[167,167175,523],{"class":731},[167,167177,57436],{"class":512},[167,167179,167180,167182,167184,167186,167188,167190,167192,167194,167196],{"class":169,"line":191},[167,167181,149976],{"class":512},[167,167183,64668],{"class":177},[167,167185,53435],{"class":512},[167,167187,151479],{"class":177},[167,167189,14463],{"class":512},[167,167191,153063],{"class":177},[167,167193,53435],{"class":512},[167,167195,3188],{"class":184},[167,167197,6962],{"class":512},[167,167199,167200,167202,167204,167206,167208,167210,167212,167214,167216],{"class":169,"line":205},[167,167201,149976],{"class":512},[167,167203,64668],{"class":177},[167,167205,53435],{"class":512},[167,167207,152527],{"class":177},[167,167209,14463],{"class":512},[167,167211,153063],{"class":177},[167,167213,53435],{"class":512},[167,167215,3011],{"class":184},[167,167217,6962],{"class":512},[167,167219,167220,167222,167224,167226,167228,167230,167232,167234,167236],{"class":169,"line":219},[167,167221,149976],{"class":512},[167,167223,64668],{"class":177},[167,167225,53435],{"class":512},[167,167227,161322],{"class":177},[167,167229,14463],{"class":512},[167,167231,153063],{"class":177},[167,167233,53435],{"class":512},[167,167235,2606],{"class":184},[167,167237,6962],{"class":512},[167,167239,167240,167242,167244,167246,167248,167250,167252,167254,167256],{"class":169,"line":230},[167,167241,149976],{"class":512},[167,167243,64668],{"class":177},[167,167245,53435],{"class":512},[167,167247,164901],{"class":177},[167,167249,14463],{"class":512},[167,167251,153063],{"class":177},[167,167253,53435],{"class":512},[167,167255,3082],{"class":184},[167,167257,6962],{"class":512},[167,167259,167260],{"class":169,"line":241},[167,167261,35249],{"class":512},[167,167263,167264],{"class":169,"line":261},[167,167265,741],{"emptyLinePlaceholder":740},[167,167267,167268,167270,167272],{"class":169,"line":773},[167,167269,158851],{"class":512},[167,167271,523],{"class":731},[167,167273,49333],{"class":184},[167,167275,167276,167279,167281,167284,167286],{"class":169,"line":779},[167,167277,167278],{"class":512},"max_student ",[167,167280,523],{"class":731},[167,167282,167283],{"class":512}," students[",[167,167285,1154],{"class":184},[167,167287,35249],{"class":512},[167,167289,167290,167293,167295],{"class":169,"line":785},[167,167291,167292],{"class":512},"passed ",[167,167294,523],{"class":731},[167,167296,53834],{"class":512},[167,167298,167299],{"class":169,"line":790},[167,167300,741],{"emptyLinePlaceholder":740},[167,167302,167303,167305,167307,167309],{"class":169,"line":796},[167,167304,1168],{"class":731},[167,167306,153728],{"class":512},[167,167308,973],{"class":731},[167,167310,153733],{"class":512},[167,167312,167313,167315,167317,167319,167321],{"class":169,"line":802},[167,167314,160898],{"class":512},[167,167316,11505],{"class":731},[167,167318,153740],{"class":512},[167,167320,153063],{"class":177},[167,167322,35249],{"class":512},[167,167324,167325],{"class":169,"line":808},[167,167326,741],{"emptyLinePlaceholder":740},[167,167328,167329,167331,167333,167335,167337,167339,167342,167344],{"class":169,"line":814},[167,167330,5136],{"class":731},[167,167332,153740],{"class":512},[167,167334,153063],{"class":177},[167,167336,6475],{"class":512},[167,167338,3159],{"class":731},[167,167340,167341],{"class":512}," max_student[",[167,167343,153063],{"class":177},[167,167345,167346],{"class":512},"]:\n",[167,167348,167349,167352,167354],{"class":169,"line":820},[167,167350,167351],{"class":512},"        max_student ",[167,167353,523],{"class":731},[167,167355,153756],{"class":512},[167,167357,167358],{"class":169,"line":826},[167,167359,741],{"emptyLinePlaceholder":740},[167,167361,167362,167364,167366,167368,167370,167372,167374],{"class":169,"line":832},[167,167363,5136],{"class":731},[167,167365,153740],{"class":512},[167,167367,153063],{"class":177},[167,167369,6475],{"class":512},[167,167371,3764],{"class":731},[167,167373,159428],{"class":184},[167,167375,857],{"class":512},[167,167377,167378],{"class":169,"line":837},[167,167379,167380],{"class":512},"        passed.append(student)\n",[167,167382,167383],{"class":169,"line":842},[167,167384,741],{"emptyLinePlaceholder":740},[167,167386,167387,167389,167391,167393,167395,167397],{"class":169,"line":860},[167,167388,165365],{"class":512},[167,167390,523],{"class":731},[167,167392,165370],{"class":512},[167,167394,2784],{"class":731},[167,167396,9361],{"class":184},[167,167398,166586],{"class":512},[167,167400,167401],{"class":169,"line":876},[167,167402,741],{"emptyLinePlaceholder":740},[167,167404,167405,167407,167409,167411,167413,167415,167417,167419,167421,167423],{"class":169,"line":887},[167,167406,1606],{"class":184},[167,167408,898],{"class":512},[167,167410,2262],{"class":731},[167,167412,165388],{"class":177},[167,167414,3096],{"class":184},[167,167416,165393],{"class":512},[167,167418,158750],{"class":731},[167,167420,3145],{"class":184},[167,167422,2452],{"class":177},[167,167424,873],{"class":512},[167,167426,167427,167429,167431,167433,167436,167438,167441,167443,167445,167447,167449,167451,167453,167455,167457,167459],{"class":169,"line":892},[167,167428,1606],{"class":184},[167,167430,898],{"class":512},[167,167432,2262],{"class":731},[167,167434,167435],{"class":177},"\"最高分学生:",[167,167437,3096],{"class":184},[167,167439,167440],{"class":512},"max_student[",[167,167442,154473],{"class":177},[167,167444,3139],{"class":512},[167,167446,3145],{"class":184},[167,167448,6480],{"class":184},[167,167450,167440],{"class":512},[167,167452,154511],{"class":177},[167,167454,3139],{"class":512},[167,167456,3145],{"class":184},[167,167458,2452],{"class":177},[167,167460,873],{"class":512},[167,167462,167463,167465,167467,167469,167472,167475,167478,167480,167482],{"class":169,"line":907},[167,167464,1606],{"class":184},[167,167466,898],{"class":512},[167,167468,2262],{"class":731},[167,167470,167471],{"class":177},"\"及格人数:",[167,167473,167474],{"class":184},"{len",[167,167476,167477],{"class":512},"(passed)",[167,167479,3145],{"class":184},[167,167481,2452],{"class":177},[167,167483,873],{"class":512},[14,167485,167487],{"id":167486},"_616-易错点","6.16 易错点",[40,167489,167490,167493,167496,167499,167505,167514],{},[43,167491,167492],{},"列表可变，元组和字符串不可变。",[43,167494,167495],{},"切片结束位置不包含。",[43,167497,167498],{},"字典通过 key 取值，不是通过索引。",[43,167500,167501,167502,423],{},"空集合要用 ",[34,167503,167504],{},"set()",[43,167506,105957,167507,167510,167511,423],{},[34,167508,167509],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[34,167512,167513],{},"get()",[43,167515,167516],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167518,167520],{"id":167519},"_617-本章练习","6.17 本章练习",[40,167522,167523,167526,167529,167532,167535],{},[43,167524,167525],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[43,167527,167528],{},"输入一句话，统计每个字符出现次数。",[43,167530,167531],{},"使用集合去除列表中的重复元素。",[43,167533,167534],{},"使用字典保存一个学生的信息，并实现修改成绩。",[43,167536,167537],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2113,167539,167540],{},"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":32,"searchDepth":191,"depth":191,"links":167542},[167543,167544,167545,167546,167547,167548,167549,167550,167551,167552,167553,167554,167555,167556,167557,167558,167559],{"id":164523,"depth":191,"text":164524},{"id":164640,"depth":191,"text":164641},{"id":164730,"depth":191,"text":164731},{"id":164854,"depth":191,"text":164855},{"id":165217,"depth":191,"text":165218},{"id":165404,"depth":191,"text":165405},{"id":165523,"depth":191,"text":165524},{"id":165665,"depth":191,"text":165666},{"id":165852,"depth":191,"text":165853},{"id":166096,"depth":191,"text":166097},{"id":166306,"depth":191,"text":166307},{"id":166391,"depth":191,"text":166392},{"id":166689,"depth":191,"text":166690},{"id":166971,"depth":191,"text":166972},{"id":167163,"depth":191,"text":167164},{"id":167486,"depth":191,"text":167487},{"id":167519,"depth":191,"text":167520},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164515,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167566,"title":167567,"body":167568,"description":25403,"extension":2140,"meta":169740,"navigation":740,"path":169741,"seo":169742,"stem":169743,"__hash__":169744},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167569,"toc":169715},[167570,167573,167577,167580,167660,167663,167684,167687,167691,167694,167756,167759,167776,167780,167783,167828,167830,167838,167842,167845,167927,167930,167933,167958,167961,167984,167988,167991,167993,168055,168058,168060,168111,168115,168119,168125,168230,168234,168240,168311,168315,168318,168386,168389,168469,168473,168479,168515,168518,168521,168631,168637,168641,168644,168716,168719,168723,168727,168732,168794,168798,168803,168871,168875,168880,168996,169000,169003,169083,169086,169090,169093,169197,169199,169214,169217,169221,169359,169367,169371,169373,169384,169386,169644,169648,169680,169684,169712],[10,167571,167567],{"id":167572},"_7-函数进阶",[14,167574,167576],{"id":167575},"_71-多返回值","7.1 多返回值",[19,167578,167579],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,167581,167583],{"className":723,"code":167582,"language":305,"meta":32,"style":32},"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",[34,167584,167585,167594,167602,167610,167619,167626,167630,167634,167643,167649],{"__ignoreMap":32},[167,167586,167587,167589,167592],{"class":169,"line":170},[167,167588,845],{"class":731},[167,167590,167591],{"class":173}," get_info",[167,167593,33957],{"class":512},[167,167595,167596,167598,167600],{"class":169,"line":191},[167,167597,153961],{"class":512},[167,167599,523],{"class":731},[167,167601,150944],{"class":177},[167,167603,167604,167606,167608],{"class":169,"line":205},[167,167605,153977],{"class":512},[167,167607,523],{"class":731},[167,167609,148142],{"class":184},[167,167611,167612,167614,167616],{"class":169,"line":219},[167,167613,153992],{"class":512},[167,167615,523],{"class":731},[167,167617,167618],{"class":184}," 95\n",[167,167620,167621,167623],{"class":169,"line":230},[167,167622,6122],{"class":731},[167,167624,167625],{"class":512}," name, age, score\n",[167,167627,167628],{"class":169,"line":241},[167,167629,741],{"emptyLinePlaceholder":740},[167,167631,167632],{"class":169,"line":261},[167,167633,741],{"emptyLinePlaceholder":740},[167,167635,167636,167638,167640],{"class":169,"line":773},[167,167637,162897],{"class":512},[167,167639,523],{"class":731},[167,167641,167642],{"class":512}," get_info()\n",[167,167644,167645,167647],{"class":169,"line":779},[167,167646,1606],{"class":184},[167,167648,78573],{"class":512},[167,167650,167651,167653,167655,167657],{"class":169,"line":785},[167,167652,1606],{"class":184},[167,167654,898],{"class":512},[167,167656,104698],{"class":184},[167,167658,167659],{"class":512},"(result))\n",[19,167661,167662],{},"可以直接解包：",[26,167664,167666],{"className":723,"code":167665,"language":305,"meta":32,"style":32},"name, age, score = get_info()\nprint(name, age, score)\n",[34,167667,167668,167677],{"__ignoreMap":32},[167,167669,167670,167673,167675],{"class":169,"line":170},[167,167671,167672],{"class":512},"name, age, score ",[167,167674,523],{"class":731},[167,167676,167642],{"class":512},[167,167678,167679,167681],{"class":169,"line":191},[167,167680,1606],{"class":184},[167,167682,167683],{"class":512},"(name, age, score)\n",[19,167685,167686],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167688,167690],{"id":167689},"_72-位置参数","7.2 位置参数",[19,167692,167693],{},"位置参数按顺序传递。",[26,167695,167697],{"className":723,"code":167696,"language":305,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[34,167698,167699,167707,167735,167739,167743],{"__ignoreMap":32},[167,167700,167701,167703,167705],{"class":169,"line":170},[167,167702,845],{"class":731},[167,167704,150963],{"class":173},[167,167706,150966],{"class":512},[167,167708,167709,167711,167713,167715,167717,167719,167721,167723,167725,167727,167729,167731,167733],{"class":169,"line":191},[167,167710,895],{"class":184},[167,167712,898],{"class":512},[167,167714,2262],{"class":731},[167,167716,150977],{"class":177},[167,167718,3096],{"class":184},[167,167720,81797],{"class":512},[167,167722,3145],{"class":184},[167,167724,150986],{"class":177},[167,167726,3096],{"class":184},[167,167728,72209],{"class":512},[167,167730,3145],{"class":184},[167,167732,150995],{"class":177},[167,167734,873],{"class":512},[167,167736,167737],{"class":169,"line":205},[167,167738,741],{"emptyLinePlaceholder":740},[167,167740,167741],{"class":169,"line":219},[167,167742,741],{"emptyLinePlaceholder":740},[167,167744,167745,167748,167750,167752,167754],{"class":169,"line":230},[167,167746,167747],{"class":512},"introduce(",[167,167749,151479],{"class":177},[167,167751,14463],{"class":512},[167,167753,2850],{"class":184},[167,167755,873],{"class":512},[19,167757,167758],{},"顺序错了就会得到错误含义：",[26,167760,167762],{"className":723,"code":167761,"language":305,"meta":32,"style":32},"introduce(18, \"小明\")\n",[34,167763,167764],{"__ignoreMap":32},[167,167765,167766,167768,167770,167772,167774],{"class":169,"line":170},[167,167767,167747],{"class":512},[167,167769,2850],{"class":184},[167,167771,14463],{"class":512},[167,167773,151479],{"class":177},[167,167775,873],{"class":512},[14,167777,167779],{"id":167778},"_73-关键字参数","7.3 关键字参数",[19,167781,167782],{},"关键字参数按参数名传递。",[26,167784,167786],{"className":723,"code":167785,"language":305,"meta":32,"style":32},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[34,167787,167788,167808],{"__ignoreMap":32},[167,167789,167790,167792,167794,167796,167798,167800,167802,167804,167806],{"class":169,"line":170},[167,167791,167747],{"class":512},[167,167793,81797],{"class":7246},[167,167795,523],{"class":731},[167,167797,151479],{"class":177},[167,167799,14463],{"class":512},[167,167801,72209],{"class":7246},[167,167803,523],{"class":731},[167,167805,2850],{"class":184},[167,167807,873],{"class":512},[167,167809,167810,167812,167814,167816,167818,167820,167822,167824,167826],{"class":169,"line":191},[167,167811,167747],{"class":512},[167,167813,72209],{"class":7246},[167,167815,523],{"class":731},[167,167817,2850],{"class":184},[167,167819,14463],{"class":512},[167,167821,81797],{"class":7246},[167,167823,523],{"class":731},[167,167825,151479],{"class":177},[167,167827,873],{"class":512},[19,167829,119525],{},[40,167831,167832,167835],{},[43,167833,167834],{},"顺序不容易错。",[43,167836,167837],{},"调用时可读性更强。",[14,167839,167841],{"id":167840},"_74-默认参数","7.4 默认参数",[19,167843,167844],{},"默认参数给参数设置默认值。",[26,167846,167848],{"className":723,"code":167847,"language":305,"meta":32,"style":32},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[34,167849,167850,167866,167896,167900,167904,167914],{"__ignoreMap":32},[167,167851,167852,167854,167856,167859,167861,167864],{"class":169,"line":170},[167,167853,845],{"class":731},[167,167855,123684],{"class":173},[167,167857,167858],{"class":512},"(host, port",[167,167860,523],{"class":731},[167,167862,167863],{"class":184},"3306",[167,167865,984],{"class":512},[167,167867,167868,167870,167872,167874,167877,167879,167881,167883,167885,167887,167890,167892,167894],{"class":169,"line":191},[167,167869,895],{"class":184},[167,167871,898],{"class":512},[167,167873,2262],{"class":731},[167,167875,167876],{"class":177},"\"连接",[167,167878,3096],{"class":184},[167,167880,29412],{"class":512},[167,167882,3145],{"class":184},[167,167884,3059],{"class":177},[167,167886,3096],{"class":184},[167,167888,167889],{"class":512},"port",[167,167891,3145],{"class":184},[167,167893,2452],{"class":177},[167,167895,873],{"class":512},[167,167897,167898],{"class":169,"line":205},[167,167899,741],{"emptyLinePlaceholder":740},[167,167901,167902],{"class":169,"line":219},[167,167903,741],{"emptyLinePlaceholder":740},[167,167905,167906,167909,167912],{"class":169,"line":230},[167,167907,167908],{"class":512},"connect(",[167,167910,167911],{"class":177},"\"localhost\"",[167,167913,873],{"class":512},[167,167915,167916,167918,167920,167922,167925],{"class":169,"line":241},[167,167917,167908],{"class":512},[167,167919,167911],{"class":177},[167,167921,14463],{"class":512},[167,167923,167924],{"class":184},"6379",[167,167926,873],{"class":512},[19,167928,167929],{},"注意：默认参数必须放在非默认参数后面。",[19,167931,167932],{},"错误：",[26,167934,167936],{"className":723,"code":167935,"language":305,"meta":32,"style":32},"def connect(port=3306, host):\n    pass\n",[34,167937,167938,167954],{"__ignoreMap":32},[167,167939,167940,167942,167944,167947,167949,167951],{"class":169,"line":170},[167,167941,845],{"class":731},[167,167943,123684],{"class":173},[167,167945,167946],{"class":512},"(port",[167,167948,523],{"class":731},[167,167950,167863],{"class":184},[167,167952,167953],{"class":512},", host):\n",[167,167955,167956],{"class":169,"line":191},[167,167957,151128],{"class":731},[19,167959,167960],{},"正确：",[26,167962,167964],{"className":723,"code":167963,"language":305,"meta":32,"style":32},"def connect(host, port=3306):\n    pass\n",[34,167965,167966,167980],{"__ignoreMap":32},[167,167967,167968,167970,167972,167974,167976,167978],{"class":169,"line":170},[167,167969,845],{"class":731},[167,167971,123684],{"class":173},[167,167973,167858],{"class":512},[167,167975,523],{"class":731},[167,167977,167863],{"class":184},[167,167979,984],{"class":512},[167,167981,167982],{"class":169,"line":191},[167,167983,151128],{"class":731},[14,167985,167987],{"id":167986},"_75-默认参数的坑","7.5 默认参数的坑",[19,167989,167990],{},"不要使用可变对象作为默认参数。",[19,167992,159214],{},[26,167994,167996],{"className":723,"code":167995,"language":305,"meta":32,"style":32},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[34,167997,167998,168013,168018,168025,168029,168033,168044],{"__ignoreMap":32},[167,167999,168000,168002,168005,168008,168010],{"class":169,"line":170},[167,168001,845],{"class":731},[167,168003,168004],{"class":173}," add_item",[167,168006,168007],{"class":512},"(item, items",[167,168009,523],{"class":731},[167,168011,168012],{"class":512},"[]):\n",[167,168014,168015],{"class":169,"line":191},[167,168016,168017],{"class":512},"    items.append(item)\n",[167,168019,168020,168022],{"class":169,"line":205},[167,168021,6122],{"class":731},[167,168023,168024],{"class":512}," items\n",[167,168026,168027],{"class":169,"line":219},[167,168028,741],{"emptyLinePlaceholder":740},[167,168030,168031],{"class":169,"line":230},[167,168032,741],{"emptyLinePlaceholder":740},[167,168034,168035,168037,168040,168042],{"class":169,"line":241},[167,168036,1606],{"class":184},[167,168038,168039],{"class":512},"(add_item(",[167,168041,166916],{"class":177},[167,168043,32505],{"class":512},[167,168045,168046,168048,168050,168053],{"class":169,"line":261},[167,168047,1606],{"class":184},[167,168049,168039],{"class":512},[167,168051,168052],{"class":177},"\"b\"",[167,168054,32505],{"class":512},[19,168056,168057],{},"第二次调用会复用第一次的列表。",[19,168059,157479],{},[26,168061,168063],{"className":723,"code":168062,"language":305,"meta":32,"style":32},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[34,168064,168065,168079,168092,168101,168105],{"__ignoreMap":32},[167,168066,168067,168069,168071,168073,168075,168077],{"class":169,"line":170},[167,168068,845],{"class":731},[167,168070,168004],{"class":173},[167,168072,168007],{"class":512},[167,168074,523],{"class":731},[167,168076,854],{"class":184},[167,168078,984],{"class":512},[167,168080,168081,168083,168086,168088,168090],{"class":169,"line":191},[167,168082,5136],{"class":731},[167,168084,168085],{"class":512}," items ",[167,168087,40928],{"class":731},[167,168089,40934],{"class":184},[167,168091,857],{"class":512},[167,168093,168094,168097,168099],{"class":169,"line":205},[167,168095,168096],{"class":512},"        items ",[167,168098,523],{"class":731},[167,168100,53834],{"class":512},[167,168102,168103],{"class":169,"line":219},[167,168104,168017],{"class":512},[167,168106,168107,168109],{"class":169,"line":230},[167,168108,6122],{"class":731},[167,168110,168024],{"class":512},[14,168112,168114],{"id":168113},"_76-不定长参数","7.6 不定长参数",[494,168116,168118],{"id":168117},"_761-args","7.6.1 *args",[19,168120,168121,168124],{},[34,168122,168123],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,168126,168128],{"className":723,"code":168127,"language":305,"meta":32,"style":32},"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",[34,168129,168130,168143,168151,168162,168171,168177,168181,168185,168204],{"__ignoreMap":32},[167,168131,168132,168134,168136,168138,168140],{"class":169,"line":170},[167,168133,845],{"class":731},[167,168135,7239],{"class":173},[167,168137,898],{"class":512},[167,168139,2655],{"class":731},[167,168141,168142],{"class":512},"args):\n",[167,168144,168145,168147,168149],{"class":169,"line":191},[167,168146,160898],{"class":512},[167,168148,523],{"class":731},[167,168150,49333],{"class":184},[167,168152,168153,168155,168157,168159],{"class":169,"line":205},[167,168154,967],{"class":731},[167,168156,157771],{"class":512},[167,168158,973],{"class":731},[167,168160,168161],{"class":512}," args:\n",[167,168163,168164,168166,168168],{"class":169,"line":219},[167,168165,161573],{"class":512},[167,168167,11505],{"class":731},[167,168169,168170],{"class":512}," num\n",[167,168172,168173,168175],{"class":169,"line":230},[167,168174,6122],{"class":731},[167,168176,163878],{"class":512},[167,168178,168179],{"class":169,"line":241},[167,168180,741],{"emptyLinePlaceholder":740},[167,168182,168183],{"class":169,"line":261},[167,168184,741],{"emptyLinePlaceholder":740},[167,168186,168187,168189,168192,168194,168196,168198,168200,168202],{"class":169,"line":773},[167,168188,1606],{"class":184},[167,168190,168191],{"class":512},"(add(",[167,168193,2418],{"class":184},[167,168195,14463],{"class":512},[167,168197,2287],{"class":184},[167,168199,14463],{"class":512},[167,168201,2281],{"class":184},[167,168203,32505],{"class":512},[167,168205,168206,168208,168210,168212,168214,168216,168218,168220,168222,168224,168226,168228],{"class":169,"line":779},[167,168207,1606],{"class":184},[167,168209,168191],{"class":512},[167,168211,2418],{"class":184},[167,168213,14463],{"class":512},[167,168215,2287],{"class":184},[167,168217,14463],{"class":512},[167,168219,2281],{"class":184},[167,168221,14463],{"class":512},[167,168223,2494],{"class":184},[167,168225,14463],{"class":512},[167,168227,2519],{"class":184},[167,168229,32505],{"class":512},[494,168231,168233],{"id":168232},"_762-kwargs","7.6.2 **kwargs",[19,168235,168236,168239],{},[34,168237,168238],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,168241,168243],{"className":723,"code":168242,"language":305,"meta":32,"style":32},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[34,168244,168245,168258,168269,168275,168279,168283],{"__ignoreMap":32},[167,168246,168247,168249,168251,168253,168255],{"class":169,"line":170},[167,168248,845],{"class":731},[167,168250,163536],{"class":173},[167,168252,898],{"class":512},[167,168254,12689],{"class":731},[167,168256,168257],{"class":512},"kwargs):\n",[167,168259,168260,168262,168264,168266],{"class":169,"line":191},[167,168261,967],{"class":731},[167,168263,166376],{"class":512},[167,168265,973],{"class":731},[167,168267,168268],{"class":512}," kwargs.items():\n",[167,168270,168271,168273],{"class":169,"line":205},[167,168272,34454],{"class":184},[167,168274,166388],{"class":512},[167,168276,168277],{"class":169,"line":219},[167,168278,741],{"emptyLinePlaceholder":740},[167,168280,168281],{"class":169,"line":230},[167,168282,741],{"emptyLinePlaceholder":740},[167,168284,168285,168287,168289,168291,168293,168295,168297,168299,168301,168303,168305,168307,168309],{"class":169,"line":241},[167,168286,163601],{"class":512},[167,168288,81797],{"class":7246},[167,168290,523],{"class":731},[167,168292,151479],{"class":177},[167,168294,14463],{"class":512},[167,168296,72209],{"class":7246},[167,168298,523],{"class":731},[167,168300,2850],{"class":184},[167,168302,14463],{"class":512},[167,168304,72260],{"class":7246},[167,168306,523],{"class":731},[167,168308,71257],{"class":177},[167,168310,873],{"class":512},[14,168312,168314],{"id":168313},"_77-参数解包","7.7 参数解包",[19,168316,168317],{},"列表或元组解包为位置参数：",[26,168319,168321],{"className":723,"code":168320,"language":305,"meta":32,"style":32},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[34,168322,168323,168332,168347,168351,168355,168375],{"__ignoreMap":32},[167,168324,168325,168327,168329],{"class":169,"line":170},[167,168326,845],{"class":731},[167,168328,7239],{"class":173},[167,168330,168331],{"class":512},"(a, b, c):\n",[167,168333,168334,168336,168338,168340,168342,168344],{"class":169,"line":191},[167,168335,6122],{"class":731},[167,168337,12897],{"class":512},[167,168339,2681],{"class":731},[167,168341,12910],{"class":512},[167,168343,2681],{"class":731},[167,168345,168346],{"class":512}," c\n",[167,168348,168349],{"class":169,"line":205},[167,168350,741],{"emptyLinePlaceholder":740},[167,168352,168353],{"class":169,"line":219},[167,168354,741],{"emptyLinePlaceholder":740},[167,168356,168357,168359,168361,168363,168365,168367,168369,168371,168373],{"class":169,"line":230},[167,168358,165691],{"class":512},[167,168360,523],{"class":731},[167,168362,54221],{"class":512},[167,168364,2418],{"class":184},[167,168366,14463],{"class":512},[167,168368,2287],{"class":184},[167,168370,14463],{"class":512},[167,168372,2281],{"class":184},[167,168374,35249],{"class":512},[167,168376,168377,168379,168381,168383],{"class":169,"line":241},[167,168378,1606],{"class":184},[167,168380,168191],{"class":512},[167,168382,2655],{"class":731},[167,168384,168385],{"class":512},"nums))\n",[19,168387,168388],{},"字典解包为关键字参数：",[26,168390,168392],{"className":723,"code":168391,"language":305,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[34,168393,168394,168402,168428,168432,168436,168460],{"__ignoreMap":32},[167,168395,168396,168398,168400],{"class":169,"line":170},[167,168397,845],{"class":731},[167,168399,150963],{"class":173},[167,168401,150966],{"class":512},[167,168403,168404,168406,168408,168410,168412,168414,168416,168418,168420,168422,168424,168426],{"class":169,"line":191},[167,168405,895],{"class":184},[167,168407,898],{"class":512},[167,168409,2262],{"class":731},[167,168411,2452],{"class":177},[167,168413,3096],{"class":184},[167,168415,81797],{"class":512},[167,168417,3145],{"class":184},[167,168419,6480],{"class":184},[167,168421,72209],{"class":512},[167,168423,3145],{"class":184},[167,168425,2452],{"class":177},[167,168427,873],{"class":512},[167,168429,168430],{"class":169,"line":205},[167,168431,741],{"emptyLinePlaceholder":740},[167,168433,168434],{"class":169,"line":219},[167,168435,741],{"emptyLinePlaceholder":740},[167,168437,168438,168440,168442,168444,168446,168448,168450,168452,168454,168456,168458],{"class":169,"line":230},[167,168439,117905],{"class":512},[167,168441,523],{"class":731},[167,168443,6480],{"class":512},[167,168445,64668],{"class":177},[167,168447,53435],{"class":512},[167,168449,151479],{"class":177},[167,168451,14463],{"class":512},[167,168453,71113],{"class":177},[167,168455,53435],{"class":512},[167,168457,2850],{"class":184},[167,168459,3630],{"class":512},[167,168461,168462,168464,168466],{"class":169,"line":241},[167,168463,167747],{"class":512},[167,168465,12689],{"class":731},[167,168467,168468],{"class":512},"info)\n",[14,168470,168472],{"id":168471},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168474,168475,168478],{},[34,168476,168477],{},"lambda"," 用于定义简单匿名函数。",[26,168480,168482],{"className":723,"code":168481,"language":305,"meta":32,"style":32},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[34,168483,168484,168501],{"__ignoreMap":32},[167,168485,168486,168489,168491,168494,168497,168499],{"class":169,"line":170},[167,168487,168488],{"class":512},"add ",[167,168490,523],{"class":731},[167,168492,168493],{"class":731}," lambda",[167,168495,168496],{"class":512}," a, b: a ",[167,168498,2681],{"class":731},[167,168500,152695],{"class":512},[167,168502,168503,168505,168507,168509,168511,168513],{"class":169,"line":191},[167,168504,1606],{"class":184},[167,168506,168191],{"class":512},[167,168508,2418],{"class":184},[167,168510,14463],{"class":512},[167,168512,2287],{"class":184},[167,168514,32505],{"class":512},[19,168516,168517],{},"常和排序、过滤等函数一起使用。",[19,168519,168520],{},"按分数排序：",[26,168522,168524],{"className":723,"code":168523,"language":305,"meta":32,"style":32},"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",[34,168525,168526,168534,168554,168574,168594,168598,168602,168625],{"__ignoreMap":32},[167,168527,168528,168530,168532],{"class":169,"line":170},[167,168529,161307],{"class":512},[167,168531,523],{"class":731},[167,168533,57436],{"class":512},[167,168535,168536,168538,168540,168542,168544,168546,168548,168550,168552],{"class":169,"line":191},[167,168537,149976],{"class":512},[167,168539,64668],{"class":177},[167,168541,53435],{"class":512},[167,168543,151479],{"class":177},[167,168545,14463],{"class":512},[167,168547,153063],{"class":177},[167,168549,53435],{"class":512},[167,168551,3188],{"class":184},[167,168553,6962],{"class":512},[167,168555,168556,168558,168560,168562,168564,168566,168568,168570,168572],{"class":169,"line":205},[167,168557,149976],{"class":512},[167,168559,64668],{"class":177},[167,168561,53435],{"class":512},[167,168563,152527],{"class":177},[167,168565,14463],{"class":512},[167,168567,153063],{"class":177},[167,168569,53435],{"class":512},[167,168571,3011],{"class":184},[167,168573,6962],{"class":512},[167,168575,168576,168578,168580,168582,168584,168586,168588,168590,168592],{"class":169,"line":219},[167,168577,149976],{"class":512},[167,168579,64668],{"class":177},[167,168581,53435],{"class":512},[167,168583,161322],{"class":177},[167,168585,14463],{"class":512},[167,168587,153063],{"class":177},[167,168589,53435],{"class":512},[167,168591,2606],{"class":184},[167,168593,6962],{"class":512},[167,168595,168596],{"class":169,"line":230},[167,168597,35249],{"class":512},[167,168599,168600],{"class":169,"line":241},[167,168601,741],{"emptyLinePlaceholder":740},[167,168603,168604,168607,168609,168611,168613,168615,168617,168619,168621,168623],{"class":169,"line":261},[167,168605,168606],{"class":512},"students.sort(",[167,168608,155537],{"class":7246},[167,168610,155540],{"class":731},[167,168612,155543],{"class":512},[167,168614,153063],{"class":177},[167,168616,113793],{"class":512},[167,168618,165119],{"class":7246},[167,168620,523],{"class":731},[167,168622,33481],{"class":184},[167,168624,873],{"class":512},[167,168626,168627,168629],{"class":169,"line":773},[167,168628,1606],{"class":184},[167,168630,166586],{"class":512},[19,168632,168633,168634,168636],{},"如果逻辑复杂，不要硬写 ",[34,168635,168477],{},"，定义普通函数更清晰。",[14,168638,168640],{"id":168639},"_79-函数作为参数","7.9 函数作为参数",[19,168642,168643],{},"函数可以作为参数传给另一个函数。",[26,168645,168647],{"className":723,"code":168646,"language":305,"meta":32,"style":32},"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",[34,168648,168649,168657,168667,168671,168675,168685,168692,168696,168700],{"__ignoreMap":32},[167,168650,168651,168653,168655],{"class":169,"line":170},[167,168652,845],{"class":731},[167,168654,7239],{"class":173},[167,168656,152684],{"class":512},[167,168658,168659,168661,168663,168665],{"class":169,"line":191},[167,168660,6122],{"class":731},[167,168662,12897],{"class":512},[167,168664,2681],{"class":731},[167,168666,152695],{"class":512},[167,168668,168669],{"class":169,"line":205},[167,168670,741],{"emptyLinePlaceholder":740},[167,168672,168673],{"class":169,"line":219},[167,168674,741],{"emptyLinePlaceholder":740},[167,168676,168677,168679,168682],{"class":169,"line":230},[167,168678,845],{"class":731},[167,168680,168681],{"class":173}," calculate",[167,168683,168684],{"class":512},"(a, b, func):\n",[167,168686,168687,168689],{"class":169,"line":241},[167,168688,6122],{"class":731},[167,168690,168691],{"class":512}," func(a, b)\n",[167,168693,168694],{"class":169,"line":261},[167,168695,741],{"emptyLinePlaceholder":740},[167,168697,168698],{"class":169,"line":773},[167,168699,741],{"emptyLinePlaceholder":740},[167,168701,168702,168704,168707,168709,168711,168713],{"class":169,"line":779},[167,168703,1606],{"class":184},[167,168705,168706],{"class":512},"(calculate(",[167,168708,2646],{"class":184},[167,168710,14463],{"class":512},[167,168712,2900],{"class":184},[167,168714,168715],{"class":512},", add))\n",[19,168717,168718],{},"这种思想在排序、回调、框架中经常出现。",[14,168720,168722],{"id":168721},"_710-mapfiltersorted","7.10 map、filter、sorted",[494,168724,168726],{"id":168725},"_7101-map","7.10.1 map",[19,168728,168729,168731],{},[34,168730,76032],{}," 对每个元素执行函数。",[26,168733,168735],{"className":723,"code":168734,"language":305,"meta":32,"style":32},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[34,168736,168737,168761,168784],{"__ignoreMap":32},[167,168738,168739,168741,168743,168745,168747,168749,168751,168753,168755,168757,168759],{"class":169,"line":170},[167,168740,165691],{"class":512},[167,168742,523],{"class":731},[167,168744,54221],{"class":512},[167,168746,2418],{"class":184},[167,168748,14463],{"class":512},[167,168750,2287],{"class":184},[167,168752,14463],{"class":512},[167,168754,2281],{"class":184},[167,168756,14463],{"class":512},[167,168758,2494],{"class":184},[167,168760,35249],{"class":512},[167,168762,168763,168765,168767,168770,168772,168774,168777,168779,168781],{"class":169,"line":191},[167,168764,162897],{"class":512},[167,168766,523],{"class":731},[167,168768,168769],{"class":184}," map",[167,168771,898],{"class":512},[167,168773,168477],{"class":731},[167,168775,168776],{"class":512}," x: x ",[167,168778,2655],{"class":731},[167,168780,16782],{"class":184},[167,168782,168783],{"class":512},", nums)\n",[167,168785,168786,168788,168790,168792],{"class":169,"line":205},[167,168787,1606],{"class":184},[167,168789,898],{"class":512},[167,168791,155661],{"class":184},[167,168793,167659],{"class":512},[494,168795,168797],{"id":168796},"_7102-filter","7.10.2 filter",[19,168799,168800,168802],{},[34,168801,82038],{}," 保留满足条件的元素。",[26,168804,168806],{"className":723,"code":168805,"language":305,"meta":32,"style":32},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[34,168807,168808,168836,168861],{"__ignoreMap":32},[167,168809,168810,168812,168814,168816,168818,168820,168822,168824,168826,168828,168830,168832,168834],{"class":169,"line":170},[167,168811,165691],{"class":512},[167,168813,523],{"class":731},[167,168815,54221],{"class":512},[167,168817,2418],{"class":184},[167,168819,14463],{"class":512},[167,168821,2287],{"class":184},[167,168823,14463],{"class":512},[167,168825,2281],{"class":184},[167,168827,14463],{"class":512},[167,168829,2494],{"class":184},[167,168831,14463],{"class":512},[167,168833,2519],{"class":184},[167,168835,35249],{"class":512},[167,168837,168838,168840,168842,168845,168847,168849,168851,168853,168855,168857,168859],{"class":169,"line":191},[167,168839,162897],{"class":512},[167,168841,523],{"class":731},[167,168843,168844],{"class":184}," filter",[167,168846,898],{"class":512},[167,168848,168477],{"class":731},[167,168850,168776],{"class":512},[167,168852,2528],{"class":731},[167,168854,16782],{"class":184},[167,168856,1041],{"class":731},[167,168858,6125],{"class":184},[167,168860,168783],{"class":512},[167,168862,168863,168865,168867,168869],{"class":169,"line":205},[167,168864,1606],{"class":184},[167,168866,898],{"class":512},[167,168868,155661],{"class":184},[167,168870,167659],{"class":512},[494,168872,168874],{"id":168873},"_7103-sorted","7.10.3 sorted",[19,168876,168877,168879],{},[34,168878,166827],{}," 返回排序后的新列表。",[26,168881,168883],{"className":723,"code":168882,"language":305,"meta":32,"style":32},"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",[34,168884,168885,168893,168913,168933,168953,168957,168961,168990],{"__ignoreMap":32},[167,168886,168887,168889,168891],{"class":169,"line":170},[167,168888,161307],{"class":512},[167,168890,523],{"class":731},[167,168892,57436],{"class":512},[167,168894,168895,168897,168899,168901,168903,168905,168907,168909,168911],{"class":169,"line":191},[167,168896,149976],{"class":512},[167,168898,64668],{"class":177},[167,168900,53435],{"class":512},[167,168902,151479],{"class":177},[167,168904,14463],{"class":512},[167,168906,153063],{"class":177},[167,168908,53435],{"class":512},[167,168910,3188],{"class":184},[167,168912,6962],{"class":512},[167,168914,168915,168917,168919,168921,168923,168925,168927,168929,168931],{"class":169,"line":205},[167,168916,149976],{"class":512},[167,168918,64668],{"class":177},[167,168920,53435],{"class":512},[167,168922,152527],{"class":177},[167,168924,14463],{"class":512},[167,168926,153063],{"class":177},[167,168928,53435],{"class":512},[167,168930,3011],{"class":184},[167,168932,6962],{"class":512},[167,168934,168935,168937,168939,168941,168943,168945,168947,168949,168951],{"class":169,"line":219},[167,168936,149976],{"class":512},[167,168938,64668],{"class":177},[167,168940,53435],{"class":512},[167,168942,161322],{"class":177},[167,168944,14463],{"class":512},[167,168946,153063],{"class":177},[167,168948,53435],{"class":512},[167,168950,2606],{"class":184},[167,168952,6962],{"class":512},[167,168954,168955],{"class":169,"line":230},[167,168956,35249],{"class":512},[167,168958,168959],{"class":169,"line":241},[167,168960,741],{"emptyLinePlaceholder":740},[167,168962,168963,168965,168967,168969,168972,168974,168976,168978,168980,168982,168984,168986,168988],{"class":169,"line":261},[167,168964,162897],{"class":512},[167,168966,523],{"class":731},[167,168968,165195],{"class":184},[167,168970,168971],{"class":512},"(students, ",[167,168973,155537],{"class":7246},[167,168975,155540],{"class":731},[167,168977,155543],{"class":512},[167,168979,153063],{"class":177},[167,168981,113793],{"class":512},[167,168983,165119],{"class":7246},[167,168985,523],{"class":731},[167,168987,33481],{"class":184},[167,168989,873],{"class":512},[167,168991,168992,168994],{"class":169,"line":773},[167,168993,1606],{"class":184},[167,168995,78573],{"class":512},[14,168997,168999],{"id":168998},"_711-闭包入门","7.11 闭包入门",[19,169001,169002],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,169004,169006],{"className":723,"code":169005,"language":305,"meta":32,"style":32},"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",[34,169007,169008,169018,169028,169039,169043,169050,169054,169058,169072],{"__ignoreMap":32},[167,169009,169010,169012,169015],{"class":169,"line":170},[167,169011,845],{"class":731},[167,169013,169014],{"class":173}," outer",[167,169016,169017],{"class":512},"(base):\n",[167,169019,169020,169022,169025],{"class":169,"line":191},[167,169021,32808],{"class":731},[167,169023,169024],{"class":173}," inner",[167,169026,169027],{"class":512},"(num):\n",[167,169029,169030,169032,169035,169037],{"class":169,"line":205},[167,169031,16779],{"class":731},[167,169033,169034],{"class":512}," base ",[167,169036,2681],{"class":731},[167,169038,168170],{"class":512},[167,169040,169041],{"class":169,"line":219},[167,169042,741],{"emptyLinePlaceholder":740},[167,169044,169045,169047],{"class":169,"line":230},[167,169046,6122],{"class":731},[167,169048,169049],{"class":512}," inner\n",[167,169051,169052],{"class":169,"line":241},[167,169053,741],{"emptyLinePlaceholder":740},[167,169055,169056],{"class":169,"line":261},[167,169057,741],{"emptyLinePlaceholder":740},[167,169059,169060,169063,169065,169068,169070],{"class":169,"line":773},[167,169061,169062],{"class":512},"add_10 ",[167,169064,523],{"class":731},[167,169066,169067],{"class":512}," outer(",[167,169069,2646],{"class":184},[167,169071,873],{"class":512},[167,169073,169074,169076,169079,169081],{"class":169,"line":779},[167,169075,1606],{"class":184},[167,169077,169078],{"class":512},"(add_10(",[167,169080,2519],{"class":184},[167,169082,32505],{"class":512},[19,169084,169085],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169087,169089],{"id":169088},"_712-装饰器入门","7.12 装饰器入门",[19,169091,169092],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,169094,169096],{"className":723,"code":169095,"language":305,"meta":32,"style":32},"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",[34,169097,169098,169107,169116,169127,169132,169143,169147,169154,169158,169162,169167,169175,169185,169189,169193],{"__ignoreMap":32},[167,169099,169100,169102,169104],{"class":169,"line":170},[167,169101,845],{"class":731},[167,169103,89177],{"class":173},[167,169105,169106],{"class":512},"(func):\n",[167,169108,169109,169111,169114],{"class":169,"line":191},[167,169110,32808],{"class":731},[167,169112,169113],{"class":173}," wrapper",[167,169115,33957],{"class":512},[167,169117,169118,169120,169122,169125],{"class":169,"line":205},[167,169119,34454],{"class":184},[167,169121,898],{"class":512},[167,169123,169124],{"class":177},"\"函数开始执行\"",[167,169126,873],{"class":512},[167,169128,169129],{"class":169,"line":219},[167,169130,169131],{"class":512},"        func()\n",[167,169133,169134,169136,169138,169141],{"class":169,"line":230},[167,169135,34454],{"class":184},[167,169137,898],{"class":512},[167,169139,169140],{"class":177},"\"函数执行结束\"",[167,169142,873],{"class":512},[167,169144,169145],{"class":169,"line":241},[167,169146,741],{"emptyLinePlaceholder":740},[167,169148,169149,169151],{"class":169,"line":261},[167,169150,6122],{"class":731},[167,169152,169153],{"class":512}," wrapper\n",[167,169155,169156],{"class":169,"line":773},[167,169157,741],{"emptyLinePlaceholder":740},[167,169159,169160],{"class":169,"line":779},[167,169161,741],{"emptyLinePlaceholder":740},[167,169163,169164],{"class":169,"line":785},[167,169165,169166],{"class":173},"@log\n",[167,169168,169169,169171,169173],{"class":169,"line":790},[167,169170,845],{"class":731},[167,169172,162587],{"class":173},[167,169174,33957],{"class":512},[167,169176,169177,169179,169181,169183],{"class":169,"line":796},[167,169178,895],{"class":184},[167,169180,898],{"class":512},[167,169182,7874],{"class":177},[167,169184,873],{"class":512},[167,169186,169187],{"class":169,"line":802},[167,169188,741],{"emptyLinePlaceholder":740},[167,169190,169191],{"class":169,"line":808},[167,169192,741],{"emptyLinePlaceholder":740},[167,169194,169195],{"class":169,"line":814},[167,169196,162622],{"class":512},[19,169198,159865],{},[26,169200,169202],{"className":723,"code":169201,"language":305,"meta":32,"style":32},"say_hello = log(say_hello)\n",[34,169203,169204],{"__ignoreMap":32},[167,169205,169206,169209,169211],{"class":169,"line":170},[167,169207,169208],{"class":512},"say_hello ",[167,169210,523],{"class":731},[167,169212,169213],{"class":512}," log(say_hello)\n",[19,169215,169216],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169218,169220],{"id":169219},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,169222,169224],{"className":723,"code":169223,"language":305,"meta":32,"style":32},"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",[34,169225,169226,169234,169251,169261,169280,169290,169297,169301,169307,169311,169315,169319,169327,169337,169341,169345],{"__ignoreMap":32},[167,169227,169228,169230,169232],{"class":169,"line":170},[167,169229,845],{"class":731},[167,169231,89177],{"class":173},[167,169233,169106],{"class":512},[167,169235,169236,169238,169240,169242,169244,169247,169249],{"class":169,"line":191},[167,169237,32808],{"class":731},[167,169239,169113],{"class":173},[167,169241,898],{"class":512},[167,169243,2655],{"class":731},[167,169245,169246],{"class":512},"args, ",[167,169248,12689],{"class":731},[167,169250,168257],{"class":512},[167,169252,169253,169255,169257,169259],{"class":169,"line":205},[167,169254,34454],{"class":184},[167,169256,898],{"class":512},[167,169258,169124],{"class":177},[167,169260,873],{"class":512},[167,169262,169263,169266,169268,169271,169273,169275,169277],{"class":169,"line":219},[167,169264,169265],{"class":512},"        result ",[167,169267,523],{"class":731},[167,169269,169270],{"class":512}," func(",[167,169272,2655],{"class":731},[167,169274,169246],{"class":512},[167,169276,12689],{"class":731},[167,169278,169279],{"class":512},"kwargs)\n",[167,169281,169282,169284,169286,169288],{"class":169,"line":230},[167,169283,34454],{"class":184},[167,169285,898],{"class":512},[167,169287,169140],{"class":177},[167,169289,873],{"class":512},[167,169291,169292,169294],{"class":169,"line":241},[167,169293,16779],{"class":731},[167,169295,169296],{"class":512}," result\n",[167,169298,169299],{"class":169,"line":261},[167,169300,741],{"emptyLinePlaceholder":740},[167,169302,169303,169305],{"class":169,"line":773},[167,169304,6122],{"class":731},[167,169306,169153],{"class":512},[167,169308,169309],{"class":169,"line":779},[167,169310,741],{"emptyLinePlaceholder":740},[167,169312,169313],{"class":169,"line":785},[167,169314,741],{"emptyLinePlaceholder":740},[167,169316,169317],{"class":169,"line":790},[167,169318,169166],{"class":173},[167,169320,169321,169323,169325],{"class":169,"line":796},[167,169322,845],{"class":731},[167,169324,7239],{"class":173},[167,169326,152684],{"class":512},[167,169328,169329,169331,169333,169335],{"class":169,"line":802},[167,169330,6122],{"class":731},[167,169332,12897],{"class":512},[167,169334,2681],{"class":731},[167,169336,152695],{"class":512},[167,169338,169339],{"class":169,"line":808},[167,169340,741],{"emptyLinePlaceholder":740},[167,169342,169343],{"class":169,"line":814},[167,169344,741],{"emptyLinePlaceholder":740},[167,169346,169347,169349,169351,169353,169355,169357],{"class":169,"line":820},[167,169348,1606],{"class":184},[167,169350,168191],{"class":512},[167,169352,2646],{"class":184},[167,169354,14463],{"class":512},[167,169356,2900],{"class":184},[167,169358,32505],{"class":512},[19,169360,169361,169362,429,169364,169366],{},"这个写法使用 ",[34,169363,168123],{},[34,169365,168238],{}," 接收原函数的所有参数。",[14,169368,169370],{"id":169369},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169372,124883],{},[40,169374,169375,169378,169381],{},[43,169376,169377],{},"给定一组学生数据。",[43,169379,169380],{},"封装函数，根据传入规则筛选学生。",[43,169382,169383],{},"筛选及格、优秀、未成年学生。",[19,169385,12063],{},[26,169387,169389],{"className":723,"code":169388,"language":305,"meta":32,"style":32},"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",[34,169390,169391,169399,169427,169455,169483,169487,169491,169495,169505,169513,169523,169530,169535,169541,169545,169549,169573,169596,169619,169623,169630,169637],{"__ignoreMap":32},[167,169392,169393,169395,169397],{"class":169,"line":170},[167,169394,161307],{"class":512},[167,169396,523],{"class":731},[167,169398,57436],{"class":512},[167,169400,169401,169403,169405,169407,169409,169411,169413,169415,169417,169419,169421,169423,169425],{"class":169,"line":191},[167,169402,149976],{"class":512},[167,169404,64668],{"class":177},[167,169406,53435],{"class":512},[167,169408,151479],{"class":177},[167,169410,14463],{"class":512},[167,169412,71113],{"class":177},[167,169414,53435],{"class":512},[167,169416,2850],{"class":184},[167,169418,14463],{"class":512},[167,169420,153063],{"class":177},[167,169422,53435],{"class":512},[167,169424,3188],{"class":184},[167,169426,6962],{"class":512},[167,169428,169429,169431,169433,169435,169437,169439,169441,169443,169445,169447,169449,169451,169453],{"class":169,"line":205},[167,169430,149976],{"class":512},[167,169432,64668],{"class":177},[167,169434,53435],{"class":512},[167,169436,152527],{"class":177},[167,169438,14463],{"class":512},[167,169440,71113],{"class":177},[167,169442,53435],{"class":512},[167,169444,2825],{"class":184},[167,169446,14463],{"class":512},[167,169448,153063],{"class":177},[167,169450,53435],{"class":512},[167,169452,3011],{"class":184},[167,169454,6962],{"class":512},[167,169456,169457,169459,169461,169463,169465,169467,169469,169471,169473,169475,169477,169479,169481],{"class":169,"line":219},[167,169458,149976],{"class":512},[167,169460,64668],{"class":177},[167,169462,53435],{"class":512},[167,169464,161322],{"class":177},[167,169466,14463],{"class":512},[167,169468,71113],{"class":177},[167,169470,53435],{"class":512},[167,169472,2875],{"class":184},[167,169474,14463],{"class":512},[167,169476,153063],{"class":177},[167,169478,53435],{"class":512},[167,169480,3082],{"class":184},[167,169482,6962],{"class":512},[167,169484,169485],{"class":169,"line":230},[167,169486,35249],{"class":512},[167,169488,169489],{"class":169,"line":241},[167,169490,741],{"emptyLinePlaceholder":740},[167,169492,169493],{"class":169,"line":261},[167,169494,741],{"emptyLinePlaceholder":740},[167,169496,169497,169499,169502],{"class":169,"line":773},[167,169498,845],{"class":731},[167,169500,169501],{"class":173}," filter_students",[167,169503,169504],{"class":512},"(students, condition):\n",[167,169506,169507,169509,169511],{"class":169,"line":779},[167,169508,162814],{"class":512},[167,169510,523],{"class":731},[167,169512,53834],{"class":512},[167,169514,169515,169517,169519,169521],{"class":169,"line":785},[167,169516,967],{"class":731},[167,169518,153728],{"class":512},[167,169520,973],{"class":731},[167,169522,153733],{"class":512},[167,169524,169525,169527],{"class":169,"line":790},[167,169526,4540],{"class":731},[167,169528,169529],{"class":512}," condition(student):\n",[167,169531,169532],{"class":169,"line":796},[167,169533,169534],{"class":512},"            result.append(student)\n",[167,169536,169537,169539],{"class":169,"line":802},[167,169538,6122],{"class":731},[167,169540,169296],{"class":512},[167,169542,169543],{"class":169,"line":808},[167,169544,741],{"emptyLinePlaceholder":740},[167,169546,169547],{"class":169,"line":814},[167,169548,741],{"emptyLinePlaceholder":740},[167,169550,169551,169553,169555,169558,169560,169563,169565,169567,169569,169571],{"class":169,"line":820},[167,169552,167292],{"class":512},[167,169554,523],{"class":731},[167,169556,169557],{"class":512}," filter_students(students, ",[167,169559,168477],{"class":731},[167,169561,169562],{"class":512}," s: s[",[167,169564,153063],{"class":177},[167,169566,6475],{"class":512},[167,169568,3764],{"class":731},[167,169570,159428],{"class":184},[167,169572,873],{"class":512},[167,169574,169575,169578,169580,169582,169584,169586,169588,169590,169592,169594],{"class":169,"line":826},[167,169576,169577],{"class":512},"excellent ",[167,169579,523],{"class":731},[167,169581,169557],{"class":512},[167,169583,168477],{"class":731},[167,169585,169562],{"class":512},[167,169587,153063],{"class":177},[167,169589,6475],{"class":512},[167,169591,3764],{"class":731},[167,169593,159379],{"class":184},[167,169595,873],{"class":512},[167,169597,169598,169601,169603,169605,169607,169609,169611,169613,169615,169617],{"class":169,"line":832},[167,169599,169600],{"class":512},"under_age ",[167,169602,523],{"class":731},[167,169604,169557],{"class":512},[167,169606,168477],{"class":731},[167,169608,169562],{"class":512},[167,169610,71113],{"class":177},[167,169612,6475],{"class":512},[167,169614,513],{"class":731},[167,169616,157876],{"class":184},[167,169618,873],{"class":512},[167,169620,169621],{"class":169,"line":837},[167,169622,741],{"emptyLinePlaceholder":740},[167,169624,169625,169627],{"class":169,"line":842},[167,169626,1606],{"class":184},[167,169628,169629],{"class":512},"(passed)\n",[167,169631,169632,169634],{"class":169,"line":860},[167,169633,1606],{"class":184},[167,169635,169636],{"class":512},"(excellent)\n",[167,169638,169639,169641],{"class":169,"line":876},[167,169640,1606],{"class":184},[167,169642,169643],{"class":512},"(under_age)\n",[14,169645,169647],{"id":169646},"_715-易错点","7.15 易错点",[40,169649,169650,169653,169661,169666,169677],{},[43,169651,169652],{},"默认参数不要写可变对象。",[43,169654,169655,169657,169658,169660],{},[34,169656,168123],{}," 是元组，",[34,169659,168238],{}," 是字典。",[43,169662,169663,169665],{},[34,169664,168477],{}," 只适合简单表达式。",[43,169667,169668,429,169670,169672,169673,169676],{},[34,169669,76032],{},[34,169671,82038],{}," 的结果是迭代器，常用 ",[34,169674,169675],{},"list()"," 转换查看。",[43,169678,169679],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169681,169683],{"id":169682},"_716-本章练习","7.16 本章练习",[40,169685,169686,169693,169699,169704,169709],{},[43,169687,169688,169689,169692],{},"写函数 ",[34,169690,169691],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[43,169694,169688,169695,169698],{},[34,169696,169697],{},"print_user(**kwargs)","，输出用户所有字段。",[43,169700,105957,169701,169703],{},[34,169702,168477],{}," 对学生列表按年龄排序。",[43,169705,105957,169706,169708],{},[34,169707,82038],{}," 找出成绩不及格的学生。",[43,169710,169711],{},"写一个装饰器，统计函数执行前后的提示信息。",[2113,169713,169714],{},"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":32,"searchDepth":191,"depth":191,"links":169716},[169717,169718,169719,169720,169721,169722,169726,169727,169728,169729,169734,169735,169736,169737,169738,169739],{"id":167575,"depth":191,"text":167576},{"id":167689,"depth":191,"text":167690},{"id":167778,"depth":191,"text":167779},{"id":167840,"depth":191,"text":167841},{"id":167986,"depth":191,"text":167987},{"id":168113,"depth":191,"text":168114,"children":169723},[169724,169725],{"id":168117,"depth":205,"text":168118},{"id":168232,"depth":205,"text":168233},{"id":168313,"depth":191,"text":168314},{"id":168471,"depth":191,"text":168472},{"id":168639,"depth":191,"text":168640},{"id":168721,"depth":191,"text":168722,"children":169730},[169731,169732,169733],{"id":168725,"depth":205,"text":168726},{"id":168796,"depth":205,"text":168797},{"id":168873,"depth":205,"text":168874},{"id":168998,"depth":191,"text":168999},{"id":169088,"depth":191,"text":169089},{"id":169219,"depth":191,"text":169220},{"id":169369,"depth":191,"text":169370},{"id":169646,"depth":191,"text":169647},{"id":169682,"depth":191,"text":169683},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167567,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169746,"title":169747,"body":169748,"description":25403,"extension":2140,"meta":172267,"navigation":740,"path":172268,"seo":172269,"stem":172270,"__hash__":172271},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169749,"toc":172242},[169750,169753,169757,169760,169763,169794,169798,169802,169805,169832,169836,169839,169890,169893,169908,169911,169946,169950,169952,169976,169979,170039,170043,170047,170050,170107,170110,170130,170134,170137,170200,170204,170207,170263,170270,170294,170298,170301,170364,170368,170373,170424,170427,170431,170436,170503,170506,170588,170592,170597,170648,170651,170655,170658,170661,170669,170672,170718,170721,170767,170771,170777,170821,170824,170870,170873,170913,170916,170977,170981,170984,171074,171077,171219,171222,171289,171293,171296,171299,171440,171443,171521,171524,171700,171704,171706,171717,171719,171918,171922,172166,172170,172204,172208,172239],[10,169751,169747],{"id":169752},"_8-文件操作",[14,169754,169756],{"id":169755},"_81-文件操作的意义","8.1 文件操作的意义",[19,169758,169759],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169761,169762],{},"常见文件类型：",[40,169764,169765,169771,169777,169783,169789],{},[43,169766,169767,169770],{},[34,169768,169769],{},".txt","：普通文本。",[43,169772,169773,169776],{},[34,169774,169775],{},".csv","：表格文本。",[43,169778,169779,169782],{},[34,169780,169781],{},".json","：结构化数据。",[43,169784,169785,169788],{},[34,169786,169787],{},".log","：日志文件。",[43,169790,169791,169793],{},[34,169792,147943],{},"：Python 源代码。",[14,169795,169797],{"id":169796},"_82-路径","8.2 路径",[494,169799,169801],{"id":169800},"_821-相对路径","8.2.1 相对路径",[19,169803,169804],{},"相对当前运行目录：",[26,169806,169808],{"className":723,"code":169807,"language":305,"meta":32,"style":32},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[34,169809,169810],{"__ignoreMap":32},[167,169811,169812,169814,169816,169818,169820,169822,169824,169826,169828,169830],{"class":169,"line":170},[167,169813,88901],{"class":184},[167,169815,898],{"class":512},[167,169817,148387],{"class":177},[167,169819,14463],{"class":512},[167,169821,148392],{"class":177},[167,169823,14463],{"class":512},[167,169825,148397],{"class":7246},[167,169827,523],{"class":731},[167,169829,148402],{"class":177},[167,169831,873],{"class":512},[494,169833,169835],{"id":169834},"_822-绝对路径","8.2.2 绝对路径",[19,169837,169838],{},"从根目录或盘符开始：",[26,169840,169842],{"className":723,"code":169841,"language":305,"meta":32,"style":32},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[34,169843,169844,169867],{"__ignoreMap":32},[167,169845,169846,169848,169850,169853,169855,169857,169859,169861,169863,169865],{"class":169,"line":170},[167,169847,88901],{"class":184},[167,169849,898],{"class":512},[167,169851,169852],{"class":177},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[167,169854,14463],{"class":512},[167,169856,148392],{"class":177},[167,169858,14463],{"class":512},[167,169860,148397],{"class":7246},[167,169862,523],{"class":731},[167,169864,148402],{"class":177},[167,169866,873],{"class":512},[167,169868,169869,169871,169873,169876,169878,169880,169882,169884,169886,169888],{"class":169,"line":191},[167,169870,88901],{"class":184},[167,169872,898],{"class":512},[167,169874,169875],{"class":177},"\"D:\u002Fdata\u002Fdata.txt\"",[167,169877,14463],{"class":512},[167,169879,148392],{"class":177},[167,169881,14463],{"class":512},[167,169883,148397],{"class":7246},[167,169885,523],{"class":731},[167,169887,148402],{"class":177},[167,169889,873],{"class":512},[19,169891,169892],{},"Windows 路径建议写成：",[26,169894,169896],{"className":723,"code":169895,"language":305,"meta":32,"style":32},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[34,169897,169898],{"__ignoreMap":32},[167,169899,169900,169903,169905],{"class":169,"line":170},[167,169901,169902],{"class":512},"path ",[167,169904,523],{"class":731},[167,169906,169907],{"class":177}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169909,169910],{},"或原始字符串：",[26,169912,169914],{"className":723,"code":169913,"language":305,"meta":32,"style":32},"path = r\"D:\\data\\data.txt\"\n",[34,169915,169916],{"__ignoreMap":32},[167,169917,169918,169920,169922,169924,169926,169929,169932,169935,169937,169939,169941,169944],{"class":169,"line":170},[167,169919,169902],{"class":512},[167,169921,523],{"class":731},[167,169923,19147],{"class":731},[167,169925,2452],{"class":177},[167,169927,169928],{"class":49977},"D:",[167,169930,169931],{"class":184},"\\d",[167,169933,169934],{"class":49977},"ata",[167,169936,169931],{"class":184},[167,169938,169934],{"class":49977},[167,169940,2758],{"class":184},[167,169942,169943],{"class":49977},"txt",[167,169945,27153],{"class":177},[14,169947,169949],{"id":169948},"_83-open函数","8.3 open函数",[19,169951,7213],{},[26,169953,169955],{"className":723,"code":169954,"language":305,"meta":32,"style":32},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[34,169956,169957],{"__ignoreMap":32},[167,169958,169959,169961,169963,169965,169968,169970,169972,169974],{"class":169,"line":170},[167,169960,47354],{"class":7246},[167,169962,753],{"class":731},[167,169964,148382],{"class":184},[167,169966,169967],{"class":512},"(文件路径, 打开模式, ",[167,169969,148397],{"class":7246},[167,169971,523],{"class":731},[167,169973,148402],{"class":177},[167,169975,873],{"class":512},[19,169977,169978],{},"常见模式：",[68,169980,169981,169990],{},[71,169982,169983],{},[74,169984,169985,169988],{},[77,169986,169987],{},"模式",[77,169989,27889],{},[85,169991,169992,170001,170010,170019,170029],{},[74,169993,169994,169998],{},[90,169995,169996],{},[34,169997,2870],{},[90,169999,170000],{},"只读，文件不存在会报错",[74,170002,170003,170007],{},[90,170004,170005],{},[34,170006,2995],{},[90,170008,170009],{},"只写，文件不存在会创建，存在会清空",[74,170011,170012,170016],{},[90,170013,170014],{},[34,170015,2439],{},[90,170017,170018],{},"追加，文件不存在会创建",[74,170020,170021,170026],{},[90,170022,170023],{},[34,170024,170025],{},"rb",[90,170027,170028],{},"二进制只读",[74,170030,170031,170036],{},[90,170032,170033],{},[34,170034,170035],{},"wb",[90,170037,170038],{},"二进制只写",[14,170040,170042],{"id":170041},"_84-读取文件","8.4 读取文件",[494,170044,170046],{"id":170045},"_841-read","8.4.1 read",[19,170048,170049],{},"一次读取全部内容：",[26,170051,170053],{"className":723,"code":170052,"language":305,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[34,170054,170055,170081,170093,170100],{"__ignoreMap":32},[167,170056,170057,170059,170061,170063,170065,170067,170069,170071,170073,170075,170077,170079],{"class":169,"line":170},[167,170058,47354],{"class":7246},[167,170060,753],{"class":731},[167,170062,148382],{"class":184},[167,170064,898],{"class":512},[167,170066,148387],{"class":177},[167,170068,14463],{"class":512},[167,170070,148392],{"class":177},[167,170072,14463],{"class":512},[167,170074,148397],{"class":7246},[167,170076,523],{"class":731},[167,170078,148402],{"class":177},[167,170080,873],{"class":512},[167,170082,170083,170086,170088,170090],{"class":169,"line":191},[167,170084,170085],{"class":512},"content ",[167,170087,523],{"class":731},[167,170089,149744],{"class":7246},[167,170091,170092],{"class":512},".read()\n",[167,170094,170095,170097],{"class":169,"line":205},[167,170096,1606],{"class":184},[167,170098,170099],{"class":512},"(content)\n",[167,170101,170102,170104],{"class":169,"line":219},[167,170103,47354],{"class":7246},[167,170105,170106],{"class":512},".close()\n",[19,170108,170109],{},"可以指定读取字符数：",[26,170111,170113],{"className":723,"code":170112,"language":305,"meta":32,"style":32},"content = file.read(10)\n",[34,170114,170115],{"__ignoreMap":32},[167,170116,170117,170119,170121,170123,170126,170128],{"class":169,"line":170},[167,170118,170085],{"class":512},[167,170120,523],{"class":731},[167,170122,149744],{"class":7246},[167,170124,170125],{"class":512},".read(",[167,170127,2646],{"class":184},[167,170129,873],{"class":512},[494,170131,170133],{"id":170132},"_842-readline","8.4.2 readline",[19,170135,170136],{},"一次读取一行：",[26,170138,170140],{"className":723,"code":170139,"language":305,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[34,170141,170142,170168,170172,170183,170190,170194],{"__ignoreMap":32},[167,170143,170144,170146,170148,170150,170152,170154,170156,170158,170160,170162,170164,170166],{"class":169,"line":170},[167,170145,47354],{"class":7246},[167,170147,753],{"class":731},[167,170149,148382],{"class":184},[167,170151,898],{"class":512},[167,170153,148387],{"class":177},[167,170155,14463],{"class":512},[167,170157,148392],{"class":177},[167,170159,14463],{"class":512},[167,170161,148397],{"class":7246},[167,170163,523],{"class":731},[167,170165,148402],{"class":177},[167,170167,873],{"class":512},[167,170169,170170],{"class":169,"line":191},[167,170171,741],{"emptyLinePlaceholder":740},[167,170173,170174,170176,170178,170180],{"class":169,"line":205},[167,170175,148843],{"class":512},[167,170177,523],{"class":731},[167,170179,149744],{"class":7246},[167,170181,170182],{"class":512},".readline()\n",[167,170184,170185,170187],{"class":169,"line":219},[167,170186,1606],{"class":184},[167,170188,170189],{"class":512},"(line)\n",[167,170191,170192],{"class":169,"line":230},[167,170193,741],{"emptyLinePlaceholder":740},[167,170195,170196,170198],{"class":169,"line":241},[167,170197,47354],{"class":7246},[167,170199,170106],{"class":512},[494,170201,170203],{"id":170202},"_843-readlines","8.4.3 readlines",[19,170205,170206],{},"读取所有行，返回列表：",[26,170208,170210],{"className":723,"code":170209,"language":305,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[34,170211,170212,170238,170250,170257],{"__ignoreMap":32},[167,170213,170214,170216,170218,170220,170222,170224,170226,170228,170230,170232,170234,170236],{"class":169,"line":170},[167,170215,47354],{"class":7246},[167,170217,753],{"class":731},[167,170219,148382],{"class":184},[167,170221,898],{"class":512},[167,170223,148387],{"class":177},[167,170225,14463],{"class":512},[167,170227,148392],{"class":177},[167,170229,14463],{"class":512},[167,170231,148397],{"class":7246},[167,170233,523],{"class":731},[167,170235,148402],{"class":177},[167,170237,873],{"class":512},[167,170239,170240,170243,170245,170247],{"class":169,"line":191},[167,170241,170242],{"class":512},"lines ",[167,170244,523],{"class":731},[167,170246,149744],{"class":7246},[167,170248,170249],{"class":512},".readlines()\n",[167,170251,170252,170254],{"class":169,"line":205},[167,170253,1606],{"class":184},[167,170255,170256],{"class":512},"(lines)\n",[167,170258,170259,170261],{"class":169,"line":219},[167,170260,47354],{"class":7246},[167,170262,170106],{"class":512},[19,170264,170265,170266,170269],{},"每一行通常带有换行符，可以用 ",[34,170267,170268],{},"strip()"," 去掉：",[26,170271,170273],{"className":723,"code":170272,"language":305,"meta":32,"style":32},"for line in lines:\n    print(line.strip())\n",[34,170274,170275,170287],{"__ignoreMap":32},[167,170276,170277,170279,170282,170284],{"class":169,"line":170},[167,170278,1168],{"class":731},[167,170280,170281],{"class":512}," line ",[167,170283,973],{"class":731},[167,170285,170286],{"class":512}," lines:\n",[167,170288,170289,170291],{"class":169,"line":191},[167,170290,895],{"class":184},[167,170292,170293],{"class":512},"(line.strip())\n",[494,170295,170297],{"id":170296},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170299,170300],{},"推荐读取大文件时使用：",[26,170302,170304],{"className":723,"code":170303,"language":305,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[34,170305,170306,170332,170336,170348,170354,170358],{"__ignoreMap":32},[167,170307,170308,170310,170312,170314,170316,170318,170320,170322,170324,170326,170328,170330],{"class":169,"line":170},[167,170309,47354],{"class":7246},[167,170311,753],{"class":731},[167,170313,148382],{"class":184},[167,170315,898],{"class":512},[167,170317,148387],{"class":177},[167,170319,14463],{"class":512},[167,170321,148392],{"class":177},[167,170323,14463],{"class":512},[167,170325,148397],{"class":7246},[167,170327,523],{"class":731},[167,170329,148402],{"class":177},[167,170331,873],{"class":512},[167,170333,170334],{"class":169,"line":191},[167,170335,741],{"emptyLinePlaceholder":740},[167,170337,170338,170340,170342,170344,170346],{"class":169,"line":205},[167,170339,1168],{"class":731},[167,170341,170281],{"class":512},[167,170343,973],{"class":731},[167,170345,149744],{"class":7246},[167,170347,857],{"class":512},[167,170349,170350,170352],{"class":169,"line":219},[167,170351,895],{"class":184},[167,170353,170293],{"class":512},[167,170355,170356],{"class":169,"line":230},[167,170357,741],{"emptyLinePlaceholder":740},[167,170359,170360,170362],{"class":169,"line":241},[167,170361,47354],{"class":7246},[167,170363,170106],{"class":512},[14,170365,170367],{"id":170366},"_85-with语句","8.5 with语句",[19,170369,170370,170372],{},[34,170371,109424],{}," 会自动关闭文件，推荐使用。",[26,170374,170376],{"className":723,"code":170375,"language":305,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[34,170377,170378,170408,170418],{"__ignoreMap":32},[167,170379,170380,170382,170384,170386,170388,170390,170392,170394,170396,170398,170400,170402,170404,170406],{"class":169,"line":170},[167,170381,109424],{"class":731},[167,170383,148382],{"class":184},[167,170385,898],{"class":512},[167,170387,148387],{"class":177},[167,170389,14463],{"class":512},[167,170391,148392],{"class":177},[167,170393,14463],{"class":512},[167,170395,148397],{"class":7246},[167,170397,523],{"class":731},[167,170399,148402],{"class":177},[167,170401,15741],{"class":512},[167,170403,33388],{"class":731},[167,170405,149744],{"class":7246},[167,170407,857],{"class":512},[167,170409,170410,170412,170414,170416],{"class":169,"line":191},[167,170411,148414],{"class":512},[167,170413,523],{"class":731},[167,170415,149744],{"class":7246},[167,170417,170092],{"class":512},[167,170419,170420,170422],{"class":169,"line":205},[167,170421,895],{"class":184},[167,170423,170099],{"class":512},[19,170425,170426],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170428,170430],{"id":170429},"_86-写入文件","8.6 写入文件",[19,170432,170433,170435],{},[34,170434,2995],{}," 模式会清空原文件。",[26,170437,170439],{"className":723,"code":170438,"language":305,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[34,170440,170441,170471,170488],{"__ignoreMap":32},[167,170442,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469],{"class":169,"line":170},[167,170444,109424],{"class":731},[167,170446,148382],{"class":184},[167,170448,898],{"class":512},[167,170450,148387],{"class":177},[167,170452,14463],{"class":512},[167,170454,153567],{"class":177},[167,170456,14463],{"class":512},[167,170458,148397],{"class":7246},[167,170460,523],{"class":731},[167,170462,148402],{"class":177},[167,170464,15741],{"class":512},[167,170466,33388],{"class":731},[167,170468,149744],{"class":7246},[167,170470,857],{"class":512},[167,170472,170473,170476,170479,170482,170484,170486],{"class":169,"line":191},[167,170474,170475],{"class":7246},"    file",[167,170477,170478],{"class":512},".write(",[167,170480,170481],{"class":177},"\"hello",[167,170483,158116],{"class":184},[167,170485,2452],{"class":177},[167,170487,873],{"class":512},[167,170489,170490,170492,170494,170497,170499,170501],{"class":169,"line":205},[167,170491,170475],{"class":7246},[167,170493,170478],{"class":512},[167,170495,170496],{"class":177},"\"python",[167,170498,158116],{"class":184},[167,170500,2452],{"class":177},[167,170502,873],{"class":512},[19,170504,170505],{},"写入多行：",[26,170507,170509],{"className":723,"code":170508,"language":305,"meta":32,"style":32},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[34,170510,170511,170546,170550,170581],{"__ignoreMap":32},[167,170512,170513,170515,170517,170519,170522,170524,170526,170528,170531,170533,170535,170537,170540,170542,170544],{"class":169,"line":170},[167,170514,170242],{"class":512},[167,170516,523],{"class":731},[167,170518,54221],{"class":512},[167,170520,170521],{"class":177},"\"小明,18",[167,170523,158116],{"class":184},[167,170525,2452],{"class":177},[167,170527,14463],{"class":512},[167,170529,170530],{"class":177},"\"小红,17",[167,170532,158116],{"class":184},[167,170534,2452],{"class":177},[167,170536,14463],{"class":512},[167,170538,170539],{"class":177},"\"小刚,19",[167,170541,158116],{"class":184},[167,170543,2452],{"class":177},[167,170545,35249],{"class":512},[167,170547,170548],{"class":169,"line":191},[167,170549,741],{"emptyLinePlaceholder":740},[167,170551,170552,170554,170556,170558,170561,170563,170565,170567,170569,170571,170573,170575,170577,170579],{"class":169,"line":205},[167,170553,109424],{"class":731},[167,170555,148382],{"class":184},[167,170557,898],{"class":512},[167,170559,170560],{"class":177},"\"students.txt\"",[167,170562,14463],{"class":512},[167,170564,153567],{"class":177},[167,170566,14463],{"class":512},[167,170568,148397],{"class":7246},[167,170570,523],{"class":731},[167,170572,148402],{"class":177},[167,170574,15741],{"class":512},[167,170576,33388],{"class":731},[167,170578,149744],{"class":7246},[167,170580,857],{"class":512},[167,170582,170583,170585],{"class":169,"line":219},[167,170584,170475],{"class":7246},[167,170586,170587],{"class":512},".writelines(lines)\n",[14,170589,170591],{"id":170590},"_87-追加文件","8.7 追加文件",[19,170593,170594,170596],{},[34,170595,2439],{}," 模式不会清空原内容，而是在末尾追加。",[26,170598,170600],{"className":723,"code":170599,"language":305,"meta":32,"style":32},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[34,170601,170602,170633],{"__ignoreMap":32},[167,170603,170604,170606,170608,170610,170613,170615,170617,170619,170621,170623,170625,170627,170629,170631],{"class":169,"line":170},[167,170605,109424],{"class":731},[167,170607,148382],{"class":184},[167,170609,898],{"class":512},[167,170611,170612],{"class":177},"\"log.txt\"",[167,170614,14463],{"class":512},[167,170616,166916],{"class":177},[167,170618,14463],{"class":512},[167,170620,148397],{"class":7246},[167,170622,523],{"class":731},[167,170624,148402],{"class":177},[167,170626,15741],{"class":512},[167,170628,33388],{"class":731},[167,170630,149744],{"class":7246},[167,170632,857],{"class":512},[167,170634,170635,170637,170639,170642,170644,170646],{"class":169,"line":191},[167,170636,170475],{"class":7246},[167,170638,170478],{"class":512},[167,170640,170641],{"class":177},"\"程序启动",[167,170643,158116],{"class":184},[167,170645,2452],{"class":177},[167,170647,873],{"class":512},[19,170649,170650],{},"日志类文件常用追加模式。",[14,170652,170654],{"id":170653},"_88-文件编码","8.8 文件编码",[19,170656,170657],{},"编码决定文字如何保存为字节。",[19,170659,170660],{},"常见编码：",[40,170662,170663,170666],{},[43,170664,170665],{},"UTF-8：推荐。",[43,170667,170668],{},"GBK：部分 Windows 中文文件常见。",[19,170670,170671],{},"读取文件乱码时，可以尝试：",[26,170673,170675],{"className":723,"code":170674,"language":305,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[34,170676,170677,170708],{"__ignoreMap":32},[167,170678,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697,170700,170702,170704,170706],{"class":169,"line":170},[167,170680,109424],{"class":731},[167,170682,148382],{"class":184},[167,170684,898],{"class":512},[167,170686,148387],{"class":177},[167,170688,14463],{"class":512},[167,170690,148392],{"class":177},[167,170692,14463],{"class":512},[167,170694,148397],{"class":7246},[167,170696,523],{"class":731},[167,170698,170699],{"class":177},"\"gbk\"",[167,170701,15741],{"class":512},[167,170703,33388],{"class":731},[167,170705,149744],{"class":7246},[167,170707,857],{"class":512},[167,170709,170710,170712,170714,170716],{"class":169,"line":191},[167,170711,148414],{"class":512},[167,170713,523],{"class":731},[167,170715,149744],{"class":7246},[167,170717,170092],{"class":512},[19,170719,170720],{},"写文件时建议统一 UTF-8：",[26,170722,170724],{"className":723,"code":170723,"language":305,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[34,170725,170726,170756],{"__ignoreMap":32},[167,170727,170728,170730,170732,170734,170736,170738,170740,170742,170744,170746,170748,170750,170752,170754],{"class":169,"line":170},[167,170729,109424],{"class":731},[167,170731,148382],{"class":184},[167,170733,898],{"class":512},[167,170735,148387],{"class":177},[167,170737,14463],{"class":512},[167,170739,153567],{"class":177},[167,170741,14463],{"class":512},[167,170743,148397],{"class":7246},[167,170745,523],{"class":731},[167,170747,148402],{"class":177},[167,170749,15741],{"class":512},[167,170751,33388],{"class":731},[167,170753,149744],{"class":7246},[167,170755,857],{"class":512},[167,170757,170758,170760,170762,170765],{"class":169,"line":191},[167,170759,170475],{"class":7246},[167,170761,170478],{"class":512},[167,170763,170764],{"class":177},"\"中文内容\"",[167,170766,873],{"class":512},[14,170768,170770],{"id":170769},"_89-pathlib","8.9 pathlib",[19,170772,170773,170776],{},[34,170774,170775],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,170778,170780],{"className":723,"code":170779,"language":305,"meta":32,"style":32},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[34,170781,170782,170792,170796,170814],{"__ignoreMap":32},[167,170783,170784,170786,170788,170790],{"class":169,"line":170},[167,170785,32745],{"class":731},[167,170787,109902],{"class":512},[167,170789,732],{"class":731},[167,170791,109907],{"class":512},[167,170793,170794],{"class":169,"line":191},[167,170795,741],{"emptyLinePlaceholder":740},[167,170797,170798,170800,170802,170804,170807,170809,170811],{"class":169,"line":205},[167,170799,169902],{"class":512},[167,170801,523],{"class":731},[167,170803,110136],{"class":512},[167,170805,170806],{"class":177},"\"data\"",[167,170808,15741],{"class":512},[167,170810,2784],{"class":731},[167,170812,170813],{"class":177}," \"students.txt\"\n",[167,170815,170816,170818],{"class":169,"line":219},[167,170817,1606],{"class":184},[167,170819,170820],{"class":512},"(path)\n",[19,170822,170823],{},"创建目录：",[26,170825,170827],{"className":723,"code":170826,"language":305,"meta":32,"style":32},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[34,170828,170829,170839,170843,170856],{"__ignoreMap":32},[167,170830,170831,170833,170835,170837],{"class":169,"line":170},[167,170832,32745],{"class":731},[167,170834,109902],{"class":512},[167,170836,732],{"class":731},[167,170838,109907],{"class":512},[167,170840,170841],{"class":169,"line":191},[167,170842,741],{"emptyLinePlaceholder":740},[167,170844,170845,170848,170850,170852,170854],{"class":169,"line":205},[167,170846,170847],{"class":512},"data_dir ",[167,170849,523],{"class":731},[167,170851,110136],{"class":512},[167,170853,170806],{"class":177},[167,170855,873],{"class":512},[167,170857,170858,170861,170864,170866,170868],{"class":169,"line":219},[167,170859,170860],{"class":512},"data_dir.mkdir(",[167,170862,170863],{"class":7246},"exist_ok",[167,170865,523],{"class":731},[167,170867,33481],{"class":184},[167,170869,873],{"class":512},[19,170871,170872],{},"判断文件是否存在：",[26,170874,170876],{"className":723,"code":170875,"language":305,"meta":32,"style":32},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[34,170877,170878,170891,170895,170902],{"__ignoreMap":32},[167,170879,170880,170882,170884,170886,170889],{"class":169,"line":170},[167,170881,169902],{"class":512},[167,170883,523],{"class":731},[167,170885,110136],{"class":512},[167,170887,170888],{"class":177},"\"data\u002Fstudents.txt\"",[167,170890,873],{"class":512},[167,170892,170893],{"class":169,"line":191},[167,170894,741],{"emptyLinePlaceholder":740},[167,170896,170897,170899],{"class":169,"line":205},[167,170898,1035],{"class":731},[167,170900,170901],{"class":512}," path.exists():\n",[167,170903,170904,170906,170908,170911],{"class":169,"line":219},[167,170905,895],{"class":184},[167,170907,898],{"class":512},[167,170909,170910],{"class":177},"\"文件存在\"",[167,170912,873],{"class":512},[19,170914,170915],{},"读写文本：",[26,170917,170919],{"className":723,"code":170918,"language":305,"meta":32,"style":32},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[34,170920,170921,170933,170937,170954,170971],{"__ignoreMap":32},[167,170922,170923,170925,170927,170929,170931],{"class":169,"line":170},[167,170924,169902],{"class":512},[167,170926,523],{"class":731},[167,170928,110136],{"class":512},[167,170930,148387],{"class":177},[167,170932,873],{"class":512},[167,170934,170935],{"class":169,"line":191},[167,170936,741],{"emptyLinePlaceholder":740},[167,170938,170939,170942,170944,170946,170948,170950,170952],{"class":169,"line":205},[167,170940,170941],{"class":512},"path.write_text(",[167,170943,147467],{"class":177},[167,170945,14463],{"class":512},[167,170947,148397],{"class":7246},[167,170949,523],{"class":731},[167,170951,148402],{"class":177},[167,170953,873],{"class":512},[167,170955,170956,170958,170960,170963,170965,170967,170969],{"class":169,"line":219},[167,170957,170085],{"class":512},[167,170959,523],{"class":731},[167,170961,170962],{"class":512}," path.read_text(",[167,170964,148397],{"class":7246},[167,170966,523],{"class":731},[167,170968,148402],{"class":177},[167,170970,873],{"class":512},[167,170972,170973,170975],{"class":169,"line":230},[167,170974,1606],{"class":184},[167,170976,170099],{"class":512},[14,170978,170980],{"id":170979},"_810-json文件","8.10 JSON文件",[19,170982,170983],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,170985,170987],{"className":723,"code":170986,"language":305,"meta":32,"style":32},"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",[34,170988,170989,170995,170999,171007,171017,171027,171035,171039,171043,171068],{"__ignoreMap":32},[167,170990,170991,170993],{"class":169,"line":170},[167,170992,732],{"class":731},[167,170994,148682],{"class":512},[167,170996,170997],{"class":169,"line":191},[167,170998,741],{"emptyLinePlaceholder":740},[167,171000,171001,171003,171005],{"class":169,"line":205},[167,171002,151072],{"class":512},[167,171004,523],{"class":731},[167,171006,17598],{"class":512},[167,171008,171009,171011,171013,171015],{"class":169,"line":219},[167,171010,148611],{"class":177},[167,171012,53435],{"class":512},[167,171014,151479],{"class":177},[167,171016,33471],{"class":512},[167,171018,171019,171021,171023,171025],{"class":169,"line":230},[167,171020,166128],{"class":177},[167,171022,53435],{"class":512},[167,171024,2850],{"class":184},[167,171026,33471],{"class":512},[167,171028,171029,171031,171033],{"class":169,"line":241},[167,171030,166139],{"class":177},[167,171032,53435],{"class":512},[167,171034,166144],{"class":184},[167,171036,171037],{"class":169,"line":261},[167,171038,3630],{"class":512},[167,171040,171041],{"class":169,"line":773},[167,171042,741],{"emptyLinePlaceholder":740},[167,171044,171045,171047,171049,171052,171054,171056,171058,171060,171062,171064,171066],{"class":169,"line":779},[167,171046,158035],{"class":512},[167,171048,523],{"class":731},[167,171050,171051],{"class":512}," json.dumps(student, ",[167,171053,148728],{"class":7246},[167,171055,523],{"class":731},[167,171057,35989],{"class":184},[167,171059,14463],{"class":512},[167,171061,153603],{"class":7246},[167,171063,523],{"class":731},[167,171065,2287],{"class":184},[167,171067,873],{"class":512},[167,171069,171070,171072],{"class":169,"line":785},[167,171071,1606],{"class":184},[167,171073,165662],{"class":512},[19,171075,171076],{},"写入 JSON 文件：",[26,171078,171080],{"className":723,"code":171079,"language":305,"meta":32,"style":32},"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",[34,171081,171082,171088,171092,171100,171128,171156,171160,171164,171194],{"__ignoreMap":32},[167,171083,171084,171086],{"class":169,"line":170},[167,171085,732],{"class":731},[167,171087,148682],{"class":512},[167,171089,171090],{"class":169,"line":191},[167,171091,741],{"emptyLinePlaceholder":740},[167,171093,171094,171096,171098],{"class":169,"line":205},[167,171095,161307],{"class":512},[167,171097,523],{"class":731},[167,171099,57436],{"class":512},[167,171101,171102,171104,171106,171108,171110,171112,171114,171116,171118,171120,171122,171124,171126],{"class":169,"line":219},[167,171103,149976],{"class":512},[167,171105,64668],{"class":177},[167,171107,53435],{"class":512},[167,171109,151479],{"class":177},[167,171111,14463],{"class":512},[167,171113,71113],{"class":177},[167,171115,53435],{"class":512},[167,171117,2850],{"class":184},[167,171119,14463],{"class":512},[167,171121,153063],{"class":177},[167,171123,53435],{"class":512},[167,171125,3188],{"class":184},[167,171127,6962],{"class":512},[167,171129,171130,171132,171134,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154],{"class":169,"line":230},[167,171131,149976],{"class":512},[167,171133,64668],{"class":177},[167,171135,53435],{"class":512},[167,171137,152527],{"class":177},[167,171139,14463],{"class":512},[167,171141,71113],{"class":177},[167,171143,53435],{"class":512},[167,171145,2825],{"class":184},[167,171147,14463],{"class":512},[167,171149,153063],{"class":177},[167,171151,53435],{"class":512},[167,171153,3011],{"class":184},[167,171155,6962],{"class":512},[167,171157,171158],{"class":169,"line":241},[167,171159,35249],{"class":512},[167,171161,171162],{"class":169,"line":261},[167,171163,741],{"emptyLinePlaceholder":740},[167,171165,171166,171168,171170,171172,171174,171176,171178,171180,171182,171184,171186,171188,171190,171192],{"class":169,"line":773},[167,171167,109424],{"class":731},[167,171169,148382],{"class":184},[167,171171,898],{"class":512},[167,171173,153422],{"class":177},[167,171175,14463],{"class":512},[167,171177,153567],{"class":177},[167,171179,14463],{"class":512},[167,171181,148397],{"class":7246},[167,171183,523],{"class":731},[167,171185,148402],{"class":177},[167,171187,15741],{"class":512},[167,171189,33388],{"class":731},[167,171191,149744],{"class":7246},[167,171193,857],{"class":512},[167,171195,171196,171199,171201,171203,171205,171207,171209,171211,171213,171215,171217],{"class":169,"line":779},[167,171197,171198],{"class":512},"    json.dump(students, ",[167,171200,47354],{"class":7246},[167,171202,14463],{"class":512},[167,171204,148728],{"class":7246},[167,171206,523],{"class":731},[167,171208,35989],{"class":184},[167,171210,14463],{"class":512},[167,171212,153603],{"class":7246},[167,171214,523],{"class":731},[167,171216,2287],{"class":184},[167,171218,873],{"class":512},[19,171220,171221],{},"读取 JSON 文件：",[26,171223,171225],{"className":723,"code":171224,"language":305,"meta":32,"style":32},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[34,171226,171227,171233,171237,171267,171279,171283],{"__ignoreMap":32},[167,171228,171229,171231],{"class":169,"line":170},[167,171230,732],{"class":731},[167,171232,148682],{"class":512},[167,171234,171235],{"class":169,"line":191},[167,171236,741],{"emptyLinePlaceholder":740},[167,171238,171239,171241,171243,171245,171247,171249,171251,171253,171255,171257,171259,171261,171263,171265],{"class":169,"line":205},[167,171240,109424],{"class":731},[167,171242,148382],{"class":184},[167,171244,898],{"class":512},[167,171246,153422],{"class":177},[167,171248,14463],{"class":512},[167,171250,148392],{"class":177},[167,171252,14463],{"class":512},[167,171254,148397],{"class":7246},[167,171256,523],{"class":731},[167,171258,148402],{"class":177},[167,171260,15741],{"class":512},[167,171262,33388],{"class":731},[167,171264,149744],{"class":7246},[167,171266,857],{"class":512},[167,171268,171269,171271,171273,171275,171277],{"class":169,"line":219},[167,171270,154628],{"class":512},[167,171272,523],{"class":731},[167,171274,149755],{"class":512},[167,171276,47354],{"class":7246},[167,171278,873],{"class":512},[167,171280,171281],{"class":169,"line":230},[167,171282,741],{"emptyLinePlaceholder":740},[167,171284,171285,171287],{"class":169,"line":241},[167,171286,1606],{"class":184},[167,171288,166586],{"class":512},[14,171290,171292],{"id":171291},"_811-csv文件","8.11 CSV文件",[19,171294,171295],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171297,171298],{},"写入 CSV：",[26,171300,171302],{"className":723,"code":171301,"language":305,"meta":32,"style":32},"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",[34,171303,171304,171311,171315,171323,171341,171357,171373,171377,171381,171421,171435],{"__ignoreMap":32},[167,171305,171306,171308],{"class":169,"line":170},[167,171307,732],{"class":731},[167,171309,171310],{"class":512}," csv\n",[167,171312,171313],{"class":169,"line":191},[167,171314,741],{"emptyLinePlaceholder":740},[167,171316,171317,171319,171321],{"class":169,"line":205},[167,171318,161307],{"class":512},[167,171320,523],{"class":731},[167,171322,57436],{"class":512},[167,171324,171325,171328,171330,171332,171334,171336,171339],{"class":169,"line":219},[167,171326,171327],{"class":512},"    [",[167,171329,75087],{"class":177},[167,171331,14463],{"class":512},[167,171333,75120],{"class":177},[167,171335,14463],{"class":512},[167,171337,171338],{"class":177},"\"成绩\"",[167,171340,89822],{"class":512},[167,171342,171343,171345,171347,171349,171351,171353,171355],{"class":169,"line":230},[167,171344,171327],{"class":512},[167,171346,151479],{"class":177},[167,171348,14463],{"class":512},[167,171350,2850],{"class":184},[167,171352,14463],{"class":512},[167,171354,3188],{"class":184},[167,171356,89822],{"class":512},[167,171358,171359,171361,171363,171365,171367,171369,171371],{"class":169,"line":241},[167,171360,171327],{"class":512},[167,171362,152527],{"class":177},[167,171364,14463],{"class":512},[167,171366,2825],{"class":184},[167,171368,14463],{"class":512},[167,171370,3011],{"class":184},[167,171372,89822],{"class":512},[167,171374,171375],{"class":169,"line":261},[167,171376,35249],{"class":512},[167,171378,171379],{"class":169,"line":773},[167,171380,741],{"emptyLinePlaceholder":740},[167,171382,171383,171385,171387,171389,171392,171394,171396,171398,171400,171402,171404,171406,171409,171411,171413,171415,171417,171419],{"class":169,"line":779},[167,171384,109424],{"class":731},[167,171386,148382],{"class":184},[167,171388,898],{"class":512},[167,171390,171391],{"class":177},"\"students.csv\"",[167,171393,14463],{"class":512},[167,171395,153567],{"class":177},[167,171397,14463],{"class":512},[167,171399,148397],{"class":7246},[167,171401,523],{"class":731},[167,171403,148402],{"class":177},[167,171405,14463],{"class":512},[167,171407,171408],{"class":7246},"newline",[167,171410,523],{"class":731},[167,171412,9682],{"class":177},[167,171414,15741],{"class":512},[167,171416,33388],{"class":731},[167,171418,149744],{"class":7246},[167,171420,857],{"class":512},[167,171422,171423,171426,171428,171431,171433],{"class":169,"line":785},[167,171424,171425],{"class":512},"    writer ",[167,171427,523],{"class":731},[167,171429,171430],{"class":512}," csv.writer(",[167,171432,47354],{"class":7246},[167,171434,873],{"class":512},[167,171436,171437],{"class":169,"line":790},[167,171438,171439],{"class":512},"    writer.writerows(students)\n",[19,171441,171442],{},"读取 CSV：",[26,171444,171446],{"className":723,"code":171445,"language":305,"meta":32,"style":32},"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",[34,171447,171448,171454,171458,171488,171502,171514],{"__ignoreMap":32},[167,171449,171450,171452],{"class":169,"line":170},[167,171451,732],{"class":731},[167,171453,171310],{"class":512},[167,171455,171456],{"class":169,"line":191},[167,171457,741],{"emptyLinePlaceholder":740},[167,171459,171460,171462,171464,171466,171468,171470,171472,171474,171476,171478,171480,171482,171484,171486],{"class":169,"line":205},[167,171461,109424],{"class":731},[167,171463,148382],{"class":184},[167,171465,898],{"class":512},[167,171467,171391],{"class":177},[167,171469,14463],{"class":512},[167,171471,148392],{"class":177},[167,171473,14463],{"class":512},[167,171475,148397],{"class":7246},[167,171477,523],{"class":731},[167,171479,148402],{"class":177},[167,171481,15741],{"class":512},[167,171483,33388],{"class":731},[167,171485,149744],{"class":7246},[167,171487,857],{"class":512},[167,171489,171490,171493,171495,171498,171500],{"class":169,"line":219},[167,171491,171492],{"class":512},"    reader ",[167,171494,523],{"class":731},[167,171496,171497],{"class":512}," csv.reader(",[167,171499,47354],{"class":7246},[167,171501,873],{"class":512},[167,171503,171504,171506,171509,171511],{"class":169,"line":230},[167,171505,967],{"class":731},[167,171507,171508],{"class":512}," row ",[167,171510,973],{"class":731},[167,171512,171513],{"class":512}," reader:\n",[167,171515,171516,171518],{"class":169,"line":241},[167,171517,34454],{"class":184},[167,171519,171520],{"class":512},"(row)\n",[19,171522,171523],{},"使用字典写入：",[26,171525,171527],{"className":723,"code":171526,"language":305,"meta":32,"style":32},"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",[34,171528,171529,171535,171539,171547,171575,171603,171607,171611,171649,171670,171691,171696],{"__ignoreMap":32},[167,171530,171531,171533],{"class":169,"line":170},[167,171532,732],{"class":731},[167,171534,171310],{"class":512},[167,171536,171537],{"class":169,"line":191},[167,171538,741],{"emptyLinePlaceholder":740},[167,171540,171541,171543,171545],{"class":169,"line":205},[167,171542,161307],{"class":512},[167,171544,523],{"class":731},[167,171546,57436],{"class":512},[167,171548,171549,171551,171553,171555,171557,171559,171561,171563,171565,171567,171569,171571,171573],{"class":169,"line":219},[167,171550,149976],{"class":512},[167,171552,64668],{"class":177},[167,171554,53435],{"class":512},[167,171556,151479],{"class":177},[167,171558,14463],{"class":512},[167,171560,71113],{"class":177},[167,171562,53435],{"class":512},[167,171564,2850],{"class":184},[167,171566,14463],{"class":512},[167,171568,153063],{"class":177},[167,171570,53435],{"class":512},[167,171572,3188],{"class":184},[167,171574,6962],{"class":512},[167,171576,171577,171579,171581,171583,171585,171587,171589,171591,171593,171595,171597,171599,171601],{"class":169,"line":230},[167,171578,149976],{"class":512},[167,171580,64668],{"class":177},[167,171582,53435],{"class":512},[167,171584,152527],{"class":177},[167,171586,14463],{"class":512},[167,171588,71113],{"class":177},[167,171590,53435],{"class":512},[167,171592,2825],{"class":184},[167,171594,14463],{"class":512},[167,171596,153063],{"class":177},[167,171598,53435],{"class":512},[167,171600,3011],{"class":184},[167,171602,6962],{"class":512},[167,171604,171605],{"class":169,"line":241},[167,171606,35249],{"class":512},[167,171608,171609],{"class":169,"line":261},[167,171610,741],{"emptyLinePlaceholder":740},[167,171612,171613,171615,171617,171619,171621,171623,171625,171627,171629,171631,171633,171635,171637,171639,171641,171643,171645,171647],{"class":169,"line":773},[167,171614,109424],{"class":731},[167,171616,148382],{"class":184},[167,171618,898],{"class":512},[167,171620,171391],{"class":177},[167,171622,14463],{"class":512},[167,171624,153567],{"class":177},[167,171626,14463],{"class":512},[167,171628,148397],{"class":7246},[167,171630,523],{"class":731},[167,171632,148402],{"class":177},[167,171634,14463],{"class":512},[167,171636,171408],{"class":7246},[167,171638,523],{"class":731},[167,171640,9682],{"class":177},[167,171642,15741],{"class":512},[167,171644,33388],{"class":731},[167,171646,149744],{"class":7246},[167,171648,857],{"class":512},[167,171650,171651,171654,171656,171658,171660,171662,171664,171666,171668],{"class":169,"line":779},[167,171652,171653],{"class":512},"    fieldnames ",[167,171655,523],{"class":731},[167,171657,54221],{"class":512},[167,171659,64668],{"class":177},[167,171661,14463],{"class":512},[167,171663,71113],{"class":177},[167,171665,14463],{"class":512},[167,171667,153063],{"class":177},[167,171669,35249],{"class":512},[167,171671,171672,171674,171676,171679,171681,171683,171686,171688],{"class":169,"line":785},[167,171673,171425],{"class":512},[167,171675,523],{"class":731},[167,171677,171678],{"class":512}," csv.DictWriter(",[167,171680,47354],{"class":7246},[167,171682,14463],{"class":512},[167,171684,171685],{"class":7246},"fieldnames",[167,171687,523],{"class":731},[167,171689,171690],{"class":512},"fieldnames)\n",[167,171692,171693],{"class":169,"line":790},[167,171694,171695],{"class":512},"    writer.writeheader()\n",[167,171697,171698],{"class":169,"line":796},[167,171699,171439],{"class":512},[14,171701,171703],{"id":171702},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171705,124883],{},[40,171707,171708,171711,171714],{},[43,171709,171710],{},"读取文本文件。",[43,171712,171713],{},"统计每个单词出现次数。",[43,171715,171716],{},"输出出现次数最多的前 10 个单词。",[19,171718,12063],{},[26,171720,171722],{"className":723,"code":171721,"language":305,"meta":32,"style":32},"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",[34,171723,171724,171734,171738,171751,171767,171771,171781,171790,171794,171806,171826,171835,171839,171857,171861,171891,171895,171911],{"__ignoreMap":32},[167,171725,171726,171728,171730,171732],{"class":169,"line":170},[167,171727,32745],{"class":731},[167,171729,109902],{"class":512},[167,171731,732],{"class":731},[167,171733,109907],{"class":512},[167,171735,171736],{"class":169,"line":191},[167,171737,741],{"emptyLinePlaceholder":740},[167,171739,171740,171742,171744,171746,171749],{"class":169,"line":205},[167,171741,169902],{"class":512},[167,171743,523],{"class":731},[167,171745,110136],{"class":512},[167,171747,171748],{"class":177},"\"article.txt\"",[167,171750,873],{"class":512},[167,171752,171753,171755,171757,171759,171761,171763,171765],{"class":169,"line":219},[167,171754,170085],{"class":512},[167,171756,523],{"class":731},[167,171758,170962],{"class":512},[167,171760,148397],{"class":7246},[167,171762,523],{"class":731},[167,171764,148402],{"class":177},[167,171766,873],{"class":512},[167,171768,171769],{"class":169,"line":230},[167,171770,741],{"emptyLinePlaceholder":740},[167,171772,171773,171776,171778],{"class":169,"line":241},[167,171774,171775],{"class":512},"words ",[167,171777,523],{"class":731},[167,171779,171780],{"class":512}," content.lower().split()\n",[167,171782,171783,171786,171788],{"class":169,"line":261},[167,171784,171785],{"class":512},"counter ",[167,171787,523],{"class":731},[167,171789,89854],{"class":512},[167,171791,171792],{"class":169,"line":773},[167,171793,741],{"emptyLinePlaceholder":740},[167,171795,171796,171798,171801,171803],{"class":169,"line":779},[167,171797,1168],{"class":731},[167,171799,171800],{"class":512}," word ",[167,171802,973],{"class":731},[167,171804,171805],{"class":512}," words:\n",[167,171807,171808,171811,171813,171816,171819,171821,171824],{"class":169,"line":785},[167,171809,171810],{"class":512},"    word ",[167,171812,523],{"class":731},[167,171814,171815],{"class":512}," word.strip(",[167,171817,171818],{"class":177},"\".,!?;:",[167,171820,158086],{"class":184},[167,171822,171823],{"class":177},"'()[]\"",[167,171825,873],{"class":512},[167,171827,171828,171830,171832],{"class":169,"line":790},[167,171829,5136],{"class":731},[167,171831,40931],{"class":731},[167,171833,171834],{"class":512}," word:\n",[167,171836,171837],{"class":169,"line":796},[167,171838,150103],{"class":731},[167,171840,171841,171844,171846,171849,171851,171853,171855],{"class":169,"line":802},[167,171842,171843],{"class":512},"    counter[word] ",[167,171845,523],{"class":731},[167,171847,171848],{"class":512}," counter.get(word, ",[167,171850,1154],{"class":184},[167,171852,15741],{"class":512},[167,171854,2681],{"class":731},[167,171856,57688],{"class":184},[167,171858,171859],{"class":169,"line":808},[167,171860,741],{"emptyLinePlaceholder":740},[167,171862,171863,171866,171868,171870,171873,171875,171877,171879,171881,171883,171885,171887,171889],{"class":169,"line":814},[167,171864,171865],{"class":512},"items ",[167,171867,523],{"class":731},[167,171869,165195],{"class":184},[167,171871,171872],{"class":512},"(counter.items(), ",[167,171874,155537],{"class":7246},[167,171876,155540],{"class":731},[167,171878,155543],{"class":512},[167,171880,2418],{"class":184},[167,171882,113793],{"class":512},[167,171884,165119],{"class":7246},[167,171886,523],{"class":731},[167,171888,33481],{"class":184},[167,171890,873],{"class":512},[167,171892,171893],{"class":169,"line":820},[167,171894,741],{"emptyLinePlaceholder":740},[167,171896,171897,171899,171902,171904,171907,171909],{"class":169,"line":826},[167,171898,1168],{"class":731},[167,171900,171901],{"class":512}," word, count ",[167,171903,973],{"class":731},[167,171905,171906],{"class":512}," items[:",[167,171908,2646],{"class":184},[167,171910,167346],{"class":512},[167,171912,171913,171915],{"class":169,"line":832},[167,171914,895],{"class":184},[167,171916,171917],{"class":512},"(word, count)\n",[14,171919,171921],{"id":171920},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,171923,171925],{"className":723,"code":171924,"language":305,"meta":32,"style":32},"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",[34,171926,171927,171933,171943,171947,171959,171963,171967,171975,171985,171991,171995,172025,172035,172039,172043,172051,172081,172105,172109,172113,172121,172150,172155],{"__ignoreMap":32},[167,171928,171929,171931],{"class":169,"line":170},[167,171930,732],{"class":731},[167,171932,148682],{"class":512},[167,171934,171935,171937,171939,171941],{"class":169,"line":191},[167,171936,32745],{"class":731},[167,171938,109902],{"class":512},[167,171940,732],{"class":731},[167,171942,109907],{"class":512},[167,171944,171945],{"class":169,"line":205},[167,171946,741],{"emptyLinePlaceholder":740},[167,171948,171949,171951,171953,171955,171957],{"class":169,"line":219},[167,171950,153415],{"class":184},[167,171952,753],{"class":731},[167,171954,110136],{"class":512},[167,171956,153422],{"class":177},[167,171958,873],{"class":512},[167,171960,171961],{"class":169,"line":230},[167,171962,741],{"emptyLinePlaceholder":740},[167,171964,171965],{"class":169,"line":241},[167,171966,741],{"emptyLinePlaceholder":740},[167,171968,171969,171971,171973],{"class":169,"line":261},[167,171970,845],{"class":731},[167,171972,153439],{"class":173},[167,171974,33957],{"class":512},[167,171976,171977,171979,171981,171983],{"class":169,"line":773},[167,171978,5136],{"class":731},[167,171980,40931],{"class":731},[167,171982,153450],{"class":184},[167,171984,153453],{"class":512},[167,171986,171987,171989],{"class":169,"line":779},[167,171988,16779],{"class":731},[167,171990,53834],{"class":512},[167,171992,171993],{"class":169,"line":785},[167,171994,741],{"emptyLinePlaceholder":740},[167,171996,171997,171999,172001,172003,172005,172007,172009,172011,172013,172015,172017,172019,172021,172023],{"class":169,"line":790},[167,171998,36180],{"class":731},[167,172000,148382],{"class":184},[167,172002,898],{"class":512},[167,172004,153415],{"class":184},[167,172006,14463],{"class":512},[167,172008,148392],{"class":177},[167,172010,14463],{"class":512},[167,172012,148397],{"class":7246},[167,172014,523],{"class":731},[167,172016,148402],{"class":177},[167,172018,15741],{"class":512},[167,172020,33388],{"class":731},[167,172022,149744],{"class":7246},[167,172024,857],{"class":512},[167,172026,172027,172029,172031,172033],{"class":169,"line":796},[167,172028,16779],{"class":731},[167,172030,149755],{"class":512},[167,172032,47354],{"class":7246},[167,172034,873],{"class":512},[167,172036,172037],{"class":169,"line":802},[167,172038,741],{"emptyLinePlaceholder":740},[167,172040,172041],{"class":169,"line":808},[167,172042,741],{"emptyLinePlaceholder":740},[167,172044,172045,172047,172049],{"class":169,"line":814},[167,172046,845],{"class":731},[167,172048,153549],{"class":173},[167,172050,153552],{"class":512},[167,172052,172053,172055,172057,172059,172061,172063,172065,172067,172069,172071,172073,172075,172077,172079],{"class":169,"line":820},[167,172054,36180],{"class":731},[167,172056,148382],{"class":184},[167,172058,898],{"class":512},[167,172060,153415],{"class":184},[167,172062,14463],{"class":512},[167,172064,153567],{"class":177},[167,172066,14463],{"class":512},[167,172068,148397],{"class":7246},[167,172070,523],{"class":731},[167,172072,148402],{"class":177},[167,172074,15741],{"class":512},[167,172076,33388],{"class":731},[167,172078,149744],{"class":7246},[167,172080,857],{"class":512},[167,172082,172083,172085,172087,172089,172091,172093,172095,172097,172099,172101,172103],{"class":169,"line":826},[167,172084,153588],{"class":512},[167,172086,47354],{"class":7246},[167,172088,14463],{"class":512},[167,172090,148728],{"class":7246},[167,172092,523],{"class":731},[167,172094,35989],{"class":184},[167,172096,14463],{"class":512},[167,172098,153603],{"class":7246},[167,172100,523],{"class":731},[167,172102,2287],{"class":184},[167,172104,873],{"class":512},[167,172106,172107],{"class":169,"line":832},[167,172108,741],{"emptyLinePlaceholder":740},[167,172110,172111],{"class":169,"line":837},[167,172112,741],{"emptyLinePlaceholder":740},[167,172114,172115,172117,172119],{"class":169,"line":842},[167,172116,161307],{"class":512},[167,172118,523],{"class":731},[167,172120,154633],{"class":512},[167,172122,172123,172126,172128,172130,172132,172134,172136,172138,172140,172142,172144,172146,172148],{"class":169,"line":860},[167,172124,172125],{"class":512},"students.append({",[167,172127,64668],{"class":177},[167,172129,53435],{"class":512},[167,172131,151479],{"class":177},[167,172133,14463],{"class":512},[167,172135,71113],{"class":177},[167,172137,53435],{"class":512},[167,172139,2850],{"class":184},[167,172141,14463],{"class":512},[167,172143,153063],{"class":177},[167,172145,53435],{"class":512},[167,172147,3188],{"class":184},[167,172149,166743],{"class":512},[167,172151,172152],{"class":169,"line":876},[167,172153,172154],{"class":512},"save_students(students)\n",[167,172156,172157,172159,172161,172164],{"class":169,"line":887},[167,172158,1606],{"class":184},[167,172160,898],{"class":512},[167,172162,172163],{"class":177},"\"保存成功\"",[167,172165,873],{"class":512},[14,172167,172169],{"id":172168},"_814-易错点","8.14 易错点",[40,172171,172172,172176,172182,172187,172194,172201],{},[43,172173,172174,170435],{},[34,172175,2995],{},[43,172177,172178,172179,423],{},"读写中文要指定 ",[34,172180,172181],{},"encoding=\"utf-8\"",[43,172183,172184,172185,423],{},"打开文件后要关闭，推荐使用 ",[34,172186,109424],{},[43,172188,172189,172190,172193],{},"读取大文件不要直接 ",[34,172191,172192],{},"read()"," 全部内容。",[43,172195,172196,172197,172200],{},"Windows 写 CSV 时建议加 ",[34,172198,172199],{},"newline=\"\"","，避免空行。",[43,172202,172203],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172205,172207],{"id":172206},"_815-本章练习","8.15 本章练习",[40,172209,172210,172217,172222,172225,172228],{},[43,172211,172212,172213,172216],{},"写入一个 ",[34,172214,172215],{},"students.txt","，每行保存一个学生姓名。",[43,172218,105946,172219,172221],{},[34,172220,172215],{}," 并输出所有学生。",[43,172223,172224],{},"把学生列表保存为 JSON 文件。",[43,172226,172227],{},"从 JSON 文件读取学生数据，计算平均分。",[43,172229,172230,172231,172234,172235,172238],{},"写一个日志函数 ",[34,172232,172233],{},"write_log(message)","，每次调用向 ",[34,172236,172237],{},"app.log"," 追加一行。",[2113,172240,172241],{},"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":32,"searchDepth":191,"depth":191,"links":172243},[172244,172245,172249,172250,172256,172257,172258,172259,172260,172261,172262,172263,172264,172265,172266],{"id":169755,"depth":191,"text":169756},{"id":169796,"depth":191,"text":169797,"children":172246},[172247,172248],{"id":169800,"depth":205,"text":169801},{"id":169834,"depth":205,"text":169835},{"id":169948,"depth":191,"text":169949},{"id":170041,"depth":191,"text":170042,"children":172251},[172252,172253,172254,172255],{"id":170045,"depth":205,"text":170046},{"id":170132,"depth":205,"text":170133},{"id":170202,"depth":205,"text":170203},{"id":170296,"depth":205,"text":170297},{"id":170366,"depth":191,"text":170367},{"id":170429,"depth":191,"text":170430},{"id":170590,"depth":191,"text":170591},{"id":170653,"depth":191,"text":170654},{"id":170769,"depth":191,"text":170770},{"id":170979,"depth":191,"text":170980},{"id":171291,"depth":191,"text":171292},{"id":171702,"depth":191,"text":171703},{"id":171920,"depth":191,"text":171921},{"id":172168,"depth":191,"text":172169},{"id":172206,"depth":191,"text":172207},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169747,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172273,"title":172274,"body":172275,"description":25403,"extension":2140,"meta":174461,"navigation":740,"path":174462,"seo":174463,"stem":174464,"__hash__":174465},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172276,"toc":174428},[172277,172280,172284,172287,172290,172382,172384,172403,172408,172412,172415,172418,172447,172454,172457,172461,172464,172493,172495,172547,172553,172606,172610,172708,172711,172778,172782,172839,172841,172847,172851,172856,172862,172953,172958,172962,172965,173043,173046,173084,173088,173206,173209,173213,173216,173261,173264,173268,173273,173279,173329,173332,173363,173367,173371,173401,173405,173440,173444,173479,173519,173523,173539,173542,173546,173550,173629,173633,173674,173678,173733,173737,173771,173775,173805,173814,173821,173827,173884,173887,173895,173898,173902,173909,173912,173918,173921,173938,173943,173947,173953,173966,173969,174006,174009,174020,174023,174037,174040,174054,174058,174065,174098,174101,174103,174109,174112,174116,174118,174124,174129,174302,174306,174369,174373,174397,174401,174425],[10,172278,172274],{"id":172279},"_9-异常模块与包",[14,172281,172283],{"id":172282},"_91-什么是异常","9.1 什么是异常",[19,172285,172286],{},"异常是程序运行过程中出现的错误。",[19,172288,172289],{},"常见异常：",[68,172291,172292,172301],{},[71,172293,172294],{},[74,172295,172296,172299],{},[77,172297,172298],{},"异常",[77,172300,27889],{},[85,172302,172303,172313,172323,172332,172342,172352,172362,172372],{},[74,172304,172305,172310],{},[90,172306,172307],{},[34,172308,172309],{},"NameError",[90,172311,172312],{},"使用了未定义变量",[74,172314,172315,172320],{},[90,172316,172317],{},[34,172318,172319],{},"TypeError",[90,172321,172322],{},"类型不匹配",[74,172324,172325,172329],{},[90,172326,172327],{},[34,172328,156425],{},[90,172330,172331],{},"值不合法",[74,172333,172334,172339],{},[90,172335,172336],{},[34,172337,172338],{},"IndexError",[90,172340,172341],{},"列表索引越界",[74,172343,172344,172349],{},[90,172345,172346],{},[34,172347,172348],{},"KeyError",[90,172350,172351],{},"字典 key 不存在",[74,172353,172354,172359],{},[90,172355,172356],{},[34,172357,172358],{},"FileNotFoundError",[90,172360,172361],{},"文件不存在",[74,172363,172364,172369],{},[90,172365,172366],{},[34,172367,172368],{},"ZeroDivisionError",[90,172370,172371],{},"除数为 0",[74,172373,172374,172379],{},[90,172375,172376],{},[34,172377,172378],{},"ImportError",[90,172380,172381],{},"导入失败",[19,172383,17161],{},[26,172385,172387],{"className":723,"code":172386,"language":305,"meta":32,"style":32},"num = int(\"abc\")\n",[34,172388,172389],{"__ignoreMap":32},[167,172390,172391,172393,172395,172397,172399,172401],{"class":169,"line":170},[167,172392,157378],{"class":512},[167,172394,523],{"class":731},[167,172396,4426],{"class":184},[167,172398,898],{"class":512},[167,172400,157471],{"class":177},[167,172402,873],{"class":512},[19,172404,172405,172406,423],{},"会触发 ",[34,172407,156425],{},[14,172409,172411],{"id":172410},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172413,172414],{},"如果不处理异常，程序会直接终止。",[19,172416,172417],{},"例如用户输入年龄：",[26,172419,172421],{"className":723,"code":172420,"language":305,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[34,172422,172423,172441],{"__ignoreMap":32},[167,172424,172425,172427,172429,172431,172433,172435,172437,172439],{"class":169,"line":170},[167,172426,148137],{"class":512},[167,172428,523],{"class":731},[167,172430,4426],{"class":184},[167,172432,898],{"class":512},[167,172434,55812],{"class":184},[167,172436,898],{"class":512},[167,172438,153985],{"class":177},[167,172440,32505],{"class":512},[167,172442,172443,172445],{"class":169,"line":191},[167,172444,1606],{"class":184},[167,172446,157352],{"class":512},[19,172448,172449,172450,172453],{},"用户输入 ",[34,172451,172452],{},"abc","，程序就会报错退出。",[19,172455,172456],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172458,172460],{"id":172459},"_93-try-except","9.3 try except",[19,172462,172463],{},"基础语法：",[26,172465,172467],{"className":723,"code":172466,"language":305,"meta":32,"style":32},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[34,172468,172469,172476,172481,172488],{"__ignoreMap":32},[167,172470,172471,172474],{"class":169,"line":170},[167,172472,172473],{"class":731},"try",[167,172475,857],{"class":512},[167,172477,172478],{"class":169,"line":191},[167,172479,172480],{"class":512},"    可能出错的代码\n",[167,172482,172483,172486],{"class":169,"line":205},[167,172484,172485],{"class":731},"except",[167,172487,857],{"class":512},[167,172489,172490],{"class":169,"line":219},[167,172491,172492],{"class":512},"    出错后的处理代码\n",[19,172494,17161],{},[26,172496,172498],{"className":723,"code":172497,"language":305,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[34,172499,172500,172506,172524,172530,172536],{"__ignoreMap":32},[167,172501,172502,172504],{"class":169,"line":170},[167,172503,172473],{"class":731},[167,172505,857],{"class":512},[167,172507,172508,172510,172512,172514,172516,172518,172520,172522],{"class":169,"line":191},[167,172509,153977],{"class":512},[167,172511,523],{"class":731},[167,172513,4426],{"class":184},[167,172515,898],{"class":512},[167,172517,55812],{"class":184},[167,172519,898],{"class":512},[167,172521,153985],{"class":177},[167,172523,32505],{"class":512},[167,172525,172526,172528],{"class":169,"line":205},[167,172527,895],{"class":184},[167,172529,157352],{"class":512},[167,172531,172532,172534],{"class":169,"line":219},[167,172533,172485],{"class":731},[167,172535,857],{"class":512},[167,172537,172538,172540,172542,172545],{"class":169,"line":230},[167,172539,895],{"class":184},[167,172541,898],{"class":512},[167,172543,172544],{"class":177},"\"年龄必须是数字\"",[167,172546,873],{"class":512},[19,172548,172549,172550,172552],{},"不建议裸写 ",[34,172551,172485],{},"，最好指定异常类型。",[26,172554,172556],{"className":723,"code":172555,"language":305,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[34,172557,172558,172564,172582,172588,172596],{"__ignoreMap":32},[167,172559,172560,172562],{"class":169,"line":170},[167,172561,172473],{"class":731},[167,172563,857],{"class":512},[167,172565,172566,172568,172570,172572,172574,172576,172578,172580],{"class":169,"line":191},[167,172567,153977],{"class":512},[167,172569,523],{"class":731},[167,172571,4426],{"class":184},[167,172573,898],{"class":512},[167,172575,55812],{"class":184},[167,172577,898],{"class":512},[167,172579,153985],{"class":177},[167,172581,32505],{"class":512},[167,172583,172584,172586],{"class":169,"line":205},[167,172585,895],{"class":184},[167,172587,157352],{"class":512},[167,172589,172590,172592,172594],{"class":169,"line":219},[167,172591,172485],{"class":731},[167,172593,153817],{"class":184},[167,172595,857],{"class":512},[167,172597,172598,172600,172602,172604],{"class":169,"line":230},[167,172599,895],{"class":184},[167,172601,898],{"class":512},[167,172603,172544],{"class":177},[167,172605,873],{"class":512},[14,172607,172609],{"id":172608},"_94-捕获多个异常","9.4 捕获多个异常",[26,172611,172613],{"className":723,"code":172612,"language":305,"meta":32,"style":32},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[34,172614,172615,172621,172642,172662,172669,172677,172688,172697],{"__ignoreMap":32},[167,172616,172617,172619],{"class":169,"line":170},[167,172618,172473],{"class":731},[167,172620,857],{"class":512},[167,172622,172623,172626,172628,172630,172632,172634,172636,172638,172640],{"class":169,"line":191},[167,172624,172625],{"class":512},"    nums ",[167,172627,523],{"class":731},[167,172629,54221],{"class":512},[167,172631,2418],{"class":184},[167,172633,14463],{"class":512},[167,172635,2287],{"class":184},[167,172637,14463],{"class":512},[167,172639,2281],{"class":184},[167,172641,35249],{"class":512},[167,172643,172644,172647,172649,172651,172653,172655,172657,172660],{"class":169,"line":205},[167,172645,172646],{"class":512},"    index ",[167,172648,523],{"class":731},[167,172650,4426],{"class":184},[167,172652,898],{"class":512},[167,172654,55812],{"class":184},[167,172656,898],{"class":512},[167,172658,172659],{"class":177},"\"请输入索引:\"",[167,172661,32505],{"class":512},[167,172663,172664,172666],{"class":169,"line":219},[167,172665,895],{"class":184},[167,172667,172668],{"class":512},"(nums[index])\n",[167,172670,172671,172673,172675],{"class":169,"line":230},[167,172672,172485],{"class":731},[167,172674,153817],{"class":184},[167,172676,857],{"class":512},[167,172678,172679,172681,172683,172686],{"class":169,"line":241},[167,172680,895],{"class":184},[167,172682,898],{"class":512},[167,172684,172685],{"class":177},"\"索引必须是整数\"",[167,172687,873],{"class":512},[167,172689,172690,172692,172695],{"class":169,"line":261},[167,172691,172485],{"class":731},[167,172693,172694],{"class":184}," IndexError",[167,172696,857],{"class":512},[167,172698,172699,172701,172703,172706],{"class":169,"line":773},[167,172700,895],{"class":184},[167,172702,898],{"class":512},[167,172704,172705],{"class":177},"\"索引越界\"",[167,172707,873],{"class":512},[19,172709,172710],{},"多个异常使用相同处理逻辑：",[26,172712,172714],{"className":723,"code":172713,"language":305,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[34,172715,172716,172722,172740,172753,172767],{"__ignoreMap":32},[167,172717,172718,172720],{"class":169,"line":170},[167,172719,172473],{"class":731},[167,172721,857],{"class":512},[167,172723,172724,172726,172728,172730,172732,172734,172736,172738],{"class":169,"line":191},[167,172725,47593],{"class":512},[167,172727,523],{"class":731},[167,172729,4426],{"class":184},[167,172731,898],{"class":512},[167,172733,55812],{"class":184},[167,172735,898],{"class":512},[167,172737,157387],{"class":177},[167,172739,32505],{"class":512},[167,172741,172742,172744,172746,172748,172750],{"class":169,"line":205},[167,172743,895],{"class":184},[167,172745,898],{"class":512},[167,172747,2646],{"class":184},[167,172749,157637],{"class":731},[167,172751,172752],{"class":512}," num)\n",[167,172754,172755,172757,172759,172761,172763,172765],{"class":169,"line":219},[167,172756,172485],{"class":731},[167,172758,3716],{"class":512},[167,172760,156425],{"class":184},[167,172762,14463],{"class":512},[167,172764,172368],{"class":184},[167,172766,984],{"class":512},[167,172768,172769,172771,172773,172776],{"class":169,"line":230},[167,172770,895],{"class":184},[167,172772,898],{"class":512},[167,172774,172775],{"class":177},"\"输入不合法\"",[167,172777,873],{"class":512},[14,172779,172781],{"id":172780},"_95-获取异常信息","9.5 获取异常信息",[26,172783,172785],{"className":723,"code":172784,"language":305,"meta":32,"style":32},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[34,172786,172787,172793,172807,172818],{"__ignoreMap":32},[167,172788,172789,172791],{"class":169,"line":170},[167,172790,172473],{"class":731},[167,172792,857],{"class":512},[167,172794,172795,172797,172799,172801,172803,172805],{"class":169,"line":191},[167,172796,47593],{"class":512},[167,172798,523],{"class":731},[167,172800,4426],{"class":184},[167,172802,898],{"class":512},[167,172804,157471],{"class":177},[167,172806,873],{"class":512},[167,172808,172809,172811,172813,172815],{"class":169,"line":205},[167,172810,172485],{"class":731},[167,172812,153817],{"class":184},[167,172814,66593],{"class":731},[167,172816,172817],{"class":512}," e:\n",[167,172819,172820,172822,172824,172826,172829,172831,172833,172835,172837],{"class":169,"line":219},[167,172821,895],{"class":184},[167,172823,898],{"class":512},[167,172825,2262],{"class":731},[167,172827,172828],{"class":177},"\"出错了:",[167,172830,3096],{"class":184},[167,172832,2284],{"class":512},[167,172834,3145],{"class":184},[167,172836,2452],{"class":177},[167,172838,873],{"class":512},[19,172840,148048],{},[26,172842,172845],{"className":172843,"code":172844,"language":31,"meta":32},[29],"出错了:invalid literal for int() with base 10: 'abc'\n",[34,172846,172844],{"__ignoreMap":32},[14,172848,172850],{"id":172849},"_96-else和finally","9.6 else和finally",[19,172852,172853,172855],{},[34,172854,3755],{},"：没有异常时执行。",[19,172857,172858,172861],{},[34,172859,172860],{},"finally","：无论是否异常都会执行。",[26,172863,172865],{"className":723,"code":172864,"language":305,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[34,172866,172867,172873,172891,172899,172909,172915,172936,172942],{"__ignoreMap":32},[167,172868,172869,172871],{"class":169,"line":170},[167,172870,172473],{"class":731},[167,172872,857],{"class":512},[167,172874,172875,172877,172879,172881,172883,172885,172887,172889],{"class":169,"line":191},[167,172876,47593],{"class":512},[167,172878,523],{"class":731},[167,172880,4426],{"class":184},[167,172882,898],{"class":512},[167,172884,55812],{"class":184},[167,172886,898],{"class":512},[167,172888,157387],{"class":177},[167,172890,32505],{"class":512},[167,172892,172893,172895,172897],{"class":169,"line":205},[167,172894,172485],{"class":731},[167,172896,153817],{"class":184},[167,172898,857],{"class":512},[167,172900,172901,172903,172905,172907],{"class":169,"line":219},[167,172902,895],{"class":184},[167,172904,898],{"class":512},[167,172906,154805],{"class":177},[167,172908,873],{"class":512},[167,172910,172911,172913],{"class":169,"line":230},[167,172912,3755],{"class":731},[167,172914,857],{"class":512},[167,172916,172917,172919,172921,172923,172926,172928,172930,172932,172934],{"class":169,"line":241},[167,172918,895],{"class":184},[167,172920,898],{"class":512},[167,172922,2262],{"class":731},[167,172924,172925],{"class":177},"\"输入正确:",[167,172927,3096],{"class":184},[167,172929,3723],{"class":512},[167,172931,3145],{"class":184},[167,172933,2452],{"class":177},[167,172935,873],{"class":512},[167,172937,172938,172940],{"class":169,"line":261},[167,172939,172860],{"class":731},[167,172941,857],{"class":512},[167,172943,172944,172946,172948,172951],{"class":169,"line":773},[167,172945,895],{"class":184},[167,172947,898],{"class":512},[167,172949,172950],{"class":177},"\"程序结束\"",[167,172952,873],{"class":512},[19,172954,172955,172957],{},[34,172956,172860],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172959,172961],{"id":172960},"_97-抛出异常","9.7 抛出异常",[19,172963,172964],{},"程序可以主动抛出异常。",[26,172966,172968],{"className":723,"code":172967,"language":305,"meta":32,"style":32},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[34,172969,172970,172979,172991,173004,173024,173028,173032],{"__ignoreMap":32},[167,172971,172972,172974,172977],{"class":169,"line":170},[167,172973,845],{"class":731},[167,172975,172976],{"class":173}," set_age",[167,172978,163006],{"class":512},[167,172980,172981,172983,172985,172987,172989],{"class":169,"line":191},[167,172982,5136],{"class":731},[167,172984,17733],{"class":512},[167,172986,513],{"class":731},[167,172988,6125],{"class":184},[167,172990,857],{"class":512},[167,172992,172993,172995,172997,172999,173002],{"class":169,"line":205},[167,172994,105023],{"class":731},[167,172996,153817],{"class":184},[167,172998,898],{"class":512},[167,173000,173001],{"class":177},"\"年龄不能为负数\"",[167,173003,873],{"class":512},[167,173005,173006,173008,173010,173012,173014,173016,173018,173020,173022],{"class":169,"line":219},[167,173007,895],{"class":184},[167,173009,898],{"class":512},[167,173011,2262],{"class":731},[167,173013,163574],{"class":177},[167,173015,3096],{"class":184},[167,173017,72209],{"class":512},[167,173019,3145],{"class":184},[167,173021,2452],{"class":177},[167,173023,873],{"class":512},[167,173025,173026],{"class":169,"line":230},[167,173027,741],{"emptyLinePlaceholder":740},[167,173029,173030],{"class":169,"line":241},[167,173031,741],{"emptyLinePlaceholder":740},[167,173033,173034,173037,173039,173041],{"class":169,"line":261},[167,173035,173036],{"class":512},"set_age(",[167,173038,2732],{"class":731},[167,173040,2418],{"class":184},[167,173042,873],{"class":512},[19,173044,173045],{},"调用者可以捕获：",[26,173047,173049],{"className":723,"code":173048,"language":305,"meta":32,"style":32},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[34,173050,173051,173057,173068,173078],{"__ignoreMap":32},[167,173052,173053,173055],{"class":169,"line":170},[167,173054,172473],{"class":731},[167,173056,857],{"class":512},[167,173058,173059,173062,173064,173066],{"class":169,"line":191},[167,173060,173061],{"class":512},"    set_age(",[167,173063,2732],{"class":731},[167,173065,2418],{"class":184},[167,173067,873],{"class":512},[167,173069,173070,173072,173074,173076],{"class":169,"line":205},[167,173071,172485],{"class":731},[167,173073,153817],{"class":184},[167,173075,66593],{"class":731},[167,173077,172817],{"class":512},[167,173079,173080,173082],{"class":169,"line":219},[167,173081,895],{"class":184},[167,173083,68988],{"class":512},[14,173085,173087],{"id":173086},"_98-自定义异常","9.8 自定义异常",[26,173089,173091],{"className":723,"code":173090,"language":305,"meta":32,"style":32},"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",[34,173092,173093,173107,173111,173115,173119,173127,173137,173148,173158,173162,173166,173172,173189,173200],{"__ignoreMap":32},[167,173094,173095,173097,173100,173102,173105],{"class":169,"line":170},[167,173096,16721],{"class":731},[167,173098,173099],{"class":173}," BalanceNotEnoughError",[167,173101,898],{"class":512},[167,173103,173104],{"class":184},"Exception",[167,173106,984],{"class":512},[167,173108,173109],{"class":169,"line":191},[167,173110,151128],{"class":731},[167,173112,173113],{"class":169,"line":205},[167,173114,741],{"emptyLinePlaceholder":740},[167,173116,173117],{"class":169,"line":219},[167,173118,741],{"emptyLinePlaceholder":740},[167,173120,173121,173123,173125],{"class":169,"line":230},[167,173122,845],{"class":731},[167,173124,151777],{"class":173},[167,173126,164403],{"class":512},[167,173128,173129,173131,173133,173135],{"class":169,"line":241},[167,173130,5136],{"class":731},[167,173132,151733],{"class":512},[167,173134,3159],{"class":731},[167,173136,164180],{"class":512},[167,173138,173139,173141,173144,173146],{"class":169,"line":261},[167,173140,105023],{"class":731},[167,173142,173143],{"class":512}," BalanceNotEnoughError(",[167,173145,151828],{"class":177},[167,173147,873],{"class":512},[167,173149,173150,173152,173154,173156],{"class":169,"line":773},[167,173151,6122],{"class":731},[167,173153,164410],{"class":512},[167,173155,2732],{"class":731},[167,173157,151766],{"class":512},[167,173159,173160],{"class":169,"line":779},[167,173161,741],{"emptyLinePlaceholder":740},[167,173163,173164],{"class":169,"line":785},[167,173165,741],{"emptyLinePlaceholder":740},[167,173167,173168,173170],{"class":169,"line":790},[167,173169,172473],{"class":731},[167,173171,857],{"class":512},[167,173173,173174,173176,173178,173181,173183,173185,173187],{"class":169,"line":796},[167,173175,164081],{"class":512},[167,173177,523],{"class":731},[167,173179,173180],{"class":512}," withdraw(",[167,173182,981],{"class":184},[167,173184,14463],{"class":512},[167,173186,3776],{"class":184},[167,173188,873],{"class":512},[167,173190,173191,173193,173196,173198],{"class":169,"line":802},[167,173192,172485],{"class":731},[167,173194,173195],{"class":512}," BalanceNotEnoughError ",[167,173197,33388],{"class":731},[167,173199,172817],{"class":512},[167,173201,173202,173204],{"class":169,"line":808},[167,173203,895],{"class":184},[167,173205,68988],{"class":512},[19,173207,173208],{},"入门阶段大多数情况使用内置异常即可。",[14,173210,173212],{"id":173211},"_99-traceback","9.9 traceback",[19,173214,173215],{},"调试时可以输出完整异常堆栈。",[26,173217,173219],{"className":723,"code":173218,"language":305,"meta":32,"style":32},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[34,173220,173221,173228,173232,173238,173248,173256],{"__ignoreMap":32},[167,173222,173223,173225],{"class":169,"line":170},[167,173224,732],{"class":731},[167,173226,173227],{"class":512}," traceback\n",[167,173229,173230],{"class":169,"line":191},[167,173231,741],{"emptyLinePlaceholder":740},[167,173233,173234,173236],{"class":169,"line":205},[167,173235,172473],{"class":731},[167,173237,857],{"class":512},[167,173239,173240,173242,173244,173246],{"class":169,"line":219},[167,173241,4029],{"class":184},[167,173243,898],{"class":512},[167,173245,157471],{"class":177},[167,173247,873],{"class":512},[167,173249,173250,173252,173254],{"class":169,"line":230},[167,173251,172485],{"class":731},[167,173253,153817],{"class":184},[167,173255,857],{"class":512},[167,173257,173258],{"class":169,"line":241},[167,173259,173260],{"class":512},"    traceback.print_exc()\n",[19,173262,173263],{},"日志系统中常把异常堆栈记录到文件。",[14,173265,173267],{"id":173266},"_910-什么是模块","9.10 什么是模块",[19,173269,173270,173271,127574],{},"模块就是一个 ",[34,173272,147943],{},[19,173274,173275,173276,26640],{},"例如创建 ",[34,173277,173278],{},"my_math.py",[26,173280,173282],{"className":723,"code":173281,"language":305,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[34,173283,173284,173292,173302,173306,173310,173319],{"__ignoreMap":32},[167,173285,173286,173288,173290],{"class":169,"line":170},[167,173287,845],{"class":731},[167,173289,7239],{"class":173},[167,173291,152684],{"class":512},[167,173293,173294,173296,173298,173300],{"class":169,"line":191},[167,173295,6122],{"class":731},[167,173297,12897],{"class":512},[167,173299,2681],{"class":731},[167,173301,152695],{"class":512},[167,173303,173304],{"class":169,"line":205},[167,173305,741],{"emptyLinePlaceholder":740},[167,173307,173308],{"class":169,"line":219},[167,173309,741],{"emptyLinePlaceholder":740},[167,173311,173312,173314,173317],{"class":169,"line":230},[167,173313,845],{"class":731},[167,173315,173316],{"class":173}," sub",[167,173318,152684],{"class":512},[167,173320,173321,173323,173325,173327],{"class":169,"line":241},[167,173322,6122],{"class":731},[167,173324,12897],{"class":512},[167,173326,2732],{"class":731},[167,173328,152695],{"class":512},[19,173330,173331],{},"在另一个文件中导入：",[26,173333,173335],{"className":723,"code":173334,"language":305,"meta":32,"style":32},"import my_math\n\nprint(my_math.add(1, 2))\n",[34,173336,173337,173344,173348],{"__ignoreMap":32},[167,173338,173339,173341],{"class":169,"line":170},[167,173340,732],{"class":731},[167,173342,173343],{"class":512}," my_math\n",[167,173345,173346],{"class":169,"line":191},[167,173347,741],{"emptyLinePlaceholder":740},[167,173349,173350,173352,173355,173357,173359,173361],{"class":169,"line":205},[167,173351,1606],{"class":184},[167,173353,173354],{"class":512},"(my_math.add(",[167,173356,2418],{"class":184},[167,173358,14463],{"class":512},[167,173360,2287],{"class":184},[167,173362,32505],{"class":512},[14,173364,173366],{"id":173365},"_911-import导入","9.11 import导入",[494,173368,173370],{"id":173369},"_9111-导入模块","9.11.1 导入模块",[26,173372,173374],{"className":723,"code":173373,"language":305,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\n",[34,173375,173376,173382,173386],{"__ignoreMap":32},[167,173377,173378,173380],{"class":169,"line":170},[167,173379,732],{"class":731},[167,173381,47328],{"class":512},[167,173383,173384],{"class":169,"line":191},[167,173385,741],{"emptyLinePlaceholder":740},[167,173387,173388,173390,173393,173395,173397,173399],{"class":169,"line":205},[167,173389,1606],{"class":184},[167,173391,173392],{"class":512},"(random.randint(",[167,173394,2418],{"class":184},[167,173396,14463],{"class":512},[167,173398,2646],{"class":184},[167,173400,32505],{"class":512},[494,173402,173404],{"id":173403},"_9112-导入指定内容","9.11.2 导入指定内容",[26,173406,173408],{"className":723,"code":173407,"language":305,"meta":32,"style":32},"from random import randint\n\nprint(randint(1, 10))\n",[34,173409,173410,173421,173425],{"__ignoreMap":32},[167,173411,173412,173414,173416,173418],{"class":169,"line":170},[167,173413,32745],{"class":731},[167,173415,59785],{"class":512},[167,173417,732],{"class":731},[167,173419,173420],{"class":512}," randint\n",[167,173422,173423],{"class":169,"line":191},[167,173424,741],{"emptyLinePlaceholder":740},[167,173426,173427,173429,173432,173434,173436,173438],{"class":169,"line":205},[167,173428,1606],{"class":184},[167,173430,173431],{"class":512},"(randint(",[167,173433,2418],{"class":184},[167,173435,14463],{"class":512},[167,173437,2646],{"class":184},[167,173439,32505],{"class":512},[494,173441,173443],{"id":173442},"_9113-起别名","9.11.3 起别名",[26,173445,173447],{"className":723,"code":173446,"language":305,"meta":32,"style":32},"import random as rd\n\nprint(rd.randint(1, 10))\n",[34,173448,173449,173460,173464],{"__ignoreMap":32},[167,173450,173451,173453,173455,173457],{"class":169,"line":170},[167,173452,732],{"class":731},[167,173454,59785],{"class":512},[167,173456,33388],{"class":731},[167,173458,173459],{"class":512}," rd\n",[167,173461,173462],{"class":169,"line":191},[167,173463,741],{"emptyLinePlaceholder":740},[167,173465,173466,173468,173471,173473,173475,173477],{"class":169,"line":205},[167,173467,1606],{"class":184},[167,173469,173470],{"class":512},"(rd.randint(",[167,173472,2418],{"class":184},[167,173474,14463],{"class":512},[167,173476,2646],{"class":184},[167,173478,32505],{"class":512},[26,173480,173482],{"className":723,"code":173481,"language":305,"meta":32,"style":32},"from random import randint as rint\n\nprint(rint(1, 10))\n",[34,173483,173484,173500,173504],{"__ignoreMap":32},[167,173485,173486,173488,173490,173492,173495,173497],{"class":169,"line":170},[167,173487,32745],{"class":731},[167,173489,59785],{"class":512},[167,173491,732],{"class":731},[167,173493,173494],{"class":512}," randint ",[167,173496,33388],{"class":731},[167,173498,173499],{"class":512}," rint\n",[167,173501,173502],{"class":169,"line":191},[167,173503,741],{"emptyLinePlaceholder":740},[167,173505,173506,173508,173511,173513,173515,173517],{"class":169,"line":205},[167,173507,1606],{"class":184},[167,173509,173510],{"class":512},"(rint(",[167,173512,2418],{"class":184},[167,173514,14463],{"class":512},[167,173516,2646],{"class":184},[167,173518,32505],{"class":512},[494,173520,173522],{"id":173521},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,173524,173526],{"className":723,"code":173525,"language":305,"meta":32,"style":32},"from random import *\n",[34,173527,173528],{"__ignoreMap":32},[167,173529,173530,173532,173534,173536],{"class":169,"line":170},[167,173531,32745],{"class":731},[167,173533,59785],{"class":512},[167,173535,732],{"class":731},[167,173537,173538],{"class":731}," *\n",[19,173540,173541],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173543,173545],{"id":173544},"_912-常用内置模块","9.12 常用内置模块",[494,173547,173549],{"id":173548},"_9121-random","9.12.1 random",[26,173551,173553],{"className":723,"code":173552,"language":305,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[34,173554,173555,173561,173565,173579,173598],{"__ignoreMap":32},[167,173556,173557,173559],{"class":169,"line":170},[167,173558,732],{"class":731},[167,173560,47328],{"class":512},[167,173562,173563],{"class":169,"line":191},[167,173564,741],{"emptyLinePlaceholder":740},[167,173566,173567,173569,173571,173573,173575,173577],{"class":169,"line":205},[167,173568,1606],{"class":184},[167,173570,173392],{"class":512},[167,173572,2418],{"class":184},[167,173574,14463],{"class":512},[167,173576,2646],{"class":184},[167,173578,32505],{"class":512},[167,173580,173581,173583,173586,173588,173590,173592,173594,173596],{"class":169,"line":219},[167,173582,1606],{"class":184},[167,173584,173585],{"class":512},"(random.choice([",[167,173587,151479],{"class":177},[167,173589,14463],{"class":512},[167,173591,152527],{"class":177},[167,173593,14463],{"class":512},[167,173595,161322],{"class":177},[167,173597,35146],{"class":512},[167,173599,173600,173602,173605,173607,173609,173611,173613,173615,173617,173619,173621,173623,173625,173627],{"class":169,"line":230},[167,173601,1606],{"class":184},[167,173603,173604],{"class":512},"(random.sample([",[167,173606,2418],{"class":184},[167,173608,14463],{"class":512},[167,173610,2287],{"class":184},[167,173612,14463],{"class":512},[167,173614,2281],{"class":184},[167,173616,14463],{"class":512},[167,173618,2494],{"class":184},[167,173620,14463],{"class":512},[167,173622,2519],{"class":184},[167,173624,113793],{"class":512},[167,173626,2287],{"class":184},[167,173628,32505],{"class":512},[494,173630,173632],{"id":173631},"_9122-time","9.12.2 time",[26,173634,173636],{"className":723,"code":173635,"language":305,"meta":32,"style":32},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[34,173637,173638,173644,173648,173655,173663],{"__ignoreMap":32},[167,173639,173640,173642],{"class":169,"line":170},[167,173641,732],{"class":731},[167,173643,33834],{"class":512},[167,173645,173646],{"class":169,"line":191},[167,173647,741],{"emptyLinePlaceholder":740},[167,173649,173650,173652],{"class":169,"line":205},[167,173651,1606],{"class":184},[167,173653,173654],{"class":512},"(time.time())\n",[167,173656,173657,173659,173661],{"class":169,"line":219},[167,173658,97057],{"class":512},[167,173660,2418],{"class":184},[167,173662,873],{"class":512},[167,173664,173665,173667,173669,173672],{"class":169,"line":230},[167,173666,1606],{"class":184},[167,173668,898],{"class":512},[167,173670,173671],{"class":177},"\"1秒后执行\"",[167,173673,873],{"class":512},[494,173675,173677],{"id":173676},"_9123-datetime","9.12.3 datetime",[26,173679,173681],{"className":723,"code":173680,"language":305,"meta":32,"style":32},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[34,173682,173683,173695,173699,173709,173716],{"__ignoreMap":32},[167,173684,173685,173687,173690,173692],{"class":169,"line":170},[167,173686,32745],{"class":731},[167,173688,173689],{"class":512}," datetime ",[167,173691,732],{"class":731},[167,173693,173694],{"class":512}," datetime\n",[167,173696,173697],{"class":169,"line":191},[167,173698,741],{"emptyLinePlaceholder":740},[167,173700,173701,173704,173706],{"class":169,"line":205},[167,173702,173703],{"class":512},"now ",[167,173705,523],{"class":731},[167,173707,173708],{"class":512}," datetime.now()\n",[167,173710,173711,173713],{"class":169,"line":219},[167,173712,1606],{"class":184},[167,173714,173715],{"class":512},"(now)\n",[167,173717,173718,173720,173723,173726,173728,173731],{"class":169,"line":230},[167,173719,1606],{"class":184},[167,173721,173722],{"class":512},"(now.strftime(",[167,173724,173725],{"class":177},"\"%Y-%m-",[167,173727,158282],{"class":184},[167,173729,173730],{"class":177}," %H:%M:%S\"",[167,173732,32505],{"class":512},[494,173734,173736],{"id":173735},"_9124-os","9.12.4 os",[26,173738,173740],{"className":723,"code":173739,"language":305,"meta":32,"style":32},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[34,173741,173742,173748,173752,173759],{"__ignoreMap":32},[167,173743,173744,173746],{"class":169,"line":170},[167,173745,732],{"class":731},[167,173747,47305],{"class":512},[167,173749,173750],{"class":169,"line":191},[167,173751,741],{"emptyLinePlaceholder":740},[167,173753,173754,173756],{"class":169,"line":205},[167,173755,1606],{"class":184},[167,173757,173758],{"class":512},"(os.getcwd())\n",[167,173760,173761,173763,173766,173769],{"class":169,"line":219},[167,173762,1606],{"class":184},[167,173764,173765],{"class":512},"(os.listdir(",[167,173767,173768],{"class":177},"\".\"",[167,173770,32505],{"class":512},[494,173772,173774],{"id":173773},"_9125-sys","9.12.5 sys",[26,173776,173778],{"className":723,"code":173777,"language":305,"meta":32,"style":32},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[34,173779,173780,173787,173791,173798],{"__ignoreMap":32},[167,173781,173782,173784],{"class":169,"line":170},[167,173783,732],{"class":731},[167,173785,173786],{"class":512}," sys\n",[167,173788,173789],{"class":169,"line":191},[167,173790,741],{"emptyLinePlaceholder":740},[167,173792,173793,173795],{"class":169,"line":205},[167,173794,1606],{"class":184},[167,173796,173797],{"class":512},"(sys.version)\n",[167,173799,173800,173802],{"class":169,"line":219},[167,173801,1606],{"class":184},[167,173803,173804],{"class":512},"(sys.path)\n",[14,173806,173808,173809,173811,173812,2452],{"id":173807},"_913-if-name-main","9.13 if ",[2354,173810,81797],{}," == \"",[2354,173813,1547],{},[19,173815,173816,173817,173820],{},"模块被直接运行和被导入时，",[34,173818,173819],{},"__name__"," 的值不同。",[19,173822,173823,173824,26640],{},"创建 ",[34,173825,173826],{},"my_module.py",[26,173828,173830],{"className":723,"code":173829,"language":305,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[34,173831,173832,173840,173850,173854,173858,173870],{"__ignoreMap":32},[167,173833,173834,173836,173838],{"class":169,"line":170},[167,173835,845],{"class":731},[167,173837,7239],{"class":173},[167,173839,152684],{"class":512},[167,173841,173842,173844,173846,173848],{"class":169,"line":191},[167,173843,6122],{"class":731},[167,173845,12897],{"class":512},[167,173847,2681],{"class":731},[167,173849,152695],{"class":512},[167,173851,173852],{"class":169,"line":205},[167,173853,741],{"emptyLinePlaceholder":740},[167,173855,173856],{"class":169,"line":219},[167,173857,741],{"emptyLinePlaceholder":740},[167,173859,173860,173862,173864,173866,173868],{"class":169,"line":230},[167,173861,1035],{"class":731},[167,173863,1038],{"class":184},[167,173865,1041],{"class":731},[167,173867,1044],{"class":177},[167,173869,857],{"class":512},[167,173871,173872,173874,173876,173878,173880,173882],{"class":169,"line":241},[167,173873,895],{"class":184},[167,173875,168191],{"class":512},[167,173877,2418],{"class":184},[167,173879,14463],{"class":512},[167,173881,2287],{"class":184},[167,173883,32505],{"class":512},[19,173885,173886],{},"作用：",[40,173888,173889,173892],{},[43,173890,173891],{},"直接运行该文件时，执行测试代码。",[43,173893,173894],{},"被其他文件导入时，不执行测试代码。",[19,173896,173897],{},"这是写模块时很常用的习惯。",[14,173899,173901],{"id":173900},"_914-包","9.14 包",[19,173903,173904,173905,173908],{},"包是包含 ",[34,173906,173907],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173910,173911],{},"目录结构：",[26,173913,173916],{"className":173914,"code":173915,"language":31,"meta":32},[29],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[34,173917,173915],{"__ignoreMap":32},[19,173919,173920],{},"导入：",[26,173922,173924],{"className":723,"code":173923,"language":305,"meta":32,"style":32},"from utils.file_utils import read_file\n",[34,173925,173926],{"__ignoreMap":32},[167,173927,173928,173930,173933,173935],{"class":169,"line":170},[167,173929,32745],{"class":731},[167,173931,173932],{"class":512}," utils.file_utils ",[167,173934,732],{"class":731},[167,173936,173937],{"class":512}," read_file\n",[19,173939,173940,173942],{},[34,173941,173907],{}," 可以为空，也可以写包初始化逻辑。",[14,173944,173946],{"id":173945},"_915-第三方包","9.15 第三方包",[19,173948,173949,173950,173952],{},"第三方包通过 ",[34,173951,331],{}," 安装。",[26,173954,173956],{"className":161,"code":173955,"language":163,"meta":32,"style":32},"pip install requests\n",[34,173957,173958],{"__ignoreMap":32},[167,173959,173960,173962,173964],{"class":169,"line":170},[167,173961,331],{"class":173},[167,173963,181],{"class":177},[167,173965,147689],{"class":177},[19,173967,173968],{},"使用：",[26,173970,173972],{"className":723,"code":173971,"language":305,"meta":32,"style":32},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[34,173973,173974,173980,173984,173999],{"__ignoreMap":32},[167,173975,173976,173978],{"class":169,"line":170},[167,173977,732],{"class":731},[167,173979,147689],{"class":512},[167,173981,173982],{"class":169,"line":191},[167,173983,741],{"emptyLinePlaceholder":740},[167,173985,173986,173989,173991,173994,173997],{"class":169,"line":205},[167,173987,173988],{"class":512},"response ",[167,173990,523],{"class":731},[167,173992,173993],{"class":512}," requests.get(",[167,173995,173996],{"class":177},"\"https:\u002F\u002Fwww.example.com\"",[167,173998,873],{"class":512},[167,174000,174001,174003],{"class":169,"line":219},[167,174002,1606],{"class":184},[167,174004,174005],{"class":512},"(response.status_code)\n",[19,174007,174008],{},"查看已安装包：",[26,174010,174012],{"className":161,"code":174011,"language":163,"meta":32,"style":32},"pip list\n",[34,174013,174014],{"__ignoreMap":32},[167,174015,174016,174018],{"class":169,"line":170},[167,174017,331],{"class":173},[167,174019,120546],{"class":177},[19,174021,174022],{},"导出项目依赖：",[26,174024,174025],{"className":161,"code":147884,"language":163,"meta":32,"style":32},[34,174026,174027],{"__ignoreMap":32},[167,174028,174029,174031,174033,174035],{"class":169,"line":170},[167,174030,331],{"class":173},[167,174032,147893],{"class":177},[167,174034,28241],{"class":731},[167,174036,147898],{"class":177},[19,174038,174039],{},"安装项目依赖：",[26,174041,174042],{"className":161,"code":147904,"language":163,"meta":32,"style":32},[34,174043,174044],{"__ignoreMap":32},[167,174045,174046,174048,174050,174052],{"class":169,"line":170},[167,174047,331],{"class":173},[167,174049,181],{"class":177},[167,174051,121230],{"class":184},[167,174053,147898],{"class":177},[14,174055,174057],{"id":174056},"_916-模块搜索路径","9.16 模块搜索路径",[19,174059,174060,174061,174064],{},"Python 导入模块时会在 ",[34,174062,174063],{},"sys.path"," 中查找。",[26,174066,174068],{"className":723,"code":174067,"language":305,"meta":32,"style":32},"import sys\n\nfor path in sys.path:\n    print(path)\n",[34,174069,174070,174076,174080,174092],{"__ignoreMap":32},[167,174071,174072,174074],{"class":169,"line":170},[167,174073,732],{"class":731},[167,174075,173786],{"class":512},[167,174077,174078],{"class":169,"line":191},[167,174079,741],{"emptyLinePlaceholder":740},[167,174081,174082,174084,174087,174089],{"class":169,"line":205},[167,174083,1168],{"class":731},[167,174085,174086],{"class":512}," path ",[167,174088,973],{"class":731},[167,174090,174091],{"class":512}," sys.path:\n",[167,174093,174094,174096],{"class":169,"line":219},[167,174095,895],{"class":184},[167,174097,170820],{"class":512},[19,174099,174100],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174102,159214],{},[26,174104,174107],{"className":174105,"code":174106,"language":31,"meta":32},[29],"random.py\njson.py\ntime.py\n",[34,174108,174106],{"__ignoreMap":32},[19,174110,174111],{},"这些文件名可能导致导入异常。",[14,174113,174115],{"id":174114},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174117,173911],{},[26,174119,174122],{"className":174120,"code":174121,"language":31,"meta":32},[29],"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",[34,174123,174121],{"__ignoreMap":32},[19,174125,174126,26640],{},[34,174127,174128],{},"utils\u002Ffile_utils.py",[26,174130,174132],{"className":723,"code":174131,"language":305,"meta":32,"style":32},"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",[34,174133,174134,174140,174150,174154,174158,174168,174178,174186,174192,174196,174223,174233,174237,174241,174251,174277],{"__ignoreMap":32},[167,174135,174136,174138],{"class":169,"line":170},[167,174137,732],{"class":731},[167,174139,148682],{"class":512},[167,174141,174142,174144,174146,174148],{"class":169,"line":191},[167,174143,32745],{"class":731},[167,174145,109902],{"class":512},[167,174147,732],{"class":731},[167,174149,109907],{"class":512},[167,174151,174152],{"class":169,"line":205},[167,174153,741],{"emptyLinePlaceholder":740},[167,174155,174156],{"class":169,"line":219},[167,174157,741],{"emptyLinePlaceholder":740},[167,174159,174160,174162,174165],{"class":169,"line":230},[167,174161,845],{"class":731},[167,174163,174164],{"class":173}," read_json",[167,174166,174167],{"class":512},"(path):\n",[167,174169,174170,174173,174175],{"class":169,"line":241},[167,174171,174172],{"class":512},"    path ",[167,174174,523],{"class":731},[167,174176,174177],{"class":512}," Path(path)\n",[167,174179,174180,174182,174184],{"class":169,"line":261},[167,174181,5136],{"class":731},[167,174183,40931],{"class":731},[167,174185,170901],{"class":512},[167,174187,174188,174190],{"class":169,"line":773},[167,174189,16779],{"class":731},[167,174191,53834],{"class":512},[167,174193,174194],{"class":169,"line":779},[167,174195,741],{"emptyLinePlaceholder":740},[167,174197,174198,174200,174202,174205,174207,174209,174211,174213,174215,174217,174219,174221],{"class":169,"line":785},[167,174199,36180],{"class":731},[167,174201,148382],{"class":184},[167,174203,174204],{"class":512},"(path, ",[167,174206,148392],{"class":177},[167,174208,14463],{"class":512},[167,174210,148397],{"class":7246},[167,174212,523],{"class":731},[167,174214,148402],{"class":177},[167,174216,15741],{"class":512},[167,174218,33388],{"class":731},[167,174220,149744],{"class":7246},[167,174222,857],{"class":512},[167,174224,174225,174227,174229,174231],{"class":169,"line":790},[167,174226,16779],{"class":731},[167,174228,149755],{"class":512},[167,174230,47354],{"class":7246},[167,174232,873],{"class":512},[167,174234,174235],{"class":169,"line":796},[167,174236,741],{"emptyLinePlaceholder":740},[167,174238,174239],{"class":169,"line":802},[167,174240,741],{"emptyLinePlaceholder":740},[167,174242,174243,174245,174248],{"class":169,"line":808},[167,174244,845],{"class":731},[167,174246,174247],{"class":173}," write_json",[167,174249,174250],{"class":512},"(path, data):\n",[167,174252,174253,174255,174257,174259,174261,174263,174265,174267,174269,174271,174273,174275],{"class":169,"line":814},[167,174254,36180],{"class":731},[167,174256,148382],{"class":184},[167,174258,174204],{"class":512},[167,174260,153567],{"class":177},[167,174262,14463],{"class":512},[167,174264,148397],{"class":7246},[167,174266,523],{"class":731},[167,174268,148402],{"class":177},[167,174270,15741],{"class":512},[167,174272,33388],{"class":731},[167,174274,149744],{"class":7246},[167,174276,857],{"class":512},[167,174278,174279,174282,174284,174286,174288,174290,174292,174294,174296,174298,174300],{"class":169,"line":820},[167,174280,174281],{"class":512},"        json.dump(data, ",[167,174283,47354],{"class":7246},[167,174285,14463],{"class":512},[167,174287,148728],{"class":7246},[167,174289,523],{"class":731},[167,174291,35989],{"class":184},[167,174293,14463],{"class":512},[167,174295,153603],{"class":7246},[167,174297,523],{"class":731},[167,174299,2287],{"class":184},[167,174301,873],{"class":512},[19,174303,174304,26640],{},[34,174305,156198],{},[26,174307,174309],{"className":723,"code":174308,"language":305,"meta":32,"style":32},"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",[34,174310,174311,174322,174326,174339,174359],{"__ignoreMap":32},[167,174312,174313,174315,174317,174319],{"class":169,"line":170},[167,174314,32745],{"class":731},[167,174316,173932],{"class":512},[167,174318,732],{"class":731},[167,174320,174321],{"class":512}," read_json, write_json\n",[167,174323,174324],{"class":169,"line":191},[167,174325,741],{"emptyLinePlaceholder":740},[167,174327,174328,174330,174332,174335,174337],{"class":169,"line":205},[167,174329,161307],{"class":512},[167,174331,523],{"class":731},[167,174333,174334],{"class":512}," read_json(",[167,174336,153422],{"class":177},[167,174338,873],{"class":512},[167,174340,174341,174343,174345,174347,174349,174351,174353,174355,174357],{"class":169,"line":219},[167,174342,172125],{"class":512},[167,174344,64668],{"class":177},[167,174346,53435],{"class":512},[167,174348,151479],{"class":177},[167,174350,14463],{"class":512},[167,174352,153063],{"class":177},[167,174354,53435],{"class":512},[167,174356,3188],{"class":184},[167,174358,166743],{"class":512},[167,174360,174361,174364,174366],{"class":169,"line":230},[167,174362,174363],{"class":512},"write_json(",[167,174365,153422],{"class":177},[167,174367,174368],{"class":512},", students)\n",[14,174370,174372],{"id":174371},"_918-易错点","9.18 易错点",[40,174374,174375,174378,174383,174388,174391,174394],{},[43,174376,174377],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[43,174379,174380,174381,423],{},"能指定异常类型就不要裸写 ",[34,174382,172485],{},[43,174384,174385,174387],{},[34,174386,172860],{}," 无论是否出错都会执行。",[43,174389,174390],{},"模块文件名不要和标准库重名。",[43,174392,174393],{},"导入自己写的模块时，要注意运行目录。",[43,174395,174396],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174398,174400],{"id":174399},"_919-本章练习","9.19 本章练习",[40,174402,174403,174406,174409,174415,174422],{},[43,174404,174405],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[43,174407,174408],{},"写函数读取文件，如果文件不存在则返回空字符串。",[43,174410,173823,174411,174414],{},[34,174412,174413],{},"math_utils.py","，实现加减乘除函数并导入使用。",[43,174416,174417,174418,174421],{},"创建一个 ",[34,174419,174420],{},"utils"," 包，把 JSON 读写函数放进去。",[43,174423,174424],{},"写一个程序，捕获除零异常和输入格式异常。",[2113,174426,174427],{},"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":32,"searchDepth":191,"depth":191,"links":174429},[174430,174431,174432,174433,174434,174435,174436,174437,174438,174439,174440,174446,174453,174455,174456,174457,174458,174459,174460],{"id":172282,"depth":191,"text":172283},{"id":172410,"depth":191,"text":172411},{"id":172459,"depth":191,"text":172460},{"id":172608,"depth":191,"text":172609},{"id":172780,"depth":191,"text":172781},{"id":172849,"depth":191,"text":172850},{"id":172960,"depth":191,"text":172961},{"id":173086,"depth":191,"text":173087},{"id":173211,"depth":191,"text":173212},{"id":173266,"depth":191,"text":173267},{"id":173365,"depth":191,"text":173366,"children":174441},[174442,174443,174444,174445],{"id":173369,"depth":205,"text":173370},{"id":173403,"depth":205,"text":173404},{"id":173442,"depth":205,"text":173443},{"id":173521,"depth":205,"text":173522},{"id":173544,"depth":191,"text":173545,"children":174447},[174448,174449,174450,174451,174452],{"id":173548,"depth":205,"text":173549},{"id":173631,"depth":205,"text":173632},{"id":173676,"depth":205,"text":173677},{"id":173735,"depth":205,"text":173736},{"id":173773,"depth":205,"text":173774},{"id":173807,"depth":191,"text":174454},"9.13 if name == \"main\"",{"id":173900,"depth":191,"text":173901},{"id":173945,"depth":191,"text":173946},{"id":174056,"depth":191,"text":174057},{"id":174114,"depth":191,"text":174115},{"id":174371,"depth":191,"text":174372},{"id":174399,"depth":191,"text":174400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172274,"description":25403},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174467,"title":174468,"body":174469,"description":174632,"extension":2140,"meta":174633,"navigation":740,"path":174634,"seo":174635,"stem":174636,"__hash__":174637},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174470,"toc":174627},[174471,174474,174477,174480,174491,174493,174567,174570,174573,174576,174579,174582,174585,174588,174591,174594,174597],[10,174472,174468],{"id":174473},"python教程",[19,174475,174476],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174478,174479],{},"建议学习环境：",[40,174481,174482,174485,174488],{},[43,174483,174484],{},"Python 版本：Python 3.10 及以上。",[43,174486,174487],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[43,174489,174490],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174492,118669],{"id":118669},[40,174494,174495,174501,174507,174513,174519,174525,174531,174537,174543,174549,174555,174561],{},[43,174496,174497],{},[2439,174498,174500],{"href":174499},".\u002Fch1-Python","Python环境与第一个程序",[43,174502,174503],{},[2439,174504,174506],{"href":174505},".\u002Fch2","基础语法、变量与字符串",[43,174508,174509],{},[2439,174510,174512],{"href":174511},".\u002Fch3","判断语句",[43,174514,174515],{},[2439,174516,174518],{"href":174517},".\u002Fch4","循环语句",[43,174520,174521],{},[2439,174522,174524],{"href":174523},".\u002Fch5","函数基础",[43,174526,174527],{},[2439,174528,174530],{"href":174529},".\u002Fch6","数据容器",[43,174532,174533],{},[2439,174534,174536],{"href":174535},".\u002Fch7","函数进阶",[43,174538,174539],{},[2439,174540,174542],{"href":174541},".\u002Fch8","文件操作",[43,174544,174545],{},[2439,174546,174548],{"href":174547},".\u002Fch9","异常、模块与包",[43,174550,174551],{},[2439,174552,174554],{"href":174553},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[43,174556,174557],{},[2439,174558,174560],{"href":174559},".\u002Fch11","面向对象基础",[43,174562,174563],{},[2439,174564,174566],{"href":174565},".\u002Fch12","综合案例与复习路线",[14,174568,174569],{"id":174569},"学习路线",[19,174571,174572],{},"第一阶段：能运行程序。",[19,174574,174575],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174577,174578],{},"第二阶段：能组织数据。",[19,174580,174581],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174583,174584],{},"第三阶段：能封装逻辑。",[19,174586,174587],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174589,174590],{},"第四阶段：能做小项目。",[19,174592,174593],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174595,174596],{"id":174596},"参考资料",[40,174598,174599,174606,174613,174620],{},[43,174600,174601,174602],{},"黑马程序员 Python 入门教程推荐：",[2439,174603,174604],{"href":174604,"rel":174605},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25887],[43,174607,174608,174609],{},"Python 官方中文教程：",[2439,174610,174611],{"href":174611,"rel":174612},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25887],[43,174614,174615,174616],{},"Python 标准库文档：",[2439,174617,174618],{"href":174618,"rel":174619},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25887],[43,174621,174622,174623],{},"pyecharts 文档：",[2439,174624,174625],{"href":174625,"rel":174626},"https:\u002F\u002Fpyecharts.org\u002F",[25887],{"title":32,"searchDepth":191,"depth":191,"links":174628},[174629,174630,174631],{"id":118669,"depth":191,"text":118669},{"id":174569,"depth":191,"text":174569},{"id":174596,"depth":191,"text":174596},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25405},"\u002Fwiki\u002F2024-10-10-python",{"title":174468,"description":174632},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469357]